diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..8c770f6 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,142 @@ +name: Build alsa-tools + +on: [push, pull_request] + +jobs: + fedora_latest_build: + runs-on: ubuntu-latest + container: + image: fedora:latest + env: + QTDIR: /usr/lib64/qt-3.3 + steps: + - name: Prepare environment + run: | + dnf -y upgrade + dnf -y install @development-tools gcc-c++ libtool bzip2 gtk2-devel gtk3-devel fltk-devel qt3-devel + + - name: Checkout alsa-lib + uses: actions/checkout@v4 + with: + repository: alsa-project/alsa-lib + ref: master + path: alsa-lib + - name: Configure alsa-lib + run: | + cd alsa-lib + head -5 configure.ac + libtoolize --force --copy --automake + aclocal + autoheader + automake --foreign --copy --add-missing + autoconf + export CFLAGS="-O2 -Wall -W -Wunused-const-variable=0 -pipe -g" + ./configure + echo "Version: $(cat version)" + - name: Build alsa-lib + run: | + cd alsa-lib + make + - name: Install alsa-lib + run: | + cd alsa-lib + make install + + - name: Checkout + uses: actions/checkout@v4 + with: + path: alsa-tools + - name: Checkout all tags + run: | + cd alsa-tools + git fetch --prune --tags --force + git fetch --prune --unshallow --force + - name: Modify version + run: | + cd alsa-tools + mv Makefile Makefile.old + version=$(git describe | sed -e 's/v//') + if test -z "$version"; then version=$(git describe --tags | sed -e 's/v//'); fi + if test -z "$version"; then version1=$(grep "VERSION = .*" Makefile.old | cut -d ' ' -f 3); version2=$(git rev-parse --short HEAD); version="${version1}-g${version2}"; fi + echo "Version: ${version}" + sed -r "s/VERSION = .*/VERSION = ${version}/" < Makefile.old > Makefile + grep "VERSION =" Makefile + - name: Compile and install as10k1 (dependency) + run: | + cd alsa-tools/as10k1 + ./gitcompile --prefix=/usr + make install + - name: Compile and install ld10k1 (dependency) + run: | + cd alsa-tools/ld10k1 + ./gitcompile --prefix=/usr + make install + - name: Configure and build + run: | + cd alsa-tools + ./gitcompile + - name: Create package + run: | + cd alsa-tools + make alsa-dist + mkdir ../artifacts + mv alsa-tools*.tar.bz2 ../artifacts + - name: Archive package + uses: actions/upload-artifact@v4 + with: + name: alsa-tools-test-package + path: artifacts/ + + ubuntu_last_build: + runs-on: ubuntu-latest + container: + image: ubuntu:latest + steps: + - name: Prepare + run: | + export DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get -y install apt-utils + apt-get -y full-upgrade + apt-get install -y git build-essential pkg-config m4 autoconf automake libtool ibgtk2.0-dev libgtk-3-dev libfltk1.3-dev + + - name: Checkout alsa-lib + uses: actions/checkout@v4 + with: + repository: alsa-project/alsa-lib + ref: master + - name: Configure alsa-lib + run: | + libtoolize --force --copy --automake + aclocal + autoheader + automake --foreign --copy --add-missing + autoconf + export CFLAGS="-O2 -Wall -W -Wunused-const-variable=0 -pipe -g" + ./configure + - name: Build alsa-lib + run: | + make + - name: Install alsa-lib + run: | + make install + + - name: Checkout + uses: actions/checkout@v4 + - name: Remove qlo10k1 + run: | + mv Makefile Makefile.old + sed -e 's/qlo10k1//' < Makefile.old > Makefile + - name: Compile and install as10k1 (dependency) + run: | + cd as10k1 + ./gitcompile --prefix=/usr + make install + - name: Compile and install ld10k1 (dependency) + run: | + cd ld10k1 + ./gitcompile --prefix=/usr + make install + - name: Configure and build + run: | + ./gitcompile diff --git a/.gitignore b/.gitignore index 98a34f3..0909477 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ autom4te.cache stamp-h1 version distdir +*/compile ac3dec/Makefile ac3dec/ac3dec @@ -45,24 +46,38 @@ as10k1/configure echomixer/echomixer echomixer/Makefile echomixer/configure +echomixer/desktop/Makefile envy24control/Makefile envy24control/configure -hdspconf/src/hdspconf +envy24control/desktop/Makefile +hdspconf/Makefile hdspconf/configure -hdspmixer/src/hdspmixer +hdspconf/src/hdspconf +hdspconf/src/Makefile +hdspconf/pixmaps/Makefile +hdspconf/desktop/Makefile +hdspmixer/Makefile hdspmixer/configure +hdspmixer/src/hdspmixer +hdspmixer/pixmaps/Makefile +hdspmixer/desktop/Makefile +hdspmixer/src/Makefile hdsploader/Makefile hdsploader/configure +hwmixvolume/Makefile +hwmixvolume/configure +hwmixvolume/desktop/Makefile ld10k1/Makefile -ld10k1/compile ld10k1/ld10k1d ld10k1/configure +ld10k1/m4/ ld10k1/contrib/Makefile ld10k1/contrib/emu10k1MIDIEffects/Makefile ld10k1/doc/Makefile ld10k1/dump/Makefile ld10k1/include/Makefile ld10k1/include/lo10k1 +ld10k1/include/stamp-vh ld10k1/setup/init_audigy ld10k1/setup/init_audigy_eq10 ld10k1/setup/init_live @@ -78,13 +93,16 @@ mixartloader/Makefile mixartloader/configure pcxhrloader/Makefile pcxhrloader/configure +qlo10k1/Makefile qlo10k1/configure qlo10k1/include qlo10k1/ld10k1 +qlo10k1/src/Makefile qlo10k1/src/*.moc.cpp qlo10k1/src/qlo10k1 qlo10k1/src/dlgs/*.cpp qlo10k1/src/dlgs/*.h +qlo10k1/m4/ rmedigicontrol/Makefile rmedigicontrol/configure *control/*control @@ -106,3 +124,14 @@ vxloader/Makefile vxloader/configure usx2yloader/tascam_fpga usx2yloader/tascam_fw +hdajackretask/configure +hdajackretask/Makefile +hdajackretask/README.generated.h +hdajackretask/hdajackretask +hdajackretask/desktop/Makefile +hdajacksensetest/Makefile +hdajacksensetest/configure +hdajacksensetest/hdajacksensetest +hda-verb/Makefile +hda-verb/configure +hda-verb/hda-verb diff --git a/Makefile b/Makefile index 3668cd4..1a94611 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,9 @@ -VERSION = 1.0.22 +VERSION = 1.2.14 TOP = . -SUBDIRS = ac3dec as10k1 envy24control hdsploader hdspconf hdspmixer \ +SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ - us428control usx2yloader vxloader echomixer ld10k1 qlo10k1 + us428control usx2yloader vxloader echomixer ld10k1 qlo10k1 \ + hwmixvolume hdajackretask hda-verb hdajacksensetest all: @for i in $(SUBDIRS); do \ @@ -28,7 +29,7 @@ install: done alsa-dist: - @echo $(VERSION) >> $(TOP)/version + @echo $(VERSION) > $(TOP)/version @mkdir -p $(TOP)/distdir @for i in $(SUBDIRS); do \ cd $(TOP)/$$i; echo $(TOP)/$$i; \ diff --git a/ac3dec/COPYING b/ac3dec/COPYING deleted file mode 100644 index 5b6e7c6..0000000 --- a/ac3dec/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - 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 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/ac3dec/Changelog b/ac3dec/Changelog deleted file mode 100644 index fba3daf..0000000 --- a/ac3dec/Changelog +++ /dev/null @@ -1,58 +0,0 @@ -ac3dec-0.6.1 Mon Mar 27 20:27:06 EST 2000 --Fix another 2.0 problem (rematrix was wrong). --Fix the never resync on a bad crc bug. - -ac3dec-0.6.0 Sat Mar 18 19:43:25 EST 2000 --New library interface --Fix bug wrt coupling channels that was causing sound quality problems. --Fix 2.0 mode problems (aka the I forgot to implement the phase flags bug). --All around speed improvements (almost twice as fast) --Improved robustness when fed bad data. The entire frame is checksummed before playback. - -ac3dec-0.5.6 Tue Nov 16 00:37:34 EST 1999 --Irix support --Alpha fixes --Minor performance enhancements to downmix and imdct --OpenBSD fixes --extract_ac3 can now read from stdin --Change output_linux to block on write instead of using the - ring buffer. Let me know if this causes/fixes any problems - -ac3dec-0.5.5 Wed Aug 25 15:36:44 EDT 1999 --Fixed a cut and paste bug (argh!) in parse.c which potentially - screwed up delta bit allocation info. --Martin Mueller informed me that I was missing - some corrections from the AC-3 errata document. It turns out that - I used an earlier version of the errata when I initially wrote ac3dec. - Fortunately the errata fix the outstanding bugs that I was pulling - my hair out on for a long time. Woohoo! Thanks Martin. Kudos to Dolby - Labs for keeping their documentation up to date as well. --stereo downmixing (downmix.c) is now in. Matrix encoded surround - (Dolby Prologic Surround) should work too. --clipping due to high level signals has been fixed. We normalize a - block of samples by its maximum absolute value if the max exceeds - the %100 digital level. This shouldn't be a problem, but for some - reason some channels have a dynamic range that exceeds [-1.0,1.0]. - I blame the encoder :) --Multiple track support in extract_ac3. Simply just give it the track - number you want [1,8] after the filename. - -ac3dec-0.5.4 Thu Jul 29 16:55:10 PDT 1999 --Fixed a stupid bug with the coupling channel that was causing - high frequencies to be attenuated. --Re-wrote the extract_ac3 tool. --Added to a tool to verify the checksums on a given AC3 stream. - (tools/verify_ac3) - -ac3dec-0.5.3 Mon Jul 12 10:45:56 PDT 1999 --Fixed problems related to streams with coupling channel enabled. --Minor performance enhancements - -ac3dec-0.5.2 Sun Jul 4 12:00:25 PDT 1999 --output_linux.c patch provided by Michael Holzt - -ac3dec-0.5.1 Wed Jun 30 17:48:52 PDT 1999 --Compiles and dies gracefully under Linux now. - -ac3dec-0.5.0 Wed Jun 23 11:06:06 EDT 1999 --First public release of ac3dec. diff --git a/ac3dec/Makefile.am b/ac3dec/Makefile.am deleted file mode 100644 index bc1b2a5..0000000 --- a/ac3dec/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -# # Process this file with automake to produce Makefile.in. -AUTOMAKE_OPTIONS = 1.3 foreign - -bin_PROGRAMS = ac3dec - -ac3dec_LDADD= -L./libac3 -lac3 -lm - -noinst_HEADERS = output.h -ac3dec_SOURCES = ac3dec.c output.c ac3spdif.c -ac3dec_DEPENDENCIES = libac3/libac3.a - - -EXTRA_DIST = gitcompile README Changelog TODO plot_spectrum.m autogen.sh \ - depcomp - -SUBDIRS = libac3 tools test . - -alsa-dist: distdir - @rm -rf ../distdir/ac3dec - @mkdir -p ../distdir/ac3dec - @cp -RLpv $(distdir)/* ../distdir/ac3dec - @rm -rf $(distdir) diff --git a/ac3dec/README b/ac3dec/README deleted file mode 100644 index 19e3a49..0000000 --- a/ac3dec/README +++ /dev/null @@ -1,52 +0,0 @@ -ac3dec - a free AC-3 stream decoder - -Written by Aaron Holtzman (aholtzma@engr.uvic.ca) - -Contributors: - Michael Holzt - OSS output.c and misc errata - Jim Miller - IRIX output.c - Angelos Keromytis - OpenBSD fixes - Don Mahurin - stdin support for extract_ac3 - Takefumi SAYO - FreeBSD tweak - Charles M. Hannum - fixes - - -See the file COPYING for license details. - -The currently supported platforms are Linux, Solaris, IRIX, OpenBSD, and -FreeBSD. If you want support for other platforms, take a look at -output_*.c for an idea of what you need to do. - -This software is completely useless to 99.99 percent of users -out there. It is mostly of use to those interested in audio -coding research and evaluating codecs. It could theoretically -be used as a portion of a DVD playback system for unix systems. - -HOW TO COMPILE - -Building ac3dec should be easy. Here's how: - -./configure && make all - -USAGE - -To find AC-3 streams on the internet, use www.google.com and -search for "vob trailer". A vob is a "Video Object" which is -just an MPEG-2 stream. The site www.hollywood.com has a -few good MPEG-2s with AC-3 audio. The program tools/extract_ac3 -will take an MPEG-2 stream and spit out AC-3 audio to stdout if -it exists. You can easily pipe this data to the ac3 player like -this: - - ./tools/extract_ac3 foo.vob | ./ac3dec/ - -You can also get AC-3 streams on a DVD. Check out -http://www.linuxvideo.org for details. - -DEBUG OUTPUT - -You can get a whole pile of debug info by setting the environment -variable AC3_DEBUG=1. Be sure to pipe stderr to a file or you probably -won't get realtime playback. You can pipe stderr to a file like so: - - ./ac3dec foo.ac3 2> debug.out diff --git a/ac3dec/TODO b/ac3dec/TODO deleted file mode 100644 index 02e0894..0000000 --- a/ac3dec/TODO +++ /dev/null @@ -1,22 +0,0 @@ -- Detect hrtime on solaris and enable it via config.h -- Add multilevel debug output -- change the divides/moduluos in coeff_get_mantissa to table - lookups. Need to look at stats first though. -- rewrite imdct to use split 2/4 radix fft -- investigate strangeness in 256 point imdct (weird transients?) - - -DONE -- fix the bitstream interface to allow on aligned buffers - Feb 2000 -AH -- change dither.c, crc.c to use a lookup table - March 2000 -AH -- the output signal from the IMDCT sometimes is outside the rand - of [-1.0,1.0]. This is why there is the normalization pass in - output.c. Need to investigate and hopefully we can move the - normalization. - Feb 2000 -AH -- Mute frame on error. Feb 2000 -AH -- Revisit convert_to_float and use int->float with scaling - Feb 2000 -AH -- Use proper frame sizes in auxdata parsing - July 1999 - AH -- fix clipping in output (normalize to max digital output) - Aug 99 -AH -- Fix coupling channel support - July 1999 - AH -- Add delta bit allocation support - July 1999 - AH -- Add downmixing support - Sept 1999 - AH, Yeqing Deng diff --git a/ac3dec/ac3dec.c b/ac3dec/ac3dec.c deleted file mode 100644 index 00c4f1a..0000000 --- a/ac3dec/ac3dec.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * ac3dec.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - - -#include -#include -#include -#include -#include -#include -#include -#include "config.h" - -#include "libac3/ac3.h" -#include "output.h" - -void init_spdif(void); -int output_spdif_zero(int frames); -int output_spdif_leadin(void); -int output_spdif(uint_8 *data_start, uint_8 *data_end, int quiet); - -static int end_flag = 0; -static int quiet = 0; - -static void help(void) -{ - printf("Usage: ac3dec [file] [[file]] ...\n"); - printf("\nAvailable options:\n"); - printf(" -h,--help this help\n"); - printf(" -v,--version print version of this program\n"); - printf(" -D,--device=NAME select PCM by NAME\n"); - printf(" -c,--card=ID select card for bellow modes\n"); - printf(" -4,--4ch four channels mode\n"); - printf(" -6,--6ch six channels mode\n"); - printf(" -C,--iec958c raw IEC958 (S/PDIF) consumer mode\n"); - printf(" -P,--iec958p raw IEC958 (S/PDIF) professional mode\n"); - printf(" -R,--iec958r raw IEC958 (S/PDIF) PCM\n"); - printf(" -H,--hdmi output to HDMI device\n"); - printf(" -Z,--zero=# add # zero-AC3-frames before stream\n"); - printf(" -q,--quiet quiet mode\n"); -} - -#define CHUNK_SIZE 2047 -uint_8 buf[CHUNK_SIZE]; -FILE *in_file; - -ssize_t fill_buffer(uint_8 **start,uint_8 **end) -{ - uint_32 bytes_read; - - *start = buf; - - bytes_read = fread(*start,1,CHUNK_SIZE,in_file); - - if (feof(in_file) || ferror(in_file) || bytes_read < CHUNK_SIZE) { - end_flag = 1; - return EOF; - } - - *end = *start + bytes_read; - return bytes_read; -} - -static void ac3dec_signal_handler(int signal) -{ - if (!quiet) - fprintf(stderr, "Aborted...\n"); - // it's important to close the PCM handle(s), because - // some driver settings have to be recovered - output_close(); - fclose(in_file); - exit(EXIT_FAILURE); -} - -int main(int argc,char *argv[]) -{ - struct option long_option[] = - { - {"help", 0, NULL, 'h'}, - {"version", 0, NULL, 'v'}, - {"device", 1, NULL, 'D'}, - {"4ch", 0, NULL, '4'}, - {"6ch", 0, NULL, '6'}, - {"card", 1, NULL, 'c'}, - {"iec958c", 0, NULL, 'C'}, - {"spdif", 0, NULL, 'C'}, - {"iec958p", 0, NULL, 'P'}, - {"iec958r", 0, NULL, 'R'}, - {"hdmi", 0, NULL, 'H'}, - {"zero", 1, NULL, 'Z'}, - {"quiet", 0, NULL, 'q'}, - {NULL, 0, NULL, 0}, - }; - ac3_config_t ac3_config; - output_t out_config; - int morehelp, loop = 0; - int zero = 0; - - bzero(&ac3_config, sizeof(ac3_config)); - ac3_config.fill_buffer_callback = fill_buffer; - ac3_config.num_output_ch = 2; - ac3_config.flags = 0; - bzero(&out_config, sizeof(out_config)); - out_config.pcm_name = NULL; - out_config.card = NULL; - out_config.bits = 16; - out_config.rate = 48000; - out_config.channels = 2; - out_config.spdif = SPDIF_NONE; - out_config.hdmi = 0; - - morehelp = 0; - while (1) { - int c; - - if ((c = getopt_long(argc, argv, "hvc:D:46HCPRZ:q", long_option, NULL)) < 0) - break; - switch (c) { - case 'h': - morehelp++; - break; - case 'v': - printf("ac3dec version " VERSION "\n"); - return 1; - case 'c': - out_config.card = strdup(optarg); - break; - case 'D': - out_config.pcm_name = optarg; - break; - case '4': - if (out_config.spdif == SPDIF_NONE) - ac3_config.num_output_ch = 4; - break; - case '6': - if (out_config.spdif == SPDIF_NONE) - ac3_config.num_output_ch = 6; - break; - case 'C': - ac3_config.num_output_ch = 2; - out_config.spdif = SPDIF_CON; - break; - case 'P': - ac3_config.num_output_ch = 2; - out_config.spdif = SPDIF_PRO; - break; - case 'R': - ac3_config.num_output_ch = 2; - out_config.spdif = SPDIF_PCM; - break; - case 'H': - out_config.hdmi = 1; - break; - case 'Z': - zero = atoi(optarg); - break; - case 'q': - ac3_config.flags |= AC3_QUIET; - out_config.quiet = 1; - quiet = 1; - break; - default: - fprintf(stderr, "\07Invalid switch or option needs an argument.\n"); - morehelp++; - } - } - out_config.channels = ac3_config.num_output_ch; - if (morehelp) { - help(); - return 1; - } - - while (1) { - if (argc - optind <= 0) { - if (loop || end_flag) - break; - in_file = stdin; - } else { - in_file = fopen(argv[optind],"r"); - if(!in_file) { - fprintf(stderr,"%s - Couldn't open file %s\n",strerror(errno),argv[optind]); - exit(EXIT_FAILURE); - } - optind++; - loop++; - } - if ((out_config.spdif == SPDIF_NONE) || (out_config.spdif == SPDIF_PCM)) { - ac3_frame_t *ac3_frame; - ac3_init(&ac3_config); - ac3_frame = ac3_decode_frame(); - out_config.rate = ac3_frame->sampling_rate; - if (output_open(&out_config) < 0) { - fprintf(stderr, "Output open failed\n"); - exit(EXIT_FAILURE); - } - signal(SIGINT, ac3dec_signal_handler); - signal(SIGTERM, ac3dec_signal_handler); - signal(SIGABRT, ac3dec_signal_handler); - do { - //Send the samples to the output device - output_play(ac3_frame->audio_data, 256 * 6); - } while((ac3_frame = ac3_decode_frame())); - } else { - uint_8 *start, *end; - init_spdif(); - if (output_open(&out_config) < 0) { - fprintf(stderr, "Output open failed\n"); - exit(EXIT_FAILURE); - } - signal(SIGINT, ac3dec_signal_handler); - signal(SIGTERM, ac3dec_signal_handler); - signal(SIGABRT, ac3dec_signal_handler); - if (zero > 0) - output_spdif_zero(zero); - else - output_spdif_leadin(); - while (fill_buffer(&start, &end) > 0) - if (output_spdif(start, end, quiet) < 0) - break; - } - output_close(); - fclose(in_file); - } - return EXIT_SUCCESS; -} diff --git a/ac3dec/ac3spdif.c b/ac3dec/ac3spdif.c deleted file mode 100644 index 3a568a4..0000000 --- a/ac3dec/ac3spdif.c +++ /dev/null @@ -1,166 +0,0 @@ -/***************************************************************************/ -/* This code has been fully inspired from various place */ -/* I will give their name later. May they be bless .... It works */ -/* */ -/* For the moment test it. */ -/* */ -/* 27-08-00 -- Ze'ev Maor -- fixed recovery from flase syncword detection */ -/* */ -/* 24-08-00 -- Ze'ev Maor -- Modified for integrtion with DXR3-OMS-plugin */ -/***************************************************************************/ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "output.h" - -void swab(const void*, void*, size_t); - -#define BLOCK_SIZE 6144 - -static unsigned char buf[BLOCK_SIZE]; -static uint32_t sbuffer_size; -static syncinfo_t syncinfo; -static char *sbuffer; -static int done_banner; - -static uint32_t -buffer_syncframe(syncinfo_t *syncinfo, uint8_t **start, uint8_t *end) -{ - uint8_t *cur = *start; - uint16_t syncword = syncinfo->syncword; - uint32_t ret = 0; - - // - // Find an ac3 sync frame. - // - while(syncword != 0x0b77) - { - if(cur >= end) - goto done; - syncword = (syncword << 8) + *cur++; - } - - //need the next 3 bytes to decide how big the frame is - while(sbuffer_size < 3) - { - if(cur >= end) - goto done; - - sbuffer[sbuffer_size++] = *cur++; - } - - parse_syncinfo_data(syncinfo,sbuffer); - - while(sbuffer_size < (uint32_t)syncinfo->frame_size * 2 - 2) - { - if(cur >= end) - goto done; - - sbuffer[sbuffer_size++] = *cur++; - } - - crc_init(); - crc_process_frame(sbuffer,syncinfo->frame_size * 2 - 2); - - if(!crc_validate()) - { - //error_flag = 1; - fprintf(stderr,"** CRC failed - skipping frame **\n"); - syncword = 0xffff; - sbuffer_size = 0; - bzero(buf,BLOCK_SIZE); - - goto done; - } - // - //if we got to this point, we found a valid ac3 frame to decode - // - - //reset the syncword for next time - syncword = 0xffff; - sbuffer_size = 0; - ret = 1; - - done: - syncinfo->syncword = syncword; - *start = cur; - return ret; -} - -void -init_spdif(void) -{ - sbuffer_size = 0; - sbuffer = &buf[10]; - done_banner = 0; -} - -int -output_spdif_zero(int frames) -{ - int res; - - buf[0] = 0x72; buf[1] = 0xf8; // spdif syncword - buf[2] = 0x1f; buf[3] = 0x4e; // .............. - buf[4] = 0x00; // null frame (no data) - buf[5] = 7 << 5; // stream = 7 - buf[6] = 0x00; buf[7] = 0x00; // frame size - memset(&buf[8], 0, BLOCK_SIZE - 8); - while (frames-- > 0) { - res = output_play((short *)buf, BLOCK_SIZE / 2 / 2); /* 2 channels, 16-bit samples */ - if (res < 0) - return res; - } - return 0; -} - -int -output_spdif_leadin(void) -{ - memset(buf, 0, 8); - return output_play((short *)buf, 8); -} - -int -output_spdif(uint8_t *data_start, uint8_t *data_end, int quiet) -{ - int ret = 0, res; - - while(buffer_syncframe(&syncinfo, &data_start, data_end)) - { - buf[0] = 0x72; buf[1] = 0xf8; // spdif syncword - buf[2] = 0x1f; buf[3] = 0x4e; // .............. - buf[4] = 0x01; // AC3 data - buf[5] = buf[13] & 7; // bsmod, stream = 0 - buf[6] = (syncinfo.frame_size * 16) & 0xff; - buf[7] = ((syncinfo.frame_size * 16) >> 8) & 0xff; - buf[8] = 0x77; buf[9] = 0x0b; // AC3 syncwork - - if (!done_banner && !quiet) { - fprintf(stdout,"AC3 Stream "); - fprintf(stdout,"%2.1f KHz",syncinfo.sampling_rate * 1e-3); - fprintf(stdout,"%4d kbps",syncinfo.bit_rate); - fprintf(stdout,"\n"); - done_banner = 1; - } - -#ifndef _a_b_c_d_e_f /* WORDS_BIGENDIAN */ - // extract_ac3 seems to write swabbed data - swab(&buf[10], &buf[10], syncinfo.frame_size * 2 - 2); -#endif - res = output_play((short *)buf, BLOCK_SIZE / 2 / 2); /* 2 channels, 16-bit samples */ - ret = ret < 0 ? ret : res; - bzero(buf,BLOCK_SIZE); - } - return ret; -} diff --git a/ac3dec/autogen.sh b/ac3dec/autogen.sh deleted file mode 100644 index e538fa7..0000000 --- a/ac3dec/autogen.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -# Run this to generate all the initial makefiles, etc. -# This was lifted from the Gimp, and adapted slightly by -# Raph Levien . - -DIE=0 - -PROG=ac3dec - -(autoconf --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have autoconf installed to compile $PROG." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - -# Do we really need libtool? -#(libtool --version) < /dev/null > /dev/null 2>&1 || { -# echo -# echo "You must have libtool installed to compile $PROG." -# echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2.tar.gz" -# echo "(or a newer version if it is available)" -# DIE=1 -#} - -(automake --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have automake installed to compile $PROG." - echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 -} - -if test "$DIE" -eq 1; then - exit 1 -fi - -if test -z "$*"; then - echo "I am going to run ./configure with no arguments - if you wish " - echo "to pass any to it, please specify them on the $0 command line." -fi - -for dir in . -do - echo processing $dir - (cd $dir; \ - aclocalinclude="$ACLOCAL_FLAGS"; \ - aclocal $aclocalinclude; \ - autoheader; automake --foreign -a; autoconf) -done -./configure "$@" - -echo -echo "Now type 'make' to compile $PROG." diff --git a/ac3dec/configure.in b/ac3dec/configure.in deleted file mode 100644 index 8d5d41b..0000000 --- a/ac3dec/configure.in +++ /dev/null @@ -1,30 +0,0 @@ -dnl Autoconf configuration script ac3dec -dnl -dnl Aaron Holtzman - May 1999 -dnl -AC_INIT(ac3dec.c) -AM_CONFIG_HEADER(config.h) -AC_CANONICAL_HOST -AC_PREREQ(2.13) -AM_INIT_AUTOMAKE(ac3dec, 0.6.1) - -AM_MAINTAINER_MODE -AC_PROG_CC -AC_PROG_GCC_TRADITIONAL -AC_PROG_RANLIB - -AC_C_BIGENDIAN - -AM_PATH_ALSA(1.0.0) - -dnl Set the appropriate architecture define -dnl case "$host" in -dnl i?86-*) AC_DEFINE(__i386__, 1, [Using i386 architecture]);; -dnl alpha*-*) AC_DEFINE(__alpha__, 1, [Using Alpha architecture]);; -dnl sparc-*) AC_DEFINE(__sparc__, 1, [Using SPARC architecture]);; -dnl ppc-*|powerpc-*) AC_DEFINE(__ppc__, 1, [Using PowerPC architecture]);; -dnl ia64-*) AC_DEFINE(__ia64__, 1, [Using IA-64 architecture]);; -dnl *) echo "$host is not currently supported by ac3dec"; exit 1;; -dnl esac - -AC_OUTPUT(libac3/Makefile tools/Makefile test/Makefile Makefile ) diff --git a/ac3dec/cvscompile b/ac3dec/cvscompile deleted file mode 100755 index 6c3452b..0000000 --- a/ac3dec/cvscompile +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -aclocal $ACLOCAL_FLAGS -autoheader -automake --add-missing --copy --foreign -touch depcomp -autoconf -./configure $* -make diff --git a/ac3dec/gitcompile b/ac3dec/gitcompile deleted file mode 100755 index 694d5c2..0000000 --- a/ac3dec/gitcompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -aclocal $ACLOCAL_FLAGS || exit 1 -autoheader || exit 1 -automake --add-missing --copy --foreign || exit 1 -touch depcomp || exit 1 -autoconf || exit 1 -./configure $* || exit 1 -if [ -z "$GITCOMPILE_NO_MAKE" ]; then - make || exit 1 -fi diff --git a/ac3dec/libac3/Makefile.am b/ac3dec/libac3/Makefile.am deleted file mode 100644 index 5d60a66..0000000 --- a/ac3dec/libac3/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -# # Process this file with automake to produce Makefile.in. -AUTOMAKE_OPTIONS = 1.3 foreign - -CFLAGS = -Wall -O1 -g - -noinst_LIBRARIES = libac3.a - -libac3_a_SOURCES = bitstream.c decode.c imdct.c coeff.c exponent.c stats.c\ - bit_allocate.c parse.c crc.c debug.c rematrix.c downmix.c dither.c \ - sanity_check.c - -noinst_HEADERS = ac3_internal.h bitstream.h decode.h imdct.h ac3.h stats.h coeff.h\ - exponent.h bit_allocate.h parse.h crc.h debug.h rematrix.h downmix.h dither.h \ - sanity_check.h - diff --git a/ac3dec/libac3/ac3.h b/ac3dec/libac3/ac3.h deleted file mode 100644 index d0ba1b7..0000000 --- a/ac3dec/libac3/ac3.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * ac3.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#ifndef AARONS_TYPES -#define AARONS_TYPES -typedef unsigned long long uint_64; -typedef unsigned int uint_32; -typedef unsigned short uint_16; -typedef unsigned char uint_8; - -typedef signed long long sint_64; -typedef signed int sint_32; -typedef signed short sint_16; -typedef signed char sint_8; -#endif - -#define AC3_DOLBY_SURR_ENABLE 0x1 -#define AC3_3DNOW_ENABLE 0x2 -#define AC3_MMX_ENABLE 0x4 -#define AC3_ALTIVEC_ENABLE 0x8 -#define AC3_QUIET 0x10 - -typedef struct ac3_config_s -{ - //Bit flags that enable various things - uint_32 flags; - //Callback that points the decoder to new stream data - ssize_t (*fill_buffer_callback)(uint_8 **, uint_8 **); - //Number of discrete channels in final output (for downmixing) - uint_16 num_output_ch; - //Which channel of a dual mono stream to select - uint_16 dual_mono_ch_sel; -} ac3_config_t; - -typedef struct ac3_frame_s -{ - uint_32 sampling_rate; - sint_16 *audio_data; -} ac3_frame_t; - -void ac3_init(ac3_config_t *config); -ac3_frame_t* ac3_decode_frame(void); diff --git a/ac3dec/libac3/ac3_internal.h b/ac3dec/libac3/ac3_internal.h deleted file mode 100644 index 7a20c5b..0000000 --- a/ac3dec/libac3/ac3_internal.h +++ /dev/null @@ -1,344 +0,0 @@ -/* - * ac3_internal.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#ifndef __GNUC__ -#define inline -#endif - -/* Exponent strategy constants */ -#define EXP_REUSE (0) -#define EXP_D15 (1) -#define EXP_D25 (2) -#define EXP_D45 (3) - -/* Delta bit allocation constants */ -#define DELTA_BIT_REUSE (0) -#define DELTA_BIT_NEW (1) -#define DELTA_BIT_NONE (2) -#define DELTA_BIT_RESERVED (3) - -/* samples work structure */ -typedef float stream_samples_t[6][256]; - -/* global config structure */ -extern ac3_config_t ac3_config; -/* global error flag */ -extern uint_32 error_flag; - -/* Everything you wanted to know about band structure */ -/* - * The entire frequency domain is represented by 256 real - * floating point fourier coefficients. Only the lower 253 - * coefficients are actually utilized however. We use arrays - * of 256 to be efficient in some cases. - * - * The 5 full bandwidth channels (fbw) can have their higher - * frequencies coupled together. These coupled channels then - * share their high frequency components. - * - * This coupling band is broken up into 18 sub-bands starting - * at mantissa number 37. Each sub-band is 12 bins wide. - * - * There are 50 bit allocation sub-bands which cover the entire - * frequency range. The sub-bands are of non-uniform width, and - * approximate a 1/6 octave scale. - */ - -/* The following structures are filled in by their corresponding parse_* - * functions. See http://www.atsc.org/Standards/A52/a_52.pdf for - * full details on each field. Indented fields are used to denote - * conditional fields. - */ - -typedef struct syncinfo_s -{ - uint_32 magic; - /* Sync word == 0x0B77 */ - uint_16 syncword; - /* crc for the first 5/8 of the sync block */ - /* uint_16 crc1; */ - /* Stream Sampling Rate (kHz) 0 = 48, 1 = 44.1, 2 = 32, 3 = reserved */ - uint_16 fscod; - /* Frame size code */ - uint_16 frmsizecod; - - /* Information not in the AC-3 bitstream, but derived */ - /* Frame size in 16 bit words */ - uint_16 frame_size; - /* Bit rate in kilobits */ - uint_16 bit_rate; - /* sampling rate in hertz */ - uint_32 sampling_rate; - -} syncinfo_t; - -typedef struct bsi_s -{ - uint_32 magic; - /* Bit stream identification == 0x8 */ - uint_16 bsid; - /* Bit stream mode */ - uint_16 bsmod; - /* Audio coding mode */ - uint_16 acmod; - /* If we're using the centre channel then */ - /* centre mix level */ - uint_16 cmixlev; - /* If we're using the surround channel then */ - /* surround mix level */ - uint_16 surmixlev; - /* If we're in 2/0 mode then */ - /* Dolby surround mix level - NOT USED - */ - uint_16 dsurmod; - /* Low frequency effects on */ - uint_16 lfeon; - /* Dialogue Normalization level */ - uint_16 dialnorm; - /* Compression exists */ - uint_16 compre; - /* Compression level */ - uint_16 compr; - /* Language code exists */ - uint_16 langcode; - /* Language code */ - uint_16 langcod; - /* Audio production info exists*/ - uint_16 audprodie; - uint_16 mixlevel; - uint_16 roomtyp; - /* If we're in dual mono mode (acmod == 0) then extra stuff */ - uint_16 dialnorm2; - uint_16 compr2e; - uint_16 compr2; - uint_16 langcod2e; - uint_16 langcod2; - uint_16 audprodi2e; - uint_16 mixlevel2; - uint_16 roomtyp2; - /* Copyright bit */ - uint_16 copyrightb; - /* Original bit */ - uint_16 origbs; - /* Timecode 1 exists */ - uint_16 timecod1e; - /* Timecode 1 */ - uint_16 timecod1; - /* Timecode 2 exists */ - uint_16 timecod2e; - /* Timecode 2 */ - uint_16 timecod2; - /* Additional bit stream info exists */ - uint_16 addbsie; - /* Additional bit stream length - 1 (in bytes) */ - uint_16 addbsil; - /* Additional bit stream information (max 64 bytes) */ - uint_8 addbsi[64]; - - /* Information not in the AC-3 bitstream, but derived */ - /* Number of channels (excluding LFE) - * Derived from acmod */ - uint_16 nfchans; -} bsi_t; - - -/* more pain */ -typedef struct audblk_s -{ - uint_32 magic1; - /* block switch bit indexed by channel num */ - uint_16 blksw[5]; - /* dither enable bit indexed by channel num */ - uint_16 dithflag[5]; - /* dynamic range gain exists */ - uint_16 dynrnge; - /* dynamic range gain */ - uint_16 dynrng; - /* if acmod==0 then */ - /* dynamic range 2 gain exists */ - uint_16 dynrng2e; - /* dynamic range 2 gain */ - uint_16 dynrng2; - /* coupling strategy exists */ - uint_16 cplstre; - /* coupling in use */ - uint_16 cplinu; - /* channel coupled */ - uint_16 chincpl[5]; - /* if acmod==2 then */ - /* Phase flags in use */ - uint_16 phsflginu; - /* coupling begin frequency code */ - uint_16 cplbegf; - /* coupling end frequency code */ - uint_16 cplendf; - /* coupling band structure bits */ - uint_16 cplbndstrc[18]; - /* Do coupling co-ords exist for this channel? */ - uint_16 cplcoe[5]; - /* Master coupling co-ordinate */ - uint_16 mstrcplco[5]; - /* Per coupling band coupling co-ordinates */ - uint_16 cplcoexp[5][18]; - uint_16 cplcomant[5][18]; - /* Phase flags for dual mono */ - uint_16 phsflg[18]; - /* Is there a rematrixing strategy */ - uint_16 rematstr; - /* Rematrixing bits */ - uint_16 rematflg[4]; - /* Coupling exponent strategy */ - uint_16 cplexpstr; - /* Exponent strategy for full bandwidth channels */ - uint_16 chexpstr[5]; - /* Exponent strategy for lfe channel */ - uint_16 lfeexpstr; - /* Channel bandwidth for independent channels */ - uint_16 chbwcod[5]; - /* The absolute coupling exponent */ - uint_16 cplabsexp; - /* Coupling channel exponents (D15 mode gives 18 * 12 /3 encoded exponents */ - uint_16 cplexps[18 * 12 / 3]; - /* Sanity checking constant */ - uint_32 magic2; - /* fbw channel exponents */ - uint_16 exps[5][252 / 3]; - /* channel gain range */ - uint_16 gainrng[5]; - /* low frequency exponents */ - uint_16 lfeexps[3]; - - /* Bit allocation info */ - uint_16 baie; - /* Slow decay code */ - uint_16 sdcycod; - /* Fast decay code */ - uint_16 fdcycod; - /* Slow gain code */ - uint_16 sgaincod; - /* dB per bit code */ - uint_16 dbpbcod; - /* masking floor code */ - uint_16 floorcod; - - /* SNR offset info */ - uint_16 snroffste; - /* coarse SNR offset */ - uint_16 csnroffst; - /* coupling fine SNR offset */ - uint_16 cplfsnroffst; - /* coupling fast gain code */ - uint_16 cplfgaincod; - /* fbw fine SNR offset */ - uint_16 fsnroffst[5]; - /* fbw fast gain code */ - uint_16 fgaincod[5]; - /* lfe fine SNR offset */ - uint_16 lfefsnroffst; - /* lfe fast gain code */ - uint_16 lfefgaincod; - - /* Coupling leak info */ - uint_16 cplleake; - /* coupling fast leak initialization */ - uint_16 cplfleak; - /* coupling slow leak initialization */ - uint_16 cplsleak; - - /* delta bit allocation info */ - uint_16 deltbaie; - /* coupling delta bit allocation exists */ - uint_16 cpldeltbae; - /* fbw delta bit allocation exists */ - uint_16 deltbae[5]; - /* number of cpl delta bit segments */ - uint_16 cpldeltnseg; - /* coupling delta bit allocation offset */ - uint_16 cpldeltoffst[8]; - /* coupling delta bit allocation length */ - uint_16 cpldeltlen[8]; - /* coupling delta bit allocation length */ - uint_16 cpldeltba[8]; - /* number of delta bit segments */ - uint_16 deltnseg[5]; - /* fbw delta bit allocation offset */ - uint_16 deltoffst[5][8]; - /* fbw delta bit allocation length */ - uint_16 deltlen[5][8]; - /* fbw delta bit allocation length */ - uint_16 deltba[5][8]; - - /* skip length exists */ - uint_16 skiple; - /* skip length */ - uint_16 skipl; - - //Removed Feb 2000 -ah - /* channel mantissas */ - //uint_16 chmant[5][256]; - - /* coupling mantissas */ - uint_16 cplmant[256]; - - //Removed Feb 2000 -ah - /* coupling mantissas */ - //uint_16 lfemant[7]; - - - /* -- Information not in the bitstream, but derived thereof -- */ - - /* Number of coupling sub-bands */ - uint_16 ncplsubnd; - - /* Number of combined coupling sub-bands - * Derived from ncplsubnd and cplbndstrc */ - uint_16 ncplbnd; - - /* Number of exponent groups by channel - * Derived from strmant, endmant */ - uint_16 nchgrps[5]; - - /* Number of coupling exponent groups - * Derived from cplbegf, cplendf, cplexpstr */ - uint_16 ncplgrps; - - /* End mantissa numbers of fbw channels */ - uint_16 endmant[5]; - - /* Start and end mantissa numbers for the coupling channel */ - uint_16 cplstrtmant; - uint_16 cplendmant; - - /* Decoded exponent info */ - uint_16 fbw_exp[5][256]; - uint_16 cpl_exp[256]; - uint_16 lfe_exp[7]; - - /* Bit allocation pointer results */ - uint_16 fbw_bap[5][256]; - uint_16 cpl_bap[256]; - uint_16 lfe_bap[7]; - - uint_32 magic3; -} audblk_t; - - diff --git a/ac3dec/libac3/bit_allocate.c b/ac3dec/libac3/bit_allocate.c deleted file mode 100644 index 053e09c..0000000 --- a/ac3dec/libac3/bit_allocate.c +++ /dev/null @@ -1,494 +0,0 @@ -/* - * bit_allocate.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - - -static inline sint_16 logadd(sint_16 a,sint_16 b); -static sint_16 calc_lowcomp(sint_16 a,sint_16 b0,sint_16 b1,sint_16 bin); -static inline uint_16 min(sint_16 a,sint_16 b); -static inline uint_16 max(sint_16 a,sint_16 b); -static void ba_compute_psd(sint_16 start, sint_16 end, sint_16 exps[], - sint_16 psd[], sint_16 bndpsd[]); - -static void ba_compute_excitation(sint_16 start, sint_16 end,sint_16 fgain, - sint_16 fastleak, sint_16 slowleak, sint_16 is_lfe, sint_16 bndpsd[], - sint_16 excite[]); -static void ba_compute_mask(sint_16 start, sint_16 end, uint_16 fscod, - uint_16 deltbae, uint_16 deltnseg, uint_16 deltoffst[], uint_16 deltba[], - uint_16 deltlen[], sint_16 excite[], sint_16 mask[]); -static void ba_compute_bap(sint_16 start, sint_16 end, sint_16 snroffset, - sint_16 psd[], sint_16 mask[], sint_16 bap[]); - -/* Misc LUTs for bit allocation process */ - -static sint_16 slowdec[] = { 0x0f, 0x11, 0x13, 0x15 }; -static sint_16 fastdec[] = { 0x3f, 0x53, 0x67, 0x7b }; -static sint_16 slowgain[] = { 0x540, 0x4d8, 0x478, 0x410 }; -static sint_16 dbpbtab[] = { 0x000, 0x700, 0x900, 0xb00 }; - -static uint_16 floortab[] = { 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800 }; -static sint_16 fastgain[] = { 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400 }; - - -static sint_16 bndtab[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, - 34, 37, 40, 43, 46, 49, 55, 61, 67, 73, - 79, 85, 97, 109, 121, 133, 157, 181, 205, 229 }; - -static sint_16 bndsz[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, - 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, - 6, 12, 12, 12, 12, 24, 24, 24, 24, 24 }; - -static sint_16 masktab[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 28, 28, 29, - 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, - 34, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 37, 37, 37, - 37, 37, 37, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 40, - 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0 }; - - -static sint_16 latab[] = { 0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003b, 0x003a, 0x0039, - 0x0038, 0x0037, 0x0036, 0x0035, 0x0034, 0x0034, 0x0033, 0x0032, - 0x0031, 0x0030, 0x002f, 0x002f, 0x002e, 0x002d, 0x002c, 0x002c, - 0x002b, 0x002a, 0x0029, 0x0029, 0x0028, 0x0027, 0x0026, 0x0026, - 0x0025, 0x0024, 0x0024, 0x0023, 0x0023, 0x0022, 0x0021, 0x0021, - 0x0020, 0x0020, 0x001f, 0x001e, 0x001e, 0x001d, 0x001d, 0x001c, - 0x001c, 0x001b, 0x001b, 0x001a, 0x001a, 0x0019, 0x0019, 0x0018, - 0x0018, 0x0017, 0x0017, 0x0016, 0x0016, 0x0015, 0x0015, 0x0015, - 0x0014, 0x0014, 0x0013, 0x0013, 0x0013, 0x0012, 0x0012, 0x0012, - 0x0011, 0x0011, 0x0011, 0x0010, 0x0010, 0x0010, 0x000f, 0x000f, - 0x000f, 0x000e, 0x000e, 0x000e, 0x000d, 0x000d, 0x000d, 0x000d, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000b, 0x000b, 0x000b, 0x000b, - 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0009, 0x0009, 0x0009, - 0x0009, 0x0009, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0006, 0x0006, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0005, 0x0005, - 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0004, 0x0004, - 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, - 0x0004, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, - 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000}; - -static sint_16 hth[][50] = {{ 0x04d0, 0x04d0, 0x0440, 0x0400, 0x03e0, 0x03c0, 0x03b0, 0x03b0, - 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x0390, 0x0390, 0x0390, - 0x0380, 0x0380, 0x0370, 0x0370, 0x0360, 0x0360, 0x0350, 0x0350, - 0x0340, 0x0340, 0x0330, 0x0320, 0x0310, 0x0300, 0x02f0, 0x02f0, - 0x02f0, 0x02f0, 0x0300, 0x0310, 0x0340, 0x0390, 0x03e0, 0x0420, - 0x0460, 0x0490, 0x04a0, 0x0460, 0x0440, 0x0440, 0x0520, 0x0800, - 0x0840, 0x0840 }, - - { 0x04f0, 0x04f0, 0x0460, 0x0410, 0x03e0, 0x03d0, 0x03c0, 0x03b0, - 0x03b0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x0390, 0x0390, - 0x0390, 0x0380, 0x0380, 0x0380, 0x0370, 0x0370, 0x0360, 0x0360, - 0x0350, 0x0350, 0x0340, 0x0340, 0x0320, 0x0310, 0x0300, 0x02f0, - 0x02f0, 0x02f0, 0x02f0, 0x0300, 0x0320, 0x0350, 0x0390, 0x03e0, - 0x0420, 0x0450, 0x04a0, 0x0490, 0x0460, 0x0440, 0x0480, 0x0630, - 0x0840, 0x0840 }, - - { 0x0580, 0x0580, 0x04b0, 0x0450, 0x0420, 0x03f0, 0x03e0, 0x03d0, - 0x03c0, 0x03b0, 0x03b0, 0x03b0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, - 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x0390, 0x0390, 0x0390, 0x0390, - 0x0380, 0x0380, 0x0380, 0x0370, 0x0360, 0x0350, 0x0340, 0x0330, - 0x0320, 0x0310, 0x0300, 0x02f0, 0x02f0, 0x02f0, 0x0300, 0x0310, - 0x0330, 0x0350, 0x03c0, 0x0410, 0x0470, 0x04a0, 0x0460, 0x0440, - 0x0450, 0x04e0 }}; - - -static sint_16 baptab[] = { 0, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, - 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, - 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, - 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15 }; - -static sint_16 sdecay; -static sint_16 fdecay; -static sint_16 sgain; -static sint_16 dbknee; -static sint_16 floor; -static sint_16 psd[256]; -static sint_16 bndpsd[256]; -static sint_16 excite[256]; -static sint_16 mask[256]; - -static inline uint_16 -max(sint_16 a,sint_16 b) -{ - return (a > b ? a : b); -} - -static inline uint_16 -min(sint_16 a,sint_16 b) -{ - return (a < b ? a : b); -} - -static inline sint_16 -logadd(sint_16 a,sint_16 b) -{ - sint_16 c; - sint_16 address; - - c = a - b; - address = min((abs(c) >> 1), 255); - - if (c >= 0) - return(a + latab[address]); - else - return(b + latab[address]); -} - - -void bit_allocate(uint_16 fscod, bsi_t *bsi, audblk_t *audblk) -{ - uint_16 i; - sint_16 fgain; - sint_16 snroffset; - sint_16 start; - sint_16 end; - sint_16 fastleak; - sint_16 slowleak; - - /* Only perform bit_allocation if the exponents have changed or we - * have new sideband information */ - if (audblk->chexpstr[0] == 0 && audblk->chexpstr[1] == 0 && - audblk->chexpstr[2] == 0 && audblk->chexpstr[3] == 0 && - audblk->chexpstr[4] == 0 && audblk->cplexpstr == 0 && - audblk->lfeexpstr == 0 && audblk->baie == 0 && - audblk->snroffste == 0 && audblk->deltbaie == 0) - return; - - /* Do some setup before we do the bit alloc */ - sdecay = slowdec[audblk->sdcycod]; - fdecay = fastdec[audblk->fdcycod]; - sgain = slowgain[audblk->sgaincod]; - dbknee = dbpbtab[audblk->dbpbcod]; - floor = floortab[audblk->floorcod]; - - /* if all the SNR offset constants are zero then the whole block is zero */ - if(!audblk->csnroffst && !audblk->fsnroffst[0] && - !audblk->fsnroffst[1] && !audblk->fsnroffst[2] && - !audblk->fsnroffst[3] && !audblk->fsnroffst[4] && - !audblk->cplfsnroffst && !audblk->lfefsnroffst) - { - memset(audblk->fbw_bap,0,sizeof(uint_16) * 256 * 5); - memset(audblk->cpl_bap,0,sizeof(uint_16) * 256); - memset(audblk->lfe_bap,0,sizeof(uint_16) * 7); - return; - } - - - for(i = 0; i < bsi->nfchans; i++) - { - start = 0; - end = audblk->endmant[i] ; - fgain = fastgain[audblk->fgaincod[i]]; - snroffset = (((audblk->csnroffst - 15) << 4) + audblk->fsnroffst[i]) << 2 ; - fastleak = 0; - slowleak = 0; - - ba_compute_psd(start, end, audblk->fbw_exp[i], psd, bndpsd); - - ba_compute_excitation(start, end , fgain, fastleak, slowleak, 0, bndpsd, excite); - - ba_compute_mask(start, end, fscod, audblk->deltbae[i], audblk->deltnseg[i], - audblk->deltoffst[i], audblk->deltba[i], audblk->deltlen[i], excite, mask); - - ba_compute_bap(start, end, snroffset, psd, mask, audblk->fbw_bap[i]); - } - - if(audblk->cplinu) - { - start = audblk->cplstrtmant; - end = audblk->cplendmant; - fgain = fastgain[audblk->cplfgaincod]; - snroffset = (((audblk->csnroffst - 15) << 4) + audblk->cplfsnroffst) << 2 ; - fastleak = (audblk->cplfleak << 8) + 768; - slowleak = (audblk->cplsleak << 8) + 768; - - ba_compute_psd(start, end, audblk->cpl_exp, psd, bndpsd); - - ba_compute_excitation(start, end , fgain, fastleak, slowleak, 0, bndpsd, excite); - - ba_compute_mask(start, end, fscod, audblk->cpldeltbae, audblk->cpldeltnseg, - audblk->cpldeltoffst, audblk->cpldeltba, audblk->cpldeltlen, excite, mask); - - ba_compute_bap(start, end, snroffset, psd, mask, audblk->cpl_bap); - } - - if(bsi->lfeon) - { - start = 0; - end = 7; - fgain = fastgain[audblk->lfefgaincod]; - snroffset = (((audblk->csnroffst - 15) << 4) + audblk->lfefsnroffst) << 2 ; - fastleak = 0; - slowleak = 0; - - ba_compute_psd(start, end, audblk->lfe_exp, psd, bndpsd); - - ba_compute_excitation(start, end , fgain, fastleak, slowleak, 1, bndpsd, excite); - - /* Perform no delta bit allocation for lfe */ - ba_compute_mask(start, end, fscod, 2, 0, 0, 0, 0, excite, mask); - - ba_compute_bap(start, end, snroffset, psd, mask, audblk->lfe_bap); - } -} - - -static void ba_compute_psd(sint_16 start, sint_16 end, sint_16 exps[], - sint_16 psd[], sint_16 bndpsd[]) -{ - int bin,i,j,k; - sint_16 lastbin = 0; - - /* Map the exponents into dBs */ - for (bin=start; bin lastbin); -} - -static void ba_compute_excitation(sint_16 start, sint_16 end,sint_16 fgain, - sint_16 fastleak, sint_16 slowleak, sint_16 is_lfe, sint_16 bndpsd[], - sint_16 excite[]) -{ - int bin; - sint_16 bndstrt; - sint_16 bndend; - sint_16 lowcomp = 0; - sint_16 begin = 0; - - /* Compute excitation function */ - bndstrt = masktab[start]; - bndend = masktab[end - 1] + 1; - - if (bndstrt == 0) /* For fbw and lfe channels */ - { - lowcomp = calc_lowcomp(lowcomp, bndpsd[0], bndpsd[1], 0); - excite[0] = bndpsd[0] - fgain - lowcomp; - lowcomp = calc_lowcomp(lowcomp, bndpsd[1], bndpsd[2], 1); - excite[1] = bndpsd[1] - fgain - lowcomp; - begin = 7 ; - - /* Note: Do not call calc_lowcomp() for the last band of the lfe channel, (bin = 6) */ - for (bin = 2; bin < 7; bin++) - { - if (!(is_lfe && (bin == 6))) - lowcomp = calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin+1], bin); - fastleak = bndpsd[bin] - fgain; - slowleak = bndpsd[bin] - sgain; - excite[bin] = fastleak - lowcomp; - - if (!(is_lfe && (bin == 6))) - { - if (bndpsd[bin] <= bndpsd[bin+1]) - { - begin = bin + 1 ; - break; - } - } - } - - for (bin = begin; bin < min(bndend, 22); bin++) - { - if (!(is_lfe && (bin == 6))) - lowcomp = calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin+1], bin); - fastleak -= fdecay ; - fastleak = max(fastleak, bndpsd[bin] - fgain); - slowleak -= sdecay ; - slowleak = max(slowleak, bndpsd[bin] - sgain); - excite[bin] = max(fastleak - lowcomp, slowleak); - } - begin = 22; - } - else /* For coupling channel */ - { - begin = bndstrt; - } - - for (bin = begin; bin < bndend; bin++) - { - fastleak -= fdecay; - fastleak = max(fastleak, bndpsd[bin] - fgain); - slowleak -= sdecay; - slowleak = max(slowleak, bndpsd[bin] - sgain); - excite[bin] = max(fastleak, slowleak) ; - } -} - -static void ba_compute_mask(sint_16 start, sint_16 end, uint_16 fscod, - uint_16 deltbae, uint_16 deltnseg, uint_16 deltoffst[], uint_16 deltba[], - uint_16 deltlen[], sint_16 excite[], sint_16 mask[]) -{ - int bin,k; - sint_16 bndstrt; - sint_16 bndend; - sint_16 delta; - - bndstrt = masktab[start]; - bndend = masktab[end - 1] + 1; - - /* Compute the masking curve */ - - for (bin = bndstrt; bin < bndend; bin++) - { - if (bndpsd[bin] < dbknee) - { - excite[bin] += ((dbknee - bndpsd[bin]) >> 2); - } - mask[bin] = max(excite[bin], hth[fscod][bin]); - } - - /* Perform delta bit modulation if necessary */ - if ((deltbae == DELTA_BIT_REUSE) || (deltbae == DELTA_BIT_NEW)) - { - sint_16 band = 0; - sint_16 seg = 0; - - for (seg = 0; seg < deltnseg+1; seg++) - { - band += deltoffst[seg]; - if (deltba[seg] >= 4) - { - delta = (deltba[seg] - 3) << 7; - } - else - { - delta = (deltba[seg] - 4) << 7; - } - - for (k = 0; k < deltlen[seg]; k++) - { - mask[band] += delta; - band++; - } - } - } -} - -static void ba_compute_bap(sint_16 start, sint_16 end, sint_16 snroffset, - sint_16 psd[], sint_16 mask[], sint_16 bap[]) -{ - int i,j,k; - sint_16 lastbin = 0; - sint_16 address = 0; - - /* Compute the bit allocation pointer for each bin */ - i = start; - j = masktab[start]; - - do - { - lastbin = min(bndtab[j] + bndsz[j], end); - mask[j] -= snroffset; - mask[j] -= floor; - - if (mask[j] < 0) - mask[j] = 0; - - mask[j] &= 0x1fe0; - mask[j] += floor; - for (k = i; k < lastbin; k++) - { - address = (psd[i] - mask[j]) >> 5; - address = min(63, max(0, address)); - bap[i] = baptab[address]; - i++; - } - j++; - } while (end > lastbin); -} - -static sint_16 -calc_lowcomp(sint_16 a,sint_16 b0,sint_16 b1,sint_16 bin) -{ - - if (bin < 7) - { - if ((b0 + 256) == b1) - a = 384; - else if (b0 > b1) - a = max(0, a - 64); - } - else if (bin < 20) - { - if ((b0 + 256) == b1) - a = 320; - else if (b0 > b1) - a = max(0, a - 64) ; - } - else - a = max(0, a - 128); - - return(a); -} - diff --git a/ac3dec/libac3/bit_allocate.h b/ac3dec/libac3/bit_allocate.h deleted file mode 100644 index e48b0b2..0000000 --- a/ac3dec/libac3/bit_allocate.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * bit_allocate.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -void bit_allocate(uint_16 fscod, bsi_t *bsi, audblk_t *audblk); diff --git a/ac3dec/libac3/bitstream.c b/ac3dec/libac3/bitstream.c deleted file mode 100644 index 0e1dbc4..0000000 --- a/ac3dec/libac3/bitstream.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * bitstream.c - * - * Copyright (C) Aaron Holtzman - Dec 1999 - * - * This file is part of ac3dec, a free AC-3 audio decoder - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include - -#include "ac3.h" -#include "ac3_internal.h" -#include "bitstream.h" - -#define BUFFER_SIZE 4096 - -static uint_8 buffer[BUFFER_SIZE]; - -static uint_32 *buffer_start, *buffer_end; -static uint_8 *chunk_start, *chunk_end; - -uint_32 bits_left; -uint_32 current_word; - -ssize_t (*bitstream_fill_buffer)(uint_8**,uint_8**); - -int bitstream_get_byte(void) -{ - if(chunk_start == chunk_end) - if (bitstream_fill_buffer(&chunk_start,&chunk_end) <= 0) - return EOF; - - return (*chunk_start++); -} - -uint_8 *bitstream_get_buffer_start(void) -{ - return (uint_8 *) buffer_start; -} - -int -bitstream_buffer_frame(uint_32 frame_size) -{ - uint_32 bytes_read; - uint_32 num_bytes; - - bytes_read = 0; - - do - { - if(chunk_start > chunk_end) - printf("argh!\n"); - if(chunk_start == chunk_end) - if (bitstream_fill_buffer(&chunk_start,&chunk_end) <= 0) - return EOF; - - num_bytes = chunk_end - chunk_start; - - if(bytes_read + num_bytes > frame_size) - num_bytes = frame_size - bytes_read; - - memcpy(&buffer[bytes_read], chunk_start, num_bytes); - - bytes_read += num_bytes; - chunk_start += num_bytes; - } - while (bytes_read != frame_size); - - buffer_start = (uint_32 *) buffer; - buffer_end = (uint_32 *) (buffer + frame_size); - - bits_left = 0; - return 0; -} - - -static inline void -bitstream_fill_current() -{ - current_word = *buffer_start++; - current_word = swab32(current_word); -} - -// -// The fast paths for _get is in the -// bitstream.h header file so it can be inlined. -// -// The "bottom half" of this routine is suffixed _bh -// -// -ah -// - -uint_32 -bitstream_get_bh(uint_32 num_bits) -{ - uint_32 result; - - num_bits -= bits_left; - result = (current_word << (32 - bits_left)) >> (32 - bits_left); - - bitstream_fill_current(); - - if(num_bits != 0) - result = (result << num_bits) | (current_word >> (32 - num_bits)); - - bits_left = 32 - num_bits; - - return result; -} - -void -bitstream_init(ssize_t(*fill_function)(uint_8**,uint_8**)) -{ - // Setup the buffer fill callback - bitstream_fill_buffer = fill_function; -} diff --git a/ac3dec/libac3/bitstream.h b/ac3dec/libac3/bitstream.h deleted file mode 100644 index 5e0d8f0..0000000 --- a/ac3dec/libac3/bitstream.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * bitstream.h - * - * Copyright (C) Aaron Holtzman - Dec 1999 - * - * This file is part of ac3dec, a free AC-3 audio decoder - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -//My new and improved vego-matic endian swapping routine -//(stolen from the kernel) -#ifdef WORDS_BIGENDIAN - -# define swab32(x) (x) - -#else - -# if defined (__i386__) - -# define swab32(x) __i386_swab32(x) - static inline uint_32 __i386_swab32(uint_32 x) - { - __asm__("bswap %0" : "=r" (x) : "0" (x)); - return x; - } - -# else - -# define swab32(x)\ -((((uint_8*)&x)[0] << 24) | (((uint_8*)&x)[1] << 16) | \ - (((uint_8*)&x)[2] << 8) | (((uint_8*)&x)[3])) - -# endif -#endif - -extern uint_32 bits_left; -extern uint_32 current_word; - -void bitstream_init(ssize_t(*fill_function)(uint_8**,uint_8**)); - -int bitstream_get_byte(void); - -uint_8 *bitstream_get_buffer_start(void); -int bitstream_buffer_frame(uint_32 frame_size); - -uint_32 bitstream_get_bh(uint_32 num_bits); - -static inline uint_32 -bitstream_get(uint_32 num_bits) -{ - uint_32 result; - - if(num_bits < bits_left) - { - result = (current_word << (32 - bits_left)) >> (32 - num_bits); - bits_left -= num_bits; - return result; - } - - return bitstream_get_bh(num_bits); -} - diff --git a/ac3dec/libac3/coeff.c b/ac3dec/libac3/coeff.c deleted file mode 100644 index b9f03ff..0000000 --- a/ac3dec/libac3/coeff.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * coeff.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "bitstream.h" -#include "dither.h" -#include "coeff.h" - -// -//Lookup tables of 0.15 two's complement quantization values -// -static const uint_16 q_1[3] = -{ - ( -2 << 15)/3, 0,( 2 << 15)/3 -}; - -static const uint_16 q_2[5] = -{ - ( -4 << 15)/5,( -2 << 15)/5, 0, - ( 2 << 15)/5,( 4 << 15)/5 -}; - -static const uint_16 q_3[7] = -{ - ( -6 << 15)/7,( -4 << 15)/7,( -2 << 15)/7, 0, - ( 2 << 15)/7,( 4 << 15)/7,( 6 << 15)/7 -}; - -static const uint_16 q_4[11] = -{ - (-10 << 15)/11,(-8 << 15)/11,(-6 << 15)/11, ( -4 << 15)/11,(-2 << 15)/11, 0, - ( 2 << 15)/11,( 4 << 15)/11,( 6 << 15)/11, ( 8 << 15)/11,(10 << 15)/11 -}; - -static const uint_16 q_5[15] = -{ - (-14 << 15)/15,(-12 << 15)/15,(-10 << 15)/15, - ( -8 << 15)/15,( -6 << 15)/15,( -4 << 15)/15, - ( -2 << 15)/15, 0 ,( 2 << 15)/15, - ( 4 << 15)/15,( 6 << 15)/15,( 8 << 15)/15, - ( 10 << 15)/15,( 12 << 15)/15,( 14 << 15)/15 -}; - -// -// Scale factors for convert_to_float -// - -static const uint_32 u32_scale_factors[25] = -{ - 0x38000000, //2 ^ -(0 + 15) - 0x37800000, //2 ^ -(1 + 15) - 0x37000000, //2 ^ -(2 + 15) - 0x36800000, //2 ^ -(3 + 15) - 0x36000000, //2 ^ -(4 + 15) - 0x35800000, //2 ^ -(5 + 15) - 0x35000000, //2 ^ -(6 + 15) - 0x34800000, //2 ^ -(7 + 15) - 0x34000000, //2 ^ -(8 + 15) - 0x33800000, //2 ^ -(9 + 15) - 0x33000000, //2 ^ -(10 + 15) - 0x32800000, //2 ^ -(11 + 15) - 0x32000000, //2 ^ -(12 + 15) - 0x31800000, //2 ^ -(13 + 15) - 0x31000000, //2 ^ -(14 + 15) - 0x30800000, //2 ^ -(15 + 15) - 0x30000000, //2 ^ -(16 + 15) - 0x2f800000, //2 ^ -(17 + 15) - 0x2f000000, //2 ^ -(18 + 15) - 0x2e800000, //2 ^ -(19 + 15) - 0x2e000000, //2 ^ -(20 + 15) - 0x2d800000, //2 ^ -(21 + 15) - 0x2d000000, //2 ^ -(22 + 15) - 0x2c800000, //2 ^ -(23 + 15) - 0x2c000000 //2 ^ -(24 + 15) -}; - -static float *scale_factor = (float*)u32_scale_factors; - -//These store the persistent state of the packed mantissas -static uint_16 m_1[3]; -static uint_16 m_2[3]; -static uint_16 m_4[2]; -static uint_16 m_1_pointer; -static uint_16 m_2_pointer; -static uint_16 m_4_pointer; - -//Conversion from bap to number of bits in the mantissas -//zeros account for cases 0,1,2,4 which are special cased -static uint_16 qnttztab[16] = { 0, 0, 0, 3, 0 , 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16}; - -static void coeff_reset(void); -static sint_16 coeff_get_mantissa(uint_16 bap, uint_16 dithflag); -static void coeff_uncouple_ch(float samples[],bsi_t *bsi,audblk_t *audblk,uint_32 ch); - -// -// Convert a 0.15 fixed point number into IEEE single -// precision floating point and scale by 2^-exp -// -static inline float -convert_to_float(uint_16 exp, sint_16 mantissa) -{ - float x; - - //the scale by 2^-15 is built into the scale factor table - x = mantissa * scale_factor[exp]; - - return x; -} - -void -coeff_unpack(bsi_t *bsi, audblk_t *audblk, stream_samples_t samples) -{ - uint_16 i,j; - uint_32 done_cpl = 0; - sint_16 mantissa; - - coeff_reset(); - - for(i=0; i< bsi->nfchans; i++) - { - for(j=0; j < audblk->endmant[i]; j++) - { - mantissa = coeff_get_mantissa(audblk->fbw_bap[i][j],audblk->dithflag[i]); - samples[i][j] = convert_to_float(audblk->fbw_exp[i][j],mantissa); - } - - if(audblk->cplinu && audblk->chincpl[i] && !(done_cpl)) - { - // ncplmant is equal to 12 * ncplsubnd - // Don't dither coupling channel until channel separation so that - // interchannel noise is uncorrelated - for(j=audblk->cplstrtmant; j < audblk->cplendmant; j++) - audblk->cplmant[j] = coeff_get_mantissa(audblk->cpl_bap[j],0); - done_cpl = 1; - } - } - - //uncouple the channel if necessary - if(audblk->cplinu) - { - for(i=0; i< bsi->nfchans; i++) - { - if(audblk->chincpl[i]) - coeff_uncouple_ch(samples[i],bsi,audblk,i); - } - - } - - if(bsi->lfeon) - { - // There are always 7 mantissas for lfe, no dither for lfe - for(j=0; j < 7 ; j++) - { - mantissa = coeff_get_mantissa(audblk->lfe_bap[j],0); - samples[5][j] = convert_to_float(audblk->lfe_exp[j],mantissa); - } - } -} - -// -//Fetch a mantissa from the bitstream -// -//The mantissa returned is a signed 0.15 fixed point number -// -static sint_16 -coeff_get_mantissa(uint_16 bap, uint_16 dithflag) -{ - uint_16 mantissa; - uint_16 group_code; - - //If the bap is 0-5 then we have special cases to take care of - switch(bap) - { - case 0: - if(dithflag) - mantissa = dither_gen(); - else - mantissa = 0; - break; - - case 1: - if(m_1_pointer > 2) - { - group_code = bitstream_get(5); - - if(group_code > 26) - goto error; - - m_1[0] = group_code / 9; - m_1[1] = (group_code % 9) / 3; - m_1[2] = (group_code % 9) % 3; - m_1_pointer = 0; - } - mantissa = m_1[m_1_pointer++]; - mantissa = q_1[mantissa]; - break; - case 2: - - if(m_2_pointer > 2) - { - group_code = bitstream_get(7); - - if(group_code > 124) - goto error; - - m_2[0] = group_code / 25; - m_2[1] = (group_code % 25) / 5 ; - m_2[2] = (group_code % 25) % 5 ; - m_2_pointer = 0; - } - mantissa = m_2[m_2_pointer++]; - mantissa = q_2[mantissa]; - break; - - case 3: - mantissa = bitstream_get(3); - - if(mantissa > 6) - goto error; - - mantissa = q_3[mantissa]; - break; - - case 4: - if(m_4_pointer > 1) - { - group_code = bitstream_get(7); - - if(group_code > 120) - goto error; - - m_4[0] = group_code / 11; - m_4[1] = group_code % 11; - m_4_pointer = 0; - } - mantissa = m_4[m_4_pointer++]; - mantissa = q_4[mantissa]; - break; - - case 5: - mantissa = bitstream_get(4); - - if(mantissa > 14) - goto error; - - mantissa = q_5[mantissa]; - break; - - default: - mantissa = bitstream_get(qnttztab[bap]); - mantissa <<= 16 - qnttztab[bap]; - } - - return mantissa; - - - -error: - if(!error_flag) - fprintf(stderr,"** Invalid mantissa - skipping frame **\n"); - error_flag = 1; - - return 0; -} - -// -// Reset the mantissa state -// -static void -coeff_reset(void) -{ - m_1[2] = m_1[1] = m_1[0] = 0; - m_2[2] = m_2[1] = m_2[0] = 0; - m_4[1] = m_4[0] = 0; - m_1_pointer = m_2_pointer = m_4_pointer = 3; -} - -// -// Uncouple the coupling channel into a fbw channel -// -static void -coeff_uncouple_ch(float samples[],bsi_t *bsi,audblk_t *audblk,uint_32 ch) -{ - uint_32 bnd = 0; - uint_32 sub_bnd = 0; - uint_32 i,j; - float cpl_coord = 1.0; - uint_32 cpl_exp_tmp; - uint_32 cpl_mant_tmp; - sint_16 mantissa; - - - for(i=audblk->cplstrtmant;icplendmant;) - { - if(!audblk->cplbndstrc[sub_bnd++]) - { - cpl_exp_tmp = audblk->cplcoexp[ch][bnd] + 3 * audblk->mstrcplco[ch]; - if(audblk->cplcoexp[ch][bnd] == 15) - cpl_mant_tmp = (audblk->cplcomant[ch][bnd]) << 11; - else - cpl_mant_tmp = ((0x10) | audblk->cplcomant[ch][bnd]) << 10; - - cpl_coord = convert_to_float(cpl_exp_tmp,cpl_mant_tmp) * 8.0f; - - //Invert the phase for the right channel if necessary - if(bsi->acmod == 0x2 && audblk->phsflginu && ch == 1 && audblk->phsflg[bnd]) - cpl_coord *= -1; - - bnd++; - } - - for(j=0;j < 12; j++) - { - //Get new dither values for each channel if necessary, so - //the channels are uncorrelated - if(audblk->dithflag[ch] && audblk->cpl_bap[i] == 0) - mantissa = dither_gen(); - else - mantissa = audblk->cplmant[i]; - - samples[i] = cpl_coord * convert_to_float(audblk->cpl_exp[i],mantissa); - - i++; - } - } -} diff --git a/ac3dec/libac3/coeff.h b/ac3dec/libac3/coeff.h deleted file mode 100644 index dc822a9..0000000 --- a/ac3dec/libac3/coeff.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * coeff.h - * - * Copyright (C) Aaron Holtzman - Feb 2000 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -void coeff_unpack(bsi_t *bsi, audblk_t *audblk,stream_samples_t samples); diff --git a/ac3dec/libac3/crc.c b/ac3dec/libac3/crc.c deleted file mode 100644 index 3210ce7..0000000 --- a/ac3dec/libac3/crc.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * crc.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - -#include - -#include "crc.h" - -static const uint_16 crc_lut[256] = -{ - 0x0000,0x8005,0x800f,0x000a,0x801b,0x001e,0x0014,0x8011, - 0x8033,0x0036,0x003c,0x8039,0x0028,0x802d,0x8027,0x0022, - 0x8063,0x0066,0x006c,0x8069,0x0078,0x807d,0x8077,0x0072, - 0x0050,0x8055,0x805f,0x005a,0x804b,0x004e,0x0044,0x8041, - 0x80c3,0x00c6,0x00cc,0x80c9,0x00d8,0x80dd,0x80d7,0x00d2, - 0x00f0,0x80f5,0x80ff,0x00fa,0x80eb,0x00ee,0x00e4,0x80e1, - 0x00a0,0x80a5,0x80af,0x00aa,0x80bb,0x00be,0x00b4,0x80b1, - 0x8093,0x0096,0x009c,0x8099,0x0088,0x808d,0x8087,0x0082, - 0x8183,0x0186,0x018c,0x8189,0x0198,0x819d,0x8197,0x0192, - 0x01b0,0x81b5,0x81bf,0x01ba,0x81ab,0x01ae,0x01a4,0x81a1, - 0x01e0,0x81e5,0x81ef,0x01ea,0x81fb,0x01fe,0x01f4,0x81f1, - 0x81d3,0x01d6,0x01dc,0x81d9,0x01c8,0x81cd,0x81c7,0x01c2, - 0x0140,0x8145,0x814f,0x014a,0x815b,0x015e,0x0154,0x8151, - 0x8173,0x0176,0x017c,0x8179,0x0168,0x816d,0x8167,0x0162, - 0x8123,0x0126,0x012c,0x8129,0x0138,0x813d,0x8137,0x0132, - 0x0110,0x8115,0x811f,0x011a,0x810b,0x010e,0x0104,0x8101, - 0x8303,0x0306,0x030c,0x8309,0x0318,0x831d,0x8317,0x0312, - 0x0330,0x8335,0x833f,0x033a,0x832b,0x032e,0x0324,0x8321, - 0x0360,0x8365,0x836f,0x036a,0x837b,0x037e,0x0374,0x8371, - 0x8353,0x0356,0x035c,0x8359,0x0348,0x834d,0x8347,0x0342, - 0x03c0,0x83c5,0x83cf,0x03ca,0x83db,0x03de,0x03d4,0x83d1, - 0x83f3,0x03f6,0x03fc,0x83f9,0x03e8,0x83ed,0x83e7,0x03e2, - 0x83a3,0x03a6,0x03ac,0x83a9,0x03b8,0x83bd,0x83b7,0x03b2, - 0x0390,0x8395,0x839f,0x039a,0x838b,0x038e,0x0384,0x8381, - 0x0280,0x8285,0x828f,0x028a,0x829b,0x029e,0x0294,0x8291, - 0x82b3,0x02b6,0x02bc,0x82b9,0x02a8,0x82ad,0x82a7,0x02a2, - 0x82e3,0x02e6,0x02ec,0x82e9,0x02f8,0x82fd,0x82f7,0x02f2, - 0x02d0,0x82d5,0x82df,0x02da,0x82cb,0x02ce,0x02c4,0x82c1, - 0x8243,0x0246,0x024c,0x8249,0x0258,0x825d,0x8257,0x0252, - 0x0270,0x8275,0x827f,0x027a,0x826b,0x026e,0x0264,0x8261, - 0x0220,0x8225,0x822f,0x022a,0x823b,0x023e,0x0234,0x8231, - 0x8213,0x0216,0x021c,0x8219,0x0208,0x820d,0x8207,0x0202 -}; - -static uint_16 state; - -void -crc_init(void) -{ - state = 0; -} - - -inline void crc_process_byte(uint_8 data) -{ - state = crc_lut[data ^ (state>>8)] ^ (state<<8); -} - -void -crc_process_frame(uint_8 *data,uint_32 num_bytes) -{ - uint_32 i; - - for(i=0;i -#include "debug.h" - -static int debug_level = -1; - -// Determine is debug output is required. -// We could potentially have multiple levels of debug info -int debug_is_on(void) -{ - char *env_var; - - if(debug_level < 0) - { - env_var = getenv("AC3_DEBUG"); - - if (env_var) - { - debug_level = 1; - } - else - debug_level = 0; - } - - return debug_level; -} - -//If you don't have gcc, then ya don't get debug output -#ifndef __GNUC__ -void dprintf(char fmt[],...) -{ - int foo = 0; -} -#endif - diff --git a/ac3dec/libac3/debug.h b/ac3dec/libac3/debug.h deleted file mode 100644 index f45cb5b..0000000 --- a/ac3dec/libac3/debug.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * debug.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -int debug_is_on(void); - -#ifdef __GNUC__ -#define dprintf(format,args...)\ -{\ - if (debug_is_on())\ - {\ - fprintf(stderr,format,## args);\ - }\ -} -#else -void dprintf(char fmt[],...); -#endif diff --git a/ac3dec/libac3/decode.c b/ac3dec/libac3/decode.c deleted file mode 100644 index 9875919..0000000 --- a/ac3dec/libac3/decode.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * decode.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#include "ac3.h" -#include "ac3_internal.h" -#include "bitstream.h" -#include "imdct.h" -#include "exponent.h" -#include "coeff.h" -#include "bit_allocate.h" -#include "parse.h" -#include "crc.h" -#include "stats.h" -#include "rematrix.h" -#include "sanity_check.h" -#include "downmix.h" -#include "debug.h" - -//our global config structure -ac3_config_t ac3_config; -uint_32 error_flag = 0; - -static audblk_t audblk; -static bsi_t bsi; -static syncinfo_t syncinfo; -static uint_32 frame_count = 0; -static uint_32 done_banner; -static ac3_frame_t frame; - -//the floating point samples for one audblk -static stream_samples_t samples; - -//the integer samples for the entire frame (with enough space for 2 ch out) -//if this size change, be sure to change the size when muting -static sint_16 s16_samples[6 * 6 * 256]; - -void -ac3_init(ac3_config_t *config) -{ - memcpy(&ac3_config,config,sizeof(ac3_config_t)); - - bitstream_init(config->fill_buffer_callback); - imdct_init(); - sanity_check_init(&syncinfo,&bsi,&audblk); - - frame.audio_data = s16_samples; -} - -ac3_frame_t* -ac3_decode_frame(void) -{ - uint_32 i; - - //find a syncframe and parse - if (parse_syncinfo(&syncinfo) < 0) - return NULL; - if(error_flag) - goto error; - - dprintf("(decode) begin frame %d\n",frame_count++); - frame.sampling_rate = syncinfo.sampling_rate; - - parse_bsi(&bsi); - - if(!done_banner && !(ac3_config.flags & AC3_QUIET)) - { - stats_print_banner(&syncinfo,&bsi); - done_banner = 1; - } - - for(i=0; i < 6; i++) - { - //Initialize freq/time sample storage - memset(samples,0,sizeof(float) * 256 * (bsi.nfchans + bsi.lfeon)); - - // Extract most of the audblk info from the bitstream - // (minus the mantissas - parse_audblk(&bsi,&audblk); - - // Take the differential exponent data and turn it into - // absolute exponents - exponent_unpack(&bsi,&audblk); - if(error_flag) - goto error; - - // Figure out how many bits per mantissa - bit_allocate(syncinfo.fscod,&bsi,&audblk); - - // Extract the mantissas from the stream and - // generate floating point frequency coefficients - coeff_unpack(&bsi,&audblk,samples); - if(error_flag) - goto error; - - if(bsi.acmod == 0x2) - rematrix(&audblk,samples); - - // Convert the frequency samples into time samples - imdct(&bsi,&audblk,samples); - - // Downmix into the requested number of channels - // and convert floating point to sint_16 - downmix(&bsi,samples,&s16_samples[i * ac3_config.num_output_ch * 256]); - - sanity_check(&syncinfo,&bsi,&audblk); - if(error_flag) - goto error; - } - parse_auxdata(&syncinfo); - - return &frame; - -error: - //mute the frame - memset(s16_samples,0,sizeof(sint_16) * 256 * 2 * 6); - - error_flag = 0; - return &frame; - -} diff --git a/ac3dec/libac3/decode.h b/ac3dec/libac3/decode.h deleted file mode 100644 index bb84a11..0000000 --- a/ac3dec/libac3/decode.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * decode.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ diff --git a/ac3dec/libac3/dither.c b/ac3dec/libac3/dither.c deleted file mode 100644 index 31e74f6..0000000 --- a/ac3dec/libac3/dither.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * dither.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "dither.h" - - -const uint_16 dither_lut[256] = -{ - 0x0000, 0xa011, 0xe033, 0x4022, 0x6077, 0xc066, 0x8044, 0x2055, - 0xc0ee, 0x60ff, 0x20dd, 0x80cc, 0xa099, 0x0088, 0x40aa, 0xe0bb, - 0x21cd, 0x81dc, 0xc1fe, 0x61ef, 0x41ba, 0xe1ab, 0xa189, 0x0198, - 0xe123, 0x4132, 0x0110, 0xa101, 0x8154, 0x2145, 0x6167, 0xc176, - 0x439a, 0xe38b, 0xa3a9, 0x03b8, 0x23ed, 0x83fc, 0xc3de, 0x63cf, - 0x8374, 0x2365, 0x6347, 0xc356, 0xe303, 0x4312, 0x0330, 0xa321, - 0x6257, 0xc246, 0x8264, 0x2275, 0x0220, 0xa231, 0xe213, 0x4202, - 0xa2b9, 0x02a8, 0x428a, 0xe29b, 0xc2ce, 0x62df, 0x22fd, 0x82ec, - 0x8734, 0x2725, 0x6707, 0xc716, 0xe743, 0x4752, 0x0770, 0xa761, - 0x47da, 0xe7cb, 0xa7e9, 0x07f8, 0x27ad, 0x87bc, 0xc79e, 0x678f, - 0xa6f9, 0x06e8, 0x46ca, 0xe6db, 0xc68e, 0x669f, 0x26bd, 0x86ac, - 0x6617, 0xc606, 0x8624, 0x2635, 0x0660, 0xa671, 0xe653, 0x4642, - 0xc4ae, 0x64bf, 0x249d, 0x848c, 0xa4d9, 0x04c8, 0x44ea, 0xe4fb, - 0x0440, 0xa451, 0xe473, 0x4462, 0x6437, 0xc426, 0x8404, 0x2415, - 0xe563, 0x4572, 0x0550, 0xa541, 0x8514, 0x2505, 0x6527, 0xc536, - 0x258d, 0x859c, 0xc5be, 0x65af, 0x45fa, 0xe5eb, 0xa5c9, 0x05d8, - 0xae79, 0x0e68, 0x4e4a, 0xee5b, 0xce0e, 0x6e1f, 0x2e3d, 0x8e2c, - 0x6e97, 0xce86, 0x8ea4, 0x2eb5, 0x0ee0, 0xaef1, 0xeed3, 0x4ec2, - 0x8fb4, 0x2fa5, 0x6f87, 0xcf96, 0xefc3, 0x4fd2, 0x0ff0, 0xafe1, - 0x4f5a, 0xef4b, 0xaf69, 0x0f78, 0x2f2d, 0x8f3c, 0xcf1e, 0x6f0f, - 0xede3, 0x4df2, 0x0dd0, 0xadc1, 0x8d94, 0x2d85, 0x6da7, 0xcdb6, - 0x2d0d, 0x8d1c, 0xcd3e, 0x6d2f, 0x4d7a, 0xed6b, 0xad49, 0x0d58, - 0xcc2e, 0x6c3f, 0x2c1d, 0x8c0c, 0xac59, 0x0c48, 0x4c6a, 0xec7b, - 0x0cc0, 0xacd1, 0xecf3, 0x4ce2, 0x6cb7, 0xcca6, 0x8c84, 0x2c95, - 0x294d, 0x895c, 0xc97e, 0x696f, 0x493a, 0xe92b, 0xa909, 0x0918, - 0xe9a3, 0x49b2, 0x0990, 0xa981, 0x89d4, 0x29c5, 0x69e7, 0xc9f6, - 0x0880, 0xa891, 0xe8b3, 0x48a2, 0x68f7, 0xc8e6, 0x88c4, 0x28d5, - 0xc86e, 0x687f, 0x285d, 0x884c, 0xa819, 0x0808, 0x482a, 0xe83b, - 0x6ad7, 0xcac6, 0x8ae4, 0x2af5, 0x0aa0, 0xaab1, 0xea93, 0x4a82, - 0xaa39, 0x0a28, 0x4a0a, 0xea1b, 0xca4e, 0x6a5f, 0x2a7d, 0x8a6c, - 0x4b1a, 0xeb0b, 0xab29, 0x0b38, 0x2b6d, 0x8b7c, 0xcb5e, 0x6b4f, - 0x8bf4, 0x2be5, 0x6bc7, 0xcbd6, 0xeb83, 0x4b92, 0x0bb0, 0xaba1 -}; - -uint_16 lfsr_state = 1; - -// -// see dither_gen (inline-able) in dither.h -// - -#if 0 - -// -// this is the old dither_gen with is much slower than the new inlined -// lut version and is still here because it's easier to understand. -// - -/* - * Generate eight bits of pseudo-entropy using a 16 bit linear - * feedback shift register (LFSR). The primitive polynomial used - * is 1 + x^4 + x^14 + x^16. - * - * The distribution is uniform, over the range [-0.707,0.707] - * - */ - -uint_16 dither_gen(void) -{ - int i; - uint_32 state; - - //explicitly bring the state into a local var as gcc > 3.0? - //doesn't know how to optimize out the stores - state = lfsr_state; - - //Generate eight pseudo random bits - for(i=0;i<8;i++) - { - state <<= 1; - - if(state & 0x10000) - state ^= 0xa011; - } - - lfsr_state = state; - - return (((((sint_32)state<<8)>>8) * (sint_32) (0.707106 * 256.0))>>16); -} - -#endif diff --git a/ac3dec/libac3/dither.h b/ac3dec/libac3/dither.h deleted file mode 100644 index 6d68e1b..0000000 --- a/ac3dec/libac3/dither.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * dither.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -extern uint_16 lfsr_state; -extern const uint_16 dither_lut[256]; - -static inline uint_16 dither_gen(void) -{ - sint_16 state; - - state = dither_lut[lfsr_state >> 8] ^ (lfsr_state << 8); - - lfsr_state = (uint_16) state; - - return ((state * (sint_32) (0.707106 * 256.0))>>8); -} diff --git a/ac3dec/libac3/downmix.c b/ac3dec/libac3/downmix.c deleted file mode 100644 index 18271f1..0000000 --- a/ac3dec/libac3/downmix.c +++ /dev/null @@ -1,557 +0,0 @@ -/* - * - * downmix.c - * - * Copyright (C) Aaron Holtzman - Sept 1999 - * - * Originally based on code by Yuqing Deng. - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#include -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "downmix.h" -#include "debug.h" - - -//Pre-scaled downmix coefficients -static float cmixlev_lut[4] = { 0.2928, 0.2468, 0.2071, 0.2468 }; -static float smixlev_lut[4] = { 0.2928, 0.2071, 0.0 , 0.2071 }; - -static void -downmix_3f_2r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float clev,slev; - float *centre = 0, *left = 0, *right = 0, *left_sur = 0, *right_sur = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - left_sur = samples[3]; - right_sur = samples[4]; - - clev = cmixlev_lut[bsi->cmixlev]; - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + clev * *centre + slev * *left_sur++; - right_tmp= 0.4142f * *right++ + clev * *centre++ + slev * *right_sur++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - // printf("[0] = %.6f, [1] = %.6f\n", left_tmp, right_tmp); - } -} - -static void -downmix_3f_2r_to_4ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp, left_tmp, rear_right_tmp, rear_left_tmp; - float clev,slev; - float *centre = 0, *left = 0, *right = 0, *left_sur = 0, *right_sur = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - left_sur = samples[3]; - right_sur = samples[4]; - - clev = cmixlev_lut[bsi->cmixlev]; - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + clev * *centre; - right_tmp= 0.4142f * *right++ + clev * *centre++; - rear_left_tmp = 0.4142f * *left_sur++; - rear_right_tmp = 0.4142f * *right_sur++; - - s16_samples[j * 4 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 4 + 1] = (sint_16) (right_tmp * 32767.0f); - s16_samples[j * 4 + 2] = (sint_16) (rear_left_tmp * 32767.0f); - s16_samples[j * 4 + 3] = (sint_16) (rear_right_tmp * 32767.0f); -#if 0 - printf("[0] = %.6f, [1] = %.6f, [2] = %.6f, [3] = %.6f\n", - left_tmp, right_tmp, rear_left_tmp, rear_right_tmp); -#endif - } -} - -static void -downmix_3f_2r_to_6ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp, centre_tmp, left_tmp, rear_right_tmp, rear_left_tmp, lfe_tmp; - float clev,slev; - float *centre = 0, *left = 0, *right = 0, *left_sur = 0, *right_sur = 0, *lfe = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - left_sur = samples[3]; - right_sur = samples[4]; - lfe = samples[5]; - - clev = cmixlev_lut[bsi->cmixlev]; - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++; - right_tmp= 0.4142f * *right++; - centre_tmp = 0.4142f * *centre++; - rear_left_tmp = 0.4142f * *left_sur++; - rear_right_tmp = 0.4142f * *right_sur++; - lfe_tmp = bsi->lfeon ? 0.4142f * *lfe++ : (float)0.0; - - s16_samples[j * 6 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 6 + 1] = (sint_16) (right_tmp * 32767.0f); - s16_samples[j * 6 + 2] = (sint_16) (rear_left_tmp * 32767.0f); - s16_samples[j * 6 + 3] = (sint_16) (rear_right_tmp * 32767.0f); - s16_samples[j * 6 + 4] = (sint_16) (centre_tmp * 32767.0f); - s16_samples[j * 6 + 5] = (sint_16) (lfe_tmp * 32767.0f); -#if 0 - printf("[0] = %.6f, [1] = %.6f, [2] = %.6f, [3] = %.6f, [4] = %.6f, [5] = %.6f\n", - left_tmp, right_tmp, rear_left_tmp, rear_right_tmp, - centre_tmp, lfe_tmp); -#endif - } -} - -static void -downmix_2f_2r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float slev; - float *left = 0, *right = 0, *left_sur = 0, *right_sur = 0; - - left = samples[0]; - right = samples[1]; - left_sur = samples[2]; - right_sur = samples[3]; - - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + slev * *left_sur++; - right_tmp= 0.4142f * *right++ + slev * *right_sur++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - } -} - -static void -downmix_3f_1r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float clev,slev; - float *centre = 0, *left = 0, *right = 0, *sur = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - //Mono surround - sur = samples[3]; - - clev = cmixlev_lut[bsi->cmixlev]; - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + clev * *centre++ + slev * *sur; - right_tmp= 0.4142f * *right++ + clev * *centre + slev * *sur++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - } -} - - -static void -downmix_2f_1r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float slev; - float *left = 0, *right = 0, *sur = 0; - - left = samples[0]; - right = samples[1]; - //Mono surround - sur = samples[2]; - - slev = smixlev_lut[bsi->surmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + slev * *sur; - right_tmp= 0.4142f * *right++ + slev * *sur++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - } -} - -static void -downmix_3f_0r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float right_tmp; - float left_tmp; - float clev; - float *centre = 0, *left = 0, *right = 0; - - left = samples[0]; - centre = samples[1]; - right = samples[2]; - - clev = cmixlev_lut[bsi->cmixlev]; - - for (j = 0; j < 256; j++) - { - left_tmp = 0.4142f * *left++ + clev * *centre; - right_tmp= 0.4142f * *right++ + clev * *centre++; - - s16_samples[j * 2 ] = (sint_16) (left_tmp * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (right_tmp * 32767.0f); - } -} - -static void -downmix_2f_0r_to_6ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float *left = 0, *right = 0; - - left = samples[0]; - right = samples[1]; - - for (j = 0; j < 256; j++) - { - s16_samples[j * 6 ] = (sint_16) (*left++ * 32767.0f); - s16_samples[j * 6 + 1] = (sint_16) (*right++ * 32767.0f); - } //FIXME enable output on surround channels, too. -} - -static void -downmix_2f_0r_to_2ch(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - uint_32 j; - float *left = 0, *right = 0; - - left = samples[0]; - right = samples[1]; - - for (j = 0; j < 256; j++) - { - s16_samples[j * 2 ] = (sint_16) (*left++ * 32767.0f); - s16_samples[j * 2 + 1] = (sint_16) (*right++ * 32767.0f); - } -} - -static void -downmix_1f_0r_to_2ch(float *centre,sint_16 *s16_samples) -{ - uint_32 j; - float tmp; - - //Mono program! - - for (j = 0; j < 256; j++) - { - tmp = 32767.0f * 0.7071f * *centre++; - - s16_samples[j * 2 ] = s16_samples[j * 2 + 1] = (sint_16) tmp; - } -} - -// -// Downmix into 2 or 4 channels (4 ch isn't in quite yet) -// -// The downmix function names have the following format -// -// downmix_Xf_Yr_to_[2|4|6]ch[_dolby] -// -// where X = number of front channels -// Y = number of rear channels -// [2|4] = number of output channels -// [_dolby] = with or without dolby surround mix -// - -void downmix(bsi_t* bsi, stream_samples_t samples,sint_16 *s16_samples) -{ - if(bsi->acmod > 7) - dprintf("(downmix) invalid acmod number\n"); - - // - //There are two main cases, with or without Dolby Surround - // - if(ac3_config.flags & AC3_DOLBY_SURR_ENABLE) - { - fprintf(stderr,"Dolby Surround Mixes not currently enabled\n"); - exit(1); - } - - //Non-Dolby surround downmixes - switch(bsi->acmod) - { - // 3/2 - case 7: - switch (ac3_config.num_output_ch) { - case 2: - downmix_3f_2r_to_2ch(bsi,samples,s16_samples); - break; - case 4: - downmix_3f_2r_to_4ch(bsi,samples,s16_samples); - break; - case 6: - downmix_3f_2r_to_6ch(bsi,samples,s16_samples); - break; - default: - fprintf(stderr,"unsupported 3/2 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - break; - - // 2/2 - case 6: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 2/2 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_2f_2r_to_2ch(bsi,samples,s16_samples); - break; - - // 3/1 - case 5: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 3/1 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_3f_1r_to_2ch(bsi,samples,s16_samples); - break; - - // 2/1 - case 4: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 2/1 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_2f_1r_to_2ch(bsi,samples,s16_samples); - break; - - // 3/0 - case 3: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 3/0 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_3f_0r_to_2ch(bsi,samples,s16_samples); - break; - - // 2/0 - 2f_0r_to_6ch not really, but allows -D pcm.surround51:1 with 2/0 and 3/2 input (VDR e.g.) - case 2: - switch (ac3_config.num_output_ch) { - case 2: - downmix_2f_0r_to_2ch(bsi,samples,s16_samples); - break; - case 6: - downmix_2f_0r_to_6ch(bsi,samples,s16_samples); - break; - default: - fprintf(stderr,"unsupported 2/0 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - break; - - // 1/0 - case 1: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 1/0 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_1f_0r_to_2ch(samples[0],s16_samples); - break; - - // 1+1 - case 0: - if (ac3_config.num_output_ch != 2) { - fprintf(stderr,"unsupported 1/1 channels %d\n", ac3_config.num_output_ch); - exit(1); - } - downmix_1f_0r_to_2ch(samples[ac3_config.dual_mono_ch_sel],s16_samples); - break; - } -} - - - -#if 0 - - //the dolby mixes lay here for the time being - switch(bsi->acmod) - { - // 3/2 - case 7: - left = samples[0]; - centre = samples[1]; - right = samples[2]; - left_sur = samples[3]; - right_sur = samples[4]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.2265f * *left_sur++ + 0.2265f * *right_sur++; - left_tmp = -1 * right_tmp; - right_tmp += 0.3204f * *right++ + 0.2265f * *centre; - left_tmp += 0.3204f * *left++ + 0.2265f * *centre++; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - - break; - - // 2/2 - case 6: - left = samples[0]; - right = samples[1]; - left_sur = samples[2]; - right_sur = samples[3]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.2265f * *left_sur++ + 0.2265f * *right_sur++; - left_tmp = -1 * right_tmp; - right_tmp += 0.3204f * *right++; - left_tmp += 0.3204f * *left++ ; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - break; - - // 3/1 - case 5: - left = samples[0]; - centre = samples[1]; - right = samples[2]; - //Mono surround - right_sur = samples[3]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.2265f * *right_sur++; - left_tmp = -1 * right_tmp; - right_tmp += 0.3204f * *right++ + 0.2265f * *centre; - left_tmp += 0.3204f * *left++ + 0.2265f * *centre++; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - break; - - // 2/1 - case 4: - left = samples[0]; - right = samples[1]; - //Mono surround - right_sur = samples[2]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.2265f * *right_sur++; - left_tmp = -1 * right_tmp; - right_tmp += 0.3204f * *right++; - left_tmp += 0.3204f * *left++; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - break; - - // 3/0 - case 3: - left = samples[0]; - centre = samples[1]; - right = samples[2]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.3204f * *right++ + 0.2265f * *centre; - left_tmp = 0.3204f * *left++ + 0.2265f * *centre++; - - samples[1][j] = right_tmp; - samples[0][j] = left_tmp; - } - break; - - // 2/0 - case 2: - //Do nothing! - break; - - // 1/0 - case 1: - //Mono program! - right = samples[0]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.7071f * *right++; - - samples[1][j] = right_tmp; - samples[0][j] = right_tmp; - } - - break; - - // 1+1 - case 0: - //Dual mono, output selected by user - right = samples[ac3_config.dual_mono_ch_sel]; - - for (j = 0; j < 256; j++) - { - right_tmp = 0.7071f * *right++; - - samples[1][j] = right_tmp; - samples[0][j] = right_tmp; - } - break; -#endif diff --git a/ac3dec/libac3/downmix.h b/ac3dec/libac3/downmix.h deleted file mode 100644 index 7537c62..0000000 --- a/ac3dec/libac3/downmix.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * - * downmix.h - * - * Copyright (C) Aaron Holtzman - Sept 1999 - * - * Originally based on code by Yeqing Deng. - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -void downmix(bsi_t* bsi, stream_samples_t stream_samples,sint_16 *s16_samples); diff --git a/ac3dec/libac3/exponent.c b/ac3dec/libac3/exponent.c deleted file mode 100644 index 98111a5..0000000 --- a/ac3dec/libac3/exponent.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * exponent.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "exponent.h" - - -static void exp_unpack_ch(uint_16 type,uint_16 expstr,uint_16 ngrps,uint_16 initial_exp, - uint_16 exps[], uint_16 *dest); - -void -exponent_unpack( bsi_t *bsi, audblk_t *audblk) -{ - uint_16 i; - - for(i=0; i< bsi->nfchans; i++) - exp_unpack_ch(UNPACK_FBW, audblk->chexpstr[i], audblk->nchgrps[i], audblk->exps[i][0], - &audblk->exps[i][1], audblk->fbw_exp[i]); - - if(audblk->cplinu) - exp_unpack_ch(UNPACK_CPL, audblk->cplexpstr, audblk->ncplgrps, audblk->cplabsexp << 1, - audblk->cplexps, &audblk->cpl_exp[audblk->cplstrtmant]); - - if(bsi->lfeon) - exp_unpack_ch(UNPACK_LFE, audblk->lfeexpstr, 2, audblk->lfeexps[0], - &audblk->lfeexps[1], audblk->lfe_exp); -} - - -static void -exp_unpack_ch(uint_16 type,uint_16 expstr,uint_16 ngrps,uint_16 initial_exp, - uint_16 exps[], uint_16 *dest) -{ - uint_16 i,j; - sint_16 exp_acc; - sint_16 exp_1,exp_2,exp_3; - - if(expstr == EXP_REUSE) - return; - - /* Handle the initial absolute exponent */ - exp_acc = initial_exp; - j = 0; - - /* In the case of a fbw channel then the initial absolute values is - * also an exponent */ - if(type != UNPACK_CPL) - dest[j++] = exp_acc; - - /* Loop through the groups and fill the dest array appropriately */ - for(i=0; i< ngrps; i++) - { - if(exps[i] > 124) - goto error; - - exp_1 = exps[i] / 25; - exp_2 = (exps[i] - (exp_1 * 25)) / 5; - exp_3 = exps[i] - (exp_1 * 25) - (exp_2 * 5) ; - - exp_acc += (exp_1 - 2); - - switch(expstr) - { - case EXP_D45: - dest[j++] = exp_acc; - dest[j++] = exp_acc; - case EXP_D25: - dest[j++] = exp_acc; - case EXP_D15: - dest[j++] = exp_acc; - } - - exp_acc += (exp_2 - 2); - - switch(expstr) - { - case EXP_D45: - dest[j++] = exp_acc; - dest[j++] = exp_acc; - case EXP_D25: - dest[j++] = exp_acc; - case EXP_D15: - dest[j++] = exp_acc; - } - - exp_acc += (exp_3 - 2); - - switch(expstr) - { - case EXP_D45: - dest[j++] = exp_acc; - dest[j++] = exp_acc; - case EXP_D25: - dest[j++] = exp_acc; - case EXP_D15: - dest[j++] = exp_acc; - } - } - - return; - - goto error; -error: - if(!error_flag) - fprintf(stderr,"** Invalid exponent - skipping frame **\n"); - error_flag = 1; -} - diff --git a/ac3dec/libac3/exponent.h b/ac3dec/libac3/exponent.h deleted file mode 100644 index 06c59db..0000000 --- a/ac3dec/libac3/exponent.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * exponent.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#define UNPACK_FBW 1 -#define UNPACK_CPL 2 -#define UNPACK_LFE 4 - -void exponent_unpack( bsi_t *bsi, audblk_t *audblk); diff --git a/ac3dec/libac3/imdct.c b/ac3dec/libac3/imdct.c deleted file mode 100644 index 6fa0e2a..0000000 --- a/ac3dec/libac3/imdct.c +++ /dev/null @@ -1,479 +0,0 @@ -/* - * imdct.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#include -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "imdct.h" - -void imdct_do_256(float data[],float delay[]); -void imdct_do_512(float data[],float delay[]); - -typedef struct complex_s -{ - float real; - float imag; -} complex_t; - - -#define N 512 - - -/* 128 point bit-reverse LUT */ -static uint_8 bit_reverse_512[] = { - 0x00, 0x40, 0x20, 0x60, 0x10, 0x50, 0x30, 0x70, - 0x08, 0x48, 0x28, 0x68, 0x18, 0x58, 0x38, 0x78, - 0x04, 0x44, 0x24, 0x64, 0x14, 0x54, 0x34, 0x74, - 0x0c, 0x4c, 0x2c, 0x6c, 0x1c, 0x5c, 0x3c, 0x7c, - 0x02, 0x42, 0x22, 0x62, 0x12, 0x52, 0x32, 0x72, - 0x0a, 0x4a, 0x2a, 0x6a, 0x1a, 0x5a, 0x3a, 0x7a, - 0x06, 0x46, 0x26, 0x66, 0x16, 0x56, 0x36, 0x76, - 0x0e, 0x4e, 0x2e, 0x6e, 0x1e, 0x5e, 0x3e, 0x7e, - 0x01, 0x41, 0x21, 0x61, 0x11, 0x51, 0x31, 0x71, - 0x09, 0x49, 0x29, 0x69, 0x19, 0x59, 0x39, 0x79, - 0x05, 0x45, 0x25, 0x65, 0x15, 0x55, 0x35, 0x75, - 0x0d, 0x4d, 0x2d, 0x6d, 0x1d, 0x5d, 0x3d, 0x7d, - 0x03, 0x43, 0x23, 0x63, 0x13, 0x53, 0x33, 0x73, - 0x0b, 0x4b, 0x2b, 0x6b, 0x1b, 0x5b, 0x3b, 0x7b, - 0x07, 0x47, 0x27, 0x67, 0x17, 0x57, 0x37, 0x77, - 0x0f, 0x4f, 0x2f, 0x6f, 0x1f, 0x5f, 0x3f, 0x7f}; - -static uint_8 bit_reverse_256[] = { - 0x00, 0x20, 0x10, 0x30, 0x08, 0x28, 0x18, 0x38, - 0x04, 0x24, 0x14, 0x34, 0x0c, 0x2c, 0x1c, 0x3c, - 0x02, 0x22, 0x12, 0x32, 0x0a, 0x2a, 0x1a, 0x3a, - 0x06, 0x26, 0x16, 0x36, 0x0e, 0x2e, 0x1e, 0x3e, - 0x01, 0x21, 0x11, 0x31, 0x09, 0x29, 0x19, 0x39, - 0x05, 0x25, 0x15, 0x35, 0x0d, 0x2d, 0x1d, 0x3d, - 0x03, 0x23, 0x13, 0x33, 0x0b, 0x2b, 0x1b, 0x3b, - 0x07, 0x27, 0x17, 0x37, 0x0f, 0x2f, 0x1f, 0x3f}; - -static complex_t buf[128]; - -/* Twiddle factor LUT */ -static complex_t *w[7]; -static complex_t w_1[1]; -static complex_t w_2[2]; -static complex_t w_4[4]; -static complex_t w_8[8]; -static complex_t w_16[16]; -static complex_t w_32[32]; -static complex_t w_64[64]; - -/* Twiddle factors for IMDCT */ -static float xcos1[128]; -static float xsin1[128]; -static float xcos2[64]; -static float xsin2[64]; - -/* Delay buffer for time domain interleaving */ -static float delay[6][256]; - -/* Windowing function for Modified DCT - Thank you acroread */ -static float window[] = { - 0.00014, 0.00024, 0.00037, 0.00051, 0.00067, 0.00086, 0.00107, 0.00130, - 0.00157, 0.00187, 0.00220, 0.00256, 0.00297, 0.00341, 0.00390, 0.00443, - 0.00501, 0.00564, 0.00632, 0.00706, 0.00785, 0.00871, 0.00962, 0.01061, - 0.01166, 0.01279, 0.01399, 0.01526, 0.01662, 0.01806, 0.01959, 0.02121, - 0.02292, 0.02472, 0.02662, 0.02863, 0.03073, 0.03294, 0.03527, 0.03770, - 0.04025, 0.04292, 0.04571, 0.04862, 0.05165, 0.05481, 0.05810, 0.06153, - 0.06508, 0.06878, 0.07261, 0.07658, 0.08069, 0.08495, 0.08935, 0.09389, - 0.09859, 0.10343, 0.10842, 0.11356, 0.11885, 0.12429, 0.12988, 0.13563, - 0.14152, 0.14757, 0.15376, 0.16011, 0.16661, 0.17325, 0.18005, 0.18699, - 0.19407, 0.20130, 0.20867, 0.21618, 0.22382, 0.23161, 0.23952, 0.24757, - 0.25574, 0.26404, 0.27246, 0.28100, 0.28965, 0.29841, 0.30729, 0.31626, - 0.32533, 0.33450, 0.34376, 0.35311, 0.36253, 0.37204, 0.38161, 0.39126, - 0.40096, 0.41072, 0.42054, 0.43040, 0.44030, 0.45023, 0.46020, 0.47019, - 0.48020, 0.49022, 0.50025, 0.51028, 0.52031, 0.53033, 0.54033, 0.55031, - 0.56026, 0.57019, 0.58007, 0.58991, 0.59970, 0.60944, 0.61912, 0.62873, - 0.63827, 0.64774, 0.65713, 0.66643, 0.67564, 0.68476, 0.69377, 0.70269, - 0.71150, 0.72019, 0.72877, 0.73723, 0.74557, 0.75378, 0.76186, 0.76981, - 0.77762, 0.78530, 0.79283, 0.80022, 0.80747, 0.81457, 0.82151, 0.82831, - 0.83496, 0.84145, 0.84779, 0.85398, 0.86001, 0.86588, 0.87160, 0.87716, - 0.88257, 0.88782, 0.89291, 0.89785, 0.90264, 0.90728, 0.91176, 0.91610, - 0.92028, 0.92432, 0.92822, 0.93197, 0.93558, 0.93906, 0.94240, 0.94560, - 0.94867, 0.95162, 0.95444, 0.95713, 0.95971, 0.96217, 0.96451, 0.96674, - 0.96887, 0.97089, 0.97281, 0.97463, 0.97635, 0.97799, 0.97953, 0.98099, - 0.98236, 0.98366, 0.98488, 0.98602, 0.98710, 0.98811, 0.98905, 0.98994, - 0.99076, 0.99153, 0.99225, 0.99291, 0.99353, 0.99411, 0.99464, 0.99513, - 0.99558, 0.99600, 0.99639, 0.99674, 0.99706, 0.99736, 0.99763, 0.99788, - 0.99811, 0.99831, 0.99850, 0.99867, 0.99882, 0.99895, 0.99908, 0.99919, - 0.99929, 0.99938, 0.99946, 0.99953, 0.99959, 0.99965, 0.99969, 0.99974, - 0.99978, 0.99981, 0.99984, 0.99986, 0.99988, 0.99990, 0.99992, 0.99993, - 0.99994, 0.99995, 0.99996, 0.99997, 0.99998, 0.99998, 0.99998, 0.99999, - 0.99999, 0.99999, 0.99999, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, - 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000 }; - - -static inline void swap_cmplx(complex_t *a, complex_t *b) -{ - complex_t tmp; - - tmp = *a; - *a = *b; - *b = tmp; -} - - - -static inline complex_t cmplx_mult(complex_t a, complex_t b) -{ - complex_t ret; - - ret.real = a.real * b.real - a.imag * b.imag; - ret.imag = a.real * b.imag + a.imag * b.real; - - return ret; -} - -void imdct_init(void) -{ - int i,k; - complex_t angle_step; - complex_t current_angle; - - /* Twiddle factors to turn IFFT into IMDCT */ - for( i=0; i < 128; i++) - { - xcos1[i] = -cos(2.0f * M_PI * (8*i+1)/(8*N)) ; - xsin1[i] = -sin(2.0f * M_PI * (8*i+1)/(8*N)) ; - } - - /* More twiddle factors to turn IFFT into IMDCT */ - for( i=0; i < 64; i++) - { - xcos2[i] = -cos(2.0f * M_PI * (8*i+1)/(4*N)) ; - xsin2[i] = -sin(2.0f * M_PI * (8*i+1)/(4*N)) ; - } - - /* Canonical twiddle factors for FFT */ - w[0] = w_1; - w[1] = w_2; - w[2] = w_4; - w[3] = w_8; - w[4] = w_16; - w[5] = w_32; - w[6] = w_64; - - for( i = 0; i < 7; i++) - { - angle_step.real = cos(-2.0 * M_PI / (1 << (i+1))); - angle_step.imag = sin(-2.0 * M_PI / (1 << (i+1))); - - current_angle.real = 1.0; - current_angle.imag = 0.0; - - for (k = 0; k < 1 << i; k++) - { - w[i][k] = current_angle; - current_angle = cmplx_mult(current_angle,angle_step); - } - } -} - -void -imdct_do_512(float data[],float delay[]) -{ - int i,k; - int p,q; - int m; - int two_m; - int two_m_plus_one; - - float tmp_a_i; - float tmp_a_r; - float tmp_b_i; - float tmp_b_r; - - float *data_ptr; - float *delay_ptr; - float *window_ptr; - - // - // 512 IMDCT with source and dest data in 'data' - // - - // Pre IFFT complex multiply plus IFFT cmplx conjugate - for( i=0; i < 128; i++) - { - /* z[i] = (X[256-2*i-1] + j * X[2*i]) * (xcos1[i] + j * xsin1[i]) ; */ - buf[i].real = (data[256-2*i-1] * xcos1[i]) - (data[2*i] * xsin1[i]); - buf[i].imag = -1.0 * ((data[2*i] * xcos1[i]) + (data[256-2*i-1] * xsin1[i])); - } - - //Bit reversed shuffling - for(i=0; i<128; i++) - { - k = bit_reverse_512[i]; - if (k < i) - swap_cmplx(&buf[i],&buf[k]); - } - - /* FFT Merge */ - for (m=0; m < 7; m++) - { - if(m) - two_m = (1 << m); - else - two_m = 1; - - two_m_plus_one = (1 << (m+1)); - - for(k = 0; k < two_m; k++) - { - for(i = 0; i < 128; i += two_m_plus_one) - { - p = k + i; - q = p + two_m; - tmp_a_r = buf[p].real; - tmp_a_i = buf[p].imag; - tmp_b_r = buf[q].real * w[m][k].real - buf[q].imag * w[m][k].imag; - tmp_b_i = buf[q].imag * w[m][k].real + buf[q].real * w[m][k].imag; - buf[p].real = tmp_a_r + tmp_b_r; - buf[p].imag = tmp_a_i + tmp_b_i; - buf[q].real = tmp_a_r - tmp_b_r; - buf[q].imag = tmp_a_i - tmp_b_i; - - } - } - } - - /* Post IFFT complex multiply plus IFFT complex conjugate*/ - for( i=0; i < 128; i++) - { - /* y[n] = z[n] * (xcos1[n] + j * xsin1[n]) ; */ - tmp_a_r = buf[i].real; - tmp_a_i = -1.0 * buf[i].imag; - buf[i].real =(tmp_a_r * xcos1[i]) - (tmp_a_i * xsin1[i]); - buf[i].imag =(tmp_a_r * xsin1[i]) + (tmp_a_i * xcos1[i]); - } - - data_ptr = data; - delay_ptr = delay; - window_ptr = window; - - /* Window and convert to real valued signal */ - for(i=0; i< 64; i++) - { - *data_ptr++ = 2.0f * (-buf[64+i].imag * *window_ptr++ + *delay_ptr++); - *data_ptr++ = 2.0f * ( buf[64-i-1].real * *window_ptr++ + *delay_ptr++); - } - - for(i=0; i< 64; i++) - { - *data_ptr++ = 2.0f * (-buf[i].real * *window_ptr++ + *delay_ptr++); - *data_ptr++ = 2.0f * ( buf[128-i-1].imag * *window_ptr++ + *delay_ptr++); - } - - /* The trailing edge of the window goes into the delay line */ - delay_ptr = delay; - - for(i=0; i< 64; i++) - { - *delay_ptr++ = -buf[64+i].real * *--window_ptr; - *delay_ptr++ = buf[64-i-1].imag * *--window_ptr; - } - - for(i=0; i<64; i++) - { - *delay_ptr++ = buf[i].imag * *--window_ptr; - *delay_ptr++ = -buf[128-i-1].real * *--window_ptr; - } -} - -void -imdct_do_256(float data[],float delay[]) -{ - int i,k; - int p,q; - int m; - int two_m; - int two_m_plus_one; - - float tmp_a_i; - float tmp_a_r; - float tmp_b_i; - float tmp_b_r; - - float *data_ptr; - float *delay_ptr; - float *window_ptr; - - complex_t *buf_1, *buf_2; - - buf_1 = &buf[0]; - buf_2 = &buf[64]; - - /* Pre IFFT complex multiply plus IFFT cmplx conjugate */ - for(k=0; k<64; k++) - { - /* X1[k] = X[2*k] */ - /* X2[k] = X[2*k+1] */ - - p = 2 * (128-2*k-1); - q = 2 * (2 * k); - - /* Z1[k] = (X1[128-2*k-1] + j * X1[2*k]) * (xcos2[k] + j * xsin2[k]); */ - buf_1[k].real = data[p] * xcos2[k] - data[q] * xsin2[k]; - buf_1[k].imag = -1.0f * (data[q] * xcos2[k] + data[p] * xsin2[k]); - /* Z2[k] = (X2[128-2*k-1] + j * X2[2*k]) * (xcos2[k] + j * xsin2[k]); */ - buf_2[k].real = data[p + 1] * xcos2[k] - data[q + 1] * xsin2[k]; - buf_2[k].imag = -1.0f * ( data[q + 1] * xcos2[k] + data[p + 1] * xsin2[k]); - } - - //IFFT Bit reversed shuffling - for(i=0; i<64; i++) - { - k = bit_reverse_256[i]; - if (k < i) - { - swap_cmplx(&buf_1[i],&buf_1[k]); - swap_cmplx(&buf_2[i],&buf_2[k]); - } - } - - /* FFT Merge */ - for (m=0; m < 6; m++) - { - two_m = (1 << m); - two_m_plus_one = (1 << (m+1)); - - //FIXME - if(m) - two_m = (1 << m); - else - two_m = 1; - - for(k = 0; k < two_m; k++) - { - for(i = 0; i < 64; i += two_m_plus_one) - { - p = k + i; - q = p + two_m; - //Do block 1 - tmp_a_r = buf_1[p].real; - tmp_a_i = buf_1[p].imag; - tmp_b_r = buf_1[q].real * w[m][k].real - buf_1[q].imag * w[m][k].imag; - tmp_b_i = buf_1[q].imag * w[m][k].real + buf_1[q].real * w[m][k].imag; - buf_1[p].real = tmp_a_r + tmp_b_r; - buf_1[p].imag = tmp_a_i + tmp_b_i; - buf_1[q].real = tmp_a_r - tmp_b_r; - buf_1[q].imag = tmp_a_i - tmp_b_i; - - //Do block 2 - tmp_a_r = buf_2[p].real; - tmp_a_i = buf_2[p].imag; - tmp_b_r = buf_2[q].real * w[m][k].real - buf_2[q].imag * w[m][k].imag; - tmp_b_i = buf_2[q].imag * w[m][k].real + buf_2[q].real * w[m][k].imag; - buf_2[p].real = tmp_a_r + tmp_b_r; - buf_2[p].imag = tmp_a_i + tmp_b_i; - buf_2[q].real = tmp_a_r - tmp_b_r; - buf_2[q].imag = tmp_a_i - tmp_b_i; - - } - } - } - - /* Post IFFT complex multiply */ - for( i=0; i < 64; i++) - { - /* y1[n] = z1[n] * (xcos2[n] + j * xs in2[n]) ; */ - tmp_a_r = buf_1[i].real; - tmp_a_i = -buf_1[i].imag; - buf_1[i].real =(tmp_a_r * xcos2[i]) - (tmp_a_i * xsin2[i]); - buf_1[i].imag =(tmp_a_r * xsin2[i]) + (tmp_a_i * xcos2[i]); - /* y2[n] = z2[n] * (xcos2[n] + j * xsin2[n]) ; */ - tmp_a_r = buf_2[i].real; - tmp_a_i = -buf_2[i].imag; - buf_2[i].real =(tmp_a_r * xcos2[i]) - (tmp_a_i * xsin2[i]); - buf_2[i].imag =(tmp_a_r * xsin2[i]) + (tmp_a_i * xcos2[i]); - } - - data_ptr = data; - delay_ptr = delay; - window_ptr = window; - - /* Window and convert to real valued signal */ - for(i=0; i< 64; i++) - { - *data_ptr++ = 2.0f * (-buf_1[i].imag * *window_ptr++ + *delay_ptr++); - *data_ptr++ = 2.0f * ( buf_1[64-i-1].real * *window_ptr++ + *delay_ptr++); - } - - for(i=0; i< 64; i++) - { - *data_ptr++ = 2.0f * (-buf_1[i].real * *window_ptr++ + *delay_ptr++); - *data_ptr++ = 2.0f * ( buf_1[64-i-1].imag * *window_ptr++ + *delay_ptr++); - } - - delay_ptr = delay; - - for(i=0; i< 64; i++) - { - *delay_ptr++ = -buf_2[i].real * *--window_ptr; - *delay_ptr++ = buf_2[64-i-1].imag * *--window_ptr; - } - - for(i=0; i< 64; i++) - { - *delay_ptr++ = buf_2[i].imag * *--window_ptr; - *delay_ptr++ = -buf_2[64-i-1].real * *--window_ptr; - } -} - -//FIXME remove - for timing code -///#include -//FIXME remove - -void -imdct(bsi_t *bsi,audblk_t *audblk, stream_samples_t samples) { - int i; - - //handy timing code - //struct timeval start,end; - - //gettimeofday(&start,0); - - for(i=0; infchans;i++) - { - if(audblk->blksw[i]) - imdct_do_256(samples[i],delay[i]); - else - imdct_do_512(samples[i],delay[i]); - } - //gettimeofday(&end,0); - //printf("imdct %ld us\n",(end.tv_sec - start.tv_sec) * 1000000 + - //end.tv_usec - start.tv_usec); - - //XXX We don't bother with the IMDCT for the LFE as it's currently - //unused. - //if (bsi->lfeon) - // imdct_do_512(coeffs->lfe,samples->channel[5],delay[5]); - // -} diff --git a/ac3dec/libac3/imdct.h b/ac3dec/libac3/imdct.h deleted file mode 100644 index 750aa87..0000000 --- a/ac3dec/libac3/imdct.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * imdct.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -void imdct(bsi_t *bsi,audblk_t *audblk, stream_samples_t samples); -void imdct_init(void); diff --git a/ac3dec/libac3/parse.c b/ac3dec/libac3/parse.c deleted file mode 100644 index 19e8965..0000000 --- a/ac3dec/libac3/parse.c +++ /dev/null @@ -1,656 +0,0 @@ -/* - * parse.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#include -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "bitstream.h" -#include "stats.h" -#include "debug.h" -#include "crc.h" -#include "parse.h" - -/* Misc LUT */ -static const uint_16 nfchans[8] = {2,1,2,3,3,4,4,5}; - -struct frmsize_s -{ - uint_16 bit_rate; - uint_16 frm_size[3]; -}; - -static const struct frmsize_s frmsizecod_tbl[64] = -{ - { 32 ,{64 ,69 ,96 } }, - { 32 ,{64 ,70 ,96 } }, - { 40 ,{80 ,87 ,120 } }, - { 40 ,{80 ,88 ,120 } }, - { 48 ,{96 ,104 ,144 } }, - { 48 ,{96 ,105 ,144 } }, - { 56 ,{112 ,121 ,168 } }, - { 56 ,{112 ,122 ,168 } }, - { 64 ,{128 ,139 ,192 } }, - { 64 ,{128 ,140 ,192 } }, - { 80 ,{160 ,174 ,240 } }, - { 80 ,{160 ,175 ,240 } }, - { 96 ,{192 ,208 ,288 } }, - { 96 ,{192 ,209 ,288 } }, - { 112 ,{224 ,243 ,336 } }, - { 112 ,{224 ,244 ,336 } }, - { 128 ,{256 ,278 ,384 } }, - { 128 ,{256 ,279 ,384 } }, - { 160 ,{320 ,348 ,480 } }, - { 160 ,{320 ,349 ,480 } }, - { 192 ,{384 ,417 ,576 } }, - { 192 ,{384 ,418 ,576 } }, - { 224 ,{448 ,487 ,672 } }, - { 224 ,{448 ,488 ,672 } }, - { 256 ,{512 ,557 ,768 } }, - { 256 ,{512 ,558 ,768 } }, - { 320 ,{640 ,696 ,960 } }, - { 320 ,{640 ,697 ,960 } }, - { 384 ,{768 ,835 ,1152 } }, - { 384 ,{768 ,836 ,1152 } }, - { 448 ,{896 ,975 ,1344 } }, - { 448 ,{896 ,976 ,1344 } }, - { 512 ,{1024 ,1114 ,1536 } }, - { 512 ,{1024 ,1115 ,1536 } }, - { 576 ,{1152 ,1253 ,1728 } }, - { 576 ,{1152 ,1254 ,1728 } }, - { 640 ,{1280 ,1393 ,1920 } }, - { 640 ,{1280 ,1394 ,1920 } } -}; - -void -parse_syncinfo_data(syncinfo_t *syncinfo, uint_8 *data) -{ - // Get the sampling rate - syncinfo->fscod = (data[2] >> 6) & 0x3; - - if(syncinfo->fscod == 3) - { - //invalid sampling rate code - error_flag = 1; - return; - } - else if(syncinfo->fscod == 2) - syncinfo->sampling_rate = 32000; - else if(syncinfo->fscod == 1) - syncinfo->sampling_rate = 44100; - else - syncinfo->sampling_rate = 48000; - - // Get the frame size code - syncinfo->frmsizecod = data[2] & 0x3f; - - // Calculate the frame size and bitrate - syncinfo->frame_size = - frmsizecod_tbl[syncinfo->frmsizecod].frm_size[syncinfo->fscod]; - syncinfo->bit_rate = frmsizecod_tbl[syncinfo->frmsizecod].bit_rate; -} - -/* Parse a syncinfo structure, minus the sync word */ -int -parse_syncinfo(syncinfo_t *syncinfo) -{ - int byte, idx; - uint_8 data[3]; - uint_16 sync_word = 0; - uint_32 time_out = 1<<16; - - - // - // Find a ac3 sync frame. Time out if we read 64k without finding - // one. - // - while(time_out--) - { - byte = bitstream_get_byte(); - if (byte < 0) - return -ENOENT; - sync_word = (sync_word << 8) + byte; - - if(sync_word == 0x0b77) - break; - } - - // - // We need to read in the entire syncinfo struct (0x0b77 + 24 bits) - // in order to determine how big the frame is - // - for (idx = 0; idx < 3; idx++) { - byte = bitstream_get_byte(); - if (byte < 0) - return -ENOENT; - data[idx] = byte; - } - - parse_syncinfo_data(syncinfo, data); - - // Buffer the entire syncframe - if (bitstream_buffer_frame(syncinfo->frame_size * 2 - 5) < 0) - return -ENOENT; - - // Check the crc over the entire frame - crc_init(); - - crc_process_byte(data[0]); - crc_process_byte(data[1]); - crc_process_byte(data[2]); - crc_process_frame(bitstream_get_buffer_start(),syncinfo->frame_size * 2 - 5); - - if(!crc_validate()) - { - error_flag = 1; - fprintf(stderr,"** CRC failed - skipping frame **\n"); - return 0; - } - - if (!(ac3_config.flags & AC3_QUIET)) - stats_print_syncinfo(syncinfo); - return 0; -} - -/* - * This routine fills a bsi struct from the AC3 stream - */ - -void -parse_bsi(bsi_t *bsi) -{ - uint_32 i; - - /* Check the AC-3 version number */ - bsi->bsid = bitstream_get(5); - - /* Get the audio service provided by the steram */ - bsi->bsmod = bitstream_get(3); - - /* Get the audio coding mode (ie how many channels)*/ - bsi->acmod = bitstream_get(3); - /* Predecode the number of full bandwidth channels as we use this - * number a lot */ - bsi->nfchans = nfchans[bsi->acmod]; - - /* If it is in use, get the centre channel mix level */ - if ((bsi->acmod & 0x1) && (bsi->acmod != 0x1)) - bsi->cmixlev = bitstream_get(2); - - /* If it is in use, get the surround channel mix level */ - if (bsi->acmod & 0x4) - bsi->surmixlev = bitstream_get(2); - - /* Get the dolby surround mode if in 2/0 mode */ - if(bsi->acmod == 0x2) - bsi->dsurmod= bitstream_get(2); - - /* Is the low frequency effects channel on? */ - bsi->lfeon = bitstream_get(1); - - /* Get the dialogue normalization level */ - bsi->dialnorm = bitstream_get(5); - - /* Does compression gain exist? */ - bsi->compre = bitstream_get(1); - if (bsi->compre) - { - /* Get compression gain */ - bsi->compr = bitstream_get(8); - } - - /* Does language code exist? */ - bsi->langcode = bitstream_get(1); - if (bsi->langcode) - { - /* Get langauge code */ - bsi->langcod = bitstream_get(8); - } - - /* Does audio production info exist? */ - bsi->audprodie = bitstream_get(1); - if (bsi->audprodie) - { - /* Get mix level */ - bsi->mixlevel = bitstream_get(5); - - /* Get room type */ - bsi->roomtyp = bitstream_get(2); - } - - /* If we're in dual mono mode then get some extra info */ - if (bsi->acmod ==0) - { - /* Get the dialogue normalization level two */ - bsi->dialnorm2 = bitstream_get(5); - - /* Does compression gain two exist? */ - bsi->compr2e = bitstream_get(1); - if (bsi->compr2e) - { - /* Get compression gain two */ - bsi->compr2 = bitstream_get(8); - } - - /* Does language code two exist? */ - bsi->langcod2e = bitstream_get(1); - if (bsi->langcod2e) - { - /* Get langauge code two */ - bsi->langcod2 = bitstream_get(8); - } - - /* Does audio production info two exist? */ - bsi->audprodi2e = bitstream_get(1); - if (bsi->audprodi2e) - { - /* Get mix level two */ - bsi->mixlevel2 = bitstream_get(5); - - /* Get room type two */ - bsi->roomtyp2 = bitstream_get(2); - } - } - - /* Get the copyright bit */ - bsi->copyrightb = bitstream_get(1); - - /* Get the original bit */ - bsi->origbs = bitstream_get(1); - - /* Does timecode one exist? */ - bsi->timecod1e = bitstream_get(1); - - if(bsi->timecod1e) - bsi->timecod1 = bitstream_get(14); - - /* Does timecode two exist? */ - bsi->timecod2e = bitstream_get(1); - - if(bsi->timecod2e) - bsi->timecod2 = bitstream_get(14); - - /* Does addition info exist? */ - bsi->addbsie = bitstream_get(1); - - if(bsi->addbsie) - { - /* Get how much info is there */ - bsi->addbsil = bitstream_get(6); - - /* Get the additional info */ - for(i=0;i<(bsi->addbsil + 1);i++) - bsi->addbsi[i] = bitstream_get(8); - } - - if (!(ac3_config.flags & AC3_QUIET)) - stats_print_bsi(bsi); -} - -/* More pain inducing parsing */ -void -parse_audblk(bsi_t *bsi,audblk_t *audblk) -{ - int i,j; - - for (i=0;i < bsi->nfchans; i++) - { - /* Is this channel an interleaved 256 + 256 block ? */ - audblk->blksw[i] = bitstream_get(1); - } - - for (i=0;i < bsi->nfchans; i++) - { - /* Should we dither this channel? */ - audblk->dithflag[i] = bitstream_get(1); - } - - /* Does dynamic range control exist? */ - audblk->dynrnge = bitstream_get(1); - if (audblk->dynrnge) - { - /* Get dynamic range info */ - audblk->dynrng = bitstream_get(8); - } - - /* If we're in dual mono mode then get the second channel DR info */ - if (bsi->acmod == 0) - { - /* Does dynamic range control two exist? */ - audblk->dynrng2e = bitstream_get(1); - if (audblk->dynrng2e) - { - /* Get dynamic range info */ - audblk->dynrng2 = bitstream_get(8); - } - } - - /* Does coupling strategy exist? */ - audblk->cplstre = bitstream_get(1); - if (audblk->cplstre) - { - /* Is coupling turned on? */ - audblk->cplinu = bitstream_get(1); - if(audblk->cplinu) - { - for(i=0;i < bsi->nfchans; i++) - audblk->chincpl[i] = bitstream_get(1); - if(bsi->acmod == 0x2) - audblk->phsflginu = bitstream_get(1); - audblk->cplbegf = bitstream_get(4); - audblk->cplendf = bitstream_get(4); - audblk->ncplsubnd = (audblk->cplendf + 2) - audblk->cplbegf + 1; - - /* Calculate the start and end bins of the coupling channel */ - audblk->cplstrtmant = (audblk->cplbegf * 12) + 37 ; - audblk->cplendmant = ((audblk->cplendf + 3) * 12) + 37; - - /* The number of combined subbands is ncplsubnd minus each combined - * band */ - audblk->ncplbnd = audblk->ncplsubnd; - - for(i=1; i< audblk->ncplsubnd; i++) - { - audblk->cplbndstrc[i] = bitstream_get(1); - audblk->ncplbnd -= audblk->cplbndstrc[i]; - } - } - } - - if(audblk->cplinu) - { - /* Loop through all the channels and get their coupling co-ords */ - for(i=0;i < bsi->nfchans;i++) - { - if(!audblk->chincpl[i]) - continue; - - /* Is there new coupling co-ordinate info? */ - audblk->cplcoe[i] = bitstream_get(1); - - if(audblk->cplcoe[i]) - { - audblk->mstrcplco[i] = bitstream_get(2); - for(j=0;j < audblk->ncplbnd; j++) - { - audblk->cplcoexp[i][j] = bitstream_get(4); - audblk->cplcomant[i][j] = bitstream_get(4); - } - } - } - - /* If we're in dual mono mode, there's going to be some phase info */ - if( (bsi->acmod == 0x2) && audblk->phsflginu && - (audblk->cplcoe[0] || audblk->cplcoe[1])) - { - for(j=0;j < audblk->ncplbnd; j++) - audblk->phsflg[j] = bitstream_get(1); - - } - } - - /* If we're in dual mono mode, there may be a rematrix strategy */ - if(bsi->acmod == 0x2) - { - audblk->rematstr = bitstream_get(1); - if(audblk->rematstr) - { - if (audblk->cplinu == 0) - { - for(i = 0; i < 4; i++) - audblk->rematflg[i] = bitstream_get(1); - } - if((audblk->cplbegf > 2) && audblk->cplinu) - { - for(i = 0; i < 4; i++) - audblk->rematflg[i] = bitstream_get(1); - } - if((audblk->cplbegf <= 2) && audblk->cplinu) - { - for(i = 0; i < 3; i++) - audblk->rematflg[i] = bitstream_get(1); - } - if((audblk->cplbegf == 0) && audblk->cplinu) - for(i = 0; i < 2; i++) - audblk->rematflg[i] = bitstream_get(1); - - } - } - - if (audblk->cplinu) - { - /* Get the coupling channel exponent strategy */ - audblk->cplexpstr = bitstream_get(2); - audblk->ncplgrps = (audblk->cplendmant - audblk->cplstrtmant) / - (3 << (audblk->cplexpstr-1)); - } - - for(i = 0; i < bsi->nfchans; i++) - audblk->chexpstr[i] = bitstream_get(2); - - /* Get the exponent strategy for lfe channel */ - if(bsi->lfeon) - audblk->lfeexpstr = bitstream_get(1); - - /* Determine the bandwidths of all the fbw channels */ - for(i = 0; i < bsi->nfchans; i++) - { - uint_16 grp_size; - - if(audblk->chexpstr[i] != EXP_REUSE) - { - if (audblk->cplinu && audblk->chincpl[i]) - { - audblk->endmant[i] = audblk->cplstrtmant; - } - else - { - audblk->chbwcod[i] = bitstream_get(6); - audblk->endmant[i] = ((audblk->chbwcod[i] + 12) * 3) + 37; - } - - /* Calculate the number of exponent groups to fetch */ - grp_size = 3 * (1 << (audblk->chexpstr[i] - 1)); - audblk->nchgrps[i] = (audblk->endmant[i] - 1 + (grp_size - 3)) / grp_size; - } - } - - /* Get the coupling exponents if they exist */ - if(audblk->cplinu && (audblk->cplexpstr != EXP_REUSE)) - { - audblk->cplabsexp = bitstream_get(4); - for(i=0;i< audblk->ncplgrps;i++) - audblk->cplexps[i] = bitstream_get(7); - } - - /* Get the fwb channel exponents */ - for(i=0;i < bsi->nfchans; i++) - { - if(audblk->chexpstr[i] != EXP_REUSE) - { - audblk->exps[i][0] = bitstream_get(4); - for(j=1;j<=audblk->nchgrps[i];j++) - audblk->exps[i][j] = bitstream_get(7); - audblk->gainrng[i] = bitstream_get(2); - } - } - - /* Get the lfe channel exponents */ - if(bsi->lfeon && (audblk->lfeexpstr != EXP_REUSE)) - { - audblk->lfeexps[0] = bitstream_get(4); - audblk->lfeexps[1] = bitstream_get(7); - audblk->lfeexps[2] = bitstream_get(7); - } - - /* Get the parametric bit allocation parameters */ - audblk->baie = bitstream_get(1); - - if(audblk->baie) - { - audblk->sdcycod = bitstream_get(2); - audblk->fdcycod = bitstream_get(2); - audblk->sgaincod = bitstream_get(2); - audblk->dbpbcod = bitstream_get(2); - audblk->floorcod = bitstream_get(3); - } - - /* Get the SNR off set info if it exists */ - audblk->snroffste = bitstream_get(1); - - if(audblk->snroffste) - { - audblk->csnroffst = bitstream_get(6); - - if(audblk->cplinu) - { - audblk->cplfsnroffst = bitstream_get(4); - audblk->cplfgaincod = bitstream_get(3); - } - - for(i = 0;i < bsi->nfchans; i++) - { - audblk->fsnroffst[i] = bitstream_get(4); - audblk->fgaincod[i] = bitstream_get(3); - } - if(bsi->lfeon) - { - - audblk->lfefsnroffst = bitstream_get(4); - audblk->lfefgaincod = bitstream_get(3); - } - } - - /* Get coupling leakage info if it exists */ - if(audblk->cplinu) - { - audblk->cplleake = bitstream_get(1); - - if(audblk->cplleake) - { - audblk->cplfleak = bitstream_get(3); - audblk->cplsleak = bitstream_get(3); - } - } - - /* Get the delta bit alloaction info */ - audblk->deltbaie = bitstream_get(1); - - if(audblk->deltbaie) - { - if(audblk->cplinu) - audblk->cpldeltbae = bitstream_get(2); - - for(i = 0;i < bsi->nfchans; i++) - audblk->deltbae[i] = bitstream_get(2); - - if (audblk->cplinu && (audblk->cpldeltbae == DELTA_BIT_NEW)) - { - audblk->cpldeltnseg = bitstream_get(3); - for(i = 0;i < audblk->cpldeltnseg + 1; i++) - { - audblk->cpldeltoffst[i] = bitstream_get(5); - audblk->cpldeltlen[i] = bitstream_get(4); - audblk->cpldeltba[i] = bitstream_get(3); - } - } - - for(i = 0;i < bsi->nfchans; i++) - { - if (audblk->deltbae[i] == DELTA_BIT_NEW) - { - audblk->deltnseg[i] = bitstream_get(3); - for(j = 0; j < audblk->deltnseg[i] + 1; j++) - { - audblk->deltoffst[i][j] = bitstream_get(5); - audblk->deltlen[i][j] = bitstream_get(4); - audblk->deltba[i][j] = bitstream_get(3); - } - } - } - } - - /* Check to see if there's any dummy info to get */ - if((audblk->skiple = bitstream_get(1))) - { - uint_16 skip_data; - - audblk->skipl = bitstream_get(9); - //XXX remove - //fprintf(stderr,"(parse) skipping %d bytes\n",audblk->skipl); - - for(i = 0; i < audblk->skipl ; i++) - { - skip_data = bitstream_get(8); - //XXX remove - //fprintf(stderr,"skipped data %2x\n",skip_data); - //if(skip_data != 0) - //{ - //dprintf("(parse) Invalid skipped data %2x\n",skip_data); - //exit(1); - //} - } - } - - if (!(ac3_config.flags & AC3_QUIET)) - stats_print_audblk(bsi,audblk); -} - -void -parse_auxdata(syncinfo_t *syncinfo) -{ - //FIXME keep this now that we don't really need it? -#if 0 - int i; - int skip_length; - uint_16 crc; - uint_16 auxdatae; - - skip_length = (syncinfo->frame_size * 16) - bitstream_get_total_bits() - 17 - 1; - - //XXX remove - //dprintf("(auxdata) skipping %d auxbits\n",skip_length); - - for(i=0; i < skip_length; i++) - //printf("Skipped bit %i\n",(uint_16)bitstream_get(1)); - bitstream_get(1); - - //get the auxdata exists bit - auxdatae = bitstream_get(1); - - //XXX remove - //dprintf("auxdatae = %i\n",auxdatae); - - //Skip the CRC reserved bit - bitstream_get(1); - - //Get the crc - crc = bitstream_get(16); -#endif -} - - diff --git a/ac3dec/libac3/parse.h b/ac3dec/libac3/parse.h deleted file mode 100644 index 187c714..0000000 --- a/ac3dec/libac3/parse.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * parse.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -void parse_syncinfo_data(syncinfo_t *syncinfo, uint_8 *data); -int parse_syncinfo(syncinfo_t *syncinfo); -void parse_audblk(bsi_t *bsi,audblk_t *audblk); -void parse_bsi(bsi_t *bsi); -void parse_auxdata(syncinfo_t *syncinfo); - diff --git a/ac3dec/libac3/rematrix.c b/ac3dec/libac3/rematrix.c deleted file mode 100644 index caa7094..0000000 --- a/ac3dec/libac3/rematrix.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * rematrix.c - * - * Copyright (C) Aaron Holtzman - July 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "rematrix.h" - -struct rematrix_band_s -{ - uint_32 start; - uint_32 end; -}; - -struct rematrix_band_s rematrix_band[] = { {13,24}, {25,36}, {37 ,60}, {61,252}}; - -static inline uint_32 min(uint_32 a,uint_32 b); - -static inline uint_32 -min(uint_32 a,uint_32 b) -{ - return (a < b ? a : b); -} - -/* This routine simply does stereo rematixing for the 2 channel - * stereo mode */ -void rematrix(audblk_t *audblk, stream_samples_t samples) -{ - uint_32 num_bands; - uint_32 start; - uint_32 end; - uint_32 i,j; - float left,right; - - if(!audblk->cplinu || audblk->cplbegf > 2) - num_bands = 4; - else if (audblk->cplbegf > 0) - num_bands = 3; - else - num_bands = 2; - - for(i=0;i < num_bands; i++) - { - if(!audblk->rematflg[i]) - continue; - - start = rematrix_band[i].start; - end = min(rematrix_band[i].end ,12 * audblk->cplbegf + 36); - - for(j=start;j < end; j++) - { - left = samples[0][j] + samples[1][j]; - right = samples[0][j] - samples[1][j]; - samples[0][j] = left; - samples[1][j] = right; - } - } -} diff --git a/ac3dec/libac3/rematrix.h b/ac3dec/libac3/rematrix.h deleted file mode 100644 index 0be6528..0000000 --- a/ac3dec/libac3/rematrix.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * rematrix.h - * - * Copyright (C) Aaron Holtzman - July 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - */ - -void rematrix(audblk_t *audblk, stream_samples_t samples); diff --git a/ac3dec/libac3/sanity_check.c b/ac3dec/libac3/sanity_check.c deleted file mode 100644 index 461f20e..0000000 --- a/ac3dec/libac3/sanity_check.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - * sanity_check.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" -#include "sanity_check.h" - - -void -sanity_check_init(syncinfo_t *syncinfo, bsi_t *bsi, audblk_t *audblk) -{ - syncinfo->magic = AC3_MAGIC_NUMBER; - bsi->magic = AC3_MAGIC_NUMBER; - audblk->magic1 = AC3_MAGIC_NUMBER; - audblk->magic2 = AC3_MAGIC_NUMBER; - audblk->magic3 = AC3_MAGIC_NUMBER; -} - -void -sanity_check(syncinfo_t *syncinfo, bsi_t *bsi, audblk_t *audblk) -{ - int i; - - if(syncinfo->magic != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- syncinfo magic number **"); - error_flag = 1; - } - - if(bsi->magic != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- bsi magic number **"); - error_flag = 1; - } - - if(audblk->magic1 != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- audblk magic number 1 **"); - error_flag = 1; - } - - if(audblk->magic2 != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- audblk magic number 2 **"); - error_flag = 1; - } - - if(audblk->magic3 != AC3_MAGIC_NUMBER) - { - fprintf(stderr,"\n** Sanity check failed -- audblk magic number 3 **"); - error_flag = 1; - } - - for(i = 0;i < 5 ; i++) - { - if (audblk->fbw_exp[i][255] !=0 || audblk->fbw_exp[i][254] !=0 || - audblk->fbw_exp[i][253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- fbw_exp out of bounds **"); - error_flag = 1; - } - - if (audblk->fbw_bap[i][255] !=0 || audblk->fbw_bap[i][254] !=0 || - audblk->fbw_bap[i][253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- fbw_bap out of bounds **"); - error_flag = 1; - } - - } - - if (audblk->cpl_exp[255] !=0 || audblk->cpl_exp[254] !=0 || - audblk->cpl_exp[253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- cpl_exp out of bounds **"); - error_flag = 1; - } - - if (audblk->cpl_bap[255] !=0 || audblk->cpl_bap[254] !=0 || - audblk->cpl_bap[253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- cpl_bap out of bounds **"); - error_flag = 1; - } - - if (audblk->cplmant[255] !=0 || audblk->cplmant[254] !=0 || - audblk->cplmant[253] !=0) - { - fprintf(stderr,"\n** Sanity check failed -- cpl_mant out of bounds **"); - error_flag = 1; - } - - if ((audblk->cplinu == 1) && (audblk->cplbegf > (audblk->cplendf+2))) - { - fprintf(stderr,"\n** Sanity check failed -- cpl params inconsistent **"); - error_flag = 1; - } - - for(i=0; i < bsi->nfchans; i++) - { - if((audblk->chincpl[i] == 0) && (audblk->chbwcod[i] > 60)) - { - fprintf(stderr,"\n** Sanity check failed -- chbwcod too big **"); - error_flag = 1; - } - } - - return; -} diff --git a/ac3dec/libac3/sanity_check.h b/ac3dec/libac3/sanity_check.h deleted file mode 100644 index c4ca63a..0000000 --- a/ac3dec/libac3/sanity_check.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * sanity_check.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#define AC3_MAGIC_NUMBER 0xdeadbeef - -void sanity_check_init(syncinfo_t *syncinfo, bsi_t *bsi, audblk_t *audblk); -void sanity_check(syncinfo_t *syncinfo, bsi_t *bsi, audblk_t *audblk); diff --git a/ac3dec/libac3/stats.c b/ac3dec/libac3/stats.c deleted file mode 100644 index d8a8417..0000000 --- a/ac3dec/libac3/stats.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * stats.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include "config.h" -#include "ac3.h" -#include "ac3_internal.h" - - -#include "decode.h" -#include "stats.h" -#include "debug.h" - - -static const char *service_ids[8] = -{ - "CM","ME","VI","HI", - "D", "C","E", "VO" -}; - -struct mixlev_s -{ - float clev; - char *desc; -}; - -static const struct mixlev_s cmixlev_tbl[4] = -{ - {0.707, "(-3.0 dB)"}, {0.595, "(-4.5 dB)"}, - {0.500, "(-6.0 dB)"}, {1.0, "Invalid"} -}; - -static const struct mixlev_s smixlev_tbl[4] = -{ - {0.707, "(-3.0 dB)"}, {0.500, "(-6.0 dB)"}, - { 0.0, "off "}, { 1.0, "Invalid"} -}; - -static const char *language[128] = -{ - "unknown", "Albanian", "Breton", "Catalan", "Croatian", "Welsh", "Czech", "Danish", - "German", "English", "Spanish", "Esperanto", "Estonian", "Basque", "Faroese", "French", - "Frisian", "Irish", "Gaelic", "Galician", "Icelandic", "Italian", "Lappish", "Latin", - "Latvian", "Luxembourgian", "Lithuanian", "Hungarian", "Maltese", "Dutch", "Norwegian", "Occitan", - "Polish", "Portugese", "Romanian", "Romansh", "Serbian", "Slovak", "Slovene", "Finnish", - "Swedish", "Turkish", "Flemish", "Walloon", "0x2c", "0x2d", "0x2e", "0x2f", - "0x30", "0x31", "0x32", "0x33", "0x34", "0x35", "0x36", "0x37", - "0x38", "0x39", "0x3a", "0x3b", "0x3c", "0x3d", "0x3e", "0x3f", - "background", "0x41", "0x42", "0x43", "0x44", "Zulu", "Vietnamese", "Uzbek", - "Urdu", "Ukrainian", "Thai", "Telugu", "Tatar", "Tamil", "Tadzhik", "Swahili", - "Sranan Tongo", "Somali", "Sinhalese", "Shona", "Serbo-Croat", "Ruthenian", "Russian", "Quechua", - "Pustu", "Punjabi", "Persian", "Papamiento", "Oriya", "Nepali", "Ndebele", "Marathi", - "Moldavian", "Malaysian", "Malagasay", "Macedonian", "Laotian", "Korean", "Khmer", "Kazakh", - "Kannada", "Japanese", "Indonesian", "Hindi", "Hebrew", "Hausa", "Gurani", "Gujurati", - "Greek", "Georgian", "Fulani", "Dari", "Churash", "Chinese", "Burmese", "Bulgarian", - "Bengali", "Belorussian", "Bambora", "Azerbijani", "Assamese", "Armenian", "Arabic", "Amharic" -}; - -void stats_print_banner(syncinfo_t *syncinfo,bsi_t *bsi) -{ - // fprintf(stdout,PACKAGE"-"VERSION" (C) 2000 Aaron Holtzman (aholtzma@ess.engr.uvic.ca)\n"); - - fprintf(stdout,"%d.%d Mode ",bsi->nfchans,bsi->lfeon); - fprintf(stdout,"%2.1f KHz",syncinfo->sampling_rate * 1e-3); - fprintf(stdout,"%4d kbps ",syncinfo->bit_rate); - if (bsi->langcode && (bsi->langcod < 128)) - fprintf(stdout,"%s ", language[bsi->langcod]); - - switch(bsi->bsmod) - { - case 0: - fprintf(stdout,"Complete Main Audio Service"); - break; - case 1: - fprintf(stdout,"Music and Effects Audio Service"); - case 2: - fprintf(stdout,"Visually Impaired Audio Service"); - break; - case 3: - fprintf(stdout,"Hearing Impaired Audio Service"); - break; - case 4: - fprintf(stdout,"Dialogue Audio Service"); - break; - case 5: - fprintf(stdout,"Commentary Audio Service"); - break; - case 6: - fprintf(stdout,"Emergency Audio Service"); - break; - case 7: - fprintf(stdout,"Voice Over Audio Service"); - break; - } - fprintf(stdout,"\n"); -} - -void stats_print_syncinfo(syncinfo_t *syncinfo) -{ - dprintf("(syncinfo) "); - - switch (syncinfo->fscod) - { - case 2: - dprintf("32 KHz "); - break; - case 1: - dprintf("44.1 KHz "); - break; - case 0: - dprintf("48 KHz "); - break; - default: - dprintf("Invalid sampling rate "); - break; - } - - dprintf("%4d kbps %4d words per frame\n",syncinfo->bit_rate, - syncinfo->frame_size); - -} - -void stats_print_bsi(bsi_t *bsi) -{ - dprintf("(bsi) "); - dprintf("%s",service_ids[bsi->bsmod]); - dprintf(" %d.%d Mode ",bsi->nfchans,bsi->lfeon); - if ((bsi->acmod & 0x1) && (bsi->acmod != 0x1)) - dprintf(" Centre Mix Level %s ",cmixlev_tbl[bsi->cmixlev].desc); - if (bsi->acmod & 0x4) - dprintf(" Sur Mix Level %s ",smixlev_tbl[bsi->cmixlev].desc); - dprintf("\n"); - -} - -char *exp_strat_tbl[4] = {"R ","D15 ","D25 ","D45 "}; - -void stats_print_audblk(bsi_t *bsi,audblk_t *audblk) -{ - uint_32 i; - - dprintf("(audblk) "); - dprintf("%s ",audblk->cplinu ? "cpl on " : "cpl off"); - dprintf("%s ",audblk->baie? "bai " : " "); - dprintf("%s ",audblk->snroffste? "snroffst " : " "); - dprintf("%s ",audblk->deltbaie? "deltba " : " "); - dprintf("%s ",audblk->phsflginu? "phsflg " : " "); - dprintf("(%s %s %s %s %s) ",exp_strat_tbl[audblk->chexpstr[0]], - exp_strat_tbl[audblk->chexpstr[1]],exp_strat_tbl[audblk->chexpstr[2]], - exp_strat_tbl[audblk->chexpstr[3]],exp_strat_tbl[audblk->chexpstr[4]]); - dprintf("["); - for(i=0;infchans;i++) - dprintf("%1d",audblk->blksw[i]); - dprintf("]"); - - dprintf("\n"); -} diff --git a/ac3dec/libac3/stats.h b/ac3dec/libac3/stats.h deleted file mode 100644 index 8a9ecb6..0000000 --- a/ac3dec/libac3/stats.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * stats.h - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -void stats_print_syncinfo(syncinfo_t *syncinfo); -void stats_print_bsi(bsi_t *bsi); -void stats_print_audblk(bsi_t *bsi,audblk_t *audblk); -void stats_print_banner(syncinfo_t *syncinfo,bsi_t *bsi); diff --git a/ac3dec/output.c b/ac3dec/output.c deleted file mode 100644 index 5f707f8..0000000 --- a/ac3dec/output.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (c) by Jaroslav Kysela - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include -#include -#include -#include -#include -#include -#include - -typedef signed short sint_16; -typedef unsigned int uint_32; - -#include "output.h" - -static output_t out_config; -static snd_pcm_t *pcm; - -/* - * open the audio device for writing to - */ -int output_open(output_t *output) -{ - const char *pcm_name = output->pcm_name; - char devstr[128]; - const char *basedev; - snd_pcm_hw_params_t *params; - unsigned int rate, buffer_time, period_time, tmp; - snd_pcm_format_t format = output->bits == 16 ? SND_PCM_FORMAT_S16 : SND_PCM_FORMAT_U8; - int err, step; - snd_pcm_hw_params_alloca(¶ms); - - out_config = *output; - - /* - * Open the device driver - */ - if (pcm_name == NULL) { - switch (output->channels) { - case 1: - case 2: - if (output->spdif != SPDIF_NONE) { - unsigned char s[4]; - if (output->spdif == SPDIF_PRO) { - s[0] = (IEC958_AES0_PROFESSIONAL | - IEC958_AES0_NONAUDIO | - IEC958_AES0_PRO_EMPHASIS_NONE | - IEC958_AES0_PRO_FS_48000); - s[1] = (IEC958_AES1_PRO_MODE_NOTID | - IEC958_AES1_PRO_USERBITS_NOTID); - s[2] = IEC958_AES2_PRO_WORDLEN_NOTID; - s[3] = 0; - } else { - s[0] = IEC958_AES0_CON_EMPHASIS_NONE; - if (output->spdif == SPDIF_CON) - s[0] |= IEC958_AES0_NONAUDIO; - s[1] = (IEC958_AES1_CON_ORIGINAL | - IEC958_AES1_CON_PCM_CODER); - s[2] = 0; - s[3] = IEC958_AES3_CON_FS_48000; - } - if (output->hdmi) - basedev = "hdmi"; - else - basedev = "iec958"; - sprintf(devstr, "plug:%s:{" - "AES0 0x%x AES1 0x%x " - "AES2 0x%x AES3 0x%x", - basedev, - s[0], s[1], s[2], s[3]); - if (out_config.card) - sprintf(devstr + strlen(devstr), - " CARD %s", out_config.card); - strcat(devstr, "}"); - format = SND_PCM_FORMAT_S16_LE; - } else { - if (out_config.card) - sprintf(devstr, "plughw:%s", out_config.card); - else - sprintf(devstr, "default"); - } - break; - case 4: - strcpy(devstr, "plug:surround40"); - if (out_config.card) - sprintf(devstr + strlen(devstr), ":{CARD %s}", out_config.card); - break; - case 6: - strcpy(devstr, "plug:surround51"); - if (out_config.card) - sprintf(devstr + strlen(devstr), ":{CARD %s}", out_config.card); - break; - default: - fprintf(stderr, "%d channels are not supported\n", output->channels); - return -EINVAL; - } - pcm_name = devstr; - } - if (!output->quiet) - fprintf(stdout, "Using PCM device '%s'\n", pcm_name); - if ((err = snd_pcm_open(&pcm, pcm_name, SND_PCM_STREAM_PLAYBACK, 0)) < 0) { - fprintf(stderr, "snd_pcm_open: %s\n", snd_strerror(err)); - return err; - } - err = snd_pcm_hw_params_any(pcm, params); - if (err < 0) { - fprintf(stderr, "Broken configuration for this PCM: no configurations available"); - goto __close; - } - /* set interleaved access */ - err = snd_pcm_hw_params_set_access(pcm, params, - SND_PCM_ACCESS_RW_INTERLEAVED); - if (err < 0) { - fprintf(stderr, "Access type not available\n"); - goto __close; - } - err = snd_pcm_hw_params_set_format(pcm, params, format); - if (err < 0) { - fprintf(stderr, "Sample format non available\n"); - goto __close; - } - err = snd_pcm_hw_params_set_channels(pcm, params, output->channels); - if (err < 0) { - fprintf(stderr, "Channels count non available\n"); - goto __close; - } - rate = output->rate; - err = snd_pcm_hw_params_set_rate_near(pcm, params, &rate, 0); - if (err < 0) { - fprintf(stderr, "Rate not available\n"); - goto __close; - } - buffer_time = 500000; - err = snd_pcm_hw_params_set_buffer_time_near(pcm, params, &buffer_time, 0); - if (err < 0) { - fprintf(stderr, "Buffer time not available\n"); - goto __close; - } - step = 2; - period_time = 10000 * 2; - do { - period_time /= 2; - tmp = period_time; - err = snd_pcm_hw_params_set_period_time_near(pcm, params, &tmp, 0); - if (err < 0) { - fprintf(stderr, "Period time not available\n"); - goto __close; - } - if (tmp == period_time) { - period_time /= 3; - tmp = period_time; - err = snd_pcm_hw_params_set_period_time_near(pcm, params, &tmp, 0); - if (tmp == period_time) - period_time = 10000 * 2; - } - } while (buffer_time == period_time && period_time > 10000); - if (buffer_time == period_time) { - fprintf(stderr, "Buffer time and period time match, could not use\n"); - goto __close; - } - if ((err = snd_pcm_hw_params(pcm, params)) < 0) { - fprintf(stderr, "PCM hw_params failed: %s\n", snd_strerror(err)); - goto __close; - } - - return 0; - - __close: - snd_pcm_close(pcm); - pcm = NULL; - return err; -} - -/* - * play the sample to the already opened file descriptor - */ -int output_play(sint_16* output_samples, uint_32 num_frames) -{ - snd_pcm_sframes_t res = 0; - - do { - if (res == -EPIPE) /* underrun */ - res = snd_pcm_prepare(pcm); - else if (res == -ESTRPIPE) { /* suspend */ - while ((res = snd_pcm_resume(pcm)) == -EAGAIN) - sleep(1); - if (res < 0) - res = snd_pcm_prepare(pcm); - } - res = res < 0 ? res : snd_pcm_writei(pcm, (void *)output_samples, num_frames); - if (res > 0) { - output_samples += out_config.channels * res; - num_frames -= res; - } - } while (res == -EPIPE || num_frames > 0); - if (res < 0) - fprintf(stderr, "writei returned error: %s\n", snd_strerror(res)); - return res < 0 ? (int)res : 0; -} - - -void -output_close(void) -{ - snd_pcm_close(pcm); -} diff --git a/ac3dec/output.h b/ac3dec/output.h deleted file mode 100644 index 95e535f..0000000 --- a/ac3dec/output.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * - * output.h - * - * Based on original code by Angus Mackay (amackay@gus.ml.org) - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -typedef struct { - const char *pcm_name; - char *card; - int bits; - int rate; - int channels; - unsigned int quiet: 1; - unsigned int hdmi: 1; - enum {SPDIF_NONE = 0, SPDIF_CON, SPDIF_PRO, SPDIF_PCM} spdif; -} output_t; - -int output_open(output_t *output); -int output_play(sint_16* output_samples, uint_32 num_bytes); -void output_close(void); diff --git a/ac3dec/plot_spectrum.m b/ac3dec/plot_spectrum.m deleted file mode 100644 index 43f4806..0000000 --- a/ac3dec/plot_spectrum.m +++ /dev/null @@ -1,17 +0,0 @@ - -window_size = 2048; -f = 0:48000/window_size:48000 * (1 - 1/window_size); -w = transpose(hamming(1536)); -n = size(foo,1); - -spectrum = zeros(1,window_size); - -for i = [1:n] - data = w .* foo(i,:); - spectrum = spectrum + abs(fft(data,window_size)); -end - -plot(f,10*log10(spectrum/max(spectrum))); -grid; -axis([0 24000 -40 0]); - diff --git a/ac3dec/test/Makefile.am b/ac3dec/test/Makefile.am deleted file mode 100644 index ffed19e..0000000 --- a/ac3dec/test/Makefile.am +++ /dev/null @@ -1,37 +0,0 @@ -INCLUDES = -I../libac3 -noinst_PROGRAMS = imdct_test dither_test -#noinst_PROGRAMS = bitstream_test imdct_test imdct_timing uncouple_timing\ - #crc_timing -noinst_HEADERS = timing.h - -#bitstream_test_SOURCES = bitstream_test.c -#bitstream_test_LDADD = ../bitstream.o ../crc.o -# -dither_test_SOURCES = dither_test.c -dither_test_LDADD = ../libac3/dither.o - -imdct_test_SOURCES = imdct_test.c -imdct_test_LDADD = ../libac3/imdct.o -lm -# -#imdct_timing_SOURCES = imdct_timing.c timing.c -#imdct_timing_LDADD = ../imdct.o -lm -# -#uncouple_timing_SOURCES = uncouple_timing.c timing.c -#uncouple_timing_LDADD = ../uncouple.o ../dither.o -lm -# -#crc_timing_SOURCES = crc_timing.c timing.c -#crc_timing_LDADD = ../crc.o -lm - -check: -# rm -f bitstream_test.out -# ./bitstream_test > bitstream_test.out -# diff bitstream_test.out bitstream_test.out.ref -# rm -f imdct_test.out -# ./imdct_test > imdct_test.out -# diff imdct_test.out imdct_test.out.ref - rm -f dither_test.out - ./dither_test > dither_test.out - diff dither_test.out dither_test.out.ref - -clean: - rm -f *.out diff --git a/ac3dec/test/dither_test.c b/ac3dec/test/dither_test.c deleted file mode 100644 index e45dc71..0000000 --- a/ac3dec/test/dither_test.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * dither_test.c - * - * Aaron Holtzman - May 1999 - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" -#include "dither.h" - -#include -#include - -int main(void) -{ - int i,j,foo; - struct timeval start,end; - - /* - for(i=0;i < 65538 ;i++) - //printf("%04x\n",dither_gen()); - printf("%f\n",((sint_16)dither_gen())/ 32768.0); - printf("\n"); - */ - - - - for(j=0;j < 10 ;j++) - { - gettimeofday(&start,0); - for(i=0;i < 10000 ;i++) - { - foo = dither_gen(); - } - gettimeofday(&end,0); - printf("%f us\n",((end.tv_sec - start.tv_sec) * 1000000 + - (end.tv_usec - start.tv_usec))/10000.0); - } - -} diff --git a/ac3dec/test/imdct_test.c b/ac3dec/test/imdct_test.c deleted file mode 100644 index 12572d1..0000000 --- a/ac3dec/test/imdct_test.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * imdct_test.c - * - * Aaron Holtzman - May 1999 - * - */ - -#include -#include -#include "ac3.h" -#include "ac3_internal.h" -#include "imdct.h" - -static stream_samples_t samples; -static bsi_t bsi; -static audblk_t audblk; - -int main(void) -{ - int i; - - samples[0][20] = 0.4; - samples[0][40] = 0.4; - samples[0][30] = 1.0; - - - imdct_init(); - bsi.nfchans = 1; - - imdct(&bsi,&audblk,samples); - - - for(i=0;i<256;i++) - printf("%1.8f\n",samples[0][i]); - - return 0; - -} diff --git a/ac3dec/test/timing.h b/ac3dec/test/timing.h deleted file mode 100644 index 9d8da62..0000000 --- a/ac3dec/test/timing.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * timing.h - * - * Aaron Holtzman - May 1999 - * - */ - -//uint_64 get_time(void); -uint_64 timing_init(void); - -void timing_test_2(void (*func)(void*,void*),void *arg_1,void *arg_2,char name[]); -void timing_test_3(void (*func)(void*,void*,void*),void *arg_1,void *arg_2,void *arg_3,char name[]); -double timing_once_3(void (*func)(void*,void*,void*),void *arg_1,void *arg_2,void *arg_3); - diff --git a/ac3dec/tools/Makefile.am b/ac3dec/tools/Makefile.am deleted file mode 100644 index 9dc32b4..0000000 --- a/ac3dec/tools/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -# # Process this file with automake to produce Makefile.in. -AUTOMAKE_OPTIONS = 1.3 foreign - -CFLAGS = -Wall -O3 -g - -bin_PROGRAMS = extract_ac3 - - -extract_ac3_SOURCES = extract_ac3.c -#verify is broken right now -#verify_ac3_SOURCES = verify_ac3.c -#verify_ac3_LDADD = ../parse.o ../bitstream.o ../crc.o ../debug.o ../stats.o diff --git a/ac3dec/tools/extract_ac3.c b/ac3dec/tools/extract_ac3.c deleted file mode 100644 index e14cf5c..0000000 --- a/ac3dec/tools/extract_ac3.c +++ /dev/null @@ -1,314 +0,0 @@ -/* - * extract_ac3.c - * - * Copyright (C) Aaron Holtzman - June 1999 - * - * Extracts an AC-3 audio stream from an MPEG-2 system stream - * and writes it to stdout - * - * Ideas and bitstream syntax info borrowed from code written - * by Nathan Laredo - * - * Multiple track support by Yuqing Deng - * - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Audio track to play */ -static unsigned char track_code = 0x80; -static unsigned char track_table[8] = -{ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87 -}; - -#define BUFSIZE 512 /* needs to be as big as biggest header */ -static int vobf; -static unsigned char buf[BUFSIZE]; -static unsigned char *cur_pos; -static unsigned char *end_pos; - -void file_init(char file_name[]) -{ - if(file_name[0] == '-' && file_name[1] == '\0') - { - vobf = STDIN_FILENO; - } - else if ((vobf = open(file_name, O_RDONLY)) < 0) - { - fprintf(stderr,"File not found\n"); - exit(1); - } - cur_pos = buf; - end_pos = buf; -} - -inline void increment_position(long x) -{ - if(cur_pos + x <= end_pos) - { - cur_pos += x; - if(cur_pos == end_pos) - { - cur_pos = buf; - end_pos = buf; - } - } - else - { - long size = 0; - x -= (long)(end_pos - cur_pos); -#ifdef SEEK_PIPES - if(lseek(vobf, x, SEEK_CUR) < 0) - { - fprintf(stderr, "Error: unexpected end of stream\n"); - exit(1); - } -#else - while(x) - { - size = (x > BUFSIZE) ? BUFSIZE : x; - if(read(vobf, buf, size) < size) - { - fprintf(stderr, "Error: unexpected end of stream\n"); - exit(1); - } - x-=size; - } -#endif - cur_pos = buf; - end_pos = buf; - } -} - -inline static void load_next_bytes(long count) -{ - if(cur_pos + count <= end_pos) - return; - if(cur_pos + count > buf + BUFSIZE - 1 ) - { - printf ("No buffer space to read %ld bytes\n", count); - exit(1); - } - - count -= (long)(end_pos - cur_pos); - if(read(vobf, end_pos, count) < count) - { - fprintf(stderr, "Error: unexpected end of stream\n"); - exit(1); - } - end_pos += count; -} - -inline int next_24_bits(long x) -{ - load_next_bytes(3); - if (cur_pos[0] != ((x >> 16) & 0xff)) - return 0; - if (cur_pos[1] != ((x >> 8) & 0xff)) - return 0; - if (cur_pos[2] != ((x ) & 0xff)) - return 0; - - return 1; -} - -inline int next_32_bits(long x) -{ - load_next_bytes(4); - if (cur_pos[0] != ((x >> 24) & 0xff)) - return 0; - if (cur_pos[1] != ((x >> 16) & 0xff)) - return 0; - if (cur_pos[2] != ((x >> 8) & 0xff)) - return 0; - if (cur_pos[3] != ((x ) & 0xff)) - return 0; - - return 1; -} - -void read_write_next_bytes(long count, int outfd) -{ - long size; - size = (long)(end_pos - cur_pos); - if(size > count) - { - write(outfd, cur_pos, count); - cur_pos +=count; - if(cur_pos == end_pos) - { - cur_pos = buf; - end_pos = buf; - } - return; - } - else if(size > 0) - { - write(outfd, cur_pos, size); - } - - while(count) - { - size = (count > BUFSIZE) ? BUFSIZE : count; - if(read(vobf, buf, size) < size || - write(outfd, buf, size) < size) - { - fprintf(stderr, "Error: unexpected end of stream\n"); - } - count -= size; - } - cur_pos = buf; - end_pos = buf; -} - -void parse_pes(void) -{ - unsigned long data_length; - unsigned long header_length; - - load_next_bytes(9); - - //The header length is the PES_header_data_length byte plus 6 for the packet - //start code and packet size, 3 for the PES_header_data_length and two - //misc bytes, and finally 4 bytes for the mystery AC3 packet tag - header_length = cur_pos[8] + 6 + 3 + 4 ; - data_length =(cur_pos[4]<<8) + cur_pos[5]; - - - //If we have AC-3 audio then output it - if(cur_pos[3] == 0xbd) - { - load_next_bytes(header_length); -#if 0 - //Debugging printfs - fprintf(stderr,"start of pes curpos[] = %02x%02x%02x%02x\n", - cur_pos[0],cur_pos[1],cur_pos[2],cur_pos[3]); - fprintf(stderr,"header_length = %d data_length = %x\n", - header_length, data_length); - fprintf(stderr,"extra crap 0x%02x%02x%02x%02x data size 0x%0lx\n",cur_pos[header_length-4], - cur_pos[header_length-3],cur_pos[header_length-2],cur_pos[header_length-1],data_length); -#endif - - //Only extract the track we want - if((cur_pos[header_length-4] == track_code )) - { - increment_position(header_length); - read_write_next_bytes(data_length - header_length + 6, STDOUT_FILENO); - - } - else - { - increment_position(data_length + 6); - } - } - else - { - //The packet size is data_length plus 6 bytes to account for the - //packet start code and the data_length itself. - increment_position(data_length + 6); - } -} - -void parse_pack(void) -{ - unsigned long skip_length; - - // Deal with the pack header - // The first 13 bytes are junk. The fourteenth byte - // contains the number of stuff bytes - load_next_bytes(14); - skip_length = cur_pos[13] & 0x7; - increment_position(14 + skip_length); - - // Deal with the system header if it exists - if(next_32_bits(0x000001bb)) - { - // Bytes 5 and 6 contain the length of the header minus 6 - load_next_bytes(6); - skip_length = (cur_pos[4] << 8) + cur_pos[5]; - increment_position(6 + skip_length); - } - - while(next_24_bits(0x000001) && !next_32_bits(0x000001ba)) - { - parse_pes(); - } -} - -int main(int argc, char *argv[]) -{ - int track = 0; - - if (argc < 2) { - fprintf(stderr, "usage: %s mpeg_stream [track number]\n", argv[0]); - exit(1); - } - - if (argc == 3) - { - track = strtol(argv[2], NULL, 0); - fprintf(stderr,"Extracting track %d\n",track); - } - - if (track < 0 || track > 7) - { - fprintf(stderr, "Invalid track number: %d\n", track); - exit(1); - } - - track_code = track_table[track]; - - - - file_init(argv[1]); - - if(!next_32_bits(0x000001ba)) - { - fprintf(stderr, "Non-program streams not handled - exiting\n\n"); - exit(1); - } - - do - { - parse_pack(); - } - while(next_32_bits(0x000001ba)); - - fprintf(stderr,"curpos[] = %x%x%x%x\n",cur_pos[0],cur_pos[1],cur_pos[2],cur_pos[3]); - - if(!next_32_bits(0x000001b9)) - { - fprintf(stderr, "Error: expected end of stream code\n"); - exit(1); - } - - if(vobf != STDIN_FILENO) close(vobf); - return 0; -} diff --git a/as10k1/COPYING b/as10k1/COPYING index 5b6e7c6..b74ec10 100644 --- a/as10k1/COPYING +++ b/as10k1/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/as10k1/as10k1.c b/as10k1/as10k1.c index 96af0c3..079f1c2 100644 --- a/as10k1/as10k1.c +++ b/as10k1/as10k1.c @@ -244,6 +244,7 @@ void asm_open(char *name) struct stat st; char *next; int backup_line_num,backup_file_num; + size_t rsize; @@ -284,8 +285,10 @@ void asm_open(char *name) buff[i].mem_end = buff[i].mem_start+st.st_size; - read(fd, buff[i].mem_start, st.st_size); + rsize = read(fd, buff[i].mem_start, st.st_size); close(fd); + if (rsize != st.st_size) + as_exit("short read from input file\n"); #ifdef DEBUG printf("File %s opened:\n",name); @@ -366,8 +369,8 @@ void as_exit(const char *message) exit(1); } -inline void output_tram_line( struct list_head *line_head, int type){ - +void output_tram_line(struct list_head *line_head, int type) +{ struct tram *tram_sym; struct list_head *entry; @@ -383,13 +386,14 @@ inline void output_tram_line( struct list_head *line_head, int type){ val = __cpu_to_le32(tram_sym->data.value); fwrite(&val,sizeof(u32),1,fp); if(listing){ - if(type==TYPE_TRAM_ADDR_READ) + if(type==TYPE_TRAM_ADDR_READ) { fprintf(listfile,"\tRead"); - else + } else { fprintf(listfile,"\tWrite"); + } - fprintf(listfile,": 0x3%02x/0x2%02x (%s), offset 0x%07x\n",tram_sym->data.address,tram_sym->data.address, - (prev_sym((&tram_sym->list)))->data.name,tram_sym->data.value); + fprintf(listfile,": 0x3%02x/0x2%02x (%s), offset 0x%07x\n",tram_sym->data.address,tram_sym->data.address, + (prev_sym((&tram_sym->list)))->data.name,tram_sym->data.value); } } diff --git a/as10k1/as10k1.h b/as10k1/as10k1.h index b897f3b..1713963 100644 --- a/as10k1/as10k1.h +++ b/as10k1/as10k1.h @@ -55,6 +55,6 @@ int tram_table_count=0; int gpr_constant_count=0; char patch_name[PATCH_NAME_SIZE]="NO_NAME"; -int macro_depth=0; +unsigned int macro_depth=0; diff --git a/as10k1/assemble.c b/as10k1/assemble.c index 4508973..ced57c7 100644 --- a/as10k1/assemble.c +++ b/as10k1/assemble.c @@ -22,6 +22,7 @@ #include"types.h" #include"proto.h" +#include"parse.h" extern int dbg_opt; extern FILE *listfile; @@ -45,7 +46,6 @@ void op(int op, int z,int w,int x,int y) int w0, w1; extern int dsp_code[DSP_CODE_SIZE]; extern int ip; - extern char op_codes[35][9]; extern char listtemp[60]; if (ip >= 0x200) as_exit("to many instructions"); @@ -306,7 +306,6 @@ void add_symbol(char *name, u16 type, u16 address, u32 value) extern int gpr_input_count,gpr_output_count,gpr_static_count,gpr_dynamic_count,gpr_control_count,gpr_constant_count; struct sym *sym; - struct tram *tmp_ptr; extern struct list_head sym_head; extern struct delay tram_delay[MAX_TANK_ADDR]; extern struct lookup tram_lookup[MAX_TANK_ADDR]; @@ -356,10 +355,8 @@ void add_symbol(char *name, u16 type, u16 address, u32 value) else tram_delay[tmp].write++; }else{ - tmp_ptr=(struct tram *)sym; list_add_tail(&(((struct tram *)sym)->tram) , &(tram_lookup[tmp].tram) ); - tmp_ptr=(struct tram *)sym; - if(type== TYPE_TRAM_ADDR_READ) + if(type== TYPE_TRAM_ADDR_READ) tram_lookup[tmp].read++; else tram_lookup[tmp].write++; diff --git a/as10k1/configure.in b/as10k1/configure.ac similarity index 58% rename from as10k1/configure.in rename to as10k1/configure.ac index 37e9e6c..0c35cba 100644 --- a/as10k1/configure.in +++ b/as10k1/configure.ac @@ -1,8 +1,9 @@ -AC_INIT(as10k1.c) -AM_INIT_AUTOMAKE(as10k1, A0.99) +AC_INIT(as10k1.c, A0.99) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" diff --git a/as10k1/cvscompile b/as10k1/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/as10k1/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/as10k1/examples/Makefile b/as10k1/examples/Makefile index 1a36345..6ab8200 100644 --- a/as10k1/examples/Makefile +++ b/as10k1/examples/Makefile @@ -12,6 +12,8 @@ dsp: $(TARGETS) clean: rm -f *~ *.emu10k1 +distclean: clean + install: distdir: diff --git a/as10k1/macro.c b/as10k1/macro.c index a01ad6f..70e4ef9 100644 --- a/as10k1/macro.c +++ b/as10k1/macro.c @@ -72,14 +72,11 @@ void new_macro(char *symbol, char *line, char *operand) void macro_expand(int macnum,char *operand ) { char *line,*next; - int done=0,i,old; + int done=0,old; extern unsigned int macro_depth; extern int macro_line_num; char string[MAX_LINE_LENGTH]; - //initialize macro use: - i=0; - if(macro_depth+1> MAX_MAC_DEPTH) as_exit("Error exceeded maximum number of recursive macro calls"); diff --git a/as10k1/parse.c b/as10k1/parse.c index 8523717..02d4f5e 100644 --- a/as10k1/parse.c +++ b/as10k1/parse.c @@ -18,6 +18,7 @@ #include #include #include"types.h" +#define DECLARE_OP_CODES #include"parse.h" #include"proto.h" @@ -87,7 +88,7 @@ int parse( char line_string[MAX_LINE_LENGTH], char *line) if((tmp=ismacro(op_name_ptr)) != -1 ){ if(defmacro==0) macro_expand(tmp,strtok(NULL,"")); - return(0); + return(0); } if( (op_num=op_decode(op_name_ptr))==-1) { diff --git a/as10k1/parse.h b/as10k1/parse.h index be71daa..b79ed8b 100644 --- a/as10k1/parse.h +++ b/as10k1/parse.h @@ -63,7 +63,9 @@ enum foo { }; - +#ifndef DECLARE_OP_CODES +extern char op_codes[NUM_OPS+1][9]; +#else char op_codes[NUM_OPS+1][9]= { "MACS", @@ -110,6 +112,7 @@ char op_codes[NUM_OPS+1][9]= "con", "NotAnOp" }; +#endif //extern int file_num,source_line_num diff --git a/echomixer/COPYING b/echomixer/COPYING index d60c31a..623b625 100644 --- a/echomixer/COPYING +++ b/echomixer/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/echomixer/Makefile.am b/echomixer/Makefile.am index 1af72c0..beae8fc 100644 --- a/echomixer/Makefile.am +++ b/echomixer/Makefile.am @@ -1,9 +1,10 @@ +SUBDIRS = desktop AM_CFLAGS = @ECHOMIXER_CFLAGS@ bin_PROGRAMS = echomixer man_MANS = echomixer_SOURCES = echomixer.c echomixer_LDADD = @ECHOMIXER_LIBS@ -EXTRA_DIST = gitcompile configure.in-gtk1 configure.in-gtk2 +EXTRA_DIST = gitcompile configure.in-gtk1 AUTOMAKE_OPTIONS = foreign alsa-dist: distdir diff --git a/echomixer/configure.ac b/echomixer/configure.ac new file mode 100644 index 0000000..c360442 --- /dev/null +++ b/echomixer/configure.ac @@ -0,0 +1,10 @@ +AC_INIT(echomixer.c, 1.0.5) +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) + +PKG_CHECK_MODULES(ECHOMIXER, gtk+-2.0 alsa >= 1.0.0) + +AC_OUTPUT(Makefile desktop/Makefile) diff --git a/echomixer/configure.in b/echomixer/configure.in deleted file mode 100644 index 2aca4ef..0000000 --- a/echomixer/configure.in +++ /dev/null @@ -1,27 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(echomixer.c) -AM_INIT_AUTOMAKE(echomixer, 1.0.5) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC - -AC_ARG_WITH(gtk2, - [ --with-gtk2=yes,no Build with GTK+2 (default = yes)], - with_gtk2="$withval", with_gtk2="yes") - -if test "$with_gtk2" = "yes"; then - -PKG_CHECK_MODULES(ECHOMIXER, gtk+-2.0 alsa >= 1.0.0) - -else - -AM_PATH_GTK(1.2.0) -AM_PATH_ALSA(1.0.0) -ECHOMIXER_CFLAGS="$CFLAGS $ALSA_CFLAGS $GTK_CFLAGS" -ECHOMIXER_LIBS="$LIBS $ALSA_LIBS $GTK_LIBS" -AC_SUBST(ECHOMIXER_CFLAGS) -AC_SUBST(ECHOMIXER_LIBS) - -fi - -AC_OUTPUT(Makefile) diff --git a/echomixer/configure.in-gtk2 b/echomixer/configure.in-gtk2 deleted file mode 100644 index 9228924..0000000 --- a/echomixer/configure.in-gtk2 +++ /dev/null @@ -1,9 +0,0 @@ -AC_INIT(echomixer.c) -AM_INIT_AUTOMAKE(echomixer, 1.0.5) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC - -PKG_CHECK_MODULES(ECHOMIXER, gtk+-2.0 alsa >= 1.0.0) - -AC_OUTPUT(Makefile) diff --git a/echomixer/cvscompile b/echomixer/cvscompile deleted file mode 100755 index 3a5537d..0000000 --- a/echomixer/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/echomixer/desktop/Makefile.am b/echomixer/desktop/Makefile.am new file mode 100644 index 0000000..3314702 --- /dev/null +++ b/echomixer/desktop/Makefile.am @@ -0,0 +1,34 @@ +APPNAME = echomixer + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/echomixer/desktop/echomixer.desktop b/echomixer/desktop/echomixer.desktop new file mode 100644 index 0000000..80753f9 --- /dev/null +++ b/echomixer/desktop/echomixer.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Echomixer +GenericName=Control Echo Digital Audio sound cards +Comment=Mixer and GUI control utility for Echo Digital Audio sound cards +Exec=echomixer +Icon=echomixer +Terminal=false +Type=Application +Categories=AudioVideo; +Version=0.9.4 diff --git a/echomixer/desktop/hicolor_apps_48x48_echomixer.png b/echomixer/desktop/hicolor_apps_48x48_echomixer.png new file mode 100644 index 0000000..48c4b92 Binary files /dev/null and b/echomixer/desktop/hicolor_apps_48x48_echomixer.png differ diff --git a/echomixer/echomixer.c b/echomixer/echomixer.c index 54d1520..adc10e1 100644 --- a/echomixer/echomixer.c +++ b/echomixer/echomixer.c @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #define EM_VERSION "%s Echomixer v" VERSION @@ -525,6 +525,25 @@ void GetChannels(void) { nLOut=snd_ctl_elem_value_get_integer(control, 2); // Number of output channels fdOut=snd_ctl_elem_value_get_integer(control, 3); // First digital out nPOut=snd_ctl_elem_value_get_integer(control, 4); // Number of virtual output channels (==nLOut on non-vmixer cards) + + mixerControl.outputs = nLOut; + mixerControl.inputs = nIn; + + if (vmixerId) { + vmixerControl.outputs = nLOut; + vmixerControl.inputs = nPOut; + + /* For outputs and inputs. */ + metersStreams = 2; + } else { + /* For outputs, inputs and system outputs. */ + metersStreams = 3; + } + + /* For the number of channels. */ + metersNumber = 16; + /* For each of levels and peaks. */ + metersTypes = 2; } ClockMask=snd_ctl_elem_value_get_integer(control, 5); // Bitmask of available input clocks } @@ -610,9 +629,7 @@ gint DrawMixer(gpointer unused) { int OutPeak[ECHO_MAXAUDIOOUTPUTS]; int VirLevel[ECHO_MAXAUDIOOUTPUTS]; int VirPeak[ECHO_MAXAUDIOOUTPUTS]; - static int InClip[ECHO_MAXAUDIOINPUTS]; - static int OutClip[ECHO_MAXAUDIOOUTPUTS]; - char str[8]; + char str[16]; int i, o, dB; GdkColor Grid={0x787878, 0, 0, 0}; GdkColor Labels={0x9694C4, 0, 0, 0}; @@ -628,13 +645,8 @@ gint DrawMixer(gpointer unused) { update_rect.height = Mixheight; GetVUmeters(InLevel, InPeak, OutLevel, OutPeak, VirLevel, VirPeak); - if (!gc) { + if (!gc) gc=gdk_gc_new(gtk_widget_get_parent_window(Mixdarea)); - for (i=0; istyle->black_gc, TRUE, 0, 0, Mixwidth, Mixheight); @@ -1674,7 +1686,7 @@ void ToggleWindow(GtkWidget *widget, gpointer window) { // Scan all controls and sets up the structures needed to access them. int OpenControls(const char *card, const char *cardname) { int err, i, o; - int numid, count, items, item; + int numid, items, item; snd_hctl_t *handle; snd_hctl_elem_t *elem; snd_ctl_elem_id_t *id; @@ -1707,20 +1719,15 @@ int OpenControls(const char *card, const char *cardname) { continue; snd_hctl_elem_get_id(elem, id); numid=snd_ctl_elem_id_get_numid(id); - count=snd_ctl_elem_info_get_count(info); if (!strcmp("Monitor Mixer Volume", snd_ctl_elem_id_get_name(id))) { if (!mixerId) { mixerId=numid; CTLID_DEBUG(("First Mixer id=%d\n", mixerId)); - mixerControl.outputs=snd_ctl_elem_info_get_dimension(info, 0); - mixerControl.inputs=snd_ctl_elem_info_get_dimension(info, 1); } } else if (!strcmp("VMixer Volume", snd_ctl_elem_id_get_name(id))) { if (!vmixerId) { vmixerId=vmixerControl.id=numid; CTLID_DEBUG(("First Vmixer id=%d\n", vmixerId)); - vmixerControl.outputs=snd_ctl_elem_info_get_dimension(info, 0); - vmixerControl.inputs=snd_ctl_elem_info_get_dimension(info, 1); } } else if (!strcmp("PCM Playback Volume", snd_ctl_elem_id_get_name(id))) { pcmoutId=pcmoutControl.id=numid; @@ -1789,9 +1796,6 @@ int OpenControls(const char *card, const char *cardname) { CTLID_DEBUG(("VU-meter switch id=%d\n", numid)); } else if (!strcmp("VU-meters", snd_ctl_elem_id_get_name(id))) { vumetersId=numid; - metersStreams=snd_ctl_elem_info_get_dimension(info, 0); // 2 or 3: output, input and (vmixer cards only) pcm - metersNumber=snd_ctl_elem_info_get_dimension(info, 1); // Number of channels - metersTypes=snd_ctl_elem_info_get_dimension(info, 2); // 2: level and peak CTLID_DEBUG(("VU-meters id=%d\n", numid)); } else if (!strcmp("Channels info", snd_ctl_elem_id_get_name(id))) { channelsId=numid; @@ -1867,7 +1871,7 @@ int main(int argc, char *argv[]) { GtkWidget *label, *menu, *menuitem; GSList *bgroup; int err, i, o, n, cardnum, value; - char hwname[8], cardname[32], load, save; + char hwname[16], cardname[32], load, save; snd_ctl_card_info_t *hw_info; load=save=1; @@ -1888,8 +1892,8 @@ int main(int argc, char *argv[]) { } if ((err=snd_ctl_card_info(ctlhandle, hw_info))>=0) { if (!strncmp(snd_ctl_card_info_get_driver(hw_info), "Echo_", 5)) { - strncpy(card, hwname, 7); - hwname[7]=0; + strncpy(card, hwname, sizeof(hwname)-1); + card[sizeof(hwname)-1]=0; strncpy(cardname, snd_ctl_card_info_get_name(hw_info), 31); cardname[31]=0; strncpy(cardId, snd_ctl_card_info_get_name(hw_info), 15); @@ -2093,7 +2097,7 @@ printf("components = %s\n", snd_ctl_card_info_get_components(hw_info));*/ for (i=0; iactive; + gint i=GPOINTER_TO_INT(data); + config_stereo[i]=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(but)); } void config_restore_stereo() diff --git a/envy24control/configure.ac b/envy24control/configure.ac new file mode 100644 index 0000000..dfb21bd --- /dev/null +++ b/envy24control/configure.ac @@ -0,0 +1,10 @@ +AC_INIT(envy24control.c, 0.6.0) +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) + +PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-3.0 alsa >= 0.9.0) + +AC_OUTPUT(Makefile desktop/Makefile) diff --git a/envy24control/configure.in b/envy24control/configure.in deleted file mode 100644 index 30dc8a8..0000000 --- a/envy24control/configure.in +++ /dev/null @@ -1,26 +0,0 @@ -AC_INIT(envy24control.c) -AM_INIT_AUTOMAKE(envy24control, 0.6.0) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC - -AC_ARG_WITH(gtk2, - [ --with-gtk2=yes,no Build with GTK+2 (default = yes)], - with_gtk2="$withval", with_gtk2="yes") - -if test "$with_gtk2" = "yes"; then - -PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-2.0 alsa >= 0.9.0) - -else - -AM_PATH_GTK(1.0.1) -AM_PATH_ALSA(1.0.0) -ENVY24CONTROL_CFLAGS="$CFLAGS $ALSA_CFLAGS $GTK_CFLAGS" -ENVY24CONTROL_LIBS="$LIBS $ALSA_LIBS $GTK_LIBS" -AC_SUBST(ENVY24CONTROL_CFLAGS) -AC_SUBST(ENVY24CONTROL_LIBS) - -fi - -AC_OUTPUT(Makefile) diff --git a/envy24control/configure.in-gtk2 b/envy24control/configure.in-gtk2 deleted file mode 100644 index d42aee8..0000000 --- a/envy24control/configure.in-gtk2 +++ /dev/null @@ -1,9 +0,0 @@ -AC_INIT(envy24control.c) -AM_INIT_AUTOMAKE(envy24control, 0.6.0) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC - -PKG_CHECK_MODULES(ENVY24CONTROL, gtk+-2.0 alsa >= 0.9.0) - -AC_OUTPUT(Makefile) diff --git a/envy24control/cvscompile b/envy24control/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/envy24control/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/envy24control/desktop/Makefile.am b/envy24control/desktop/Makefile.am new file mode 100644 index 0000000..0a6d6ca --- /dev/null +++ b/envy24control/desktop/Makefile.am @@ -0,0 +1,34 @@ +APPNAME = envy24control + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/envy24control/desktop/envy24control.desktop b/envy24control/desktop/envy24control.desktop new file mode 100644 index 0000000..391c647 --- /dev/null +++ b/envy24control/desktop/envy24control.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Envy24 Control +GenericName=Envy24 Control Utility +Comment=Mixer and GUI control utility for Envy24-based sound cards +Exec=envy24control +Icon=envy24control +Terminal=false +Type=Application +Categories=AudioVideo; +Version=0.9.4 diff --git a/envy24control/desktop/hicolor_apps_48x48_envy24control.png b/envy24control/desktop/hicolor_apps_48x48_envy24control.png new file mode 100644 index 0000000..73c47d6 Binary files /dev/null and b/envy24control/desktop/hicolor_apps_48x48_envy24control.png differ diff --git a/envy24control/driverevents.c b/envy24control/driverevents.c index a05cc35..cdc56ab 100644 --- a/envy24control/driverevents.c +++ b/envy24control/driverevents.c @@ -14,12 +14,12 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" -void control_input_callback(gpointer data, gint source, GdkInputCondition condition) +gboolean control_input_callback(GIOChannel *source, GIOCondition condition, gpointer data) { snd_ctl_t *ctl = (snd_ctl_t *)data; snd_ctl_event_t *ev; @@ -29,12 +29,12 @@ void control_input_callback(gpointer data, gint source, GdkInputCondition condit snd_ctl_event_alloca(&ev); if (snd_ctl_read(ctl, ev) < 0) - return; + return TRUE; name = snd_ctl_event_elem_get_name(ev); index = snd_ctl_event_elem_get_index(ev); mask = snd_ctl_event_elem_get_mask(ev); if (! (mask & (SND_CTL_EVENT_MASK_VALUE | SND_CTL_EVENT_MASK_INFO))) - return; + return TRUE; switch (snd_ctl_event_elem_get_interface(ev)) { case SND_CTL_ELEM_IFACE_MIXER: @@ -81,8 +81,13 @@ void control_input_callback(gpointer data, gint source, GdkInputCondition condit else if (!strcmp(name, "Input Sensitivity Switch")) adc_sense_update(index); break; + case SND_CTL_ELEM_IFACE_PCM: + if (!strcmp(name, "IEC958 Playback Default")) + spdif_output_update(); + break; default: break; } + return TRUE; } diff --git a/envy24control/envy24control.c b/envy24control/envy24control.c index 0b2749e..bf6864f 100644 --- a/envy24control/envy24control.c +++ b/envy24control/envy24control.c @@ -24,7 +24,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" @@ -45,7 +45,7 @@ GtkWidget *window; GtkWidget *mixer_mix_drawing; GtkWidget *mixer_clear_peaks_button; GtkWidget *mixer_drawing[20]; -GtkObject *mixer_adj[20][2]; +GtkAdjustment *mixer_adj[20][2]; GtkWidget *mixer_vscale[20][2]; GtkWidget *mixer_mute_toggle[20][2]; GtkWidget *mixer_stereo_toggle[20]; @@ -71,7 +71,7 @@ GtkWidget *hw_clock_state_reset; GtkWidget *hw_rate_locking_check; GtkWidget *hw_rate_reset_check; -GtkObject *hw_volume_change_adj; +GtkAdjustment *hw_volume_change_adj; GtkWidget *hw_volume_change_spin; GtkWidget *hw_spdif_profi_nonaudio_radio; @@ -115,9 +115,9 @@ GtkWidget *input_interface_wavetable; GtkWidget *hw_phono_input_on_radio; GtkWidget *hw_phono_input_off_radio; -GtkObject *av_dac_volume_adj[10]; -GtkObject *av_adc_volume_adj[10]; -GtkObject *av_ipga_volume_adj[10]; +GtkAdjustment *av_dac_volume_adj[10]; +GtkAdjustment *av_adc_volume_adj[10]; +GtkAdjustment *av_ipga_volume_adj[10]; GtkLabel *av_dac_volume_label[10]; GtkLabel *av_adc_volume_label[10]; GtkLabel *av_ipga_volume_label[10]; @@ -130,7 +130,7 @@ struct profile_button { } profiles_toggle_buttons[MAX_PROFILES]; GtkWidget *active_button = NULL; -GtkObject *card_number_adj; +GtkAdjustment *card_number_adj; static void create_mixer_frame(GtkWidget *box, int stream) @@ -139,7 +139,7 @@ static void create_mixer_frame(GtkWidget *box, int stream) GtkWidget *vbox1; GtkWidget *hbox; GtkWidget *frame; - GtkObject *adj; + GtkAdjustment *adj; GtkWidget *vscale; GtkWidget *drawing; GtkWidget *label; @@ -171,107 +171,94 @@ static void create_mixer_frame(GtkWidget *box, int stream) } frame = gtk_frame_new(str); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 2); - vbox = gtk_vbox_new(FALSE, 6); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 2); - hbox = gtk_hbox_new(FALSE, 2); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0); mixer_adj[stream-1][0] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); mixer_vscale[stream-1][0] = vscale; - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(mixer_adjust), - (gpointer)(long)((stream << 16) + 0)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(mixer_adjust), + (gpointer)(long)((stream << 16) + 0)); - vbox1 = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox1); + vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox1, FALSE, FALSE, 0); drawing = gtk_drawing_area_new(); mixer_drawing[stream-1] = drawing; sprintf(drawname, "Mixer%i", stream); gtk_widget_set_name(drawing, drawname); - gtk_widget_show(drawing); - gtk_signal_connect(GTK_OBJECT(drawing), "expose_event", - GTK_SIGNAL_FUNC(level_meters_expose_event), NULL); - gtk_signal_connect(GTK_OBJECT(drawing), "configure_event", - GTK_SIGNAL_FUNC(level_meters_configure_event), NULL); + g_signal_connect(drawing, "draw", + G_CALLBACK(level_meters_draw_callback), NULL); gtk_widget_set_events(drawing, GDK_EXPOSURE_MASK); - gtk_widget_set_usize(drawing, 36, (60 * tall_equal_mixer_ht + 204)); + gtk_widget_set_size_request(drawing, 36, (60 * tall_equal_mixer_ht + 204)); gtk_box_pack_start(GTK_BOX(vbox1), drawing, FALSE, FALSE, 1); label = gtk_label_new(""); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox1), label, TRUE, TRUE, 2); adj = gtk_adjustment_new(96, 0, 96, 1, 16, 0); mixer_adj[stream-1][1] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); mixer_vscale[stream-1][1] = vscale; - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(hbox), vscale, TRUE, FALSE, 0); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(mixer_adjust), - (gpointer)(long)((stream << 16) + 1)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(mixer_adjust), + (gpointer)(long)((stream << 16) + 1)); - hbox = gtk_hbox_new(TRUE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 0); label = gtk_label_new("Left"); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_widget_show(label); + gtk_widget_set_halign(label, GTK_ALIGN_START); + gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); label = gtk_label_new("Right"); - gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); - gtk_widget_show(label); + gtk_widget_set_halign(label, GTK_ALIGN_END); + gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); toggle = gtk_toggle_button_new_with_label("L/R Gang"); mixer_stereo_toggle[stream-1] = toggle; - gtk_widget_show(toggle); gtk_box_pack_end(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); /* gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); */ - gtk_signal_connect(GTK_OBJECT(toggle), "toggled", - GTK_SIGNAL_FUNC(config_set_stereo), (gpointer)stream-1); + g_signal_connect(toggle, "toggled", + G_CALLBACK(config_set_stereo), GINT_TO_POINTER(stream-1)); - hbox = gtk_hbox_new(TRUE, 6); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); + gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); toggle = gtk_toggle_button_new_with_label("Mute"); mixer_mute_toggle[stream-1][0] = toggle; - gtk_widget_show(toggle); gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); - gtk_signal_connect(GTK_OBJECT(toggle), "toggled", - GTK_SIGNAL_FUNC(mixer_toggled_mute), - (gpointer)(long)((stream << 16) + 0)); + g_signal_connect(toggle, "toggled", + G_CALLBACK(mixer_toggled_mute), + (gpointer)(long)((stream << 16) + 0)); toggle = gtk_toggle_button_new_with_label("Mute"); mixer_mute_toggle[stream-1][1] = toggle; - gtk_widget_show(toggle); gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); - gtk_signal_connect(GTK_OBJECT(toggle), "toggled", - GTK_SIGNAL_FUNC(mixer_toggled_mute), - (gpointer)(long)((stream << 16) + 1)); + g_signal_connect(toggle, "toggled", + G_CALLBACK(mixer_toggled_mute), + (gpointer)(long)((stream << 16) + 1)); } @@ -286,33 +273,27 @@ static void create_inputs_mixer(GtkWidget *main, GtkWidget *notebook, int page) int stream; - hbox = gtk_hbox_new(FALSE, 3); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Monitor Inputs"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),page), label); /* build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(viewport), vbox); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); for(stream = (MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + 1); \ @@ -337,33 +318,27 @@ static void create_pcms_mixer(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *viewport; int stream; - hbox = gtk_hbox_new(FALSE, 3); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Monitor PCMs"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),page), label); /* build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(viewport), vbox); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); for(stream = 1; stream <= pcm_output_channels; stream ++) { @@ -437,32 +412,28 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) } frame = gtk_frame_new(str); - gtk_widget_show(frame); gtk_box_pack_start (GTK_BOX(box), frame, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(TRUE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + gtk_box_set_homogeneous(GTK_BOX(vbox), TRUE); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, str1); router_radio[stream-1][0] = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)patchbay_toggled, - (gpointer)(long)((stream << 16) + 0)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(patchbay_toggled), + (gpointer)(long)((stream << 16) + 0)); - hseparator = gtk_hseparator_new(); - gtk_widget_show(hseparator); - gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0); + hseparator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); + gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 0); label = gtk_label_new(""); - gtk_widget_show(label); /* the digital mixer can only be routed to HW1/2 or SPDIF1/2 */ if( (stream <= 2) /* hw1/2 */ || @@ -470,36 +441,32 @@ static void create_router_frame(GtkWidget *box, int stream, int pos) ) { radiobutton = gtk_radio_button_new_with_label(group, stream & 1 ? "Digital Mix L" : "Digital Mix R"); router_radio[stream-1][1] = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)patchbay_toggled, - (gpointer)(long)((stream << 16) + 1)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(patchbay_toggled), + (gpointer)(long)((stream << 16) + 1)); } else { label = gtk_label_new(""); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); } - hseparator = gtk_hseparator_new(); - gtk_widget_show(hseparator); - gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 0); + hseparator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); + gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 0); for(idx = 2 - spdif_channels; idx < input_channels + 2; idx++) { radiobutton = gtk_radio_button_new_with_label(group, table[idx]); router_radio[stream-1][2+idx] = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)patchbay_toggled, - (gpointer)(long)((stream << 16) + 2 + idx)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(patchbay_toggled), + (gpointer)(long)((stream << 16) + 2 + idx)); } } @@ -512,23 +479,19 @@ static void create_router(GtkWidget *main, GtkWidget *notebook, int page) int stream, pos; scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_container_add(GTK_CONTAINER(notebook), scrolledwindow); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); label = gtk_label_new("Patchbay / Router"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(viewport), hbox); pos = 0; @@ -551,85 +514,76 @@ static void create_master_clock(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Master Clock"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 4); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Int 22050"); hw_master_clock_xtal_22050 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"22050"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"22050"); radiobutton = gtk_radio_button_new_with_label(group, "Int 32000"); hw_master_clock_xtal_32000 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"32000"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"32000"); radiobutton = gtk_radio_button_new_with_label(group, "Int 44100"); hw_master_clock_xtal_44100 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"44100"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"44100"); radiobutton = gtk_radio_button_new_with_label(group, "Int 48000"); hw_master_clock_xtal_48000 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"48000"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"48000"); radiobutton = gtk_radio_button_new_with_label(group, "Int 88200"); hw_master_clock_xtal_88200 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"88200"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"88200"); radiobutton = gtk_radio_button_new_with_label(group, "Int 96000"); hw_master_clock_xtal_96000 = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"96000"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"96000"); radiobutton = gtk_radio_button_new_with_label(group, "S/PDIF In"); hw_master_clock_spdif_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"SPDIF"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"SPDIF"); @@ -639,16 +593,14 @@ static void create_master_clock(GtkWidget *box) radiobutton = gtk_radio_button_new_with_label(group, "Word Clock"); hw_master_clock_word_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)internal_clock_toggled, - (gpointer)"WordClock"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(internal_clock_toggled), + (gpointer)"WordClock"); label = gtk_label_new("Locked"); hw_master_clock_status_label = label; - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); } @@ -659,30 +611,27 @@ static void create_rate_state(GtkWidget *box) GtkWidget *check; frame = gtk_frame_new("Rate State"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); - hbox = gtk_hbox_new(TRUE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); check = gtk_check_button_new_with_label("Locked"); hw_rate_locking_check = check; - gtk_widget_show(check); gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(check), "toggled", - (GtkSignalFunc)rate_locking_toggled, - (gpointer)"locked"); + g_signal_connect(check, "toggled", + G_CALLBACK(rate_locking_toggled), + (gpointer)"locked"); check = gtk_check_button_new_with_label("Reset"); hw_rate_reset_check = check; - gtk_widget_show(check); gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(check), "toggled", - (GtkSignalFunc)rate_reset_toggled, - (gpointer)"reset"); + g_signal_connect(check, "toggled", + G_CALLBACK(rate_reset_toggled), + (gpointer)"reset"); } @@ -692,47 +641,45 @@ static void create_actual_rate(GtkWidget *box) GtkWidget *label; frame = gtk_frame_new("Actual Rate"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); label = gtk_label_new(""); hw_master_clock_actual_rate_label = label; - gtk_widget_show(label); gtk_container_add(GTK_CONTAINER(frame), label); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); - gtk_misc_set_padding(GTK_MISC(label), 6, 6); + gtk_widget_set_margin_start(label, 6); + gtk_widget_set_margin_end(label, 6); + gtk_widget_set_margin_top(label, 6); + gtk_widget_set_margin_bottom(label, 6); } static void create_volume_change(GtkWidget *box) { GtkWidget *frame; GtkWidget *hbox; - GtkObject *spinbutton_adj; + GtkAdjustment *spinbutton_adj; GtkWidget *spinbutton; GtkWidget *label; frame = gtk_frame_new("Volume Change"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); label = gtk_label_new("Rate"); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); - spinbutton_adj = gtk_adjustment_new(16, 0, 255, 1, 10, 10); + spinbutton_adj = gtk_adjustment_new(16, 0, 255, 1, 10, 0); hw_volume_change_adj = spinbutton_adj; - spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(spinbutton_adj), 1, 0); - gtk_widget_show(spinbutton); + spinbutton = gtk_spin_button_new(spinbutton_adj, 1, 0); gtk_box_pack_start(GTK_BOX(hbox), spinbutton, TRUE, FALSE, 0); + gtk_widget_set_valign(spinbutton, GTK_ALIGN_CENTER); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spinbutton), TRUE); - gtk_signal_connect(GTK_OBJECT(spinbutton_adj), "value_changed", - GTK_SIGNAL_FUNC(volume_change_rate_adj), NULL); + g_signal_connect(spinbutton_adj, "value_changed", + G_CALLBACK(volume_change_rate_adj), NULL); } @@ -744,33 +691,29 @@ static void create_spdif_output_settings_profi_data(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Data Mode"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Non-audio"); hw_spdif_profi_nonaudio_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_data_toggled, - (gpointer)"Non-audio"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_data_toggled), + (gpointer)"Non-audio"); radiobutton = gtk_radio_button_new_with_label(group, "Audio"); hw_spdif_profi_audio_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_data_toggled, - (gpointer)"Audio"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_data_toggled), + (gpointer)"Audio"); } static void create_spdif_output_settings_profi_stream(GtkWidget *box) @@ -781,32 +724,28 @@ static void create_spdif_output_settings_profi_stream(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Stream"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Stereophonic"); hw_profi_stream_stereo_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_stream_toggled, - (gpointer)"Stereo"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_stream_toggled), + (gpointer)"Stereo"); radiobutton = gtk_radio_button_new_with_label(group, "Not indicated"); hw_profi_stream_notid_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_stream_toggled, - (gpointer)"NOTID"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_stream_toggled), + (gpointer)"NOTID"); } static void create_spdif_output_settings_profi_emphasis(GtkWidget *box) @@ -817,51 +756,45 @@ static void create_spdif_output_settings_profi_emphasis(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Emphasis"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "No emphasis"); hw_profi_emphasis_none_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_emphasis_toggled, - (gpointer)"No"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_emphasis_toggled), + (gpointer)"No"); radiobutton = gtk_radio_button_new_with_label(group, "50/15us"); hw_profi_emphasis_5015_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_emphasis_toggled, - (gpointer)"5015"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_emphasis_toggled), + (gpointer)"5015"); radiobutton = gtk_radio_button_new_with_label(group, "CCITT J.17"); hw_profi_emphasis_ccitt_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_emphasis_toggled, - (gpointer)"CCITT"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_emphasis_toggled), + (gpointer)"CCITT"); radiobutton = gtk_radio_button_new_with_label(group, "Not indicated"); hw_profi_emphasis_notid_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)profi_emphasis_toggled, - (gpointer)"NOTID"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(profi_emphasis_toggled), + (gpointer)"NOTID"); } static void create_spdif_output_settings_profi(GtkWidget *notebook, int page) @@ -870,26 +803,22 @@ static void create_spdif_output_settings_profi(GtkWidget *notebook, int page) GtkWidget *vbox; GtkWidget *label; - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Professional"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); create_spdif_output_settings_profi_data(vbox); create_spdif_output_settings_profi_stream(vbox); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -904,32 +833,28 @@ static void create_spdif_output_settings_consumer_copyright(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Copyright"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Copyrighted"); hw_consumer_copyright_on_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_copyright_toggled, - (gpointer)"Copyright"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_copyright_toggled), + (gpointer)"Copyright"); radiobutton = gtk_radio_button_new_with_label(group, "Copy permitted"); hw_consumer_copyright_off_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_copyright_toggled, - (gpointer)"Permitted"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_copyright_toggled), + (gpointer)"Permitted"); } static void create_spdif_output_settings_consumer_copy(GtkWidget *box) @@ -940,32 +865,28 @@ static void create_spdif_output_settings_consumer_copy(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Copy"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "1-st generation"); hw_consumer_copy_1st_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_copy_toggled, - (gpointer)"1st"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_copy_toggled), + (gpointer)"1st"); radiobutton = gtk_radio_button_new_with_label(group, "Original"); hw_consumer_copy_original_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_copy_toggled, - (gpointer)"Original"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_copy_toggled), + (gpointer)"Original"); } static void create_spdif_output_settings_consumer_emphasis(GtkWidget *box) @@ -976,31 +897,27 @@ static void create_spdif_output_settings_consumer_emphasis(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Emphasis"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "No emphasis"); hw_consumer_emphasis_none_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_emphasis_toggled, - (gpointer)"No"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_emphasis_toggled), + (gpointer)"No"); radiobutton = gtk_radio_button_new_with_label(group, "50/15us"); hw_consumer_emphasis_5015_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_emphasis_toggled, - (gpointer)"5015"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_emphasis_toggled), + (gpointer)"5015"); } static void create_spdif_output_settings_consumer_category(GtkWidget *box) @@ -1011,49 +928,43 @@ static void create_spdif_output_settings_consumer_category(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("Category"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "DAT"); hw_consumer_category_dat_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_category_toggled, - (gpointer)"DAT"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(consumer_category_toggled), + (gpointer)"DAT"); radiobutton = gtk_radio_button_new_with_label(group, "PCM encoder"); hw_consumer_category_pcm_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_category_toggled, - (gpointer)"PCM"); + g_signal_connect(G_OBJECT(radiobutton), "toggled", + G_CALLBACK(consumer_category_toggled), + (gpointer)"PCM"); radiobutton = gtk_radio_button_new_with_label(group, "CD (ICE-908)"); hw_consumer_category_cd_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_category_toggled, - (gpointer)"CD"); + g_signal_connect(G_OBJECT(radiobutton), "toggled", + G_CALLBACK(consumer_category_toggled), + (gpointer)"CD"); radiobutton = gtk_radio_button_new_with_label(group, "General"); hw_consumer_category_general_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)consumer_category_toggled, - (gpointer)"General"); + g_signal_connect(G_OBJECT(radiobutton), "toggled", + G_CALLBACK(consumer_category_toggled), + (gpointer)"General"); } static void create_spdif_output_settings_consumer(GtkWidget *notebook, int page) @@ -1062,34 +973,29 @@ static void create_spdif_output_settings_consumer(GtkWidget *notebook, int page) GtkWidget *hbox; GtkWidget *label; - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); label = gtk_label_new("Consumer"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); create_spdif_output_settings_consumer_copyright(vbox); create_spdif_output_settings_consumer_copy(vbox); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); create_spdif_output_settings_consumer_emphasis(vbox); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -1106,44 +1012,38 @@ static void create_spdif_output_settings(GtkWidget *box) GSList *group = NULL; frame = gtk_frame_new("S/PDIF Output Settings"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); radiobutton = gtk_radio_button_new_with_label(NULL, "Professional"); hw_spdif_professional_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_output_toggled, - (gpointer)"Professional"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_output_toggled), + (gpointer)"Professional"); radiobutton = gtk_radio_button_new_with_label(group, "Consumer"); hw_spdif_consumer_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(hbox), radiobutton, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(radiobutton), 6); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_output_toggled, - (gpointer)"Consumer"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_output_toggled), + (gpointer)"Consumer"); notebook = gtk_notebook_new(); hw_spdif_output_notebook = notebook; - gtk_widget_show(notebook); gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); @@ -1157,51 +1057,40 @@ static void create_spdif_input_select(GtkWidget *box) GtkWidget *vbox; GtkWidget *radiobutton; GSList *group = NULL; - int hide = 1; - - if((card_eeprom.subvendor == ICE1712_SUBDEVICE_DELTADIO2496) || (card_is_dmx6fire)) - hide = 0; frame = gtk_frame_new("Digital Input"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Coaxial"); hw_spdif_input_coaxial_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_input_toggled, - (gpointer)"Coaxial"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_input_toggled), + (gpointer)"Coaxial"); radiobutton = gtk_radio_button_new_with_label(group, "Optical"); hw_spdif_input_optical_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_input_toggled, - (gpointer)"Optical"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_input_toggled), + (gpointer)"Optical"); - radiobutton = gtk_radio_button_new_with_label(group, "Internal CD"); - hw_spdif_switch_off_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - if(card_is_dmx6fire) - gtk_widget_show(radiobutton); - gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)spdif_input_toggled, - (gpointer)"Off"); - - if(hide) - gtk_widget_hide_all(frame); + if (card_is_dmx6fire) { + radiobutton = gtk_radio_button_new_with_label(group, "Internal CD"); + hw_spdif_switch_off_radio = radiobutton; + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); + gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(spdif_input_toggled), + (gpointer)"Off"); + } } @@ -1211,41 +1100,30 @@ static void create_phono_input(GtkWidget *box) GtkWidget *vbox; GtkWidget *radiobutton; GSList *group = NULL; - int hide = 1; - - if(card_is_dmx6fire) - hide = 0; frame = gtk_frame_new("Phono Input Switch"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 7); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Phono"); hw_phono_input_on_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)phono_input_toggled, - (gpointer)"Phono"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(phono_input_toggled), + (gpointer)"Phono"); radiobutton = gtk_radio_button_new_with_label(group, "Mic"); hw_phono_input_off_radio = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)phono_input_toggled, - (gpointer)"Mic"); - - if(hide) - gtk_widget_hide_all(frame); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(phono_input_toggled), + (gpointer)"Mic"); } static void create_input_interface(GtkWidget *box) @@ -1254,59 +1132,46 @@ static void create_input_interface(GtkWidget *box) GtkWidget *vbox; GtkWidget *radiobutton; GSList *group = NULL; - int hide = 1; - - if (card_is_dmx6fire) - hide = 0; frame = gtk_frame_new("Line In Selector"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 4); //gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); radiobutton = gtk_radio_button_new_with_label(group, "Internal"); input_interface_internal = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)analog_input_select_toggled, - (gpointer)"Internal"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(analog_input_select_toggled), + (gpointer)"Internal"); radiobutton = gtk_radio_button_new_with_label(group, "Front Input"); input_interface_front_input = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)analog_input_select_toggled, - (gpointer)"Front Input"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(analog_input_select_toggled), + (gpointer)"Front Input"); radiobutton = gtk_radio_button_new_with_label(group, "Rear Input"); input_interface_rear_input = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)analog_input_select_toggled, - (gpointer)"Rear Input"); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(analog_input_select_toggled), + (gpointer)"Rear Input"); radiobutton = gtk_radio_button_new_with_label(group, "Wavetable"); input_interface_wavetable = radiobutton; - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); - gtk_widget_show(radiobutton); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)analog_input_select_toggled, - (gpointer)"Wave Table"); - - if(hide) - gtk_widget_hide_all(frame); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(analog_input_select_toggled), + (gpointer)"Wave Table"); } static void create_hardware(GtkWidget *main, GtkWidget *notebook, int page) @@ -1321,61 +1186,55 @@ static void create_hardware(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *viewport; GtkWidget *hseparator; - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Hardware Settings"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); /* Build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); /* Outer box */ - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(viewport), hbox); /* Create boxes for controls */ - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 6); - hbox1 = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox1); + hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0); - hseparator = gtk_hseparator_new(); - gtk_widget_show(hseparator); + hseparator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 2); - hbox2 = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox2); + hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0); create_master_clock(hbox1); - vbox1 = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox1); + vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(hbox1), vbox1, FALSE, FALSE, 20); create_rate_state(vbox1); create_actual_rate(vbox1); create_volume_change(vbox1); - create_input_interface(hbox2); - create_phono_input(hbox2); - create_spdif_input_select(hbox2); + if (card_is_dmx6fire) { + create_input_interface(hbox2); + create_phono_input(hbox2); + } + if ((card_eeprom.subvendor == ICE1712_SUBDEVICE_DELTADIO2496) || (card_is_dmx6fire)) { + create_spdif_input_select(hbox2); + } create_spdif_output_settings(hbox); } @@ -1387,57 +1246,47 @@ static void create_about(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *scrolledwindow; GtkWidget *viewport; - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("About"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); /* build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(viewport), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); /* Create text as labels */ label = gtk_label_new(""); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 6); /* create first line */ label = gtk_label_new("Envy24 Control Utility " VERSION); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); /* create second line */ label = gtk_label_new("A GTK Tool for Envy24 PCI Audio Chip"); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); /* create third line */ label = gtk_label_new("Copyright(c) 2000 by Jaroslav Kysela "); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); label = gtk_label_new(""); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 6); } @@ -1447,7 +1296,7 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *hbox; GtkWidget *vbox; GtkWidget *frame; - GtkObject *adj; + GtkAdjustment *adj; GtkWidget *vscale; GtkWidget *radiobutton; GSList *group; @@ -1473,11 +1322,9 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_container_add(GTK_CONTAINER(notebook), scrolledwindow); label = gtk_label_new("Analog Volume"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); @@ -1485,11 +1332,9 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(viewport), hbox); /* create DAC */ @@ -1497,37 +1342,32 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) char name[32]; sprintf(name, "DAC %d", i); frame = gtk_frame_new(name); - gtk_widget_show(frame); //gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); /* Add friendly labels for DMX 6Fires */ if(card_is_dmx6fire && (i < 6)){ label = gtk_label_new(dmx6fire_outputs[i]); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); } adj = gtk_adjustment_new(0, -(envy_dac_max()), 0, 1, 16, 0); av_dac_volume_adj[i] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(dac_volume_adjust), - (gpointer)(long)(i)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(dac_volume_adjust), + (gpointer)(long)(i)); label = gtk_label_new("000"); av_dac_volume_label[i] =(GtkLabel *)label; - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); @@ -1538,13 +1378,12 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) radiobutton = gtk_radio_button_new_with_label(group, envy_dac_sense_enum_name(j)); av_dac_sense_radio[i][j] = radiobutton; - gtk_widget_show(radiobutton); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)dac_sense_toggled, - (gpointer)(long)((i << 8) + j)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(dac_sense_toggled), + (gpointer)(long)((i << 8) + j)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, TRUE, 0); - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); } } @@ -1553,38 +1392,33 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) char name[32]; sprintf(name, "ADC %d", i); frame = gtk_frame_new(name); - gtk_widget_show(frame); //gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); /* Add friendly labels for DMX 6Fires */ if(card_is_dmx6fire && (i < 6)){ label = gtk_label_new(dmx6fire_inputs[i]); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); } adj = gtk_adjustment_new(0, -(envy_adc_max()), 0, 1, 16, 0); av_adc_volume_adj[i] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(adc_volume_adjust), - (gpointer)(long)(i)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(adc_volume_adjust), + (gpointer)(long)(i)); label = gtk_label_new("000"); av_adc_volume_label[i] =(GtkLabel *)label; - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); if (i >= envy_adc_senses()) @@ -1594,13 +1428,12 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) radiobutton = gtk_radio_button_new_with_label(group, envy_adc_sense_enum_name(j)); av_adc_sense_radio[i][j] = radiobutton; - gtk_widget_show(radiobutton); - gtk_signal_connect(GTK_OBJECT(radiobutton), "toggled", - (GtkSignalFunc)adc_sense_toggled, - (gpointer)(long)((i << 8) + j)); + g_signal_connect(radiobutton, "toggled", + G_CALLBACK(adc_sense_toggled), + (gpointer)(long)((i << 8) + j)); gtk_box_pack_start(GTK_BOX(vbox), radiobutton, FALSE, TRUE, 0); - group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton)); + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton)); } } @@ -1609,38 +1442,33 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) char name[32]; sprintf(name, "IPGA %d", i); frame = gtk_frame_new(name); - gtk_widget_show(frame); //gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); /* Add friendly labels for DMX 6Fires */ if(card_is_dmx6fire && (i < 6)){ label = gtk_label_new(dmx6fire_inputs[i]); - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); } adj = gtk_adjustment_new(0, -36, 0, 1, 16, 0); av_ipga_volume_adj[i] = adj; - vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); + vscale = gtk_scale_new(GTK_ORIENTATION_VERTICAL, adj); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); - gtk_widget_show(vscale); gtk_box_pack_start(GTK_BOX(vbox), vscale, TRUE, TRUE, 6); gtk_scale_set_value_pos(GTK_SCALE(vscale), GTK_POS_BOTTOM); gtk_scale_set_digits(GTK_SCALE(vscale), 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(ipga_volume_adjust), - (gpointer)(long)(i)); + g_signal_connect(adj, "value_changed", + G_CALLBACK(ipga_volume_adjust), + (gpointer)(long)(i)); label = gtk_label_new("000"); av_ipga_volume_label[i] = (GtkLabel *)label; - gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); } } @@ -1671,19 +1499,19 @@ int delete_card_number(GtkWidget *delete_button) gint card_nr; gint index; - if (!(GTK_TOGGLE_BUTTON (delete_button)->active)) + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (delete_button))) return EXIT_SUCCESS; - card_nr = GTK_ADJUSTMENT (card_number_adj)->value; + card_nr = gtk_adjustment_get_value(card_number_adj); if ((card_nr < 0) || (card_nr >= MAX_CARD_NUMBERS)) { fprintf(stderr, "card number not in [0 ... %d]\n", MAX_CARD_NUMBERS - 1); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (delete_button), FALSE); return -EINVAL; } res = delete_card(card_number, profiles_file_name); if (res < 0) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (delete_button), FALSE); return res; } if (card_nr == card_number) { @@ -1693,7 +1521,7 @@ int delete_card_number(GtkWidget *delete_button) } } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (delete_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (delete_button), FALSE); return EXIT_SUCCESS; } @@ -1712,18 +1540,18 @@ int save_active_profile(GtkWidget *save_button) gint res; gint index; - if (!(GTK_TOGGLE_BUTTON (save_button)->active)) + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (save_button))) return EXIT_SUCCESS; if ((index = index_active_profile()) >= 0) { res = save_restore(ALSACTL_OP_STORE, index + 1, card_number, profiles_file_name, \ gtk_entry_get_text(GTK_ENTRY (profiles_toggle_buttons[index].entry))); } else { fprintf(stderr, "No active profile found.\n"); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (save_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (save_button), FALSE); return -EXIT_FAILURE; } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (save_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (save_button), FALSE); return res; } @@ -1734,21 +1562,21 @@ void entry_toggle_editable(GtkWidget *toggle_button, GtkWidget *entry) gint profile_number; if (active_button == toggle_button) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (toggle_button), TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (toggle_button), TRUE); gtk_editable_set_editable(GTK_EDITABLE (entry), TRUE); gtk_widget_grab_focus(entry); return; - } else if (GTK_TOGGLE_BUTTON (toggle_button)->active) { + } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (toggle_button))) { active_button = toggle_button; } - gtk_editable_set_editable(GTK_EDITABLE (entry), GTK_TOGGLE_BUTTON (toggle_button)->active); - if (GTK_TOGGLE_BUTTON (toggle_button)->active) { + gtk_editable_set_editable(GTK_EDITABLE (entry), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (toggle_button))); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (toggle_button))) { gtk_widget_grab_focus(entry); profile_number = NOTFOUND; for (index = 0; index < MAX_PROFILES; index++) { if (profiles_toggle_buttons[index].toggle_button != toggle_button) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[index].toggle_button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[index].toggle_button), FALSE); } else { profile_number = index + 1; } @@ -1771,28 +1599,25 @@ static GtkWidget *toggle_button_entry(const GtkWidget *parent, const gchar *prof GtkWidget *entry_label; GtkWidget *toggle_button; - box = gtk_hbox_new(FALSE, 0); + box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); toggle_button = gtk_toggle_button_new(); - gtk_container_border_width(GTK_CONTAINER(toggle_button), 3); + gtk_container_set_border_width(GTK_CONTAINER(toggle_button), 3); profiles_toggle_buttons[index].entry = entry_label = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY (entry_label), MAX_PROFILE_NAME_LENGTH); gtk_entry_set_text(GTK_ENTRY (entry_label), profile_name); /* only the active profile can be modified */ gtk_editable_set_editable(GTK_EDITABLE (entry_label), FALSE); - gtk_signal_connect(GTK_OBJECT (entry_label), "activate", - GTK_SIGNAL_FUNC (enter_callback), + g_signal_connect(entry_label, "activate", + G_CALLBACK (enter_callback), (gpointer) entry_label); - gtk_signal_connect(GTK_OBJECT (toggle_button), "toggled", - GTK_SIGNAL_FUNC (entry_toggle_editable), + g_signal_connect(toggle_button, "toggled", + G_CALLBACK (entry_toggle_editable), (gpointer) entry_label); gtk_box_pack_start(GTK_BOX (box), entry_label, FALSE, FALSE, 20); - gtk_widget_show(entry_label); - gtk_widget_show(box); gtk_container_add(GTK_CONTAINER (toggle_button), box); - gtk_widget_show(toggle_button); return (toggle_button); } @@ -1806,7 +1631,7 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) GtkWidget *hbox1; GtkWidget *save_button; GtkWidget *delete_button; - GtkObject *card_button_adj; + GtkAdjustment *card_button_adj; GtkWidget *card_button; GtkWidget *scrolledwindow; GtkWidget *viewport; @@ -1816,83 +1641,72 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) gint max_profiles; gint max_digits; - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(notebook), hbox); label = gtk_label_new("Profiles"); - gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), label); /* build scrolling area */ scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(hbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); viewport = gtk_viewport_new(NULL, NULL); - gtk_widget_show(viewport); gtk_container_add(GTK_CONTAINER(scrolledwindow), viewport); - hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add(GTK_CONTAINER(viewport), hbox); gtk_container_set_border_width(GTK_CONTAINER(hbox), 0); /* Create button boxes */ - vbox1 = gtk_vbutton_box_new(); + vbox1 = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); - gtk_vbutton_box_set_spacing_default(0); for (index = 0; index < MAX_PROFILES; index++) { profile_name = get_profile_name(index + 1, card_number, profiles_file_name); profiles_toggle_buttons[index].toggle_button = toggle_button_entry(window, profile_name, index); gtk_box_pack_start(GTK_BOX (vbox1), profiles_toggle_buttons[index].toggle_button, FALSE, FALSE, 0); } - gtk_widget_show(vbox1); - gtk_container_border_width(GTK_CONTAINER(vbox1), 6); + gtk_container_set_border_width(GTK_CONTAINER(vbox1), 6); - vbox2 = gtk_vbutton_box_new(); - gtk_widget_show(vbox2); - gtk_container_border_width(GTK_CONTAINER(vbox2), 50); + vbox2 = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); + gtk_container_set_border_width(GTK_CONTAINER(vbox2), 50); - hbox1 = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox1); + hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox2), hbox1, FALSE, FALSE, 20); label_card_nr = gtk_label_new("Card Number:"); - gtk_widget_show(label_card_nr); gtk_box_pack_start(GTK_BOX(hbox1), label_card_nr, FALSE, FALSE, 20); gtk_label_set_justify(GTK_LABEL(label_card_nr), GTK_JUSTIFY_LEFT); - card_button_adj = gtk_adjustment_new(16, 0, MAX_CARD_NUMBERS - 1, 1, 10, 10); + card_button_adj = gtk_adjustment_new(16, 0, MAX_CARD_NUMBERS - 1, 1, 10, 0); card_number_adj = card_button_adj; - card_button = gtk_spin_button_new(GTK_ADJUSTMENT (card_button_adj), 1, 0); - gtk_widget_show(card_button); + card_button = gtk_spin_button_new(card_button_adj, 1, 0); gtk_box_pack_start(GTK_BOX (hbox1), card_button, TRUE, FALSE, 0); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON (card_button), TRUE); - gtk_adjustment_set_value(GTK_ADJUSTMENT (card_button_adj), card_number); + gtk_adjustment_set_value(card_button_adj, card_number); delete_button = gtk_toggle_button_new_with_label("Delete card from profiles"); - gtk_widget_show(delete_button); gtk_box_pack_start(GTK_BOX (vbox2), delete_button, FALSE, FALSE, 20); - gtk_signal_connect(GTK_OBJECT (delete_button), "toggled", - GTK_SIGNAL_FUNC (delete_card_number), + g_signal_connect(delete_button, "toggled", + G_CALLBACK (delete_card_number), NULL); save_button = gtk_toggle_button_new_with_label("Save active profile"); - gtk_widget_show(save_button); gtk_box_pack_end(GTK_BOX (vbox2), save_button, FALSE, FALSE, 20); - gtk_signal_connect(GTK_OBJECT (save_button), "toggled", - GTK_SIGNAL_FUNC (save_active_profile), + g_signal_connect(save_button, "toggled", + G_CALLBACK (save_active_profile), NULL); gtk_container_add(GTK_CONTAINER(hbox), vbox1); + gtk_widget_set_hexpand(vbox1, TRUE); gtk_container_add(GTK_CONTAINER(hbox), vbox2); + gtk_widget_set_hexpand(vbox2, TRUE); if (default_profile != NULL) { @@ -1915,7 +1729,7 @@ static void create_profiles(GtkWidget *main, GtkWidget *notebook, int page) profile_number = get_profile_number(default_profile, card_number, profiles_file_name); } if ((profile_number > 0) && (profile_number <= MAX_PROFILES)) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[profile_number - 1].toggle_button), TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (profiles_toggle_buttons[profile_number - 1].toggle_button), TRUE); } else { fprintf(stderr, "Cannot find profile '%s' for card '%d'.\n", default_profile, card_number); } @@ -1932,27 +1746,23 @@ static void create_outer(GtkWidget *main) GtkWidget *drawing; /* Create digital mixer frame */ - vbox = gtk_vbox_new(FALSE, 1); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1); gtk_box_pack_start(GTK_BOX(main), vbox, FALSE, FALSE, 0); label = gtk_label_new(" Rt-clk Menu >>"); - //gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_widget_show(label); + //gtk_widget_set_halign(label, GTK_ALIGN_START); + //gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 3); frame = gtk_frame_new("Digital Mixer"); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); /* Create controls in the digital mixer frame */ - vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(vbox); + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); - hbox1 = gtk_hbox_new(FALSE, 0); - gtk_widget_show(hbox1); + hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 6); drawing = gtk_drawing_area_new(); @@ -1960,60 +1770,37 @@ static void create_outer(GtkWidget *main) gtk_widget_set_name(drawing, "DigitalMixer"); gtk_box_pack_start(GTK_BOX(hbox1), drawing, TRUE, FALSE, 6); if (tall_equal_mixer_ht > 1 ) { - gtk_widget_set_usize(drawing, 60, 264 + 60 * (tall_equal_mixer_ht - 1)); + gtk_widget_set_size_request(drawing, 60, 264 + 60 * (tall_equal_mixer_ht - 1)); } else { - gtk_widget_set_usize(drawing, 60, 264); + gtk_widget_set_size_request(drawing, 60, 264); } - gtk_signal_connect(GTK_OBJECT(drawing), "expose_event", - (GtkSignalFunc)level_meters_expose_event, NULL); - gtk_signal_connect(GTK_OBJECT(drawing), "configure_event", - (GtkSignalFunc)level_meters_configure_event, NULL); + g_signal_connect(drawing, "draw", + G_CALLBACK(level_meters_draw_callback), NULL); gtk_widget_set_events(drawing, GDK_EXPOSURE_MASK); - gtk_widget_show(drawing); - hbox1 = gtk_hbox_new(TRUE, 0); - gtk_widget_show(hbox1); + hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(hbox1), TRUE); gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox1), 6); label = gtk_label_new("Left"); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_widget_show(label); + gtk_widget_set_halign(label, GTK_ALIGN_START); + gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0); label = gtk_label_new("Right"); - gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); - gtk_widget_show(label); + gtk_widget_set_halign(label, GTK_ALIGN_END); + gtk_widget_set_valign(label, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 0); mixer_clear_peaks_button = gtk_button_new_with_label("Reset Peaks"); - gtk_widget_show(mixer_clear_peaks_button); gtk_box_pack_start(GTK_BOX(vbox), mixer_clear_peaks_button, TRUE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(mixer_clear_peaks_button), 4); - gtk_signal_connect(GTK_OBJECT(mixer_clear_peaks_button), "clicked", - GTK_SIGNAL_FUNC(level_meters_reset_peaks), NULL); + g_signal_connect(mixer_clear_peaks_button, "clicked", + G_CALLBACK(level_meters_reset_peaks), NULL); }/* End create_outer */ -static void create_blank(GtkWidget *main, GtkWidget *notebook, int page) -{ -/* This is a little workaround for a problem with the pop-up menu. - For some reason the label of the last page is not accessed by the menu - so all it shows is 'page 7'. Here a blank extra page is created, unseen, - which seems to satisfy gtk, and we see the menu last page label correct. AH 12.7.2005 */ - - GtkWidget *label; - GtkWidget *hbox; - - hbox = gtk_hbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(notebook), hbox); - - label = gtk_label_new("Blank"); - gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), - gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page), - label); -} - static void usage(void) { fprintf(stderr, "usage: envy24control [-c card#] [-D control-name] [-o num-outputs] [-i num-inputs] [-p num-pcm-outputs] [-s num-spdif-in/outs] [-v] [-f profiles-file] [profile name|profile id] [-m channel-num] [-w initial-window-width] [-t height-num]\n"); @@ -2035,6 +1822,7 @@ int main(int argc, char **argv) { GtkWidget *notebook; GtkWidget *outerbox; + GtkCssProvider *provider; char *name, tmpname[8], title[128]; int i, c, err; snd_ctl_card_info_t *hw_info; @@ -2176,7 +1964,7 @@ int main(int argc, char **argv) if (! name) { /* probe cards */ - static char cardname[8]; + static char cardname[16]; /* FIXME: hardcoded max number of cards */ for (card_number = 0; card_number < 8; card_number++) { sprintf(cardname, "hw:%d", card_number); @@ -2252,20 +2040,29 @@ int main(int argc, char **argv) fprintf(stderr, "using\t --- input_channels: %i\n\t --- output_channels: %i\n\t --- pcm_output_channels: %i\n\t --- spdif in/out channels: %i\n", \ input_channels, output_channels, pcm_output_channels, spdif_channels); + /* Reduce button padding so the mixers don't get so wide */ + provider = gtk_css_provider_new(); + gtk_css_provider_load_from_data(provider, + "button { padding-left: 6px; padding-right: 6px; }", + -1, NULL); + gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), + GTK_STYLE_PROVIDER(provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_object_unref(provider); + /* Make the title */ sprintf(title, "Envy24 Control Utility %s (%s)", VERSION, snd_ctl_card_info_get_longname(hw_info)); /* Create the main window */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), title); - gtk_signal_connect(GTK_OBJECT (window), "delete_event", - (GtkSignalFunc) gtk_main_quit, NULL); + g_signal_connect(window, "delete_event", + G_CALLBACK(gtk_main_quit), NULL); signal(SIGINT, (void *)gtk_main_quit); gtk_window_set_default_size(GTK_WINDOW(window), wwidth, 300); - outerbox = gtk_hbox_new(FALSE, 3); - gtk_widget_show(outerbox); + outerbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); gtk_container_add(GTK_CONTAINER(window), outerbox); create_outer(outerbox); @@ -2274,8 +2071,7 @@ int main(int argc, char **argv) notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook)); - gtk_widget_show(notebook); - gtk_container_add(GTK_CONTAINER(outerbox), notebook); + gtk_box_pack_start(GTK_BOX(outerbox), notebook, TRUE, TRUE, 0); page = 0; @@ -2287,30 +2083,34 @@ int main(int argc, char **argv) create_analog_volume(outerbox, notebook, page++); create_profiles(outerbox, notebook, page++); create_about(outerbox, notebook, page++); - create_blank(outerbox, notebook, page++); npfds = snd_ctl_poll_descriptors_count(ctl); if (npfds > 0) { pfds = alloca(sizeof(*pfds) * npfds); npfds = snd_ctl_poll_descriptors(ctl, pfds, npfds); - for (i = 0; i < npfds; i++) - gdk_input_add(pfds[i].fd, - GDK_INPUT_READ, - control_input_callback, - ctl); + for (i = 0; i < npfds; i++) { + GIOChannel *channel = g_io_channel_unix_new(pfds[i].fd); + g_io_add_watch(channel, + G_IO_IN, + control_input_callback, + ctl); + g_io_channel_unref(channel); + } snd_ctl_subscribe_events(ctl, 1); } if (midi_fd >= 0) { - gdk_input_add(midi_fd, GDK_INPUT_READ, midi_process, NULL); + GIOChannel *channel = g_io_channel_unix_new(midi_fd); + g_io_add_watch(channel, G_IO_IN, midi_process, NULL); + g_io_channel_unref(channel); } - gtk_timeout_add(40, level_meters_timeout_callback, NULL); - gtk_timeout_add(100, master_clock_status_timeout_callback, NULL); - gtk_timeout_add(100, internal_clock_status_timeout_callback, NULL); - gtk_timeout_add(100, rate_locking_status_timeout_callback, NULL); - gtk_timeout_add(100, rate_reset_status_timeout_callback, NULL); + g_timeout_add(40, level_meters_timeout_callback, NULL); + g_timeout_add(100, master_clock_status_timeout_callback, NULL); + g_timeout_add(100, internal_clock_status_timeout_callback, NULL); + g_timeout_add(100, rate_locking_status_timeout_callback, NULL); + g_timeout_add(100, rate_reset_status_timeout_callback, NULL); - gtk_widget_show(window); + gtk_widget_show_all(window); level_meters_postinit(); mixer_postinit(); diff --git a/envy24control/envy24control.h b/envy24control/envy24control.h index f5c1e39..0f887e7 100644 --- a/envy24control/envy24control.h +++ b/envy24control/envy24control.h @@ -85,7 +85,7 @@ extern ice1712_eeprom_t card_eeprom; extern GtkWidget *mixer_mix_drawing; extern GtkWidget *mixer_clear_peaks_button; extern GtkWidget *mixer_drawing[20]; -extern GtkObject *mixer_adj[20][2]; +extern GtkAdjustment *mixer_adj[20][2]; extern GtkWidget *mixer_vscale[20][2]; extern GtkWidget *mixer_solo_toggle[20][2]; extern GtkWidget *mixer_mute_toggle[20][2]; @@ -108,7 +108,7 @@ extern GtkWidget *hw_master_clock_actual_rate_label; extern GtkWidget *hw_rate_locking_check; extern GtkWidget *hw_rate_reset_check; -extern GtkObject *hw_volume_change_adj; +extern GtkAdjustment *hw_volume_change_adj; extern GtkWidget *hw_volume_change_spin; extern GtkWidget *hw_spdif_profi_nonaudio_radio; @@ -151,9 +151,9 @@ extern GtkWidget *input_interface_internal; extern GtkWidget *input_interface_front_input; extern GtkWidget *input_interface_rear_input; extern GtkWidget *input_interface_wavetable; -extern GtkObject *av_dac_volume_adj[]; -extern GtkObject *av_adc_volume_adj[]; -extern GtkObject *av_ipga_volume_adj[]; +extern GtkAdjustment *av_dac_volume_adj[]; +extern GtkAdjustment *av_adc_volume_adj[]; +extern GtkAdjustment *av_ipga_volume_adj[]; extern GtkLabel *av_dac_volume_label[]; extern GtkLabel *av_adc_volume_label[]; extern GtkLabel *av_ipga_volume_label[]; @@ -163,8 +163,7 @@ extern GtkWidget *av_adc_sense_radio[][4]; /* flags */ extern int card_is_dmx6fire; -gint level_meters_configure_event(GtkWidget *widget, GdkEventConfigure *event); -gint level_meters_expose_event(GtkWidget *widget, GdkEventExpose *event); +gboolean level_meters_draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data); gint level_meters_timeout_callback(gpointer data); void level_meters_reset_peaks(GtkButton *button, gpointer data); void level_meters_init(void); @@ -238,6 +237,5 @@ void ipga_volume_adjust(GtkAdjustment *adj, gpointer data); void dac_sense_toggled(GtkWidget *togglebutton, gpointer data); void adc_sense_toggled(GtkWidget *togglebutton, gpointer data); -void control_input_callback(gpointer data, gint source, GdkInputCondition condition); -void mixer_input_callback(gpointer data, gint source, GdkInputCondition condition); +gboolean control_input_callback(GIOChannel *gio, GIOCondition condition, gpointer data); diff --git a/envy24control/hardware.c b/envy24control/hardware.c index 73e3f0a..8db95c5 100644 --- a/envy24control/hardware.c +++ b/envy24control/hardware.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" @@ -39,7 +39,14 @@ static inline int is_update_needed(void); static int is_active(GtkWidget *widget) { - return GTK_TOGGLE_BUTTON(widget)->active ? 1 : 0; + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? 1 : 0; +} + +static void label_set(GtkWidget* widget, const char* str) +{ + const char* old = gtk_label_get_text(GTK_LABEL(widget)); + if (strcmp(old, str)) + gtk_label_set_text(GTK_LABEL(widget), str); } void master_clock_update(void) @@ -170,8 +177,8 @@ gint master_clock_status_timeout_callback(gpointer data) snd_ctl_elem_value_set_name(sw, "Word Clock Status"); if ((err = snd_ctl_elem_read(ctl, sw)) < 0) g_print("Unable to determine word clock status: %s\n", snd_strerror(err)); - gtk_label_set_text(GTK_LABEL(hw_master_clock_status_label), - snd_ctl_elem_value_get_boolean(sw, 0) ? "No signal" : "Locked"); + label_set(hw_master_clock_status_label, + snd_ctl_elem_value_get_boolean(sw, 0) ? "No signal" : "Locked"); return TRUE; } @@ -246,7 +253,7 @@ gint internal_clock_status_timeout_callback(gpointer data) } } } - gtk_label_set_text(GTK_LABEL(hw_master_clock_actual_rate_label), label); + label_set(hw_master_clock_actual_rate_label, label); return TRUE; } @@ -354,7 +361,7 @@ void volume_change_rate_adj(GtkAdjustment *adj, gpointer data) { int err; - snd_ctl_elem_value_set_integer(volume_rate, 0, adj->value); + snd_ctl_elem_value_set_integer(volume_rate, 0, gtk_adjustment_get_value(adj)); if ((err = snd_ctl_elem_write(ctl, volume_rate)) < 0) g_print("Unable to write volume change rate: %s\n", snd_strerror(err)); } @@ -455,9 +462,9 @@ void profi_stream_toggled(GtkWidget *togglebutton, gpointer data) return; iec958.status[1] &= ~IEC958_AES1_PRO_MODE; if (!strcmp(str, "NOTID")) { - iec958.status[0] |= IEC958_AES1_PRO_MODE_STEREOPHONIC; + iec958.status[1] |= IEC958_AES1_PRO_MODE_NOTID; } else if (!strcmp(str, "Stereo")) { - iec958.status[0] |= IEC958_AES1_PRO_MODE_NOTID; + iec958.status[1] |= IEC958_AES1_PRO_MODE_STEREOPHONIC; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); @@ -500,7 +507,7 @@ void consumer_copyright_toggled(GtkWidget *togglebutton, gpointer data) if (!strcmp(str, "Copyright")) { iec958.status[0] &= ~IEC958_AES0_CON_NOT_COPYRIGHT; } else if (!strcmp(str, "Permitted")) { - iec958.status[1] |= IEC958_AES0_CON_NOT_COPYRIGHT; + iec958.status[0] |= IEC958_AES0_CON_NOT_COPYRIGHT; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); @@ -517,9 +524,9 @@ void consumer_copy_toggled(GtkWidget *togglebutton, gpointer data) if (iec958.status[0] & IEC958_AES0_PROFESSIONAL) return; if (!strcmp(str, "1st")) { - iec958.status[0] |= IEC958_AES1_CON_ORIGINAL; - } else if (!strcmp(str, "Original")) { iec958.status[1] &= ~IEC958_AES1_CON_ORIGINAL; + } else if (!strcmp(str, "Original")) { + iec958.status[1] |= IEC958_AES1_CON_ORIGINAL; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); @@ -539,7 +546,7 @@ void consumer_emphasis_toggled(GtkWidget *togglebutton, gpointer data) if (!strcmp(str, "No")) { iec958.status[0] |= IEC958_AES0_CON_EMPHASIS_NONE; } else if (!strcmp(str, "5015")) { - iec958.status[1] |= ~IEC958_AES0_CON_EMPHASIS_5015; + iec958.status[0] |= IEC958_AES0_CON_EMPHASIS_5015; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); @@ -555,15 +562,15 @@ void consumer_category_toggled(GtkWidget *togglebutton, gpointer data) return; if (iec958.status[0] & IEC958_AES0_PROFESSIONAL) return; - iec958.status[0] &= ~IEC958_AES1_CON_CATEGORY; + iec958.status[1] &= ~IEC958_AES1_CON_CATEGORY; if (!strcmp(str, "DAT")) { - iec958.status[0] |= IEC958_AES1_CON_DAT; + iec958.status[1] |= IEC958_AES1_CON_DAT; } else if (!strcmp(str, "PCM")) { - iec958.status[0] |= IEC958_AES1_CON_PCM_CODER; + iec958.status[1] |= IEC958_AES1_CON_PCM_CODER; } else if (!strcmp(str, "CD")) { - iec958.status[0] |= IEC958_AES1_CON_IEC908_CD; + iec958.status[1] |= IEC958_AES1_CON_IEC908_CD; } else if (!strcmp(str, "General")) { - iec958.status[0] |= IEC958_AES1_CON_GENERAL; + iec958.status[1] |= IEC958_AES1_CON_GENERAL; } snd_ctl_elem_value_set_iec958(spdif_output, &iec958); spdif_output_write(); @@ -598,7 +605,7 @@ void spdif_output_toggled(GtkWidget *togglebutton, gpointer data) page = 1; } spdif_output_write(); - gtk_notebook_set_page(GTK_NOTEBOOK(hw_spdif_output_notebook), page); + gtk_notebook_set_current_page(GTK_NOTEBOOK(hw_spdif_output_notebook), page); spdif_output_update(); } } diff --git a/envy24control/levelmeters.c b/envy24control/levelmeters.c index fa44979..c053995 100644 --- a/envy24control/levelmeters.c +++ b/envy24control/levelmeters.c @@ -14,18 +14,18 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" -static GdkGC *penGreenShadow[21] = { NULL, }; -static GdkGC *penGreenLight[21] = { NULL, }; -static GdkGC *penOrangeShadow[21] = { NULL, }; -static GdkGC *penOrangeLight[21] = { NULL, }; -static GdkGC *penRedShadow[21] = { NULL, }; -static GdkGC *penRedLight[21] = { NULL, }; -static GdkPixmap *pixmap[21] = { NULL, }; +static GdkRGBA *penGreenShadow = NULL; +static GdkRGBA *penGreenLight = NULL; +static GdkRGBA *penOrangeShadow = NULL; +static GdkRGBA *penOrangeLight = NULL; +static GdkRGBA *penRedShadow = NULL; +static GdkRGBA *penRedLight = NULL; +static int level[22] = { 0 }; static snd_ctl_elem_value_t *peaks; extern int input_channels, output_channels, pcm_output_channels, spdif_channels, view_spdif_playback; @@ -50,22 +50,19 @@ static void get_levels(int idx, int *l1, int *l2) } } -static GdkGC *get_pen(int idx, int nRed, int nGreen, int nBlue) +static GdkRGBA *get_pen(int nRed, int nGreen, int nBlue) { - GdkColor *c; - GdkGC *gc; + GdkRGBA *c; - c = (GdkColor *)g_malloc(sizeof(GdkColor)); - c->red = nRed; - c->green = nGreen; - c->blue = nBlue; - gdk_color_alloc(gdk_colormap_get_system(), c); - gc = gdk_gc_new(pixmap[idx]); - gdk_gc_set_foreground(gc, c); - return gc; + c = (GdkRGBA *)g_malloc(sizeof(GdkRGBA)); + c->red = nRed / 65535.0; + c->green = nGreen / 65535.0; + c->blue = nBlue / 65535.0; + c->alpha = 1.0; + return c; } -static int get_index(gchar *name) +static int get_index(const gchar *name) { int result; @@ -79,7 +76,7 @@ static int get_index(gchar *name) return result; } -static void redraw_meters(int idx, int width, int height, int level1, int level2) +static void redraw_meters(int idx, int width, int height, int level1, int level2, cairo_t *cr) { int stereo = idx == 0; int segment_width = stereo ? (width / 2) - 8 : width - 12; @@ -90,167 +87,156 @@ static void redraw_meters(int idx, int width, int height, int level1, int level2 int seg; int segs_on1 = ((segments * level1) + 128) / 255; int segs_on2 = ((segments * level2) + 128) / 255; + int end_seg; + GdkRectangle clip; // g_print("segs_on1 = %i (%i), segs_on2 = %i (%i)\n", segs_on1, level1, segs_on2, level2); - for (seg = 0; seg < green_segments; seg++) { - gdk_draw_rectangle(pixmap[idx], - segs_on1 > 0 ? penGreenLight[idx] : penGreenShadow[idx], - TRUE, - 6, 3 + ((segments - seg - 1) * 4), - segment_width, - 3); - if (stereo) - gdk_draw_rectangle(pixmap[idx], - segs_on2 > 0 ? penGreenLight[idx] : penGreenShadow[idx], - TRUE, - 2 + (width / 2), - 3 + ((segments - seg - 1) * 4), - segment_width, - 3); + cairo_rectangle(cr, 0, 0, width, height); + cairo_fill(cr); + + gdk_cairo_get_clip_rectangle(cr, &clip); + seg = segments - (clip.y + clip.height) / 4; + if (seg < 0) + seg = 0; + segs_on1 -= seg; + segs_on2 -= seg; + end_seg = segments - (clip.y - 2) / 4; + + for (; seg < green_segments && seg < end_seg; seg++) { + gdk_cairo_set_source_rgba(cr, + segs_on1 > 0 ? penGreenLight : penGreenShadow); + cairo_rectangle(cr, + 6, 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + if (stereo) { + gdk_cairo_set_source_rgba(cr, + segs_on2 > 0 ? penGreenLight : penGreenShadow); + cairo_rectangle(cr, + 2 + (width / 2), + 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + } segs_on1--; segs_on2--; } - for (seg = green_segments; seg < green_segments + orange_segments; seg++) { - gdk_draw_rectangle(pixmap[idx], - segs_on1 > 0 ? penOrangeLight[idx] : penOrangeShadow[idx], - TRUE, - 6, 3 + ((segments - seg - 1) * 4), - segment_width, - 3); - if (stereo) - gdk_draw_rectangle(pixmap[idx], - segs_on2 > 0 ? penOrangeLight[idx] : penOrangeShadow[idx], - TRUE, - 2 + (width / 2), - 3 + ((segments - seg - 1) * 4), - segment_width, - 3); + for (; seg < green_segments + orange_segments && seg < end_seg; seg++) { + gdk_cairo_set_source_rgba(cr, + segs_on1 > 0 ? penOrangeLight : penOrangeShadow); + cairo_rectangle(cr, + 6, 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + if (stereo) { + gdk_cairo_set_source_rgba(cr, + segs_on2 > 0 ? penOrangeLight : penOrangeShadow); + cairo_rectangle(cr, + 2 + (width / 2), + 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + } segs_on1--; segs_on2--; } - for (seg = green_segments + orange_segments; seg < segments; seg++) { - gdk_draw_rectangle(pixmap[idx], - segs_on1 > 0 ? penRedLight[idx] : penRedShadow[idx], - TRUE, - 6, 3 + ((segments - seg - 1) * 4), - segment_width, - 3); - if (stereo) - gdk_draw_rectangle(pixmap[idx], - segs_on2 > 0 ? penRedLight[idx] : penRedShadow[idx], - TRUE, - 2 + (width / 2), - 3 + ((segments - seg - 1) * 4), - segment_width, - 3); + for (; seg < segments && seg < end_seg; seg++) { + gdk_cairo_set_source_rgba(cr, + segs_on1 > 0 ? penRedLight : penRedShadow); + cairo_rectangle(cr, + 6, 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + if (stereo) { + gdk_cairo_set_source_rgba(cr, + segs_on2 > 0 ? penRedLight : penRedShadow); + cairo_rectangle(cr, + 2 + (width / 2), + 3 + ((segments - seg - 1) * 4), + segment_width, + 3); + cairo_fill(cr); + } segs_on1--; segs_on2--; } } -gint level_meters_configure_event(GtkWidget *widget, GdkEventConfigure *event) -{ - int idx = get_index(gtk_widget_get_name(widget)); - - if (pixmap[idx] != NULL) - gdk_pixmap_unref(pixmap[idx]); - pixmap[idx] = gdk_pixmap_new(widget->window, - widget->allocation.width, - widget->allocation.height, - -1); - penGreenShadow[idx] = get_pen(idx, 0, 0x77ff, 0); - penGreenLight[idx] = get_pen(idx, 0, 0xffff, 0); - penOrangeShadow[idx] = get_pen(idx, 0xddff, 0x55ff, 0); - penOrangeLight[idx] = get_pen(idx, 0xffff, 0x99ff, 0); - penRedShadow[idx] = get_pen(idx, 0xaaff, 0, 0); - penRedLight[idx] = get_pen(idx, 0xffff, 0, 0); - gdk_draw_rectangle(pixmap[idx], - widget->style->black_gc, - TRUE, - 0, 0, - widget->allocation.width, - widget->allocation.height); - // g_print("configure: %i:%i\n", widget->allocation.width, widget->allocation.height); - redraw_meters(idx, widget->allocation.width, widget->allocation.height, 0, 0); - return TRUE; -} - -gint level_meters_expose_event(GtkWidget *widget, GdkEventExpose *event) +gboolean level_meters_draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data) { int idx = get_index(gtk_widget_get_name(widget)); int l1, l2; get_levels(idx, &l1, &l2); - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - event->area.x, event->area.y, - event->area.x, event->area.y, - event->area.width, event->area.height); + redraw_meters(idx, gtk_widget_get_allocated_width(widget), gtk_widget_get_allocated_height(widget), l1, l2, cr); return FALSE; } +static void update_meter(int idx) +{ + int stereo = idx == 0; + GtkWidget *widget = stereo ? mixer_mix_drawing : mixer_drawing[idx - 1]; + int width = gtk_widget_get_allocated_width(widget); + int height = gtk_widget_get_allocated_height(widget); + int segments = (height - 6) / 4; + int level_idx = stereo ? 20 : idx - 1; + int l1, l2, segs_on, old_segs_on, h; + + get_levels(idx, &l1, &l2); + segs_on = ((segments * l1) + 128) / 255; + old_segs_on = ((segments * level[level_idx]) + 128) / 255; + h = abs(old_segs_on - segs_on); + level[level_idx] = l1; + + if (h > 0) { + int y = segments - MAX(old_segs_on, segs_on); + gtk_widget_queue_draw_area(widget, + 6, 4 * y + 3, + stereo ? (width / 2) - 8 : width - 12, + 4 * h - 1); + } + + if (stereo) { + level_idx++; + segs_on = ((segments * l2) + 128) / 255; + old_segs_on = ((segments * level[level_idx]) + 128) / 255; + h = abs(old_segs_on - segs_on); + level[level_idx] = l2; + + if (h > 0) { + int y = segments - MAX(old_segs_on, segs_on); + gtk_widget_queue_draw_area(widget, + 2 + (width / 2), 4 * y + 3, + (width / 2) - 8, + 4 * h - 1); + } + } +} + gint level_meters_timeout_callback(gpointer data) { - GtkWidget *widget; - int idx, l1, l2; + int idx; update_peak_switch(); for (idx = 0; idx <= pcm_output_channels; idx++) { - get_levels(idx, &l1, &l2); - widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1]; - if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) { - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - 0, 0, - 0, 0, - widget->allocation.width, widget->allocation.height); - } + update_meter(idx); } if (view_spdif_playback) { for (idx = MAX_PCM_OUTPUT_CHANNELS + 1; idx <= MAX_OUTPUT_CHANNELS + spdif_channels; idx++) { - get_levels(idx, &l1, &l2); - widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1]; - if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) { - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - 0, 0, - 0, 0, - widget->allocation.width, widget->allocation.height); - } + update_meter(idx); } } for (idx = MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + 1; idx <= input_channels + MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS; idx++) { - get_levels(idx, &l1, &l2); - widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1]; - if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) { - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - 0, 0, - 0, 0, - widget->allocation.width, widget->allocation.height); - } + update_meter(idx); } for (idx = MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS + 1; \ idx <= spdif_channels + MAX_PCM_OUTPUT_CHANNELS + MAX_SPDIF_CHANNELS + MAX_INPUT_CHANNELS; idx++) { - get_levels(idx, &l1, &l2); - widget = idx == 0 ? mixer_mix_drawing : mixer_drawing[idx-1]; - if (GTK_WIDGET_VISIBLE(widget) && (pixmap[idx] != NULL)) { - redraw_meters(idx, widget->allocation.width, widget->allocation.height, l1, l2); - gdk_draw_pixmap(widget->window, - widget->style->black_gc, - pixmap[idx], - 0, 0, - 0, 0, - widget->allocation.width, widget->allocation.height); - } + update_meter(idx); } return TRUE; } @@ -270,6 +256,13 @@ void level_meters_init(void) /* older ALSA driver, using MIXER type */ snd_ctl_elem_value_set_interface(peaks, SND_CTL_ELEM_IFACE_MIXER); + + penGreenShadow = get_pen(0, 0x77ff, 0); + penGreenLight = get_pen(0, 0xffff, 0); + penOrangeShadow = get_pen(0xddff, 0x55ff, 0); + penOrangeLight = get_pen(0xffff, 0x99ff, 0); + penRedShadow = get_pen(0xaaff, 0, 0); + penRedLight = get_pen(0xffff, 0, 0); } void level_meters_postinit(void) diff --git a/envy24control/midi.c b/envy24control/midi.c index 327f6cf..dce8d46 100644 --- a/envy24control/midi.c +++ b/envy24control/midi.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include @@ -243,7 +243,7 @@ int midi_init(char *appname, int channel, int midi_enhanced) void mixer_adjust(GtkAdjustment *adj, gpointer data); void mixer_set_mute(int stream, int left, int right); -void midi_process(gpointer data, gint source, GdkInputCondition condition) +gboolean midi_process(GIOChannel *gio, GIOCondition condition, gpointer data) { snd_seq_event_t *ev; static GtkAdjustment *adj=0; @@ -306,6 +306,7 @@ void midi_process(gpointer data, gint source, GdkInputCondition condition) snd_seq_free_event(ev); } while (snd_seq_event_input_pending(seq, 0) > 0); + return TRUE; } /* ************************************************* */ diff --git a/envy24control/midi.h b/envy24control/midi.h index f821d42..b71eafd 100644 --- a/envy24control/midi.h +++ b/envy24control/midi.h @@ -7,7 +7,7 @@ int midi_init(char *appname, int channel, int midi_enhanced); int midi_close(); void midi_maxstreams(int); int midi_controller(int c, int v); -void midi_process(gpointer data, gint source, GdkInputCondition condition); +gboolean midi_process(GIOChannel *gio, GIOCondition condition, gpointer data); int midi_button(int b, int v); #endif diff --git a/envy24control/mixer.c b/envy24control/mixer.c index f2b4e9a..46171cc 100644 --- a/envy24control/mixer.c +++ b/envy24control/mixer.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" @@ -39,7 +39,7 @@ extern int input_channels, output_channels, pcm_output_channels, spdif_channels, static int is_active(GtkWidget *widget) { - return GTK_TOGGLE_BUTTON(widget)->active ? 1 : 0; + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? 1 : 0; } void mixer_update_stream(int stream, int vol_flag, int sw_flag) @@ -181,10 +181,10 @@ void mixer_adjust(GtkAdjustment *adj, gpointer data) int stereo = is_active(mixer_stereo_toggle[stream-1]) ? 1 : 0; int vol[2] = { -1, -1 }; - vol[button] = 96 - adj->value; + vol[button] = 96 - gtk_adjustment_get_value(adj); if (stereo) { - gtk_adjustment_set_value(GTK_ADJUSTMENT(mixer_adj[stream-1][button ^ 1]), adj->value); - vol[button ^ 1] = 96 - adj->value; + gtk_adjustment_set_value(GTK_ADJUSTMENT(mixer_adj[stream-1][button ^ 1]), gtk_adjustment_get_value(adj)); + vol[button ^ 1] = 96 - gtk_adjustment_get_value(adj); } set_volume1(stream, vol[0], vol[1]); } diff --git a/envy24control/new_process.c b/envy24control/new_process.c index 7ea89a6..2168489 100644 --- a/envy24control/new_process.c +++ b/envy24control/new_process.c @@ -20,9 +20,9 @@ int new_process(char * const cmd_line[MAX_PARAM]) struct stat file_status; /* memory for storage of function pointers from the signal handling routines */ - void (*int_stat)(); - void (*quit_stat)(); - void (*usr2_stat)(); + void (*int_stat)(int); + void (*quit_stat)(int); + void (*usr2_stat)(int); /* * check command file diff --git a/envy24control/patchbay.c b/envy24control/patchbay.c index 88f697d..57ddf13 100644 --- a/envy24control/patchbay.c +++ b/envy24control/patchbay.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "envy24control.h" @@ -30,7 +30,7 @@ extern int output_channels, input_channels, pcm_output_channels, spdif_channels; static int is_active(GtkWidget *widget) { - return GTK_TOGGLE_BUTTON(widget)->active ? 1 : 0; + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ? 1 : 0; } static int get_toggle_index(int stream) diff --git a/envy24control/profiles.c b/envy24control/profiles.c index 443e475..9e5cde1 100644 --- a/envy24control/profiles.c +++ b/envy24control/profiles.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ @@ -54,9 +54,9 @@ void subst_tilde_in_filename(char * const filename) if ((pos_after_tilde = strchr(filename, '~')) != NULL) { pos_after_tilde++; - strncpy(new_filename, getenv("HOME"), MAX_FILE_NAME_LENGTH); - strncpy(new_filename + strlen(new_filename), pos_after_tilde, MAX_FILE_NAME_LENGTH - strlen(new_filename)); - new_filename[MAX_FILE_NAME_LENGTH - 1] = '\0'; + strncpy(new_filename, getenv("HOME"), sizeof(new_filename) - 1); + strncpy(new_filename + strlen(new_filename), pos_after_tilde, sizeof(new_filename) - strlen(new_filename) - 1); + new_filename[sizeof(new_filename) - 1] = '\0'; strncpy(filename, new_filename, MAX_FILE_NAME_LENGTH); } } @@ -78,7 +78,9 @@ int which_cfgfile(char ** const cfgfile) (inputFile = fopen(SYS_PROFILERC, "r")) == NULL) { res = -ENOENT; } else { - fclose(inputFile); + if (inputFile != NULL) { + fclose(inputFile); + } *cfgfile = SYS_PROFILERC; res = EXIT_SUCCESS; } @@ -94,7 +96,9 @@ int get_file_size(const char * const filename) { struct stat file_status; - strncpy(filename_without_tilde, filename, MAX_FILE_NAME_LENGTH); + if (filename_without_tilde != filename) { + strncpy(filename_without_tilde, filename, MAX_FILE_NAME_LENGTH); + } filename_without_tilde[MAX_FILE_NAME_LENGTH - 1] = '\0'; subst_tilde_in_filename(filename_without_tilde); if (stat(filename_without_tilde, &file_status) < 0) { @@ -470,7 +474,8 @@ int get_pos_name_header_from_card(const char * const buffer, const int profile_n char place_holder; int pos_card_begin, pos_card_end, pos_name_header; - pos_card_begin = get_card_begin(buffer, profile_number, card_number); + if ((pos_card_begin = get_card_begin(buffer, profile_number, card_number)) < 0) + return pos_card_begin; pos_card_end = get_card_end(buffer, profile_number, card_number); place_holder = PLACE_HOLDER_STR; strncpy(header, PROFILE_NAME_TEMPL, MAX_SEARCH_FIELD_LENGTH); @@ -522,7 +527,7 @@ int reorganize_profiles(char * const buffer, const int max_length) { int profile_number, card_number, card_number_max; int res; - int pos_profile_begin, pos_profile_end, pos_card_begin, pos_card_end, pos_name_header; + int pos_profile_begin, pos_card_begin, pos_card_end, pos_name_header; int pos_alsa_section_begin, pos_after_alsa_section; char header[MAX_SEARCH_FIELD_LENGTH]; void *buffer_copy = NULL; @@ -547,7 +552,6 @@ int reorganize_profiles(char * const buffer, const int max_length) compose_search_string(header, PROFILE_HEADER_TEMPL, profile_or_card_number_as_str, place_holder, MAX_SEARCH_FIELD_LENGTH); header[MAX_SEARCH_FIELD_LENGTH - 1] = '\0'; snprintf(buffer_copy + strlen(buffer_copy), max_length - strlen(buffer_copy), "%s\n", header); - pos_profile_end = get_profile_end(buffer, profile_number); /* search max card number in profile */ card_number_max = get_max_card_number_in_profile(buffer, profile_number); for (card_number = 0; card_number <= card_number_max; card_number++) @@ -641,9 +645,9 @@ int save_restore_alsactl_settings(char * const tmpfile, const int card_number, c void compose_tmpfile_name(char * const tmpfile, const char * const cfgfile) { - strncpy(tmpfile, cfgfile, MAX_FILE_NAME_LENGTH); + strncpy(tmpfile, cfgfile, MAX_FILE_NAME_LENGTH - 1); tmpfile[MAX_FILE_NAME_LENGTH - 1] = '\0'; - strncpy(tmpfile + strlen(tmpfile), "_alsactl_tmp", MAX_FILE_NAME_LENGTH - strlen(tmpfile)); + strncpy(tmpfile + strlen(tmpfile), "_alsactl_tmp", MAX_FILE_NAME_LENGTH - strlen(tmpfile) - 1); tmpfile[MAX_FILE_NAME_LENGTH - 1] = '\0'; } @@ -1145,13 +1149,16 @@ int save_restore(const char * const operation, const int profile_number, const i fprintf(stderr, "Cannot save settings for card '%d' in profile '%d'.\n", card_number, profile_number); return -errno; } + close(res); unlink(cfgfile); } else { + close(res); if ((res = open(cfgfile, O_RDWR | 0400000 /* O_NOFOLLOW */, FILE_CREA_MODE)) < 0) { fprintf(stderr, "Cannot open configuration file '%s' for writing.\n", cfgfile); fprintf(stderr, "Cannot save settings for card '%d' in profile '%d'.\n", card_number, profile_number); return -errno; } + close(res); } res = save_profile(profile_number, card_number, profile_name, cfgfile); } else if (!strcmp(operation, ALSACTL_OP_RESTORE)) { diff --git a/envy24control/profiles.h b/envy24control/profiles.h index 2063bff..b586291 100644 --- a/envy24control/profiles.h +++ b/envy24control/profiles.h @@ -44,7 +44,7 @@ #define MAX_PROFILE_SIZE 32768 #define MAX_SEARCH_FIELD_LENGTH 1024 #define MAX_FILE_NAME_LENGTH 1024 -#define MAX_NUM_STR_LENGTH 10 +#define MAX_NUM_STR_LENGTH 11 #define TOKEN_SEP "|" #define SEP_CHAR ' ' diff --git a/envy24control/strstr_icase_blank.c b/envy24control/strstr_icase_blank.c index 4c325cf..6b7c500 100644 --- a/envy24control/strstr_icase_blank.c +++ b/envy24control/strstr_icase_blank.c @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ @@ -48,6 +48,7 @@ int strstr_icase_blank(const char * const string1, const char * const string2) char search_string[MAX_SEARCH_FIELD_LENGTH]; char *pstr; int pos_first_non_blank; + size_t len; strncpy(search_string, string2, MAX_SEARCH_FIELD_LENGTH); search_string[MAX_SEARCH_FIELD_LENGTH - 1] = '\0'; @@ -84,7 +85,11 @@ int strstr_icase_blank(const char * const string1, const char * const string2) } } } - strncpy(search_string, cmp_line, strlen(search_string)); + len = strlen(search_string); + if (len > sizeof(search_string) - 1) + len = sizeof(search_string) - 1; + strncpy(search_string, cmp_line, len); + search_string[len] = '\0'; position = 0; while (position < strlen(string1)) diff --git a/envy24control/volume.c b/envy24control/volume.c index 4386e35..b071ad6 100644 --- a/envy24control/volume.c +++ b/envy24control/volume.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "envy24control.h" @@ -217,7 +217,7 @@ void dac_volume_adjust(GtkAdjustment *adj, gpointer data) { int idx = (int)(long)data; snd_ctl_elem_value_t *val; - int err, ival = -(int)adj->value; + int err, ival = -(int)gtk_adjustment_get_value(adj); char text[16]; snd_ctl_elem_value_alloca(&val); @@ -235,7 +235,7 @@ void adc_volume_adjust(GtkAdjustment *adj, gpointer data) { int idx = (int)(long)data; snd_ctl_elem_value_t *val; - int err, ival = -(int)adj->value; + int err, ival = -(int)gtk_adjustment_get_value(adj); char text[16]; snd_ctl_elem_value_alloca(&val); @@ -253,7 +253,7 @@ void ipga_volume_adjust(GtkAdjustment *adj, gpointer data) { int idx = (int)(long)data; snd_ctl_elem_value_t *val; - int err, ival = -(int)adj->value; + int err, ival = -(int)gtk_adjustment_get_value(adj); char text[16]; snd_ctl_elem_value_alloca(&val); diff --git a/hda-verb/ChangeLog b/hda-verb/ChangeLog new file mode 100644 index 0000000..cbecd9d --- /dev/null +++ b/hda-verb/ChangeLog @@ -0,0 +1,12 @@ +version 0.3: + - Add -l and -L option to show defined verbs and parameters + +version 0.3: + - Add a brief description about hwdep in README + - Add COPYING before someone blaming me + +version 0.2 + - public release + +version 0.1 + - embryo diff --git a/hda-verb/Makefile.am b/hda-verb/Makefile.am new file mode 100644 index 0000000..0e3278d --- /dev/null +++ b/hda-verb/Makefile.am @@ -0,0 +1,13 @@ +MYNAME = hda-verb +AUTOMAKE_OPTIONS = 1.3 foreign +bin_PROGRAMS = hda-verb +hda_verb_SOURCES = hda-verb.c +noinst_HEADERS = hda_hwdep.h + +EXTRA_DIST = gitcompile README ChangeLog + +alsa-dist: distdir + @rm -rf ../distdir/$(MYNAME) + @mkdir -p ../distdir/$(MYNAME) + @cp -RLpv $(distdir)/* ../distdir/$(MYNAME) + @rm -rf $(distdir) diff --git a/hda-verb/README b/hda-verb/README new file mode 100644 index 0000000..2ec65b5 --- /dev/null +++ b/hda-verb/README @@ -0,0 +1,36 @@ +HDA-VERB -- Send a HD-audio command + +hda-verb is a small program to send HD-audio commands to the given +ALSA hwdep device on the hd-audio interface. + +First off, build HD-audio driver with hwdep support. For the kernel +config, set CONFIG_SND_HDA_HWDEP=y. When you build ALSA drivers from +alsa-driver tarball, usually this is set automatically. + +Once snd-hda-intel driver is built with the hwdep support, you should +have a hwdep device such as /dev/snd/hwC0D0. + +The program takes four arguments, the hwdep device name, the widget NID, +the verb and the parameter. For example, + + % hda-verb /dev/snd/hwC0D0 0x12 0x701 2 + +The verb argument can be a string like "PARAMETERS". Also the +parameter argument can be a string like "VENDOR_ID" as well. + + % hda-verb /dev/snd/hwC0D0 0x0 PARAMETERS VENDOR_ID + +The string is case insensitive. Also, it doesn't have to be the full +string but only has to be unique. E.g. "par" is enough to mean +"PARAMETER", and "set_a" is enough as "SET_AMP_GAIN_MUTE". + + % hda-verb /dev/snd/hwC0D0 2 set_a 0xb080 + +The program executs the given verb, shows the result and quits. +Usually you need to be root to run this command. + + +*WARNING* +Use this program carefully. Sending an invalid verb may screw up the +codec communication, which requires either a reboot or reloading of +the sound driver eventually. diff --git a/hda-verb/configure.ac b/hda-verb/configure.ac new file mode 100644 index 0000000..663efbd --- /dev/null +++ b/hda-verb/configure.ac @@ -0,0 +1,7 @@ +AC_INIT(hda-verb, 0.4) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC +AC_OUTPUT(Makefile) diff --git a/hda-verb/gitcompile b/hda-verb/gitcompile new file mode 100755 index 0000000..58328bd --- /dev/null +++ b/hda-verb/gitcompile @@ -0,0 +1,13 @@ +#!/bin/bash + +aclocal $ACLOCAL_FLAGS || exit 1 +automake --foreign --add-missing || exit 1 +autoconf || exit 1 +export CFLAGS='-O2 -Wall -pipe -g' +echo "CFLAGS=$CFLAGS" +echo "./configure $@" +./configure $@ || exit 1 +unset CFLAGS +if [ -z "$GITCOMPILE_NO_MAKE" ]; then + make || exit 1 +fi diff --git a/hda-verb/hda-verb.c b/hda-verb/hda-verb.c new file mode 100644 index 0000000..95a935a --- /dev/null +++ b/hda-verb/hda-verb.c @@ -0,0 +1,346 @@ +/* + * Accessing HD-audio verbs via hwdep interface + * Version 0.3 + * + * Copyright (c) 2008 Takashi Iwai + * + * Licensed under GPL v2 or later. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +#include "hda_hwdep.h" + +#define AC_VERB_GET_STREAM_FORMAT 0x0a00 +#define AC_VERB_GET_AMP_GAIN_MUTE 0x0b00 +#define AC_VERB_GET_PROC_COEF 0x0c00 +#define AC_VERB_GET_COEF_INDEX 0x0d00 +#define AC_VERB_PARAMETERS 0x0f00 +#define AC_VERB_GET_CONNECT_SEL 0x0f01 +#define AC_VERB_GET_CONNECT_LIST 0x0f02 +#define AC_VERB_GET_PROC_STATE 0x0f03 +#define AC_VERB_GET_SDI_SELECT 0x0f04 +#define AC_VERB_GET_POWER_STATE 0x0f05 +#define AC_VERB_GET_CONV 0x0f06 +#define AC_VERB_GET_PIN_WIDGET_CONTROL 0x0f07 +#define AC_VERB_GET_UNSOLICITED_RESPONSE 0x0f08 +#define AC_VERB_GET_PIN_SENSE 0x0f09 +#define AC_VERB_GET_BEEP_CONTROL 0x0f0a +#define AC_VERB_GET_EAPD_BTLENABLE 0x0f0c +#define AC_VERB_GET_DIGI_CONVERT_1 0x0f0d +#define AC_VERB_GET_DIGI_CONVERT_2 0x0f0e +#define AC_VERB_GET_VOLUME_KNOB_CONTROL 0x0f0f +#define AC_VERB_GET_GPIO_DATA 0x0f15 +#define AC_VERB_GET_GPIO_MASK 0x0f16 +#define AC_VERB_GET_GPIO_DIRECTION 0x0f17 +#define AC_VERB_GET_GPIO_WAKE_MASK 0x0f18 +#define AC_VERB_GET_GPIO_UNSOLICITED_RSP_MASK 0x0f19 +#define AC_VERB_GET_GPIO_STICKY_MASK 0x0f1a +#define AC_VERB_GET_CONFIG_DEFAULT 0x0f1c +#define AC_VERB_GET_SUBSYSTEM_ID 0x0f20 + +#define AC_VERB_SET_STREAM_FORMAT 0x200 +#define AC_VERB_SET_AMP_GAIN_MUTE 0x300 +#define AC_VERB_SET_PROC_COEF 0x400 +#define AC_VERB_SET_COEF_INDEX 0x500 +#define AC_VERB_SET_CONNECT_SEL 0x701 +#define AC_VERB_SET_PROC_STATE 0x703 +#define AC_VERB_SET_SDI_SELECT 0x704 +#define AC_VERB_SET_POWER_STATE 0x705 +#define AC_VERB_SET_CHANNEL_STREAMID 0x706 +#define AC_VERB_SET_PIN_WIDGET_CONTROL 0x707 +#define AC_VERB_SET_UNSOLICITED_ENABLE 0x708 +#define AC_VERB_SET_PIN_SENSE 0x709 +#define AC_VERB_SET_BEEP_CONTROL 0x70a +#define AC_VERB_SET_EAPD_BTLENABLE 0x70c +#define AC_VERB_SET_DIGI_CONVERT_1 0x70d +#define AC_VERB_SET_DIGI_CONVERT_2 0x70e +#define AC_VERB_SET_VOLUME_KNOB_CONTROL 0x70f +#define AC_VERB_SET_GPIO_DATA 0x715 +#define AC_VERB_SET_GPIO_MASK 0x716 +#define AC_VERB_SET_GPIO_DIRECTION 0x717 +#define AC_VERB_SET_GPIO_WAKE_MASK 0x718 +#define AC_VERB_SET_GPIO_UNSOLICITED_RSP_MASK 0x719 +#define AC_VERB_SET_GPIO_STICKY_MASK 0x71a +#define AC_VERB_SET_CONFIG_DEFAULT_BYTES_0 0x71c +#define AC_VERB_SET_CONFIG_DEFAULT_BYTES_1 0x71d +#define AC_VERB_SET_CONFIG_DEFAULT_BYTES_2 0x71e +#define AC_VERB_SET_CONFIG_DEFAULT_BYTES_3 0x71f +#define AC_VERB_SET_CODEC_RESET 0x7ff + +#define AC_PAR_VENDOR_ID 0x00 +#define AC_PAR_SUBSYSTEM_ID 0x01 +#define AC_PAR_REV_ID 0x02 +#define AC_PAR_NODE_COUNT 0x04 +#define AC_PAR_FUNCTION_TYPE 0x05 +#define AC_PAR_AUDIO_FG_CAP 0x08 +#define AC_PAR_AUDIO_WIDGET_CAP 0x09 +#define AC_PAR_PCM 0x0a +#define AC_PAR_STREAM 0x0b +#define AC_PAR_PIN_CAP 0x0c +#define AC_PAR_AMP_IN_CAP 0x0d +#define AC_PAR_CONNLIST_LEN 0x0e +#define AC_PAR_POWER_STATE 0x0f +#define AC_PAR_PROC_CAP 0x10 +#define AC_PAR_GPIO_CAP 0x11 +#define AC_PAR_AMP_OUT_CAP 0x12 +#define AC_PAR_VOL_KNB_CAP 0x13 + +/* + */ +#define VERBSTR(x) { .val = AC_VERB_##x, .str = #x } +#define PARMSTR(x) { .val = AC_PAR_##x, .str = #x } + +struct strtbl { + int val; + const char *str; +}; + +static struct strtbl hda_verbs[] = { + VERBSTR(GET_STREAM_FORMAT), + VERBSTR(GET_AMP_GAIN_MUTE), + VERBSTR(GET_PROC_COEF), + VERBSTR(GET_COEF_INDEX), + VERBSTR(PARAMETERS), + VERBSTR(GET_CONNECT_SEL), + VERBSTR(GET_CONNECT_LIST), + VERBSTR(GET_PROC_STATE), + VERBSTR(GET_SDI_SELECT), + VERBSTR(GET_POWER_STATE), + VERBSTR(GET_CONV), + VERBSTR(GET_PIN_WIDGET_CONTROL), + VERBSTR(GET_UNSOLICITED_RESPONSE), + VERBSTR(GET_PIN_SENSE), + VERBSTR(GET_BEEP_CONTROL), + VERBSTR(GET_EAPD_BTLENABLE), + VERBSTR(GET_DIGI_CONVERT_1), + VERBSTR(GET_DIGI_CONVERT_2), + VERBSTR(GET_VOLUME_KNOB_CONTROL), + VERBSTR(GET_GPIO_DATA), + VERBSTR(GET_GPIO_MASK), + VERBSTR(GET_GPIO_DIRECTION), + VERBSTR(GET_GPIO_WAKE_MASK), + VERBSTR(GET_GPIO_UNSOLICITED_RSP_MASK), + VERBSTR(GET_GPIO_STICKY_MASK), + VERBSTR(GET_CONFIG_DEFAULT), + VERBSTR(GET_SUBSYSTEM_ID), + + VERBSTR(SET_STREAM_FORMAT), + VERBSTR(SET_AMP_GAIN_MUTE), + VERBSTR(SET_PROC_COEF), + VERBSTR(SET_COEF_INDEX), + VERBSTR(SET_CONNECT_SEL), + VERBSTR(SET_PROC_STATE), + VERBSTR(SET_SDI_SELECT), + VERBSTR(SET_POWER_STATE), + VERBSTR(SET_CHANNEL_STREAMID), + VERBSTR(SET_PIN_WIDGET_CONTROL), + VERBSTR(SET_UNSOLICITED_ENABLE), + VERBSTR(SET_PIN_SENSE), + VERBSTR(SET_BEEP_CONTROL), + VERBSTR(SET_EAPD_BTLENABLE), + VERBSTR(SET_DIGI_CONVERT_1), + VERBSTR(SET_DIGI_CONVERT_2), + VERBSTR(SET_VOLUME_KNOB_CONTROL), + VERBSTR(SET_GPIO_DATA), + VERBSTR(SET_GPIO_MASK), + VERBSTR(SET_GPIO_DIRECTION), + VERBSTR(SET_GPIO_WAKE_MASK), + VERBSTR(SET_GPIO_UNSOLICITED_RSP_MASK), + VERBSTR(SET_GPIO_STICKY_MASK), + VERBSTR(SET_CONFIG_DEFAULT_BYTES_0), + VERBSTR(SET_CONFIG_DEFAULT_BYTES_1), + VERBSTR(SET_CONFIG_DEFAULT_BYTES_2), + VERBSTR(SET_CONFIG_DEFAULT_BYTES_3), + VERBSTR(SET_CODEC_RESET), + { }, /* end */ +}; + +static struct strtbl hda_params[] = { + PARMSTR(VENDOR_ID), + PARMSTR(SUBSYSTEM_ID), + PARMSTR(REV_ID), + PARMSTR(NODE_COUNT), + PARMSTR(FUNCTION_TYPE), + PARMSTR(AUDIO_FG_CAP), + PARMSTR(AUDIO_WIDGET_CAP), + PARMSTR(PCM), + PARMSTR(STREAM), + PARMSTR(PIN_CAP), + PARMSTR(AMP_IN_CAP), + PARMSTR(CONNLIST_LEN), + PARMSTR(POWER_STATE), + PARMSTR(PROC_CAP), + PARMSTR(GPIO_CAP), + PARMSTR(AMP_OUT_CAP), + PARMSTR(VOL_KNB_CAP), + { }, /* end */ +}; + +static void list_keys(struct strtbl *tbl, int one_per_line) +{ + int c = 0; + for (; tbl->str; tbl++) { + int len = strlen(tbl->str) + 2; + if (!one_per_line && c + len >= 80) { + fprintf(stderr, "\n"); + c = 0; + } + if (one_per_line) + fprintf(stderr, " %s\n", tbl->str); + else if (!c) + fprintf(stderr, " %s", tbl->str); + else + fprintf(stderr, ", %s", tbl->str); + c += 2 + len; + } + if (!one_per_line) + fprintf(stderr, "\n"); +} + +/* look up a value from the given string table */ +static int lookup_str(struct strtbl *tbl, const char *str) +{ + struct strtbl *p, *found; + int len = strlen(str); + + found = NULL; + for (p = tbl; p->str; p++) { + if (!strncmp(str, p->str, len)) { + if (found) { + fprintf(stderr, "No unique key '%s'\n", str); + return -1; + } + found = p; + } + } + if (!found) { + fprintf(stderr, "No key matching with '%s'\n", str); + return -1; + } + return found->val; +} + +/* convert a string to upper letters */ +static void strtoupper(char *str) +{ + for (; *str; str++) + *str = toupper(*str); +} + +static void usage(void) +{ + fprintf(stderr, "usage: hda-verb [option] hwdep-device nid verb param\n"); + fprintf(stderr, " -l List known verbs and parameters\n"); + fprintf(stderr, " -L List known verbs and parameters (one per line)\n"); +} + +static void list_verbs(int one_per_line) +{ + fprintf(stderr, "known verbs:\n"); + list_keys(hda_verbs, one_per_line); + fprintf(stderr, "known parameters:\n"); + list_keys(hda_params, one_per_line); +} + +int main(int argc, char **argv) +{ + int version; + int fd; + int nid, verb, param; + int c; + struct hda_verb_ioctl val; + char **p; + + while ((c = getopt(argc, argv, "lL")) >= 0) { + switch (c) { + case 'l': + list_verbs(0); + return 0; + case 'L': + list_verbs(1); + return 0; + default: + usage(); + return 1; + } + } + + if (argc - optind < 4) { + usage(); + return 1; + } + p = argv + optind; + fd = open(*p, O_RDWR); + if (fd < 0) { + perror("open"); + return 1; + } + version = 0; + if (ioctl(fd, HDA_IOCTL_PVERSION, &version) < 0) { + perror("ioctl(PVERSION)"); + fprintf(stderr, "Looks like an invalid hwdep device...\n"); + return 1; + } + if (version < HDA_HWDEP_VERSION) { + fprintf(stderr, "Invalid version number 0x%x\n", version); + fprintf(stderr, "Looks like an invalid hwdep device...\n"); + return 1; + } + + p++; + nid = strtol(*p, NULL, 0); + if (nid < 0 || nid > 0xff) { + fprintf(stderr, "invalid nid %s\n", *p); + return 1; + } + + p++; + if (!isdigit(**p)) { + strtoupper(*p); + verb = lookup_str(hda_verbs, *p); + if (verb < 0) + return 1; + } else { + verb = strtol(*p, NULL, 0); + if (verb < 0 || verb > 0xfff) { + fprintf(stderr, "invalid verb %s\n", *p); + return 1; + } + } + p++; + if (!isdigit(**p)) { + strtoupper(*p); + param = lookup_str(hda_params, *p); + if (param < 0) + return 1; + } else { + param = strtol(*p, NULL, 0); + if (param < 0 || param > 0xffff) { + fprintf(stderr, "invalid param %s\n", *p); + return 1; + } + } + fprintf(stderr, "nid = 0x%x, verb = 0x%x, param = 0x%x\n", + nid, verb, param); + + val.verb = HDA_VERB(nid, verb, param); + if (ioctl(fd, HDA_IOCTL_VERB_WRITE, &val) < 0) + perror("ioctl"); + printf("value = 0x%x\n", val.res); + close(fd); + return 0; +} diff --git a/hda-verb/hda_hwdep.h b/hda-verb/hda_hwdep.h new file mode 100644 index 0000000..c603724 --- /dev/null +++ b/hda-verb/hda_hwdep.h @@ -0,0 +1,44 @@ +/* + * HWDEP Interface for HD-audio codec + * + * Copyright (c) 2007 Takashi Iwai + * + * This driver is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This driver is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __SOUND_HDA_HWDEP_H +#define __SOUND_HDA_HWDEP_H + +#define HDA_HWDEP_VERSION ((1 << 16) | (0 << 8) | (0 << 0)) /* 1.0.0 */ + +/* verb */ +#define HDA_REG_NID_SHIFT 24 +#define HDA_REG_VERB_SHIFT 8 +#define HDA_REG_VAL_SHIFT 0 +#define HDA_VERB(nid,verb,param) ((nid)<<24 | (verb)<<8 | (param)) + +struct hda_verb_ioctl { + u32 verb; /* HDA_VERB() */ + u32 res; /* response */ +}; + +/* + * ioctls + */ +#define HDA_IOCTL_PVERSION _IOR('H', 0x10, int) +#define HDA_IOCTL_VERB_WRITE _IOWR('H', 0x11, struct hda_verb_ioctl) +#define HDA_IOCTL_GET_WCAP _IOWR('H', 0x12, struct hda_verb_ioctl) + +#endif diff --git a/hdajackretask/AUTHORS b/hdajackretask/AUTHORS new file mode 100644 index 0000000..9f136d8 --- /dev/null +++ b/hdajackretask/AUTHORS @@ -0,0 +1 @@ +David Henningsson diff --git a/hdajackretask/ChangeLog b/hdajackretask/ChangeLog new file mode 100644 index 0000000..70c7475 --- /dev/null +++ b/hdajackretask/ChangeLog @@ -0,0 +1 @@ +For news and changelog, refer to git repository history. This file is only present because autotools requires it. diff --git a/hdajackretask/Makefile.am b/hdajackretask/Makefile.am new file mode 100644 index 0000000..a9f0a67 --- /dev/null +++ b/hdajackretask/Makefile.am @@ -0,0 +1,24 @@ +SUBDIRS = desktop +EXTRA_DIST = gitcompile README +AM_CFLAGS = @GTK3_CFLAGS@ -Wno-deprecated-declarations +bin_PROGRAMS = hdajackretask +man_MANS = +hdajackretask_SOURCES = main-gtk.c sysfs-pin-configs.c apply-changes.c +hdajackretask_LDADD = @GTK3_LIBS@ + +noinst_HEADERS = apply-changes.h sysfs-pin-configs.h + +BUILT_SOURCES = README.generated.h +nodist_hdajackretask_SOURCES = README.generated.h +CLEANFILES = README.generated.h + +README.generated.h: + sed 's/\\/\\\\/g;s/"/\\"/g;s/^/"/;s/$$/\\n"/;' README >$@ + +AUTOMAKE_OPTIONS = foreign + +alsa-dist: distdir + @rm -rf ../distdir/hdajackretask + @mkdir -p ../distdir/hdajackretask + @cp -RLpv $(distdir)/* ../distdir/hdajackretask + @rm -rf $(distdir) diff --git a/hdajackretask/NEWS b/hdajackretask/NEWS new file mode 100644 index 0000000..70c7475 --- /dev/null +++ b/hdajackretask/NEWS @@ -0,0 +1 @@ +For news and changelog, refer to git repository history. This file is only present because autotools requires it. diff --git a/hdajackretask/README b/hdajackretask/README new file mode 100644 index 0000000..bd6244b --- /dev/null +++ b/hdajackretask/README @@ -0,0 +1,54 @@ +Documentation for hdajackretask +=============================== + +Most HDA Intel soundcards are to some degree retaskable, i e can be used for more than one thing. This tool is a GUI to make it easy to retask your jacks - e g, turn your Mic jack into an extra Headphone, or why not make them both line outs and connect them to your surround receiver? + +Quickstart +========== + +Start the application "hdajackretask" from the command line. +Select a codec in the top bar; some people have only one - if you have more than one, one is the "main" one, and the rest are probably HDMI codecs. + +All jacks (and other inputs/outputs) are shown under "Pin configuration". To override one of your jacks, click the "Override" checkbox for that pin and select the desired function. +Note: If you select a "Line out (back)" override, you should also have a "Line out (front)" override. A "Line out (Center/LFE)" override will only work with the previous two overrides, and so on. + +You can try out your new configuration by clicking "Apply now". To make your new configuration the boot up default, click "Install boot override". +Doing any of these requires root privileges, so you will likely be asked for your password. + +Quickend +======== + +Did you screw up? Click the "Remove boot override" button, and once the process has completed, shut down your computer, wait a little while and turn it on again. You should now be back where you started. + +Did it work? +============ + +If it did, be happy, share your joy, do something nice! + +If it didn't, here are some things to try: + + * Go into alsamixer and see if there are new volume controls, and see if they are unmuted and set to a reasonable value. + + * Sometimes the driver does not shut off unconnected pins (if they're unconnected, why worry?). You might be able to fix this by turning your computer completely off for a little while. + + * See the "model=auto" option below + +If this does not help, chances are high you're running into either a driver or a hardware limitation. You might run into driver bugs (maybe nobody has ever tested four headphones before!). If you do, feel free to report them on the alsa-devel mailinglist: however, due to lack of manpower, chances are this will be dealt with at a very low priority (having sound working out of the box for a standard configuration, is more important than supporting strange configurations). However, if you are a kernel hacker and come up with a patch that solves your problem without screwing up anything else, chances are pretty high it will be merged. + +If you suspect the problem is with this GUI application rather than the kernel driver, feel free to write me an email (and if you like, include a patch!). If so, write to diwic@ubuntu.com. + +Options +======= + + * Show unconnected pins +Your BIOS is responsible for setting up what pins on the codec that are actually connected to something and which ones are not. Sometimes BIOS is buggy, and will not show all your jacks. If you have a jack your BIOS says you haven't, you can try enabling random pins and see if it works. + + * Set Model=auto +Some codecs, especially older ones and on kernels 3.8 and below, are hard-coded to use a specific model, and thus will not care about your overrides. In many cases and with a reasonably new kernel, the auto parser now works well for these codecs as well. You can force the auto parser to be used by checking this box. In some cases, though, the explicit model is there for a reason, if so, you're stuck. + + * Advanced override +This is for the experts only. It makes you select each configuration field individually, instead of just a few predefined values that make sense. Note that most combinations here are invalid in one way or the other, so you should probably not mess with this unless you have read and understood the "Configuration Default" section of the HD Audio specification. (Which, at the time of this writing, is available here: +http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/high-definition-audio-specification.pdf ) + + * Parser hints +This enables you to send special "hints" to the driver that causes parsing to behave differently. Leave them at the "default" setting unless you have read the driver documentation. ( Which, at the time of this writing, is available here: https://www.kernel.org/doc/Documentation/sound/hd-audio/notes.rst - see the "Hint strings" section. ) diff --git a/hdajackretask/apply-changes.c b/hdajackretask/apply-changes.c new file mode 100644 index 0000000..381ccf2 --- /dev/null +++ b/hdajackretask/apply-changes.c @@ -0,0 +1,383 @@ +/* Copyright 2011 David Henningsson, Canonical Ltd. + License: GPLv2+ +*/ + +#include +#include +#include +#include +#include +#include + +#include "apply-changes.h" + +static gchar* tempdir = NULL; +static gchar* scriptfile = NULL; +static gchar* errorfile = NULL; + +struct soundserver { + enum { + PULSEAUDIO, + PIPEWIRE + } type; + gboolean was_killed; + gchar *user; +}; + +static GQuark quark() +{ + return g_quark_from_static_string("hda-jack-retask-error"); +} + +static gboolean ensure_tempdir(GError** err) +{ + if (!tempdir) { + tempdir = g_dir_make_tmp("hda-jack-retask-XXXXXX", err); + if (!tempdir) + return FALSE; + scriptfile = g_strdup_printf("%s/script.sh", tempdir); + errorfile = g_strdup_printf("%s/errors.log", tempdir); + } + g_unlink(errorfile); /* Ignore file does not exist error */ + return TRUE; +} + +static gboolean create_reconfig_script(pin_configs_t* pins, int entries, int card, int device, + const char* model, const char* hints, GError** err) +{ + gchar* hwdir = g_strdup_printf("/sys/class/sound/hwC%dD%d", card, device); + gchar destbuf[150*40] = "#!/bin/sh\n"; + int bufleft = sizeof(destbuf) - strlen(destbuf); + gboolean ok = FALSE; + gchar* s = destbuf + strlen(destbuf); + + if (!ensure_tempdir(err)) + goto cleanup; + + if (model) { + int l = g_snprintf(s, bufleft, "echo \"%s\" | tee %s/modelname 2>>%s\n", + model, hwdir, errorfile); + bufleft-=l; + s+=l; + } + + if (hints) { + int l = g_snprintf(s, bufleft, "echo \"%s\" | tee %s/hints 2>>%s\n", + hints, hwdir, errorfile); + bufleft-=l; + s+=l; + } + + while (entries) { + int l = g_snprintf(s, bufleft, "echo \"0x%02x 0x%08x\" | tee %s/user_pin_configs 2>>%s\n", + pins->nid, (unsigned int) actual_pin_config(pins), hwdir, errorfile); + bufleft-=l; + s+=l; + pins++; + entries--; + } + + if (bufleft < g_snprintf(s, bufleft, "echo 1 | tee %s/reconfig 2>>%s", hwdir, errorfile)) { + g_set_error(err, quark(), 0, "Bug in %s:%d!", __FILE__, __LINE__); + goto cleanup; + } + + if (!g_file_set_contents(scriptfile, destbuf, -1, err)) + goto cleanup; + + ok = TRUE; +cleanup: + g_free(hwdir); + return ok; +} + + +//#define SUDO_COMMAND "gksudo --description \"Jack retasking\"" +#define SUDO_COMMAND "pkexec" + +gboolean run_sudo_script(const gchar* script_name, GError** err) +{ + gchar* errfilecontents = NULL; + gchar* cmdline = g_strdup_printf("%s %s", SUDO_COMMAND, script_name); + int exit_status; + gsize errlen; + gboolean ok; + + g_chmod(script_name, 0755); + g_spawn_command_line_sync(cmdline, NULL, NULL, &exit_status, NULL); + if (errorfile && g_file_get_contents(errorfile, &errfilecontents, &errlen, NULL) && errlen) { + g_set_error(err, quark(), 0, "%s", errfilecontents); + ok = FALSE; + } + else ok = TRUE; + + g_free(errfilecontents); + g_free(cmdline); + return ok; +} + +static gchar* get_pulseaudio_client_conf() +{ + /* Reference: See src/pulsecore/core-util.c in pulseaudio */ + gchar* fname; + gchar* dir = g_strdup_printf("%s/.pulse", g_get_home_dir()); + if (access(dir, F_OK) < 0) { + const gchar* xch = g_getenv("XDG_CONFIG_HOME"); + g_free(dir); + if (xch) + dir = g_strdup_printf("%s/pulse", xch); + else + dir = g_strdup_printf("%s/.config/pulse", g_get_home_dir()); + } + fname = g_strdup_printf("%s/client.conf", dir); + g_free(dir); + return fname; +} + +static gboolean call_systemctl(gchar* user, gchar* operation, gchar *unit, GError **err) +{ + gchar* s; + gboolean ok; + + if (getuid() == 0) { + // special case for root + // XDG_RUNTIME_DIR setup seems to be mandatory for Fedora, may differ for other distros + s = g_strdup_printf("runuser -l %s -c 'XDG_RUNTIME_DIR=/var/run/user/$(id -u) systemctl --user %s %s'", user, operation, unit); + } else { + s = g_strdup_printf("systemctl --user %s %s", operation, unit); + } + ok = g_spawn_command_line_sync(s, NULL, NULL, NULL, err); + g_free(s); + return ok; +} + +static gboolean kill_soundserver(struct soundserver* state, int card, GError** err) +{ + gchar* fuser = NULL, *fuser2 = NULL; + gchar* s = NULL; + gchar* clientconf = NULL; + gboolean ok; + char *p; + state->type = PULSEAUDIO; + state->was_killed = FALSE; + state->user = NULL; + /* Is PA having a lock on the sound card? */ + s = g_strdup_printf("fuser -v /dev/snd/controlC%d", card); + /* Due to some bug in fuser, stdout and stderr output is unclear. Better check both. */ + if (!(ok = g_spawn_command_line_sync(s, &fuser, &fuser2, NULL, err))) + goto cleanup; + if (strstr(fuser, "pulseaudio") != NULL || strstr(fuser2, "pulseaudio") != NULL) { + clientconf = get_pulseaudio_client_conf(); + if (!(ok = !g_file_test(clientconf, G_FILE_TEST_EXISTS))) { + g_set_error(err, quark(), 0, "Cannot block PulseAudio from respawning:\n" + "Please either remove '%s' or kill PulseAudio manually.", clientconf); + goto cleanup; + } + + if (!(ok = g_file_set_contents(clientconf, "autospawn=no\n", -1, err))) + goto cleanup; + state->was_killed = TRUE; + ok = g_spawn_command_line_sync("pulseaudio -k", NULL, NULL, NULL, err); + } else if ((p = strstr(fuser, "wireplumber")) != NULL || (p = strstr(fuser2, "wireplumber")) != NULL) { + *p = '\0'; + while (p != fuser && p != fuser2 && *p != '\n') + p--; + if (*p == '\n') + p++; + + GRegex *regex; + GMatchInfo *match_info; + + regex = g_regex_new (" ([a-zA-Z0-9_-]+) ", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL); + g_regex_match (regex, p, 0, &match_info); + if (g_match_info_matches (match_info)) + state->user = g_match_info_fetch (match_info, 1); + g_match_info_free (match_info); + g_regex_unref (regex); + + state->type = PIPEWIRE; + ok = call_systemctl(state->user, "stop", "wireplumber.service", err); + state->was_killed = ok; + } else { + // Sound server not locking the sound card + } + +cleanup: + g_free(clientconf); + g_free(fuser); + g_free(fuser2); + g_free(s); + return ok; +} + +static gboolean restore_soundserver(struct soundserver* state, GError** err) +{ + gboolean ok = FALSE; + gchar* clientconf; + + switch (state->type) { + case PULSEAUDIO: + clientconf = get_pulseaudio_client_conf(); + if (state->was_killed && g_unlink(clientconf) != 0) { + g_set_error(err, quark(), 0, "%s", g_strerror(errno)); + g_free(clientconf); + goto cleanup; + } + g_free(clientconf); + ok = TRUE; + break; + case PIPEWIRE: + if (state->was_killed) + ok = call_systemctl(state->user, "start", "wireplumber.service", err); + else + ok = TRUE; + break; + } + +cleanup: + g_free(state->user); + state->user = NULL; + return ok; +} + +gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int device, + const char* model, const char* hints, GError** err) +{ + gboolean result = FALSE; +// gchar* script_name = NULL; + struct soundserver state = { 0 }; + /* Check for users of the sound card */ + /* Kill pulseaudio if necessary (and possible) */ + if (!kill_soundserver(&state, card, err)) + goto cleanup; + /* Create script */ + if (!create_reconfig_script(pins, entries, card, device, model, hints, err)) + goto cleanup; + /* Run script as root */ + if (!run_sudo_script(scriptfile, err)) + goto cleanup; + result = TRUE; +cleanup: + if (!restore_soundserver(&state, result ? err : NULL)) { + result = FALSE; + } +// g_free(script_name); + return result; +} + +static gboolean create_firmware_file(pin_configs_t* pins, int entries, int card, int device, + const char* model, const char* hints, GError** err) +{ + gboolean ok; + gchar destbuf[40*40+40*24] = ""; + gchar* s = destbuf; + gchar* filename = g_strdup_printf("%s/hda-jack-retask.fw", tempdir); + unsigned int address, codec_vendorid, codec_ssid; + int bufleft = sizeof(destbuf); + int l; + + get_codec_header(card, device, &address, &codec_vendorid, &codec_ssid); + l = g_snprintf(s, bufleft, "[codec]\n0x%08x 0x%08x %u\n\n[pincfg]\n", codec_vendorid, codec_ssid, address); + bufleft -= l; + s += l; + + while (entries) { + l = g_snprintf(s, bufleft, "0x%02x 0x%08x\n", pins->nid, (unsigned int) actual_pin_config(pins)); + bufleft -= l; + s += l; + pins++; + entries--; + } + + if (model) { + int l = g_snprintf(s, bufleft, "\n[model]\n%s\n", model); + bufleft-=l; + s+=l; + } + + if (hints) { + int l = g_snprintf(s, bufleft, "\n[hints]\n%s\n", hints); + bufleft-=l; + s+=l; + } + + ok = g_file_set_contents(filename, destbuf, -1, err); + g_free(filename); + return ok; +} + + +static const gchar* remove_script = +"#!/bin/sh\n" +"rm /etc/modprobe.d/hda-jack-retask.conf 2>>%s\n" +"rm /lib/firmware/hda-jack-retask.fw 2>>%s\n"; + +static const gchar* retask_conf = +"# This file was added by the program 'hda-jack-retask'.\n" +"# If you want to revert the changes made by this program, you can simply erase this file and reboot your computer.\n" +"options snd-hda-intel patch=hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw\n"; + +static const gchar* install_script = +"#!/bin/sh\n" +"mv %s/hda-jack-retask.fw /lib/firmware/hda-jack-retask.fw\n 2>>%s\n" +"mv %s/hda-jack-retask.conf /etc/modprobe.d/hda-jack-retask.conf 2>>%s\n"; + +gboolean apply_changes_boot(pin_configs_t* pins, int entries, int card, int device, + const char* model, const char* hints, GError** err) +{ + gchar *s; + + if (!ensure_tempdir(err)) + return FALSE; + + if (!create_firmware_file(pins, entries, card, device, model, hints, err)) + return FALSE; + + /* Create hda-jack-retask.conf */ + s = g_strdup_printf("%s/hda-jack-retask.conf", tempdir); + if (!g_file_set_contents(s, retask_conf, -1, err)) { + g_free(s); + return FALSE; + } + g_free(s); + + /* Create install script */ + s = g_strdup_printf(install_script, tempdir, errorfile, tempdir, errorfile); + if (!g_file_set_contents(scriptfile, s, -1, err)) { + g_free(s); + return FALSE; + } + g_free(s); + + /* Run script as root */ + if (!run_sudo_script(scriptfile, err)) + return FALSE; + return TRUE; +} + +gboolean reset_changes_boot(GError** err) +{ + gchar *s; + + if ((g_file_test("/etc/modprobe.d/hda-jack-retask.conf", G_FILE_TEST_EXISTS) == 0) && + (g_file_test("/lib/firmware/hda-jack-retask.fw", G_FILE_TEST_EXISTS) == 0)) + { + g_set_error(err, quark(), 0, "No boot override is currently installed, nothing to remove."); + return FALSE; + } + + if (!ensure_tempdir(err)) + return FALSE; + s = g_strdup_printf(remove_script, errorfile, errorfile); + if (!g_file_set_contents(scriptfile, s, -1, err)) { + g_free(s); + return FALSE; + } + g_free(s); + + /* Run script as root */ + if (!run_sudo_script(scriptfile, err)) + return FALSE; + return TRUE; +} + diff --git a/hdajackretask/apply-changes.h b/hdajackretask/apply-changes.h new file mode 100644 index 0000000..e431a0d --- /dev/null +++ b/hdajackretask/apply-changes.h @@ -0,0 +1,15 @@ +#ifndef __APPLY_CHANGES_H__ +#define __APPLY_CHANGES_H__ + +#include "sysfs-pin-configs.h" +#include + +gboolean apply_changes_reconfig(pin_configs_t* pins, int entries, int card, int device, + const char* model, const char* hints, GError** err); + +gboolean apply_changes_boot(pin_configs_t* pins, int entries, int card, int device, + const char* model, const char* hints, GError** err); +gboolean reset_changes_boot(GError ** err); + +#endif + diff --git a/hdajackretask/configure.ac b/hdajackretask/configure.ac new file mode 100644 index 0000000..f836306 --- /dev/null +++ b/hdajackretask/configure.ac @@ -0,0 +1,11 @@ +AC_INIT([hdajackretask], [0.20120413]) +AC_CONFIG_SRCDIR([main-gtk.c]) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC + +PKG_CHECK_MODULES(GTK3, gtk+-3.0) + +AC_OUTPUT(Makefile desktop/Makefile) diff --git a/hdajackretask/desktop/Makefile.am b/hdajackretask/desktop/Makefile.am new file mode 100644 index 0000000..263d892 --- /dev/null +++ b/hdajackretask/desktop/Makefile.am @@ -0,0 +1,36 @@ +APPNAME = hdajackretask + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png \ + hicolor_apps_128x128_$(APPNAME).png \ + hicolor_apps_256x256_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/hdajackretask/desktop/hdajackretask.desktop b/hdajackretask/desktop/hdajackretask.desktop new file mode 100644 index 0000000..f45ba06 --- /dev/null +++ b/hdajackretask/desktop/hdajackretask.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=HDAJackRetask +GenericName=Retask the audio jacks for the HDA sound driver +Exec=hdajackretask +Terminal=false +Type=Application +Categories=AudioVideo; +Version=0.9.4 diff --git a/hdajackretask/desktop/hicolor_apps_128x128_hdajackretask.png b/hdajackretask/desktop/hicolor_apps_128x128_hdajackretask.png new file mode 100644 index 0000000..b95d433 Binary files /dev/null and b/hdajackretask/desktop/hicolor_apps_128x128_hdajackretask.png differ diff --git a/hdajackretask/desktop/hicolor_apps_256x256_hdajackretask.png b/hdajackretask/desktop/hicolor_apps_256x256_hdajackretask.png new file mode 100644 index 0000000..686215f Binary files /dev/null and b/hdajackretask/desktop/hicolor_apps_256x256_hdajackretask.png differ diff --git a/hdajackretask/desktop/hicolor_apps_48x48_hdajackretask.png b/hdajackretask/desktop/hicolor_apps_48x48_hdajackretask.png new file mode 100644 index 0000000..875456c Binary files /dev/null and b/hdajackretask/desktop/hicolor_apps_48x48_hdajackretask.png differ diff --git a/hdajackretask/gitcompile b/hdajackretask/gitcompile new file mode 100755 index 0000000..10e057c --- /dev/null +++ b/hdajackretask/gitcompile @@ -0,0 +1,30 @@ +#!/bin/bash + +if test -z "$AUTOMAKE_DIR"; then + if test -d /usr/local/share/automake; then + AUTOMAKE_DIR=/usr/local/share/automake + fi + if test -d /usr/share/automake; then + AUTOMAKE_DIR="/usr/share/automake" + fi + if test -z "$AUTOMAKE_DIR"; then + AUTOMAKE_DIR=/usr/share/`ls /usr/share | grep automake | tail -n 1` + fi +fi + +for f in install-sh mkinstalldirs missing; do + cp -av $AUTOMAKE_DIR/$f . || exit 1 +done + +aclocal $ACLOCAL_FLAGS || exit 1 +automake --add-missing --copy || exit 1 +touch depcomp || exit 1 +autoconf || exit 1 +export CFLAGS='-O2 -Wall -pipe -g' +echo "CFLAGS=$CFLAGS" +echo "./configure $@" +./configure $@ || exit 1 +unset CFLAGS +if [ -z "$GITCOMPILE_NO_MAKE" ]; then + make || exit 1 +fi diff --git a/hdajackretask/main-gtk.c b/hdajackretask/main-gtk.c new file mode 100644 index 0000000..c561f57 --- /dev/null +++ b/hdajackretask/main-gtk.c @@ -0,0 +1,671 @@ +/* Copyright 2011 David Henningsson, Canonical Ltd. + License: GPLv2+ +*/ + +#include +#include +#include +#include + +#include "sysfs-pin-configs.h" +#include "apply-changes.h" + +typedef struct ui_data_t ui_data_t; + +typedef struct pin_ui_data_t { + pin_configs_t* pin_config; + typical_pins_t pins_info[32]; + GtkWidget *frame, *override, *jacktype; + GtkWidget* free_override_cb[FREE_OVERRIDES_COUNT]; + ui_data_t* owner; +} pin_ui_data_t; + +typedef struct hints_ui_data_t { + gboolean visible; + GtkWidget *frame; + GtkListStore *store; + gchar *values; +} hints_ui_data_t; + +struct ui_data_t { + GList* pin_ui_data; + GtkWidget *main_window; + GtkWidget *content_scroll_widget; + GtkWidget *content_inner_box; + GtkWidget *codec_selection_combo; + + codec_name_t* current_codec; + int sysfs_pincount; + codec_name_t sysfs_codec_names[128]; + pin_configs_t sysfs_pins[32]; + gboolean free_overrides; + gboolean trust_codec; + gboolean trust_defcfg; + gboolean model_auto; + + hints_ui_data_t hints; +}; + +static void update_user_pin_config(ui_data_t* ui, pin_configs_t* cfg); + +static void update_override_sensitive(GtkWidget* sender, pin_ui_data_t* data) +{ + int i; + gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); + gtk_widget_set_sensitive(data->jacktype, checked); + for (i = 0; i < FREE_OVERRIDES_COUNT; i++) + gtk_widget_set_sensitive(data->free_override_cb[i], checked); +} + +static void override_toggled(GtkWidget* sender, pin_ui_data_t* data) +{ + update_override_sensitive(sender, data); + update_user_pin_config(data->owner, data->pin_config); +} + +static void jacktype_changed(GtkWidget* sender, pin_ui_data_t* data) +{ + update_user_pin_config(data->owner, data->pin_config); +} + +static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg) +{ + GtkWidget* result; + GtkContainer* box; + pin_ui_data_t* data; + + int port_conn = get_port_conn(pin_cfg->init_pin_config); + /* Do not show unconnected pins */ + if (ui->trust_defcfg && port_conn == 1) + return NULL; + + data = calloc(1, sizeof(pin_ui_data_t)); + data->pin_config = pin_cfg; + data->owner = ui; + + { /* Frame */ + gchar* d = get_config_description(pin_cfg->init_pin_config); + gchar* c = g_strdup_printf("Pin ID: 0x%02x", pin_cfg->nid); + GtkWidget* label = gtk_label_new(c); + result = gtk_frame_new(d); + data->frame = result; + box = GTK_CONTAINER(gtk_box_new(GTK_ORIENTATION_VERTICAL, 2)); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_container_add(box, label); + g_free(d); + g_free(c); + } + + { /* Capabilities + gchar* s = get_caps_description(pin_cfg->pin_caps); + gchar* s2 = g_strdup_printf("Capabilities: %s", strlen(s) > 2 ? s+2 : ""); // Hack for initial comma + GtkWidget* label = gtk_label_new(s2); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_container_add(box, label); + g_free(s); + g_free(s2); */ + } + + { /* Override */ + GtkWidget* override = data->override = gtk_check_button_new_with_label("Override"); + GtkWidget* jacktype = data->jacktype = gtk_combo_box_text_new(); + GtkWidget* jacktype_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); + int index = get_typical_pins(data->pins_info, 32, pin_cfg, ui->trust_codec); + typical_pins_t* current = data->pins_info; + while (current->name) { + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(jacktype), current->name); + current++; + } + gtk_combo_box_set_active(GTK_COMBO_BOX(jacktype), index); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(override), pin_cfg->user_override); + g_signal_connect(override, "toggled", G_CALLBACK(override_toggled), data); + g_signal_connect(jacktype, "changed", G_CALLBACK(jacktype_changed), data); + + gtk_container_add(box, override); + gtk_container_add(GTK_CONTAINER(jacktype_box), jacktype); + if (!ui->free_overrides) + gtk_container_add(box, jacktype_box); + } + + /* Advanced override */ + { + int i; + GtkGrid* grid = GTK_GRID(gtk_grid_new()); + gtk_grid_set_row_spacing(grid, 2); + gtk_grid_set_column_spacing(grid, 4); + + for (i = 0; i < FREE_OVERRIDES_COUNT; i++) { + int index = -1; + int j = 0; + unsigned long act_pincfg = actual_pin_config(pin_cfg); + unsigned long mask = get_free_override_mask(i); + free_override_t* values = get_free_override_list(i); + data->free_override_cb[i] = gtk_combo_box_text_new(); + if (!values) + continue; + while (values->name) { + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(data->free_override_cb[i]), values->name); + if ((act_pincfg & mask) == values->value) + index = j; + values++; + j++; + } + if (index >= 0) + gtk_combo_box_set_active(GTK_COMBO_BOX(data->free_override_cb[i]), index); + g_signal_connect(data->free_override_cb[i], "changed", G_CALLBACK(jacktype_changed), data); + } + + gtk_grid_attach(grid, gtk_label_new("Connectivity"), 0, 0, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[0], 0, 1, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Location"), 1, 0, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[1], 1, 1, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Device"), 2, 0, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[2], 2, 1, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Jack"), 3, 0, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[3], 3, 1, 1, 1); + + gtk_grid_attach(grid, gtk_label_new("Color"), 0, 2, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[4], 0, 3, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Jack detection"), 1, 2, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[5], 1, 3, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Channel group"), 2, 2, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[6], 2, 3, 1, 1); + gtk_grid_attach(grid, gtk_label_new("Channel (in group)"), 3, 2, 1, 1); + gtk_grid_attach(grid, data->free_override_cb[7], 3, 3, 1, 1); + + if (ui->free_overrides) + gtk_container_add(box, GTK_WIDGET(grid)); + } + update_override_sensitive(data->override, data); + + gtk_container_add(GTK_CONTAINER(result), GTK_WIDGET(box)); + ui->pin_ui_data = g_list_prepend(ui->pin_ui_data, data); + return result; +} + +static void free_pin_ui_data(pin_ui_data_t* data) +{ + if (!data) + return; + if (data->frame) + gtk_widget_destroy(data->frame); + free(data); +} + +static gint pin_config_find(pin_ui_data_t* pin_ui, pin_configs_t* cfg) +{ + return pin_ui->pin_config == cfg ? 0 : 1; +} + +static void update_user_pin_config(ui_data_t* ui, pin_configs_t* cfg) +{ + pin_ui_data_t* pin_ui; + GList *pos = g_list_find_custom(ui->pin_ui_data, cfg, (GCompareFunc) pin_config_find); + cfg->user_override = FALSE; + if (!pos) + return; + pin_ui = pos->data; + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pin_ui->override))) + return; + + if (ui->free_overrides) { + int j; + int index; + unsigned long val = 0; + for (j = 0; j < FREE_OVERRIDES_COUNT; j++) { + index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->free_override_cb[j])); + if (index < 0) + break; + val += get_free_override_list(j)[index].value; + } + if (index < 0) + return; + cfg->user_pin_config = val; + } else { + int index; + index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->jacktype)); + if (index < 0) + return; + cfg->user_pin_config = pin_ui->pins_info[index].pin_set; + } + cfg->user_override = TRUE; +} + +static void update_all_user_pin_config(ui_data_t* ui) +{ + int i; + for (i = 0; i < ui->sysfs_pincount; i++) + update_user_pin_config(ui, &ui->sysfs_pins[i]); +} + +static gboolean update_one_hint(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter *iter, gpointer userdata) +{ + gchar *name, *value; + ui_data_t *ui = userdata; + gtk_tree_model_get(GTK_TREE_MODEL(ui->hints.store), iter, 0, &name, 1, &value, -1); + if (g_strcmp0(value, "default")) { + gchar *s = g_strconcat(name, "=", value, "\n", ui->hints.values, NULL); + g_free(ui->hints.values); + ui->hints.values = s; + } + g_free(name); + g_free(value); + return FALSE; +} + +static void update_hints(ui_data_t* ui) +{ + g_free(ui->hints.values); + ui->hints.values = NULL; + if (ui->hints.visible) + gtk_tree_model_foreach(GTK_TREE_MODEL(ui->hints.store), update_one_hint, ui); +} + +static GQuark quark() +{ + return g_quark_from_static_string("hda-jack-retask-error"); +} + +static gboolean validate_user_pin_config(ui_data_t* ui, GError** err) +{ + int i; + + if (!ui->current_codec) { + g_set_error(err, quark(), 0, "You must first select a codec!"); + return FALSE; + } + update_hints(ui); + update_all_user_pin_config(ui); + if (ui->free_overrides) + return TRUE; + + /* Check surround configs */ + for (i = 0; i < ui->sysfs_pincount; i++) { + unsigned long v = ui->sysfs_pins[i].user_pin_config; + if (!ui->sysfs_pins[i].user_override) + continue; + if ((v & 0xf0) != 0x10) + continue; + if (((v & 0xf) != 0) && !find_pin_channel_match(ui->sysfs_pins, ui->sysfs_pincount, v & 0xf0)) { + g_set_error(err, quark(), 0, "This surround setup also requires a \"front\" channel override."); + return FALSE; + } + if (((v & 0xf) >= 3) && !find_pin_channel_match(ui->sysfs_pins, ui->sysfs_pincount, 2 + (v & 0xf0))) { + g_set_error(err, quark(), 0, "This surround setup also requires a \"back\" channel override."); + return FALSE; + } + if ((v & 0xf) >= 3 && !find_pin_channel_match(ui->sysfs_pins, ui->sysfs_pincount, 1 + (v & 0xf0))) { + g_set_error(err, quark(), 0, "This surround setup also requires a \"Center/LFE\" channel override."); + return FALSE; + } + } + return TRUE; +} + +static gboolean update_tree_one_hint(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter *iter, gpointer userdata) +{ + gchar *name; + ui_data_t *ui = userdata; + gtk_tree_model_get(GTK_TREE_MODEL(ui->hints.store), iter, 0, &name, -1); + gchar *s = strstr(ui->hints.values, name); + if (!s) { + g_free(name); + gtk_list_store_set(ui->hints.store, iter, 1, "default", -1); + return FALSE; + } + s += strlen(name); + while (*s == ' ' || *s == '=') s++; + gchar *s2 = s; + while (*s != '\n' && *s != '\0') s++; + s2 = g_strndup(s2, s - s2); + gtk_list_store_set(ui->hints.store, iter, 1, s2, -1); + g_free(s2); + g_free(name); + return FALSE; +} + +static void show_action_result(ui_data_t* ui, GError* err, const gchar* ok_msg) +{ + GtkWidget* dialog; + const gchar* msg = err ? err->message : ok_msg; + dialog = gtk_message_dialog_new (GTK_WINDOW(ui->main_window), + GTK_DIALOG_DESTROY_WITH_PARENT, err ? GTK_MESSAGE_ERROR : GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, "%s", msg); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + if (err) + g_error_free(err); +} + +static void apply_now_clicked(GtkButton* button, gpointer user_data) +{ + GError* err = NULL; + ui_data_t* ui = user_data; + gboolean ok = validate_user_pin_config(ui, &err); + if (ok) + apply_changes_reconfig(ui->sysfs_pins, ui->sysfs_pincount, + ui->current_codec->card, ui->current_codec->device, + ui->model_auto ? "auto" : NULL, ui->hints.values, &err); + show_action_result(ui, err, + "Ok, now go ahead and test to see if it actually worked!\n" + "(Remember, this stuff is still experimental.)"); +} + +static void apply_boot_clicked(GtkButton* button, gpointer user_data) +{ + GError* err = NULL; + ui_data_t* ui = user_data; + gboolean ok = validate_user_pin_config(ui, &err); + if (ok) + apply_changes_boot(ui->sysfs_pins, ui->sysfs_pincount, + ui->current_codec->card, ui->current_codec->device, + ui->model_auto ? "auto" : NULL, ui->hints.values, &err); + show_action_result(ui, err, + "Ok, now reboot to test to see if it actually worked!\n" + "(Remember, this stuff is still experimental.)"); +} + + +static void reset_boot_clicked(GtkButton* button, gpointer user_data) +{ + GError* err = NULL; + ui_data_t* ui = user_data; + reset_changes_boot(&err); + show_action_result(ui, err, + "The previous installed files (if any) of this program have been removed.\n" + "Reboot to finish the uninstallation."); +} + +static void resize_main_window(ui_data_t* ui) +{ + GtkAllocation a; + GtkRequisition r; + gint oldw, oldh, neww, newh, maxw, maxh; + GdkScreen* screen = gtk_window_get_screen(GTK_WINDOW(ui->main_window)); + gtk_widget_size_request(GTK_WIDGET(ui->content_inner_box), &r); + gtk_widget_get_allocation(ui->content_scroll_widget, &a); +// fprintf(stderr, "W: %d, H: %d, W: %d, H: %d\n", a.width, a.height, r.width, r.height); + gtk_window_get_size(GTK_WINDOW(ui->main_window), &oldw, &oldh); + maxw = screen ? (gdk_screen_get_width(screen)*3)/4 : INT_MAX / 4; + maxh = screen ? (gdk_screen_get_height(screen)*3)/4 : INT_MAX / 4; +// fprintf(stderr, "Before: W: %d, H: %d\n", oldw, oldh); + neww = oldw; + newh = oldh; + if (a.width < r.width) { + neww += 8 + r.width - a.width; + if (neww > maxw) + neww = maxw; + } + if (a.height < r.height) { + newh += 8 + r.height - a.height; + if (newh > maxh) + newh = maxh; + } + if (neww != oldw || newh != oldh) { + gtk_window_resize(GTK_WINDOW(ui->main_window), neww, newh); +// fprintf(stderr, "After: W: %d, H: %d\n", neww, newh); + } +} + +static void update_codec_ui(ui_data_t* ui, bool codec_change) +{ + int codec_index = gtk_combo_box_get_active(GTK_COMBO_BOX(ui->codec_selection_combo)); + int i; + + g_list_free_full(ui->pin_ui_data, (GDestroyNotify) free_pin_ui_data); + ui->pin_ui_data = NULL; + ui->current_codec = NULL; + + if (codec_index < 0) + return; + ui->current_codec = &ui->sysfs_codec_names[codec_index]; + if (codec_change) { + ui->sysfs_pincount = get_pin_configs_list(ui->sysfs_pins, 32, ui->current_codec->card, ui->current_codec->device); + ui->hints.values = get_hint_overrides(ui->current_codec->card, ui->current_codec->device); + gtk_tree_model_foreach(GTK_TREE_MODEL(ui->hints.store), update_tree_one_hint, ui); + } + for (i = 0; i < ui->sysfs_pincount; i++) { + GtkWidget *w = create_pin_ui(ui, &ui->sysfs_pins[i]); + if (w) + gtk_container_add(GTK_CONTAINER(ui->content_inner_box), w); + } + + gtk_widget_show_all(GTK_WIDGET(ui->content_inner_box)); + + if (ui->hints.visible) + gtk_widget_show_all(ui->hints.frame); + else + gtk_widget_hide(ui->hints.frame); + + resize_main_window(ui); +} + +static void codec_selected(GtkComboBox* combo, gpointer user_data) +{ + update_codec_ui(user_data, true); +} + +static void showallpins_toggled(GtkWidget* sender, ui_data_t* ui_data) +{ + gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); + ui_data->trust_defcfg = !checked; + update_codec_ui(ui_data, false); +} + +static void automodel_toggled(GtkWidget* sender, ui_data_t* ui_data) +{ + ui_data->model_auto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); +} + +static void free_override_toggled(GtkWidget* sender, ui_data_t* ui_data) +{ + ui_data->free_overrides = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); + update_codec_ui(ui_data, false); +} + +static void hints_toggled(GtkWidget* sender, ui_data_t* ui_data) +{ + ui_data->hints.visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender)); + update_codec_ui(ui_data, false); +} + +static void hints_row_activated(GtkTreeView *tree_view, GtkTreePath *path, + GtkTreeViewColumn *column, ui_data_t* ui_data) +{ + GtkTreeIter iter; + gchar *value; + const gchar *newvalue = "default"; + + gtk_tree_model_get_iter(GTK_TREE_MODEL(ui_data->hints.store), &iter, path); + gtk_tree_model_get(GTK_TREE_MODEL(ui_data->hints.store), &iter, 1, &value, -1); + + if (!g_strcmp0(value, "default")) + newvalue = "yes"; + else if (!g_strcmp0(value, "yes")) + newvalue = "no"; + gtk_list_store_set(ui_data->hints.store, &iter, 1, newvalue, -1); + + g_free(value); +} + + +static const char* readme_text = +#include "README.generated.h" +; + +static void documentation_clicked(GtkWidget* sender, ui_data_t* ui) +{ + GtkDialog* dlg = GTK_DIALOG(gtk_dialog_new_with_buttons("Jack retasking documentation", + GTK_WINDOW(ui->main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CLOSE, GTK_RESPONSE_NONE, NULL)); + GtkTextView* textview = GTK_TEXT_VIEW(gtk_text_view_new()); + GtkContainer* content_area = GTK_CONTAINER(gtk_dialog_get_content_area(dlg)); + GtkScrolledWindow* content_scroll = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); + + gtk_text_buffer_set_text(gtk_text_view_get_buffer(textview), readme_text, -1); + gtk_text_view_set_editable(textview, FALSE); + gtk_text_view_set_wrap_mode(textview, GTK_WRAP_WORD); + gtk_text_view_set_cursor_visible(textview, FALSE); + gtk_scrolled_window_add_with_viewport(content_scroll, GTK_WIDGET(textview)); + gtk_container_add(content_area, GTK_WIDGET(content_scroll)); + gtk_box_set_child_packing(GTK_BOX(content_area), GTK_WIDGET(content_scroll), TRUE, TRUE, 2, GTK_PACK_START); + + gtk_widget_show_all(GTK_WIDGET(content_area)); + + { /* Resize to fit screen */ + GdkScreen* screen = gtk_window_get_screen(GTK_WINDOW(ui->main_window)); + int neww = screen ? (gdk_screen_get_width(screen)*3)/4 : 800; + int newh = screen ? (gdk_screen_get_height(screen)*3)/4 : 600; + + gtk_window_set_default_size(GTK_WINDOW(dlg), MIN(1600, neww), MIN(1000, newh)); + } + + gtk_dialog_run(dlg); + gtk_widget_destroy(GTK_WIDGET(dlg)); +} + +static ui_data_t* create_ui() +{ + ui_data_t* ui = calloc(sizeof(ui_data_t), 1); + GtkContainer* toplevel_box = GTK_CONTAINER(gtk_box_new(GTK_ORIENTATION_VERTICAL, 2)); + GtkContainer* toplevel_2ndbox = GTK_CONTAINER(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2)); + ui->content_inner_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2); + GtkContainer* rightside_box = GTK_CONTAINER(gtk_box_new(GTK_ORIENTATION_VERTICAL, 2)); + ui->main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(ui->main_window), "Jack retasking for HDA Intel sound cards"); + g_signal_connect (ui->main_window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + + ui->trust_codec = TRUE; + ui->trust_defcfg = TRUE; + + /* Select codec to work with */ + { + GtkWidget* combo = ui->codec_selection_combo = gtk_combo_box_text_new(); + GtkWidget* box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); + codec_name_t *n = ui->sysfs_codec_names; + get_codec_name_list(ui->sysfs_codec_names, 128); + while (n->card != -1) { + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), n->name); + n++; + } + /* Select the first codec */ + if (ui->sysfs_codec_names->card != -1) { + gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); + g_signal_connect(combo, "changed", G_CALLBACK(codec_selected), ui); + gtk_container_add(GTK_CONTAINER(box), gtk_label_new("Select a codec:")); + gtk_container_add(GTK_CONTAINER(box), combo); + } + else { + gtk_container_add(GTK_CONTAINER(box), gtk_label_new("No codecs found. Sorry.")); + gtk_widget_destroy(combo); + } + + gtk_container_add(toplevel_box, box); + } + + /* Add pin content area */ + { + GtkWidget* frame = gtk_frame_new("Pin configuration"); + GtkScrolledWindow* content_scroll = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); + ui->content_scroll_widget = GTK_WIDGET(content_scroll); + gtk_frame_set_label_align(GTK_FRAME(frame), 0.5, 0.5); + gtk_scrolled_window_add_with_viewport(content_scroll, ui->content_inner_box); + gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(content_scroll)); + gtk_container_add(toplevel_2ndbox, frame); + gtk_box_set_child_packing(GTK_BOX(toplevel_2ndbox), frame, TRUE, TRUE, 2, GTK_PACK_START); + } + + /* Create hints */ + { + GtkWidget* frame = gtk_frame_new("Hints"); + ui->hints.frame = frame; + + GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + ui->hints.store = store; + const gchar** names = get_standard_hint_names(); + for (; *names; names++) { + GtkTreeIter iter; + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, 0, *names, 1, "default", -1); + } + + GtkWidget *tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree), gtk_tree_view_column_new_with_attributes + ("Name", gtk_cell_renderer_text_new(), "text", 0, NULL)); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree), gtk_tree_view_column_new_with_attributes + ("Value", gtk_cell_renderer_text_new(), "text", 1, NULL)); + g_signal_connect(tree, "row-activated", G_CALLBACK(hints_row_activated), ui); + + gtk_container_add(GTK_CONTAINER(frame), tree); + gtk_container_add(toplevel_2ndbox, frame); + } + + /* Create settings */ + { + GtkWidget* frame = gtk_frame_new("Options"); + GtkContainer* box = GTK_CONTAINER(gtk_button_box_new(GTK_ORIENTATION_VERTICAL)); + GtkWidget* check; + + check = gtk_check_button_new_with_label("Show unconnected pins"); + g_signal_connect(check, "toggled", G_CALLBACK(showallpins_toggled), ui); + gtk_container_add(box, check); + + check = gtk_check_button_new_with_label("Set model=auto"); + g_signal_connect(check, "toggled", G_CALLBACK(automodel_toggled), ui); + gtk_container_add(box, check); + + check = gtk_check_button_new_with_label("Advanced override"); + g_signal_connect(check, "toggled", G_CALLBACK(free_override_toggled), ui); + gtk_container_add(box, check); + + check = gtk_check_button_new_with_label("Parser hints"); + g_signal_connect(check, "toggled", G_CALLBACK(hints_toggled), ui); + gtk_container_add(box, check); + + gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(box)); + gtk_container_add(rightside_box, frame); + } + + /* Create bottom right buttons */ + { + GtkWidget* button; + GtkWidget* box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); + button = gtk_button_new_with_label("Read documentation"); + g_signal_connect(button, "clicked", G_CALLBACK(documentation_clicked), ui); + gtk_container_add(GTK_CONTAINER(box), button); + button = gtk_button_new_with_label("Apply now"); + g_signal_connect(button, "clicked", G_CALLBACK(apply_now_clicked), ui); + gtk_container_add(GTK_CONTAINER(box), button); + button = gtk_button_new_with_label("Install boot override"); + g_signal_connect(button, "clicked", G_CALLBACK(apply_boot_clicked), ui); + gtk_container_add(GTK_CONTAINER(box), button); + button = gtk_button_new_with_label("Remove boot override"); + g_signal_connect(button, "clicked", G_CALLBACK(reset_boot_clicked), ui); + gtk_container_add(GTK_CONTAINER(box), button); + + gtk_container_add(rightside_box, box); + gtk_box_set_child_packing(GTK_BOX(rightside_box), box, FALSE, FALSE, 2, GTK_PACK_END); + } + + gtk_container_add(toplevel_2ndbox, GTK_WIDGET(rightside_box)); + + gtk_container_add(GTK_CONTAINER(toplevel_box), GTK_WIDGET(toplevel_2ndbox)); + gtk_box_set_child_packing(GTK_BOX(toplevel_box), GTK_WIDGET(toplevel_2ndbox), TRUE, TRUE, 2, GTK_PACK_END); + gtk_container_add(GTK_CONTAINER(ui->main_window), GTK_WIDGET(toplevel_box)); + + return ui; +} + +int main(int argc, char *argv[]) +{ + ui_data_t* ui; + gtk_init(&argc, &argv); + ui = create_ui(); + gtk_widget_show_all(ui->main_window); + if (ui->codec_selection_combo) + update_codec_ui(ui, true); + gtk_main(); + return 0; +} diff --git a/hdajackretask/sysfs-pin-configs.c b/hdajackretask/sysfs-pin-configs.c new file mode 100644 index 0000000..693842f --- /dev/null +++ b/hdajackretask/sysfs-pin-configs.c @@ -0,0 +1,662 @@ +/* Copyright 2011 David Henningsson, Canonical Ltd. + License: GPLv2+ +*/ + +#include +#include +#include "sysfs-pin-configs.h" +#include "apply-changes.h" + +const gchar *hint_names[25] = { +"jack_detect", "inv_jack_detect", "trigger_sense", "inv_eapd", +"pcm_format_first", "sticky_stream", "spdif_status_reset", +"pin_amp_workaround", "single_adc_amp", "auto_mute", "auto_mic", +"line_in_auto_switch", "auto_mute_via_amp", "need_dac_fix", "primary_hp", +"multi_io", "multi_cap_vol", "inv_dmic_split", "indep_hp", +"add_stereo_mix_input", "add_jack_modes", "power_down_unused", "add_hp_mic", +"hp_mic_detect", NULL }; + +const gchar** get_standard_hint_names() +{ + return hint_names; +} + + +int get_codec_name_list(codec_name_t* names, int entries) +{ + GDir* sysdir = g_dir_open("/sys/class/sound", 0, NULL); + int count = 0; + if (!sysdir) + return 0; + + while (entries > 1) { + gchar** cd = NULL; + gboolean ok; + const gchar* dirname = g_dir_read_name(sysdir); + if (!dirname) + break; + /* Split e g "hwC0D1" into "hw", "0" and "1" */ + cd = g_strsplit_set(dirname, "CD", 9); + ok = g_strv_length(cd) == 3; + ok &= strcmp(cd[0], "hw") == 0; + if (ok) { + gchar* filetest = g_strdup_printf("/sys/class/sound/%s/init_pin_configs", dirname); + ok = g_file_test(filetest, G_FILE_TEST_IS_REGULAR); + g_free(filetest); + } + + if (ok) { + gchar* chip_name = NULL, *vendor_name = NULL; + gchar* chip_file = g_strdup_printf("/sys/class/sound/%s/chip_name", dirname); + gchar* vendor_file = g_strdup_printf("/sys/class/sound/%s/vendor_name", dirname); + ok = g_file_get_contents(chip_file, &chip_name, NULL, NULL); + ok &= g_file_get_contents(vendor_file, &vendor_name, NULL, NULL); + if (ok) { + names->name = g_strdup_printf("%s %s", g_strchomp(vendor_name), g_strchomp(chip_name)); + } + g_free(chip_name); + g_free(vendor_name); + g_free(chip_file); + g_free(vendor_file); + } + + if (ok) { + names->card = atoi(cd[1]); + names->device = atoi(cd[2]); + + names++; + count++; + entries--; + } + g_strfreev(cd); + } + if (entries) { + names->name = NULL; + names->card = -1; + } + g_dir_close(sysdir); + return count; +} + +static unsigned long read_header_value(gchar* contents, gchar* key) +{ + gchar* s = strstr(contents, key); + s += strlen(key); + return g_ascii_strtoull(s, NULL, 0); +} + +void get_codec_header(int card, int device, unsigned int* address, + unsigned int* codec_vendorid, unsigned int* codec_ssid) +{ + gchar* filename = g_strdup_printf("/proc/asound/card%d/codec#%d", card, device); + gchar* contents = NULL; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return; + *address = read_header_value(contents, "Address: "); + *codec_vendorid = read_header_value(contents, "Vendor Id: "); + *codec_ssid = read_header_value(contents, "Subsystem Id: "); + + g_free(contents); +} + +static void get_pin_caps(pin_configs_t* pins, int entries, int card, int device) +{ + gchar* filename = g_strdup_printf("/proc/asound/card%d/codec#%d", card, device); + gchar* contents = NULL; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return; + + for (; entries; entries--, pins++) { + gchar* nodestr = g_strdup_printf("Node 0x%02x [", pins->nid); + gchar* q = strstr(contents, nodestr); + g_free(nodestr); + if (!q) + continue; + + q = strstr(q, "wcaps 0x"); + if (!q) + continue; + q += strlen("wcaps "); + pins->wid_caps = g_ascii_strtoull(q, NULL, 0); + + q = strstr(q, "Pincap 0x"); + if (!q) + continue; + q += strlen("Pincap "); + pins->pin_caps = g_ascii_strtoull(q, NULL, 0); + } + g_free(contents); +} + +gchar *get_hint_overrides(int card, int device) +{ + gchar* filename = g_strdup_printf("/sys/class/sound/hwC%dD%d/hints", card, device); + gchar* contents = NULL; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return NULL; + return contents; +} + +static void read_pin_overrides(pin_configs_t* pins, int entries, int card, int device, gboolean is_user) +{ + gchar* filename = g_strdup_printf("/sys/class/sound/hwC%dD%d/%s_pin_configs", card, device, is_user ? "user" : "driver"); + gchar* contents = NULL; + gchar** lines = NULL, **line_iterator; + int count = 0; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return; + line_iterator = lines = g_strsplit(contents, "\n", entries); + while (count < entries && *line_iterator) { + gchar** line = g_strsplit(*line_iterator, " ", 0); + line_iterator++; + if (g_strv_length(line) == 2) { + int nid = g_ascii_strtoull(line[0], NULL, 0) & 0xff; + unsigned long config = g_ascii_strtoull(line[1], NULL, 0); + int i; + for (i=0; i < entries; i++) + if (nid == pins[i].nid) { + if (is_user) { + pins[i].user_override = FALSE; + pins[i].user_override = config != actual_pin_config(&pins[i]); + pins[i].user_pin_config = config; + } else { + pins[i].driver_override = config != pins[i].init_pin_config; + pins[i].driver_pin_config = config; + } + } + } + g_strfreev(line); + } + g_strfreev(lines); + g_free(contents); +} + +int get_pin_configs_list(pin_configs_t* pins, int entries, int card, int device) +{ + gchar* filename = g_strdup_printf("/sys/class/sound/hwC%dD%d/init_pin_configs", card, device); + gchar* contents = NULL; + gchar** lines = NULL, **line_iterator; + int count = 0; + int ok = g_file_get_contents(filename, &contents, NULL, NULL); + g_free(filename); + if (!ok) + return 0; + line_iterator = lines = g_strsplit(contents, "\n", entries); + g_free(contents); + while (count < entries && *line_iterator) { + gchar** line = g_strsplit(*line_iterator, " ", 0); + line_iterator++; + if (g_strv_length(line) == 2) { + pins[count].nid = g_ascii_strtoull(line[0], NULL, 0); + pins[count].init_pin_config = g_ascii_strtoull(line[1], NULL, 0) & 0xffffffff; + pins[count].driver_override = FALSE; + pins[count].user_override = FALSE; + count++; + } + g_strfreev(line); + } + g_strfreev(lines); + + read_pin_overrides(pins, count, card, device, FALSE); + read_pin_overrides(pins, count, card, device, TRUE); + get_pin_caps(pins, count, card, device); + + return count; +} + +unsigned long actual_pin_config(pin_configs_t* pins) +{ + if (pins->user_override) + return pins->user_pin_config; + if (pins->driver_override) + return pins->driver_pin_config; + return pins->init_pin_config; +} + +/*** Code below taken from sound/pci/hda/hda_proc.c and hda_codec.h, (C) Takashi Iwai, GPLv2+. ****/ + +#define u32 unsigned long + +#define AC_WCAP_STEREO (1<<0) /* stereo I/O */ +#define AC_WCAP_IN_AMP (1<<1) /* AMP-in present */ +#define AC_WCAP_OUT_AMP (1<<2) /* AMP-out present */ +#define AC_WCAP_AMP_OVRD (1<<3) /* AMP-parameter override */ +#define AC_WCAP_FORMAT_OVRD (1<<4) /* format override */ +#define AC_WCAP_STRIPE (1<<5) /* stripe */ +#define AC_WCAP_PROC_WID (1<<6) /* Proc Widget */ +#define AC_WCAP_UNSOL_CAP (1<<7) /* Unsol capable */ +#define AC_WCAP_CONN_LIST (1<<8) /* connection list */ +#define AC_WCAP_DIGITAL (1<<9) /* digital I/O */ +#define AC_WCAP_POWER (1<<10) /* power control */ +#define AC_WCAP_LR_SWAP (1<<11) /* L/R swap */ +#define AC_WCAP_CP_CAPS (1<<12) /* content protection */ +#define AC_WCAP_CHAN_CNT_EXT (7<<13) /* channel count ext */ +#define AC_WCAP_DELAY (0xf<<16) +#define AC_WCAP_DELAY_SHIFT 16 +#define AC_WCAP_TYPE (0xf<<20) +#define AC_WCAP_TYPE_SHIFT 20 + +#define AC_PINCAP_IMP_SENSE (1<<0) /* impedance sense capable */ +#define AC_PINCAP_TRIG_REQ (1<<1) /* trigger required */ +#define AC_PINCAP_PRES_DETECT (1<<2) /* presence detect capable */ +#define AC_PINCAP_HP_DRV (1<<3) /* headphone drive capable */ +#define AC_PINCAP_OUT (1<<4) /* output capable */ +#define AC_PINCAP_IN (1<<5) /* input capable */ +#define AC_PINCAP_BALANCE (1<<6) /* balanced I/O capable */ +/* Note: This LR_SWAP pincap is defined in the Realtek ALC883 specification, + * but is marked reserved in the Intel HDA specification. + */ +#define AC_PINCAP_LR_SWAP (1<<7) /* L/R swap */ +/* Note: The same bit as LR_SWAP is newly defined as HDMI capability + * in HD-audio specification + */ +#define AC_PINCAP_HDMI (1<<7) /* HDMI pin */ +#define AC_PINCAP_DP (1<<24) /* DisplayPort pin, can + * coexist with AC_PINCAP_HDMI + */ +#define AC_PINCAP_VREF (0x37<<8) +#define AC_PINCAP_VREF_SHIFT 8 +#define AC_PINCAP_EAPD (1<<16) /* EAPD capable */ +#define AC_PINCAP_HBR (1<<27) /* High Bit Rate */ +/* Vref status (used in pin cap) */ +#define AC_PINCAP_VREF_HIZ (1<<0) /* Hi-Z */ +#define AC_PINCAP_VREF_50 (1<<1) /* 50% */ +#define AC_PINCAP_VREF_GRD (1<<2) /* ground */ +#define AC_PINCAP_VREF_80 (1<<4) /* 80% */ +#define AC_PINCAP_VREF_100 (1<<5) /* 100% */ + + +/* configuration default - 32bit */ +#define AC_DEFCFG_SEQUENCE (0xf<<0) +#define AC_DEFCFG_DEF_ASSOC (0xf<<4) +#define AC_DEFCFG_ASSOC_SHIFT 4 +#define AC_DEFCFG_MISC (0xf<<8) +#define AC_DEFCFG_MISC_SHIFT 8 +#define AC_DEFCFG_MISC_NO_PRESENCE (1<<0) +#define AC_DEFCFG_COLOR (0xf<<12) +#define AC_DEFCFG_COLOR_SHIFT 12 +#define AC_DEFCFG_CONN_TYPE (0xf<<16) +#define AC_DEFCFG_CONN_TYPE_SHIFT 16 +#define AC_DEFCFG_DEVICE (0xf<<20) +#define AC_DEFCFG_DEVICE_SHIFT 20 +#define AC_DEFCFG_LOCATION (0x3f<<24) +#define AC_DEFCFG_LOCATION_SHIFT 24 +#define AC_DEFCFG_GROSSLOC (0x3<<28) +#define AC_DEFCFG_GROSSLOC_SHIFT 28 +#define AC_DEFCFG_PORT_CONN (0x3<<30) +#define AC_DEFCFG_PORT_CONN_SHIFT 30 + +static const char *get_jack_color(u32 cfg) +{ + static char *names[16] = { + "", "Black", "Grey", "Blue", + "Green", "Red", "Orange", "Yellow", + "Purple", "Pink", NULL, NULL, + NULL, NULL, "White", "Other", + }; + cfg = (cfg & AC_DEFCFG_COLOR) >> AC_DEFCFG_COLOR_SHIFT; + if (names[cfg]) + return names[cfg]; + else + return "UNKNOWN"; +} + +static const char *get_jack_type(u32 cfg) +{ + static char *jack_types[16] = { + "Line Out", "Speaker", "Headphone", "CD", + "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand", + "Line In", "Aux", "Mic", "Telephony", + "SPDIF In", "Digital In", "Reserved", "Other" + }; + + return jack_types[(cfg & AC_DEFCFG_DEVICE) + >> AC_DEFCFG_DEVICE_SHIFT]; +} + +static const char *get_jack_location(u32 cfg) +{ + static char *bases[7] = { + "", ", Rear side", ", Front side", ", Left side", ", Right side", ", Top", ", Bottom", + }; + static unsigned char specials_idx[] = { + 0x07, 0x08, + 0x17, 0x18, 0x19, + 0x37, 0x38 + }; + static char *specials[] = { + ", Rear Panel", ", Drive Bar", + ", Riser", ", HDMI", ", ATAPI", + ", Mobile-In", ", Mobile-Out" + }; + int i; + cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT; + if ((cfg & 0x0f) < 7) + return bases[cfg & 0x0f]; + for (i = 0; i < 7; i++) { + if (cfg == specials_idx[i]) + return specials[i]; + } + return "UNKNOWN"; +} + + +/**** Borrowed code end *****/ + +static free_override_t pc_arr[] = { + {"Not connected", 1 << AC_DEFCFG_PORT_CONN_SHIFT}, + {"Jack", 0}, + {"Internal", 2 << AC_DEFCFG_PORT_CONN_SHIFT}, + {"Both", 3 << AC_DEFCFG_PORT_CONN_SHIFT}, + {} +}; + +static free_override_t location_arr[] = { + {"External", 0}, + {"Rear", 1 << AC_DEFCFG_LOCATION_SHIFT}, + {"Front", 2 << AC_DEFCFG_LOCATION_SHIFT}, + {"Left", 3 << AC_DEFCFG_LOCATION_SHIFT}, + {"Right", 4 << AC_DEFCFG_LOCATION_SHIFT}, + {"Top", 5 << AC_DEFCFG_LOCATION_SHIFT}, + {"Bottom", 6 << AC_DEFCFG_LOCATION_SHIFT}, + {"Rear panel", 7 << AC_DEFCFG_LOCATION_SHIFT}, + {"Drive bay", 8 << AC_DEFCFG_LOCATION_SHIFT}, + + {"Internal", 16 << AC_DEFCFG_LOCATION_SHIFT}, + {"Internal riser", (16+7) << AC_DEFCFG_LOCATION_SHIFT}, + {"Internal display", (16+8) << AC_DEFCFG_LOCATION_SHIFT}, + {"Internal ATAPI", (16+9) << AC_DEFCFG_LOCATION_SHIFT}, + + {"Dock", 32 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Rear", 33 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Front", 34 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Left", 35 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Right", 36 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Top", 37 << AC_DEFCFG_LOCATION_SHIFT}, + {"Dock Bottom", 38 << AC_DEFCFG_LOCATION_SHIFT}, + + {"Other", 48 << AC_DEFCFG_LOCATION_SHIFT}, + {"Other bottom", (48+7) << AC_DEFCFG_LOCATION_SHIFT}, + {"Inside mobile lid", (48+8) << AC_DEFCFG_LOCATION_SHIFT}, + {"Outside mobile lid", (48+9) << AC_DEFCFG_LOCATION_SHIFT}, + + {} +}; + +static free_override_t device_arr[] = { + {"Line Out", 0}, + {"Speaker", 1 << AC_DEFCFG_DEVICE_SHIFT}, + {"Headphone", 2 << AC_DEFCFG_DEVICE_SHIFT}, + {"CD", 3 << AC_DEFCFG_DEVICE_SHIFT}, + {"SPDIF Out", 4 << AC_DEFCFG_DEVICE_SHIFT}, + {"Digital Out", 5 << AC_DEFCFG_DEVICE_SHIFT}, + {"Modem (Line side)", 6 << AC_DEFCFG_DEVICE_SHIFT}, + {"Modem (Handset side)", 7 << AC_DEFCFG_DEVICE_SHIFT}, + {"Line In", 8 << AC_DEFCFG_DEVICE_SHIFT}, + {"Aux", 9 << AC_DEFCFG_DEVICE_SHIFT}, + {"Microphone", 10 << AC_DEFCFG_DEVICE_SHIFT}, + {"Telephony", 11 << AC_DEFCFG_DEVICE_SHIFT}, + {"SPDIF In", 12 << AC_DEFCFG_DEVICE_SHIFT}, + {"Other Digital In", 13 << AC_DEFCFG_DEVICE_SHIFT}, + {"Other", 15 << AC_DEFCFG_DEVICE_SHIFT}, + {} +}; + +static free_override_t jack_arr[] = { + {"Unknown", 0}, + {"3.5 mm", 1 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"6.3 mm", 2 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"ATAPI", 3 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"RCA", 4 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Optical", 5 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Other Digital", 6 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Other Analog", 7 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"DIN", 8 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"XLR", 9 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"RJ-11 (Modem)", 10 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Combination", 11 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {"Other", 15 << AC_DEFCFG_CONN_TYPE_SHIFT}, + {} +}; + +static free_override_t color_arr[] = { + {"Unknown", 0}, + {"Black", 1 << AC_DEFCFG_COLOR_SHIFT}, + {"Grey", 2 << AC_DEFCFG_COLOR_SHIFT}, + {"Blue", 3 << AC_DEFCFG_COLOR_SHIFT}, + {"Green", 4 << AC_DEFCFG_COLOR_SHIFT}, + {"Red", 5 << AC_DEFCFG_COLOR_SHIFT}, + {"Orange", 6 << AC_DEFCFG_COLOR_SHIFT}, + {"Yellow", 7 << AC_DEFCFG_COLOR_SHIFT}, + {"Purple", 8 << AC_DEFCFG_COLOR_SHIFT}, + {"Pink", 9 << AC_DEFCFG_COLOR_SHIFT}, + {"White", 14 << AC_DEFCFG_COLOR_SHIFT}, + {"Other", 15 << AC_DEFCFG_COLOR_SHIFT}, + {} +}; + +static free_override_t no_presence_arr[] = { + {"Present", 0}, + {"Not present", 1 << AC_DEFCFG_MISC_SHIFT}, + {} +}; + +static free_override_t group_nr_arr[] = { + {"1", 1 << AC_DEFCFG_ASSOC_SHIFT}, + {"2", 2 << AC_DEFCFG_ASSOC_SHIFT}, + {"3", 3 << AC_DEFCFG_ASSOC_SHIFT}, + {"4", 4 << AC_DEFCFG_ASSOC_SHIFT}, + {"5", 5 << AC_DEFCFG_ASSOC_SHIFT}, + {"6", 6 << AC_DEFCFG_ASSOC_SHIFT}, + {"7", 7 << AC_DEFCFG_ASSOC_SHIFT}, + {"8", 8 << AC_DEFCFG_ASSOC_SHIFT}, + {"9", 9 << AC_DEFCFG_ASSOC_SHIFT}, + {"10", 10 << AC_DEFCFG_ASSOC_SHIFT}, + {"11", 11 << AC_DEFCFG_ASSOC_SHIFT}, + {"12", 12 << AC_DEFCFG_ASSOC_SHIFT}, + {"13", 13 << AC_DEFCFG_ASSOC_SHIFT}, + {"14", 14 << AC_DEFCFG_ASSOC_SHIFT}, + {"15", 15 << AC_DEFCFG_ASSOC_SHIFT}, + {} +}; + +static free_override_t channel_arr[] = { + {"Front", 0}, + {"Center/LFE", 1}, + {"Back", 2}, + {"Side", 3}, + {"Channel 8 & 9", 4}, + {"Channel 10 & 11", 5}, + {"Channel 12 & 13", 6}, + {"Channel 14 & 15", 7}, + {"Channel 16 & 17", 8}, + {"Channel 18 & 19", 9}, + {"Channel 20 & 21", 10}, + {"Channel 22 & 23", 11}, + {"Channel 24 & 25", 12}, + {"Channel 26 & 27", 13}, + {"Channel 28 & 29", 14}, + {"Channel 30 & 31", 15}, + {} +}; + + +static free_override_t* type_order[FREE_OVERRIDES_COUNT] = { + pc_arr, location_arr, device_arr, jack_arr, + color_arr, no_presence_arr, group_nr_arr, channel_arr +}; + +unsigned long get_free_override_mask(int type) +{ + static unsigned long masks[FREE_OVERRIDES_COUNT] = { + AC_DEFCFG_PORT_CONN, + AC_DEFCFG_LOCATION, + AC_DEFCFG_DEVICE, + AC_DEFCFG_CONN_TYPE, + AC_DEFCFG_COLOR, + AC_DEFCFG_MISC & (AC_DEFCFG_MISC_NO_PRESENCE << AC_DEFCFG_MISC_SHIFT), + AC_DEFCFG_DEF_ASSOC, + AC_DEFCFG_SEQUENCE, + }; + + return masks[type]; +} + +free_override_t* get_free_override_list(int type) +{ + return type_order[type]; +} + + +int get_port_conn(unsigned long config) +{ + return (config & AC_DEFCFG_PORT_CONN) >> AC_DEFCFG_PORT_CONN_SHIFT; +} + +gchar* get_config_description(unsigned long config) +{ + int port_conn = get_port_conn(config); + if (port_conn == 1) + return g_strdup("Not connected"); + return g_strdup_printf("%s %s%s%s", port_conn == 2 ? "Internal" : get_jack_color(config), + get_jack_type(config), + ((config >> (AC_DEFCFG_LOCATION_SHIFT+4)) & 3) == 2 ? ", Docking station" : "", + get_jack_location(config)); +} + +/* +gchar* get_caps_description(unsigned long pin_caps) +{ + int vref = (pin_caps & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT; + gboolean linein = (pin_caps & AC_PINCAP_IN) && (vref & AC_PINCAP_VREF_HIZ); + gboolean lineout = pin_caps & AC_PINCAP_OUT; + gboolean hp = pin_caps & AC_PINCAP_HP_DRV; + gboolean mic = (pin_caps & AC_PINCAP_IN) && (vref & AC_PINCAP_VREF_50 || vref & AC_PINCAP_VREF_80); + return g_strjoin("", + lineout ? ", Line out": "", + hp ? ", Headphone": "", + linein ? ", Line in": "", + mic ? ", Microphone": "", NULL); + +} +*/ + +static gboolean extmic_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + int vref = (pin_caps & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT; + return (pin_caps & AC_PINCAP_IN) && (vref & AC_PINCAP_VREF_50 || vref & AC_PINCAP_VREF_80); +} + +static gboolean headphone_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return pin_caps & AC_PINCAP_HP_DRV; +} + +static gboolean lineout_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return (pin_caps & AC_PINCAP_OUT) && !(wid_caps & AC_WCAP_DIGITAL); +} + +static gboolean spdifout_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return (pin_caps & AC_PINCAP_OUT) && (wid_caps & AC_WCAP_DIGITAL) && !(pin_caps & AC_PINCAP_HDMI); +} + +static gboolean hdmi_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return pin_caps & AC_PINCAP_HDMI; +} + +static gboolean intmic_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return (pin_caps & AC_PINCAP_IN) && !(wid_caps & AC_WCAP_DIGITAL); +} + +static gboolean spdifin_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return (pin_caps & AC_PINCAP_IN) && (wid_caps & AC_WCAP_DIGITAL); +} + +static gboolean linein_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + int vref = (pin_caps & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT; + return (pin_caps & AC_PINCAP_IN) && (vref & AC_PINCAP_VREF_HIZ); +} + +static gboolean disabled_caps(unsigned long pin_caps, unsigned long wid_caps) +{ + return TRUE; +} + +#define DEFAULT_MASK (AC_DEFCFG_PORT_CONN | AC_DEFCFG_GROSSLOC | AC_DEFCFG_DEVICE) + +static typical_pins_t simple_typical_pins[] = { + {"Headphone", headphone_caps, 0x0321403f, DEFAULT_MASK, }, + {"Microphone", extmic_caps, 0x03a19020, DEFAULT_MASK,}, + {"Line out (Front)", lineout_caps, 0x01014010, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Line out (Center/LFE)", lineout_caps, 0x01014011, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Line out (Back)", lineout_caps, 0x01014012, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Line out (Side)", lineout_caps, 0x01014013, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Line in", linein_caps, 0x0181304f, DEFAULT_MASK,}, + {"Internal speaker", lineout_caps, 0x90170150, DEFAULT_MASK | AC_DEFCFG_SEQUENCE, }, + {"Internal speaker (LFE)", lineout_caps, 0x90170151, DEFAULT_MASK | AC_DEFCFG_SEQUENCE, }, + {"Internal speaker (Back)", lineout_caps, 0x90170152, DEFAULT_MASK | AC_DEFCFG_SEQUENCE, }, + {"Internal mic", intmic_caps, 0x90a60160, DEFAULT_MASK,}, + {"HDMI / DisplayPort", hdmi_caps, 0x18560070, AC_DEFCFG_PORT_CONN | AC_DEFCFG_LOCATION,}, + {"SPDIF out", spdifout_caps, 0x014b1180, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, + {"SPDIF in", spdifin_caps, 0x01cb6190, AC_DEFCFG_PORT_CONN | AC_DEFCFG_DEVICE,}, + {"Dock Headphone", headphone_caps, 0x222140af, DEFAULT_MASK, }, + {"Dock Microphone", extmic_caps, 0x22a190a0, DEFAULT_MASK,}, + {"Dock Line out", lineout_caps, 0x220140b0, DEFAULT_MASK | AC_DEFCFG_SEQUENCE,}, + {"Dock Line in", linein_caps, 0x228130bf, DEFAULT_MASK,}, + {"Not connected", disabled_caps, 0x40f000f0, AC_DEFCFG_PORT_CONN,}, + {} +}; + + + +int get_typical_pins(typical_pins_t* result, int entries, pin_configs_t* pin_cfg, int caps_limit) +{ + int count = 0; + int index = -1; + unsigned long actual = actual_pin_config(pin_cfg); + typical_pins_t* src; + for (src = simple_typical_pins; src->name && entries; src++) { + if (caps_limit && !src->caps_limit(pin_cfg->pin_caps, pin_cfg->wid_caps)) + continue; + if ((actual & src->match_mask) == (src->pin_set & src->match_mask)) + index = count; + *result = *src; + result++; + count++; + entries--; + } + if (entries) { + result->name = NULL; + } + return index; +} + +gboolean find_pin_channel_match(pin_configs_t* pins, int count, unsigned long pinval) +{ + int i; + pinval &= (AC_DEFCFG_DEF_ASSOC + AC_DEFCFG_SEQUENCE); + for (i = 0; i < count; i++, pins++) { + unsigned long val2 = actual_pin_config(pins); + if (get_port_conn(val2) == 1) + continue; + if (pinval == (val2 & (AC_DEFCFG_DEF_ASSOC + AC_DEFCFG_SEQUENCE))) + return TRUE; + } + return FALSE; +} + + diff --git a/hdajackretask/sysfs-pin-configs.h b/hdajackretask/sysfs-pin-configs.h new file mode 100644 index 0000000..d198f8b --- /dev/null +++ b/hdajackretask/sysfs-pin-configs.h @@ -0,0 +1,67 @@ +#ifndef __SYSFS_PIN_CONFIGS_H__ +#define __SYSFS_PIN_CONFIGS_H__ + +#include + +typedef struct codec_name_t { + int card; + int device; + gchar* name; +} codec_name_t; + +typedef struct pin_configs_t { + int nid; + unsigned long init_pin_config; + unsigned long driver_pin_config; + unsigned long user_pin_config; + unsigned long pin_caps; + unsigned long wid_caps; + gboolean user_override; + gboolean driver_override; +} pin_configs_t; + +typedef gboolean(*caps_limit_func_t)(unsigned long, unsigned long); + +typedef struct typical_pins_t { + char* name; + caps_limit_func_t caps_limit; + unsigned long pin_set; + unsigned long match_mask; + unsigned long pin_set_mask; +} typical_pins_t; + +typedef struct free_override_t { + const char* name; + unsigned long value; +} free_override_t; + +#define FREE_OVERRIDES_COUNT 8 + +free_override_t* get_free_override_list(int type); +unsigned long get_free_override_mask(int type); + +int get_codec_name_list(codec_name_t* names, int entries); + +int get_pin_configs_list(pin_configs_t* pins, int entries, int card, int device); + +gchar* get_config_description(unsigned long config); + +gchar* get_caps_description(unsigned long pin_caps); + +const gchar** get_standard_hint_names(); +gchar *get_hint_overrides(int card, int device); + + +/* 0 = Jack, 1 = N/A, 2 = Internal, 3 = Both (?!) */ +int get_port_conn(unsigned long config); + +int get_typical_pins(typical_pins_t* result, int entries, pin_configs_t* pin_cfg, int caps_limit); + +unsigned long actual_pin_config(pin_configs_t* pins); + +void get_codec_header(int card, int device, unsigned int* address, + unsigned int* codec_vendorid, unsigned int* codec_ssid); + +gboolean find_pin_channel_match(pin_configs_t* pins, int count, unsigned long pinval); + +#endif diff --git a/hdajacksensetest/Makefile.am b/hdajacksensetest/Makefile.am new file mode 100644 index 0000000..893b4e1 --- /dev/null +++ b/hdajacksensetest/Makefile.am @@ -0,0 +1,13 @@ +EXTRA_DIST = gitcompile +MYNAME = hdajacksensetest +AUTOMAKE_OPTIONS = foreign +bin_PROGRAMS = hdajacksensetest +AM_CFLAGS = @GLIB_CFLAGS@ -I "../hdajackretask/" -I "../hda-verb/" +hdajacksensetest_SOURCES = hdajacksensetest.c ../hdajackretask/sysfs-pin-configs.c +hdajacksensetest_LDADD = @GLIB_LIBS@ + +alsa-dist: distdir + @rm -rf ../distdir/$(MYNAME) + @mkdir -p ../distdir/$(MYNAME) + @cp -RLpv $(distdir)/* ../distdir/$(MYNAME) + @rm -rf $(distdir) diff --git a/hdajacksensetest/configure.ac b/hdajacksensetest/configure.ac new file mode 100644 index 0000000..fa9ae8e --- /dev/null +++ b/hdajacksensetest/configure.ac @@ -0,0 +1,10 @@ +AC_INIT(hdajacksensetest, 0.20141006) +AM_INIT_AUTOMAKE(subdir-objects) +AM_MAINTAINER_MODE([enable]) +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC + +PKG_CHECK_MODULES([GLIB], [glib-2.0]) + +AC_OUTPUT(Makefile) diff --git a/hdajacksensetest/gitcompile b/hdajacksensetest/gitcompile new file mode 100755 index 0000000..58328bd --- /dev/null +++ b/hdajacksensetest/gitcompile @@ -0,0 +1,13 @@ +#!/bin/bash + +aclocal $ACLOCAL_FLAGS || exit 1 +automake --foreign --add-missing || exit 1 +autoconf || exit 1 +export CFLAGS='-O2 -Wall -pipe -g' +echo "CFLAGS=$CFLAGS" +echo "./configure $@" +./configure $@ || exit 1 +unset CFLAGS +if [ -z "$GITCOMPILE_NO_MAKE" ]; then + make || exit 1 +fi diff --git a/hdajacksensetest/hdajacksensetest.c b/hdajacksensetest/hdajacksensetest.c new file mode 100644 index 0000000..cb8d9cd --- /dev/null +++ b/hdajacksensetest/hdajacksensetest.c @@ -0,0 +1,146 @@ +/* + * Checks the current pin/jack status of the codec + * + * Copyright (c) 2014 David Henningsson, Canonical Ltd. + * (With some minor pieces copy-pasted from hda-verb by Takashi Iwai) + * + * Licensed under GPL v2 or later. + */ + + +#include +#include +#include +#include +#include +#include +#include "sysfs-pin-configs.h" + +#include +#include +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +#include "hda_hwdep.h" + +gint card_index, codec_index; +gboolean try_all_pins, set_pin_sense; + +static GOptionEntry arg_entries[] = +{ + { "card", 'c', 0, G_OPTION_ARG_INT, &card_index, "card index (as can be seen in /proc/asound/cards)", "X" }, + { "codec", 'd', 0, G_OPTION_ARG_INT, &codec_index, "codec device index (as can be seen in /proc/asound/cardX/codecY)", "Y" }, + { "allpins", 'a', 0, G_OPTION_ARG_NONE, &try_all_pins, "try all pins, even those who (probably) does not have a physical jack", NULL }, + { "setpinsense", 's', 0, G_OPTION_ARG_NONE, &set_pin_sense, "execute 'Set pin sense' before the pin sense is measured", NULL }, + { NULL } +}; + +static void parse_command_line(int argc, char **argv) +{ + GError *error = NULL; + GOptionContext *context = g_option_context_new("- check current jack/pin sense"); + g_option_context_add_main_entries(context, arg_entries, NULL); + if (!g_option_context_parse (context, &argc, &argv, &error)) { + fprintf(stderr, "Option parsing failed: %s\n", error->message); + exit(1); + } + g_option_context_free(context); +} + + +static gboolean should_check_pin(pin_configs_t *pin) +{ + unsigned long defcfg = actual_pin_config(pin); + if (try_all_pins) + return TRUE; + if (get_port_conn(defcfg) != 0) + return FALSE; // Not a jack + if (defcfg & (1 << 8)) // Jack has NO_PRESENCE set + return FALSE; + return TRUE; +} + +int fd; + +static void codec_open() +{ + char filename[64]; + int version = 0; + + snprintf(filename, 64, "/dev/snd/hwC%dD%d", card_index, codec_index); + fd = open(filename, O_RDWR); + if (fd < 0) { + if (errno == EACCES) + fprintf(stderr, "Permission error (hint: this program usually requires root)\n"); + else + fprintf(stderr, "Ioctl call failed with error %d\n", errno); + exit(1); + } + + if (ioctl(fd, HDA_IOCTL_PVERSION, &version) < 0) { + fprintf(stderr, "Ioctl call failed with error %d\n", errno); + fprintf(stderr, "Looks like an invalid hwdep device...\n"); + close(fd); + exit(1); + } + if (version < HDA_HWDEP_VERSION) { + fprintf(stderr, "Invalid version number 0x%x\n", version); + fprintf(stderr, "Looks like an invalid hwdep device...\n"); + close(fd); + exit(1); + } +} + +static unsigned long codec_rw(int nid, int verb, int param) +{ + struct hda_verb_ioctl val; + + val.verb = HDA_VERB(nid, verb, param); + if (ioctl(fd, HDA_IOCTL_VERB_WRITE, &val) < 0) { + fprintf(stderr, "Ioctl call failed with error %d\n", errno); + close(fd); + exit(1); + } + return val.res; +} + +#define AC_VERB_GET_PIN_SENSE 0x0f09 +#define AC_VERB_SET_PIN_SENSE 0x709 + +#define MAX_PINS 32 + +pin_configs_t pin_configs[MAX_PINS]; + +int main(int argc, char **argv) +{ + int pin_count, i; + + parse_command_line(argc, argv); + pin_count = get_pin_configs_list(pin_configs, MAX_PINS, card_index, codec_index); + if (pin_count == 0) { + fprintf(stderr, "No pins found for card %d codec %d, did you pick the right one?\n", card_index, codec_index); + exit(1); + } + + codec_open(); + + if (set_pin_sense) { + for (i = 0; i < pin_count; i++) + if (should_check_pin(&pin_configs[i])) { + codec_rw(pin_configs[i].nid, AC_VERB_SET_PIN_SENSE, 0); + } + sleep(1); + } + + for (i = 0; i < pin_count; i++) + if (should_check_pin(&pin_configs[i])) { + gchar *desc = get_config_description(actual_pin_config(&pin_configs[i])); + unsigned long present = codec_rw(pin_configs[i].nid, AC_VERB_GET_PIN_SENSE, 0); + printf("Pin 0x%.2x (%s): present = %s\n", pin_configs[i].nid, desc, present & 0x80000000 ? "Yes" : "No"); + g_free(desc); + } + + close(fd); + return 0; +} diff --git a/hdspconf/COPYING b/hdspconf/COPYING index d60c31a..623b625 100644 --- a/hdspconf/COPYING +++ b/hdspconf/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/hdspconf/Makefile.am b/hdspconf/Makefile.am index e4a4bd8..3fdfb34 100644 --- a/hdspconf/Makefile.am +++ b/hdspconf/Makefile.am @@ -1,8 +1,5 @@ -EXTRA_DIST = gitcompile hdspconf.desktop depcomp -SUBDIRS = src pixmaps - -desktopdir = $(DESKTOP_DIR) -desktop_DATA = hdspconf.desktop +EXTRA_DIST = gitcompile depcomp +SUBDIRS = src pixmaps desktop alsa-dist: distdir @rm -rf ../distdir/hdspconf diff --git a/hdspconf/configure.in b/hdspconf/configure.ac similarity index 88% rename from hdspconf/configure.in rename to hdspconf/configure.ac index a32ff5f..e11d481 100644 --- a/hdspconf/configure.in +++ b/hdspconf/configure.ac @@ -1,5 +1,6 @@ -AC_INIT(src/hdspconf.cxx) -AM_INIT_AUTOMAKE(hdspconf, 1.4) +AC_INIT(hdspconf, 1.4) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CXX AC_PROG_MAKE_SET @@ -38,4 +39,4 @@ FLTK_LIBS=`$FLTK_CONFIG $fltk_config_args --ldflags` CXXFLAGS="$CXXFLAGS $ALSA_CFLAGS $FLTK_CXXFLAGS" LIBS="$LIBS $ALSA_LIBS $FLTK_LIBS" -AC_OUTPUT(Makefile src/Makefile pixmaps/Makefile) +AC_OUTPUT(Makefile src/Makefile pixmaps/Makefile desktop/Makefile) diff --git a/hdspconf/cvscompile b/hdspconf/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/hdspconf/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/hdspconf/desktop/Makefile.am b/hdspconf/desktop/Makefile.am new file mode 100644 index 0000000..c143498 --- /dev/null +++ b/hdspconf/desktop/Makefile.am @@ -0,0 +1,34 @@ +APPNAME = hdspconf + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/hdspconf/hdspconf.desktop b/hdspconf/desktop/hdspconf.desktop similarity index 57% rename from hdspconf/hdspconf.desktop rename to hdspconf/desktop/hdspconf.desktop index 732745c..3ce6429 100644 --- a/hdspconf/hdspconf.desktop +++ b/hdspconf/desktop/hdspconf.desktop @@ -1,10 +1,8 @@ [Desktop Entry] -Encoding=UTF-8 Name=HDSPConf Comment=Hammerfall DSP control application Exec=hdspconf -FilePattern=hdspconf -Icon=hdspconf.png +Icon=hdspconf Terminal=false Type=Application -Categories=Application;AudioVideo; +Categories=AudioVideo; diff --git a/hdspconf/pixmaps/hdspconf.png b/hdspconf/desktop/hicolor_apps_48x48_hdspconf.png similarity index 100% rename from hdspconf/pixmaps/hdspconf.png rename to hdspconf/desktop/hicolor_apps_48x48_hdspconf.png diff --git a/hdspconf/pixmaps/Makefile.am b/hdspconf/pixmaps/Makefile.am index d8b3822..7278f3b 100644 --- a/hdspconf/pixmaps/Makefile.am +++ b/hdspconf/pixmaps/Makefile.am @@ -1,4 +1 @@ -pixmapdir = $(PIXMAP_DIR) -pixmap_DATA = hdspconf.png - -EXTRA_DIST = $(wildcard *.xpm) hdspconf.png +EXTRA_DIST = $(wildcard *.xpm) diff --git a/hdspconf/pixmaps/alsalogo.xpm b/hdspconf/pixmaps/alsalogo.xpm index b32c32d..cd22dd2 100644 --- a/hdspconf/pixmaps/alsalogo.xpm +++ b/hdspconf/pixmaps/alsalogo.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * alsalogo_xpm[] = { +const char * alsalogo_xpm[] = { "50 50 398 2", " c None", ". c #C0C0C0", diff --git a/hdspconf/pixmaps/lad_banner.xpm b/hdspconf/pixmaps/lad_banner.xpm index 8bb8545..11d4357 100644 --- a/hdspconf/pixmaps/lad_banner.xpm +++ b/hdspconf/pixmaps/lad_banner.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * lad_banner_xpm[] = { +const char * lad_banner_xpm[] = { "113 39 1833 2", " c None", ". c #C0C0C0", diff --git a/hdspconf/pixmaps/rme.xpm b/hdspconf/pixmaps/rme.xpm index a892603..b94fa7e 100644 --- a/hdspconf/pixmaps/rme.xpm +++ b/hdspconf/pixmaps/rme.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * rme_xpm[] = { +const char * rme_xpm[] = { "113 35 2300 2", " c None", ". c #030505", diff --git a/hdspconf/src/HC_AboutText.cxx b/hdspconf/src/HC_AboutText.cxx index 4014bf1..2205d15 100644 --- a/hdspconf/src/HC_AboutText.cxx +++ b/hdspconf/src/HC_AboutText.cxx @@ -39,7 +39,7 @@ HC_AboutText::HC_AboutText(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "Ab void HC_AboutText::draw() { - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw(text, x(), y(), w(), h(), FL_ALIGN_LEFT); } diff --git a/hdspconf/src/HC_AboutText.h b/hdspconf/src/HC_AboutText.h index 2a76c40..1b579e5 100644 --- a/hdspconf/src/HC_AboutText.h +++ b/hdspconf/src/HC_AboutText.h @@ -32,7 +32,7 @@ public: HC_AboutText(int x, int y, int w, int h); void draw(); private: - char *text; + const char *text; }; #endif diff --git a/hdspconf/src/HC_Aeb.cxx b/hdspconf/src/HC_Aeb.cxx index d7a98d6..6df4848 100644 --- a/hdspconf/src/HC_Aeb.cxx +++ b/hdspconf/src/HC_Aeb.cxx @@ -21,7 +21,7 @@ #pragma implementation #include "HC_Aeb.h" -static void setAebStatus(char *ctl_name, int val, int card_index) +static void setAebStatus(const char *ctl_name, int val, int card_index) { int err; char card_name[6]; diff --git a/hdspconf/src/HC_AutoSyncRef.cxx b/hdspconf/src/HC_AutoSyncRef.cxx index f20bbad..4f569e4 100644 --- a/hdspconf/src/HC_AutoSyncRef.cxx +++ b/hdspconf/src/HC_AutoSyncRef.cxx @@ -37,7 +37,7 @@ void HC_AutoSyncRef::draw() fl_color(FL_BACKGROUND_COLOR); fl_rectf(x(), y(), w(), h()); draw_box(x(), y(), w(), h(), FL_WHITE); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw("Input", x()+4, y(), w()/2, h()/2, FL_ALIGN_LEFT); fl_draw(ref[external_ref], x()+w()/2-4, y(), w()/2, h()/2, FL_ALIGN_CENTER); diff --git a/hdspconf/src/HC_BreakoutCable.cxx b/hdspconf/src/HC_BreakoutCable.cxx index 89d3ec8..0d7edcb 100644 --- a/hdspconf/src/HC_BreakoutCable.cxx +++ b/hdspconf/src/HC_BreakoutCable.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_BreakoutCable.h" -static void setXlrStatus(char *ctl_name, int val, int card_index) +static void setXlrStatus(const char *ctl_name, int val, int card_index) { int err; char card_name[6]; @@ -67,7 +67,7 @@ HC_BreakoutCable::HC_BreakoutCable(int x, int y, int w, int h):Fl_Group(x, y, w, xlr = new Fl_Check_Button(x+15, y, w-30, 20, "XLR"); xlr->labelsize(10); xlr->callback(xlr_cb, (void *)parent()); - end(); + end(); } void HC_BreakoutCable::setXlr(unsigned char val) diff --git a/hdspconf/src/HC_CardPane.cxx b/hdspconf/src/HC_CardPane.cxx index 8371dbc..1e346b7 100644 --- a/hdspconf/src/HC_CardPane.cxx +++ b/hdspconf/src/HC_CardPane.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_CardPane.h" -extern char *card_names[5]; +extern const char *card_names[5]; HC_CardPane::HC_CardPane(int alsa_idx, int idx, HDSP_IO_Type t):Fl_Group(PANE_X, PANE_Y, PANE_W, PANE_H) { @@ -39,20 +39,20 @@ HC_CardPane::HC_CardPane(int alsa_idx, int idx, HDSP_IO_Type t):Fl_Group(PANE_X, spdif_in = new HC_SpdifIn(x()+166, y()+20, 148, V_STEP*3); spdif_out = new HC_SpdifOut(x()+166, y()+40+V_STEP*3, 148, V_STEP*4); spdif_freq = new HC_SpdifFreq(x()+166, y()+60+V_STEP*7, 148, V_STEP); - + sync_ref = new HC_PrefSyncRef(x()+323, y()+20, 148, V_STEP*4); autosync_ref = new HC_AutoSyncRef(x()+323, y()+40+V_STEP*4, 148, V_STEP*2); system_clock = new HC_SystemClock(x()+323, y()+60+V_STEP*6, 148, V_STEP*2); } else if (type == Digiface) { - + clock_source = new HC_ClockSource(x()+9, y()+20, 148, V_STEP*7); sync_check = new HC_SyncCheck(x()+9, y()+40+V_STEP*7, 148, V_STEP*6); spdif_in = new HC_SpdifIn(x()+166, y()+20, 148, V_STEP*3); spdif_out = new HC_SpdifOut(x()+166, y()+40+V_STEP*3, 148, V_STEP*4); spdif_freq = new HC_SpdifFreq(x()+166, y()+60+V_STEP*7, 148, V_STEP); - + sync_ref = new HC_PrefSyncRef(x()+323, y()+20, 148, V_STEP*6); autosync_ref = new HC_AutoSyncRef(x()+323, y()+40+V_STEP*6, 148, V_STEP*2); system_clock = new HC_SystemClock(x()+323, y()+60+V_STEP*8, 148, V_STEP*2); @@ -65,7 +65,7 @@ HC_CardPane::HC_CardPane(int alsa_idx, int idx, HDSP_IO_Type t):Fl_Group(PANE_X, spdif_in = new HC_SpdifIn(x()+166, y()+20, 148, V_STEP*3); spdif_out = new HC_SpdifOut(x()+166, y()+40+V_STEP*3, 148, V_STEP*4); spdif_freq = new HC_SpdifFreq(x()+166, y()+60+V_STEP*7, 148, V_STEP); - + aeb = new HC_Aeb(x()+323, y()+20, 148, V_STEP); sync_ref = new HC_PrefSyncRef(x()+323, y()+40+V_STEP, 148, V_STEP*6); autosync_ref = new HC_AutoSyncRef(x()+323, y()+60+V_STEP*7, 148, V_STEP*2); @@ -78,17 +78,17 @@ HC_CardPane::HC_CardPane(int alsa_idx, int idx, HDSP_IO_Type t):Fl_Group(PANE_X, spdif_in = new HC_SpdifIn(x()+126, y()+20, 110, V_STEP*4); spdif_out = new HC_SpdifOut(x()+126, y()+40+V_STEP*4, 110, V_STEP*4); spdif_freq = new HC_SpdifFreq(x()+126, y()+60+V_STEP*8, 110, V_STEP); - + aeb = new HC_Aeb(x()+244, y()+20, 110, V_STEP); sync_ref = new HC_PrefSyncRef(x()+244, y()+40+V_STEP, 110, V_STEP*3); autosync_ref = new HC_AutoSyncRef(x()+244, y()+60+V_STEP*4, 110, V_STEP*2); system_clock = new HC_SystemClock(x()+244, y()+80+V_STEP*6, 110, V_STEP*2); - + breakout_cable = new HC_BreakoutCable(x()+362, y()+20, 110, V_STEP); input_level = new HC_InputLevel(x()+362, y()+40+V_STEP, 110, V_STEP*3); output_level = new HC_OutputLevel(x()+362, y()+60+V_STEP*4, 110, V_STEP*3); phones = new HC_Phones(x()+362, y()+80+V_STEP*7, 110, V_STEP*3); - + } end(); } diff --git a/hdspconf/src/HC_ClockSource.cxx b/hdspconf/src/HC_ClockSource.cxx index 4bb978a..d7b2a07 100644 --- a/hdspconf/src/HC_ClockSource.cxx +++ b/hdspconf/src/HC_ClockSource.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_ClockSource.h" -extern char *freqs[10]; +extern const char *freqs[10]; void clock_source_cb(Fl_Widget *w, void *arg) { @@ -55,7 +55,7 @@ void clock_source_cb(Fl_Widget *w, void *arg) } else if (source == cs->khz192) { src = 9; } - + snprintf(card_name, 6, "hw:%i", pane->alsa_index); snd_ctl_elem_value_alloca(&ctl); snd_ctl_elem_id_alloca(&id); @@ -67,7 +67,7 @@ void clock_source_cb(Fl_Widget *w, void *arg) if ((err = snd_ctl_open(&handle, card_name, SND_CTL_NONBLOCK)) < 0) { fprintf(stderr, "Error opening ctl interface on card %s\n", card_name); return; - } + } if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM); snd_ctl_elem_value_set_id(ctl, id); @@ -111,7 +111,7 @@ HC_ClockSource::HC_ClockSource(int x, int y, int w, int h):Fl_Group(x, y, w, h, khz176_4->labelsize(10); khz176_4->type(FL_RADIO_BUTTON); khz192 = new Fl_Round_Button(x+10, y+V_STEP*i++, w-20, V_STEP, freqs[9]); - khz192->callback(clock_source_cb, (void *)this); + khz192->callback(clock_source_cb, (void *)this); khz192->labelsize(10); khz192->type(FL_RADIO_BUTTON); } @@ -129,7 +129,7 @@ HC_ClockSource::HC_ClockSource(int x, int y, int w, int h):Fl_Group(x, y, w, h, khz88_2->type(FL_RADIO_BUTTON); khz96->labelsize(10); khz96->type(FL_RADIO_BUTTON); - end(); + end(); } void HC_ClockSource::setSource(unsigned char s) diff --git a/hdspconf/src/HC_PrefSyncRef.h b/hdspconf/src/HC_PrefSyncRef.h index 5ef8875..8c3a71f 100644 --- a/hdspconf/src/HC_PrefSyncRef.h +++ b/hdspconf/src/HC_PrefSyncRef.h @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -42,7 +42,7 @@ public: Fl_Round_Button *adat_sync; void setRef(int r); private: - char *adat_name; + const char *adat_name; }; #endif diff --git a/hdspconf/src/HC_SpdifFreq.cxx b/hdspconf/src/HC_SpdifFreq.cxx index 0fed38f..894058b 100644 --- a/hdspconf/src/HC_SpdifFreq.cxx +++ b/hdspconf/src/HC_SpdifFreq.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_SpdifFreq.h" -extern char *freqs[10]; +extern const char *freqs[10]; HC_SpdifFreq::HC_SpdifFreq(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "SPDIF Freq.") { @@ -37,7 +37,7 @@ void HC_SpdifFreq::draw() fl_color(FL_BACKGROUND_COLOR); fl_rectf(x(), y(), w(), h()); draw_box(x(), y(), w(), h(), FL_WHITE); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw(freqs[spdif_freq], x(), y(), w(), h(), FL_ALIGN_CENTER); } diff --git a/hdspconf/src/HC_SpdifOut.cxx b/hdspconf/src/HC_SpdifOut.cxx index 71c7bfe..674140b 100644 --- a/hdspconf/src/HC_SpdifOut.cxx +++ b/hdspconf/src/HC_SpdifOut.cxx @@ -21,7 +21,7 @@ #pragma implementation #include "HC_SpdifOut.h" -static void setSpdifBit(char *ctl_name, int val, int card_index) +static void setSpdifBit(const char *ctl_name, int val, int card_index) { int err; char card_name[6]; diff --git a/hdspconf/src/HC_SyncCheck.cxx b/hdspconf/src/HC_SyncCheck.cxx index 4a088ba..bd03d35 100644 --- a/hdspconf/src/HC_SyncCheck.cxx +++ b/hdspconf/src/HC_SyncCheck.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_SyncCheck.h" -extern char *lock_status[3]; +extern const char *lock_status[3]; HC_SyncCheck::HC_SyncCheck(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "SyncCheck") { @@ -35,7 +35,7 @@ HC_SyncCheck::HC_SyncCheck(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "Sy adat_name = "ADAT In"; } else { adat_name = "ADAT1 In"; - } + } h_step = (int)(w/2.0f); draw_box = Fl::get_boxtype(FL_ENGRAVED_FRAME); label("SyncCheck"); @@ -50,7 +50,7 @@ void HC_SyncCheck::draw() fl_color(FL_BACKGROUND_COLOR); fl_rectf(x(), y(), w(), h()); draw_box(x(), y(), w(), h(), FL_WHITE); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw(adat_name, x()+h_pos, y()+V_STEP*i, h_step, V_STEP, FL_ALIGN_LEFT); fl_draw(lock_status[adat1_lock_status], x()+h_pos+h_step, y()+V_STEP*i++, h_step-h_pos, V_STEP, FL_ALIGN_CENTER); diff --git a/hdspconf/src/HC_SyncCheck.h b/hdspconf/src/HC_SyncCheck.h index 6aa6d13..c79d21f 100644 --- a/hdspconf/src/HC_SyncCheck.h +++ b/hdspconf/src/HC_SyncCheck.h @@ -51,7 +51,7 @@ public: void setAdatSyncStatus(unsigned char s); void setWCStatus(unsigned char s); private: - char *adat_name; + const char *adat_name; int h_step; Fl_Box_Draw_F *draw_box; }; diff --git a/hdspconf/src/HC_SystemClock.cxx b/hdspconf/src/HC_SystemClock.cxx index f1f88bb..a7ce675 100644 --- a/hdspconf/src/HC_SystemClock.cxx +++ b/hdspconf/src/HC_SystemClock.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_SystemClock.h" -extern char *freqs[10]; +extern const char *freqs[10]; HC_SystemClock::HC_SystemClock(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "System Clock") { @@ -38,7 +38,7 @@ void HC_SystemClock::draw() fl_color(FL_BACKGROUND_COLOR); fl_rectf(x(), y(), w(), h()); draw_box(x(), y(), w(), h(), FL_WHITE); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw("Mode", x()+4, y(), w()/2, h()/2, FL_ALIGN_LEFT); fl_draw(system_mode ? "Slave" : "Master", x()+w()/2-4, y(), w()/2, h()/2, FL_ALIGN_CENTER); diff --git a/hdspconf/src/HC_XpmRenderer.cxx b/hdspconf/src/HC_XpmRenderer.cxx index 72742f8..ed66d4d 100644 --- a/hdspconf/src/HC_XpmRenderer.cxx +++ b/hdspconf/src/HC_XpmRenderer.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,7 +21,7 @@ #pragma implementation #include "HC_XpmRenderer.h" -HC_XpmRenderer::HC_XpmRenderer(int x, int y, int w, int h, char * const *xpm):Fl_Widget(x, y, w, h) +HC_XpmRenderer::HC_XpmRenderer(int x, int y, int w, int h, const char * const *xpm):Fl_Widget(x, y, w, h) { pixmap = xpm; } diff --git a/hdspconf/src/HC_XpmRenderer.h b/hdspconf/src/HC_XpmRenderer.h index 3c6f768..1e18541 100644 --- a/hdspconf/src/HC_XpmRenderer.h +++ b/hdspconf/src/HC_XpmRenderer.h @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -30,10 +30,10 @@ class HC_XpmRenderer:public Fl_Widget { public: - HC_XpmRenderer(int x, int y, int w, int h, char * const *xpm); + HC_XpmRenderer(int x, int y, int w, int h, const char * const *xpm); void draw(); private: - char * const *pixmap; + const char * const *pixmap; }; #endif diff --git a/hdspconf/src/labels.cxx b/hdspconf/src/labels.cxx index 59880b6..f8900be 100644 --- a/hdspconf/src/labels.cxx +++ b/hdspconf/src/labels.cxx @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -20,7 +20,7 @@ #include "labels.h" -char *card_names[5] = { +const char *card_names[5] = { "Digiface", "Multiface", "HDSP9652", @@ -28,7 +28,7 @@ char *card_names[5] = { "Undefined", }; -char *freqs[10] = { +const char *freqs[10] = { "32.0 kHz", "44.1 kHz", "48.0 kHz", @@ -41,7 +41,7 @@ char *freqs[10] = { "192.0 kHz", }; -char *ref[7] = { +const char *ref[7] = { "Word Clock", "ADAT Sync", "SPDIF", @@ -51,7 +51,7 @@ char *ref[7] = { "ADAT3" }; -char *lock_status[3] = { +const char *lock_status[3] = { "No Lock", "Lock", "Sync" diff --git a/hdspconf/src/labels.h b/hdspconf/src/labels.h index 42964c0..da996f9 100644 --- a/hdspconf/src/labels.h +++ b/hdspconf/src/labels.h @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,10 +21,10 @@ #ifndef LABELS_H #define LABELS_H -extern char *card_names[5]; -extern char *freqs[10]; -extern char *ref[7]; -extern char *lock_status[3]; +extern const char *card_names[5]; +extern const char *freqs[10]; +extern const char *ref[7]; +extern const char *lock_status[3]; #endif diff --git a/hdspconf/src/pixmaps.h b/hdspconf/src/pixmaps.h index c193ed2..4c5aa65 100644 --- a/hdspconf/src/pixmaps.h +++ b/hdspconf/src/pixmaps.h @@ -1,8 +1,8 @@ /* * HDSPConf - * + * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,9 +21,9 @@ #ifndef pixmaps_H #define pixmaps_H -extern char * rme_xpm[]; -extern char * alsalogo_xpm[]; -extern char * lad_banner_xpm[]; +extern const char * rme_xpm[]; +extern const char * alsalogo_xpm[]; +extern const char * lad_banner_xpm[]; #endif diff --git a/hdsploader/COPYING b/hdsploader/COPYING index d60c31a..623b625 100644 --- a/hdsploader/COPYING +++ b/hdsploader/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/hdsploader/configure.in b/hdsploader/configure.ac similarity index 66% rename from hdsploader/configure.in rename to hdsploader/configure.ac index 4801124..0ada4e6 100644 --- a/hdsploader/configure.in +++ b/hdsploader/configure.ac @@ -1,5 +1,6 @@ -AC_INIT(hdsploader.c) -AM_INIT_AUTOMAKE(hdsploader, 1.2) +AC_INIT(hdsploader, 1.2) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/hdsploader/cvscompile b/hdsploader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/hdsploader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/hdsploader/hdsploader.c b/hdsploader/hdsploader.c index d1855b1..9199c3a 100644 --- a/hdsploader/hdsploader.c +++ b/hdsploader/hdsploader.c @@ -27,6 +27,10 @@ static u_int32_t code[24413]; +#ifndef RPM +# define RPM 4 +#endif + int read_bin_file(u_int32_t *array, const char *filename) { FILE *out; @@ -86,6 +90,9 @@ void upload_firmware(int card) err = read_bin_file(code, DATAPATH "/digiface_firmware_rev11.bin"); } break; + case RPM: + err = read_bin_file(code, DATAPATH "/rpm_firmware.bin"); + break; default: fprintf(stderr, "Unknown iobox or firmware revision\n"); snd_hwdep_close(hw); diff --git a/hdspmixer/COPYING b/hdspmixer/COPYING index d60c31a..623b625 100644 --- a/hdspmixer/COPYING +++ b/hdspmixer/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/hdspmixer/Makefile.am b/hdspmixer/Makefile.am index 86a759c..85c1177 100644 --- a/hdspmixer/Makefile.am +++ b/hdspmixer/Makefile.am @@ -1,8 +1,5 @@ -EXTRA_DIST = gitcompile hdspmixer.desktop depcomp -SUBDIRS = src pixmaps - -desktopdir = $(DESKTOP_DIR) -desktop_DATA = hdspmixer.desktop +EXTRA_DIST = gitcompile depcomp +SUBDIRS = src pixmaps desktop alsa-dist: distdir @rm -rf ../distdir/hdspmixer diff --git a/hdspmixer/NEWS b/hdspmixer/NEWS index cbe95d8..f4900d0 100644 --- a/hdspmixer/NEWS +++ b/hdspmixer/NEWS @@ -1,3 +1,17 @@ +Version 1.11 (2011-03-22): + * Fix ALSA snd_ctl_open error when running with three cards. + * Fix metering for non-MADI cards + * Fix labels on H9652 + * Fix preset activation segfault on AES(32) + * Adjust playback channel count on Multiface + * Provide headphones out on Multiface/Digiface + * Update pixmaps + * Save and restore level meter settings + WARNING: New mix files cannot be read by older versions of hdspmixers + +Version 1.10 (2011-02-24): + * Add support for RME MADI, RayDAT, AES, AES32 and AIO + Version 1.6 (24/11/2003): * Fixes compilation warnings * AutoSync sample rate detection scheme changed diff --git a/hdspmixer/configure.ac b/hdspmixer/configure.ac new file mode 100644 index 0000000..167e4f4 --- /dev/null +++ b/hdspmixer/configure.ac @@ -0,0 +1,23 @@ +AC_INIT(hdspmixer, 1.11) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) + +AC_PROG_CXX +AC_PROG_MAKE_SET +AC_STDC_HEADERS +AC_PATH_X + +AM_PATH_ALSA(1.0.0) + +dnl library check +AC_PATH_PROG(FLTK_CONFIG, fltk-config, no) +if test "$FLTK_CONFIG" = "no" && ! test "`hostname -f`" = "alsa.alsa-project.org"; then + AC_MSG_ERROR(fltk-config is required) +fi +FLTK_CXXFLAGS="`$FLTK_CONFIG --cxxflags` -fno-exceptions" +FLTK_LIBS="`$FLTK_CONFIG --ldflags`" + +CXXFLAGS="$CXXFLAGS $ALSA_CFLAGS $FLTK_CXXFLAGS" +LIBS="$LIBS $ALSA_LIBS $FLTK_LIBS" + +AC_OUTPUT(Makefile src/Makefile pixmaps/Makefile desktop/Makefile) diff --git a/hdspmixer/configure.in b/hdspmixer/configure.in deleted file mode 100644 index 8f2c498..0000000 --- a/hdspmixer/configure.in +++ /dev/null @@ -1,41 +0,0 @@ -AC_INIT(src/hdspmixer.cxx) -AM_INIT_AUTOMAKE(hdspmixer, 1.6) - -AC_PROG_CXX -AC_PROG_MAKE_SET -AC_STDC_HEADERS -AC_PATH_X - -AM_PATH_ALSA(1.0.0) - -dnl desktop install -AC_ARG_WITH(desktop-dir, - [ --with-desktop-dir specify the path to install desktop file], - [desktopdir="$withval"], [desktopdir=""]) -if test -z "$desktopdir"; then - desktopdir=$datadir/applications -fi -DESKTOP_DIR="$desktopdir" -AC_SUBST(DESKTOP_DIR) - -AC_ARG_WITH(pixmap-dir, - [ --with-pixmap-dir specify the path to install desktop pixmap file], - [pixmapdir="$withval"], [pixmapdir=""]) -if test -z "$pixmapdir"; then - pixmapdir=$datadir/pixmaps -fi -PIXMAP_DIR="$pixmapdir" -AC_SUBST(PIXMAP_DIR) - -dnl library check -AC_PATH_PROG(FLTK_CONFIG, fltk-config, no) -if test "$FLTK_CONFIG" = "no" && ! test "`hostname -f`" = "alsa.alsa-project.org"; then - AC_MSG_ERROR(fltk-config is required) -fi -FLTK_CXXFLAGS="`$FLTK_CONFIG --cxxflags` -fno-exceptions" -FLTK_LIBS="`$FLTK_CONFIG --ldflags`" - -CXXFLAGS="$CXXFLAGS $ALSA_CFLAGS $FLTK_CXXFLAGS" -LIBS="$LIBS $ALSA_LIBS $FLTK_LIBS" - -AC_OUTPUT(Makefile src/Makefile pixmaps/Makefile) diff --git a/hdspmixer/cvscompile b/hdspmixer/cvscompile deleted file mode 100755 index 3a5537d..0000000 --- a/hdspmixer/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/hdspmixer/desktop/Makefile.am b/hdspmixer/desktop/Makefile.am new file mode 100644 index 0000000..adafcd8 --- /dev/null +++ b/hdspmixer/desktop/Makefile.am @@ -0,0 +1,34 @@ +APPNAME = hdspmixer + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/hdspmixer/hdspmixer.desktop b/hdspmixer/desktop/hdspmixer.desktop similarity index 58% rename from hdspmixer/hdspmixer.desktop rename to hdspmixer/desktop/hdspmixer.desktop index eb5615e..4cfee66 100644 --- a/hdspmixer/hdspmixer.desktop +++ b/hdspmixer/desktop/hdspmixer.desktop @@ -1,10 +1,8 @@ [Desktop Entry] -Encoding=UTF-8 Name=HDSPMixer Comment=Hammerfall DSP matrix mixer control GUI Exec=hdspmixer -FilePattern=hdspmixer -Icon=hdspmixer.png +Icon=hdspmixer Terminal=false Type=Application -Categories=Application;AudioVideo; +Categories=AudioVideo; diff --git a/hdspmixer/pixmaps/hdspmixer.png b/hdspmixer/desktop/hicolor_apps_48x48_hdspmixer.png similarity index 100% rename from hdspmixer/pixmaps/hdspmixer.png rename to hdspmixer/desktop/hicolor_apps_48x48_hdspmixer.png diff --git a/hdspmixer/pixmaps/Makefile.am b/hdspmixer/pixmaps/Makefile.am index c81fc95..c1cdf2c 100644 --- a/hdspmixer/pixmaps/Makefile.am +++ b/hdspmixer/pixmaps/Makefile.am @@ -1,4 +1,3 @@ pixmapdir = $(PIXMAP_DIR) -pixmap_DATA = hdspmixer.png -EXTRA_DIST = $(wildcard *.xpm) hdspmixer.png +EXTRA_DIST = $(wildcard *.xpm) diff --git a/hdspmixer/pixmaps/Slider1.xpm b/hdspmixer/pixmaps/Slider1.xpm index 017f4d2..fac74ff 100644 --- a/hdspmixer/pixmaps/Slider1.xpm +++ b/hdspmixer/pixmaps/Slider1.xpm @@ -1,272 +1,44 @@ /* XPM */ -char * Slider1_xpm[] = { -"13 12 257 2", -" c None", -". c #000000", -"+ c #101010", -"@ c #181010", -"# c #202018", -"$ c #202020", -"% c #202920", -"& c #292920", -"* c #292929", -"= c #313129", -"- c #313131", -"; c #393939", -"> c #4A4A41", -", c #4A4A4A", -"' c #4A524A", -") c #5A524A", -"! c #626A62", -"~ c #6A6A62", -"{ c #7B736A", -"] c #7B7B73", -"^ c #7B8373", -"/ c #83837B", -"( c #8B8B83", -"_ c #94948B", -": c #9C9C9C", -"< c #A4A49C", -"[ c #ACACA4", -"} c #B4B4AC", -"| c #BDBDB4", -"1 c #C5C5BD", -"2 c #D5D5CD", -"3 c #DEDED5", -"4 c #EEEEEE", -"5 c #F6F6F6", -"6 c #00FF99", -"7 c #00FFCC", -"8 c #00FFFF", -"9 c #330000", -"0 c #330033", -"a c #330066", -"b c #330099", -"c c #3300CC", -"d c #3300FF", -"e c #333300", -"f c #333333", -"g c #333366", -"h c #333399", -"i c #3333CC", -"j c #3333FF", -"k c #336600", -"l c #336633", -"m c #336666", -"n c #336699", -"o c #3366CC", -"p c #3366FF", -"q c #339900", -"r c #339933", -"s c #339966", -"t c #339999", -"u c #3399CC", -"v c #3399FF", -"w c #33CC00", -"x c #33CC33", -"y c #33CC66", -"z c #33CC99", -"A c #33CCCC", -"B c #33CCFF", -"C c #33FF00", -"D c #33FF33", -"E c #33FF66", -"F c #33FF99", -"G c #33FFCC", -"H c #33FFFF", -"I c #660000", -"J c #660033", -"K c #660066", -"L c #660099", -"M c #6600CC", -"N c #6600FF", -"O c #663300", -"P c #663333", -"Q c #663366", -"R c #663399", -"S c #6633CC", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0E4C00", -"p+ c #0A0080", -"q+ c #000403", -"r+ c #BE0F17", -"s+ c #0F3404", -"t+ c #7B04BC", -"u+ c #04BD0A", -"v+ c #05050A", -"w+ c #17F700", -"x+ c #A0035A", -"y+ c #019A14", -"z+ c #64176E", -"A+ c #186604", -"B+ c #57019D", -"C+ c #035917", -"D+ c #01030B", -"E+ c #0CF000", -"F+ c #5C0072", -"G+ c #00710C", -"H+ c #B2006C", -"| / / / / / / / / / / / ' ", -"| 2 5 5 5 5 5 5 5 4 | ] / ", -"[ } 2 2 2 2 2 2 2 2 ( ) ; ", -"[ [ / / / / / / / ^ { , - ", -": { - ; - ; - ; - - = $ & ", -"~ # - - - - - - - - - - # ", -"< [ _ _ _ _ _ _ _ _ ( ! & ", -"^ [ 3 3 3 3 3 3 3 2 / @ . ", -"~ ] < 2 2 2 2 2 2 < = ; . ", -"! ] < < < < < < < < - ; . ", -"' ~ * * * * * * * % + ; . ", -"' ; ; ; ; ; ; ; ; . ; . ; "}; +char const * Slider1_xpm[] = { +"13 12 29 1", +" c #484858", +". c #565668", +"+ c #B4B4C4", +"@ c #8F8F9F", +"# c #3A3A48", +"$ c #C8C8D8", +"% c #A3A3B3", +"& c #7E7E8E", +"* c #BFBFCF", +"= c #9A9AAA", +"- c #747484", +"; c #B1B1C1", +"> c #8C8C9C", +", c #676777", +"' c #9B9BAB", +") c #767686", +"! c #515161", +"~ c #CBCBDB", +"{ c #B6B6C6", +"] c #9191A1", +"^ c #C5C5D5", +"/ c #A0A0B0", +"( c #7B7B8B", +"_ c #B0B0C0", +": c #8B8B9B", +"< c #666676", +"[ c #565666", +"} c #707080", +"| c #4C4C5C", +" ........... ", +".++++++++++@#", +".$%%%%%%%%%&#", +".*=========-#", +".;>>>>>>>>>,#", +".')))))))))!#", +".~{{{{{{{{{]#", +".^/////////(#", +"._:::::::::<#", +"./((((((((([#", +".}||||||||||#", +" ########### "}; diff --git a/hdspmixer/pixmaps/Slider2.xpm b/hdspmixer/pixmaps/Slider2.xpm index f7d76b1..743b5cf 100644 --- a/hdspmixer/pixmaps/Slider2.xpm +++ b/hdspmixer/pixmaps/Slider2.xpm @@ -1,5 +1,5 @@ /* XPM */ -char * Slider2_xpm[] = { +char const * Slider2_xpm[] = { "2 13 257 2", " c None", ". c #7DF846", diff --git a/hdspmixer/pixmaps/Zlmloop2.xpm b/hdspmixer/pixmaps/Zlmloop2.xpm index 42377c9..76b3ecb 100644 --- a/hdspmixer/pixmaps/Zlmloop2.xpm +++ b/hdspmixer/pixmaps/Zlmloop2.xpm @@ -1,513 +1,442 @@ /* XPM */ -char * Zlmloop2_xpm[] = { -"76 253 257 2", -" c None", -". c #D1E0E5", -"+ c #E7F6F9", -"@ c #F2FFFF", -"# c #FBFFFF", +char const * Zlmloop2_xpm[] = { +"76 253 186 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", "$ c #FFFFFF", -"% c #C4CACB", -"& c #C7D5D9", -"* c #BECDD2", -"= c #B8C5C9", -"- c #AEBDC1", -"; c #B2BDC2", -"> c #A0A09F", -", c #B5B6B6", -"' c #A9B5B9", -") c #A2ADB2", -"! c #A1ACAE", -"~ c #AAAAAA", -"{ c #A6A6A6", -"] c #A0A0A0", -"^ c #9CA5A9", -"/ c #9F9FA0", -"( c #939DA1", -"_ c #9FA09F", -": c #A09F9F", -"< c #90928F", -"[ c #949A9B", -"} c #9B9C9B", -"| c #9D9E9D", -"1 c #999A99", -"2 c #969896", -"3 c #919391", -"4 c #959795", -"5 c #929592", -"6 c #899497", -"7 c #8C969A", -"8 c #8A9395", -"9 c #848E91", -"0 c #8C918C", -"a c #8D918D", -"b c #888C87", -"c c #8B8E8B", -"d c #898D89", -"e c #8A8E8A", -"f c #828B8D", -"g c #868C86", -"h c #858A85", -"i c #828982", -"j c #818587", -"k c #818681", -"l c #7C8789", -"m c #7D8689", -"n c #7B8385", -"o c #D170D1", -"p c #C54CC5", -"q c #A837A8", -"r c #902F90", -"s c #7070D1", -"t c #4C4CC5", -"u c #757E81", -"v c #3737A8", -"w c #2F2F90", -"x c #80857F", -"y c #7F887F", -"z c #7E847E", -"A c #7E817E", -"B c #7A807A", -"C c #708070", -"D c #6E716E", -"E c #737877", -"F c #787F78", -"G c #737B7C", -"H c #747C73", -"I c #767D76", -"J c #747C74", -"K c #757B75", -"L c #747B74", -"M c #737B74", -"N c #747B73", -"O c #727972", -"P c #737B73", -"Q c #717971", -"R c #707870", -"S c #6D7679", -"T c #6C7274", -"U c #686E71", -"V c #70786F", -"W c #707060", -"X c #616669", -"Y c #696C6A", -"Z c #6D6E6D", -"` c #6F6F6F", -" . c #646B6D", -".. c #666966", -"+. c #626563", -"@. c #616561", -"#. c #5C6365", -"$. c #595F61", -"%. c #5F685F", -"&. c #5B605B", -"*. c #5E615E", -"=. c #506050", -"-. c #494F51", -";. c #545A5C", -">. c #5A5D5A", -",. c #5A5E5A", -"'. c #595C59", -"). c #545954", -"!. c #565956", -"~. c #575A56", -"{. c #555855", -"]. c #535654", -"^. c #545554", -"/. c #545754", -"(. c #515651", -"_. c #535653", -":. c #525552", -"<. c #515451", -"[. c #515551", -"}. c #505450", -"|. c #515251", -"1. c #515351", -"2. c #505350", -"3. c #4D5254", -"4. c #50584F", -"5. c #50544F", -"6. c #4F584F", -"7. c #4C504B", -"8. c #4F544F", -"9. c #4E524D", -"0. c #4E534E", -"a. c #4F534F", -"b. c #4F524F", -"c. c #4E524E", -"d. c #4F514F", -"e. c #4F504F", -"f. c #4E514E", -"g. c #4D524D", -"h. c #4C514C", -"i. c #4D514D", -"j. c #4D504D", -"k. c #4C504C", -"l. c #4B504B", -"m. c #405040", -"n. c #45494B", -"o. c #4A4E4E", -"p. c #4D4E4D", -"q. c #4C4E4C", -"r. c #4C4F4C", -"s. c #494E49", -"t. c #4A4F4A", -"u. c #4B4F4B", -"v. c #4B4E4B", -"w. c #4A4E4A", -"x. c #4B4C4B", -"y. c #4A4D4A", -"z. c #484D48", -"A. c #494D49", -"B. c #494C49", -"C. c #484C48", -"D. c #494A49", -"E. c #484A48", -"F. c #484B48", -"G. c #484C47", -"H. c #444843", -"I. c #474C47", -"J. c #464A45", -"K. c #464B46", -"L. c #474B47", -"M. c #474A47", -"N. c #464A46", -"O. c #464946", -"P. c #454A45", -"Q. c #444944", -"R. c #454945", -"S. c #454845", -"T. c #444844", -"U. c #404840", -"V. c #434843", -"W. c #434644", -"X. c #454645", -"Y. c #454645", -"Z. c #444744", -"`. c #424641", -" + c #434643", -".+ c #434743", -"++ c #424642", -"@+ c #424542", -"#+ c #414641", -"$+ c #404440", -"%+ c #414541", -"&+ c #414242", -"*+ c #404340", -"=+ c #3E4142", -"-+ c #6B236B", -";+ c #531B53", -">+ c #4D194D", -",+ c #471747", -"'+ c #23236B", -")+ c #3C3E40", -"!+ c #1B1B53", -"~+ c #19194D", -"{+ c #171747", -"]+ c #40433F", -"^+ c #40483F", -"/+ c #3B403B", -"(+ c #3F443F", -"_+ c #3D423D", -":+ c #3F423F", -"<+ c #3E413E", -"[+ c #3D403D", -"}+ c #1F2420", -"|+ c #2D3030", -"1+ c #363A39", -"2+ c #3B3F3D", -"3+ c #3E3E3E", -"4+ c #3C3F3C", -"5+ c #3A3D3A", -"6+ c #3B3F3B", -"7+ c #393D39", -"8+ c #383B39", -"9+ c #373C37", -"0+ c #363A36", -"a+ c #303F30", -"b+ c #333534", -"c+ c #323532", -"d+ c #303730", -"e+ c #242728", -"f+ c #2A2C2D", -"g+ c #2F2F2F", -"h+ c #212E2E", -"i+ c #222425", -"j+ c #202720", -"k+ c #3B143B", -"l+ c #1D1F20", -"m+ c #14143B", -"n+ c #0F100F", -"o+ c #1C1C18", -"p+ c #121212", -"q+ c #0F1510", -"r+ c #170817", -"s+ c #0E0F10", -"t+ c #080817", -"u+ c #100F0F", -"v+ c #07090A", -"w+ c #0A0A0A", -"x+ c #0D0D0D", -"y+ c #0E0E0E", -"z+ c #0F0F0F", -"A+ c #0B040B", -"B+ c #02050D", -"C+ c #040404", -"D+ c #050606", -"E+ c #070707", -"F+ c #060606", -"G+ c #030303", -"H+ c #000000", -"^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+}+", -"V W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W g+", -"> > > > > > > > > > > > > > : : : : : : > > > > : : : : : : : : : : : : : : : : : > > > : : : : : : : : : : : / / / / / / _ _ _ _ _ _ _ _ > > : ] : ` C+", -"> / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / : ] : ` F+", -"> / y e.g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%./ : ] : ` C+", -"> / y e.6.6.e.e.U.6.m.e.6.(+e.e.e.m.U.6.m.e.6.(+e.e.e.m.U.6.m.j.6.U.e.e.e.m.U.6.m.e.6.U.p.e.4.m.e.6.U.e.e.e.m.U.U.m.m.m.m.m.6.m.U.j.m.e.U.U.] ] ] : ` F+", -"> / y e.D ..D @.|.'.@.,.]...&.+.*.'.*.*.*.&.1...>.+.*...{.&.....*.@.D ..*.*.&.'.......@...*.,...&.@.*.*.D *.+...*.@.@.:.....*.@.@.>.Z [.j. +] ] ] : ` C+", -"> / y e.u.~.l.:.h./.].k.h.B.{._.b.c.z.).T.2.f.S.v.A.F.N.0.0.t.'.<.P.M.!.r.{.g.N.h.].2.r.y.{.!.<.z.K.k./.}.M.%+}.K.h.W.c.y.0.).N.z.!.k._.&+0+: ] : : ` F+", -"/ / y e.*.z.2+.+$+<.W.<+(+(+j.t.y.h.z.P.++_.y.c.$+N.v.Q.h.7+_+q.b.W.S.c.j.!.V.(.s.N.$+S._+K.b.S.y.W.<+<.N.S.N.:.C.s.@+f.s.t.0.(.(.6+ +$+E.b+: ] ] : ` C+", -"_ / y f.~.F.B.@+Q.[+_+0.).%+0+$ $ $ %+*+k.$ $ $ [.r./.++h.:.h. +(.(.b.y.C.<.(.(.$ $ N._.K.$ K.).v./.++h.:.h. +[.2.T.c.M.b.I.g.[.5+<.j.S. +@+/ ] | / ` F+", -"_ _ y e.*.).b.b.).b.~./+P.h._.$ $ $ ]+@+L.$ $ $ g.++%+c.<+6+:.F.(.(.c.v.c.8+K.++0.7+N.M.$ $ K.I.%+%+c.<+6+:.F.k.S.s.T.r.y.K._+z.P._+S.s.X.4+] ] / / ` C+", -": / y e.@.f.[.:+++r.c.y.g.5+*.$ $ $ $ F.$ $ $ $ #+:+$ $ $ $ }.b.$ $ $ $ 0.2.K.I.$ $ 0+$ $ $ $ .+*+$ $ $ $ }.b.$ $ $ $ q.v.I.#+s.!.C..+W.%+&+: | / : ` F+", -": / y e.&.F.B._.0.b.0+K.8.}.0+$ $ $ $ r.$ $ $ $ 6+$ $ ]+T.$ $ v.$ $ $ $ $ $ _.0.$ $ _.W.$ $ *.8.$ $ ]+T.$ $ v.$ $ t.B.M.$+H.#+_+I.Q.F.S.O.c+: : : | ` F+", -"/ | y e.{. +).W.c.W.z.t.K.K.c.$ $ (.$ %+$ %+$ $ z.$ $ k.(+$ $ {.$ $ b.y.$ $ (.(.$ $ N._.$ $ I.).$ $ k.(+$ $ {.$ $ ++).y.y.G.I.6+#+.+t.F.O.X.: / | / ` F+", -"_ : y e.*.$+O.2.[.B.v.'.I.5+%+$ $ #+$ $ $ (.$ $ [.$ $ V.h.$ $ k.$ $ c.v.$ $ K.++$ $ 0+M.$ $ *.h.$ $ V.h.$ $ k.$ $ t.M.7+`.P.s._+8.N._.j.[+8+/ : | / Z F+", -"/ | y e.b.t.y.b.'.F.z.(.++0..+$ $ #+$ $ $ w.$ $ ~.$ $ z.I.$ $ y.$ $ *.v.$ $ K.I.$ $ N.$+$ $ I.++$ $ z.I.$ $ y.$ $ }.(+7._.).P.}._+++c.~.5+5+: | / / ` F+", -": | x j.r.y.$+).W.b. +y.c._._+$ $ .+Q.$ 2+t.$ $ $+k.$ $ $ $ t.6+$ $ h.v.$ $ _.0.$ $ *.W.b.$ $ K.k.$ $ $ $ t.6+$ $ z..+f.z.t.K.I.5+%+W.y.@+<+: | | / ` F+", -"/ | A e.@.}.).K.K.C.$+C.Q.C.$+Z._+_+2.).$+c..+<+S._.N.c.C.T.t..+c._.f.].).(.t.++!..+z.<.K.K.F.F.].).a.i.5+_.j.f.*+++t.}.b.`.g.++0..+O.9.@+<+| : : | ` F+", -"| / A p.<.[.Q.u.N.M.,.V.c.0.y.k.y.6+(.g.K.w.k.Z.~.<+r.F.K.l.f.].h.2.O.t.S.}.z.I.9+%+K.r.<+2.M.:.f..+C.*+/+r.).(+#+%+$+8.z.I./+c.c._+(+J.d.f+| | / / Z F+", -"| / y 6.[.N.7+].&.h.z.I.0.K.b.O.y.z._+9+(.h.i. +4+W.<+(+t.s.@+(+%+<.B.y.].K.P.Q.T..+s.y.<.E.:+M.A.g.w.W.S.F.Q.K.5+k.z.I.8+I.S.O.z._+8.7.<+&+| / | | ` F+", -"| | y 6.[.K.'.c.C.N.l.z.++++F.S.@+h.P.l.C.0.t.].Z.c._.h.#+++Q..+I.u.O.v.j.K.K.}.T.h.[.F.[+*+ +:.H.8.,.F.r.<.s.t.$+K.$+Q.0.t.k.(+<+/+J.J.]+&+: | / | ` F+", -"| / y 6.<.0.;+>+,+,+,+,+,+,+,+,+,+>+q }.N.s.t.<.&.2+.+h.I.++0.s.2+F.2.0.K.Q.t.0.M.v.'.O.v.y.J.2.K.H.T.5+:+v.h.V.8.Q.z.T.K.8.c.c.8.P.8.5.:+X.| / | | ` F+", -"| | y e.f.k.r r r r r r r r r r r r ,+P.$+/+.+F._+*+.+s.t._+z.N.2.j.<+<.++P.P.0.t.).y.B.W.i.2.<.h.,.s._+E.[+C.5+V.0.z.}.[.l.h.N.t.s..+A.X.<+| | / | ` C+", -"| | y 6.d.:.-+r o p p p p p p p p k+r+}.'.k.Q.f. +:.Z.).V.0+C.5+N.r.$+@+v.M.6+}.N.T.<.&. +4+y.j.[.Q.6+O.M.f.t.#+$+K.t._.}.I.N.!.T./+0.`.S.g+/ | | } ` F+", -"| | y e.&.v.-+r r r r r r r r r r k+r+#+C.$+Q._.y.$ $ $ $ $ w.}.$ N.C.].c.B.$ }.++T.h.r.$ y.*+M.$+g.P.M.!.r.}.8.c.y..+h.k.`.c.N.Q.#+P.[+v.5+| | : | ` C+", -"| | y 6.)..+-+r r r r r r r r r r k+r+#+Q.F.O.K.<+<.$+,.c.$ w.w.$ z.7+B.5+j.$ $ $+@+v.$ $ i./+b.F.Q.W.S.c.j.t.g.z._+f.].t.#+K.[.c.T./+7.:+E.: | | } ` F+", -"| | y e.].K.-+r r r r r r r r r r ,+r+t.K.O.f.W.<.5+$+Q.$ <.(+N.$ ~.K.W.$+B.$ $ C.].5+$ $ 7+y.S.:+`.b.y.C.<.c.(+_.t._.:+N.).t.8.8.).'.7.S.8+| | : } ` F+", -"| } y e.k.c.-+r p r r r r r r r r ,+r+#+z.F.W..+ +c.2.$ $ 5+t.2+$ <+C.].c.B.$ z.$ F.$ j.$ 8+9.'.).C.c.v.c.8+K.++0.7+M.j.].l.P.).c.b.O.t.|.5+| | | | ` F+", -"| | y e.:.).-+r r r r r r r r r r k+r+t.}.[+<+S.O.<.M.$ I.<.c.M.$ z.7+B.5+j.$ ].$ W.$ B.$ J.7.<+7.z.h.y.0.2.K.I.).s.$+F.K.#+h.I./+).<. +X.<+| | | } ` F+", -"| } y e.>.z.-+-+r r r r r r r r r ,+r+s.C.:. +C.B.5+$ c.l.5+++v.$ ~.K.W.$+@+$ *+$ C.$ (+$ K.F.*+j.0+h.v.c. +_.0.s.c.W.b.f.g.).Q.h.P.$+r.0+5+| | } | ` F+", -"} | x f.2.}.-+r p r r r r r r r r k+r+P.t.B.<.v._.$ $ $ $ $ h.@+$ $ $ $ <+!.$ f.s.$ l.z.$ 4+]+@+:..+0.,.C.r.}.z.t.*+F.@+%+$+}.P.#+<+f.A.5+D.} : } } ` F+", -"| } y e.].O.-+r -+r r r r r r r -+,+r+(+Q.F.2.K.f.z.[+N.I.V.s.B.r.c.*+_.S.k.++}.{.].O.z.4+9. +M.S.j.Z.<.O.v.c.I.5+(+F.].S.8.l.l._+_+_+N.@+8+| } | } ` F+", -"| } y e.&.v.-+k+r+r+A+A+A+A+A+A+r+A+r+Q.Q.$+:.<.@+0.5+0.V.h.%+5+'.F._.h.2._+h.++(+@+<.M.q./.H. +b.<+%+@+S.S.T.l.K..+B.W.t./+Q.7+~.(+{.++:+4+} | | } ` F+", -"} } y e.'.h.r+H+H+H+H+H+H+H+H+H+H+H+H+#+z.N.M.++_.R.Q.$+P.#+k.h.j./+A.5+0.Q.z.++_.k.2.(.@+6+]+6+<.%+f.y.b.B.k.5./+K._.S.W.0._+_+_.!..+R.]+&+} } } } ` F+", -"} } y e.!.:.s.N.k.b.W.C.z.++{.M.(.N.0.F._+$+t.2.r.5+h.Q._.(.$+%+}.<+F.8+P.C.c.C.(._+C._.2+<.`.b.).F.%+S.v.]+K.z.0.J.9.B.c.(.7+g./+_.B.'.D.<+| } | } ` F+", -"} } y f.).u.K.1.h.@+0.#+L.0+M.K.B.6+Q._+t.!.s.F.<.t.<+c.K.8.$+v.@+:.:+K.y.0.z.h.%+.+t.O.<.k.a.<+R.k.~.r.j.b.S.).s.8+!.c.4+Q.I.V.t.F.v.j.5+W.} } } } ` F+", -"} } y e.!.K.9+r.(+).t.6.(+i.M.B.:.0+U..+t._.z.v.B.B.!.h.}._+z.z.(+E.<.5+:.t.P.7+C.C.5+N.Z.M.F. +:.}.++2.5+2.S.h.#+7+~.K.s._+A.]+K.8.(.s.*+3+} } } } ` C+", -"} } y e.*.*+.+ +%+}.z.I.5+c.b.$+@+C._.0+ +y.[.j. +*+O.++P.7+c.s.k.2.y.j.B.%+P.Q.C.K.v.2+@+2.S.2.T.H.H.B.W. +y.s.`.h.5+ +<.7.5._+0.`.(+`.x.5+} } } } ` F+", -"} } y p.@.@+j.B.j.T.).I.h.:.@+r.j.%+}.8.(+$+%+O.y.B.B.K.7+K.C.T.z.F.S.~.@+$+g.#+6+_+0.F.0+:+<+<.5+`..+]+W.<+@+/+(+8+_+J.@+9+{.*.h.z.I.9.`.&+} } } } ` C+", -"} } x e.&.r.F.%+%+s.(.(.#+%+ +$+v.N.0.l.0.c.K. +r.W.B.s.z.).}.N.k.r.<.v.B.k./+}./+s.N.{.B.q.B.4+2.l.5.B.f.>.S.z.z..+i.N.T.h.a.R.Q.g.9+9.&+0+} } } } ` F+", -"} } y e.).%+++w.P.K.#+(.V.P.$+N..+g.l.l.6+z.6+<.O.y.S.).l.0.[.++/+@+4+:. +0.s.0.C.s.}.:+B.{.O.2._.5+b.[+{.v.,.g.h.~.u.C..+H.7+$+s.t.V.5.@+3+} } } } ` C+", -"} } y e...(+;+>+,+,+,+,+,+,+,+,+,+>+q t./+0.T.F.C.}.j.0.(.z.K.l./+/.<+F._.t.Q._+v.M.S.S.B.2. +`.H.s.7+@+B.E.h./+9.9.K.T.4+).u.:.}.~.(.z.5+8+} } } } ` F+", -"} } y e.@.'.r r r r r r r r r r r r ,+(+:+*+$+y.F.*.6+.+h.I.++0.s.2+L.2.0.K.Q.s.[.(+{.j.[+B.r.4+t.g.&.9.E.`.7.I.7.%+5+H.0.t.6+_+~.I.6+`.p.c+} 1 } } ` F+", -"} 1 y f.!.(.-+r o p p p p p p p p k+r+/+_+F.C.z.y._+*+.+s.t.(+z.N.2.j.:+[.++P._+{.S..+_.f.`.F.f.4+u.B.F.G.5+_.H.H.[+`.v.h.7.w.i.u.Q.G.`.S.b+} 1 } 1 ` F+", -"} 1 y e.}.O.-+r r r r r r r r r r k+r+#+_.r.2.(. +$ v.0.z.Q.~.$ M.$ {.:.F.5+s.z.Q.:.5+b.2+).A.,.a.i.'.v.B.<+!.s.8.0.~._.y.H.G.(.`.c.i..+[+5+1 } } 1 ` F+", -"1 1 x e.@.L.-+r r r r r r r r r r k+r+Q.T.@+B.*+<+$ $ /+8.$+$ $ b.z.v.2.[+B.(..+h.v.$+y.y.:.[.W.$+<+F.y.(.j.s.V.V.!.S.O.B._+P.V.H.~.b.C.]+[+} 1 1 1 ` F+", -"} 1 y e.&.v.-+r r r r r r r r r r ,+r+)._.y.y.y.S.$ $ _+%+z.$ $ j.$ v.c.$ M.k.$ 5+:.*+*+'.@+y.O.:.F.%+1.A.y.Q.t.V.Q.B.B.H.G.7.K.P.Q.w.i.b+@+1 } 1 1 ` F+", -"1 1 y e.>.#+-+r p r r r r r r r r ,+r+s.7+y.j.&.j.$ @+$ t.$ f.$ y.$ r.z.S.$ $ ).).F.@+S.:.B.v.*+>.9+}.j.j.Z.v.P.V.s.!.M.(.V.t.P.0+}.2.B.4+8+1 1 1 1 ` F+", -"1 1 x e.>.(.-+r r r r r r r r r r k+r+(.). +O.N.r.$ $+$ K.$ $+$ Z.$ f.s.q.$ $ C.%+E.8+Z.y.S._.M.S.A.L. +r.M.*+l.I. +@+B.1.`.P.h.l.N.A.:+*+b+1 1 1 1 ` F+", -"1 1 z e.e.W.-+-+r r r r r r r r r ,+r+P.K.:+2.j.@+$ *+$ C.$ (+$ O.$ v._+1.$ $ K.5+@+ +q.j.*+*+2..+i.i.@+f.%+++J.V.s.J.&+9.#+$+V.t.9+$+K.*+[+1 1 1 1 ` F+", -"1 1 A p.@.r.-+r p r r r r r r r r k+r+h.b+z.b.2.!.$ f.s.$ l.z.$ B.$ M.k.$ ).K.$ }.7.[+9.]+`.9.b.G.s.A.4+9.h.t.8._+_.K.`.Z.(.J.5.l.`..+[+B.8+1 1 1 1 ` F+", -"1 1 A e.&.#+-+r -+r r r r r r r -+,+r+/.t.<.(+v.y.<+N.}.5+}.s.N.6+y.B.5+Q.T.K.P.$+<.<.@+9.8+9.H.9. +5+~.O._.h.5./+g..+$+!.l.7+H.s.(.E.B.]+8+1 1 1 1 ` F+", -"1 1 A p.*.W.-+k+r+r+A+A+A+A+A+A+r+A+r+U._+<+$+c.v.y.j.s.K.++(.B.0.++O.v.S.c.5+_+u.9.$+%+<+:+!.S.6+l.`.S.<+b.Q.s.`./+<.M. +8.P.t.(.`.`.r.8+b+1 1 2 1 ` F+", -"2 1 A e.1.s.r+H+H+H+H+H+H+H+H+H+H+H+H+'.6+++v.N.S.@+_.N.P._+T.++f.h.r./+s.6+8.V.K..+{.7.d.:. +5+$+5+b.*+9.y.2.z.s.9.[+F.S.H.(.I.z.0.t.%+O.3+1 1 1 2 ` F+", -"1 1 A e.>.C.t.}.O.v.B.C.!.v.M.b.<+<. +@+c.<.r.:.d.5+j. +r. +t.:+ +r.<.$+ +$+ +O._+v.q.q.<+<+j.<+4+1.J.1.E.4+d.7.r.B.1.4+_.V.g.(.5+9.[+:. +v.2 1 1 1 Z F+", -"2 1 A p.:.6+S.F.s.S.B.t.K.K.[.N.b.[.P.5+_+$+:..+d.&.F.k.0.z.s.$+B.%+S.[.r.k./+_+/+M.E.H.9.y.:.~._.7.`.4+j.!.S.8./+j.`.B.F.$+++u.F.5+d.^.c+&+1 2 1 2 ` F+", -"1 2 A e.<.z.%+M.C.2.K.c.z./+O.z.S.k.z.t.h.*+_.O.r.T.:.~._.Q.C.[+f. +M.Q.f.Q.(.Q.z.j.B.4+$+z.).q._+H.7+!.%+{. +Q.A.y.O._.B.0+(.(+K.$+_.u.y.5+1 2 1 2 ` C+", -"2 1 A e./.c.M.].h.@+r.Q.t.I.}..+v.Q.I.(+k. +2.%+y.s._..+I.z.k.j.*+_. +0. +t._+(.K.[+F.$+/.T.b. +y.v.J.M.%+j.9+7.s.7.@+_.B.z.Q.%+#+w.C.7.O.g+1 2 1 2 ` F+", -"2 2 A p.].w.w.<.c.v.k.0+,.V. +[.f.5+g.z.k.r.y. +y.k.v.K.#+++N.r.f.j.].O.<+*+P.J.K. +O.1.j.@+5.H.B.0+J.O.z.5+Q._+l.!.F.M.b.s.8.Q.0.%+@+2.&+b+2 2 1 2 ` C+", -"1 2 A e.{.P.*+!.7+r.y._.h.$+%+0.f..+9+s.k.O.y.z.:.++r.K.P._+N.r.2.y.&.Q.Z._+Q.g.8+`.:+S.`.s.0.<.~.$+9.E.S.F.K.(+u.6+B._.2.s._+c.K.5.$+r.5+X.2 1 2 2 ` F+", -"2 1 A p.e.{.5+B.*+/.:+r.).v.y.M.5+W.K.s.C.W.r.2.S.[.r.C.K.8.N. + +i.w.K.F.c.(.g./+$+/.v.S. +b.y.M.Q.h.H.~.~..+J.L. +[+d.:.k.(.t.0.Q.1.`.E.5+1 2 1 2 ` F+", -"2 2 A e.*.O.;+>+,+,+,+,+,+,+,+,+,+>+q _+Q.*+O.z.N.}.k.a.(.z.K.l./+/.<+F._.t.V.}.j.0.(.z.J.l._+_.<+<.r.b.(.z.J.l._+].:+E.S.J.0.w.0.K.:+9.@+g+2 2 2 2 ` F+", -"2 2 A e.].~.r r r r r r r r r r r r ,+%+t.M.O.F.M.*.6+.+i.K.++c.s.2+L.2.0.K.Q.*.6+.+h.I.#+g.w.4+E.&.4+ +h.I.#+g.y.4+E.2._.t.H.H.H.c.S.<+8+c+2 2 2 4 ` C+", -"2 4 A p...2.-+r o p p p p p p p p k+r+$+K.T.*+%+.+_+:+++A.s.(+C.N.2.j.:+[.++P.<+]+ +y.s.]+G.J.b.r.<+]+ +y.s.]+G.J.2.j.<+0.J.H.V.0..+z.t.&+5+2 2 2 4 ` F+", -"2 2 A e.j.!.-+r r r r r r r r r r k+r+M.Q.T.N.f.u.$ $ $ $ Q.(+B.5+C.2.7+:.c.).K.R.C.@+$ Z.F.%+S._+_+b./.`.9. +_+H.(.J.f.<.`.P.`.i.:.d._.d.@+4 2 2 2 ` F+", -"4 2 A e.r.<+-+r r r r r r r r r r k+r+++++++K.O.C.$ g.y.(+$ (.N.!.v.b.b.{.~.k.w.P.w.++$ d.].]+!._.b.1.:. +/.:+9.%+z.s.<+J.t.H.P._+b.7.y.E.@+4 4 2 4 ` F+", -"4 4 A p.q.w.-+r r r r r r r r r r ,+r+s.B.S.6+S.C.$ 5+I.~.$ Q.C.$ $ r.s.6+$ $ $ ++0+i.$ _.$ $ $ $ 7+M. +$ $ F.7.J.$ $ K.5+_.(.T.s.7.J.j.]+X.4 4 2 2 ` C+", -"4 4 A e.'.v.-+r p r r r r r r r r ,+r+N.(+[.k.:.A.$ $ $ $ 0..+$ k.B.$ :.F.$ $+l.$ Q.F.$ /.b.<+@+$ s.S.$ b.7.$ H.$ `.).$ %+J.z.J._+g.H.J.B.3+4 4 4 4 ` F+", -"4 4 A p.>.S.-+r r r r r r r r r r k+r+_+h.c.T.j.:.$ 2+*.$ t.s.$ $ $ $ f.@+$ 6+]+$ <+H.$ B.r.$ $ $ _+J.$ Z.<.h.#+$ $ $ $ h.%+]+#+0.9.#+H.S.b+4 4 4 4 ` F+", -"4 4 A e.<.>.-+-+r r r r r r r r r ,+r+.+k.N.C.$+<.$ S.}.++$ .+$ 8.A.c.<.4+$ 7.H.$ 9.`.$ b.$ ]+1.$ Q.:.$ /.,.$ #+$ Q.Q.`.(.Q.N.%+J.#+7.7.D.g+4 4 4 4 ` F+", -"4 4 A p.!.2.-+r p r r r r r r r r k+r+%+t.F.!.j.:.$ r.K.P.$ N.r.$ $ $ Q.Z.$ $ $ 9+@+<+$ `.$ $ $ $ $+9.E.$ $ K.(+l.$ $ $ (.7.(.t.0.Q.1.`.X.5+4 4 5 4 Z F+", -"4 5 A m.j.r.-+r -+r r r r r r r -+,+r+(..+_.(+b. +[.r.C.K.8.N. +++i.v.K.E.$ (.g.4+$+/.v.S..+0.v.J.Q.j.H.~.~..+K.I..+4+d.S.J.9.s.0.K.:+9.]+c+5 4 4 4 ` F+", -"4 4 A e.+.'.-+k+r+r+A+A+A+A+A+A+r+A+r+0.C.0.C.W.2.Q.B.s.5+h.%+B.j.,.}.`.v.$ h.[.H.$+B._+S.2. +q.0+<.j.F._. +H.K.I.<+7._.0.t.z.H.H.9.S.<+9+c+4 5 4 4 Z F+", -"5 4 A p.*.$+r+H+H+H+H+H+H+H+H+H+H+H+H+9+k..+9+b.'.%+6+%+~.Q._+C.8+N.d.8+<.j.).R.H.M.*+M. +G.]+H._+4+9.:.$+h. +/+V.[.Q.j.M.]+).V.9. +G.v.]+4+5 5 4 5 ` F+", -"4 5 A m.^.w.C.2.2.~.(.P.V.G.v.M.y.h.0.0.++N.k.y.b.5+f._+g.(+%+h.}.C.7.y.<+y.B.}.S.$+'.L.[.$+]+d.<+B.7+M.F.j.z.(._+E._.[+(.#+9.:.O.*+S.y.]+G.4 5 4 4 Z C+", -"4 5 A e.&.8+{.f._+{.5.$+).Q.!.B.[+h.z.(+c.[.%+r.O.y.Z.O.&.K.<+v.k.a.:.F.`.7. +9+]+H.]+]+8+E.H.S.F.y._.&+@+$+M.j. +A._+w.&+*+]+%+J.4+@+]+7+4+5 4 4 5 ` F+", -"5 4 A m.*.y.}.r.b.:.z.K.l.[+_.<+F._.t.Q.}.N.z.:.5+v.0+8+C.Q._+$+}.w.B.:.b.%+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+|+d+3+g+a+3+d+g+o+5 5 3 4 ` F+", -"4 5 C m.&.R.*.4+ +i.I.++9.y.2+E.2.0.K.Q.6+C.}.r.M.f.*+9+0.Q.s.N.0.a.F.F.Z.<.d+q+q+q+z+z+z+z+z+u+z+z+z+z+z+z+u+z+z+y+B+z+y+B+z+z+z+u+z+z+y+z+5 4 4 5 ` F+", -"5 5 C e.*.z.<+*+ +w.t.(+I.R.2.r.:+[.++P.N.5+z.8+O.r.O._.P.V.C.N.T.k.E.*+f.B.m.d c e e e e e e e e e e e e e e e e e e e e e e e e e e e d e 5 5 5 5 ` D+", -"5 5 C m.{.0.b.j.<+}._+Q.8.'.].,.<+.+s.P.Q.$+).M.M.$+M..+h.h.t.6+t.6+1.J.B.H.m.d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d 5 5 5 5 ` D+", -"5 5 C m.2.h.<.j.b.:.z.K.l._+].:+F._.t.Q.0.T.%+M.j.{.~.K.8._+%+h.'.$+y.:.d.j.d+d+d+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.3 5 5 3 ` D+", -"5 3 C m._.<.&.4+ +j.I.++0.w.4+F.2.0.K.Q.C.O.N.T._.a.@+C.h.5+t.F.z.C.5+_.S.J.4.4.m.e.6.^+e.e.6.m.e.6.^+e.e.e.m.^+^+m.m.m.m.m.6.m.^+e.m.e.^+#+5 5 5 5 ` D+", -"5 3 C m.!.k.h.Q.).S.b.!.(.y.*+O.Z.R.~.g.K.S.h.s.W.@+O.W.$+l.Q.r.s.<.y._.`.g.(.l.%+ +K.S.E.y.S.y.7.K.F.:.J.d.[.J.6+_+$+:.@+0.,.I.l.a.B.y.4+4+3 5 5 3 ` D+", -"5 3 C m.<.k._+_.++A.s.(+I.R.b.r.<+}.#+Q.++v.N.T.:.Z.).:+l.$+.+s.B.<.J.$+'.G.(.$+$+b.<+F.7+K.F.j.z.(._+F._.[+:.#+9.(.M.&+S.t.$+L.z.a.M.9.y.]+3 3 3 3 ` D+", -"3 3 C m.~.k.;+>+,+,+,+,+,+,+,+,+,+>+q 6+Q.f.~.K.:.[.k.0.(.z.K.l./+/.:+F._.t.V.}.k.a.(.z.J.l._+_.:+F._.t.V.}.k.0.(.z.J.l._+].:+F._.t.H.J. +X.3 5 5 3 ` D+", -"3 3 C m.'.a.r r r r r r r r r r r r ,+V.C._.5+.+:+&.2+.+h.I.++0.s.2+L.2.0.J.V.*.4+.+h.I.#+9.s.4+F.2.0.J.V.*.4+.+h.I.`.9.s.4+F.2.a.K.H.+.F.4+3 5 3 3 ` D+", -"3 3 A e.*.Z.-+r o p p p p p p p p k+r+_+k.y.C.Q.b._+*+.+s.t.(+z.N.2.j.<+[.`.P.<+*+.+w.s.]+G.J.2.j.:+<.`.Q.<+]+.+s.t.(+z.J.2.k.<+}.#+Q.0+%+W.3 3 3 3 ` D+", -"3 3 A m.*.2+-+r r r r r r r r r r k+r+0.$+f.s.h.y.$ +s.g.8.).$+0.z.S.G.M.%+l./+C.:._.i.$ v.b.S.<.`.j.$ $ $ $ #+z.u.r.{.<+z.$+,.R.$ J.2.F.3+3 3 3 3 ` D+", -"3 < A e.{.%+-+r r r r r r r r r r k+r+T. +W.5+0.S.$ d.@+0.t.5+$+F.s.F.>.M._.}.z._.L.C.a.$ 9.B.]+v.G.B.$ +B. +$ H.Q.*+*+B./+]+(+$ V.K.7.<+[+< < 3 < ` D+", -"3 3 A p.@.B.-+r r r r r r r r r r ,+r+%+(+ +t.!.r.$ W.).z.g.*+$ $ Q.j.$ $ $ $ (+(+4+$ $ $ 6+7.@+S.<+2.$ y.H._+$ Q..+$ $ M.G.8.$ $ $ s.t.b.|+< 3 3 < ` D+", -"< < A m.*.w.-+r p r r r r r r r r ,+r+K.z.>.v.9+*+$ +6+~.K.$ q.}.$ b.H.$+V.$ Q.s.$ .+.+$ ]+`.@+S.H.H.$ F.S.s.$ V.$ _+[+$ ).T.N.$ l.[+:+*+8+< 3 3 < ` D+", -"< 3 A p.).c.-+r r r r r r r r r r k+r+s.h.*+b.5+f.$ +K.I.T.$ <+_.$ S.K.$ $ $ z.2+$ @+L.$ G./.`..+s.F.$ j.4+0.$ V.$ $ $ $ s.0.s.$ g._.J.5+g+< < < < Z F+", -"< < A m.{.!.-+-+r r r r r r r r r ,+r+.+M.B._.Q.v.$ M.h./+0.$ E.S.$ v.$ 2+~.$ /+@+$ <+Q.$ _+z.j.(.t.b.$ B.B.5.$ `.$ +5+z.(+).(+$ ).q.y.S.c+< a < < ` C+", -"< a C m.2.z.-+r p r r r r r r r r k+r+(+z.y. +!.F.$ $ $ $ }. +$ $ ].B.$ $ $ $ }._+*+$ $ $ _+.+B.B.v.]+$ $ $ $ 7.7.P.$ $ $ s.9+c.$ K.y.$ @+8+< < < < ` F+", -"< < C p.@.F.-+r -+r r r r r r r -+,+r+%+++O.j.C.S.h.b.~.).(.(+:+>.$+F.N.[.z.$+}.L.B.S.t.Z.K.s.B._.H.y.Z.9+1.5.z.#+V.$+_..+(.8.0./+<+H.v.d.5+< a < < Z C+", -"a < C m.*. +-+k+r+r+A+A+A+A+A+A+r+A+r+/+ +Q.@+F.r.r.t.W.l.$+.+y.F.<.J.%+'.C.Q.(+K.s.O.v.4+v.B.j.y.9.b.J.B.{.7.#+K.h.c.!.T.h.Q.(+7._+O.b.:+0+< a < < ` F+", -"< a C m._.y.r+H+H+H+H+H+H+H+H+H+H+H+H+_+%+N.T.<.@+/.O.9+y.6+P.t.(+*+f.S.N.5.h.).z.C..+k.9.d.7.>.s._+O.5+O.5+Q.[.s.8.[.B.S.(.V./+8.%+B.5+3+f+a < a < ` C+", -"< a C m.>.v.<+{.v.<.b.~.:.y.:+O.Z.Q.~.g.K.Z.j.y.W.@+O.T.$+l.Q.r.s.[.v._. +9.(.t.%+ +K.Q.F.v.S.A.l.P.E.<.J.b.[.J.5+<+*+:.++g.,.K.l.0.B.y.4+5+a < < a ` F+", -"a a C m.'.W._+M.W.E.2+y.*+j.@+!.r.4+C.5+[+[+@+@+j.S.%+!.N.~.$+v.O.Z.S.S.:.j.$+t.Z.y.E.b.*+B. +M.]+u.@+j.$+B.B.[.$+J.F.j.k._+(.#+j.*+B.[+q.7+a a c < ` C+", -"< a C m.r. +S. +1+E.v.:+j.W.E.O.j.|.S.W.*+W.2+W.O.v.7+e.v.O.M.q.<+j.1+X.5+W. +1+<+W.:+*+1+E.W.X.M.x.:.&+&+&+O.p.W.y.2+x.&+*+&+&+O.5+X.3+5+4+< a < a ` F+", -"a a C m.m.m.d+d+a+|+g+c+d+3+a+c+d+a+a+a+d+a+d+a+a+c+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+g+d+3+g+a+3+d+g+o+c a a a ` C+", -"a c C m.c+q+s+B+q+B+y+s+y+y+y+y+y+u+s+y+y+B+y+y+y+y+y+u+s+y+s+B+s+y+y+y+y+u+s+y+y+B+y+y+y+u+y+u+u+y+y+s+u+y+u+u+s+s+B+y+s+B+y+y+y+u+u+s+y+y+< a a a ` F+", -"a a a a a a c a a a a a < a a a a a a a a a a a a a a a a a a a a < 0 a a a a < a a a a a a a a a < a a a a a c a a < a a a a a a a a a a c a a a a ` F+", -"a a c a c 0 0 c 0 0 c c c c c 0 c c c 0 c 0 c 0 c c 0 c c 0 c c c c 0 c c a c c c c c c 0 c c c c c c a c c c a c c c c c 0 c c 0 c c c c a c a a a ` F+", -"a c a ^+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.k c a c ` D+", -"a c 0 j.6.6.e.e.(+4.m.e.6.U.e.e.e.m.U.4.m.p.6.^+p.e.e.m.U.6.m.e.6.#+e.e.p.m.#+6.m.j.6.^+p.e.6.m.e.6.U.e.e.e.m.U.U.m.m.m.m.m.6.m.^+f.m.e.U.U.k 0 0 c ` D+", -"0 0 c 6.Y *.&.D ..*.&.+.@.>.'.*.&.'.@.&.@.@...@.Y >.+...@.'.,.&.&.*.+.&.@.+.&.*...&.....*.^.'.'...,...D *.+...*.@.'.*.'.&...@.@.!.{.{.>.y.*+e c c 0 ` D+", -"0 c c 6.'.<. +/.C./.}.:.Q.j.M.'.F.K.8.[.k.{.f.F.<+}.f.t.*.z.[.j.].{.a.G.M.C.Q.i.t.<+F.@+^.J._.^.{.h.{.<._.2.'.8.!.Q.'.<.`.7.[.%+5.:.@.f.@+8+3 0 c c ` D+", -"c 0 c 6.)._+y.w.t.M.f.++8.).@+(.M.c.P.#+y.S.W.z.8+Q._.c.z./+K.:+{.h.8+#+Z.$+++I.$+y.C.++++V..+M.S.C.s.5+C.~.w.P.z.K.C.u.z.7+z.7+g.V.8+h.:.s.5 c c c ` D+", -"c c c 6.@.K.$ $ 7+b./+_.s.,.b.c.'.h.I./+).y.<.<.~._.y.$+Q.++.+!.b.B.O.h.B.$ $ $ %+*+k.$ $ $ }.v._.++h.:.h. +W.Q.V.P.$ $ B.t.J.C.(.Q.c.2.*+c+5 c c c ` D+", -"c c c 6.,.i.$ $ 7+i.<.N.l.s.z.'.j.s.}._+}. +W.}.:.h.:.:.6+c.@+q.Z.h.*+T.r.$ $ $ ]+@+L.$ $ $ h.%+$+c.<+6+:.F.).z./+c.$ $ u.[./+s.++V.f.y.0+M.5 c c c ` D+", -"c c e 6.[.(.$ $ k.W.:.[+P.).$ $ $ $ #+g.t.$ $ $ $ %+d.$ $ $ $ $ r.W.B.T.O.$ $ $ $ F.$ $ $ $ #+:+$ $ $ $ }.b.K.$ $ $ $ $ F.).$ $ $ $ c.C.@+@+5 c c c ` D+", -"c c c 6.>.c.$ $ P.S.v.!.K.$ $ N.j.$ $ z.$ $ *+h.$ $ {.$ $ 8.f.$ $ j.r..+O.$ $ $ $ r.$ $ $ $ 6+$ $ ]+T.$ $ v.$ $ P.K.$ $ L.$ $ P.z.$ $ w.M./+5 e c c ` D+", -"e c d 6.*.t.$ $ ++!._+t.I.$ $ }.!.$ $ Q.$ $ 2.B.$ $ +$ $ /+f.$ $ j. +C.:+$ $ (.$ %+$ %+$ $ z.$ $ k.(+$ $ {.$ $ t.0.$ $ [+$ $ $ $ $ $ w.E.<+3 d c d ` F+", -"e d d 6.+.c.$ $ }./. +6+P.$ $ %+@+$ $ ++$ $ v.N.$ $ f.$ $ s.B.$ $ r.B.(.:+$ $ #+$ $ $ (.$ $ }.$ $ V.h.$ $ k.$ $ V.$+$ $ $+$ $ h.$+]+b.(+0+F.5 d d c ` F+", -"d c d 6.<.(.$ $ }.N.h.P.#+$ $ T.y.$ $ (.$ $ [+B.$ $ f.$ $ .+(+$ $ +v.z.W.$ $ #+$ $ $ w.$ $ ~.$ $ z.I.$ $ y.$ $ 9+k.$ $ j.$ $ C.g.$ $ 7+&+5+3 d c d ` F+", -"d d c 6.].s.$ $ $ $ $ $ N.C.$ $ $ $ g.I.%+$ $ $ $ N.c.$ $ $ $ $ F.k.f.[.B.$ $ .+Q.$ 2+t.$ $ $+k.$ $ $ $ t.6+(.$ $ $ $ $ T.h.$ $ $ $ '.<+O.F.3 d d d ` C+", -"d d b 6.!.c.%+w.Q.y.b.k.t.}.W.M.C.h.k.y.C.$+[.b.:.8+.+$ $ z.K.C.N.$+r.y.F.(+z.Q./+Q.t.v.y.W.*+C.++++2+F.!.C.z.N.[.(.Q.M.F.++z.l..+_+w.y.X.[+3 d d b ` F+", -"d d d 6.!.++%+y.a.h.5+l.V._._.++@+}._+I.9+S.C.b.B._.<+$ $ /+}.%+}.{.F.%+O.k.$+P.M.h.F.2.B._+O.B.Q.k.s.r.0.$+_.P.t.++}.!._.Q.s._+c.#+Q..+O.4+< d d d ` F+", -"d d b 6.y.T.W.7.G.h.(.V.(+K.@+N.w.I.V.I.C.5+c.W.v.j.&.(.$+s._+h._.M. +y.*+K.0.#+z.0+(.c.w.].W.Z.F.C.$+f.{.<.k.I.V..+h.W._+/+]+s.C.I.I._.S.X.< d d b ` F+", -"b d d 6.<.!.P.S.:+J.#+7.h.i.<+r.2+8.V.I.++_.h.<.].S.[+%+5+8.$+h.u.<.v.j.<._+I.(..+h._.2+a.<+{.v.&.c.c.>.f.y._+).s.0.0.~.[.z.$+L.T.V.~.g.W.4+< b d b ` C+", -"d b b 6.+.k.N.4+B.F.(+t.#+V.A.:.O._._.0./+++$+O.W.~.b.[.I._.k./+).:. +!.O.!.K.5+v.F.%+<.].@+b.O.z.V.N.*.y.$+h.t.g.0.N.$+s.t.a.a.c.K.8.H.@+@+< d b b ` F+", -"b b b e.<.k.h.j.).:+z.(+'.P.]+F.:.a.}.V.N.6+k.!.$+ +r.F.(.).++[.6+2+L.:.y.[.P.#+(+}.s..+v.M.$+[+s.++.+'.k.[._.8.(..+~.t.%+l.N.u.C.(.t.2.5+8+< g f b ` F+", -"b b b 6.*.4+_.j.{.F.Q.K.$+B.O.B.@+O./+/+c._.++2.W.:+O.).P.h.N..+l.S.b.].2.{.).}.z.$+'.S.y.:.y.y.).).0.i.2+{.c.g._+h.c..+s.8.}.R.}.++0.H.@+W.< b b b ` F+", -"b d h e.).:.O.S.S.4+:.`.y.@+D.|.B. +.+(.!./+h.*+<.*+O.:.!.(.~.2+++r.F.F.W.).T.Q._+W..+b.b.f.<+r.6+8.Q.y.S.!.h.0.(.++5+$+5+8.++}.k.Q.5.J.S.x.< b b b ` C+", -"b h b #+*.S.!+~+{+{+{+{+{+{+{+{+{+~+v (+A.h.++v.j.S.b._+++++9+].&.f.v.y.<.K.h..+M.M.(+5+{.2.f. +6+++_+*+j.r.T.(+(+c.N.C.[.P.K.K.t.9.G.w.y.b+a b b h ` F+", -"g b b e.>.A.w w w w w w w w w w w w {+%+L.%+T.F.O.B.[+c.s.I.9+K.Q.O.y.*+:.c.#+h._+y..+v.S.y.v.$+h.Q._+2._.:..+_+z.N.0.k.Q.s.c.!.P.V.G.G.B.4+< h b b ` F+", -"b h h 6.!.y.'+w s t t t t t t t t m+t+l.G.%+/.i.$+c.O.r.K.8.@+B.Z.F.:+c.W.}.$+z.F.<.@+C.B.c.c.*+]. +f.@+t.:+].I./+N.*+{..+g.V.s.h.g.z.H.*+e.a b b h ` F+", -"h b h 6.~.:+'+w w w w w w w w w w m+t+.+Q.S.j.B.:. +W.$ K._+t.:.$ $ $ $ S.0._+2+[+$ E.F.s.$ $ $ $ $ '.s.O.[+$ 8+}.N.8+v.B.P.P..+l.P.F.]+O.g+< h b h ` C+", -"b h b 6.>.&.'+w w w w w w w w w w m+t+s.0+<.:._+O._.$ O.$ N.C.].$ z.b+7+$ N.#+f.$ E.$ r.%+).j.$ <+).r.N./.$ $ !.P.s.!.M.0.l.P.t.(.g.%+M.M.c+a b h h ` F+", -"h h h 4.*.H.'+w w w w w w w w w w {+t+R.t.2+Q.:+W.r.$ {.$ 6+z.r.$ E.b.v.$ l.z.C.$ <.$ *+:+y.v.$ h.s.O.O.'.O.$ v..+F.v.O.T.Q.u.0.#+0.v._.*+c+a h h h ` F+", -"h h h 6.).0.'+w t w w w w w w w w {+t+_+/+N.++2.S.$ d._+z.$ _+[+$ Z.<.F.$ !.'.$ v.F.O.$ E.{.b.$ g.K.k.A.[. +$ (+V.M.(+h.++9.#+l.6+h.V.7.0+4+a h h h ` F+", -"h h h 8.b.L.'+w w w w w w w w w w m+t+N./+s.T.y.:.$ $ $ $ $ t.7+$ d.b.*+$ }.s.$ $ $ $ $ 1.O.F.$ z.c.:.2+:.c.$ $+I.c.$+s.i.7.]+}.s.(.#+K.X.@+a h h h Z F+", -"h h h 6.r.L.'+'+w w w w w w w w w {+t+z.%+!.}.:+y.$ O.0.(.$ h.5+$ x.&.b.$ '.K.$ ).t.:.$ '.].v.$ P.T.O.'.2.z.$ ++l.C.++%+Q.`.%+g.]+H.5.~.7.e.0 h h h ` F+", -"h h h 6._.t.'+w t w w w w w w w w m+t+g.C.s.N.v.$ 2.S.h.$+h.$ (+$ $ $ $ <.T.$ Q.N.T.O.r.$ ].M.$ l./+*+r.[+K.$ 9+8.C.9+N.%+]+(.b.K.l.G.5.S.E.0 h h h Z F+", -"h i h 6.*.~.'+w '+w w w w w w w '+{+t+++K.++k.B.{.!.S._.7+7+Q.0.z.:.F.W.@+_.z.#+C.T.$+[+v.W.W.>.k.}._.:.{.O.'.t.#+t.T.A.J.:.7.:.Q.t.z.G.Z.5+c h j h ` F+", -"h i h 8.@.%+'+m+t+t+B+B+D+B+B+D+t+B+t+(._+*+2.$+<+_.B.).s./+c.t.0.j.].<+q.W.V.g.z.6+[.~.8+_.y.2.~.0.9+].v.!.0.$+V.7+t.s.K.s.&.2.:+%+l.9.O.X.0 h h h Z F+", -"h h h 6.>.K.t+H+H+H+H+H+H+H+H+H+H+H+H+l.*+(+y.++ +K.S.z.5+h.z.F.5+C.W.R.F.(+8.h.%+j.:+t.@+s.T.B.y.:+k.W._+b.(.8.%+[+F.E.5.l.J.w.6+k.w.H.4+0+c h k h ` F+", -"i k h 6.b.(.F.B.(.M.O.Q.P.W.A.B.2.K./+Q.K.j.y.++ +K.Z.F.5+h.B.F.5+C.W.Q.F.:+8.h.%+j.:+t.@+s.T.B.s.(+r.W.<+b.(.8.#+_+B.E.5.t.J.t.g.).r.9.X.4+0 i h k ` F+", -"h j h 6.<.<.0.F.k.F.$+5+}.S.*+&.b.y.6+I.z.<.{.$+*+C.B.(+).z._+].M.B.y.T.E._+P./+0.@+S.B. +++z.S.$+%+T.@+_+@+'.P.(+C.8+F.b.7+(.9.).K.J.F.4+<+e h i h ` F+", -"k h k 4.!.@+}.j.%+~.h.z.t.h.7.d.y._+Q.t.t.:.B.:.].W.W.k.l._+_+c..+b.b. +b.%+$+K..+s.K.@+M.].F.:.k.++T.<+<.O.z.}.t.%+0.7+<+J.h.[.$+V.(.J.5+b+0 i h k ` F+", -"h k h 6.&.Q.c.:+u..+z.++I.s.&+j.O._+g.}.0.$+(+v.B.:.f.K.s.h._.t.0.r.O.M.>.T.P.8.}.Q.%+v.r. +_.y._+s.~.:+f.<+K.(.h.$+z.N._+t.5+H.h.z.).7.x.4+c i j k ` F+", -"i k i 6.'.%+T.W.z.R.K.V.V.8.9+b.M._+$+l.K.6+z.2.{.:+<.!.V.8.k.7+s.y.<.!.@+++0.$+K.T.}.y.O.2.2.$+$+P.$+2.S.r.(.).I.++$+K.T.s..+z.t.l.7.]+$+5+c i i i ` D+", -"k i j e.r.c.%+v.w.:.8.`._+]+y.v._.h.z.V..+!.N.F.O.v.f.K.Q.Q.z.k.5+b.O.b.[+N.++).T.k.}.8+W.y.<.j.%+t.[.<+b.].j.%+K.W.C.c.s.`.s.t.[.(+Q.9.4+4+0 k i k ` D+", -"i k i 6.>.B.F.1.W.j.9..+8+_+&+<.X.b.'.P.s.c.s.j. +y. +N.8.t.s./+(+<+B.B.O.0.z.}.!.[.h.W.<+f.!.O.[._+0.W.y.v.9+(._+O.<+(.s.5.B.]+6+&.K.t.O.5+0 k i k ` D+", -"k i i e.:.k.!+{+{+{+{+{+{+{+{+{+{+{+v 4+k.r.$+:.f.!.v.k.P.8.z.%+%+ +y.W.S.%+t.V.Q.K.C.B.$+M.{.B.K._.T.j.y.f.Q._+s._+%+ +F.H.F.J.J.g.0+g.%+b+c k j k ` D+", -"k k k 6.d._.w w w w w w w w w w w w {+_+%+t.).@+:.}.v.}.V.h.*+*+<.N.$+$+f.t._+~.8.f.S._.f.C.z.B.N.%+%+f.C.:.h.(.I.$+b.S.{.9.9+).y._.g.$+]+c+0 k i k ` D+", -"k k k e.@.A.'+w s t t t t t t t t m+t+0+k.v.f._._.++@+}./+K.9+S.E.j.F._.<+I.(./+8.%+a.].F.%+N.r.%+N.C.2.C.b.z./+Q.K. +7.B.7.s.l.z.C.5+%+<+++e k k k ` D+", -"k k k e.&.M.'+w w w w w w w w w w m+t+s.5+j.S.k.B.c.W.$ z.h.}.:+$ $ $ $ 1.%+(+++M.$ K.O.6+$ $ $ $ $ +~.$ $ h.P.#+6+<+b.J.t.9.%+(.R.t..+v.v.e k k k ` D+", -"k k k f.'.7.'+w w w w w w w w w w m+t+I.Q.j.y.@+B.c.$ k.$ t.$+W.$ F.:.K.$ '.++(+$ w.$ r._+r.B.$ z.c.2.$ B.).$ I.$+O.j.d.{.c+_+_+5.7+ +++8+5+d k k k ` F+", -"k k k e.@._.'+w w w w w w w w w w {+t+6+/+W.O.$+j.f.$ 5+$ k.S.F.$ :.$+k.$ K.K.t.$ w.$ W.Q._+O.$ 7+++<+N.++s.$ {.8.).%+d.G.H.g.K.$+7.[+N.y.2+e k k k Z D+", -"k x k f.*._.'+w t w w w w w w w w {+t+z.(.r.*+0+O.$ F.5+.+$ t.!.$ O.1.t.$ c.0.$ u.%+[.$ K.s.b.$ h.++S.u.T.$ s.:.g./+W.u.!.V.I.K.$+7.4+z.r.z.d k k x ` F+", -"k k x e.{.0.'+w w w w w w w w w w m+t+]+g. +B.(.4+$ $ $ $ $ 5+2.$ 9+1.z.$ ~.0+$ $ $ $ $ Q.6+j.$ C.s.>.0.5+$ s.W.Q.$+*+[.H.t.h.5.H.).y.5+}.X.d y k k Z D+", -"x k x e.!.@+'+'+w w w w w w w w w {+t+9.t.f.q.@+2+$ b.c.z.$ z.S.$ +y.++$ (.s.$ '.8+<.$ h.Q.v.$ T.t.!.K.$ H.H._+l.y.S.B.<+z.5+_.z.t.:.F.%+C.d k k z ` D+", -"x k z e.@.k.'+w t w w w w w w w w m+t+_+w.F.f._+$ Z.).r.0.0.$ z.$ $ $ $ z.0.$ s./+@+K.B.$ '.K.$ (.s.{.$ $ # $ C.h.K.(+y.C.Q.(+h.Q.Q.).y.C.S.d x x x ` D+", -"z k z e.b.`.'+w '+w w w w w w w '+{+t+l.$+0.v.f._.f.(.s.t.c.9+_.Q.r.M.F..+$+$+Q.K.N./+<+S.b.:.k.5+c.:+y.<+++*.~.t.s.c.:._.K.t.#+A.`.2.S.*+5+g x k z ` F+", -"x x z e.{.9.'+m+t+t+B+D+B+B+D+B+t+B+t+6+t.M.y.M.<+++j.z./+I.h.(._+<.!.Q.<.f.5+z.K.c.).@+@+}.++B.N.}.z.S.0.b.$+(+Q._+h..+A.++6+V.z.[.*+]+<+c+b x x x Z F+", -"x z x e.@.J.t+H+H+H+H+H+H+H+H+H+H+H+H+T.h.0+0.:.y.:.F..+(+(.C.%+s.M.$+[+v. +U.~.s.0._.:.{.O.>.j..+h.N.v.B.{.k.8._+%+t.a.A.}.!.A.T.$+K.H.X.8+d z z x ` F+", -"x x x e.*.[.(.S.K._+s.)._+`.j.F.{.!.U.[.9+7+K.:.y.:.F..+(+(.C.%+s.M.$+[+v..+#+~.s.b._.<.{.O.>.j..+h.N.v.B.{.k.8._+%+t.a.z.7.6+h.).H.9.G. +4+b x z z ` F+", -"z z z e.~.7..+F.$+Q.s.G.s. +*+F.M.5+8.,.k..+h. +,.~.].Q.t.l.[.h.0.$+b.O.S./+}.K.T.b.&. +[+y.j.:.N.5+Q.M.f.r..+$+I.u.:.h.%+7.Q.J..+P./+5.Z.O.b A x z ` F+", -"z z z j.r.]+2./.$+d.`._+Q._.O.9.E.Q.t.++k.:.b.{.!.(.v..+!.++K.2.B.B.{.).b.h.7+(.k.f.*+b.2.T.k.<.}..+0.W.}.S.K.0.I.l.a.5+<.7.P.z.8.%+s.9.J.0+g z z z ` F+", -"z z z e.@.[.M.7.0+Q.#+5.J.B.7.F.j.0.V.I.C.%+!.B.].M.2.C._+(+z.c.h.[+b.O.]._.$+$+c./+z.5+F.B.b.y._._+C.].<+:.++9.(.J.]+Q.s.$+L.w.8.P.h.G.8+5+b z z z ` F+", -"z z A j.b./.S.B.Q.z.g.9.(.&.<+y.B./+l._+z.z.(.[+j.W.v.k.g.Q.K.:.}.2.0+y.<.[.).(.Q..+C.v.M.y.f.<.}.V.C.j.v.b.7+t./+h.:+`.i.0.C.u.A./+h.7.S.S.b z z z Z F+", -"z A z e.'.9.M.F.<.O.h.8.P./+$+ +_.W.c.'.N.s.}.v.j. +y.++Q.8.s.s._+*+:+B.B.Q.g.z.}.!._.f.W.<+f.!.Q.}._+2.Z.y.s.0+(._+N.$+[.t.[.A.(+7+*.G.O.&+g z z z ` F+", -"z z B e.&.v.B.&+J.:+@+B.F.B.&+<+O.S.9+8.'.j.S.j.@+,.!.].V.t.t.:.b.b.*+c.S.T.5+}.N.S.<.,.@+/+z.r.[.Q.5+T.J.k.t.#+$+K.r./.j.`.h.Q.V.++N.<+y.<+g z B z Z F+", -"z A z e.b.%+!+~+{+{+{+{+{+{+{+{+{+~+v l.*+0.v.f._.f.(.s.t.c.9+_.Q.r.M.F..+$+$+Q.K.N./+<+S.b.:.k.5+c.<+y.<+`.*.~.t.s.c.:._.K.t.#+A.++2.Z.*+8+g z z z ` F+", -"z z B e.{.i.w w w w w w w w w w w w {+6+t.N.A.M.<+++j.z./+I.h.(._+<.!.Q.<.c.5+z.K.c.).@+@+}.++B.N.}.z.S.0.b.$+(+H.<+i..+A.++6+V.z.[.*+]+<+c+g B z B ` F+", -"z B z e.@.S.'+w s t t t t t t t t m+t+V.h.0+0.:.y.:.F..+(+(.C.%+s.M.$+4+w..+#+~.s.b._.:.{.S.'.r. +k.R.v.B.{.7.8._+%+u.a.A.}.!.A.T.$+J.H.X.5+h z z A ` F+", -"z B z f.*.}.'+w w w w w w w w w w m+t+5.7+7+K. +,.~.].$ t.l.[.h.$ $ $ $ T./+K.W.0.$ @+4+y.$ $ $ $ $ O.j.$ $ $+G.K.t.(.i.%+h.6+i.{.Q.9.z. +4+h B z B ` F+", -"A z B e.~.v.'+w w w w w w w w w w m+t+'.k..+h.{.!.(.$ .+$ ++K.2.$ B.{.).$ i.(.r.$ :+$ b.T.k.1.$ +b.H.$ S.K.$ <.I.k.b.5+<.h.R.N..+P./+2. +S.g z B A ` F+", -"B z B d.j.]+'+w w w w w w w w w w {+t+%+k.:.b.B.].M.$ C.$ (+z.c.$ [+b.R.$ (.$+c.$ B.$ M.F.b.B.$ _+C./.<+_..+$ h.(.N.(+S.s.h.P.A.8.%+s.9.O.0+h B z B ` F+", -"B z B e.@.}.'+w t w w w w w w w w {+t+K.L.%+!.[+j.$ v.k.g.$ K.[.$ 2.0+A.$ [.(.$ +L.y.$ B.f.1.$ .+G.r.y.d.$ l.[./+j.:+++h.(+K.s.8.P.h.G.9+5+h z B B ` F+", -"B z B d.2._.'+w w w w w w w w w w m+t+_+C.z.(.y.r.$ $ $ $ $ s.s.$ ]+:+C.$ Q.C.$ $ $ $ $ [+i.!.$ }._+2.H.B.s.$ h.(._+O.$+[.0.C.u.A./+h.7.S.X.g B z B ` F+", -"B z B e.~.j.'+'+w w w w w w w w w {+t+'.P.s.}.r.@+$ !._.V.$ t.[.$ c.]+g.$ W.}.$ S.<.>.$ 2+B.q.$ Q.7+S.$ j.t.$ }.(+K.r.].j.t.[.A.(+7+*.F.O.@+h B z B ` F+", -"B B A j.&.v.'+w t w w w w w w w w m+t+8.'.k.S.C.$ &.d.6+h.t.$ $+$ $ $ $ 5+).$ <.F.F.[.[+$ @+y.$ [+%+M.B.$ $ ).(+_+#+M.f.h.#+g.Q.H.`.J.[+B.<+g B B B ` F+", -"B z B e.7._.'+w '+w w w w w w w '+{+t+V.7+r.v.].f..+f.Q.V.#+T.4+<.C.:.%+:.Q.I.Q.K.f.2.:.&._+z.E._+u.(+v.t.:./+t.#+C.v.b.S.K./+P.%+B.9+j.`.]+i z B B ` F+", -"B B B e.{.C.'+m+t+t+B+B+D+B+B+D+t+B+t+$+$+F.j.++O..+}..+).P.0+C.2+P.v.<+$+0.P.P.c.k.!.z.F.++r.f.2.r.>.F.4+J./+I.5+.+2.y.}.I.(.8.g.0+M.b.B.q.h B B B ` F+", -"B B B e.f.++t+H+H+H+H+H+H+H+H+H+H+H+H+_+Q.%+<+b.j.*+[.h.!.z.s.J.}.v.@+*+%+z..+.+(+t.Q.N.F.M.O.(+O.).F.J._.++k.z.k..+(+r.<+}.I.V.)..+[+5.4+$+h B B B ` F+", -"B B B e.,.R.t..+t.j.2.G.,.$+2+u./+z.s._.0.}.]+z.*+8+M.[.K.P.P.4+{.Q.j. +B.[.s.++T._.'._+2.:.M.F.}.!.W.4+O.2._+l._+Q.[+:+f.++++z.V.P. + +D.c+i B B B ` C+", -"B B B e.<.0.F.4+/.:.@+z.i.F.b.O.].++K._+0+M._.A.*+8+M.[.K.P.P.2+).Q.j. +B.[.s.++T._.~.<+b.:.M.F.}.!.W.4+O.2._+l._+Q.[+:+f.Q.0.Q.0.%+:.H.8+@+i B B B ` F+", -"B B B e.f.f.<+K.*+7.8+h.F.{.Z.T.t.C.V.g.s.4+O.T.W.y.{.k.5+#+S.C.O.K.<+:.$+R.K.8.:+:.y._+5+%+N..+C._.$+@+y.M.2+l.5+h.K.O.T.Q.h.l.s.g.B.<+E.s.h B F B ` F+", -"B B F e.'.&.r.r.~.q.M.[+].B.j.f.!.:.B.<+W.@+Z.~.q.O.W.q.D.@+:+Z.@+:+B.W.y.F.b.B.2.%+j.<.y.:+*+S.W.M.B.@+M.y.S.M.b. +r.b.S.8+[+:+0.&+e.~.*+`.h F B B ` F+", -"F B F e.:.E.B.@+|.D.F.Z.<._.e.<.E.S.:+[+:.y.S.@+y.O.:.5+O.].q.q.[+q.[+E.W.[+D.F.S.<+S.].S.*+@+X.y.!.5+f.W.:+|.S.<+0+[+|.<+E.@+d.b+*+E.6+X.S.h B F B ` F+", -"F B F e.r.O.:.<+S.Z.4+F.h.[.t.2.B.C.z.0.K. +2..+5+s.$+)._+t.).v.v.N.5+T.F.k.z.V.s.b.S.}.v.C.C.<.C..+++j.t.O.F.h.(.h.[+@+_.s.Q.++c.y.S.Q.M.4+i F F F ` F+", -"F B F e.<.<.S.o.Z.S.'. +k.r.E.y.x.5+}.h.M.v.r. +!._+r.C.K.l.c.{.j.b.S.v.Z.}.I.I.9+@+M.y.[+2.K._.c.++M.:+2+u.)._+#+%+$+<.y.I./+c.g.(+]+N.d.g+h F B B Z F+", -"F F F e.~.<.!+{+{+{+{+{+{+{+{+{+{+{+v (+t.[+M.<.O.T.v.h./+).z.$+v.S.Z.(+M.k.s.++Q.5+F.j.(+'.t.f.0.C.]+M./+v.t.t.P.h.@+2.].#+(.K.g.N.#+v.*+4+i F F F ` F+", -"F F F e.>.<.w w w w w w w w w w w w {+N.C.T.r.T.S.@+_+C.N.K.Q.k.$+[+@+v.l.G.Q.N._+h.k.j.B. +*+).[.B.2+B.(.K.g.N.N._+0.r.t.K.l._.s.T.S.E.@+0+h F F F ` C+", -"F F F e.r.2.'+w s t t t t t t t t m+t+M.z.S.K.@+j.s.!.h.}.V.N.$+8.c.!.s.O.2+z.N.:+v.T.S.B.[.Q._.{.a._+ +t._.s.T.h.0.M.F.8+(+0.I./+%+:.%+d.p.i F F F ` F+", -"F F F e.'..+'+w w w w w w w w w w m+t+Q._+y.5+W.:+_.$ $ Q.(.K.$ $ $ $ }.B.$ $ $ $ b.E.O.$ 7+_+s.$ $ $ $ g.I./+%+V.[.t.).r./+).(.++).V.].@+b+i F F F ` F+", -"I F F e.*.f.'+w w w w w w w w w w m+t+z.c.C.C.j. +$ <+%+$ (+#+$ k.c.$ _.<+$ f.h.W.$ 2.f.$ 0.#+<+$ b.<..+(.K.g.N.z.:+v.k..+s.t.N.t.z.t.:+@+X.i F F F ` F+", -"F I F e.O.).'+w w w w w w w w w w {+t+$+!.'.k.b.O.$ _.T.(.8.g.$ .+u.$ L. +$ y.].F.$ W._+$ k.K.r.$ w.T.P.l._.s.T.K._+<..+K.++I.%+C.(+$+C.j.p.i F F F Z F+", -"I F F e.~..+'+w t w w w w w w w w {+t+0+0.b.y. +B.O.$ $ s.Q.s.$ $ $ $ 2.2.$ y.++F.$ 2.!.$ c.N.$+$ $ $ }.g.K./+%+++z.t.F.~.V.~.[.I.N.v.%+d.b+i I F I ` F+", -"I F I m.*.$+'+w w w w w w w w w w m+t+N.}.Q.++>.W.v.j.t.$ #+#+$ b.b.{.M.:+$ M.S.F.$ d.@+$ T.z.9+$ E.y.6+(.P.g.N._+t.!._+].s.@+r.S.V._+R.O.&+h I F I ` C+", -"F I F e.f.C.'+'+w w w w w w w w w {+t+h.C.k.h.v.j.$ 5+t.$ P.I.$ %+v.K.O.*+$ B.&.W.$ _+K.$ 5+++_+$ .+A.0.l._.s.T.).$+f.z.Q.8.v.(+c.P.8.$+M.5+i I I F ` F+", -"I I I e.*.N.'+w t w w w w w w w w m+t+[.v.:+@+c.@+z.$ $ ++V.P.$ <+}.K. +).$ $ $ $ y.Q._.$ T.s._+$ C.<+8+g.I./+%+Q.z.O.B.T.K.K.$+h./+y.:.r.S.i F I I ` F+", -"I F I m.&.w.'+w '+w w w w w w w '+{+t+Q.(+v.r.B.M.z.*+h.(.0.s.F.S.V.f.Q.:+_+_+I.N.F.y._.y.0.s.M.,.z.R.2+{.<.C.9+s.C.O.b.2.t.).k.K.M.y.F.f.3+i I I I ` F+", -"I I I e.}.h.'+m+t+t+B+B+D+B+B+D+t+B+t+l.C.:. +.+S.!.W.Q.s.K.t.y.:+L.y.t.<.K.&.5+++r.B.W.2.s.6+M.0.c.K.O._+B.[.h.Q.t.:+O.++(.0.#+K.j.4+r. +]+i I I I ` F+", -"I I I m.[..+t+H+H+H+H+H+H+H+H+H+H+H+H+s./+<.@+b.B.[.$+N.0.$+V.S.F.z. +~.O.7+(.l.Q.b.f..+j.C.t.S.!./+K.:+C.<.s.g.5+0.@+0+b.Q.t.I.9.9.O.M.[+O.i I I I ` F+", -"I I I m.K.Q.B.2.t.%+B.5./+h.(.i. +C.Q.C.j.y. +z.F.<.*+N.0.$+V.S.F.B.@+~.R.7+(.l.Q.b.f..+j.C.t.S.!./+K.<+C.<.s.g.5+0.@+W.h.K._+K.t.Q.9.7.]+[+i I K I ` F+", -"I I I e.@.[.++S.5+r.y.G.t.,.b.6+f.k.Q.$+(+<.S.y.5+).B.k.(.I.P.<.<+*+@+v.v.<+#+I.K.v.$+!.:+T.C.f.f.N.2+M.++v.8+k.K.N.y.w.]+H.P.,.z.z.F./.8+<+i K I I ` F+", -"I I I m.~.t.k.%+v.H.B.j.<.G.'.*+4+h./+I.C._.<.[.<+c.h.%+(.l._.z.q.J.2.y.`.$+#+I.%+ +*+v.W.N.C.K.C.(+S._.L.N.)..+t.K.k.S.]+s._+`..+B.Z.J.:+4+i K I I ` F+", -"K I I m.,.].++).S.q.v.8+z.[+d.[+0+k.$+_.l.[.%+f.S.M.}.0+Q.T.7.).B.B.M.O.).h.(._+s.y.(+M.b.8+2.s.K.6+y.B.5+Q.T.P.P.(+[.1.*+g.9+g..+7.@+5+1.<+i I I I ` F+", -"K I J m.*.(+d.W.%+Z.2.J.t./.H. +d.]+#+$+.+W.T.h.F.T.A.V.Q.0./+[+).~.H.S.M.h._+_+`.B.k.%+y.O.b.r._+}.Z.O.F.[+z.7+V.C.W.:.J..+s.I.V.t.J.]+O.&+i I K I ` F+", -"K J K m.c.s.]+R.E.d.O.h.F.6+Z.L..+u.z.A.l.<+:.V.A.#+(.!._.V.N.2+k.%+S..+7.H.[..+I.k.F.5+:+L.:.y.[+.+0+).]+_.++Q.C.C.J.:.F.I.`._+(+z.E.y.H.b+i J I J ` F+", -"K I L m.t.c+Q.$+%+ + +7+:+<+}.$+@+@+i.0+(+F.7+5+c+4+b+s.<+8+0+ +8+:+8+<+1+&+ +1+<+f.A.]+0+$+4+%+0+T.6+R.6+2.N.0+@+0+9+9+6+6+K.]+6+f.*+5.0+^+b J K J ` F+", -"J J J m.m.m.d+d+a+|+g+d+d+3+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+|+d+3+g+a+3+d+g+o+0 J J J ` F+", -"I J K m.d+q+z+B+q+B+s+y+s+y+s+y+s+u+z+z+z+B+s+y+s+y+z+u+z+z+z+B+s+s+y+y+z+u+z+z+z+B+s+z+z+z+z+u+z+z+z+z+z+s+z+s+z+z+B+s+z+B+s+y+z+u+z+z+z+y+g J J N ` F+", -"J K J K K H J J K K K M K L K J J J J K N L M K K J K J H J N K L M K L L H J J J J H K J J N K K J J J J J J J M L K N L L K L K L L K K L K L N K ` F+", -"M M J K K N K N K N K L M M L L K L N N L K N K L L J K L K N L M K K M L E N K M K N K N K N K K N L L N H J K M L L N K L K K K K N K L M K L K N ` F+", -"K L L N K N E L M L M K K N N L M L E L L K L N L N N L L K M K K N N M K L N L N K M M M M L M L M M L K M K J L K K N K L L N N L L L M K N K N L ` F+", -"L L K N L L L K M L L L L L K N K K M L K N K N L K N L L L L L L L K N L L L K N L L K M L K M L L K M L L L K M L L L L L L L K N L L L K M L L K ` F+", -"L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ` F+", -"N L N N L M L M L N N N L M L L M M L M L M L L M N N L N L N L L M L L L L L L L N N N L L L L L P M N L N P M M L L L N L N L N L L L L L L L L L ` F+", -"L L O L M L L O O O K M L L M P N L N N N N P N N P O P L O L N L N M N P M N M L O N H O M O M N N L M N L M M P M N M M N M L L N O L M L L M L L ` F+", -"N N N N P N N M L O O N N N O L P O P L P N N O P N N O O L M M N O M P N M P M M N N N N M M O P P P P O M M O P M P P P P M L N O M M P N N L M O ` D+", -"P P N P L N N P O L N N P L P N P N O N N N N O N N N N P L N L P L M P M O L P L L M O E M O M M P N P M P O M M M O N N P P L P P N L M M P P P M ` D+", -"N P P O O O O O N O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O Q Q O Q O O O O O O O O O O O O M ` D+", -"O O x e.g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+|+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.} P O O ` D+", -"P O y 6.4.6.e.e.U.4.m.e.6.U.e.e.e.m.^+4.m.p.5.^+e.e.p.m.^+4.m.e.6.#+e.p.e.m.U.4.m.e.6.U.e.e.6.m.e.6.#+p.e.e.m.U.^+m.m.m.m.m.6.m.U.e.m.e.^+^+} O P O ` D+", -"P P y 6.O *.,.+.+.~.~...&.+.+.>.+.'.'.*.,.@.*.'.*.Y *...@.'.>.]...&.*.Y +.>...<.!.*.+...!.*.Y *.!.].:...*.+.>...+.*.Y @.!.@.*.@.@...~...&+ +{ P P O ` D+", -"O O y 6.].0.s.v.&.].f.u.:.2.y.F.j.y.P.[.v.<.5.{.5.~.B./.).[.M.B.j.v.f.<.v.8.8.t.k.{.u./.!.i.++O.C.!.z.{.@.j.<.).f.}.O.i.M.s.).:.<. +W.:+W.&+~ O O O ` D+", -"O O y 6.M.r.F.Z.'.S.q.M.i.a.A.@+%+@+_+F.H.8+`.5+j.]+7.9.9.J.9.B.r.z.:.t.:.$+).s.6+M.o.5+B.g.&.k.K.$+t.M.i.@+_+W.j.q.D.o.y.W.z.#+B.%+Z.<. +@+~ O O O ` D+", -"O O y 6.&.:.T.q.v+s+u+z+x+n+u+u+u+u+y+s+y+u+p+y+x+u+y+u+p+z+x+u+x+y+y+s+s+n+w+y+x+x+x+x+y+x+x+s+x+x+x+x+s+v+s+w+y+x+w+x+x+x+x+s+s+v+]+6+B.5+~ O Q O ` D+", -"O O y 6.).Q.f.o.f+( ^ ' = % % % % % % % % = ; ; - - ) ( [ ^ ^ ^ ( ( ( [ [ 7 8 9 f f f m l G T S u u u u G G G E S S S S S S S .S -.y..+4+<+~ O Q O ` D+", -"O O y 6.!.K.b.f.b+- * . % % % % % % % % % % * = ; - = * * ' ! ^ ^ ( ^ ( 7 ( 6 9 f l f l n l n n u u G u S G S S S T T T T T U U T n.)+5.H.c+~ O Q Q ` D+", -"O Q y 6.'.N.O.2+|+^ * U x+v+v+v+v+D+v+v+v+v+v+F+E+E+e+; ) l+w+v+v+v+v+v+s+p+x+w+E+v+v+v+s+e+7 W.p+w+v+x+x+w+x+s+x+x+w+x+x+x+x+n.n n.~.z.&+$+~ Q O O ` D+", -"O O y 6.*.V..+$+f+( = |+H+g+X.)+[+)+)+8+8+2+)+2+=+E+C+- ( H+p+&+1+1+8+W.q+H+}+3+1+1+1+)+w+E+^ e+H+c+8+b+b+b+b+b+b+b+1+b+b+|+b+E u n.W.t.%+x.~ Q O Q ` D+", -"O O y 6.'.].2+i.f+! & =+w+; # @ @ @ + + + . & . + n.G+; ^ H+#.. ' ' ' * ;.E+f - ( 7 ( ) f+F+( e+H+6 6 ( 7 7 6 6 6 8 9 9 8 9 9 u n 3.:+z.S.4+~ R O R ` D+", -"O R y 6.,.{.b.{.o+X l |+x+- ) f f 9 f f ' . = ; n i+G+' ^ H+$.; ^ ( 7 ) =+D+G ^ l l n 6 i+v+^ f+H+f G ;.$.;.;.$.;.$.;.;.;.;.3.;.#.)+@+:.]+3+~ Q R Q ` D+", -"Q R y 6.b._+t.%+H+H+H+H+p+- o+H+H+H+H+H+p+U = & H+H+p+; ( H+;.; ( 7 7 ) 2+H+S ^ l l f 7 e+D+^ f+H+9 ;.H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+8+]+0+Z.~ R R Q ` D+", -"Q R y 6.:.w.T.T.l+T f |+v+) ' 9 9 8 8 j p+H+o+T ' ' ! ; 6 H+;.; ( ( 7 ( 6 I 7 8 l m m 7 e+v+^ f+H+l n T T U T T U U U U U U U U G n.@+W.W.2+~ R O R ` D+", -"R R y 6.u.z.#+x.h+6 ) Q.v+7 * = * * * & & T w+G+l+6 = = 7 H+;.' 7 7 6 6 [ ( 9 f l m f 7 e+v+^ |+H+6 9 9 6 9 9 9 9 f f l l f m u l 3.Q.$+1.3+~ O R R ` D+", -"R Q y 6.'.g.K.B.i+u 7 b+C+9 - ) ) ) ' ' - & = ;.p+H+l+6 ( H+;.' ( 7 7 8 9 9 9 9 l l l 7 i+D+( f+H+o.;.-.3.-.3.3.-.o.-.o.o.-.n. .l -.P.8. +8+~ R R R ` D+", -"R R y 6.*.t.,.$+i+S 9 )+H+l ' ! ) ) ) ) ) ) ' & ' ^.G+#.( G+-.' ( 7 6 8 9 f 9 f l n m 7 l+H+^ 1+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+#.6 -./+$+M.:+~ R R R ` D+", -"R R y e.).v.}.}.i+S S 9 G 7 ( ( ^ ) ! ! ^ ! ^ ^ - = 6 ^ ^ u 6 ( 7 7 6 8 9 9 9 l n l u l u S 7 n T S S T T T U T T T T U U U .f n -.l.7+j.3+~ R R R ` D+", -"R R y 6.*.k.2+B.}+S T n 9 6 7 ^ ) ) ) ! ) ! ) ) ) ) ; ) ! ' ) ( ( 7 [ 7 6 6 7 6 6 9 f l f 6 l 9 9 6 9 9 f f 9 9 9 l l l l l l S u 3.$+g.3+0+{ R R R ` F+", -"R R y e.).:._+o.i+S S ;. .u X X S U T ^ 7 ! 9 S E u U S n 9 X ;.f 6 $. .l [ X #.T T $.X f X $. .#.$.u S u .-.3.X #.;.$.U #.-.;.l 3.c.9.@+ +~ V R R Z F+", -"R R y 6.@.t.++}.i+G .x+i+h+n.b+|+x+i+U n.S 1+p+s+v+p+|+f+1+=+)+8 #.n+p+b+ .v+n.i+p+1+|+u 1+x+s+-.s+-.n.3.2+)+1+e+e+c+w+|+}+p+p+l 3.K..+]+O.{ R R R ` F+", -"R R y e.u.[.T.*+e+u S ;.T X f f m .G .X .f u T T S G ( u ( ( ) 9 l f .#.X X U U $. .6 U $.#.#.$.;.$.-.#.n u U ;.;. .S ;.;.].9 ;._+l..+2+~ V R R Z F+", -"R R y e.}.k.L.R.l+ . .U S S G G l f 9 9 8 9 6 6 6 6 9 f 9 9 l l n l f 9 m n l n m l G G G G u n S u G G S S S S G G S u G S S S u o.]+S.<+3+{ V R R ` F+", -"R R y e.@.C.W.F.w+x+x+x+x+x+w+x+x+z+y+x+y+x+y+x+x+s+n+x+x+x+w+x+x+x+x+x+y+x+x+n+x+w+y+y+x+x+y+x+x+x+x+x+x+x+x+x+x+y+x+w+x+x+s+x+x+w+:+j.S.X.~ V R R Z D+", -"R R y e.[.f.@+S.y.B.1.J.$+'.E.S.*+B.t.H.s.4+k.y.j.B.b.}.K.K.).v.++C.b.b.!.Q.g.Q.(+r.<+M.1.O.W.v.j._+!.v.@+v.R.Q._+T.y.x. +P.6+L.h.]+~.B.E.X.{ V R R ` F+", -"R R y e.>.j.F.<+B.S.3+S.y.y.v.Z.%+C.$+#+5+G.~.E.E.Z.<._.Q.Q.M. +B.r. +_+u.k.w.T.$+@+q.B.S.2.M.S.1.<.<+O. +B.<.g.z.w.0+>.Z.%+0.7.8+d.y.7.O.$+~ V R R Z D+", -"R R y e.{.x.e.O.~.3+5+D.5+X.E.|.e.e.3+p.x.)+e.x.^.E.D.X.e.E.&+3+:+S.&+&+3+D.&+X.O.X.X.3+W.|.X.X.|.&+D.X.x.&+3+D.3+&+&+O.&+X.&+X.p.b+p.&+8+]+~ R R R ` F+", -"R R z d.m.m.d+d+a+|+g+d+d+3+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+g+d+3+g+a+3+d+g+o+~ R R R Z D+", -"R R y e.d+q+y+B+q+B+y+y+y+x+x+y+y+y+y+y+x+B+y+y+x+x+y+y+y+x+x+B+y+y+x+x+y+y+y+x+x+B+x+x+x+x+x+y+x+x+x+x+x+x+y+x+x+x+B+x+x+B+x+x+x+y+x+x+y+y+~ R R R ` F+", -"R R / { ~ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ~ R R R Z D+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ` F+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Z C+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Z H+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ..H+", -"%.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.>.H+", -"g+h+j+j+j+j+j+j+h+j+j+h+j+j+j+j+j+j+h+j+j+h+j+j+j+j+j+j+h+j+j+h+h+h+h+h+h+h+h+h+h+h+h+h+j+j+j+j+j+j+h+j+j+h+j+j+h+j+j+h+j+j+j+j+h+j+j+h+j+j+j+j+j+h+j+}+"}; +"% c #B9B9BF", +"& c #E0E0E3", +"* c #ACACB3", +"= c #9D9DA4", +"- c #F3F3F4", +"; c #5D5D6A", +"> c #5E5E6A", +", c #92929B", +"' c #878791", +") c #5C5C69", +"! c #EDEDEE", +"~ c #FCFCFC", +"{ c #909098", +"] c #909099", +"^ c #62626E", +"/ c #A5A5AC", +"( c #E2E2E4", +"_ c #E5E5E7", +": c #BDBDC2", +"< c #CCCCD0", +"[ c #70707C", +"} c #C4C4C9", +"| c #FAFAFA", +"1 c #CECED2", +"2 c #CFCFD3", +"3 c #CBCBCF", +"4 c #BFBFC4", +"5 c #C6C6CB", +"6 c #B3B3B9", +"7 c #B2B2B8", +"8 c #EBEBEC", +"9 c #CACACE", +"0 c #A0A0A7", +"a c #8D8D96", +"b c #FDFDFD", +"c c #8C8C95", +"d c #5A5A67", +"e c #F4F4F5", +"f c #E1E1E3", +"g c #F7F7F7", +"h c #5C5C68", +"i c #DBDBDE", +"j c #F8F8F9", +"k c #F2F2F3", +"l c #F1F1F2", +"m c #BCBCC1", +"n c #EAEAEC", +"o c #8F8F98", +"p c #E2E2E5", +"q c #A6A6AD", +"r c #A3A3AA", +"s c #F0F0F1", +"t c #333339", +"u c #34343A", +"v c #1C1F22", +"w c #1A1E20", +"x c #D1D1D5", +"y c #FBFBFB", +"z c #F5F5F6", +"A c #CDCDD1", +"B c #CECED1", +"C c #5B5B68", +"D c #D7D7DA", +"E c #A2A2A9", +"F c #666672", +"G c #676773", +"H c #ADADB3", +"I c #A8A8AF", +"J c #9F9FA7", +"K c #82828C", +"L c #EBEBED", +"M c #656571", +"N c #6D6D78", +"O c #DBDBDD", +"P c #6C6C77", +"Q c #D5D5D9", +"R c #D5D5D8", +"S c #9999A1", +"T c #9898A0", +"U c #A7A7AE", +"V c #61616E", +"W c #6A6A76", +"X c #EDEDEF", +"Y c #A1A1A8", +"Z c #D8D8DB", +"` c #7C7C86", +" . c #E0E0E2", +".. c #63636F", +"+. c #E6E6E8", +"@. c #B0B0B6", +"#. c #C0C0C5", +"$. c #D6D6D9", +"%. c #6B6B76", +"&. c #E9E9EB", +"*. c #C7C7CB", +"=. c #F9F9FA", +"-. c #C3C3C8", +";. c #74747F", +">. c #96969E", +",. c #C2C2C7", +"'. c #EEEEEF", +"). c #636370", +"!. c #C6C6CA", +"~. c #72727D", +"{. c #AEAEB4", +"]. c #BEBEC3", +"^. c #686874", +"/. c #DDDDE0", +"(. c #646470", +"_. c #DFDFE2", +":. c #7D7D87", +"<. c #D2D2D6", +"[. c #A9A9B0", +"}. c #8E8E97", +"|. c #C1C1C6", +"1. c #84848E", +"2. c #70707B", +"3. c #E4E4E6", +"4. c #696975", +"5. c #C8C8CD", +"6. c #6F6F7A", +"7. c #696974", +"8. c #DEDEE1", +"9. c #7D7D88", +"0. c #B4B4BA", +"a. c #777782", +"b. c #757580", +"c. c #9797A0", +"d. c #ABABB2", +"e. c #AEAEB5", +"f. c #8A8A93", +"g. c #E7E7E9", +"h. c #8B8B94", +"i. c #ECECEE", +"j. c #5F5F6B", +"k. c #B7B7BC", +"l. c #B6B6BC", +"m. c #C9C9CD", +"n. c #FEFEFE", +"o. c #94949D", +"p. c #EFEFF0", +"q. c #AAAAB0", +"r. c #898992", +"s. c #B7B7BD", +"t. c #C1C1C5", +"u. c #AFAFB5", +"v. c #60606C", +"w. c #61616D", +"x. c #DCDCDF", +"y. c #ACACB2", +"z. c #B8B8BE", +"A. c #C8C8CC", +"B. c #E8E8E9", +"C. c #85858F", +"D. c #878790", +"E. c #9D9DA5", +"F. c #9B9BA3", +"G. c #9F9FA6", +"H. c #D3D3D7", +"I. c #71717C", +"J. c #D1D1D4", +"K. c #BABABF", +"L. c #767680", +"M. c #AAAAB1", +"N. c #7A7A84", +"O. c #797983", +"P. c #F8F8F8", +"Q. c #DADADD", +"R. c #8A8A94", +"S. c #D3D3D6", +"T. c #E8E8EA", +"U. c #B9B9BE", +"V. c #B5B5BB", +"W. c #767681", +"X. c #9A9AA2", +"Y. c #73737E", +"Z. c #86868F", +"`. c #9E9EA6", +" + c #6B6B77", +".+ c #C5C5CA", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ $ % % $ $ $ & * = # + ", +" + @ $ $ - ; > - $ $ , ' $ & ) # + ", +" + @ $ ! ~ { ] ~ ! $ ^ / & ( / ^ $ _ : - < [ $ & $ $ $ $ ^ / & ( / ^ $ _ } | # + ", +" + @ $ & < 1 2 3 & $ / $ : 4 $ / $ $ 5 6 $ 7 $ & , $ 8 , / $ : 4 $ / $ $ 9 0 # + ", +" + @ $ & a b b c & $ ( - d d e f $ g h ; $ i $ & $ & ( - d d e f $ j ; # + ", +" + @ $ & ) k l ) & $ ( - d d e f $ & $ & $ & $ & ( - d d e f $ f # + ", +" + @ $ & c c & $ / $ m : $ / $ & $ & $ & n - o / $ m : $ / $ & # + ", +" + @ $ & & $ ^ / f p q ^ $ & $ & $ & r - s ^ / f p q ^ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u x & & & 8 y z | A B | # + ", +" + @ t v w w w w w w w w w w u C D E z z f F G f z # + ", +" + @ t v w w w w w w w w w w u H B z z I J 0 I z # + ", +" + @ t v w w w w w w w w w w u K L M z z N O i P z # + ", +" + @ t v w w w w w w w w w w u F L K z z Q c R z # + ", +" + @ t v w w w w w w w w w w u B * z z S - T z # + ", +" + @ t v w w w w w w w w w w u r D C z z ^ U V z # + ", +" + @ t v w w w w w w w w w w u y 8 & & & & W | X X X Y z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u | A B | Z # + ", +" + @ t v w w w w w w w w w w u z f F G f z # + ", +" + @ t v w w w w w w w w w w u z I J 0 I z z ` .; ..+.[ # + ", +" + @ t v w w w w w w w w w w u z N O i P z z @.@.#.0 # + ", +" + @ t v w w w w w w w w w w u z Q c R z z ; p $.d # + ", +" + @ t v w w w w w w w w w w u z S - T z z %.&. .; # + ", +" + @ t v w w w w w w w w w w u z ^ U V z z 2 { @.@. # + ", +" + @ t v w w w w w w w w w w u z z z S *. ; .` # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u =.& & -.;. z # + ", +" + @ t v w w w w w w w w w w u z >.,. z # + ", +" + @ t v w w w w w w w w w w u z ..'. ).* O !.~. z {.+.].^. z >./. .,.~. (.* _.& :.).* O !.~. # + ", +" + @ t v w w w w w w w w w w u z h E <. [.}. K |. | [.d [.7 z M 1.m [.7 ; C ^ [.}. K |. # + ", +" + @ t v w w w w w w w w w w u =.& k | 2. /.& & & 3. | 4. 4.( z ;.: p & X _.P /.& & & 3. # + ", +" + @ t v w w w w w w w w w w u z ; : 5. & 6. | 7. 7.( z B ] ) 4.=. 8.P & 6. # + ", +" + @ t v w w w w w w w w w w u z > L 9. I 0.> d a. | U d U 7 z & b.) 7 | I 7 ; C ^ I 0.> d a. # + ", +" + @ t v w w w w w w w w w w u z c.B ).d._.3.{. z e.+.4 7. z f.8.f r z ).* f .` ).d._.3.{. # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u z z =. .g.i ] E 8.6 # + ", +" + @ t v w w w w w w w w w w u z z z ) h.p }. i.j. # + ", +" + @ t v w w w w w w w w w w u z 7.k.( l.^. >./. .,.~. ^.: +.* z z = D ).* O !.~.m.n.& o. # + ", +" + @ t v w w w w w w w w w w u z 7 [.d [.@. M 1.m 6 I C d.| z P p. [.}. K |. z # + ", +" + @ t v w w w w w w w w w w u z ( 4. 4.f ;.: p & X p 4. W | z N '. /.& & & 3. z # + ", +" + @ t v w w w w w w w w w w u z ( 7. 7.f B ] ) 4.=. p 7. W | z = D & 6. z # + ", +" + @ t v w w w w w w w w w w u z 7 U d U @. & b.) 7 | 6 U d q.| z h r.f c I 0.> d a. z # + ", +" + @ t v w w w w w w w w w w u | X X X Y 7.s.( k.^. f.8.f r z ^.: +.H z =.& g.i { ).d._.3.{. z Z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ & $ $ % % $ $ $ & # + ", +" + @ $ & $ $ - ; > - $ $ $ & # + ", +" + @ $ & ^ / & ( / ^ ^ / & ( / ^ $ 3.t.l u.v. $ ! ~ { ] ~ ! $ ^ / & ( / ^ 4.].l U $ & w.E x.+.y.(. # + ", +" + @ $ & / $ : 4 $ / / $ : 4 $ / $ $ z.< $ c. $ & < 1 2 3 & $ / $ : 4 $ / s.$ z.< $ & E $ : q.k y. # + ", +" + @ $ & ( - d d e f ( - d d e f $ - P $ A. $ & a b b c & $ ( - d d e f B.- P $ & & $ $ $ $ i. # + ", +" + @ $ & ( - d d e f ( - d d e f $ - P $ A. $ & ) k l ) & $ ( - d d e f B.- P $ & _.n.o C.C.D. # + ", +" + @ $ s u.u.u. / $ m : $ / / $ m : $ / $ $ z.< $ c. $ & c c & $ / $ m : $ / s.$ z.< $ & E.$ x F.d.+. # + ", +" + @ $ $ $ $ $ ^ / f p q ^ ^ / f p q ^ $ 3.#.l @.v. $ & & $ ^ / f p q ^ 4.4 k H $ & v.G.H.j &.m # + ", +" + @ $ & # + ", +" + @ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u , n.P =. .g.i ] , n.P Y & & n.& & Y d.L | # + ", +" + @ t v w w w w w w w w w w u < 2 / z ) h.p }. < 2 / z ` W z # + ", +" + @ t v w w w w w w w w w w u ..n I./. z = D ..n I./. z z # + ", +" + @ t v w w w w w w w w w w u c.% 8.[ z P p. c.% 8.[ z z # + ", +" + @ t v w w w w w w w w w w u J.K U q. z N '. J.K U q. z z # + ", +" + @ t v w w w w w w w w w w u F | L 8 X p z = D F | L 8 X p z z # + ", +" + @ t v w w w w w w w w w w u = K. _.L. z h r.f c = K. _.L. z z # + ", +" + @ t v w w w w w w w w w w u $.C. M.u. =.& g.i { $.C. M.u. z * X n.X * # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u , n.P =. .g.i ] , n.P Y & & n.& & 9 8.p 5.b. # + ", +" + @ t v w w w w w w w w w w u < 2 / z ) h.p }. < 2 / z a.%. c A. # + ", +" + @ t v w w w w w w w w w w u ..n I./. z = D ..n I./. z w.p. # + ", +" + @ t v w w w w w w w w w w u c.% 8.[ z P p. c.% 8.[ z Y t. # + ", +" + @ t v w w w w w w w w w w u J.K U q. z N '. J.K U q. z N.+.7. # + ", +" + @ t v w w w w w w w w w w u F | L 8 X p z = D F | L 8 X p z P +.O. # + ", +" + @ t v w w w w w w w w w w u = K. _.L. z h r.f c = K. _.L. z ^ _.f. # + ", +" + @ t v w w w w w w w w w w u $.C. M.u. =.& g.i { $.C. M.u. z / P.& & & C # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u , n.P =. .g.i ] , n.P Y & & n.& & p p & 1 ` # + ", +" + @ t v w w w w w w w w w w u < 2 / z ) h.p }. < 2 / z ^ 9.Q. # + ", +" + @ t v w w w w w w w w w w u ..n I./. z = D ..n I./. z R.S. # + ", +" + @ t v w w w w w w w w w w u c.% 8.[ z P p. c.% 8.[ z = '.T.M # + ", +" + @ t v w w w w w w w w w w u J.K U q. z N '. J.K U q. z ; U 5 # + ", +" + @ t v w w w w w w w w w w u F | L 8 X p z = D F | L 8 X p z (.8 # + ", +" + @ t v w w w w w w w w w w u = K. _.L. z h r.f c = K. _.L. z I. d J U. # + ", +" + @ t v w w w w w w w w w w u $.C. M.u. =.& g.i { $.C. M.u. z V.3._.K.N # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u W.5.( 3.X. =.& f ,.Y. =. .g.i ] z =.& & & P # + ", +" + @ t v w w w w w w w w w w u 3 Z. ; I. z X.|. z ) h.p }. z z # + ", +" + @ t v w w w w w w w w w w u g.2. z ).n z = D z z # + ", +" + @ t v w w w w w w w w w w u `.e 5.C. z ) / % z P p. z =.& & m. # + ", +" + @ t v w w w w w w w w w w u 7.E _ @. =.& i 7 + z N '. z z # + ", +" + @ t v w w w w w w w w w w u %.T. z z = D z z # + ", +" + @ t v w w w w w w w w w w u r.d }..+ z z h r.f c z z # + ", +" + @ t v w w w w w w w w w w u ,.g. ..+;. z =.& g.i { z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/Zlmloopm2.xpm b/hdspmixer/pixmaps/Zlmloopm2.xpm index 55b121f..f3b2159 100644 --- a/hdspmixer/pixmaps/Zlmloopm2.xpm +++ b/hdspmixer/pixmaps/Zlmloopm2.xpm @@ -1,513 +1,434 @@ /* XPM */ -char * Zlmloopm2_xpm[] = { -"76 253 257 2", -" c None", -". c #D1E0E5", -"+ c #E7F6F9", -"@ c #F2FFFF", -"# c #FBFFFF", +char const * Zlmloopm2_xpm[] = { +"76 253 178 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", "$ c #FFFFFF", -"% c #C4CACB", -"& c #C7D5D9", -"* c #BECDD2", -"= c #B8C5C9", -"- c #AEBDC1", -"; c #B2BDC2", -"> c #A0A09F", -", c #B5B6B6", -"' c #A9B5B9", -") c #A2ADB2", -"! c #A1ACAE", -"~ c #AAAAAA", -"{ c #A6A6A6", -"] c #A0A0A0", -"^ c #9CA5A9", -"/ c #9F9FA0", -"( c #939DA1", -"_ c #9FA09F", -": c #A09F9F", -"< c #90928F", -"[ c #949A9B", -"} c #9B9C9B", -"| c #9D9E9D", -"1 c #999A99", -"2 c #969896", -"3 c #919391", -"4 c #959795", -"5 c #929592", -"6 c #899497", -"7 c #8C969A", -"8 c #8A9395", -"9 c #848E91", -"0 c #8C918C", -"a c #8D918D", -"b c #888C87", -"c c #8B8E8B", -"d c #898D89", -"e c #8A8E8A", -"f c #828B8D", -"g c #868C86", -"h c #858A85", -"i c #828982", -"j c #818587", -"k c #818681", -"l c #7C8789", -"m c #7D8689", -"n c #7B8385", -"o c #D170D1", -"p c #C54CC5", -"q c #A837A8", -"r c #902F90", -"s c #7070D1", -"t c #4C4CC5", -"u c #757E81", -"v c #3737A8", -"w c #2F2F90", -"x c #80857F", -"y c #7F887F", -"z c #7E847E", -"A c #7E817E", -"B c #7A807A", -"C c #708070", -"D c #6E716E", -"E c #737877", -"F c #787F78", -"G c #737B7C", -"H c #747C73", -"I c #767D76", -"J c #747C74", -"K c #757B75", -"L c #747B74", -"M c #737B74", -"N c #747B73", -"O c #727972", -"P c #737B73", -"Q c #717971", -"R c #707870", -"S c #6D7679", -"T c #6C7274", -"U c #686E71", -"V c #70786F", -"W c #707060", -"X c #616669", -"Y c #696C6A", -"Z c #6D6E6D", -"` c #6F6F6F", -" . c #646B6D", -".. c #666966", -"+. c #626563", -"@. c #616561", -"#. c #5C6365", -"$. c #595F61", -"%. c #5F685F", -"&. c #5B605B", -"*. c #5E615E", -"=. c #506050", -"-. c #494F51", -";. c #545A5C", -">. c #5A5D5A", -",. c #5A5E5A", -"'. c #595C59", -"). c #545954", -"!. c #565956", -"~. c #575A56", -"{. c #555855", -"]. c #535654", -"^. c #545554", -"/. c #545754", -"(. c #515651", -"_. c #535653", -":. c #525552", -"<. c #515451", -"[. c #515551", -"}. c #505450", -"|. c #515251", -"1. c #515351", -"2. c #505350", -"3. c #4D5254", -"4. c #50584F", -"5. c #50544F", -"6. c #4F584F", -"7. c #4C504B", -"8. c #4F544F", -"9. c #4E524D", -"0. c #4E534E", -"a. c #4F534F", -"b. c #4F524F", -"c. c #4E524E", -"d. c #4F514F", -"e. c #4F504F", -"f. c #4E514E", -"g. c #4D524D", -"h. c #4C514C", -"i. c #4D514D", -"j. c #4D504D", -"k. c #4C504C", -"l. c #4B504B", -"m. c #405040", -"n. c #45494B", -"o. c #4A4E4E", -"p. c #4D4E4D", -"q. c #4C4E4C", -"r. c #4C4F4C", -"s. c #494E49", -"t. c #4A4F4A", -"u. c #4B4F4B", -"v. c #4B4E4B", -"w. c #4A4E4A", -"x. c #4B4C4B", -"y. c #4A4D4A", -"z. c #484D48", -"A. c #494D49", -"B. c #494C49", -"C. c #484C48", -"D. c #494A49", -"E. c #484A48", -"F. c #484B48", -"G. c #484C47", -"H. c #444843", -"I. c #474C47", -"J. c #464A45", -"K. c #464B46", -"L. c #474B47", -"M. c #474A47", -"N. c #464A46", -"O. c #464946", -"P. c #454A45", -"Q. c #444944", -"R. c #454945", -"S. c #454845", -"T. c #444844", -"U. c #404840", -"V. c #434843", -"W. c #434644", -"X. c #454645", -"Y. c #454645", -"Z. c #444744", -"`. c #424641", -" + c #434643", -".+ c #434743", -"++ c #424642", -"@+ c #424542", -"#+ c #414641", -"$+ c #404440", -"%+ c #414541", -"&+ c #414242", -"*+ c #404340", -"=+ c #3E4142", -"-+ c #6B236B", -";+ c #531B53", -">+ c #4D194D", -",+ c #471747", -"'+ c #23236B", -")+ c #3C3E40", -"!+ c #1B1B53", -"~+ c #19194D", -"{+ c #171747", -"]+ c #40433F", -"^+ c #40483F", -"/+ c #3B403B", -"(+ c #3F443F", -"_+ c #3D423D", -":+ c #3F423F", -"<+ c #3E413E", -"[+ c #3D403D", -"}+ c #1F2420", -"|+ c #2D3030", -"1+ c #363A39", -"2+ c #3B3F3D", -"3+ c #3E3E3E", -"4+ c #3C3F3C", -"5+ c #3A3D3A", -"6+ c #3B3F3B", -"7+ c #393D39", -"8+ c #383B39", -"9+ c #373C37", -"0+ c #363A36", -"a+ c #303F30", -"b+ c #333534", -"c+ c #323532", -"d+ c #303730", -"e+ c #242728", -"f+ c #2A2C2D", -"g+ c #2F2F2F", -"h+ c #212E2E", -"i+ c #222425", -"j+ c #202720", -"k+ c #3B143B", -"l+ c #1D1F20", -"m+ c #14143B", -"n+ c #0F100F", -"o+ c #1C1C18", -"p+ c #121212", -"q+ c #0F1510", -"r+ c #170817", -"s+ c #0E0F10", -"t+ c #080817", -"u+ c #100F0F", -"v+ c #07090A", -"w+ c #0A0A0A", -"x+ c #0D0D0D", -"y+ c #0E0E0E", -"z+ c #0F0F0F", -"A+ c #0B040B", -"B+ c #02050D", -"C+ c #040404", -"D+ c #050606", -"E+ c #070707", -"F+ c #060606", -"G+ c #030303", -"H+ c #000000", -"^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+}+", -"V W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W g+", -"> > > > > > > > > > > > > > : : : : : : > > > > : : : : : : : : : : : : : : : : : > > > : : : : : : : : : : : / / / / / / _ _ _ _ _ _ _ _ > > : ] : ` C+", -"> / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / : ] : ` F+", -"> / y e.g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%./ : ] : ` C+", -"> / y e.6.6.e.e.U.6.m.e.6.(+e.e.e.m.U.6.m.e.6.(+e.e.e.m.U.6.m.j.6.U.e.e.e.m.U.6.m.e.6.U.p.e.4.m.e.6.U.e.e.e.m.U.U.m.m.m.m.m.6.m.U.j.m.e.U.U.] ] ] : ` F+", -"> / y e.D ..D @.|.'.@.,.]...&.+.*.'.*.*.*.&.1...>.+.*...{.&.....*.@.D ..*.*.&.'.......@...*.,...&.@.*.*.D *.+...*.@.@.:.....*.@.@.>.Z [.j. +] ] ] : ` C+", -"> / y e.u.~.l.:.h./.].k.h.B.{._.b.c.z.).T.2.f.S.v.A.F.N.0.0.t.'.<.:.j.a.<.{.g.N.h.].2.r.y.{.!.<.z.K.k./.}.M.%+}.K.h.W.c.y.0.).N.z.!.k._.&+0+: ] : : ` F+", -"/ / y e.*.z.2+.+$+<.W.<+(+(+j.t.y.h.z.P.++_.y.c.$+N.v.Q.h.7+_+q.b.$+*+_+:+!.V.7+s.$+S._+b.S.y.W.<+<.N.S.N.:.C.I.0.s.@+f.s.t.0.(.(.6+ +$+E.b+: ] ] : ` C+", -"_ / y f.~.F.B.@+Q.[+_+0.).%+b.$ $ $ %+*+k.$ $ $ [.r./.++h.:.h. +(.(.b.y.C.<.(.(.$ $ N._.K.$ K.).v./.++h.:.h. +[.2.T.c.M.b.I.g.[.5+<.j.S. +@+/ ] | / ` F+", -"_ _ y e.*.).b.b.).b.~./+P.h.(.$ $ $ ]+@+L.$ $ $ g.++%+c.<+6+:.F.(.(.c.v.c.8+K.++0.7+N.M.$ $ K.I.%+%+c.<+6+:.F.k.S.s.T.r.y.K._+z.P._+S.s.X.4+] ] / / ` C+", -": / y e.@.f.[.:+++r.c.y.g.5+r.$ $ $ $ F.$ $ $ $ #+:+$ $ $ $ }.b.$ $ $ $ 0.2.K.I.$ $ 0+$ $ $ $ .+*+$ $ $ $ }.b.$ $ $ $ q.v.I.#+s.!.C..+W.%+&+: | / : ` F+", -": / y e.&.F.B._.0.b.0+K.8.}.!.$ $ $ $ r.$ $ $ $ 6+$ $ ]+T.$ $ v.$ $ $ $ $ $ _.0.$ $ _.W.$ $ *.8.$ $ ]+T.$ $ v.$ $ t.B.M.$+H.#+_+I.Q.F.S.O.c+: : : | ` F+", -"/ | y e.{. +).W.c.W.z.t.K.K.$+$ $ (.$ %+$ %+$ $ z.$ $ k.(+$ $ {.$ $ b.y.$ $ (.(.$ $ N._.$ $ I.).$ $ k.(+$ $ {.$ $ ++).y.y.G.I.6+#+.+t.F.O.X.: / | / ` F+", -"_ : y e.*.$+O.2.[.B.v.'.8.Q.z.$ $ #+$ $ $ (.$ $ [.$ $ V.h.$ $ k.$ $ c.v.$ $ K.++$ $ 0+M.$ $ *.h.$ $ V.h.$ $ k.$ $ t.M.7+`.P.s._+8.N._.j.[+8+/ : | / Z F+", -"/ | y e.b.t.y.b.'.F.z.(.g.++j.$ $ #+$ $ $ w.$ $ ~.$ $ z.I.$ $ y.$ $ *.v.$ $ K.I.$ $ N.$+$ $ I.++$ $ z.I.$ $ y.$ $ }.(+7._.).P.}._+++c.~.5+5+: | / / ` F+", -": | x j.r.y.$+).W.b. +y.r.N.M.$ $ .+Q.$ 2+t.$ $ $+k.$ $ $ $ t.6+$ $ h.v.$ $ _.0.$ $ *.W.b.$ $ K.k.$ $ $ $ t.6+$ $ z..+f.z.t.K.I.5+%+W.y.@+<+: | | / ` F+", -"/ | A e.@.}.).K.K.C.$+C.Q.C.$+Z._+_+2.).$+c..+<+S._.N.c.C.T.t..+c._.f.].).(.t.++!..+z.<.F.F.].).a.i.5+_.j.f.*+b.0.++t.}.b.`.g.++0..+O.9.@+<+| : : | ` F+", -"| / A p.<.[.Q.u.N.M.,.V.c.0.y.k.y.6+(.g.K.w.k.Z.~.<+r.F.K.l.f.].h.2.O.t.S.}.z.I.9+%+K.r.<+2.M.:.f..+C.*+/+r.).(+#+%+$+8.z.I./+c.c._+(+J.d.f+| | / / Z F+", -"| / y 6.[.N.7+].&.h.z.I.0.K.b.O.y.z._+9+(.h.i. +4+W.<+(+t.s.@+(+%+<.B.y.].K.P.Q.T..+s.y.<.E.:+M.A.g.w.W.S.F.Q.K.5+k.z.I.8+I.S.O.z._+8.7.<+&+| / | | ` F+", -"| | y 6.[.K.'.c.C.N.l.z.++++F.S.@+h.P.l.C.0.t.].Z.c._.h.#+++Q..+I.u.O.v.j.K.K.}.T.h.[.F.[+*+ +:.H.8.,.F.r.<.s.t.$+K.$+Q.0.t.k.(+<+/+J.J.]+&+: | / | ` F+", -"| / y 6.<.0.;+>+,+,+,+,+,+,+,+,+,+>+q }.N.s.t.<.&.2+.+h.I.++0.s.2+F.2.0.K.Q.t.0.M.v.'.O.v.y.J.2.K.H.T.5+:+v.h.V.8.Q.z.T.K.8.c.c.8.P.8.5.:+X.| / | | ` F+", -"| | y e.f.k.r r r r r r r r r r r r ,+P.$+/+.+F._+*+.+s.t._+z.N.2.j.<+<.++P.P.0.t.).y.B.W.i.2.<.h.,.s._+E.[+C.5+V.0.z.}.[.l.h.N.t.s..+A.X.<+| | / | ` C+", -"| | y 6.d.:.-+r o p p p p p p p p k+r+}.'.k.Q.f. +:.Z.).V.0+C.5+N.r.:+%+a.V.5+}.N.T.<.&. +4+y.j.[.Q.6+O.M.f.t.#+$+K.t._.}.I.N.!.T./+0.`.S.g+/ | | } ` F+", -"| | y e.&.v.-+r r r r r r r r r r k+r+#+C.$+Q._.y.$ $ $ $ $ w.}.$ N.C.].c.B.$ }.++T.h.r.$ y.*+M.$+g.P.M.!.r.}.8.c.y..+h.k.`.c.N.Q.#+P.[+v.5+| | : | ` C+", -"| | y 6.)..+-+r r r r r r r r r r k+r+#+Q.F.O.K.<+<.$+,.c.$ w.w.$ z.7+B.5+j.$ $ $+@+v.$ $ i./+b.F.Q.W.S.c.j.t.g.z._+f.].t.#+K.[.c.T./+7.:+E.: | | } ` F+", -"| | y e.].K.-+r r r r r r r r r r ,+r+t.K.O.f.W.<.5+$+Q.$ <.(+N.$ ~.K.W.$+B.$ $ C.].5+$ $ 7+y.S.:+`.b.y.C.<.c.(+_.t._.:+N.).t.8.8.).'.7.S.8+| | : } ` F+", -"| } y e.k.c.-+r p r r r r r r r r ,+r+#+z.F.W..+ +c.2.$ $ 5+t.2+$ <+C.].c.B.$ z.$ F.$ j.$ 8+9.'.).C.c.v.c.8+K.++0.7+M.j.].l.P.).c.b.O.t.|.5+| | | | ` F+", -"| | y e.:.).-+r r r r r r r r r r k+r+t.}.[+<+S.O.<.M.$ I.<.c.M.$ z.7+B.5+j.$ ].$ W.$ B.$ J.7.<+7.z.h.y.0.2.K.I.).s.$+F.K.#+h.I./+).<. +X.<+| | | } ` F+", -"| } y e.>.z.-+-+r r r r r r r r r ,+r+s.C.:. +C.B.5+$ c.l.5+++v.$ ~.K.W.$+@+$ *+$ C.$ (+$ K.F.*+j.0+h.v.c. +_.0.s.c.W.b.f.g.).Q.h.P.$+r.0+5+| | } | ` F+", -"} | x f.2.}.-+r p r r r r r r r r k+r+P.t.B.<.v._.$ $ $ $ $ h.@+$ $ $ $ <+!.$ f.s.$ l.z.$ 4+]+@+:..+0.,.C.r.}.z.t.*+F.@+%+$+}.P.#+<+f.A.5+D.} : } } ` F+", -"| } y e.].O.-+r -+r r r r r r r -+,+r+(+Q.F.2.K.f.z.[+N.I.V.s.B.r.c.*+_.S.k.++}.{.].O.z.4+9. +M.S.j.Z.<.O.v.c.I.5+(+F.].S.8.l.l._+_+_+N.@+8+| } | } ` F+", -"| } y e.&.v.-+k+r+r+A+A+A+A+A+A+r+A+r+Q.Q.$+:.<.@+0.5+0.V.h.%+5+'.F._.h.2._+h.++(+@+<.M.q./.H. +b.<+%+@+S.S.T.l.K..+B.W.t./+Q.7+~.(+{.++:+4+} | | } ` F+", -"} } y e.'.h.r+H+H+H+H+H+H+H+H+H+H+H+H+#+z.N.M.++_.R.Q.$+P.#+k.h.j./+A.5+0.Q.z.++_.k.2.(.@+6+]+6+<.%+f.y.b.B.k.5./+K._.S.W.0._+_+_.!..+R.]+&+} } } } ` F+", -"} } y e.!.:.s.N.k.b.W.C.z.++{.M.(.N.0.F._+$+t.2.r.5+h.Q._.(.$+%+}.<+F.8+P.C.c.C.(._+C._.2+<.`.b.).F.%+S.v.]+K.z.0.J.9.B.c.(.7+g./+_.B.'.D.<+| } | } ` F+", -"} } y f.).u.K.1.h.@+0.#+L.0+M.K.B.6+Q._+t.!.s.F.<.t.<+c.K.8.$+v.@+:.:+K.y.0.z.h.%+.+t.O.<.k.a.<+R.k.~.r.j.b.S.).s.8+!.c.4+Q.I.V.t.F.v.j.5+W.} } } } ` F+", -"} } y e.!.K.9+r.(+).t.6.(+i.M.B.:.0+U..+t._.z.v.B.B.!.h.}._+z.z.(+E.<.5+:.t.P.7+C.C.5+N.Z.M.F. +:.}.++2.5+2.S.h.#+7+~.K.s._+A.]+K.8.(.s.*+3+} } } } ` C+", -"} } y e.*.*+.+ +%+}.z.I.5+c.b.$+@+C._.0+ +y.[.j. +*+O.++P.7+c.s.k.2.y.j.B.%+P.Q.C.K.v.2+@+2.S.2.T.H.H.B.W. +y.s.`.h.5+ +<.7.5._+0.`.(+`.x.5+} } } } ` F+", -"} } y p.@.@+j.B.j.T.).I.h.:.@+r.j.%+}.8.(+$+%+O.y.B.B.K.7+K.C.T.z.F.S.~.@+$+g.#+6+_+0.F.0+:+<+<.5+`..+]+W.<+@+/+(+8+_+J.@+9+{.*.h.z.I.9.`.&+} } } } ` C+", -"} } x e.&.r.F.%+%+s.(.(.#+%+ +$+v.N.0.l.0.c.K. +r.W.B.s.z.).}.N.k.r.<.v.B.k./+}./+s.N.{.B.q.B.4+2.l.5.B.f.>.S.z.z..+i.N.T.h.a.R.Q.g.9+9.&+0+} } } } ` F+", -"} } y e.).%+++w.P.K.#+(.V.P.$+N..+g.l.l.6+z.6+<.O.y.S.).l.0.[.++/+@+4+:. +0.s.0.C.s.}.:+B.{.O.2._.5+b.[+{.v.,.g.h.~.u.C..+H.7+$+s.t.V.5.@+3+} } } } ` C+", -"} } y e...(+;+>+,+,+,+,+,+,+,+,+,+>+q t./+0.T.F.C.}.j.0.(.z.K.l./+/.<+F._.t.Q._+v.M.S.S.B.2. +`.H.s.7+@+B.E.h./+9.9.K.T.4+).u.:.}.~.(.z.5+8+} } } } ` F+", -"} } y e.@.'.r r r r r r r r r r r r ,+(+:+*+$+y.F.*.6+.+h.I.++0.s.2+L.2.0.K.Q.s.[.(+{.j.[+B.r.4+t.g.&.9.E.`.7.I.7.%+5+H.0.t.6+_+~.I.6+`.p.c+} 1 } } ` F+", -"} 1 y f.!.(.-+r o p p p p p p p p k+r+/+_+F.C.z.y._+*+.+s.t.(+z.N.2.j.:+[.++P._+{.S..+_.f.`.F.f.4+u.B.F.G.5+_.H.H.[+`.v.h.7.w.i.u.Q.G.`.S.b+} 1 } 1 ` F+", -"} 1 y e.}.O.-+r r r r r r r r r r k+r+#+_.r.2.(. +$ v.0.z.Q.~.$ M.$ {.:.F.5+s.z.Q.:.5+b.2+).A.,.a.i.'.v.B.<+!.s.8.0.~._.y.H.G.(.`.c.i..+[+5+1 } } 1 ` F+", -"1 1 x e.@.L.-+r r r r r r r r r r k+r+Q.T.@+B.*+<+$ $ /+8.$+$ $ b.z.v.2.[+B.(..+h.v.$+y.y.:.[.W.$+<+F.y.(.j.s.V.V.!.S.O.B._+P.V.H.~.b.C.]+[+} 1 1 1 ` F+", -"} 1 y e.&.v.-+r r r r r r r r r r ,+r+)._.y.y.y.S.$ $ _+%+z.$ $ j.$ v.c.$ M.k.$ 5+:.*+*+'.@+y.O.:.F.%+1.A.y.Q.t.V.Q.B.B.H.G.7.K.P.Q.w.i.b+@+1 } 1 1 ` F+", -"1 1 y e.>.#+-+r p r r r r r r r r ,+r+s.7+y.j.&.j.$ @+$ t.$ f.$ y.$ r.z.S.$ $ ).).F.@+S.:.B.v.*+>.9+}.j.j.Z.v.P.V.s.!.M.(.V.t.P.0+}.2.B.4+8+1 1 1 1 ` F+", -"1 1 x e.>.(.-+r r r r r r r r r r k+r+(.). +O.N.r.$ $+$ K.$ $+$ Z.$ f.s.q.$ $ C.%+E.8+Z.y.S._.M.S.A.L. +r.M.*+l.I. +@+B.1.`.P.h.l.N.A.:+*+b+1 1 1 1 ` F+", -"1 1 z e.e.W.-+-+r r r r r r r r r ,+r+P.K.:+2.j.@+$ *+$ C.$ (+$ O.$ v._+1.$ $ K.5+@+ +q.j.*+*+2..+i.i.@+f.%+++J.V.s.J.&+9.#+$+V.t.9+$+K.*+[+1 1 1 1 ` F+", -"1 1 A p.@.r.-+r p r r r r r r r r k+r+h.b+z.b.2.!.$ f.s.$ l.z.$ B.$ M.k.$ ).K.$ }.7.[+9.]+`.9.b.G.s.A.4+9.h.t.8._+_.K.`.Z.(.J.5.l.`..+[+B.8+1 1 1 1 ` F+", -"1 1 A e.&.#+-+r -+r r r r r r r -+,+r+/.t.<.(+v.y.<+N.}.5+}.s.N.6+y.B.5+Q.T.K.P.$+<.<.@+9.8+9.H.9. +5+~.O._.h.5./+g..+$+!.l.7+H.s.(.E.B.]+8+1 1 1 1 ` F+", -"1 1 A p.*.W.-+k+r+r+A+A+A+A+A+A+r+A+r+U._+<+$+c.v.y.j.s.K.++(.B.0.++O.v.S.c.5+_+u.9.$+%+<+:+!.S.6+l.`.S.<+b.Q.s.`./+<.M. +8.P.t.(.`.`.r.8+b+1 1 2 1 ` F+", -"2 1 A e.1.s.r+H+H+H+H+H+H+H+H+H+H+H+H+'.6+++v.N.S.@+_.N.P._+T.++f.h.r./+s.6+8.V.K..+{.7.d.:. +5+$+5+b.*+9.y.2.z.s.9.[+F.S.H.(.I.z.0.t.%+O.3+1 1 1 2 ` F+", -"1 1 A e.>.C.t.}.O.v.B.C.!.v.M.b.<+<. +@+c.<.r.:.d.5+j. +r. +t.:+ +r.<.$+ +$+ +O._+v.q.q.<+<+j.<+4+1.J.1.E.4+d.7.r.B.1.4+_.V.g.(.5+9.[+:. +v.2 1 1 1 Z F+", -"2 1 A p.:.6+S.F.s.S.B.t.K.K.[.N.b.[.P.5+_+$+:..+d.&.F.k.0.z.s.$+B.%+S.[.r.k./+_+/+M.E.H.9.y.:.~._.7.`.4+j.!.S.8./+j.`.B.F.$+++u.F.5+d.^.c+&+1 2 1 2 ` F+", -"1 2 A e.<.z.%+M.C.2.K.c.z./+O.z.S.k.z.t.h.*+_.O.r.T.:.~._.Q.C.[+f. +M.Q.f.Q.(.Q.z.j.B.4+$+z.).q._+H.7+!.%+{. +Q.A.y.O._.B.0+(.(+K.$+_.u.y.5+1 2 1 2 ` C+", -"2 1 A e./.c.M.].h.@+r.Q.t.I.}..+v.Q.I.(+k. +2.%+y.s._..+I.z.k.j.*+_. +0. +t._+(.K.[+F.$+/.T.b. +y.v.J.M.%+j.9+7.s.7.@+_.B.z.Q.%+#+w.C.7.O.g+1 2 1 2 ` F+", -"2 2 A p.].w.w.<.c.v.k.0+,.V. +[.f.5+g.z.k.r.y. +y.k.v.K.#+++N.r.f.j.].O.<+*+P.J.K. +O.1.j.@+5.H.B.0+J.O.z.5+Q._+l.!.F.M.b.s.8.Q.0.%+@+2.&+b+2 2 1 2 ` C+", -"1 2 A e.{.P.*+!.7+r.y._.h.$+%+0.f..+9+s.k.O.y.z.:.++r.K.P._+N.r.2.y.&.Q.Z._+Q.g.8+`.:+S.`.s.0.<.~.$+9.E.S.F.K.(+u.6+B._.2.s._+c.K.5.$+r.5+X.2 1 2 2 ` F+", -"2 1 A p.e.{.5+B.*+/.:+r.).v.y.M.5+W.K.s.C.W.r.2.S.[.r.C.K.8.N. + +i.w.K.F.c.(.g./+$+/.v.S. +b.y.M.Q.h.H.~.~..+J.L. +[+d.:.k.(.t.0.Q.1.`.E.5+1 2 1 2 ` F+", -"2 2 A e.*.O.;+>+,+,+,+,+,+,+,+,+,+>+q _+Q.*+O.z.N.}.k.a.(.z.K.l./+/.<+F._.t.V.}.j.0.(.z.J.l._+_.<+<.r.b.(.z.J.l._+].:+E.S.J.0.w.0.K.:+9.@+g+2 2 2 2 ` F+", -"2 2 A e.].~.r r r r r r r r r r r r ,+%+t.M.O.F.M.*.6+.+i.K.++c.s.2+L.2.0.K.Q.*.6+.+h.I.#+g.w.4+E.&.4+ +h.I.#+g.y.4+E.2._.t.H.H.H.c.S.<+8+c+2 2 2 4 ` C+", -"2 4 A p...2.-+r o p p p p p p p p k+r+$+K.T.*+%+.+_+:+++A.s.(+C.N.2.j.:+[.++P.<+]+ +y.s.]+G.J.b.r.<+]+ +y.s.]+G.J.2.j.<+0.J.H.V.0..+z.t.&+5+2 2 2 4 ` F+", -"2 2 A e.j.!.-+r r r r r r r r r r k+r+M.Q.T.N.f.u.$ $ $ $ Q.(+B.5+C.2.7+:.c.).K.R.C.@+$ Z.F.%+S._+_+b./.`.9. +_+H.(.J.f.<.`.P.`.i.:.d._.d.@+4 2 2 2 ` F+", -"4 2 A e.r.<+-+r r r r r r r r r r k+r+++++++K.O.C.$ g.y.(+$ (.N.!.v.b.b.{.~.k.w.P.w.++$ d.].]+!._.b.1.:. +/.:+9.%+z.s.<+J.t.H.P._+b.7.y.E.@+4 4 2 4 ` F+", -"4 4 A p.q.w.-+r r r r r r r r r r ,+r+s.B.S.6+S.C.$ 5+I.~.$ Q.C.$ $ r.s.6+$ $ $ ++0+i.$ _.$ $ $ $ 7+M. +$ $ F.7.J.$ $ K.5+_.(.T.s.7.J.j.]+X.4 4 2 2 ` C+", -"4 4 A e.'.v.-+r p r r r r r r r r ,+r+N.(+[.k.:.A.$ $ $ $ 0..+$ k.B.$ :.F.$ $+l.$ Q.F.$ /.b.<+@+$ s.S.$ b.7.$ H.$ `.).$ %+J.z.J._+g.H.J.B.3+4 4 4 4 ` F+", -"4 4 A p.>.S.-+r r r r r r r r r r k+r+_+h.c.T.j.:.$ 2+*.$ t.s.$ $ $ $ f.@+$ 6+]+$ <+H.$ B.r.$ $ $ _+J.$ Z.<.h.#+$ $ $ $ h.%+]+#+0.9.#+H.S.b+4 4 4 4 ` F+", -"4 4 A e.<.>.-+-+r r r r r r r r r ,+r+.+k.N.C.$+<.$ S.}.++$ .+$ 8.A.c.<.4+$ 7.H.$ 9.`.$ b.$ ]+1.$ Q.:.$ /.,.$ #+$ Q.Q.`.(.Q.N.%+J.#+7.7.D.g+4 4 4 4 ` F+", -"4 4 A p.!.2.-+r p r r r r r r r r k+r+%+t.F.!.j.:.$ r.K.P.$ N.r.$ $ $ Q.Z.$ $ $ 9+@+<+$ `.$ $ $ $ $+9.E.$ $ K.(+l.$ $ $ (.7.(.t.0.Q.1.`.X.5+4 4 5 4 Z F+", -"4 5 A m.j.r.-+r -+r r r r r r r -+,+r+(..+_.(+b. +[.r.C.K.8.N. +++i.v.K.E.$ (.g.4+$+/.v.S..+0.v.J.Q.j.H.~.~..+K.I..+4+d.S.J.9.s.0.K.:+9.]+c+5 4 4 4 ` F+", -"4 4 A e.+.'.-+k+r+r+A+A+A+A+A+A+r+A+r+0.C.0.C.W.2.Q.B.s.5+h.%+B.j.,.}.`.v.$ h.[.H.$+B._+S.2. +q.0+<.j.F._. +H.K.I.<+7._.0.t.z.H.H.9.S.<+9+c+4 5 4 4 Z F+", -"5 4 A p.*.$+r+H+H+H+H+H+H+H+H+H+H+H+H+9+k..+9+b.'.%+6+%+~.Q._+C.8+N.d.8+<.j.).R.H.M.*+M. +G.]+H._+4+9.:.$+h. +/+V.[.Q.j.M.]+).V.9. +G.v.]+4+5 5 4 5 ` F+", -"4 5 A m.^.w.C.2.2.~.(.P.V.G.v.M.y.h.0.0.++N.k.y.b.5+f._+g.(+%+h.}.C.7.y.<+y.B.}.S.$+'.L.[.$+]+d.<+B.7+M.F.j.z.(._+E._.[+(.#+9.:.O.*+S.y.]+G.4 5 4 4 Z C+", -"4 5 A e.&.8+{.f._+{.5.$+).Q.!.B.[+h.z.(+c.[.%+r.O.y.Z.O.&.K.<+v.k.a.:.F.`.7. +9+]+H.]+]+8+E.H.S.F.y._.&+@+$+M.j. +A._+w.&+*+]+%+J.4+@+]+7+4+5 4 4 5 ` F+", -"5 4 A m.*.y.}.r.b.:.z.K.l.[+_.<+F._.t.Q.}.N.z.:.5+v.0+8+C.Q._+$+}.w.B.:.b.%+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+|+d+3+g+a+3+d+g+o+5 5 3 4 ` F+", -"4 5 C m.&.R.*.4+ +i.I.++9.y.2+E.2.0.K.Q.6+C.}.r.M.f.*+9+0.Q.s.N.0.a.F.F.Z.<.d+q+q+q+z+z+z+z+z+u+z+z+z+z+z+z+u+z+z+y+B+z+y+B+z+z+z+u+z+z+y+z+5 4 4 5 ` F+", -"5 5 C e.*.z.<+*+ +w.t.(+I.R.2.r.:+[.++P.N.5+z.8+O.r.O._.P.V.C.N.T.k.E.*+f.B.m.d c e e e e e e e e e e e e e e e e e e e e e e e e e e e d e 5 5 5 5 ` D+", -"5 5 C m.{.0.b.j.<+}._+Q.8.'.].,.<+.+s.P.Q.$+).M.M.$+M..+h.h.t.6+t.6+1.J.B.H.m.d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d 5 5 5 5 ` D+", -"5 5 C m.2.h.<.j.b.:.z.K.l._+].:+F._.t.Q.0.T.%+M.j.{.~.K.8._+%+h.'.$+y.:.d.j.d+d+d+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.3 5 5 3 ` D+", -"5 3 C m._.<.&.4+ +j.I.++0.w.4+F.2.0.K.Q.C.O.N.T._.a.@+C.h.5+t.F.z.C.5+_.S.J.4.4.m.e.6.^+e.e.6.m.e.6.^+e.e.e.m.^+^+m.m.m.m.m.6.m.^+e.m.e.^+#+5 5 5 5 ` D+", -"5 3 C m.!.k.h.Q.).S.b.!.(.y.*+O.Z.R.~.g.K.S.h.s.W.@+O.W.$+l.Q.r.s.<.y._.`.g.(.l.%+ +K.S.E.y.S.y.7.K.F.:.J.d.[.J.6+_+$+:.@+0.,.I.l.a.B.y.4+4+3 5 5 3 ` D+", -"5 3 C m.<.k._+_.++A.s.(+I.R.b.r.<+}.#+Q.++v.N.T.:.Z.).:+l.$+.+s.B.<.J.$+'.G.(.$+$+b.<+F.7+K.F.j.z.(._+F._.[+:.#+9.(.M.&+S.t.$+L.z.a.M.9.y.]+3 3 3 3 ` D+", -"3 3 C m.~.k.;+>+,+,+,+,+,+,+,+,+,+>+q 6+Q.f.~.K.:.[.k.0.(.z.K.l./+/.:+F._.t.V.}.k.a.(.z.J.l._+_.:+F._.t.V.}.k.0.(.z.J.l._+].:+F._.t.H.J. +X.3 5 5 3 ` D+", -"3 3 C m.'.a.r r r r r r r r r r r r ,+V.C._.5+.+:+&.2+.+h.I.++0.s.2+L.2.0.J.V.*.4+.+h.I.#+9.s.4+F.2.0.J.V.*.4+.+h.I.`.9.s.4+F.2.a.K.H.+.F.4+3 5 3 3 ` D+", -"3 3 A e.*.Z.-+r o p p p p p p p p k+r+_+k.y.C.Q.b._+*+.+s.t.(+z.N.2.j.<+[.`.P.<+*+.+w.s.]+G.J.2.j.:+<.`.Q.<+]+.+s.t.(+z.J.2.k.<+}.#+Q.0+%+W.3 3 3 3 ` D+", -"3 3 A m.*.2+-+r r r r r r r r r r k+r+0.$+f.s.h.y.$ +s.g.8.).$+0.z.S.G.M.%+l./+C.:._.i.$ v.b.S.<.`.j.$ $ $ $ #+z.u.r.{.<+z.$+,.R.$ J.2.F.3+3 3 3 3 ` D+", -"3 < A e.{.%+-+r r r r r r r r r r k+r+T. +W.5+0.S.$ d.@+0.t.5+$+F.s.F.>.M._.}.z._.L.C.a.$ 9.B.]+v.G.B.$ +B. +$ H.Q.*+*+B./+]+(+$ V.K.7.<+[+< < 3 < ` D+", -"3 3 A p.@.B.-+r r r r r r r r r r ,+r+%+(+ +t.!.r.$ W.).z.g.*+$ $ Q.j.$ $ $ $ (+(+4+$ $ $ 6+7.@+S.<+2.$ y.H._+$ Q..+$ $ M.G.8.$ $ $ s.t.b.|+< 3 3 < ` D+", -"< < A m.*.w.-+r p r r r r r r r r ,+r+K.z.>.v.9+*+$ +6+~.K.$ q.}.$ b.H.$+V.$ Q.s.$ .+.+$ ]+`.@+S.H.H.$ F.S.s.$ V.$ _+[+$ ).T.N.$ l.[+:+*+8+< 3 3 < ` D+", -"< 3 A p.).c.-+r r r r r r r r r r k+r+s.h.*+b.5+f.$ +K.I.T.$ <+_.$ S.K.$ $ $ z.2+$ @+L.$ G./.`..+s.F.$ j.4+0.$ V.$ $ $ $ s.0.s.$ g._.J.5+g+< < < < Z F+", -"< < A m.{.!.-+-+r r r r r r r r r ,+r+.+M.B._.Q.v.$ M.h./+0.$ E.S.$ v.$ 2+~.$ /+@+$ <+Q.$ _+z.j.(.t.b.$ B.B.5.$ `.$ +5+z.(+).(+$ ).q.y.S.c+< a < < ` C+", -"< a C m.2.z.-+r p r r r r r r r r k+r+(+z.y. +!.F.$ $ $ $ }. +$ $ ].B.$ $ $ $ }._+*+$ $ $ _+.+B.B.v.]+$ $ $ $ 7.7.P.$ $ $ s.9+c.$ K.y.$ @+8+< < < < ` F+", -"< < C p.@.F.-+r -+r r r r r r r -+,+r+%+++O.j.C.S.h.b.~.).(.(+:+>.$+F.N.[.z.$+}.L.B.S.t.Z.K.s.B._.H.y.Z.9+1.5.z.#+V.$+_..+(.8.0./+<+H.v.d.5+< a < < Z C+", -"a < C m.*. +-+k+r+r+A+A+A+A+A+A+r+A+r+/+ +Q.@+F.r.r.t.W.l.$+.+y.F.<.J.%+'.C.Q.(+K.s.O.v.4+v.B.j.y.9.b.J.B.{.7.#+K.h.c.!.T.h.Q.(+7._+O.b.:+0+< a < < ` F+", -"< a C m._.y.r+H+H+H+H+H+H+H+H+H+H+H+H+_+%+N.T.<.@+/.O.9+y.6+P.t.(+*+f.S.N.5.h.).z.C..+k.9.d.7.>.s._+O.5+O.5+Q.[.s.8.[.B.S.(.V./+8.%+B.5+3+f+a < a < ` C+", -"< a C m.>.v.<+{.v.<.b.~.:.y.:+O.Z.Q.~.g.K.Z.j.y.W.@+O.T.$+l.Q.r.s.[.v._. +9.(.t.%+ +K.Q.F.v.S.A.l.P.E.<.J.b.[.J.5+<+*+:.++g.,.K.l.0.B.y.4+5+a < < a ` F+", -"a a C m.'.W._+M.W.E.2+y.*+j.@+!.r.4+C.5+[+[+@+@+j.S.%+!.N.~.$+v.O.Z.S.S.:.j.$+t.Z.y.E.b.*+B. +M.]+u.@+j.$+B.B.[.$+J.F.j.k._+(.#+j.*+B.[+q.7+a a c < ` C+", -"< a C m.r. +S. +1+E.v.:+j.W.E.O.j.|.S.W.*+W.2+W.O.v.7+e.v.O.M.q.<+j.1+X.5+W. +1+<+W.:+*+1+E.W.X.M.x.:.&+&+&+O.p.W.y.2+x.&+*+&+&+O.5+X.3+5+4+< a < a ` F+", -"a a C m.m.m.d+d+a+|+g+c+d+3+a+c+d+a+a+a+d+a+d+a+a+c+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+g+d+3+g+a+3+d+g+o+c a a a ` C+", -"a c C m.c+q+s+B+q+B+y+s+y+y+y+y+y+u+s+y+y+B+y+y+y+y+y+u+s+y+s+B+s+y+y+y+y+u+s+y+y+B+y+y+y+u+y+u+u+y+y+s+u+y+u+u+s+s+B+y+s+B+y+y+y+u+u+s+y+y+< a a a ` F+", -"a a a a a a c a a a a a < a a a a a a a a a a a a a a a a a a a a < 0 a a a a < a a a a a a a a a < a a a a a c a a < a a a a a a a a a a c a a a a ` F+", -"a a c a c 0 0 c 0 0 c c c c c 0 c c c 0 c 0 c 0 c c 0 c c 0 c c c c 0 c c a c c c c c c 0 c c c c c c a c c c a c c c c c 0 c c 0 c c c c a c a a a ` F+", -"a c a ^+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.k c a c ` D+", -"a c 0 j.6.6.e.e.(+4.m.e.6.U.e.e.e.m.U.4.m.p.6.^+p.e.e.m.U.6.m.e.6.#+e.e.p.m.#+6.m.j.6.^+p.e.6.m.e.6.U.e.e.e.m.U.U.m.m.m.m.m.6.m.^+f.m.e.U.U.k 0 0 c ` D+", -"0 0 c 6.Y *.&.D ..*.&.+.@.>.'.*.&.'.@.&.@.@...@.Y >.+...@.'.,.&.&.*.+.&.@.+.&.*...&.....*.^.'.'...,...D *.+...*.@.'.*.'.&...@.@.!.{.{.>.y.*+e c c 0 ` D+", -"0 c c 6.'.<. +/.C./.}.:.Q.j.M.'.F.K.8.[.k.{.f.F.<+}.f.t.*.z.[.j.].{.a.G.M.C.Q.i.t.<+F.@+^.J._.^.{.h.{.<._.2.'.8.!.Q.'.<.`.7.[.%+5.:.@.f.@+8+3 0 c c ` D+", -"c 0 c 6.)._+y.w.t.M.f.++8.).@+(.M.c.P.#+y.S.W.z.8+Q._.c.z./+K.:+{.h.8+#+Z.$+++I.$+y.C.++++V..+M.S.C.s.5+C.~.w.P.z.K.C.u.z.7+z.7+g.V.8+h.:.s.5 c c c ` D+", -"c c c 6.@.K.$ $ 7+b./+_.s.,.b.c.'.h.I./+).y.<.<.~._.y.$+Q.++.+!.b.B.O.h.B.$ $ $ %+*+k.$ $ $ }.v._.++h.:.h. +W.Q.V.P.$ $ B.t.J.C.(.Q.c.2.*+c+5 c c c ` D+", -"c c c 6.,.i.$ $ 7+i.<.N.l.s.z.'.j.s.}._+}. +W.}.:.h.:.:.6+c.@+q.Z.h.*+T.r.$ $ $ ]+@+L.$ $ $ h.%+$+c.<+6+:.F.).z./+c.$ $ u.[./+s.++V.f.y.0+M.5 c c c ` D+", -"c c e 6.[.(.$ $ k.W.:.[+P.).$ $ $ $ #+g.t.$ $ $ $ %+d.$ $ $ $ $ r.W.B.T.O.$ $ $ $ F.$ $ $ $ #+:+$ $ $ $ }.b.K.$ $ $ $ $ F.).$ $ $ $ c.C.@+@+5 c c c ` D+", -"c c c 6.>.c.$ $ P.S.v.!.K.$ $ N.j.$ $ z.$ $ *+h.$ $ {.$ $ 8.f.$ $ j.r..+O.$ $ $ $ r.$ $ $ $ 6+$ $ ]+T.$ $ v.$ $ P.K.$ $ L.$ $ P.z.$ $ w.M./+5 e c c ` D+", -"e c d 6.*.t.$ $ ++!._+t.I.$ $ }.!.$ $ Q.$ $ 2.B.$ $ +$ $ /+f.$ $ j. +C.:+$ $ (.$ %+$ %+$ $ z.$ $ k.(+$ $ {.$ $ t.0.$ $ [+$ $ $ $ $ $ w.E.<+3 d c d ` F+", -"e d d 6.+.c.$ $ }./. +6+P.$ $ %+@+$ $ ++$ $ v.N.$ $ f.$ $ s.B.$ $ r.B.(.:+$ $ #+$ $ $ (.$ $ }.$ $ V.h.$ $ k.$ $ V.$+$ $ $+$ $ h.$+]+b.(+0+F.5 d d c ` F+", -"d c d 6.<.(.$ $ }.N.h.P.#+$ $ T.y.$ $ (.$ $ [+B.$ $ f.$ $ .+(+$ $ +v.z.W.$ $ #+$ $ $ w.$ $ ~.$ $ z.I.$ $ y.$ $ 9+k.$ $ j.$ $ C.g.$ $ 7+&+5+3 d c d ` F+", -"d d c 6.].s.$ $ $ $ $ $ N.C.$ $ $ $ g.I.%+$ $ $ $ N.c.$ $ $ $ $ F.k.f.[.B.$ $ .+Q.$ 2+t.$ $ $+k.$ $ $ $ t.6+(.$ $ $ $ $ T.h.$ $ $ $ '.<+O.F.3 d d d ` C+", -"d d b 6.!.c.%+w.Q.y.b.k.t.}.W.M.C.h.k.y.C.$+[.b.:.8+.+$ $ z.K.C.N.$+r.y.F.(+z.Q./+Q.t.v.y.W.*+C.++++2+F.!.C.z.N.[.(.Q.M.F.++z.l..+_+w.y.X.[+3 d d b ` F+", -"d d d 6.!.++%+y.a.h.5+l.V._._.++@+}._+I.9+S.C.b.B._.<+$ $ /+}.%+}.{.F.%+O.k.$+P.M.h.F.2.B._+O.B.Q.k.s.r.0.$+_.P.t.++}.!._.Q.s._+c.#+Q..+O.4+< d d d ` F+", -"d d b 6.y.T.W.7.G.h.(.V.(+K.@+N.w.I.V.I.C.5+c.W.v.j.&.(.$+s._+h._.M. +y.*+K.0.#+z.0+(.c.w.].W.Z.F.C.$+f.{.<.k.I.V..+h.W._+/+]+s.C.I.I._.S.X.< d d b ` F+", -"b d d 6.<.!.P.S.:+J.#+7.h.i.<+r.2+8.V.I.++_.h.<.].S.[+%+5+8.$+h.u.<.v.j.<._+I.(..+h._.2+a.<+{.v.&.c.c.>.f.y._+).s.0.0.~.[.z.$+L.T.V.~.g.W.4+< b d b ` C+", -"d b b 6.+.k.N.4+B.F.(+t.#+V.A.:.O._._.0./+++$+O.W.~.b.[.I._.k./+).:. +!.O.!.K.5+v.F.%+<.].@+b.O.z.V.N.*.y.$+h.t.g.0.N.$+s.t.a.a.c.K.8.H.@+@+< d b b ` F+", -"b b b e.<.k.h.j.).:+z.(+'.P.]+F.:.a.}.V.N.6+k.!.$+ +r.F.(.).++[.6+2+L.:.y.[.P.#+(+}.s..+v.M.$+[+s.++.+'.k.[._.8.(..+~.t.%+l.N.u.C.(.t.2.5+8+< g f b ` F+", -"b b b 6.*.4+_.j.{.F.Q.K.$+B.O.B.@+O./+/+c._.++2.W.:+O.).P.h.N..+l.S.b.].2.{.).}.z.$+'.S.y.:.y.y.).).0.i.2+{.c.g._+h.c..+s.8.}.R.}.++0.H.@+W.< b b b ` F+", -"b d h e.).:.O.S.S.4+:.`.y.@+D.|.B. +.+(.!./+h.*+<.*+O.:.!.(.~.2+++r.F.F.W.).T.Q._+W..+b.b.f.<+r.6+8.Q.y.S.!.h.0.(.++5+$+5+8.++}.k.Q.5.J.S.x.< b b b ` C+", -"b h b #+*.S.!+~+{+{+{+{+{+{+{+{+{+~+v (+A.h.++v.j.S.b._+++++9+].&.f.v.y.<.K.h..+M.M.(+5+{.2.f. +6+++_+*+j.r.T.(+(+c.N.C.[.P.K.K.t.9.G.w.y.b+a b b h ` F+", -"g b b e.>.A.w w w w w w w w w w w w {+%+L.%+T.F.O.B.[+c.s.I.9+K.Q.O.y.*+:.c.#+h._+y..+v.S.y.v.$+h.Q._+2._.:..+_+z.N.0.k.Q.s.c.!.P.V.G.G.B.4+< h b b ` F+", -"b h h 6.!.y.'+w s t t t t t t t t m+t+l.G.%+/.i.$+c.O.r.K.8.@+B.Z.F.:+c.W.}.$+z.F.<.@+C.B.c.c.*+]. +f.@+t.:+].I./+N.*+{..+g.V.s.h.g.z.H.*+e.a b b h ` F+", -"h b h 6.~.:+'+w w w w w w w w w w m+t+.+Q.S.j.B.:. +W.$ K._+t.:.$ $ $ $ S.0._+2+[+$ E.F.s.$ $ $ $ $ '.s.O.[+(+8+}.N.8+v.B.P.P..+l.P.F.]+O.g+< h b h ` C+", -"b h b 6.>.&.'+w w w w w w w w w w m+t+s.0+<.:._+O._.$ O.$ N.C.].$ z.b+7+$ N.#+f.$ E.$ r.%+).j.$ <+).r.N./.v.O.T.P.s.!.M.0.l.P.t.(.g.%+M.M.c+a b h h ` F+", -"h h h 4.*.H.'+w w w w w w w w w w {+t+R.t.2+Q.:+W.r.$ {.$ 6+z.r.$ E.b.v.$ l.z.C.$ <.$ *+:+y.v.$ h.s.O.O.'.(+h.++.+F.v.O.T.Q.u.0.#+0.v._.*+c+a h h h ` F+", -"h h h 6.).0.'+w t w w w w w w w w {+t+_+/+N.++2.S.$ d._+z.$ _+[+$ Z.<.F.$ !.'.$ v.F.O.$ E.{.b.$ g.K.k.A.[.$+s.i.V.M.(+h.(.#+#+l.6+h.V.7.0+4+a h h h ` F+", -"h h h 8.b.L.'+w w w w w w w w w w m+t+N./+s.T.y.:.$ $ $ $ $ t.7+$ d.b.*+$ }.s.$ $ $ $ $ 1.O.F.$ z.c.:.2+:.++%+Q.`.++g.]+H.5.]+}.s.(.#+K.X.@+a h h h Z F+", -"h h h 6.r.L.'+'+w w w w w w w w w {+t+z.%+!.}.:+y.$ O.0.(.$ h.5+$ x.&.b.$ '.K.$ ).t.:.$ '.].v.$ P.T.O.'.C.9+L.%+]+}.b.K.l.G.%+g.]+H.5.~.7.e.0 h h h ` F+", -"h h h 6._.t.'+w t w w w w w w w w m+t+g.C.s.N.v.$ 2.S.h.$+h.$ (+$ $ $ $ <.T.$ Q.N.T.O.r.$ ].M.$ l./+*+r.t.T.A.J.:.7.:.Q.t.z.(.b.K.l.G.5.S.E.0 h h h Z F+", -"h i h 6.*.~.'+w '+w w w w w w w '+{+t+++K.++k.B.{.!.S._.7+7+Q.0.z.:.F.W.@+_.z.#+C.T.$+[+v.W.W.>.k.}._.:.{.O.'.t.#+t.T.A.J.:.7.:.Q.t.z.G.Z.5+c h j h ` F+", -"h i h 8.@.%+'+m+t+t+B+B+D+B+B+D+t+B+t+(._+*+2.$+<+_.B.).s./+c.t.0.j.].<+q.W.V.g.z.6+[.~.8+_.y.2.~.0.9+].v.!.0.$+V.7+t.s.K.s.&.2.:+%+l.9.O.X.0 h h h Z F+", -"h h h 6.>.K.t+H+H+H+H+H+H+H+H+H+H+H+H+l.*+(+y.++ +K.S.z.5+h.z.F.5+C.W.R.F.(+8.h.%+j.:+t.@+s.T.B.y.:+k.W._+b.(.8.%+[+F.E.5.l.J.w.6+k.w.H.4+0+c h k h ` F+", -"i k h 6.b.(.F.B.(.M.O.Q.P.W.A.B.2.K./+Q.K.j.y.++ +K.Z.F.5+h.B.F.5+C.W.Q.F.:+8.h.%+j.:+t.@+s.T.B.s.(+r.W.<+b.(.8.#+_+B.E.5.t.J.t.g.).r.9.X.4+0 i h k ` F+", -"h j h 6.<.<.0.F.k.F.$+5+}.S.*+&.b.y.6+I.z.<.{.$+*+C.B.(+).z._+].M.B.y.T.E._+P./+0.@+S.B. +++z.S.$+%+T.@+_+@+'.P.(+C.8+F.b.7+(.9.).K.J.F.4+<+e h i h ` F+", -"k h k 4.!.@+}.j.%+~.h.z.t.h.7.d.y._+Q.t.t.:.B.:.].W.W.k.l._+_+c..+b.b. +b.%+$+K..+s.K.@+M.].F.:.k.++T.<+<.O.z.}.t.%+0.7+<+J.h.[.$+V.(.J.5+b+0 i h k ` F+", -"h k h 6.&.Q.c.:+u..+z.++I.s.&+j.O._+g.}.0.$+(+v.B.:.f.K.s.h._.t.0.r.O.M.>.T.P.8.}.Q.%+v.r. +_.y._+s.~.:+f.<+K.(.h.$+z.N._+t.5+H.h.z.).7.x.4+c i j k ` F+", -"i k i 6.'.%+T.W.z.R.K.V.V.8.9+b.M._+$+l.K.6+z.2.{.:+<.!.V.8.k.7+s.y.<.!.@+++0.$+K.T.}.y.O.2.2.$+$+P.$+2.S.r.(.).I.++$+K.T.s..+z.t.l.7.]+$+5+c i i i ` D+", -"k i j e.r.c.%+v.w.:.8.`._+]+y.v._.h.z.V..+!.N.F.O.v.f.K.Q.Q.z.k.5+b.O.b.[+N.++).T.k.}.8+W.y.<.j.%+t.[.<+b.].j.%+K.W.C.c.s.`.s.t.[.(+Q.9.4+4+0 k i k ` D+", -"i k i 6.>.B.F.1.W.j.9..+8+_+&+<.X.b.'.P.s.c.s.j. +y. +N.8.t.s./+(+<+B.B.O.0.z.}.!.[.h.W.<+f.!.O.[._+0.W.y.v.9+(._+O.<+(.s.5.B.]+6+&.K.t.O.5+0 k i k ` D+", -"k i i e.:.k.!+{+{+{+{+{+{+{+{+{+{+{+v 4+k.r.$+:.f.!.v.k.P.8.z.%+%+ +y.W.S.%+t.V.Q.K.C.B.$+M.{.B.K._.T.j.y.f.Q._+s._+%+ +F.H.F.J.J.g.0+g.%+b+c k j k ` D+", -"k k k 6.d._.w w w w w w w w w w w w {+_+%+t.).@+:.}.v.}.V.h.*+*+<.N.$+$+f.t._+~.8.f.S._.f.C.z.B.N.%+%+f.C.:.h.(.I.$+b.S.{.9.9+).y._.g.$+]+c+0 k i k ` D+", -"k k k e.@.A.'+w s t t t t t t t t m+t+0+k.v.f._._.++@+}./+K.9+S.E.j.F._.<+I.(./+8.%+a.].F.%+N.r.%+N.C.2.C.b.z./+Q.K. +7.B.7.s.l.z.C.5+%+<+++e k k k ` D+", -"k k k e.&.M.'+w w w w w w w w w w m+t+s.5+j.S.k.:+_.$ $ Q.(.K.$ $ $ $ }.B.$ $ $ $ b.E.O.$ 7+_+s.$ $ $ $ g.I./+%+V.6+<+b.J.t.9.%+(.R.t..+v.v.e k k k ` D+", -"k k k f.'.7.'+w w w w w w w w w w m+t+I.Q.j.y.@+ +$ <+%+$ (+#+$ k.c.$ _.<+$ f.h.W.$ 2.f.$ 0.#+<+$ b.<..+(.K.g.N.z.O.j.d.{.c+_+_+5.7+ +++8+5+d k k k ` F+", -"k k k e.@._.'+w w w w w w w w w w {+t+6+/+W.O.$+O.$ _.T.(.8.g.$ .+u.$ L. +$ y.].F.$ W._+$ k.K.r.$ w.T.P.l._.s.T.K.).%+d.G.H.g.K.$+7.[+N.y.2+e k k k Z D+", -"k x k f.*._.'+w t w w w w w w w w {+t+z.(.r.*+0+B.O.$ $ s.Q.s.$ $ $ $ 2.2.$ y.++F.$ 2.!.$ c.N.$+$ $ $ }.g.K./+%+++/+W.u.!.V.I.K.$+7.4+z.r.z.d k k x ` F+", -"k k x e.{.0.'+w w w w w w w w w w m+t+]+g. +B.(.W.v.j.t.$ #+#+$ b.b.{.M.:+$ M.S.F.$ d.@+$ T.z.9+$ E.y.6+(.P.g.N._+$+*+[.H.t.h.5.H.).y.5+}.X.d y k k Z D+", -"x k x e.!.@+'+'+w w w w w w w w w {+t+9.t.f.q.@+j.$ 5+t.$ P.I.$ %+v.K.O.*+$ B.&.W.$ _+K.$ 5+++_+$ .+A.0.l._.s.T.).y.S.B.<+z.5+_.z.t.:.F.%+C.d k k z ` D+", -"x k z e.@.k.'+w t w w w w w w w w m+t+_+w.F.f._+@+z.$ $ ++V.P.$ <+}.K. +).$ $ $ $ y.Q._.$ T.s._+$ C.<+8+g.I./+%+Q.K.(+y.C.Q.(+h.Q.Q.).y.C.S.d x x x ` D+", -"z k z e.b.`.'+w '+w w w w w w w '+{+t+l.$+0.v.f._.f.(.s.t.c.9+_.Q.r.M.F..+$+$+Q.K.N./+<+S.b.:.k.5+c.:+y.<+++*.~.t.s.c.:._.K.t.#+A.`.2.S.*+5+g x k z ` F+", -"x x z e.{.9.'+m+t+t+B+D+B+B+D+B+t+B+t+6+t.M.y.M.<+++j.z./+I.h.(._+<.!.Q.<.f.5+z.K.c.).@+@+}.++B.N.}.z.S.0.b.$+(+Q._+h..+A.++6+V.z.[.*+]+<+c+b x x x Z F+", -"x z x e.@.J.t+H+H+H+H+H+H+H+H+H+H+H+H+T.h.0+0.:.y.:.F..+(+(.C.%+s.M.$+[+v. +U.~.s.0._.:.{.O.>.j..+h.N.v.B.{.k.8._+%+t.a.A.}.!.A.T.$+K.H.X.8+d z z x ` F+", -"x x x m.K.Q.B.2.t.%+B.5./+h.(.i. +C.Q.C.j.y. +z.F.<.*+N.0.$+V.S.F.B.@+~.R.7+(.l.Q.b.f..+j.C.t.S.!./+K.<+C.<.s.g.5+0.@+W.h.K._+K.t.Q.9.7.]+[+i I z z ` F+", -"z z z e.@.[.++S.5+r.y.G.t.,.b.6+f.k.Q.$+(+<.S.y.5+).B.k.(.I.P.<.<+*+@+v.v.<+#+I.K.v.$+!.:+T.C.f.f.N.2+M.++v.8+k.K.N.y.w.]+H.P.,.z.z.F./.8+<+i K x z ` F+", -"z z z m.~.t.k.%+v.H.B.j.<.G.'.*+4+h./+I.C._.<.[.<+c.h.%+(.l._.z.q.J.2.y.`.$+#+I.%+ +*+v.W.N.C.K.C.(+S._.L.N.)..+t.K.k.S.]+s._+`..+B.Z.J.:+4+i K z z ` F+", -"z z z m.,.].++).S.q.v.8+z.[+d.[+0+k.$+_.l.[.%+f.S.M.}.0+Q.T.7.).B.B.M.O.).h.(._+s.y.(+M.b.8+2.s.K.6+y.B.5+Q.T.P.P.(+[.1.*+g.9+g..+7.@+5+1.<+i I z z ` F+", -"z z A m.*.(+d.W.%+Z.2.J.t./.H. +d.]+#+$+.+W.T.h.F.T.A.V.Q.0./+[+).~.H.S.M.h._+_+`.B.k.%+y.O.b.r._+}.Z.O.F.[+z.7+V.C.W.:.J..+s.I.V.t.J.]+O.&+i I z z Z F+", -"z A z m.c.s.]+R.E.d.O.h.F.6+Z.L..+u.z.A.l.<+:.V.A.#+(.!._.V.N.2+k.%+S..+7.H.[..+I.k.F.5+:+L.:.y.[+.+0+).]+_.++Q.C.C.J.:.F.I.`._+(+z.E.y.H.b+i J z z ` F+", -"z z B m.t.c+Q.$+%+ + +7+:+<+}.$+@+@+i.0+(+F.7+5+c+4+b+s.<+8+0+ +8+:+8+<+1+&+ +1+<+f.A.]+0+$+4+%+0+T.6+R.6+2.N.0+@+0+9+9+6+6+K.]+6+f.*+5.0+^+b J B z Z F+", -"z A z m.m.m.d+d+a+|+g+d+d+3+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+|+d+3+g+a+3+d+g+o+0 J z z ` F+", -"z z B m.d+q+z+B+q+B+s+y+s+y+s+y+s+u+z+z+z+B+s+y+s+y+z+u+z+z+z+B+s+s+y+y+z+u+z+z+z+B+s+z+z+z+z+u+z+z+z+z+z+s+z+s+z+z+B+s+z+B+s+y+z+u+z+z+z+y+g J z B ` F+", -"z B z A z A z z z B z z z B z B z A z z z B z z B z z B z B z z B z z z A z z B z z B z B z z z z z B z z A z z B z B z z A z B z z z z z z z z z A ` F+", -"z B z z A z B z z A z B z A z z B z A B z z B z z A z z z z z z z z B z z B z A z B z z z z B z z z z B z z B z A z z B z z z z B z z z A B z B z B ` F+", -"A z B B z B z z B z B z z z z B z z z z z B z B z B z B z B z B z B z z B z z z B z A z B B z z z B z z z B z z A z B z B z B z z z B z B z A z B A ` F+", -"B z B A z z B z z z z B z B z z B z B z B z z z z z z z B z z z B z B z A B z B z B z z z z B z B z B z z z B z z z A z z z z B z A z z B z z B z B ` F+", -"B z B z z B z B z B B z B z z B z B A z z z B z B z B B z B z B z z A z B z B z z z B z B z B z A B z B z B A z B z B z B z B z z B z B z z B z B B ` F+", -"B z B B z B z B z z z B z B B z B z B B z B B z B z z z B z B z B B z B z z z B B z B z B z B A z B z z B z B z B B z B z B z B z B z B z B z B z B ` F+", -"B z B z B z B z B z B B z B z B B z B z B z B z B B z B z B z B B z B z B z B B z B z B z B A z B B z B B z B B z B z B z B z B z z B B z B B B z B ` F+", -"B B A B B z B B B z B z B B B z B B z B B z B z B z B B B z B z B B z B z B z B z B B z B z B B z B z B z B z B B z B B B z B z B z B B z B z B B B ` F+", -"B z B z B z B B z B z B B z B z B z B B z B B B z B B z B z B B z B z B A B B z B B z B z B B z B B z B B B z B z B B z B z B B B z B z B z B z B B ` F+", -"B B B B z B z B B B B A B B z B B z B z B z B z B z B B B z B z B B B B z B B B z B B B B z B B z B z z B B A B B A B B B z B z B B B z B z B B B B ` F+", -"B B B z B B B B B B z B B z B B z B B B B B A B B B B z B B B B A B B z B B B z B z B B z B B z B B B B B A B B B A B B z B B B B B z B B B B B B B ` F+", -"B B B B z B z B z B B B A B B B B A B B B B A B A B z B B A B B B A B B A B B B B B z B B B B B A B A B A B B A B B B A B B A B B z B B z B z B B B ` C+", -"B B B B B B B B B B B A B B B B A B B B A B B B B B B B B A B B A B B A B B A B B A B B A B B A B B B B B B B B B B A B B A B B A B B A B B B B B B ` F+", -"B B B B B B B B B B B B B A B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B F B ` F+", -"B B F B B B B F B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B F B B ` F+", -"F B F B B B B B B B B B B B B B B F B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B F B B B B B B B B B B B B B B B B B B B B F B ` F+", -"F B F B B B B B B B B B B F B B F B B B B B F B B B B B B B B B B B B B B B B B B F B B B B B B B B F B B B B B B F B B B B B F B B B F B B B F F F ` F+", -"F B F B B F B B B B B B B B B B B B B B B B B F B B B B F B B B B B F B B B B B B B B B B B B B B B B F B B B B B F B B B F B F B B B F B B F F B B Z F+", -"F F F B F B F F F F B F B F F B F F B B B B F B F B B B B F B B B F B F B B B F B F B B B B F B B F B F B F B B F B F F B B B F B B F F B F B F F F ` F+", -"F F F F B F B F B F F B F B F B B B F B B F F B F B F B B F B F F B B F B F B F B B F F B F B F B B F B F B F B F B B F F F B F F B B B B F F F F F ` C+", -"F F F B F F B F B B F F F F B F B F F B B F B B F F F F F F B B F B F F F B B B F F B F B B F B B F F F B B F F F F F F F B B F B F B F F B B F F F ` F+", -"F F F F F B F B F F F B F F F F F B F F F F F F B F B F B F F F F F F B F F F F F B F F F F F F B F B F F B F B F B F B F F F F B F F B F F F F F F ` F+", -"I F F F F F F F F F B F F F B F F F F F B F F B F F F F F F F F F F B I B F F F B F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ` F+", -"F I F F F F F F F F F F F F I F F F F F F F F F F F F F I F F F B F F F F F B F F F F F F F F F F F F F F F F B F F F F F F F F F F B F F F F F F F Z F+", -"I F F F F F F F F F I F F F F F F F F F F F I F F F F F F F F F I F F F F F I F F F F F F F F F F F F F F F F F F F F I F F F F F F F F F F F I F I ` F+", -"I F I F F I F F F F F F F F F F F F I F F I F I F F F F F F F F F F I F F F F F I F F I F F I I F F I F I F F F I F F F F F F F F I F F F F I I F I ` C+", -"F I F F F I F F F F F F I F F F F I F F F F F F F F I F I F F F F I F F F F I F F F F F I F F F F F F F F F F I F F F F I F F I F F F I F I F I I F ` F+", -"I I I F I F I F I F I B F F I I F F I F F I F F I F F F I F I F F I F I F F F F F I I F I I I F I I I F F F I F I F F F F I I F F I F I F I F F I I ` F+", -"I F I I F I F I F F I I I I F I F F I F G F I I F I F I I F I F I F I F F I I F I F I F F F F F I F I I F I F I F F I F I I F F I F I I F F I I I I ` F+", -"I I I I I F I F F I F I I F I F I F I F I I F I F I F F I F I F I I I I F I F I G F I I I F I F F I F F I F F F I F F I F I I F I F I I I I F I I I ` F+", -"I I I I F I I F I I I I F I I F I F I I I F I I I I F I F I I I I F I F I F I I I F I F I I I I I I F I I I I I I I I I I F I I F I F I F I I I I I ` F+", -"I I I F I I I I I F I I F I I I I I I F I F I I F I I I I F I F I I I I I I I F I I I I F I I I I F I F I F I F I F I F I F I I I I I I I I F K K I ` F+", -"I I I I I I I I I I I I I I I I I F I I I I I I I I I I I I I I I F I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I K I I ` F+", -"I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I K I I ` F+", -"K I I I I I I I I I K I I I I I I I I I K I I I I I I I I I I I I I I I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I K I I ` F+", -"K I J I I I I I I I I I K I I I I I I I K I I I I I I I I I I I I I I I I I K I I I K I I I I I I I I I I K I I I I I I I I I I I I I I I I I K K I ` F+", -"K J K I I I I I I J I K I I I I I K I I K I K I J I I I I I J I I I I J I I K I I K I I I I I J I I I I K I I J I I I I I I I I K I I I I I I K I J ` F+", -"K I L K I J I I H I I J I K I K I K I I I I I I I I I I I I K J I I I K I I I J I I K I I K J J I K J I K I I J I K I K K K K I K I J I I I I K K J ` F+", -"J J J I K I K I I I J J K K I J I K I K K K K I J K I J K K I I I I I J J K I K J J J I K I J I I K I J I K I I K I I K I I I K J I I K K J I K J J ` F+", -"I J K K K I I K J I I I J K I I K J K I I I J K I I J J I I K J I K I K I K J I K I I K K I I I I K I K J I I J I K J I I I I I K K I I I I K K J N ` F+", -"J K J K K H J J K K K M K L K J J J J K N L M K K J K J H J N K L M K L L H J J J J H K J J N K K J J J J J J J M L K N L L K L K L L K K L K L N K ` F+", -"M M J K K N K N K N K L M M L L K L N N L K N K L L J K L K N L M K K M L E N K M K N K N K N K K N L L N H J K M L L N K L K K K K N K L M K L K N ` F+", -"K L L N K N E L M L M K K N N L M L E L L K L N L N N L L K M K K N N M K L N L N K M M M M L M L M M L K M K J L K K N K L L N N L L L M K N K N L ` F+", -"L L K N L L L K M L L L L L K N K K M L K N K N L K N L L L L L L L K N L L L K N L L K M L K M L L K M L L L K M L L L L L L L K N L L L K M L L K ` F+", -"L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ` F+", -"N L N N L M L M L N N N L M L L M M L M L M L L M N N L N L N L L M L L L L L L L N N N L L L L L P M N L N P M M L L L N L N L N L L L L L L L L L ` F+", -"L L O L M L L O O O K M L L M P N L N N N N P N N P O P L O L N L N M N P M N M L O N H O M O M N N L M N L M M P M N M M N M L L N O L M L L M L L ` F+", -"N N N N P N N M L O O N N N O L P O P L P N N O P N N O O L M M N O M P N M P M M N N N N M M O P P P P O M M O P M P P P P M L N O M M P N N L M O ` D+", -"P P N P L N N P O L N N P L P N P N O N N N N O N N N N P L N L P L M P M O L P L L M O E M O M M P N P M P O M M M O N N P P L P P N L M M P P P M ` D+", -"N P P O O O O O N O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O Q Q O Q O O O O O O O O O O O O M ` D+", -"O O x e.g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+|+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+%.} P O O ` D+", -"P O y 6.4.6.e.e.U.4.m.e.6.U.e.e.e.m.^+4.m.p.5.^+e.e.p.m.^+4.m.e.6.#+e.p.e.m.U.4.m.e.6.U.e.e.6.m.e.6.#+p.e.e.m.U.^+m.m.m.m.m.6.m.U.e.m.e.^+^+} O P O ` D+", -"P P y 6.O *.,.+.+.~.~...&.+.+.>.+.'.'.*.,.@.*.'.*.Y *...@.'.>.]...&.*.Y +.>...<.!.*.+...!.*.Y *.!.].:...*.+.>...+.*.Y @.!.@.*.@.@...~...&+ +{ P P O ` D+", -"O O y 6.].0.s.v.&.].f.u.:.2.y.F.j.y.P.[.v.<.5.{.5.~.B./.).[.M.B.j.v.f.<.v.8.8.t.k.{.u./.!.i.++O.C.!.z.{.@.j.<.).f.}.O.i.M.s.).:.<. +W.:+W.&+~ O O O ` D+", -"O O y 6.M.r.F.Z.'.S.q.M.i.a.A.@+%+@+_+F.H.8+`.5+j.]+7.9.9.J.9.B.r.z.:.t.:.$+).s.6+M.o.5+B.g.&.k.K.$+t.M.i.@+_+W.j.q.D.o.y.W.z.#+B.%+Z.<. +@+~ O O O ` D+", -"O O y 6.&.:.T.q.v+s+u+z+x+n+u+u+u+u+y+s+y+u+p+y+x+u+y+u+p+z+x+u+x+y+y+s+s+n+w+y+x+x+x+x+y+x+x+s+x+x+x+x+s+v+s+w+y+x+w+x+x+x+x+s+s+v+]+6+B.5+~ O Q O ` D+", -"O O y 6.).Q.f.o.f+( ^ ' = % % % % % % % % = ; ; - - ) ( [ ^ ^ ^ ( ( ( [ [ 7 8 9 f f f m l G T S u u u u G G G E S S S S S S S .S -.y..+4+<+~ O Q O ` D+", -"O O y 6.!.K.b.f.b+- * . % % % % % % % % % % * = ; - = * * ' ! ^ ^ ( ^ ( 7 ( 6 9 f l f l n l n n u u G u S G S S S T T T T T U U T n.)+5.H.c+~ O Q Q ` D+", -"O Q y 6.'.N.O.2+|+^ * U x+v+v+v+v+D+v+v+v+v+v+F+E+E+e+; ) l+w+v+v+v+v+v+s+p+x+w+E+v+v+v+s+e+7 W.p+w+v+x+x+w+x+s+x+x+w+x+x+x+x+n.n n.~.z.&+$+~ Q O O ` D+", -"O O y 6.*.V..+$+f+( = |+H+g+X.)+[+)+)+8+8+2+)+2+=+E+C+- ( H+p+&+1+1+8+W.q+H+}+3+1+1+1+)+w+E+^ e+H+c+8+b+b+b+b+b+b+b+1+b+b+|+b+E u n.W.t.%+x.~ Q O Q ` D+", -"O O y 6.'.].2+i.f+! & =+w+; # @ @ @ + + + . & . + n.G+; ^ H+#.. ' ' ' * ;.E+f - ( 7 ( ) f+F+( e+H+6 6 ( 7 7 6 6 6 8 9 9 8 9 9 u n 3.:+z.S.4+~ R O R ` D+", -"O R y 6.,.{.b.{.o+X l |+x+- ) f f 9 f f ' . = ; n i+G+' ^ H+$.; ^ ( 7 ) =+D+G ^ l l n 6 i+v+^ f+H+f G ;.$.;.;.$.;.$.;.;.;.;.3.;.#.)+@+:.]+3+~ Q R Q ` D+", -"Q R y 6.b._+t.%+H+H+H+H+p+- o+H+H+H+H+H+p+U = & H+H+p+; ( H+;.; ( 7 7 ) 2+H+S ^ l l f 7 e+D+^ f+H+9 ;.H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+8+]+0+Z.~ R R Q ` D+", -"Q R y 6.:.w.T.T.l+T f |+v+) ' 9 9 8 8 j p+H+o+T ' ' ! ; 6 H+;.; ( ( 7 ( 6 I 7 8 l m m 7 e+v+^ f+H+l n T T U T T U U U U U U U U G n.@+W.W.2+~ R O R ` D+", -"R R y 6.u.z.#+x.h+6 ) Q.v+7 * = * * * & & T w+G+l+6 = = 7 H+;.' 7 7 6 6 [ ( 9 f l m f 7 e+v+^ |+H+6 9 9 6 9 9 9 9 f f l l f m u l 3.Q.$+1.3+~ O R R ` D+", -"R Q y 6.'.g.K.B.i+u 7 b+C+9 - ) ) ) ' ' - & = ;.p+H+l+6 ( H+;.' ( 7 7 8 9 9 9 9 l l l 7 i+D+( f+H+o.;.-.3.-.3.3.-.o.-.o.o.-.n. .l -.P.8. +8+~ R R R ` D+", -"R R y 6.*.t.,.$+i+S 9 )+H+l ' ! ) ) ) ) ) ) ' & ' ^.G+#.( G+-.' ( 7 6 8 9 f 9 f l n m 7 l+H+^ 1+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+#.6 -./+$+M.:+~ R R R ` D+", -"R R y e.).v.}.}.i+S S 9 G 7 ( ( ^ ) ! ! ^ ! ^ ^ - = 6 ^ ^ u 6 ( 7 7 6 8 9 9 9 l n l u l u S 7 n T S S T T T U T T T T U U U .f n -.l.7+j.3+~ R R R ` D+", -"R R y 6.*.k.2+B.}+S T n 9 6 7 ^ ) ) ) ! ) ! ) ) ) ) ; ) ! ' ) ( ( 7 [ 7 6 6 7 6 6 9 f l f 6 l 9 9 6 9 9 f f 9 9 9 l l l l l l S u 3.$+g.3+0+{ R R R ` F+", -"R R y e.).:._+o.i+S S ;. .u X X S U T ^ 7 ! 9 S E u U S n 9 X ;.f 6 $. .l [ X #.T T $.X f X $. .#.$.u S u .-.3.X #.;.$.U #.-.;.l 3.c.9.@+ +~ V R R Z F+", -"R R y 6.@.t.++}.i+G .x+i+h+n.b+|+x+i+U n.S 1+p+s+v+p+|+f+1+=+)+8 #.n+p+b+ .v+n.i+p+1+|+u 1+x+s+-.s+-.n.3.2+)+1+e+e+c+w+|+}+p+p+l 3.K..+]+O.{ R R R ` F+", -"R R y e.u.[.T.*+e+u S ;.T X f f m .G .X .f u T T S G ( u ( ( ) 9 l f .#.X X U U $. .6 U $.#.#.$.;.$.-.#.n u U ;.;. .S ;.;.].9 ;._+l..+2+~ V R R Z F+", -"R R y e.}.k.L.R.l+ . .U S S G G l f 9 9 8 9 6 6 6 6 9 f 9 9 l l n l f 9 m n l n m l G G G G u n S u G G S S S S G G S u G S S S u o.]+S.<+3+{ V R R ` F+", -"R R y e.@.C.W.F.w+x+x+x+x+x+w+x+x+z+y+x+y+x+y+x+x+s+n+x+x+x+w+x+x+x+x+x+y+x+x+n+x+w+y+y+x+x+y+x+x+x+x+x+x+x+x+x+x+y+x+w+x+x+s+x+x+w+:+j.S.X.~ V R R Z D+", -"R R y e.[.f.@+S.y.B.1.J.$+'.E.S.*+B.t.H.s.4+k.y.j.B.b.}.K.K.).v.++C.b.b.!.Q.g.Q.(+r.<+M.1.O.W.v.j._+!.v.@+v.R.Q._+T.y.x. +P.6+L.h.]+~.B.E.X.{ V R R ` F+", -"R R y e.>.j.F.<+B.S.3+S.y.y.v.Z.%+C.$+#+5+G.~.E.E.Z.<._.Q.Q.M. +B.r. +_+u.k.w.T.$+@+q.B.S.2.M.S.1.<.<+O. +B.<.g.z.w.0+>.Z.%+0.7.8+d.y.7.O.$+~ V R R Z D+", -"R R y e.{.x.e.O.~.3+5+D.5+X.E.|.e.e.3+p.x.)+e.x.^.E.D.X.e.E.&+3+:+S.&+&+3+D.&+X.O.X.X.3+W.|.X.X.|.&+D.X.x.&+3+D.3+&+&+O.&+X.&+X.p.b+p.&+8+]+~ R R R ` F+", -"R R z d.m.m.d+d+a+|+g+d+d+3+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+a+a+d+d+a+a+a+d+a+d+d+a+a+a+d+a+d+a+g+d+3+g+a+3+d+g+o+~ R R R Z D+", -"R R y e.d+q+y+B+q+B+y+y+y+x+x+y+y+y+y+y+x+B+y+y+x+x+y+y+y+x+x+B+y+y+x+x+y+y+y+x+x+B+x+x+x+x+x+y+x+x+x+x+x+x+y+x+x+x+B+x+x+B+x+x+x+y+x+x+y+y+~ R R R ` F+", -"R R / { ~ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ~ R R R Z D+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ` F+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Z C+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R Z H+", -"R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ..H+", -"%.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.>.H+", -"g+h+j+j+j+j+j+j+h+j+j+h+j+j+j+j+j+j+h+j+j+h+j+j+j+j+j+j+h+j+j+h+h+h+h+h+h+h+h+h+h+h+h+h+j+j+j+j+j+j+h+j+j+h+j+j+h+j+j+h+j+j+j+j+h+j+j+h+j+j+j+j+j+h+j+}+"}; +"% c #B9B9BF", +"& c #E0E0E3", +"* c #ACACB3", +"= c #9D9DA4", +"- c #F3F3F4", +"; c #5D5D6A", +"> c #5E5E6A", +", c #92929B", +"' c #878791", +") c #5C5C69", +"! c #EDEDEE", +"~ c #FCFCFC", +"{ c #909098", +"] c #909099", +"^ c #62626E", +"/ c #A5A5AC", +"( c #E2E2E4", +"_ c #E5E5E7", +": c #BDBDC2", +"< c #CCCCD0", +"[ c #70707C", +"} c #C4C4C9", +"| c #FAFAFA", +"1 c #CECED2", +"2 c #CFCFD3", +"3 c #CBCBCF", +"4 c #BFBFC4", +"5 c #C6C6CB", +"6 c #B3B3B9", +"7 c #B2B2B8", +"8 c #EBEBEC", +"9 c #CACACE", +"0 c #A0A0A7", +"a c #8D8D96", +"b c #FDFDFD", +"c c #8C8C95", +"d c #5A5A67", +"e c #F4F4F5", +"f c #E1E1E3", +"g c #F7F7F7", +"h c #5C5C68", +"i c #DBDBDE", +"j c #F8F8F9", +"k c #F2F2F3", +"l c #F1F1F2", +"m c #BCBCC1", +"n c #EAEAEC", +"o c #8F8F98", +"p c #E2E2E5", +"q c #A6A6AD", +"r c #A3A3AA", +"s c #F0F0F1", +"t c #333339", +"u c #34343A", +"v c #1C1F22", +"w c #1A1E20", +"x c #D1D1D5", +"y c #FBFBFB", +"z c #F5F5F6", +"A c #CDCDD1", +"B c #CECED1", +"C c #5B5B68", +"D c #D7D7DA", +"E c #A2A2A9", +"F c #666672", +"G c #676773", +"H c #ADADB3", +"I c #A8A8AF", +"J c #9F9FA7", +"K c #82828C", +"L c #EBEBED", +"M c #656571", +"N c #6D6D78", +"O c #DBDBDD", +"P c #6C6C77", +"Q c #D5D5D9", +"R c #D5D5D8", +"S c #9999A1", +"T c #9898A0", +"U c #A7A7AE", +"V c #61616E", +"W c #6A6A76", +"X c #EDEDEF", +"Y c #A1A1A8", +"Z c #D8D8DB", +"` c #7C7C86", +" . c #E0E0E2", +".. c #63636F", +"+. c #E6E6E8", +"@. c #B0B0B6", +"#. c #C0C0C5", +"$. c #D6D6D9", +"%. c #6B6B76", +"&. c #E9E9EB", +"*. c #C7C7CB", +"=. c #F9F9FA", +"-. c #C3C3C8", +";. c #74747F", +">. c #96969E", +",. c #C2C2C7", +"'. c #EEEEEF", +"). c #636370", +"!. c #C6C6CA", +"~. c #72727D", +"{. c #AEAEB4", +"]. c #BEBEC3", +"^. c #686874", +"/. c #DDDDE0", +"(. c #646470", +"_. c #DFDFE2", +":. c #7D7D87", +"<. c #D2D2D6", +"[. c #A9A9B0", +"}. c #8E8E97", +"|. c #C1C1C6", +"1. c #84848E", +"2. c #70707B", +"3. c #E4E4E6", +"4. c #696975", +"5. c #C8C8CD", +"6. c #6F6F7A", +"7. c #696974", +"8. c #DEDEE1", +"9. c #7D7D88", +"0. c #B4B4BA", +"a. c #777782", +"b. c #757580", +"c. c #9797A0", +"d. c #ABABB2", +"e. c #AEAEB5", +"f. c #8A8A93", +"g. c #E7E7E9", +"h. c #8B8B94", +"i. c #ECECEE", +"j. c #5F5F6B", +"k. c #B7B7BC", +"l. c #B6B6BC", +"m. c #C9C9CD", +"n. c #FEFEFE", +"o. c #94949D", +"p. c #EFEFF0", +"q. c #AAAAB0", +"r. c #898992", +"s. c #B7B7BD", +"t. c #C1C1C5", +"u. c #AFAFB5", +"v. c #60606C", +"w. c #61616D", +"x. c #DCDCDF", +"y. c #ACACB2", +"z. c #B8B8BE", +"A. c #C8C8CC", +"B. c #E8E8E9", +"C. c #85858F", +"D. c #878790", +"E. c #9D9DA5", +"F. c #9B9BA3", +"G. c #9F9FA6", +"H. c #D3D3D7", +"I. c #71717C", +"J. c #D1D1D4", +"K. c #BABABF", +"L. c #767680", +"M. c #AAAAB1", +"N. c #767681", +"O. c #9A9AA2", +"P. c #73737E", +"Q. c #86868F", +"R. c #9E9EA6", +"S. c #6B6B77", +"T. c #E8E8EA", +"U. c #C5C5CA", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ $ % % $ $ $ & * = # + ", +" + @ $ $ - ; > - $ $ , ' $ & ) # + ", +" + @ $ ! ~ { ] ~ ! $ ^ / & ( / ^ $ _ : - < [ $ & $ $ $ $ ^ / & ( / ^ $ _ } | # + ", +" + @ $ & < 1 2 3 & $ / $ : 4 $ / $ $ 5 6 $ 7 $ & , $ 8 , / $ : 4 $ / $ $ 9 0 # + ", +" + @ $ & a b b c & $ ( - d d e f $ g h ; $ i $ & $ & ( - d d e f $ j ; # + ", +" + @ $ & ) k l ) & $ ( - d d e f $ & $ & $ & $ & ( - d d e f $ f # + ", +" + @ $ & c c & $ / $ m : $ / $ & $ & $ & n - o / $ m : $ / $ & # + ", +" + @ $ & & $ ^ / f p q ^ $ & $ & $ & r - s ^ / f p q ^ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u x & & & 8 y z | A B | # + ", +" + @ t v w w w w w w w w w w u C D E z z f F G f z # + ", +" + @ t v w w w w w w w w w w u H B z z I J 0 I z # + ", +" + @ t v w w w w w w w w w w u K L M z z N O i P z # + ", +" + @ t v w w w w w w w w w w u F L K z z Q c R z # + ", +" + @ t v w w w w w w w w w w u B * z z S - T z # + ", +" + @ t v w w w w w w w w w w u r D C z z ^ U V z # + ", +" + @ t v w w w w w w w w w w u y 8 & & & & W | X X X Y z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u | A B | Z # + ", +" + @ t v w w w w w w w w w w u z f F G f z # + ", +" + @ t v w w w w w w w w w w u z I J 0 I z z ` .; ..+.[ # + ", +" + @ t v w w w w w w w w w w u z N O i P z z @.@.#.0 # + ", +" + @ t v w w w w w w w w w w u z Q c R z z ; p $.d # + ", +" + @ t v w w w w w w w w w w u z S - T z z %.&. .; # + ", +" + @ t v w w w w w w w w w w u z ^ U V z z 2 { @.@. # + ", +" + @ t v w w w w w w w w w w u z z z S *. ; .` # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u =.& & -.;. z # + ", +" + @ t v w w w w w w w w w w u z >.,. z # + ", +" + @ t v w w w w w w w w w w u z ..'. ).* O !.~. z {.+.].^. z >./. .,.~. (.* _.& :.).* O !.~. # + ", +" + @ t v w w w w w w w w w w u z h E <. [.}. K |. | [.d [.7 z M 1.m [.7 ; C ^ [.}. K |. # + ", +" + @ t v w w w w w w w w w w u =.& k | 2. /.& & & 3. | 4. 4.( z ;.: p & X _.P /.& & & 3. # + ", +" + @ t v w w w w w w w w w w u z ; : 5. & 6. | 7. 7.( z B ] ) 4.=. 8.P & 6. # + ", +" + @ t v w w w w w w w w w w u z > L 9. I 0.> d a. | U d U 7 z & b.) 7 | I 7 ; C ^ I 0.> d a. # + ", +" + @ t v w w w w w w w w w w u z c.B ).d._.3.{. z e.+.4 7. z f.8.f r z ).* f .` ).d._.3.{. # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u z z =. .g.i ] E 8.6 # + ", +" + @ t v w w w w w w w w w w u z z z ) h.p }. i.j. # + ", +" + @ t v w w w w w w w w w w u z 7.k.( l.^. >./. .,.~. ^.: +.* z z = D ).* O !.~.m.n.& o. # + ", +" + @ t v w w w w w w w w w w u z 7 [.d [.@. M 1.m 6 I C d.| z P p. [.}. K |. z # + ", +" + @ t v w w w w w w w w w w u z ( 4. 4.f ;.: p & X p 4. W | z N '. /.& & & 3. z # + ", +" + @ t v w w w w w w w w w w u z ( 7. 7.f B ] ) 4.=. p 7. W | z = D & 6. z # + ", +" + @ t v w w w w w w w w w w u z 7 U d U @. & b.) 7 | 6 U d q.| z h r.f c I 0.> d a. z # + ", +" + @ t v w w w w w w w w w w u | X X X Y 7.s.( k.^. f.8.f r z ^.: +.H z =.& g.i { ).d._.3.{. z Z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ & $ $ % % $ $ $ & # + ", +" + @ $ & $ $ - ; > - $ $ $ & # + ", +" + @ $ & ^ / & ( / ^ ^ / & ( / ^ $ 3.t.l u.v. $ ! ~ { ] ~ ! $ ^ / & ( / ^ 4.].l U $ & w.E x.+.y.(. # + ", +" + @ $ & / $ : 4 $ / / $ : 4 $ / $ $ z.< $ c. $ & < 1 2 3 & $ / $ : 4 $ / s.$ z.< $ & E $ : q.k y. # + ", +" + @ $ & ( - d d e f ( - d d e f $ - P $ A. $ & a b b c & $ ( - d d e f B.- P $ & & $ $ $ $ i. # + ", +" + @ $ & ( - d d e f ( - d d e f $ - P $ A. $ & ) k l ) & $ ( - d d e f B.- P $ & _.n.o C.C.D. # + ", +" + @ $ s u.u.u. / $ m : $ / / $ m : $ / $ $ z.< $ c. $ & c c & $ / $ m : $ / s.$ z.< $ & E.$ x F.d.+. # + ", +" + @ $ $ $ $ $ ^ / f p q ^ ^ / f p q ^ $ 3.#.l @.v. $ & & $ ^ / f p q ^ 4.4 k H $ & v.G.H.j &.m # + ", +" + @ $ & # + ", +" + @ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u , n.P =. .g.i ] , n.P Y & & n.& & Y # + ", +" + @ t v w w w w w w w w w w u < 2 / z ) h.p }. < 2 / z # + ", +" + @ t v w w w w w w w w w w u ..n I./. z = D ..n I./. z # + ", +" + @ t v w w w w w w w w w w u c.% 8.[ z P p. c.% 8.[ z # + ", +" + @ t v w w w w w w w w w w u J.K U q. z N '. J.K U q. z # + ", +" + @ t v w w w w w w w w w w u F | L 8 X p z = D F | L 8 X p z # + ", +" + @ t v w w w w w w w w w w u = K. _.L. z h r.f c = K. _.L. z # + ", +" + @ t v w w w w w w w w w w u $.C. M.u. =.& g.i { $.C. M.u. z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u N.5.( 3.O. =.& f ,.P. =. .g.i ] z =.& & & P # + ", +" + @ t v w w w w w w w w w w u 3 Q. ; I. z O.|. z ) h.p }. z z # + ", +" + @ t v w w w w w w w w w w u g.2. z ).n z = D z z # + ", +" + @ t v w w w w w w w w w w u R.e 5.C. z ) / % z P p. z =.& & m. # + ", +" + @ t v w w w w w w w w w w u 7.E _ @. =.& i 7 S. z N '. z z # + ", +" + @ t v w w w w w w w w w w u %.T. z z = D z z # + ", +" + @ t v w w w w w w w w w w u r.d }.U. z z h r.f c z z # + ", +" + @ t v w w w w w w w w w w u ,.g. .U.;. z =.& g.i { z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/b_blank.xpm b/hdspmixer/pixmaps/b_blank.xpm index c0374d2..ee154fb 100644 --- a/hdspmixer/pixmaps/b_blank.xpm +++ b/hdspmixer/pixmaps/b_blank.xpm @@ -1,29 +1,59 @@ /* XPM */ -char * b_blank_xpm[] = { -"13 13 13 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #188210", -"- c #165A10", -"; c #154C11", -"> c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&********=-", -"%$$$$$$$$$$=-", -"%$$$$$$$$$$=-", -"%$$$$$$$$$$@-", -"%$*$$$$$$$$@-", -"%$$$$$$$$$$=-", -"%%$$$$$$$$$@-", -"%$*$$$$$$$$=-", -"%$%$$$$$$$%@-", -"%=--;;;;;;-;-", -"->>>>>>>>>>>>"}; +char const * b_blank_xpm[] = { +"13 13 43 1", +" c #333339", +". c #34343A", +"+ c #1C1F22", +"@ c #1A1E20", +"# c #212527", +"$ c #797B7C", +"% c #838585", +"& c #202426", +"* c #999A9B", +"= c #929394", +"- c #1E2224", +"; c #222628", +"> c #262A2C", +", c #1C2022", +"' c #8A8B8C", +") c #BCBCBD", +"! c #2C3032", +"~ c #A3A4A5", +"{ c #BFC0C0", +"] c #606264", +"^ c #555859", +"/ c #CACACA", +"( c #656768", +"_ c #535657", +": c #C4C4C4", +"< c #C8C8C8", +"[ c #4E5152", +"} c #A9AAAA", +"| c #BABABB", +"1 c #1F2325", +"2 c #626466", +"3 c #C9C9C9", +"4 c #C3C3C3", +"5 c #707273", +"6 c #1B1F21", +"7 c #8B8C8D", +"8 c #CCCCCC", +"9 c #C2C2C2", +"0 c #2D3132", +"a c #B9B9B9", +"b c #8B8D8D", +"c c #505354", +"d c #454849", +" ............", +" +++++++++++.", +" +@@@@@@#$%@.", +" +@@@@@&*=-@.", +" +;>@@,')!@@.", +" +~{]@^/(@@@.", +" +_:<[}|1@@@.", +" +@234/5@@@@.", +" +@67890@@@@.", +" +@@>ab@@@@@.", +" +@@@cd@@@@@.", +" +@@@@@@@@@@.", +" ............"}; diff --git a/hdspmixer/pixmaps/b_card1.xpm b/hdspmixer/pixmaps/b_card1.xpm index c832a10..7081915 100644 --- a/hdspmixer/pixmaps/b_card1.xpm +++ b/hdspmixer/pixmaps/b_card1.xpm @@ -1,30 +1,49 @@ /* XPM */ -char * b_card1_xpm[] = { -"13 13 14 1", -" c None", -". c #8D8F0F", -"+ c #88870F", -"@ c #82800E", -"# c #EBE813", -"$ c #D3D112", -"% c #AAA70F", -"& c #F5F35F", -"* c #F2EF36", -"= c #3C3533", -"- c #75730E", -"; c #4D4D0B", -"> c #40410B", -", c #35340A", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&***=****-;", -"%$$$$==$$$$-;", -"%$$$=$=$$$$-;", -"%$$$$$=$$$$@;", -"%$*$$$=$$$$@;", -"%$$$$$=$$$$-;", -"%%$$$$=$$$$@;", -"%$*$$$=$$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_card1_xpm[] = { +"13 13 33 1", +" c #666659", +". c #69684D", +"+ c #8F8C2F", +"@ c #E6E040", +"# c #FFFB7F", +"$ c #908D2F", +"% c #FFFB7E", +"& c #A7A453", +"* c #232211", +"= c #242312", +"- c #918E2F", +"; c #FFFB7D", +"> c #D7D469", +", c #E1DD6E", +"' c #2B2A15", +") c #928F2F", +"! c #FFFB7C", +"~ c #93902F", +"{ c #FEFA7B", +"] c #94912F", +"^ c #FEFA7A", +"/ c #95922F", +"( c #FEFA79", +"_ c #2B2A14", +": c #96932F", +"< c #FEFA78", +"[ c #A9A750", +"} c #1B1A0D", +"| c #040402", +"1 c #C2BF5C", +"2 c #6F6E4C", +"3 c #A39F2F", +"4 c #FAF56B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&*=%%%%%$", +"-@;;>,';;;;;-", +")@!!!!'!!!!!)", +"~@{{{{'{{{{{~", +"]@^^^^'^^^^^]", +"/@^^^^'^^^^^/", +"/@((((_(((((/", +":@<<[}|}1<<<:", +"2344444444432", +" 23333333332 "}; diff --git a/hdspmixer/pixmaps/b_card2.xpm b/hdspmixer/pixmaps/b_card2.xpm index 5dd8da8..3266bbe 100644 --- a/hdspmixer/pixmaps/b_card2.xpm +++ b/hdspmixer/pixmaps/b_card2.xpm @@ -1,30 +1,59 @@ /* XPM */ -char * b_card2_xpm[] = { -"13 13 14 1", -" c None", -". c #8D8F0F", -"+ c #88870F", -"@ c #82800E", -"# c #EBE813", -"$ c #D3D112", -"% c #AAA70F", -"& c #F5F35F", -"* c #F2EF36", -"= c #3C3533", -"- c #75730E", -"; c #4D4D0B", -"> c #40410B", -", c #35340A", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$$$$$=$$-;", -"%$$$$$$$=$$@;", -"%$*$$$$=$$$@;", -"%$$$$$=$$$$-;", -"%%$$$=$$$$$@;", -"%$*$=====$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_card2_xpm[] = { +"13 13 43 1", +" c #666659", +". c #69684D", +"+ c #8F8C2F", +"@ c #E6E040", +"# c #FFFB7F", +"$ c #908D2F", +"% c #FFFB7E", +"& c #605E2F", +"* c #292814", +"= c #4E4D27", +"- c #DBD86C", +"; c #918E2F", +"> c #FFFB7D", +", c #C3C060", +"' c #B4B158", +") c #6F6D36", +"! c #928F2F", +"~ c #FFFB7C", +"{ c #EFEB74", +"] c #3A391C", +"^ c #93902F", +"/ c #FEFA7B", +"( c #9C9A4C", +"_ c #7B793B", +": c #94912F", +"< c #FEFA7A", +"[ c #E8E46F", +"} c #2F2E16", +"| c #EBE771", +"1 c #95922F", +"2 c #4C4B24", +"3 c #B9B659", +"4 c #FEFA79", +"5 c #8E8C44", +"6 c #797739", +"7 c #96932F", +"8 c #FEFA78", +"9 c #131309", +"0 c #2B2A14", +"a c #504E26", +"b c #6F6E4C", +"c c #A39F2F", +"d c #FAF56B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&*=-%%%$", +";@>>>,>')>>>;", +"!@~~~~~{]~~~!", +"^@/////(_///^", +":@<<<<[}|<<<:", +"1@<<<<23<<<<1", +"1@44456444441", +"7@88890}a8887", +"bcdddddddddcb", +" bcccccccccb "}; diff --git a/hdspmixer/pixmaps/b_card3.xpm b/hdspmixer/pixmaps/b_card3.xpm index 10e9e30..e796057 100644 --- a/hdspmixer/pixmaps/b_card3.xpm +++ b/hdspmixer/pixmaps/b_card3.xpm @@ -1,30 +1,66 @@ /* XPM */ -char * b_card3_xpm[] = { -"13 13 14 1", -" c None", -". c #8D8F0F", -"+ c #88870F", -"@ c #82800E", -"# c #EBE813", -"$ c #D3D112", -"% c #AAA70F", -"& c #F5F35F", -"* c #F2EF36", -"= c #3C3533", -"- c #75730E", -"; c #4D4D0B", -"> c #40410B", -", c #35340A", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$$$$$=$$-;", -"%$$$$$==$$$@;", -"%$*$$$$$=$$@;", -"%$$$$$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_card3_xpm[] = { +"13 13 50 1", +" c #666659", +". c #69684D", +"+ c #8F8C2F", +"@ c #E6E040", +"# c #FFFB7F", +"$ c #908D2F", +"% c #FFFB7E", +"& c #E0DC6F", +"* c #302F18", +"= c #2F2E17", +"- c #4B4A25", +"; c #D5D269", +"> c #918E2F", +", c #FFFB7D", +"' c #F9F57A", +") c #C4C160", +"! c #58572B", +"~ c #928F2F", +"{ c #FFFB7C", +"] c #B5B258", +"^ c #636130", +"/ c #93902F", +"( c #FEFA7B", +"_ c #CAC762", +": c #201F0F", +"< c #252412", +"[ c #F1ED75", +"} c #94912F", +"| c #FEFA7A", +"1 c #FBF779", +"2 c #898742", +"3 c #757338", +"4 c #95922F", +"5 c #E8E46F", +"6 c #403F1F", +"7 c #FEFA79", +"8 c #E4E16D", +"9 c #F7F376", +"0 c #959347", +"a c #868440", +"b c #96932F", +"c c #FEFA78", +"d c #BBB858", +"e c #2C2B15", +"f c #302F17", +"g c #6A6832", +"h c #E9E56E", +"i c #6F6E4C", +"j c #A39F2F", +"k c #FAF56B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&*=-;%%%$", +">@,,'',)!,,,>", +"~@{{{{{]^{{{~", +"/@(((_:<[(((/", +"}@||||123|||}", +"4@|||||56|||4", +"4@778970a7774", +"b@ccdefghcccb", +"ijkkkkkkkkkji", +" ijjjjjjjjji "}; diff --git a/hdspmixer/pixmaps/b_mute.xpm b/hdspmixer/pixmaps/b_mute.xpm index dcdc8cd..e70968d 100644 --- a/hdspmixer/pixmaps/b_mute.xpm +++ b/hdspmixer/pixmaps/b_mute.xpm @@ -1,77 +1,147 @@ /* XPM */ -char * b_mute_xpm[] = { -"30 22 52 1", -" c None", -". c #DE8C00", -"+ c #872100", -"@ c #B35A00", -"# c #FFD553", -"$ c #FFC128", -"% c #700909", -"& c #272727", -"* c #FFFFFF", -"= c #001B40", -"- c #775328", -"; c #906230", -"> c #855B2D", -", c #845A2C", -"' c #745027", -") c #3B2B1D", -"! c #553C1C", -"~ c #755427", -"{ c #ACA182", -"] c #B28051", -"^ c #B38052", -"/ c #B28052", -"( c #B38152", -"_ c #A07751", -": c #35271C", -"< c #150D0A", -"[ c #755428", -"} c #966B3A", -"| c #8A5D2F", -"1 c #8B5E2F", -"2 c #8A5D2E", -"3 c #7D572B", -"4 c #150D0B", -"5 c #966A3A", -"6 c #160D0B", -"7 c #36271C", -"8 c #8A5E2F", -"9 c #745327", -"0 c #7D582C", -"a c #563D1D", -"b c #634621", -"c c #714F25", -"d c #715025", -"e c #725026", -"f c #715026", -"g c #48341F", -"h c #553C1D", -"i c #32251B", -"j c #18100D", -"k c #180F0D", -"l c #19100D", -"m c #19100E", -".............................+", -"@.#$$$$$$$$$$$$$$$$$$$$$$$$$%&", -"@..*.....*.*...*.*****.****.%&", -"@..**...**.*...*...*...*....%&", -"@..**...**.*...*...*...*....+&", -"@.$*.*.*.*.*...*...*...****.+&", -"@..*.*.*.*.*...*...*...*....%&", -"@@.*..*..*.*...*...*...*....+&", -"@.$*..*..*..***....*...****.%&", -"@.@........................@+&", -"@%&&=======================&=&", -"-;>>>>>>>>>,>>>>>>>>>>>>>,>>')", -"!~{]]^/]/]/]^](]^//]^^^]^(^_:<", -"![}*|1212*2*111*2*****2****3:4", -"!~5**221**2*122*2||*|2|*22|3:6", -"![5**221**|*212*222*222*12|376", -"![5*1*2*2*2*8|2*228*|22****3:<", -"!95*8*|*2*1*2|2*122*222*21|0:<", -"a[5*|2*12*1*|1|*|22*2|2*1210:<", -"![5*82*12*22***2||2*|1|****0:<", -"![bccccdcecccfcfcfcccccccccg:<", -"hijkljjjjjmkjkkjjmjjjjjjjljk4<"}; +char const * b_mute_xpm[] = { +"30 22 122 2", +" c #665C59", +". c #69544D", +"+ c #8F462F", +"@ c #E66840", +"# c #FF9E7F", +"$ c #201410", +"% c #7B4C3D", +"& c #7E4E3F", +"* c #3B251D", +"= c #3F271F", +"- c #452B22", +"; c #0E0907", +"> c #422921", +", c #261813", +"' c #603B30", +") c #90472F", +"! c #FF9D7E", +"~ c #3A241D", +"{ c #412820", +"] c #402720", +"^ c #3D261E", +"/ c #3B241D", +"( c #91472F", +"_ c #FF9D7D", +": c #754839", +"< c #CA7C63", +"[ c #724638", +"} c #92472F", +"| c #FF9C7C", +"1 c #CE7E64", +"2 c #714537", +"3 c #704536", +"4 c #CB7C63", +"5 c #261712", +"6 c #78493A", +"7 c #93472F", +"8 c #FE9B7B", +"9 c #3B241C", +"0 c #422820", +"a c #3F261E", +"b c #3E261E", +"c c #FB997A", +"d c #FC9A7A", +"e c #41281F", +"f c #94482F", +"g c #FE9A7A", +"h c #A2624E", +"i c #9F614D", +"j c #7A4A3A", +"k c #BA7159", +"l c #BE735B", +"m c #7D4B3C", +"n c #95482F", +"o c #E0886C", +"p c #643C30", +"q c #40271F", +"r c #633C2F", +"s c #E2896D", +"t c #543328", +"u c #6F554C", +"v c #A34B2F", +"w c #FA8E6B", +"x c #666659", +"y c #69684D", +"z c #8F8C2F", +"A c #E6E040", +"B c #908D2F", +"C c #FFFB7E", +"D c #202010", +"E c #7B793D", +"F c #7E7C3E", +"G c #3B3A1D", +"H c #3F3E1F", +"I c #454422", +"J c #0E0E07", +"K c #424121", +"L c #262513", +"M c #605E2F", +"N c #918E2F", +"O c #FFFB7D", +"P c #3A391C", +"Q c #414020", +"R c #403F1F", +"S c #3D3C1E", +"T c #928F2F", +"U c #FFFB7C", +"V c #757339", +"W c #CAC762", +"X c #727037", +"Y c #93902F", +"Z c #FEFA7B", +"` c #3B3A1C", +" . c #CDCA63", +".. c #716F37", +"+. c #706E36", +"@. c #3F3E1E", +"#. c #262512", +"$. c #78763A", +"%. c #94912F", +"&. c #FEFA7A", +"*. c #424120", +"=. c #3E3D1E", +"-. c #FBF779", +";. c #FCF879", +">. c #41401F", +",. c #95922F", +"'. c #A2A04E", +"). c #9F9D4D", +"!. c #7A783A", +"~. c #BAB759", +"{. c #BEBB5B", +"]. c #7D7B3C", +"^. c #FEFA79", +"/. c #E0DD6B", +"(. c #64622F", +"_. c #403F1E", +":. c #63612F", +"<. c #E2DF6C", +"[. c #545228", +"}. c #6F6E4C", +"|. c #A39F2F", +"1. c #FAF56B", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +". + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +"+ @ # # $ % # # & $ # * # # # = - = ; = > # , = = ' # # # + ", +") @ ! ! ~ { ! ! ] ^ ! / ! ! ! = ! ! / ! ! ! / ! ! ! ! ! ! ) ", +"( @ _ _ / : < < [ = _ / _ _ _ = _ _ / _ _ _ / _ _ _ _ _ _ ( ", +"} @ | | / 1 2 3 4 = | / | | | = | | / | | | 5 = = 6 | | | } ", +"7 @ 8 8 9 8 0 a 8 a 8 b c 8 d e 8 8 9 8 8 8 9 8 8 8 8 8 8 7 ", +"f @ g g 9 g h i g a g j k g l m g g 9 g g g 9 g g g g g g f ", +"n @ g g 9 g g g g a g o p q r s g g 9 g g g 5 a a t g g g n ", +"u v w w w w w w w w w w w w w w w w w w w w w w w w w w v u ", +" u v v v v v v v v v v v v v v v v v v v v v v v v v v u ", +"x y z z z z z z z z z z z z z z z z z z z z z z z z z z y x ", +"y z A A A A A A A A A A A A A A A A A A A A A A A A A A z y ", +"B A C C D E C C F D C G C C C H I H J H K C L H H M C C C B ", +"N A O O P Q O O R S O G O O O H O O G O O O G O O O O O O N ", +"T A U U G V W W X H U G U U U H U U G U U U G U U U U U U T ", +"Y A Z Z ` ...+.W @.Z ` Z Z Z @.Z Z ` Z Z Z #.@.@.$.Z Z Z Y ", +"%.A &.&.` &.*.@.&.@.&.=.-.&.;.>.&.&.` &.&.&.` &.&.&.&.&.&.%.", +",.A &.&.` &.'.).&.@.&.!.~.&.{.].&.&.` &.&.&.` &.&.&.&.&.&.,.", +",.A ^.^.` ^.^.^.^.@.^./.(._.:.<.^.^.` ^.^.^.#.@.@.[.^.^.^.,.", +"}.|.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.|.}.", +"x }.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.}.x "}; diff --git a/hdspmixer/pixmaps/b_pre1.xpm b/hdspmixer/pixmaps/b_pre1.xpm index b81f85a..d825565 100644 --- a/hdspmixer/pixmaps/b_pre1.xpm +++ b/hdspmixer/pixmaps/b_pre1.xpm @@ -1,30 +1,49 @@ /* XPM */ -char * b_pre1_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&***=****-;", -"%$$$$==$$$$-;", -"%$$$=$=$$$$-;", -"%$$$$$=$$$$@;", -"%$*$$$=$$$$@;", -"%$$$$$=$$$$-;", -"%%$$$$=$$$$@;", -"%$*$$$=$$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_pre1_xpm[] = { +"13 13 33 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #53A753", +"* c #112311", +"= c #122412", +"- c #2F912F", +"; c #7DFF7D", +"> c #69D769", +", c #6EE16E", +"' c #152B15", +") c #2F922F", +"! c #7CFF7C", +"~ c #2F932F", +"{ c #7BFE7B", +"] c #2F942F", +"^ c #7AFE7A", +"/ c #2F952F", +"( c #79FE79", +"_ c #142B14", +": c #2F962F", +"< c #78FE78", +"[ c #50A950", +"} c #0D1B0D", +"| c #020402", +"1 c #5CC25C", +"2 c #4C6F55", +"3 c #2FA32F", +"4 c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&*=%%%%%$", +"-@;;>,';;;;;-", +")@!!!!'!!!!!)", +"~@{{{{'{{{{{~", +"]@^^^^'^^^^^]", +"/@^^^^'^^^^^/", +"/@((((_(((((/", +":@<<[}|}1<<<:", +"2344444444432", +" 23333333332 "}; diff --git a/hdspmixer/pixmaps/b_pre2.xpm b/hdspmixer/pixmaps/b_pre2.xpm index 731c030..ad61212 100644 --- a/hdspmixer/pixmaps/b_pre2.xpm +++ b/hdspmixer/pixmaps/b_pre2.xpm @@ -1,30 +1,59 @@ /* XPM */ -char * b_pre2_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$$$$$=$$-;", -"%$$$$$$$=$$@;", -"%$*$$$$=$$$@;", -"%$$$$$=$$$$-;", -"%%$$$=$$$$$@;", -"%$*$=====$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_pre2_xpm[] = { +"13 13 43 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #2F602F", +"* c #142914", +"= c #274E27", +"- c #6CDB6C", +"; c #2F912F", +"> c #7DFF7D", +", c #60C360", +"' c #58B458", +") c #366F36", +"! c #2F922F", +"~ c #7CFF7C", +"{ c #74EF74", +"] c #1C3A1C", +"^ c #2F932F", +"/ c #7BFE7B", +"( c #4C9C4C", +"_ c #3B7B3B", +": c #2F942F", +"< c #7AFE7A", +"[ c #6FE86F", +"} c #162F16", +"| c #71EB71", +"1 c #2F952F", +"2 c #244C24", +"3 c #59B959", +"4 c #79FE79", +"5 c #448E44", +"6 c #397939", +"7 c #2F962F", +"8 c #78FE78", +"9 c #091309", +"0 c #142B14", +"a c #265026", +"b c #4C6F55", +"c c #2FA32F", +"d c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&*=-%%%$", +";@>>>,>')>>>;", +"!@~~~~~{]~~~!", +"^@/////(_///^", +":@<<<<[}|<<<:", +"1@<<<<23<<<<1", +"1@44456444441", +"7@88890}a8887", +"bcdddddddddcb", +" bcccccccccb "}; diff --git a/hdspmixer/pixmaps/b_pre3.xpm b/hdspmixer/pixmaps/b_pre3.xpm index 77162c2..37fbf9e 100644 --- a/hdspmixer/pixmaps/b_pre3.xpm +++ b/hdspmixer/pixmaps/b_pre3.xpm @@ -1,30 +1,66 @@ /* XPM */ -char * b_pre3_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$$$$$=$$-;", -"%$$$$$==$$$@;", -"%$*$$$$$=$$@;", -"%$$$$$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_pre3_xpm[] = { +"13 13 50 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #6FE06F", +"* c #183018", +"= c #172F17", +"- c #254B25", +"; c #69D569", +"> c #2F912F", +", c #7DFF7D", +"' c #7AF97A", +") c #60C460", +"! c #2B582B", +"~ c #2F922F", +"{ c #7CFF7C", +"] c #58B558", +"^ c #306330", +"/ c #2F932F", +"( c #7BFE7B", +"_ c #62CA62", +": c #0F200F", +"< c #122512", +"[ c #75F175", +"} c #2F942F", +"| c #7AFE7A", +"1 c #79FB79", +"2 c #428942", +"3 c #387538", +"4 c #2F952F", +"5 c #6FE86F", +"6 c #1F401F", +"7 c #79FE79", +"8 c #6DE46D", +"9 c #76F776", +"0 c #479547", +"a c #408640", +"b c #2F962F", +"c c #78FE78", +"d c #58BB58", +"e c #152C15", +"f c #173017", +"g c #326A32", +"h c #6EE96E", +"i c #4C6F55", +"j c #2FA32F", +"k c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&*=-;%%%$", +">@,,'',)!,,,>", +"~@{{{{{]^{{{~", +"/@(((_:<[(((/", +"}@||||123|||}", +"4@|||||56|||4", +"4@778970a7774", +"b@ccdefghcccb", +"ijkkkkkkkkkji", +" ijjjjjjjjji "}; diff --git a/hdspmixer/pixmaps/b_pre4.xpm b/hdspmixer/pixmaps/b_pre4.xpm index 30ab560..3acd549 100644 --- a/hdspmixer/pixmaps/b_pre4.xpm +++ b/hdspmixer/pixmaps/b_pre4.xpm @@ -1,30 +1,54 @@ /* XPM */ -char * b_pre4_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&****=***-;", -"%$$$$$==$$$-;", -"%$$$$=$=$$$-;", -"%$$$$=$=$$$@;", -"%$*$=$$=$$$@;", -"%$$$=====$$-;", -"%%$$$$$=$$$@;", -"%$*$$$$=$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_pre4_xpm[] = { +"13 13 38 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #408140", +"* c #142814", +"= c #2F912F", +"- c #7DFF7D", +"; c #72E872", +"> c #2B572B", +", c #152B15", +"' c #2F922F", +") c #7CFF7C", +"! c #346A34", +"~ c #66D266", +"{ c #2F932F", +"] c #7BFE7B", +"^ c #68D668", +"/ c #2F622F", +"( c #2F942F", +"_ c #7AFE7A", +": c #295629", +"< c #6BDF6B", +"[ c #2F952F", +"} c #122512", +"| c #0F1F0F", +"1 c #020502", +"2 c #285428", +"3 c #79FE79", +"4 c #142B14", +"5 c #2F962F", +"6 c #78FE78", +"7 c #4C6F55", +"8 c #2FA32F", +"9 c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%%&*%%%%$", +"=@---;>,----=", +"'@)))!~,))))'", +"{@]]^/],]]]]{", +"(@__:<_,____(", +"[@__}||12___[", +"[@3333343333[", +"5@66666466665", +"7899999999987", +" 78888888887 "}; diff --git a/hdspmixer/pixmaps/b_pre5.xpm b/hdspmixer/pixmaps/b_pre5.xpm index f563537..e926c4c 100644 --- a/hdspmixer/pixmaps/b_pre5.xpm +++ b/hdspmixer/pixmaps/b_pre5.xpm @@ -1,30 +1,59 @@ /* XPM */ -char * b_pre5_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**====**-;", -"%$$$$=$$$$$-;", -"%$$$=$$$$$$-;", -"%$$$====$$$@;", -"%$*$$$$$=$$@;", -"%$$$$$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_pre5_xpm[] = { +"13 13 43 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #0A150A", +"* c #172F17", +"= c #57B157", +"- c #2F912F", +"; c #7DFF7D", +"> c #2F922F", +", c #7CFF7C", +"' c #2F932F", +") c #7BFE7B", +"! c #0C180C", +"~ c #397739", +"{ c #73ED73", +"] c #2F942F", +"^ c #7AFE7A", +"/ c #6FE86F", +"( c #78F978", +"_ c #3F833F", +": c #418641", +"< c #2F952F", +"[ c #6FE76F", +"} c #204220", +"| c #79FE79", +"1 c #6FE96F", +"2 c #78FC78", +"3 c #459045", +"4 c #408540", +"5 c #2F962F", +"6 c #78FE78", +"7 c #51AB51", +"8 c #142A14", +"9 c #173117", +"0 c #316931", +"a c #6EE96E", +"b c #4C6F55", +"c c #2FA32F", +"d c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&**=%%%$", +"-@;;;*;;;;;;-", +">@,,,*,,,,,,>", +"'@)))!*~{)))'", +"]@^^^/(_:^^^]", +"<@^^^^^[}^^^<", +"<@||12|34|||<", +"5@667890a6665", +"bcdddddddddcb", +" bcccccccccb "}; diff --git a/hdspmixer/pixmaps/b_pre6.xpm b/hdspmixer/pixmaps/b_pre6.xpm index 2d47537..e81cbf3 100644 --- a/hdspmixer/pixmaps/b_pre6.xpm +++ b/hdspmixer/pixmaps/b_pre6.xpm @@ -1,30 +1,72 @@ /* XPM */ -char * b_pre6_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$=$$$$$$-;", -"%$$$====$$$@;", -"%$*$=$$$=$$@;", -"%$$$=$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_pre6_xpm[] = { +"13 13 56 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #428642", +"* c #132713", +"= c #132613", +"- c #56AF56", +"; c #2F912F", +"> c #7DFF7D", +", c #5CBC5C", +"' c #2C5A2C", +") c #73EB73", +"! c #7CFD7C", +"~ c #74EC74", +"{ c #2F922F", +"] c #7CFF7C", +"^ c #397639", +"/ c #64CD64", +"( c #2F932F", +"_ c #7BFE7B", +": c #1B391B", +"< c #377237", +"[ c #193319", +"} c #3D7F3D", +"| c #74EF74", +"1 c #2F942F", +"2 c #7AFE7A", +"3 c #142A14", +"4 c #4EA14E", +"5 c #77F777", +"6 c #3C7D3C", +"7 c #448E44", +"8 c #2F952F", +"9 c #336B33", +"0 c #7AFD7A", +"a c #6CE06C", +"b c #234A23", +"c c #79FE79", +"d c #479447", +"e c #57B757", +"f c #459045", +"g c #418841", +"h c #2F962F", +"i c #78FE78", +"j c #73F373", +"k c #265126", +"l c #142B14", +"m c #306630", +"n c #6FEA6F", +"o c #4C6F55", +"p c #2FA32F", +"q c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&*=-%%%$", +";@>>,')!~>>>;", +"{@]]^/]]]]]]{", +"(@__:<[}|___(", +"1@22345672221", +"8@22902ab2228", +"8@ccdecfgccc8", +"h@iijklmniiih", +"opqqqqqqqqqpo", +" opppppppppo "}; diff --git a/hdspmixer/pixmaps/b_pre7.xpm b/hdspmixer/pixmaps/b_pre7.xpm index 8de4470..e5a1002 100644 --- a/hdspmixer/pixmaps/b_pre7.xpm +++ b/hdspmixer/pixmaps/b_pre7.xpm @@ -1,30 +1,57 @@ /* XPM */ -char * b_pre7_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&*=====**-;", -"%$$$$$$$=$$-;", -"%$$$$$$=$$$-;", -"%$$$$$$=$$$@;", -"%$*$$$=$$$$@;", -"%$$$$$=$$$$-;", -"%%$$$=$$$$$@;", -"%$*$$=$$$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_pre7_xpm[] = { +"13 13 41 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #66CF66", +"* c #172F17", +"= c #132713", +"- c #142914", +"; c #2F912F", +"> c #7DFF7D", +", c #51A551", +"' c #377137", +") c #2F922F", +"! c #7CFF7C", +"~ c #2A572A", +"{ c #5DBF5D", +"] c #2F932F", +"^ c #7BFE7B", +"/ c #79F979", +"( c #102110", +"_ c #79FA79", +": c #2F942F", +"< c #7AFE7A", +"[ c #59BA59", +"} c #2C5B2C", +"| c #2F952F", +"1 c #346D34", +"2 c #51A851", +"3 c #79FE79", +"4 c #122612", +"5 c #72F072", +"6 c #2F962F", +"7 c #78FE78", +"8 c #63D163", +"9 c #204520", +"0 c #4C6F55", +"a c #2FA32F", +"b c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%&**=-%%%$", +";@>>>>>,'>>>;", +")@!!!!!~{!!!)", +"]@^^^^/(_^^^]", +":@<<<<[}<<<<:", +"|@<<<<12<<<<|", +"|@3333453333|", +"6@77789777776", +"0abbbbbbbbba0", +" 0aaaaaaaaa0 "}; diff --git a/hdspmixer/pixmaps/b_pre8.xpm b/hdspmixer/pixmaps/b_pre8.xpm index 895263f..7b19b19 100644 --- a/hdspmixer/pixmaps/b_pre8.xpm +++ b/hdspmixer/pixmaps/b_pre8.xpm @@ -1,30 +1,69 @@ /* XPM */ -char * b_pre8_xpm[] = { -"13 13 14 1", -" c None", -". c #1AA00D", -"+ c #1A9510", -"@ c #198F0F", -"# c #20FF0D", -"$ c #21E50C", -"% c #1CBA0D", -"& c #69FF5F", -"* c #44FF36", -"= c #3C3533", -"- c #188210", -"; c #165A10", -"> c #154C11", -", c #144010", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$@", -"%$&**===***-;", -"%$$$=$$$=$$-;", -"%$$$=$$$=$$-;", -"%$$$$===$$$@;", -"%$*$=$$$=$$@;", -"%$$$=$$$=$$-;", -"%%$$=$$$=$$@;", -"%$*$$===$$$-;", -"%$%$$$$$$$%@;", -"%-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +char const * b_pre8_xpm[] = { +"13 13 53 1", +" c #595966", +". c #4D6956", +"+ c #2F8F2F", +"@ c #40E640", +"# c #7FFF7F", +"$ c #2F902F", +"% c #7EFF7E", +"& c #58B358", +"* c #1B371B", +"= c #1E3C1E", +"- c #61C561", +"; c #2F912F", +"> c #7DFF7D", +", c #1C391C", +"' c #74EC74", +") c #66D166", +"! c #274F27", +"~ c #2F922F", +"{ c #7CFF7C", +"] c #234823", +"^ c #6DE06D", +"/ c #5EC25E", +"( c #306230", +"_ c #2F932F", +": c #7BFE7B", +"< c #6BDD6B", +"[ c #091309", +"} c #0E1D0E", +"| c #73EE73", +"1 c #2F942F", +"2 c #7AFE7A", +"3 c #275227", +"4 c #61C961", +"5 c #51A851", +"6 c #367136", +"7 c #2F952F", +"8 c #173017", +"9 c #73EF73", +"0 c #1D3C1D", +"a c #79FE79", +"b c #265126", +"c c #67D967", +"d c #58B958", +"e c #346E34", +"f c #2F962F", +"g c #78FE78", +"h c #5DC45D", +"i c #1D3E1D", +"j c #214621", +"k c #64D464", +"l c #4C6F55", +"m c #2FA32F", +"n c #6BFA6B", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%&*=-%%%$", +";@>>>,')!>>>;", +"~@{{{]^/({{{~", +"_@:::<[}|:::_", +"1@22234562221", +"7@22282902227", +"7@aaabcdeaaa7", +"f@ggghijkgggf", +"lmnnnnnnnnnml", +" lmmmmmmmmml "}; diff --git a/hdspmixer/pixmaps/b_save.xpm b/hdspmixer/pixmaps/b_save.xpm index a984e28..9e7c583 100644 --- a/hdspmixer/pixmaps/b_save.xpm +++ b/hdspmixer/pixmaps/b_save.xpm @@ -1,30 +1,39 @@ /* XPM */ -char * b_save_xpm[] = { -"13 13 14 1", +char const * b_save_xpm[] = { +"13 13 23 1", " c None", -". c #5C7B1B", -"+ c #505F2F", -"@ c #434343", -"# c #7F817A", -"$ c #DE000B", -"% c #87003B", -"& c #B30020", -"* c #FF6053", -"= c #FF2E28", -"- c #70094F", -"; c #272727", -"> c #004039", -", c #191919", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$%", -"&$*========-;", -"&$$$$$$$$$$-;", -"&$$$$$$$$$$-;", -"&$$$$$$$$$$%;", -"&$=$$$$$$$$%;", -"&$$$$$$$$$$-;", -"&&$$$$$$$$$%;", -"&$=$$$$$$$$-;", -"&$&$$$$$$$&%;", -"&-;;>>>>>>;>;", -";,,,,,,,,,,,,"}; +". c #665959", +"+ c #694D4D", +"@ c #8F2F2F", +"# c #E64040", +"$ c #FF7F7F", +"% c #FA6B6B", +"& c #902F2F", +"* c #FF7E7E", +"= c #912F2F", +"- c #FF7D7D", +"; c #922F2F", +"> c #FF7C7C", +", c #932F2F", +"' c #FE7B7B", +") c #942F2F", +"! c #FE7A7A", +"~ c #952F2F", +"{ c #FE7979", +"] c #962F2F", +"^ c #FE7878", +"/ c #6F4C4C", +"( c #A32F2F", +".+@@@@@@@@@+.", +"+@#########@+", +"@#$$$$$$$$$%@", +"&#*********%&", +"=#---------%=", +";#>>>>>>>>>%;", +",#'''''''''%,", +")#!!!!!!!!!%)", +"~#!!!!!!!!!%~", +"~#{{{{{{{{{%~", +"]#^^^^^^^^^%]", +"/(%%%%%%%%%(/", +"./(((((((((/."}; diff --git a/hdspmixer/pixmaps/b_solo.xpm b/hdspmixer/pixmaps/b_solo.xpm index f678b19..784fd70 100644 --- a/hdspmixer/pixmaps/b_solo.xpm +++ b/hdspmixer/pixmaps/b_solo.xpm @@ -1,78 +1,169 @@ /* XPM */ -char * b_solo_xpm[] = { -"30 22 53 1", -" c None", -". c #7C2000", -"+ c #690806", -"@ c #272118", -"# c #F4BE91", -"$ c #F44E10", -"% c #23241A", -"& c #151610", -"* c #A85600", -"= c #FF0000", -"- c #F4FDB7", -"; c #532800", -"> c #050406", -", c #322020", -"' c #452524", -") c #3B2323", -"! c #3C2323", -"~ c #3C2423", -"{ c #3B2322", -"] c #322021", -"^ c #191315", -"/ c #231A1C", -"( c #3F2524", -"_ c #EAB1B5", -": c #643534", -"< c #161113", -"[ c #030205", -"} c #231A1B", -"| c #633534", -"1 c #3A2222", -"2 c #FDF9F9", -"3 c #3A2322", -"4 c #FCF9F8", -"5 c #FCF8F8", -"6 c #402423", -"7 c #040205", -"8 c #402524", -"9 c #FDF9F8", -"0 c #161012", -"a c #040305", -"b c #633433", -"c c #402422", -"d c #633533", -"e c #332020", -"f c #321F20", -"g c #332021", -"h c #21191A", -"i c #161013", -"j c #362323", -"k c #140F11", -"l c #040306", -"m c #050306", -"n c #050407", -"............................+@", -".#$$$$$$$$$$$$$$$$$$$$$$$$$$%&", -".*==---===---===-=====---===@&", -".*=-=====-===-==-====-===-==@&", -".*=-====-=====-=-===-=====-=@&", -".*==--==-=====-=-===-=====-=@&", -".*====-=-=====-=-===-=====-=@&", -".*====-==-===-==-====-===-==@&", -".*=---====---===---===---===@&", -"..+++++++++++++++++++++++++;@&", -"@&&&&&&&&&&&&&&&&&&&&&&&&&>&&&", -",'))))))!~!){)~!!)))~))))!)~]^", -"/(_:::::::::::::::::::::::::<[", -"}(|1222)31244)1151)))1222316<7", -"}8:2)3))12))35135)1))9)3)2)60[", -"/8:51))123)1{)2)21))2)3311960a", -"/(b1223121)3)32323))2313))2c<[", -"}(d3)12)213)){212)){2)131)2607", -"/8:)3)233231121123)312))12)60a", -"/(:222e,fg224,ge422,eg222,ghia", -"/8jjjjjjjjjjjjjjjjjjjjjjjjjj07", -"}klmn>l>ll>nm>>nmll>mm>m>n>l[7"}; +char const * b_solo_xpm[] = { +"30 22 144 2", +" c #665963", +". c #694D62", +"+ c #8F2F75", +"@ c #E640BA", +"# c #FF7FDD", +"$ c #BF5FA6", +"% c #422139", +"& c #3B1D33", +"* c #984C84", +"= c #FE7FDC", +"- c #AF5798", +"; c #4A2540", +"> c #902F76", +", c #FF7EDD", +"' c #4D2643", +") c #EE76CE", +"! c #F077D0", +"~ c #BC5DA3", +"{ c #5E2E51", +"] c #F177D1", +"^ c #613054", +"/ c #BD5DA4", +"( c #912F77", +"_ c #FF7DDD", +": c #B5599D", +"< c #FD7CDB", +"[ c #6D355E", +"} c #D166B5", +"| c #D568B9", +"1 c #6E365F", +"2 c #922F78", +"3 c #FF7CDD", +"4 c #DA6ABD", +"5 c #542949", +"6 c #2B1525", +"7 c #C45FAA", +"8 c #3E1E36", +"9 c #FE7CDC", +"0 c #412038", +"a c #932F78", +"b c #FE7BDC", +"c c #D969BC", +"d c #4A2440", +"e c #D165B5", +"f c #D467B8", +"g c #6E355F", +"h c #3B1C33", +"i c #942F79", +"j c #FE7ADB", +"k c #DD6ABF", +"l c #EB71CB", +"m c #522746", +"n c #BA59A1", +"o c #612E53", +"p c #F073CF", +"q c #F174D0", +"r c #643056", +"s c #BB5AA1", +"t c #952F7A", +"u c #622F54", +"v c #47223D", +"w c #C05CA6", +"x c #FC79D9", +"y c #AA5293", +"z c #49233F", +"A c #4A2340", +"B c #271321", +"C c #43203A", +"D c #703660", +"E c #6F4C65", +"F c #A32F84", +"G c #FA6BD5", +"H c #665959", +"I c #694D4D", +"J c #8F2F2F", +"K c #E64040", +"L c #FF7F7F", +"M c #BF5F5F", +"N c #422121", +"O c #3B1D1D", +"P c #984C4C", +"Q c #FE7F7F", +"R c #AF5757", +"S c #4A2525", +"T c #902F2F", +"U c #FF7E7E", +"V c #4D2626", +"W c #EE7676", +"X c #F07777", +"Y c #BC5D5D", +"Z c #5E2E2E", +"` c #F17777", +" . c #613030", +".. c #BD5D5D", +"+. c #912F2F", +"@. c #FF7D7D", +"#. c #B55959", +"$. c #FD7C7C", +"%. c #6D3535", +"&. c #D16666", +"*. c #D56868", +"=. c #6E3636", +"-. c #922F2F", +";. c #FF7C7C", +">. c #DA6A6A", +",. c #542929", +"'. c #2B1515", +"). c #C45F5F", +"!. c #3E1E1E", +"~. c #FE7C7C", +"{. c #412020", +"]. c #932F2F", +"^. c #FE7B7B", +"/. c #D96969", +"(. c #4A2424", +"_. c #D16565", +":. c #D46767", +"<. c #6E3535", +"[. c #3B1C1C", +"}. c #942F2F", +"|. c #FE7A7A", +"1. c #DD6A6A", +"2. c #EB7171", +"3. c #522727", +"4. c #BA5959", +"5. c #612E2E", +"6. c #F07373", +"7. c #F17474", +"8. c #643030", +"9. c #BB5A5A", +"0. c #952F2F", +"a. c #622F2F", +"b. c #472222", +"c. c #C05C5C", +"d. c #FC7979", +"e. c #AA5252", +"f. c #492323", +"g. c #4A2323", +"h. c #271313", +"i. c #432020", +"j. c #703636", +"k. c #6F4C4C", +"l. c #A32F2F", +"m. c #FA6B6B", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +". + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +"+ @ # # $ % & * # = - ; ; - = # & # # # = - ; ; - = # # # + ", +"> @ , , ' ) , ! , ~ { ! ] ^ / , & , , , ~ { ! ] ^ / , , , > ", +"( @ _ _ ' : < _ _ [ } _ _ | 1 _ & _ _ _ [ } _ _ | 1 _ _ _ ( ", +"2 @ 3 3 4 5 6 7 3 8 9 3 3 3 0 3 & 3 3 3 8 9 3 3 3 0 3 3 3 2 ", +"a @ b b b b c d b [ e b b f g b h b b b [ e b b f g b b b a ", +"i @ j j k j l m j n o p q r s j h j j j n o p q r s j j j i ", +"t @ j j u h v w j x y z A y x j B C C D x y z A y x j j j t ", +"E F G G G G G G G G G G G G G G G G G G G G G G G G G G F E ", +" E F F F F F F F F F F F F F F F F F F F F F F F F F F E ", +"H I J J J J J J J J J J J J J J J J J J J J J J J J J J I H ", +"I J K K K K K K K K K K K K K K K K K K K K K K K K K K J I ", +"J K L L M N O P L Q R S S R Q L O L L L Q R S S R Q L L L J ", +"T K U U V W U X U Y Z X ` ...U O U U U Y Z X ` ...U U U T ", +"+.K @.@.V #.$.@.@.%.&.@.@.*.=.@.O @.@.@.%.&.@.@.*.=.@.@.@.+.", +"-.K ;.;.>.,.'.).;.!.~.;.;.;.{.;.O ;.;.;.!.~.;.;.;.{.;.;.;.-.", +"].K ^.^.^.^./.(.^.%._.^.^.:.<.^.[.^.^.^.%._.^.^.:.<.^.^.^.].", +"}.K |.|.1.|.2.3.|.4.5.6.7.8.9.|.[.|.|.|.4.5.6.7.8.9.|.|.|.}.", +"0.K |.|.a.[.b.c.|.d.e.f.g.e.d.|.h.i.i.j.d.e.f.g.e.d.|.|.|.0.", +"k.l.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.l.k.", +"H k.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.k.H "}; diff --git a/hdspmixer/pixmaps/b_zlm.xpm b/hdspmixer/pixmaps/b_zlm.xpm index c44e75b..e86e830 100644 --- a/hdspmixer/pixmaps/b_zlm.xpm +++ b/hdspmixer/pixmaps/b_zlm.xpm @@ -1,27 +1,38 @@ /* XPM */ -char * b_zlm_xpm[] = { -"13 13 11 1", -" c None", -". c #000D00", -"+ c #000500", -"@ c #000000", -"# c #333333", -"$ c #CC66CC", -"% c #660066", -"& c #99FFFF", -"* c #FF00FF", -"= c #FF99FF", -"- c #990099", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$%", -"$$&********$%", -"$**========$%", -"$**========$%", -"$**========$%", -"$*&========$%", -"$**========$%", -"$-*========$%", -"$*&========$%", -"$**=======*$%", -"$$$$$$$$$$$%%", -"%%%%%%%%%%%%%"}; +char const * b_zlm_xpm[] = { +"13 13 22 1", +" c #665966", +". c #694D69", +"+ c #8F2F8F", +"@ c #E640E6", +"# c #FF7FFF", +"$ c #902F90", +"% c #FF7EFF", +"& c #912F91", +"* c #FF7DFF", +"= c #922F92", +"- c #FF7CFF", +"; c #932F93", +"> c #FE7BFE", +", c #942F94", +"' c #FE7AFE", +") c #952F95", +"! c #FE79FE", +"~ c #962F96", +"{ c #FE78FE", +"] c #6F4C6F", +"^ c #A32FA3", +"/ c #FA6BFA", +" .+++++++++. ", +".+@@@@@@@@@+.", +"+@##########+", +"$@%%%%%%%%%%$", +"&@**********&", +"=@----------=", +";@>>>>>>>>>>;", +",@'''''''''',", +")@'''''''''')", +")@!!!!!!!!!!)", +"~@{{{{{{{{{{~", +"]^/////////^]", +" ]^^^^^^^^^] "}; diff --git a/hdspmixer/pixmaps/buttons.xpm b/hdspmixer/pixmaps/buttons.xpm index 7cbe5f1..f222671 100644 --- a/hdspmixer/pixmaps/buttons.xpm +++ b/hdspmixer/pixmaps/buttons.xpm @@ -1,513 +1,589 @@ /* XPM */ -char * buttons_xpm[] = { -"76 253 257 2", -" c None", -". c #C08480", -"+ c #FFFFFF", -"@ c #FDF9F9", -"# c #84C080", -"$ c #9F9FA0", -"% c #B5B6B5", -"& c #AAAAAA", -"* c #A7A8A7", -"= c #A0A8A0", -"- c #A5A6A5", -"; c #A0A1A0", -"> c #9FA0A0", -", c #A0A09F", -"' c #9FA09F", -") c #A09F9F", -"! c #909290", -"~ c #979898", -"{ c #9C9B9C", -"] c #9D9D9D", -"^ c #999A99", -"/ c #939993", -"( c #969996", -"_ c #919491", -": c #959695", -"< c #929592", -"[ c #8B918C", -"} c #8E918E", -"| c #888D87", -"1 c #8B8D8B", -"2 c #898D89", -"3 c #8A8E8A", -"4 c #868B86", -"5 c #858A85", -"6 c #858A85", -"7 c #818881", -"8 c #828282", -"9 c #818681", -"0 c #7F8580", -"a c #80867F", -"b c #C3C111", -"c c #999710", -"d c #8D8E0F", -"e c #7FD477", -"f c #60CA56", -"g c #64B060", -"h c #7F887F", -"i c #7E847E", -"j c #7D827D", -"k c #7F807F", -"l c #7A817A", -"m c #708070", -"n c #4DAF42", -"o c #4E954A", -"p c #43983B", -"q c #C05350", -"r c #906230", -"s c #855B2D", -"t c #8B5E2F", -"u c #8A5D2E", -"v c #9F2026", -"w c #626360", -"x c #6E726E", -"y c #757A75", -"z c #787F78", -"A c #747B74", -"B c #757D75", -"C c #727A72", -"D c #717971", -"E c #707870", -"F c #70706F", -"G c #707060", -"H c #61686D", -"I c #696C69", -"J c #6C6F6C", -"K c #6F6F6F", -"L c #646C65", -"M c #656A65", -"N c #626562", -"O c #626561", -"P c #5F685F", -"Q c #5B605B", -"R c #5E615E", -"S c #506050", -"T c #585C57", -"U c #5C5F5C", -"V c #5A5D5A", -"W c #5B5E5A", -"X c #595C59", -"Y c #585B58", -"Z c #545954", -"` c #565956", -" . c #565A56", -".. c #555855", -"+. c #545753", -"@. c #545754", -"#. c #515651", -"$. c #535653", -"%. c #525552", -"&. c #515451", -"*. c #515551", -"=. c #505450", -"-. c #505150", -";. c #515351", -">. c #505350", -",. c #50534F", -"'. c #50584F", -"). c #4F584F", -"!. c #4C504B", -"~. c #4F544F", -"{. c #4E524D", -"]. c #4E534E", -"^. c #4F534F", -"/. c #4F524F", -"(. c #4E524E", -"_. c #4E504E", -":. c #4F504F", -"<. c #4E514E", -"[. c #4D524D", -"}. c #4C514C", -"|. c #4D514D", -"1. c #4D504D", -"2. c #4C504C", -"3. c #4B504B", -"4. c #405040", -"5. c #4C4F4B", -"6. c #4D4E4D", -"7. c #4C4E4C", -"8. c #4C4F4C", -"9. c #4A4E49", -"0. c #4A4F4A", -"a. c #4B4F4B", -"b. c #4B4E4B", -"c. c #4A4E4A", -"d. c #4B4C4B", -"e. c #4A4D4A", -"f. c #494E49", -"g. c #484D48", -"h. c #494D49", -"i. c #494C49", -"j. c #484C48", -"k. c #494A49", -"l. c #484A48", -"m. c #484B48", -"n. c #484C47", -"o. c #444843", -"p. c #474C47", -"q. c #464A45", -"r. c #464B46", -"s. c #474B47", -"t. c #474A47", -"u. c #464A46", -"v. c #464846", -"w. c #464946", -"x. c #454A45", -"y. c #444944", -"z. c #454945", -"A. c #454845", -"B. c #444844", -"C. c #434843", -"D. c #404840", -"E. c #444743", -"F. c #454645", -"G. c #454745", -"H. c #444744", -"I. c #424641", -"J. c #424742", -"K. c #434743", -"L. c #434643", -"M. c #424642", -"N. c #424542", -"O. c #414641", -"P. c #404440", -"Q. c #414541", -"R. c #414441", -"S. c #404140", -"T. c #404340", -"U. c #437F3F", -"V. c #634621", -"W. c #775428", -"X. c #714F25", -"Y. c #40433F", -"Z. c #40483F", -"`. c #7F7D0E", -" + c #706E0D", -".+ c #65660D", -"++ c #377631", -"@+ c #3B403B", -"#+ c #3F443F", -"$+ c #3D423D", -"%+ c #3F423F", -"&+ c #3E413E", -"*+ c #3D413D", -"=+ c #325F2F", -"-+ c #2E5F2A", -";+ c #2B5A27", -">+ c #2B5127", -",+ c #295327", -"'+ c #244422", -")+ c #274A25", -"!+ c #274923", -"~+ c #6F202E", -"{+ c #402423", -"]+ c #48341F", -"^+ c #553C1C", -"/+ c #2B3032", -"(+ c #333838", -"_+ c #3C3F3B", -":+ c #3E3F3E", -"<+ c #3C3F3C", -"[+ c #393E39", -"}+ c #3B3F3B", -"|+ c #3A3D3A", -"1+ c #393D39", -"2+ c #383B38", -"3+ c #373C37", -"4+ c #363A36", -"5+ c #303F30", -"6+ c #323535", -"7+ c #333533", -"8+ c #303730", -"9+ c #2B2F31", -"0+ c #2F322F", -"a+ c #223F20", -"b+ c #3D2423", -"c+ c #3B2323", -"d+ c #352222", -"e+ c #2B2C2B", -"f+ c #2F2F2F", -"g+ c #202F2F", -"h+ c #202720", -"i+ c #361F2B", -"j+ c #35271C", -"k+ c #3D3D0A", -"l+ c #35340A", -"m+ c #1B341A", -"n+ c #1A2718", -"o+ c #231A1C", -"p+ c #1E1D11", -"q+ c #161A16", -"r+ c #161113", -"s+ c #111111", -"t+ c #0F1710", -"u+ c #100F10", -"v+ c #18100D", -"w+ c #0B140A", -"x+ c #180F0D", -"y+ c #110E0E", -"z+ c #000F0D", -"A+ c #090909", -"B+ c #0F0F0F", -"C+ c #00070F", -"D+ c #050905", -"E+ c #040306", -"F+ c #050406", -"G+ c #060606", -"H+ c #000000", -"Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.} 2+", -"G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G 8 e+", -"& = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = y q+", -"; ; 7 :.f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P { ; ; ; F A+", -"; ; 7 ).'.'.:.:.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.] ; ; ; K G+", -"; ; 7 ).y R W N N Y Y M W N M V M X X R Q O R X R I R M O X V Z M U w I N V M %. .R N M Y R I R ` Z $.M w N W M N R I w ` O R N O M Y M R.G.- ; ; ; K G+", -"; ; 7 ).@.].c.b.U ..(.a.%.>.e.i.1.c.x.*.a.%.>.` &.X i.@. .*.s.i.1.b.<.%.b.=.=.a.2.` 8...` {.L.w.j. .h...w <.%.Z (.=.t.(.t.0. .%.*.K.B.S.H.S.& ; ; ; K G+", -"; ; 7 ).s.2.m.A.X A.8.s.[.^.h.M.R.M.#++ + + N.}+<.+ + + ].r.(.e.1.h.$.a.$.Q.+.0.}+t.8.|++ (.U 1.s.P.a.m.(.L.*+C.[.2.i.8.c.y.f.J.f.Q.A.*.L.N.& ; ; ; K G+", -"; ; 7 ).R %.B.8.=.>.K.^.C.^.A.s.>.h.}.+ + + <.w.i.+ + + [.3.*+/.%+w.%.T $.V @+O.h.w.t.+ + u.u.T.u.M.|.<.|.*+a.[+].K.m.H.@.!.~.+.C.}+P.<+e.|+& ; ; ) K G+", -", > 7 ).Z z.<.<.2.*+e.|+~.B.j.B...|.].+ + + + }++ + + + ].g.+ + + j.$.z./.+ + + + $.+ + + + X 1.h.+ + + + &.T + + + + H.B. .].g.x.2.e.K.<+&+& ; ' ; K G+", -", , h ).T s.^./.Y.T.z.Y.].K.b.%.` h.J.+ + + + L.+ + + + #++ M.m.+ + e.B.+ + 3.P.+ + R.+ + j.P.&.+ + =.t.+ + z.+ + *.A.1.b.}+#+a.@+u.*+=.H.7+& ; $ ; K G+", -") > 7 ).X u.t.<+s.<.%+T 0.|.(.c.R.s.}++ + b.+ (.+ =.+ + =.x.+ + + + w.B.+ + + + 2.i.*++ + ..(.1++ + + + + + a.+ + M.L.H.u.C.g.0.}+s.Y h.R.Q.& $ > ) K G+", -") $ 7 ).R K.K.R.B.i.s.s.r.|+m.c.w.h.x.+ + T.+ + + *++ + x.+ + *++ + L.K.%+K.+ + + + }++ + u.(./.+ + (.1+^.t.M.+ + K.t.1.A.o. .Q.g.Q.z.a.R.7.& ) ' $ K G+", -"' $ 7 ).X +.*+<.%.1.N.s.x.h.(.2.L.c.g.+ + A.+ + + u.+ + J.+ + 2++ + w.=.+ + }.r.+ + ` + + P.j.&.+ + }+>.+ + (.+ + u.e.w.|.3.x.x.#.M.%+h.v.*+& $ $ > K G+", -"' $ 7 ).U ..^.....%.c.M.T K.i.*.i.h.+.+ + 8.}++ <.^.+ + ].J.+ + + + >.B.>.+ + + + 1.&.}++ + u.i.=.+ + + + %+=.+ + =. .$.X @+J.0.r.u.M.+.T.:+& $ ) $ K G+", -"$ ' h ).>.*+a.M.i.%+m.A.b.(.%+E.*.s.#.C.Q.u.@.}+L.i.B.P.J.y.s.<+/.M.<.b.2.P.p.#+%.Q.R.c.8.m.&.s.M.3+h.t.A.X z.}.r.2.^.e.Q.#+P.#+j.u.1+P.4+z.& $ $ $ K G+", -"$ $ h ).+.c.B.z.=.4+<.z.*+Q.8.m.<+h.^.+.*+^. .A.>.1.|+c.h.^.+.P.M.>.R.m.z.=.h.B.[.(.P.T.A.%+<.K.a.%.` m.L.Q.j.u.c.O.s.b.8.}.#+y.J.s.L.H.H.<+& ' $ $ K G+", -"$ ' 7 ).2.h.M.b.1+(.r.r.c.a.R.u.w.Q g.g.s.+.&+m.&.P.R.1+y.[+^.M.P.&+8.P.w.Q.r.$+u.j.&+m. .*.u.%+h.z.h.&+2.N.^.C.T 2.}+h.}+#+Y.K.B.].x.Q.>.S.& $ $ $ K G+", -"' $ h ).X (.(+/+/+9+9+/+/+/+9+9+9+/+/+/+9+/+/+/+/+/+/+/+/+/+/+9+9+/+6+V A.%.(+6+6+6+6+6+6+6+6+6+6+6+(+(+6+6+(+6+(+6+6+6+6+(+6+6+(+(+(+H L.|+& $ $ $ K G+", -"$ $ h ).R a.W.r s s s s s s s s s s s s s s s s s s s s s s s s s s X.j+w.s.d+{+c+c+c+c+c+c+c+b+c+c+c+c+b+c+c+c+c+c+b+c+c+c+c+c+c+b+d+r+t.S.& $ $ ' K G+", -"$ ' h :...a.^+W.+ u t u t u + u + t t t + u + + + + + u + + + + u W.j+x+A.Q.o+{+c+@ @ @ c+c+c+@ @ @ c+c+c+@ c+c+c+c+c+@ @ @ c+c+c+{+r+E+1.:+& $ ' ' K G+", -"] $ h ).R 2.^+W.+ + u u t + + u + t u u + u u u + u u u + u u u u W.j+x+R.M.o+{+@ c+c+c+c+c+@ c+c+c+@ c+c+@ c+c+c+c+@ c+c+c+@ c+c+{+r+E+&+4+& ' $ ] K G+", -"] ] h :...%.^+W.+ + u u t + + u + u t u + u u u + u u u + t u u t W.j+x+m.+.o+{+@ c+c+c+c+@ c+c+c+c+c+@ c+@ c+c+c+@ c+c+c+c+c+@ c+{+r+E+N.F.& ] $ ' K G+", -"] ] h ).O a.^+W.+ t + u + u + u + t u u + u u t + u u u + + + + t W.j+x+<.Q o+{+c+@ @ c+c+@ c+c+c+c+c+@ c+@ c+c+c+@ c+c+c+c+c+@ c+{+r+E+T.v.& ] ] ] K G+", -"] ] h :.2.*.^+W.+ t + u + u + t + u u u + t u u + u u u + u t u t W.j+x+<.&+o+{+c+c+c+@ c+@ c+c+c+c+c+@ c+@ c+c+c+@ c+c+c+c+c+@ c+{+r+E+H.:+& ] ' ] K G+", -"] ] h :.*.|.^+W.+ u u + t u + t + u t u + u u u + u u u + t u t u W.j+x+b.=.o+{+c+c+c+@ c+c+@ c+c+c+@ c+c+@ c+c+c+c+@ c+c+c+@ c+c+{+r+E+%+:+& ] ] ] K G+", -"] ] h :.O h.^+W.+ t u + t u + u u + + + u u u u + u t u + + + + t W.j+x+..j.o+{+@ @ @ d+d+d+d+@ @ @ d+d+d+@ @ @ d+d+d+@ @ @ d+d+c+{+r+E+v.H.& ] ] ] K G+", -"] ] h :.%.(.^+W.V.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.]+j+x+` z.o+{+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+d+r+E+t.v.& ] ] ] K G+", -"] ] h :.W |.^+j+v+x+v+v+v+v+v+v+v+x+v+x+x+v+v+v+v+v+v+v+v+v+v+v+v+x+x+x+a.2.o+r+E+E+F+F+E+F+E+E+F+F+E+F+F+F+E+E+E+F+E+E+F+E+F+F+F+E+E+E+t.Q.& ] ] ] K G+", -"] ] h :...d.v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+v+S.d.E+F+E+E+F+E+F+F+F+E+F+F+E+F+F+F+E+E+E+F+E+E+F+E+F+F+F+E+E+E+2+%+& ] ] ] K G+", -"] ] h :.M.|.&+&.>.H.*+w.z./.5.|.z.0.}.P.^.b.*+b.A...a.].].B.h.@.s.H./.h.^.O.~.c.<+N.s.i.i.V s.Z %.c...i.j.=.g.}.s.Y.b.j.p.3.O.h.M.>.A.R.|+f+& ] ] ] K G+", -"] ] h :.4.4.8+8+5+f+f+8+8+:+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+& ] ] ] K G+", -"] ] h :.8+t+B+C+t+C+B+B+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+% ] ] ] K G+", -"] ] ; * & % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % & ] ] ] K G+", -"] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] { ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] { ] ] { ] ] ] K G+", -"] ] { ] ] ] ] ] { ] ] { ] ] ] { ] ] ] ] ] ] { ] { ] ] ] ] ] ] ] ] ] ] ] { ] ] ] ] ] { ] { ] ] ] ] ] ] ] ] { ] { ] ] ] ] ] ] { { ] ] ] ] { ] ] { ] ] K G+", -"{ ] h :.f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P ~ ] ] ] K G+", -"] ] h :.'.'.:.:.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.^ { { { K G+", -"] { h :.x M x O ;.X O Q @.M U N R X R w R R ;.M U N R M ` U M M w N K M R w R Y I I M w M w W M U O R R x R M M w O w $.I M w N N V J %._.L.; ] { { K G+", -"{ { h :.8.T 2.%.|...@.2.[.e.` +./.(.g...B.>.<.A.b.9.m.u.].^.a.X &.%.1.,.&...[.u.|.@.>.8.e.` .&.h.s.2...&.t.Q.=.s.|.H.(.e.~.Z u.h. .2.@.R.2+- { { { K G+", -"{ { h :.R h.<+H.P.%.H.&+#+Y.|.a.e.|.g.x.M.$.+ + R.u.b.+ + [++ + /.P.T.&+%+ .C.[+c.R.A.&+/.z.c.H.&+*.u.A.u.%.j.p.].c.N.<.c.0.].#.#.}+L.Q.m.7+* { { { K G+", -"{ { h :.T j.h.N.z.&+*+^.Z Q./.K.&+u.#.x.2.t.+ + H.(.$.+ + Z =.e.L.Y H.h.&.h.p.+.+.<.1.}+@.(.^.T.^.^.K.8.*.>.B.].J.(.H.t./.n.[.*.}+*.|.z.L.L.* { { { K G+", -"{ { h :.R Z >./.../.Y <+x.|.%.+.%+h.f.#.M.b./.+ + a.+ + #.p.+ + b.B.i.+ + + + C.u.+ + a.e.+ M.&.+ + 1+L.2.A.c.r.p.B.T.1.c.p.#+g.x.*+w.c.G.*+* { { { K G+", -"{ { h :.O (.*.%+M.1.^.c.[.|+8...w.=.g.r.B.$.N.+ + M.+ + y.#.+ + m...+ + ..a.+ + Y.+ + i.+ + + ..+ + ./.^.R.^.#+f.z.T.8.b.n.O.h. .j.K.B.N.R.* { { { K G+", -"{ { h :.R j.i.$.^./.4+j.~.=. .Z t.z.r.g.B.m.1.+ + B.+ + g.}.+ + &+(.+ + + + + + j.+ + |.+ + + ..+ + .8.}+w.a.#.r.h.A.t.Q.y.J.#+p.z.m.z.t.7+* ^ { { K G+", -"{ { h :. .K...H.(.H.h.a.r.s.R.|.4+(.0.}.Q.%.>.+ + z.+ + P.~.+ + T.<.+ + X %.[.C.%.<.+ + + u.+ + + s.*.1.Z i.M.~.C.Z 1.e.b.n.g.}+O.K.a.j.t.G.* { { ^ K G+", -"^ ^ h :.R Q.w.>.*.i.b.T =.z.h.s.R.+.#.~.j.>.m.M.+ + + s.x.V + + /.h.+ + }++.+ + c.b.+ + + 2.+ + + ^...8.^.w.a.C.].s.m.|+M.x.0.$+~.u.$.|.*+|+* { ^ ^ K G+", -"^ ^ h :.>.a.c.>.X m.h.%.[.M.1.|.b.|.=.#+c.m.w.8.+ + + M.=.#.+ + >...R + + + + C.2.w.+ + A.c.Z + + *+j./.*.>.=.~.y.Y.H.8.$. .r.=.#+M.(.T |+<+* ^ ^ ^ K G+", -"^ ^ h :.1.c.P.Z H./.L.e.8.u.t.P.2.3+[.0.2.M.$.^.e.,.B.^.O.P.^.u.N.Y.1.b.Y.X #.[.K.+./.s.m.i.q.Q.M.(.s.&.1.+.h.O.~.K...<.h.0.p.p.|+Q.H.b.L.&+- ^ ^ ^ K G+", -"^ ^ k :.w =...s.s.i.R.j.z.j.R.A.*+&+=.Z P.(.K.&+A.$.u.(.j.B.0.K.(.$.<.@...%.a.M. .K.h.&.m.m.@.Z ^.|.}+$.1.(.P.^.^.J.a.&./.J.].J.].K.w.<.L.%+- ^ ^ ^ K G+", -"^ ^ k :.*.*.z.8.r.s.V y.(.^.e.2.e.}+#.[.s.c.2.H. .&+8.j.p.3.(.Z |.>.w.a.A.=.g.p.2+Q.s.8.&+=.s.$.(.K.j.T.<+8.Z #+O.Q.P.=.h.p.<+(.(.#+#+u./.e+- ^ ^ ^ K G+", -"^ ^ 7 ).%.u.1+..Q |.g.p.].s./.w.e.h.$+1+%.|.|.L.<+H.%+Y.0.f.M.Y.Q.&.i.e.@.s.x.y.B.K.c.e.&.m.%+t.h.[.c.H.A.m.z.r.}+2.h.j.2+n.z.u.h.$+~.}.&+R.- ^ ^ ^ K G+", -"^ ^ h ).%.s.T /.j.u.3.g.J.M.m.A.N.|.x.3.j.^.a.@.H./.$.|.O.J.z.K.j.8.w.b.1.s.r.=.B.|.*.m.*+R.L.$.B.~.Q i.1.&.c.0.P.s.P.z.^.0.2.Y.Y.*+r.r.T.N.- ^ ^ ^ K G+", -"^ ^ h ).*.^.)+'+a+a+a+a+a+a+a+a+a+'+o =.*.|.M.&.` R 8.z.f.3.K.2.s...A.w.b.Z }.4+<+s.^.%.&.&.%.t.Q.y.2...Y m.*.$+O.|. .Y.s.=.(.(.=.x.~.*.%+G.- ^ ^ ^ K G+", -"^ ^ h :./.2.U.U.U.U.U.U.U.U.U.U.U.U.a+=.u.c.a.&.b.i.1.&+=.*+c.B.Z e.8.e.<+=.0.].s.a.X w.b.b.w.>.s.y.z.|+T.b.|.C.~.z.h.B.*.!.|.u.a.f.C.9.G.%+- ^ ^ ^ K G+", -"^ ^ h )./.%.=+U.# g g g g g g g g m+w+x.P.<+K.m.A.%.H. .x.4+j.|+s.1.T.N.>.u.x.].a.Z c.e.H.<.>.&.|.W c.&+m.*+j.}+C.^.h.=.=.n.u. .B.*+~.I.v.0+- ^ ^ ^ K G+", -"^ ~ h :.R a.=+U.U.U.U.U.U.U.U.U.U.m+w+=.X 2.z.<.L.+ +.C.0.a.*.^.>.R./.w.B.}+=.u.B.*.U L.*+e.L.1.*.x.}+w.t.<.a.O.P.s.a.+.2.I.(.u.z.O.x.&+b.<+- ~ ^ ~ K G+", -"^ ^ h )...K.=+U.U.U.U.U.U.U.U.U.U.m+w+O.j.P.z.$.e.+ V 4+~.a.a.z.8.m.w.1.T x.=.M.B.|.1.m.+ T.e.t.P.[.u.t.` 8.=.~.].c.K.|.a.I.s.*.(.y.*+}.T.l.- ~ ^ ~ K G+", -"~ ~ h :.Z s.=+U.U.U.U.U.U.U.U.U.U.a+w+O.z.m.w.s.&++ z.+ + + %.b.+ + + t.B.r.+ P.N.+ s.+ + + &+/.j.z.B.A.(.1.a.[.g.*+<.@.u.Z 0.~.~...Y 2.v.|+- ~ ~ ~ K G+", -"~ ~ h :.1.(.=+U.g U.U.U.U.U.U.U.U.a+w+0.s.w.<.H.&.+ %.+ r.a.+ $.+ t.+.+ u.=.+ j.@.+ e.4++ &.w.w.Y.M.^.e.j.&.(.#++.a.$.%+@.!.x...].^.u.a.&.|+- ~ ~ ~ K G+", -"~ ~ h :.+...=+U.U.U.U.U.U.U.U.U.U.m+w+O.h.m.H.K.L.+ z.+ f.1++ Y + w.c.+ c.0.+ 1+m.+ |.H.+ Z L.L.Z j.(.b.(.1+s.J.].1+t.1.s.O.}.p.@+Z %.K.H.%+- ~ ~ ~ K G+", -"~ ~ h :.V h.=+=+U.U.U.U.U.U.U.U.U.a+w+0.=.*+&+A.w.+ (.+ 0.M.+ N.+ b.h.+ s.P.+ u.H.+ i.b.+ 2.w.&+2.h.|.e.^.>.s.p.Z c.R.m.<.{. .z.[.u.P.2.2+|+- ~ ~ ~ K G+", -"~ ~ h :.=.=.=+U.g U.U.U.U.U.U.U.U.m+w+f.j.%.L.j.i.+ P.+ J.|.+ b.+ + + &+j.#++.+ + + h.b.+ + i.R.|.4+|.b.(.L.+.].f.(.H./.Q.P.=.r.O.Y.<.c.|+i.- ~ ~ ~ K G+", -"~ ( h :.Z u.=+U.=+U.U.U.U.U.U.U.=+a+w+x.a.i.&.b.$.K.<.%.3.O.M.w.A.+ b.z.e.2.x.r.=.A./.&.t.<+P.N.%.K.^.W j.8.=.g.0.P.m.N.A.=.3.2.$+&+*+s.N.2+- ~ ( ( K G+", -"( ( h :.U a.=+m+w+w+D+D+D+D+D+D+w+D+w+#+z.m.>.s.<.h.*+u.p.C.c.i.8.+ T.+.w.2.J.=...@.w.h.*+(.K.t.z.|.B.%.u.b.(.p.}+Y.m.@.a.*+y.[+ .P...M.T.<+; ( ( ( K G+", -"~ ( h :.X |.w+H+H+H+H+H+H+H+H+H+H+H+H+y.z.R.%.&.N.^.|+^.C.}.Q.|+X m.$.|.>.*+[.J.Y.L.&.t.8.Z B.L.^.&+Q.N.z.A.B.3.r.K.i.H.H.].#+$++. .K.z.R.S.; ( ~ ( K G+", -"( ( h :.T %.Q.c./.1.&+>.%+z.&.T %.V *+O.h.u.t.M.$.q.z.P.x.O.2.|.1.<+e.}+^.z.g.J.+.2.>.%.L._+P.}+*.Q.(.e.,.h.2.~.*+s.+.A.(.#.[+[.<++.e.V m.%+; : ( : K G+", -": ( h :. .a.c.u.2./.H.j.h.M...t.%.u.^.s.#+P.a.>.8.}+|.z.+.%.P.Q.=.&+m.2+u.j.(.j.#.&+j.$.<+&.N.^.Z j.R.A.b.P.s.h.^.r.(.i.<+y.p.C.0.j.b.1.|+H.; : ( ( K G+", -"( : h :.T s.s.&.[.M.].J.j.3+t.s.i.}+y.#+a. .c.m.&.a.&+(.r.~.P.a.M.$.%+s.e.^.g.}.Q.K.a.w.&.2.^.&+z.2.T 8.|.>.z.Z f.2+ .(.c.$+h.Y.s.~.#.c.R.&+; ( ( ( K G+", -": ( h :.R P.2+8.Y.Z 3.=.#+(.t.i.%.4+C.C.2.+.h.b.i.i.` |.=.$+h.h.Y.m.&.}+%.a.x.[+j.j.}+t.A.t.m.L.%.=.M.>.}+>.z.}.O.1+T s.*.!.=.&+^.J.#+J.b.|+; : : : K G+", -": : h :.O M.K.L.Q.*.f.p.}+(./.R.N.j.Z 4+K.c.*.1.L.T.w.M.x.[+(.c.2.>.e.1.i.Q.x.y.j.s.a.<+L.&.A.>.B.y.B.e.H.L.c.0.J.|.}+K.M.3+..R |.g.p.].N.R.; : : : K G+", -": : h :.U 2.|.e.|.B.+.g.}.%.N.8.1.Q.=.~.Y.Q.Q.w.e.i.i.s.[+r.j.B.h.m.A.Y N.P.[.O.}+&+^.m.4+T.%+%.}+J.K.T.H.&+M.@+#+1+*+u.B.}.^.z.z.[.3+{.N.4+; : : : K G+", -": : h :...M.j.R.Q.c.#.+.O.Q.L.R.b.u.].3.^.(.s.L.8.H.i.c.g. .=.u.2.8.&.b.i.2.*+=.<+c.u...e.8.e.<+=.3.=.e.<.V z.g.g.K.|.u.K.o.1+P.c.3.C.=.N.&+; : : : K G+", -": : h :.I Y.)+'+a+a+a+a+a+a+a+a+a+'+o 3.}+h.}+&.w.e.A...3.].*.M.<+N.*+%.L.^.f.].j.c.=.%+e...w.>.+.}+^.&+..b.Q [.}.T a.j.<+Z a.%.*. .#.g.}+|+; : : : K G+", -": : h :.O X U.U.U.U.U.U.U.U.U.U.U.U.a+0.<+^.B.m.i.&+e.1+C.f.K.*.s.w.b.i.A.2.x.#+a.s.z.A.e.>.H.N.B.0.1+N.i.m.|.*+].(.s.B.^.0.}+*+T p.@+J.8.7+; : : : K G+", -": : h :. .+.=+U.# g g g g g g g g m+w+P.Y.P.P.e.m.H.i.c.g. .=.u.2.8.&.b.i.2.*+=.<+c.u...e.8.e.<+=.3.=.e.<.V z.g.g.K.|.u.K.o.1+P.c.3.g.I.G.4+; : : : K G+", -": : h :.*.u.=+U.U.U.U.U.U.U.U.U.U.m+w+*+*+m.j.h.e.+ + + + $+2.+ =.i.&.8.<.c.#.f.*.Y...1.+ i.1.<+a.[.U <.m.N.2.p.}.Q.}+B.|.+ c.|.a.(.|.K.*+|+; : : : K G+", -": : h :.O j.=+U.U.U.U.U.U.U.U.U.U.m+w+J.+.8.>.%.L.+ b.^.+ x.T + s.*+..$.m.|+f.g.z.A.K.+.+ L.i.<.<+2.h.i.i.}++.y.y.*+N.b.e.+ j.%.M.T /.j.T.&+; : < : K G+", -": ' h :.U a.=+U.U.U.U.U.U.U.U.U.U.a+w+y.B.N.i.T.&++ R.<++ P.|.+ >.+ + + + h.#.+ |.%.}++ + + + W ^.|.+ + + + .f.+ + .$.h.+ x.C.+ z.c.|.4+N.; : : < K G+", -": ' h :.V M.=+U.g U.U.U.U.U.U.U.U.a+w+ .+.e.b.c.w.+ + + + f.a.+ <.*+b.(.+ s.}.g.+ b.+ b.+ %.*.+ P.&+j.e.%.+ c.+ C. .+ t.H.+ }.+ x.=.>.h.*+2+; < < < K G+", -"< ' h :.W %.=+U.U.U.U.U.U.U.U.U.U.m+w+0.1+e.<.U 1.+ N.a.3.*+(.+ b.c.+ + + |.[. .+ %.+ P.+ M.c.+ %.j.Q.+ + + z.+ C.z.i.i.%.+ + + 4+u.h.%+T.7+; < < < K G+", -"< ' h :.<.B.=+=+U.U.U.U.U.U.U.U.U.a+w+#...L.w.u.8.+ R.2.p.}.Q.+ A.+ <.c.+ a.y.g.+ i.+ A.+ h.a.+ V 3++ 1.|.+ a.+ C.c.+ t.&.+ x.+ 3.2+R.s.R.&+; < < < K G+", -"< ' k :.O |.=+U.g U.U.U.U.U.U.U.U.m+w+r.u.%+>.1.N.+ T.B.g.0.Y.+ w.+ + + + B.x.r.}++ 1+B.+ + + t.z.h.+ + + + P.3.+ + L.i.(.+ P.C.+ M.K.*+i.2+; < < < K G+", -"< ' k :.W M.=+U.=+U.U.U.U.U.U.U.=+a+w+[.7+j.>.=.` +.u.z.p.g.B.j.1.^./.E.s.2.f.}.P.+ &+(.T.L./.^.j.c.h.<+/.|.a.~.#++.s.N. .3.[+y.c.%.m.9.T.1+; < < < K G+", -"< ' k :.R K.=+m+w+w+D+D+D+D+D+D+w+D+w+Z 3.*.Y.b.e.&+u.=.|+=.f.u.}+e.i.|+z.B.u.u.+ *.*.N.<.1+<.B.(.K.}+Y t.%.|.=.<+[.K.R.L.~.x.0.#.M.N.1.2+7+' < < < K G+", -"< ' k :.=.c.w+H+H+H+H+H+H+H+H+H+H+H+H+C.*+%+P.(.b.e.1.c.r.J.%.i.^.M.w.b.A.(.}+#+a.<.Q.Q.&+%+` A.}+3.N.A.%+>.z.f.J.<+&.t.A.y.#.p.g.^.a.Q.t.&+' < < < K G+", -"_ ' k :.U j.j.^.N.b.<.2.%+^.&+z.*.T #.T }+M.b.u.w.M.+.u.x.#+B.M.<.|.8.<+c.}+~.C.s.K...2./.%.K.}+Q.}+>.R.(.c.=.f.0.(.*+i.+.C.[.#.|+(.*+$.H.b.' < _ < K G+", -"_ ' k :.%.}+a.=.w.b.i.j. .b.t./.&+&.L.N.(.&.8.%./.|+<.L.8.L.a.%+L.8.&.R.L.R.L.w.&+b.8.8.%+&+1.&+<+&.u.&.m.<+/.8.1.h.&.<+i.Q.M.2.j.|+/.+.7+L.' _ _ _ K G+", -"_ ' k :.%.h.A.m.c.A.i.a.r.s.*.u./.*.x.}+&+R.%.K./.Q m.2.].g.c.R.i.Q.A.*.8.2.*+$+<+t.m.B.<.c.%.Y +.2.M.<+|.` z.~.*+|.N.i.h.4++.#+p.P.$.a.e.|+' _ _ _ K G+", -"_ ' k :.Z (.Q.t.j.>.s.(.g.<+w.h.A.2.g.0.|.T.$.w.8.B.%.T +.y.j.*+<.L.t.z.<.z.#.y.h.1.i.<+R.h.Z 8.&+B.1+ .Q...K.y.f.c.t.@.i.g.y.Q.O.c.j.2.v.0+' _ _ ! K G+", -"_ ' k :.Z c.t.@.|.N.1.u.3.j.=.K.b.z.p.#+2.L.>.Q.e.c.$.K.p.g.2.1.T.+.L.^.L.a.$+#.s.*+m.P.@.B.^.H.c.a.u.t.Q.1.3+}.0.2.N.$.^.f.~.y.].Q.N.=.R.7+' _ _ ! K G+", -"! ' k :...u.c.&.(.b.2.4+W B.L.*.<.|+[.g.2.8.e.L.e.2.b.s.O.J.u.8.<.<.@.u.%+P.r.r.s.H.t.&.<.M.=.H.h.4+u.t.h.}+z.#+3. .i.t.>.9.$+(.r.=.Q.2.<+F.' _ ! ! K G+", -"! ' k :.<. .T. .1+8.e.+.}.P.Q.^.<.K.1+f.2.w.e.h.%.M.8.s.x.#+u.8.>.c.U z.A.*+x.[.2+N.%+z.N.c.^.&.T Q.(.m.z.m.s.#+3.}+i.$.%.}.#.0.].z.&.M.t.|+] ! ! ! K G+", -"! ' k :.R u.)+'+a+a+a+a+a+a+a+a+a+'+o 0.j.H.8.>.A.*.8.j.r.~.u.L.L.<.b.s.m.(.#.[.<+R.@.b.A.K.^.b.u.z.|.H.T .K.r.p.K.*+/.A.q.].c.].s.Y.(.R.7+' ! ! ! K G+", -"! ' k :.+.T U.U.U.U.U.U.U.U.U.U.U.U.a+#+z.T.w.h.t.z.i.c.}+}.Q.i.1.V &.M.b.P.[.#.B.R.i.&+w.=.K.8.3+*.|.i.+.L.B.r.p.&+8.@.^.0.g.y.y.(.A.%+2+7+] ! ! ! K G+", -"! ' k :.M =.=+U.# g g g g g g g g m+w+O.a.t.w.m.t.Z <.M.}.x.c.m.&.L.b.z.i.Q.}.J.(.R.b.e.$.K.h.e.(.|.Y.@.B./.K.f.$+%.m.&+t.P.Z C.].K.h.a.R.<+] ! ! ! K G+", -"! ' k :.<.T =+U.U.U.U.U.U.U.U.U.U.m+w+P.s.B.T.Q.H.L.+ + + x.Y.h.|+j.>.|+%.(. .r.z.j.N.j.A.i.I.z.&+*+^.@.I.(.K.$+y.%.u.<.s.C.0.J.|.%./.+./.L.] ! ! ! K G+", -"! ' k :.1.&+=+U.U.U.U.U.U.U.U.U.U.m+w+s.y.B.u.<.8.+ (.c.Y.+ #.u. .b././...T + a.r.a.K.b./.@.T. .+.^.&.$.+ Z Y.(.Q.g.c.%+w.0.y.x.$+^.8.b.l.N.] } ! ! K G+", -"! ' k :.2.a.=+U.U.U.U.U.U.U.U.U.U.a+w+J.M.M.s.w.i.+ }+j.T + z.j.+ b.8.+ }++ + + K.+ + + @.h.+ 8.(.+ s.+ + + j.}.r.Q.a.s.|++.%.B.c.}.r.|.T.v.] } } } K G+", -"} ' k :.T a.=+U.g U.U.U.U.U.U.U.U.a+w+0.h.z.}+A.i.+ b.z.0.+ K.^.+ i.i.+ i.B.+ }.h.+ j./.+ >.+ L.Z + z.H.+ 8.u.y.}.M... .Q.r.h.u.&+[.y.q.i.:+] } } } K G+", -"} ' k :.W z.=+U.U.U.U.U.U.U.U.U.U.m+w+r.Y.*.2.%.e.+ <+R p.+ c.M.+ U 1.+ L.<++ #+|++ B.&.+ 1.+ A.+.+ u. .+ &.|.O.O.|.a.(.|.Q.Y.M.^.].O.o.v.4+] } } } K G+", -"} ' k :.*.V =+=+U.U.U.U.U.U.U.U.U.a+w+#+|.(.B.1.%.+ A.=.J.+ K.z.+ e./.+ <+%.+ y.s.+ M.8.+ <.+ &.Y.+ %.X + W *+O.f.z.z.M.%.y.u.Q.u.O.}.}.t.7+] } } } K G+", -"} ' k :. .=.=+U.g U.U.U.U.U.U.U.U.m+w+C.2.u.j.R.&.<.+ + + g.c.a.a.+ + + m.2.+ + s.+ + + H.1.<.+ + + K./.+ + (.#+P.u.K.a.z.P.u.Z s.~.0.I.%+7+] } } } K G+", -"} ' k 4.1.2.=+U.=+U.U.U.U.U.U.U.=+a+w+O.a.j. .<.%.w.i.M.].}...j.s.*+b.i.N.|.J.J.s.+ z.@.` &.%+A.P.y.K.Y /.%.h.+.}.<++.*.P.Z z.T j.}+3.g.<+L.{ } } } K G+", -"} ' k :.N V =+m+w+w+D+D+D+D+D+D+w+D+w+#.K.+.Y./.L.b.8.Y.x.0.B.z.Y.%.<.<.>.*.W g.j.+ (...8.@.w.$.h.g.h.b.>.H.a.x.C.2.u.s.&+].|.K.T }.g.0.t.&+{ } } } K G+", -"} ' k :.R Q.w+H+H+H+H+H+H+H+H+H+H+H+H+~.j.^.j.H.>.w.1.s.x.V B.|.^.b.1.b.<++.x.[.2+N.%+z.N.c.^.&.T Q.(.m.z.m.s.#+3.}+i.$.%.}.#.0.].z.&.M.t.|+] 3 3 3 K G+", -"[ ' k 4.+.a.a.}+s.T g.x.g.h.b.1.b.}+p.1+2.K.2+/.V ..e.^.0.}.3+z.B.&.<+i.<.j.P.3.B.c.m.^.R.h.K.s.P.2.N.<.P.h.h.#.P.u.j.1.2.$+#.O.|.Q.e.&+8.|+^ 3 3 3 K G+", -"[ ' k :.R 2+h.>.=.T #.x.C.j.b.t.e.|.].].M.u.2.b./.|+<.&+[.#+Q.|.=.i.8.b.&+c.i.*.w.I.T j.#.P.P./.&+i.1+s.j.<.h.%.&+m.+.*+%.O.].%.t.R.A.0.P.s.^ 3 3 3 K G+", -"[ { k 4.R a...<.*+..=.P.Z z. .i.*+|.g.#+(.*.Q./.w.e.A.u.Q p.&+a.2.>.%.i.N.2.H.2+Y.H.T.R.2+m.H.A.m.e.+.N.N.R.t.1.H.c.&+b.N.R.R.N.u.<+F.S.|+*+^ 3 3 3 K G+", -"[ { m 4.U u.*.1.^.%.g.r.3.*+@.%+m.+.0.y.=.u.c.` }+b.4+1+g.y.*+Q.=.b.i.%./.Q.5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+] 3 3 3 K G+", -"[ { m :.R h.R <+K.|.p.J.].c.<+m.>.^.r.y.}+j.*./.t.<.R.3+].y.c.u.^.>.m.i.A.*.8+t+t+t+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+3 3 3 3 K G+", -"3 { m 4...^.&+T.K.c.0.#+g.u.>.1.%+*.J.x.u.}+h.|+w.8.w.+.x.C.j.u.B.1.m.R.<.h.4.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 K G+", -"1 { m 4.=.|.^.1.&+=.$+y.=.T @.W &+K.f.x.z.Q.Z t.t.R.t.K.}.}.a.}+a.<+&.w.e.B.4.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 K G+", -"1 { m 4.+.=.1.^.%.g.r.3.*+@.%+m.+.0.y.].^.B.Q.w.1...Y s.~.$+Q.|.T R.e.%./.|.8+8+8+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P 3 3 3 3 K G+", -"3 { m 4.T 2.c.&.(.b.2.4+W B.L.*.<.|+[.f.j.w.u.K.$.,.N.j.}.}+a.m.h.j.}++.w.u.'.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.^ 3 3 3 K G+", -"3 { m 4.*.2.T. .1+8.e.+.}.P.Q.^.<.K.1+x.K.b.T s.%.A.Z %+3.P.K.c.i.*.w.I.T j.#.P.P./.&+i.1+s.j.<.h.%.&+m.+.*+%.O.].%.t.R.A.0.P.s.g.^.s.(.e.T.^ 3 3 3 K G+", -"3 { m 4.T 2.)+'+a+a+a+a+a+a+a+a+a+'+o @+z.<.|+K.%+t.}.u.3+c.}+x.a.Y.R.<.A.u.=.|...g.j.K.1.<./.8.V c.*+t.}+t.}+z.*.a.8...&+g.Q.V u.&+u.=.i.F.^ 3 3 3 K G+", -"3 { m 4.V =.U.U.U.U.U.U.U.U.U.U.U.U.a+y.j.$.j.z./.b.Y s.~.$+Q.|.T.K.c.0.#+g.u.>.1.%+*.J.&+T.K.c.0.#+g.u.>.1.%+*.J.z.R.R.e.*+Y.P.=.B.s.a.I.:+^ 3 3 3 K G+", -"3 { k :.R z.=+U.# g g g g g g g g m+w+#+2.e.c.|.e.c.i.*.w.I.T j.#.P.P./.&+i.1+s.j.<.h.%.&+m.+.*+%.O.].%.t.R.A.0.P.s.A.%.t.n.=.2.K.|.c.a.i.F.~ 3 2 2 K G+", -"3 { k 4.R <+=+U.U.U.U.U.U.U.U.U.U.m+w+~.P.<.|+^.A.w.+ + x.j.&+u.P.<.t.w.+ f.].^./.2.z.<.{.E.t.=.|.u.+ /.A. .[.#.A.(.&+&+$. .B.u.s.2.*+Y.%+:+( 3 2 2 K G+", -"2 { k :. .M.=+U.U.U.U.U.U.U.U.U.U.m+w+y.K.H.a. .8.+ c.[.+ ..R.^.h.A.i.t.+ 3.@+j.%.+.(.$.5.,.w.*.M.|.i.1.b.u.O.g.8.K.A.<.8.9.^.c.Y.(.+.u.,.&+( 2 2 2 K G+", -"2 { k :.w h.=+U.U.U.U.U.U.U.U.U.U.a+w+O.Y.L.b.2+T.+ M.~.0.}++ j.c.+ W m.+ + + Z m.h.+ + + + + + j.h.+ E.+ K.].+ T.(.L.}+h.#+Z #+}...8.c.R.0+( | 2 2 K G+", -"2 { k 4.R a.=+U.g U.U.U.U.U.U.U.U.a+w+p.h.V /.}+<.H.+ + [.P.+ a.z.+ _+T.+ [.#++ *+Y.+ A._++ N.z.+ =.+ b.H.+ + x.<.u.<+t.R.9.1+(.p.s.c.c.}+|+( 2 2 | K G+", -"2 { k :.Z (.=+U.U.U.U.U.U.U.U.U.U.m+w+0.|.T.$.z.b.L.}+T + *.+ =.*++ A.R.+ ~.x.+ $.B.+ /.Y.+ N.z.+ B.+ i.A.+ + C.b.c.t.@.h.g.y.P.O.c.i.2.v.0+( | 2 2 K G+", -"| { k 4. . .=+=+U.U.U.U.U.U.U.U.U.a+w+C.s.i.L.` m.+ s.p.+ u.+ +.Q.+ m.&.+ #.f.+ }+M.+ H.i.+ N.K.+ j.+ {.<++ + y.m.%.t.R.A.0.P.s.g.^.s.(.L.7+( | | | K G+", -"| { m 4.=.c.=+U.g U.U.U.U.U.U.U.U.m+w+#+h.e.1.j.A.t.+ + ].(.m.+ + + }+<++ + + M.&.%++ H.&++ 1.%.+ ^.+ h.+ =.p.+ A.B.R.$.K.#.=.~.$+&+H.a./.|+( | | | K G+", -"| ~ m :.w h.=+U.=+U.U.U.U.U.U.U.=+a+w+O.M.w.A.m.<+(.b.h.1+p.K.H.i.%+&.(.L.(.$+0.Q.i.H.i.e.P.|.A.&+(.*.&.K.%+c.r.~.a.w.b.1.+.}.].0.B.z.T &+|+( | | | K G+", -"| ~ m 4.R K.=+m+w+w+D+D+D+D+D+D+w+D+w+*+K.z.N.j.1.1.a.B.3.P.K.c.i.*.w.I.T j.y.#+s.c.w.a.*+5.9.|.c.(.^.w.i...2.O.r.|.(.` B.}.x.#+2.*+t.,.T.4+( 4 | | K G+", -"4 ( m 4.+.c.w+H+H+H+H+H+H+H+H+H+H+H+H+*+O.u.B.&.N...u.3+c.}+x.a.Y.R.<.A.u.=.|...g.j.K.1.<./.8.V c.*+t.}+t.}+z.*.c.~.*.i.A.+.J.*+~.Q.e.|+:+e+( | | 4 K G+", -"4 ~ m 4.W a.&+` b.*.>.T %.e.T.w.H.z.T [.s.A.|.c.H.N.t.B.P.3.z.8.c.*.b.$.L.(.#.3.Q.L.s.z.m.b.A.e.2.r.m.%.w./.*.r.}+&+R.%.L.].W p.3.^.h.c.<+<+/ 4 4 4 K G+", -"4 ~ m 4.X B.*+s.H.m.<+c.R.|.N.T 2.<+g.}+*+*+N.M.<.z.Q. .r.T P.a.t.B.w.z.%.|.P.3.B.c.m.^.R.h.K.s.P.2.N.<.P.h.h.#.P.u.j.1.2.$+#.O.|.Q.e.&+8.|+( 4 4 4 K G+", -"4 ~ m 4.|.B.u.L.1+m.8.P.<.H.t.t.<.;.w.H.P.H.*+H.t.8.|+-.8.t.j.8.%+<.2+A.}+H.H.2+Y.H.T.R.2+m.H.A.m.e.+.N.N.R.t.1.H.c.&+b.N.R.R.N.u.<+F.S.|+*+^ 4 4 4 K G+", -"4 ( m 4.4.4.8+8+5+f+f+8+8+:+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+] 4 4 4 K G+", -"5 ( m 4.8+t+B+C+t+C+B+B+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+^ 5 4 5 K G+", -"5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 5 4 5 5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 4 5 5 5 5 5 5 4 5 5 5 5 5 5 4 5 5 K G+", -"5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 K G+", -"5 5 7 D.f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P 9 5 5 5 K G+", -"5 5 7 :.'.'.:.:.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.7 5 5 5 K G+", -"5 5 7 ).I R R J M w R N O W V R U X N R N w M O I W M M N X V R U R N R w N R R M U M M R ..X V M V M F w N M w O X R X U M N N ` ` ` W e.T.3 5 5 5 K G+", -"5 5 7 ).X *.K...j...=.%.x.<.t.V m.s.~.*.2...<.m.&+&.<.a.R h.*.1.@...>.i.t.j.y.|.a.&+m.N...q.@.$...|...&.+.>.X ~. .z.X *.N.}.*.Q.=.$.w <.L.2+_ 5 5 5 K G+", -"5 5 7 )...&+b.b.a.t.<.M.~.Z M.+ + + + + c.w.H.h.1+z.$.(.g.@+s.%+..|.2+M.A.Q.C.g.Q.e.i.K.L.B.B.t.z.j.+ |+j.Y c.x.g.s.i.8.h.[+g.[+[.B.2+|.%.c.< 5 5 5 K G+", -"5 5 7 ).O s.^.$.|+/.<++.f.V /.+ + |.p.+ + e.&.&.Y +.e.P.y.J.K. ./.i.w.|.e.B.P.x.M.T.1.t.1.c.*.b.+.+ + %.|.L.B.x.C.u.e.A.i.0.r.j.#.z.(.=.R.7+< 5 5 7 K G+", -"5 7 7 ).U |.t.L.1+<.&.u.3.c.h.+ + c.=.+ + L.H.+ + + + %.@++ + + + |.T.B.+ + + + P.L.m.+ + + + N.+ + + + %.m.+ + + + 8./.a.#.*+0.C.B./.c.4+s.< 7 7 7 K G+", -"7 7 7 ).%.%.h.8.|.H.%.*+x...H.+ + K.O.+ + <./.+ + Q./.=.+ + h.T.+ + i.+ + P.r.+ + i.+ + L.Q.+ + c.+ + 1.*.+ + P.f.+ + e.i. .#.j.3.c.^.h.N.N.< 7 7 7 K G+", -"7 7 h ).W ^.A.b.u.A.b. .r.*.K.+ + + + + *+A.T.+ + u...a.+ + + + + + 8.+ + + + y.<+1.+ + + + + + T + + R.a.+ + + + s./.&.j.W ~.r.f.Q. .a.t.<+< 7 7 7 K G+", -"7 7 7 ).R a.2.8.M. .*+a.p.s.1.+ + |.[.y.h.H.>.+ + |+L.s.+ + (.w.$.<.L.j.T.+ + + + N.+ + &.a.h.<+(.+ + R.j.` 4++ + + + N.&+o.O.s.}+^.a.a.m.%+< 7 7 7 K G+", -"7 7 7 ).M (.b./.*.@.L.}+x.h.%.+ + z.4+J.}+1.b.+ + |+<.%.+ + h.i.+ + i.+ + %.J.+ + %.+ + &.*++ + |.+ + T.B.+ + J.C.+ + m.P.3.}.}.O.P.>.Y.4+j.< 7 7 7 K G+", -"7 7 7 ).*.%...L.*.t.|.u.J.a.t.+ + |+C.#.2.i.*++ + ..<.1+P.+ + + + L.b.h.+ + + + z.H.i.+ + + + e.s.h.+ + 2.e.+ + + + H.2+1.T +.g.].a.|.1+R.|+_ 7 7 7 K G+", -"7 7 7 ).Z c.*.Q./.<.L.N.t.j.%.L.P.s.[.p.Q.s.A.T R.t.(.B.f.g.1+Q.m.2.<.%.h.B.x.C.z.(.<+a.N.1.P.2.a.j.2.1+5.}+%.#+}.j.|.A.B.}.0.O.j.Q.X %+t.j._ 7 7 7 K G+", -"7 7 h ).T (.Q.c.z.e./.2.a.=.H.t.j.|.2.c.g.Q.*./.%.1+K.2.z.h.r.j.u.R.8.e.j.Y.h.z.*+z.a.b.b.H.R.j.M.K.<+m. .j.h.u.*.#.z.t.m.J.g.3.C.*+b.e.G.*+_ 7 7 7 K G+", -"9 9 h ). .M.Q.b.~.|.}+}.B.+.$.M.N.=.$+p.3+z.j./.i.+.%+j.#.@+=.Q.=...m.Q.w.2.P.x.s.(.j.>.i.*+u.i.z.2.c.8.^.R.+.x.0.M.=. .+.y.c.&+(.O.x.K.t.<+_ 9 9 9 K G+", -"9 7 7 ).c.B.B.8.j.|.#.y.#+s.N.t.b.j.C.p.j.|+(.H.b.<.U %.P.f.&+|.+.t.L.e.T.s.].O.c.4+%./.b.@.H.A.j.g.P.<...&.2.p.C.K.|.B.*+*+Y.c.j.p.g.+.v.F._ 7 9 9 K G+", -"9 9 h ).*. .u.w.Y.u.O.}.}.|.&+8.<+=.C.p.M.+.|.&.@.A.*+Q.}+~.P.|.a.&.b.1.&.&+p.#.K.|.+.<+>.&+..b.Q ].(.V <.e.&+Z f.^.^.T *.g.P.s.B.C. .{.H.<+_ 9 9 9 K G+", -"9 9 h ).M 2.-+;+,+,+,+,+,+,+,+,+,+;+n ].<+M.-+;+,+,+,+,+,+,+,+,+,+;+n /.*.p.-+;+,+,+,+,+,+,+,+,+,+;+n R e.R.-+;+,+,+,+,+,+,+,+,+,+;+n y.N.L.! 9 9 9 K G+", -"0 9 h :.*.2.p p p p p p p p p p p p >+C.u.}+p p p p p p p p p p p p >+1.j.#.p p p p p p p p p p p p >+V 1.%.p p p p p p p p p p p p >+=.|+|+! 9 a 0 K G+", -"0 9 h ).R <+++p e f f f + f f f f !+n+*+(.+.++p e f f + + + f f f !+n+t.Z x.++p e f f + + + f f f !+n+<.<+..++p e f f f f + f f f !+n+o.N.G.! a 0 0 K G+", -"0 a h :...+.++p p p p + + p p p p !+n+#. .<+++p p p + p p p + p p !+n+&.T J.++p p p + p p p + p p !+n+A.%.<.++p p p p p + + p p p !+n+r.G.e.! 0 a 0 K G+", -"0 0 7 D.R u.++p p p + p + p p p p !+n+P.h.|.++p p p p p p p + p p !+n+t.%. .++p p p p p p p + p p !+n+e.A.` ++p p p p + p + p p p !+n+0.e.4+} 0 0 0 K G+", -"0 0 7 :.V c.++p p p p p + p p p p >+n+J.s.Q.++p p p p p p p + p p >+n+>.*+J.++p p p p p + + p p p >+n+T.1.8.++p p p p + p + p p p >+n+n.e.:+} 0 0 a K G+", -"0 a 7 ). .a.++p f p p p + p p p p >+n+}.j.Q.++p f p p p p + p p p >+n+*+(.f.++p f p p p p p + p p >+n+>.$.%.++p f p + p p + p p p >+n+o.R._.} 0 0 0 K G+", -"i 0 7 ).T Y.++p p p p p + p p p p !+n+y.u.w.++p p p p p + p p p p !+n+t.2.p.++p p p p p p p + p p !+n+N.a.%+++p p p + + + + + p p !+n+P.t.0+} 0 0 0 K G+", -"0 i 7 ).W R ++++p p p p + p p p p >+n+0.4+&.++++p p p + p p p p p >+n+H.j.p.++++p p + p p p + p p >+n+V c.t.++++p p p p p + p p p >+n+s.t.7+} i 0 0 K G+", -"i i 7 ).R B.++p f p p p + p p p p !+n+r.a.<+++p f p + + + + + p p !+n+8.u.=.++p f p p + + + p p p !+n+8.u...++p f p p p p + p p p !+n++.R.7+} i 0 0 K G+", -"i i 7 )...=.++p ++p p p p p p p ++>+n+#+<+u.++p ++p p p p p p p ++>+n+<...}.++p ++p p p p p p p ++>+n+w.w.X ++p ++p p p p p p p ++>+n+}.4+<+} i i i K G+", -"i i 7 )./.j.++!+n+n+q+q+q+q+q+q+n+q+n+p.<+c.++!+n+n+q+q+q+q+q+q+n+q+n+/.*+g.++!+n+n+q+q+q+q+q+q+n+q+n+1.e.%.++!+n+n+q+q+q+q+q+q+n+q+n+n.G.F.} i i i K G+", -"i i h ).1.j.n+s+s+s+s+s+s+s+s+s+s+s+s+f.Q. .n+s+s+s+s+s+s+s+s+s+s+s+s+e...+.n+s+s+s+s+s+s+s+s+s+s+s+s+%.<+$.n+s+s+s+s+s+s+s+s+s+s+s+s+ .1._.[ i i i K G+", -"i i 7 ).+.a.B...2.=.#.J.}+Q.*+%.L.^.f.].j.c.=.%+e...w.^.#.[+|.}+Z b.U >./.X 3.p.<+Z a.%.%.X @.b.P.x.B.w.X >.h.y.3.j.M.Q.z.J.Q.(.s.3.g.=.v.l.[ i i j K G+", -"i i 7 ).R T h.H.Q.j.y.f.O.j.8.<./.Q.y.J.s.M.u.b.A.>.A.|.P.}.*+Y...m.i.R.%.B. .~.z.u.B.w.8.i.@.t.|.3.<+T.8.*+s.*+~.j.2+u.Q.P.%.^.z.0.f.n.H.<+[ j j j K G+", -"j j 7 ).N Q.c.R.X u.$+x.~.^.$.w.i.*+0.+.&+P.2.i... .A.+.[+[+z.^.h.%.m.H.N.+.g.O.j.B.P.*+b.H.H.V 2.=.+.%...w.X 0.O.a.B.h.u.+.2.%.Y.O.3.].v.F.[ i j j K G+", -"j j 7 ).W s.(.R.K.|.#.J.C.M.A.i.N.|.3.3.P.Y.=.R.&+$.i.Z f.*+(.a.^.1.@.&+8.B.C.[.h.}+*.Y 1+$.e.>.T ].2+@.b.` ^.P.C.1+a.c.s.9.Q =.}+}.0.y.*+2+[ j j j K G+", -"j j h ).>.%.m.i.%.t.w.z.x.B.h.h.>.s.*+y.s.1.e.M.L.s.A.j.}+}.h.m.|+j.H.z.i.Y.~.}.Q.1.%+a.N.c.B.i.c.Y.2.H.&+/.%.~.O.*+i.m.=.3.r.0.[.Z 1.(.G.<+[ j j j K G+", -"j j h ).*.*.^.m.2.m.P.|+=.z.T.R >.c.@+p.h.&...R.T.j.i.Y. .f.*+@.t.i.e.B.m.*+x.*+^.N.A.i.L.M.h.A.P.Q.B.L.*+N.X x.#+j.1+i.>.1+#.(. .s.u.j.<+%+[ j j j K G+", -"j j 7 ). .M.=.1.Q.T }.g.0.|.8./.e.*+x.0.a.%.h.$.@.H.H.2.3.#+&+(.K././.L./.Q.P.r.K.c.s.N.t.@.m.%.2.J.B.&+&.w.h.=.0.Q.^.1+&+r.|.*.P.C.#.q.|+7+[ j j j K G+", -"j j h ).U z.-+;+,+,+,+,+,+,+,+,+,+;+n =.^.Q.-+;+,+,+,+,+,+,+,+,+,+;+n /.*.p.-+;+,+,+,+,+,+,+,+,+,+;+n %+<.&+-+;+,+,+,+,+,+,+,+,+,+;+n !.b.<+[ j j j K G+", -"j j h ).V Q.p p p p p p p p p p p p >+3.s.}+p p p p p p p p p p p p >+1.j.#.p p p p p p p p p p p p >+>.A.8.p p p p p p p p p p p p >+P.R.|+[ j j j K G+", -"l l h :.2.(.++p e f f + + + + f f !+n+C.K. .++p e f f + + + f f f !+n+t.Z x.++p e f + + + + + f f !+n+&+/.@.++p e f f + + + f f f !+n+].*+<+[ j l l K G+", -"l j h ).V h.++p p p p + p p p p p !+n+r.c.(.++p p p + p p p + p p !+n+&.T J.++p p p p p p p + p p !+n+H.e.b.++p p p + p p p + p p !+n+0.t.|+[ j l l K G+", -"l l h :.%.|.++p p p + p p p p p p !+n+$+|.2.++p p p + p p p p p p !+n+t.%. .++p p p p p p + p p p !+n+1.e.<.++p p p + p p p + p p !+n+{.R.4+[ l l l K G+", -"l l h )./.Z ++p p p + + + + p p p >+n+#+M.a.++p p p + + + + p p p >+n+>.*+J.++p p p p p p + p p p >+n+>.8.&+++p p p p + + + p p p >+n+Q.T.7+[ l l l K G+", -"l l h :.O a.++p f p p p p p + p p >+n+4+2.b.++p f p + p p p + p p >+n+*+(.f.++p f p p p + p p p p >+n+<.j.%.++p f p + p p p + p p >+n+Q.&+L.3 l l l K G+", -"l l h :.R s.++p p p p p p p + p p !+n+3.|+1.++p p p + p p p + p p !+n+t.2.p.++p p p p p + p p p p !+n+>.j./.++p p p + p p p + p p !+n+K.b.7.[ l l l K G+", -"l l h :.X |.++++p p + p p p + p p >+n+g.z.1.++++p p + p p p + p p >+n+H.j.p.++++p p p + p p p p p >+n+L.T R.++++p p + p p p + p p >+n+M.1+}+3 l l l K G+", -"l l h :.N +.++p f p p + + + p p p !+n+*+<+H.++p f p p + + + p p p !+n+8.u.=.++p f p p + p p p p p !+n+>.s.i.++p f p p + + + p p p !+n+u.e.<+3 l l l K G+", -"l l h :.R Z ++p ++p p p p p p p ++>+n+f.%.8.++p ++p p p p p p p ++>+n+<...}.++p ++p p p p p p p ++>+n+&+u.L.++p ++p p p p p p p ++>+n+h.8.h.3 l l l K G+", -"l l h :. .^.++!+n+n+q+q+q+q+q+q+n+q+n+P.(.L.++!+n+n+q+q+q+q+q+q+n+q+n+/.*+g.++!+n+n+q+q+q+q+q+q+n+q+n+A.a.A.++!+n+n+q+q+q+q+q+q+n+q+n+|+&.F.3 l l l K G+", -"l l h :. .K.n+s+s+s+s+s+s+s+s+s+s+s+s+].a.<.n+s+s+s+s+s+s+s+s+s+s+s+s+e...+.n+s+s+s+s+s+s+s+s+s+s+s+s+V ^.}+n+s+s+s+s+s+s+s+s+s+s+s+s+j.N.j.3 l l l K G+", -"z z h :.O |.+.R.Z 8.<+s.3.|+b.(.U |.x.#+c.m.<.L.*+z./.(.g.0.h.A.e.L.e.M.A.%.p.f.&+X 2+&.1.|.z.b.s.B.a. .s.%.B.y.3.c.w.e.&+y.#+[.x.z.Z c.i.v.2 z l z K G+", -"z z h :.>.M.|.&+&.>.H.*+w.z./.5.|.z.0.}.P.^.b.*+b.A...a.].].B.h.@.s.H./.h.^.O.~.c.<+N.s.i.i.V s.Z %.c...i.j.=.g.}.s.Y.b.j.p.3.O.h.M.>.A.R.|+| z l z K G+", -"z z h :. .(.a.M.Q.b.e.a.a.a.w.b.j.Z K.<+3.s.c.<.$.<.%.c.a.(.1+%.z.8.t.m.K.P.P.z.r.u.<+&+A./.%.2.|+(.%+e.&+K.R T a.f.(.%.$.J.}+y.g.*.T.T.%+7+| z z z K G+", -"z z h :.O u.2.i.}.z.#+0.&+B.H.c.A.j.y.y.(.4+^.t.&+M.1.h.*+p.|.%.&+&.` z.&.(.}+g.s.(...N.N.=.M.i.u.=.h.A.^./.P.#+y.&+|.K.h.=. .h.B.P.r.B.G.|+2 z z z K G+", -"z z h -.N M.a.N.V s.$+x.~.^.$.w.i.*+0.+.&+P.2.i... .A.+.[+[+z.^.h.%.m.H.N.+.g.O.j.B.P.*+b.H.H.V 2.=.+.%...w.X 0.O.a.B.h.u.+.2.%.Y.O.3.|+v.F.2 z z z K G+", -"z z 7 ).W s.(.R.K.|.#.J.C.M.A.i.N.|.3.3.P.Y.=.R.&+$.i.Z f.*+(.a.^.1.@.&+8.B.C.[.h.}+*.Y 1+$.e.>.T ].2+@.b.` ^.P.C.1+a.c.s.9.Q =.}+}.0.:.*+2+2 z z z K G+", -"z z h :.R *.3+7+f+f+f+f+f+f+f+f+7+F J.#.1+1+s.%.e.%.m.K.#+#.j.Q.c.t.R.*+b.K.O.T c.^.+.%...w.V 1.K.}.u.b.i...2.~.$+Q.a.^.h.}.}+|...y.].g.L.<+| z z z K G+", -"z z h :.T 2.v v v v v v v v v v v i+=.V 2.K.|.L.W Y @.z.0.3.*.|.^.R./.w.A.<+=.r.B.^.Q L.*+e.1.%.u.}+z.t.<.8.K.P.p.a.%.|.Q.}.z.u.K.x.*+=.H.t.| z z z K G+", -"z z h :.1.P.~+v . q q q q q q q i+u+0.J.2.%./...` .. .A.+.[+[+z.^.h.%.m.H.N.+.g.O.j.B.P.*+b.H.&.=.K.^.H.=.A.s.].p.2.>.}+&.}.x.h.~.Q.c.(.t.4+| z z z K G+", -"z z h :.O *.~+v v v v v v v v v i+u+C.p.j.Q. .i.%.+ + .J.s.>.i.i...../.|.[+#.2.<.T./.>.B.2.e.e.+.#+j.@.&+$.K.].#.u.Y.z.c.P.s.c.=.r.[.n.2+<+| z z z K G+", -"z z h :.>.Z ~+v v v v v v v v v i+u+3.#+h.h.%.*++ >.j.+ #+h.(.|.*+/.w.@.+.P.P.(.<+h.|+m.i./.z.&.=.C.j.1.b./.1+3.*+|.Y.M.|.].j.2.c.@+[.}.v.G.| z B z K G+", -"z z h :.T (.~+v v v v v v v v v i+B+].V u.c.=.b.+ b.2.[.y.s.+ + + + e.&.+ .#.z.+ j.b.+ + <.e. .z.=.&+>.H.e.c.4+#.*+u.P.*.0.*.c.Y.[+R n.t.N.| z z z K G+", -"B B h :.R a.~+v q v v v v v v v i+u+1+=.X 1.A.1.L.+ + y.~.c.c.&+T.+ i.i.z.+ g.+ .+.+ H.&++ z.8.*.z.|+A.u.1.a.O.P.s.8.@.1.I.[.z.y.M.u.&+e.%+| z B z K G+", -"z B h :.2.+.~+v v v v v v v v v i+B+P.C.1+8.b.j.V .+.+ 0.a.%.+ + + (.A.B.+ =.+ A.&.+ + + + e.b.2.*+M.m.h.8.Q.Z $+M.t.<.|.r.*+r.O.c.1+|.N.Y.| B B B K G+", -"B B h :. .j.~+~+v v v v v v v v i+u+f.O.P.m.1.@.+ /.}++ 0.B.+ R.*.+ c.}+Z + 0.+ m.m.+ &+Q.M.z.m.*+2.Y.b.a.%.<+0.O.j.b./.A.n.#.~.].4+j.^.e.7.| B B B K G+", -"B B h :.<.M.~+v q v v v v v v v i+u+ .$+z.Q.&+M.K.+ + C.O.z.+ + + + Q.%.z.p.+ s.<.>.$.+ + + 1.(.=.2.V i.*+u.<+p.}+K.=.b.=.=.p.y.Z K.&+,.*+N.4 B B B K G+", -"B B h :.U z.~+v ~+v v v v v v ~+i+u+c.+.~.*.Y./.1.T.*.|. .h.0.u.*.b.N.T.Q.h.K.K.#+a.z.t.m.t.t.Y.u.Z m.w.$.K.2.h.2.C.Y.8.&+J.J.g.C.u.H.H.i.0+4 B B B K G+", -"B B h :.*.^.~+i+B+B+z+z+z+z+z+u+z+B+r.#+4+t.+.h.T.1+t.*.r.x.u.<+..z.1.L.i.*.f.J.B.$.T &+>.%.t.m.=. .H.<+t.>.&+3.#+z.*+%+<.y.].y.~.Q.%.B.1+N.4 B B B K G+", -"B B h :.h.c.u+H+H+H+H+H+H+H+H+H+H+H+J.}.h.}+A.K.L.h.Z a.[+P.B.s.A.u.*+*.Y.B.x.].&+*.e.<+|+P.z.M.s.%.T.R.h.u.}+3.[+2.u.A.K.C.3.0.h.|.i.&+l.h.| B B B K G+", -"B B h :.>.M.|.&+&.>.H.*+w.z./.5.|.z.0.}.P.^.b.*+b.A...a.].].B.h.@.s.H./.h.^.O.~.c.<+N.s.i.i.V s.Z %.c...i.j.=.g.}.s.Y.b.j.p.3.O.h.M.>.A.R.|+| B B B K G+", -"B B k :.4.4.8+8+5+f+f+8+8+:+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+[ B B B K G+", -"B B z :.8+t+B+C+t+C+B+B+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+_ A A A K G+", -"A B B h [ < / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / 3 B A B K G+", -"A A x B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B y A K G+", -"A A k I M M M M M M M L M L M L M M M M L M M L M M M M L M M M L L M M M L M M L M M M M M M M M M M M L L M M L L M M M M M M M L M M I x C A A A K G+", -"A A k :.f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+P A A A A K G+", -"A A k :.'.'.:.:.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.:.4.D.'.4.:.).D.:.:.'.4.:.).D.:.:.:.4.D.D.4.4.4.4.4.).4.D.:.4.:.D.D.j A A A K G+", -"A A k :.R r.@.1...m.%.s. .A.1.&...^.%.s.h.>.b.` %...H.a.=.V =.%...b.V %.T.R +.=.K.<.A.1.` V %.1.*.T *.e.&.t.u.%.K.....c.N.0.3...*.$.c.8.i.|+5 A A A K G+", -"A A k :.V z.&.|+Y.m.8.^.#+B.+.s.%+*+1+[.u.b.H.=.<.j...a.$+0.u.b.b.^.%+..%+c.C.J.%.A.T.z.b.2.Y.%+a.<+&+%+|.@.2+g.g.(.8.<.a.~.V J.}.1+L.*.*+c.5 A A A K G+", -"A A k :...M.j.R.Q.e.%.Z J.P.N.P.e.u.].3.^./.t.K.m.+ + + + t.8.b.>.c.m.2.*+=.<+b.w.@.i.a.h.}+=.+ + H.o.1+|.X z.g.g.K.<.t.H.o.1+Y.f.2.B.=.R.N.5 A A A K G+", -"A A k :.T z.H.t.B.m.}+|.0.j.1+h.A.z.p.$+^.1.L.2.+ + J.p.+ + 1.B.*+^.%.*.O.$+j.t.&.2.w.a.(...|.+ + h.f.O.#.X B.x.~.=.w.R.h.f.O.#.g.*+e. .2+H.5 A A A K G+", -"A A k :.J a.2.8.K.X V a.[.Q.<+*+R.<+#+J.(.m.8.+ + u.Z J.(.8.L.L./.+ + + P.$++ + + + A.a.+ + + + + T.Q.#+c.m.Q.P.g.*.@.L.T.Q.#+c.x.^.2.=.i.S.5 C C A K G+", -"C C k :.2.u.%.%+z.A.*+j.}.*.a.=.e.h.g.].s.L.>.+ + ..#+3.Z b.b.u.+ B.m.+ + C.+ + A.=.b.+ + &.j.+ + +.f.y.J.t.j.}.#.|.*+N.+.f.y.J.].c.w.z.t.<+5 A C C K G+", -"C C k :.*.*.z.8.u.t.V z.].(.e.2.e.}+#.[.s.b.8.+ + j.r.3.(...1./.w.+ + + + p.+ + t.b.&++ + $.(.+ + e.n.@+(.8.Z #+O.Q.R.&.e.n.@+(.[.Y.P.s./.0+5 C A C K G+", -"A C k :.T *.=.t.j.` a.Q.p.(./. .A.(.x.#+a.*+t.+ + |.*+Z h.R.b.A.+ + t.+ + J.+ + m.<.T.+ + <.^.+ + @.I.#.r.b.a.0.x.|.N.>.@.I.#.r.[.u.M.a.R.<+5 C C C K G+", -"C C k :.W *. . .$.R.T.V N.h.w.%.j.M.#.p.j.B.8.9.+ + y.f.+ + &.^.+ + z.+ + J.+ + >.*+&++ + ..j.+ + r.3.+.Y.a.Z p.@+M.*+8.a.r.3.+.c.B.w.m.N.3+5 C C C K G+", -"C C k :.2.*.|.c.=.T.@.s.Q. .8.|+z.a.+.s.f.z.s.N.&++ + + + 2.P.*+N.+ + + + u.+ + 2.1.i.L.+ + + + + #+].p.%.T Z K.u.#+^.i.1+#+].p.@+Q.$.R.-.8.5 C C C K G+", -"C C k :.X B.%.i.$+c. .*+2.*+t.Z <.M.0.r.*+c.|+H.1.c.` |.=.C.u.P.=./. .c.t.<+f.r.Y.a.B.A.i.*.z.$...=.&+H.P.A.K. .}.^.s.Z 2.*+..%.M.Z C.Z N.7+5 C C C K G+", -"C C k :.R ^.*.>.u.M.f.O.r.c.b.Y $.j.0.f.(.j.j.1.%+$.%+2.y.#.s.h.h.<+&.1.&.h.3.T K.j.c.w.>.m.w.w.1+#+c.<.w.%.s.f.C.*.a.2.K.9.a.u.a.g.0.Y.L.F.5 C C C K G+", -"C C k :.u. .Y.m.P.+.0.~.p.Y.<+w e.2.0.J.T X 2./.L.*+&+Q.}+#+M.(.h.1./.A.@.&+y.Z M.(.|.H.H.>.<.>.^.O.Y.N.>.&.K.C.f.Y.a.K.s.J.s.Q.j.#+P.g.1.7.5 C C D K G+", -"C C k :.T B.%.i.h.A.a.B.r.h.i.+.A.a.y.4+^./.e.L.w.M.$.B.#.~.(.*+%+H.8. .m.K.y.*+&+b.@.m.*+B.&+8.2.s.2...a.A.u.p.r.*+%.m.Y J.T *.p.u.a.Q./.7+5 C C C K G+", -"C C k 4.R P.k+k+l+l+l+l+l+l+l+l+l+k+c p.=.z.M.V i.w.N.h.f.y.k+k+l+l+l+l+l+l+l+l+l+k+c i.>.>. .w.(.r.Q.<.%+m.k+k+l+l+l+l+l+l+l+l+l+k+c q.t.N.5 D C C K G+", -"C C k :.<.h. + + + + + + + + + + + +l+[.j.2.|.b.H.b.1.a.x.O. + + + + + + + + + + + +l+m.%./.L.&.B.g.3+m.m.e. + + + + + + + + + + + +l+Q.t.|+5 D C D K G+", -"D D k :.R u.k+.+c `.`.`.+ `.`.`.`.l+l+#.a.T.N.(.1.K.|+a.}.x.k+.+c `.d + + + d `.`.l+l+B.H.*+s./.|+M.&+A.K.e.k+.+c `.d + + + d `.`.l+l+%.8.A.7 D D C K G+", -"D D k 4.U a..+d d d d + + d d d d l+l+x.Y.b.8.i.N.h. .h.J.C..+d d d + d d d + d d l+l+N.b.z.+.4+B.c.&+b.j.%+.+d d d + d d d + d d l+l+j.<.S.5 D D C K G+", -"D D k :.=.|..+d d d + d + d d d d l+l+}.j.%.L.K.t.h.T.|.#.]..+d d d d d d d + d d l+l++.e.^.c.t.V h.u.<+..%..+d d d d d d d + d d l+l+2.L.P.7 D D D K G+", -"D D m 4.*.K..+d d d d d + d d d d k+l+f.<+&.N./.A. .H.z.f.r..+d d d d d d d + d d k+l+H.>.c.}+t.^.(.s.w.*+e..+d d d d d + + d d d k+l+s.&+l.7 D D D K G+", -"D D m 4.s.z..+d b d d d + d d d d k+l+g.|.b.L.h.i.*.R.u.].P..+d b d d d d + d d d k+l+K.1.j.a.A. .<+s.%+j.&..+d b d d d d d + d d k+l+2.T.*+7 D D D K G+", -"D D m :.N *..+d d d d d + d d d d l+l+P.Y.&.A.e.}+Z i.2.#.p..+d d d d d + d d d d l+l+` %+B.j.<.(.s.<+t.M.b..+d d d d d d d + d d l+l+Z 2+S.7 D D E K G+", -"D D m 4.T c..+.+d d d d + d d d d k+l+p.j.+.&.*.&+/.|.Q.#.3..+.+d d d + d d d d d k+l+a.H.t.i.s.j.Y.z.$.m.u..+.+d d + d d d + d d k+l+t.%+*+7 D E D K G+", -"E E m 4.V Z .+d b d d d + d d d d l+l++.3.*.Q.<.A.t.=.4+z.B..+d b d + + + + + d d l+l+t./.1+>.c.s.}+e.i.|+z..+d b d d + + + d d d l+l+|+%.Y.7 E D E K G+", -"D E m 4.R Y..+d .+d d d d d d d .+k+l+P.K.H.B.|.m.A.e.B.y.]..+d .+d d d d d d d .+k+l+Q.e.w./.8.&+=.H.t.m.*+.+d .+d d d d d d d .+k+l+%+t.S.7 E E E K G+", -"D E m 4.(.c..+l+l+l+l+l+l+l+l+l+l+l+l+f.2.Y.%.B.e.M.=. .+.C..+l+l+l+l+l+l+l+l+l+l+l+l+|+%+s.%.c.*+K.2+..Y.+..+l+l+l+l+l+l+l+l+l+l+l+l+b.A.7+5 E E D K G+", -"E E m 4.a.7+l+l+l+l+l+l+l+l+l+l+l+l+l+2+Y.i.|+P.P.*+P.e.&+1+l+l+l+l+l+l+l+l+l+l+l+l+l+T.2+R.P.N.|+A.P.w.P.;.l+l+l+l+l+l+l+l+l+l+l+l+l+;.2+Q.| E E E K G+", -"E E h :.>.M.|.&+*+|+H.*+|+z.i.|+|.z.|+}.P.*+|+*+*+A.|+*+i.|+B.*+|+s.H.|+*+^.O.|+c.|+N.s.|+i.*+s.*+|+c.*+i.|+*+|+*+s.|+b.*+|+*+O.h.|+*+A.|+|+| E E E K G+", -"E E m 4.4.4.8+8+5+f+f+8+8+:+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+5+5+8+8+5+5+5+8+5+8+8+5+5+5+8+5+8+5+f+8+:+f+5+:+8+f+p+[ E E E K G+", -"E E E 4.8+t+B+C+t+C+B+B+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+C+B+B+B+B+B+u+B+B+B+B+B+B+u+B+B+B+C+B+B+C+B+B+B+u+B+B+B+B+| E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E K G+", -"G P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S K f+", -"4.f+g+h+h+h+h+h+h+g+h+h+g+h+h+g+h+h+g+h+h+h+h+g+h+h+g+h+g+h+h+h+h+g+h+h+g+h+g+h+h+h+h+g+h+h+g+h+g+h+h+h+h+g+h+h+g+h+g+h+h+h+h+g+h+h+g+h+h+h+h+h+g+h+h+h+"}; +char const * buttons_xpm[] = { +"76 253 333 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", +"$ c #FFFFFF", +"% c #B9B9BF", +"& c #ACACB3", +"* c #9D9DA4", +"= c #F3F3F4", +"- c #5D5D6A", +"; c #5E5E6A", +"> c #E0E0E3", +", c #5C5C69", +"' c #EDEDEE", +") c #FCFCFC", +"! c #909098", +"~ c #909099", +"{ c #9797A0", +"] c #ECECEE", +"^ c #FAFAFB", +"/ c #D9D9DC", +"( c #A3A3AA", +"_ c #91919A", +": c #DDDDE0", +"< c #FAFAFA", +"[ c #EBEBEC", +"} c #94949D", +"| c #61616D", +"1 c #A2A2A9", +"2 c #DCDCDF", +"3 c #E6E6E8", +"4 c #ACACB2", +"5 c #646470", +"6 c #E5E5E7", +"7 c #C4C4C9", +"8 c #CCCCD0", +"9 c #CECED2", +"0 c #CFCFD3", +"a c #CBCBCF", +"b c #8A8A93", +"c c #A0A0A7", +"d c #9C9CA4", +"e c #6E6E79", +"f c #EAEAEB", +"g c #DADADD", +"h c #9999A1", +"i c #AEAEB4", +"j c #95959D", +"k c #92929B", +"l c #BDBDC2", +"m c #AAAAB0", +"n c #F2F2F3", +"o c #CACACE", +"p c #8D8D96", +"q c #FDFDFD", +"r c #8C8C95", +"s c #888891", +"t c #DBDBDD", +"u c #D3D3D6", +"v c #F0F0F1", +"w c #60606C", +"x c #F8F8F9", +"y c #F1F1F2", +"z c #5F5F6B", +"A c #BEBEC3", +"B c #FCFCFD", +"C c #DFDFE2", +"D c #FEFEFE", +"E c #8F8F98", +"F c #85858F", +"G c #878790", +"H c #E1E1E3", +"I c #F9F9FA", +"J c #A1A1A8", +"K c #DEDEE0", +"L c #C5C5CA", +"M c #9D9DA5", +"N c #E4E4E6", +"O c #EAEAEC", +"P c #D1D1D5", +"Q c #9B9BA3", +"R c #ABABB2", +"S c #E9E9EB", +"T c #A9A9B0", +"U c #F7F7F7", +"V c #D4D4D7", +"W c #9F9FA6", +"X c #D3D3D7", +"Y c #BCBCC1", +"Z c #484852", +"` c #27272B", +" . c #616176", +".. c #4E4E5C", +"+. c #A8A8AE", +"@. c #D6D6D9", +"#. c #F5F5F6", +"$. c #BCBCC2", +"%. c #474752", +"&. c #7A7A85", +"*. c #95959E", +"=. c #4F4F5D", +"-. c #86868F", +";. c #28282B", +">. c #4D4D5B", +",. c #D7D7DA", +"'. c #D2D2D5", +"). c #D2D2D6", +"!. c #D4D4D8", +"~. c #C9C9CD", +"{. c #575765", +"]. c #7C7C86", +"^. c #BDBDC3", +"/. c #575764", +"(. c #BBBBC1", +"_. c #7B7B85", +":. c #29292D", +"<. c #4C4C59", +"[. c #ADADB3", +"}. c #71717C", +"|. c #AFAFB5", +"1. c #808089", +"2. c #4D4D5A", +"3. c #B2B2B8", +"4. c #6C6C77", +"5. c #696974", +"6. c #B2B2B7", +"7. c #2A2A2D", +"8. c #B0B0B5", +"9. c #B0B0B6", +"0. c #71717B", +"a. c #ABABB1", +"b. c #666671", +"c. c #C4C4C8", +"d. c #75757F", +"e. c #2A2A2E", +"f. c #4B4B58", +"g. c #D5D5D8", +"h. c #D0D0D4", +"i. c #D1D1D4", +"j. c #656570", +"k. c #6B6B75", +"l. c #B1B1B7", +"m. c #2B2B2E", +"n. c #4B4B57", +"o. c #8C8C94", +"p. c #8E8E96", +"q. c #D3D3D5", +"r. c #A9A9AF", +"s. c #7B7B84", +"t. c #787881", +"u. c #A7A7AD", +"v. c #62626D", +"w. c #585864", +"x. c #C5C5C9", +"y. c #BBBBBF", +"z. c #555560", +"A. c #545460", +"B. c #B8B8BD", +"C. c #7A7A83", +"D. c #2B2B2F", +"E. c #4A4A56", +"F. c #5F5F6A", +"G. c #B9B9BD", +"H. c #5E5E69", +"I. c #C3C3C7", +"J. c #B9B9BE", +"K. c #CDCDD0", +"L. c #76767F", +"M. c #86868E", +"N. c #E3E3E5", +"O. c #4A4A54", +"P. c #313136", +"Q. c #686874", +"R. c #A5A5AC", +"S. c #6B6B77", +"T. c #878791", +"U. c #6D6D79", +"V. c #676773", +"W. c #B3B3B9", +"X. c #70707C", +"Y. c #8B8B94", +"Z. c #AAAAB1", +"`. c #C1C1C6", +" + c #7D7D87", +".+ c #A4A4AB", +"++ c #97979F", +"@+ c #656571", +"#+ c #F7F7F8", +"$+ c #5B5B68", +"%+ c #DBDBDE", +"&+ c #94949C", +"*+ c #333339", +"=+ c #34343A", +"-+ c #1C1F22", +";+ c #1A1E20", +">+ c #A7A7AE", +",+ c #D5D5D9", +"'+ c #7D7D88", +")+ c #5A5A67", +"!+ c #8A8A94", +"~+ c #62626E", +"{+ c #696975", +"]+ c #E2E2E4", +"^+ c #F8F8F8", +"/+ c #AEAEB5", +"(+ c #BFBFC4", +"_+ c #7E7E88", +":+ c #E2E2E5", +"<+ c #9F9FA7", +"[+ c #DEDEE1", +"}+ c #C2C2C7", +"|+ c #73737E", +"1+ c #9A9AA2", +"2+ c #636370", +"3+ c #96969E", +"4+ c #E0E0E2", +"5+ c #72727D", +"6+ c #B7B7BC", +"7+ c #666672", +"8+ c #898992", +"9+ c #84848E", +"0+ c #6F6F7A", +"a+ c #60606D", +"b+ c #74747F", +"c+ c #EDEDEF", +"d+ c #757580", +"e+ c #8E8E97", +"f+ c #C1C1C5", +"g+ c #83838D", +"h+ c #CECED1", +"i+ c #CDCDD1", +"j+ c #82828C", +"k+ c #C0C0C5", +"l+ c #E8E8E9", +"m+ c #A8A8AF", +"n+ c #767681", +"o+ c #C8C8CD", +"p+ c #D8D8DB", +"q+ c #E7E7E9", +"r+ c #70707B", +"s+ c #E8E8EA", +"t+ c #93939B", +"u+ c #B4B4BA", +"v+ c #63636F", +"w+ c #9E9EA6", +"x+ c #F4F4F5", +"y+ c #767680", +"z+ c #777782", +"A+ c #5E5E6B", +"B+ c #6B6B76", +"C+ c #C7C7CB", +"D+ c #C6C6CB", +"E+ c #6D6D78", +"F+ c #BABABF", +"G+ c #6F6F7B", +"H+ c #61616E", +"I+ c #28282C", +"J+ c #64646F", +"K+ c #51515E", +"L+ c #52525F", +"M+ c #6A6A75", +"N+ c #5A5A66", +"O+ c #C8C8CC", +"P+ c #29292C", +"Q+ c #73737D", +"R+ c #72727C", +"S+ c #4B4B59", +"T+ c #E3E3E6", +"U+ c #4C4C58", +"V+ c #E4E4E5", +"W+ c #575762", +"X+ c #62626C", +"Y+ c #4D4D59", +"Z+ c #919199", +"`+ c #BEBEC2", +" @ c #65656F", +".@ c #4F4F5C", +"+@ c #95959C", +"@@ c #B3B3B8", +"#@ c #5D5D67", +"$@ c #51515C", +"%@ c #888890", +"&@ c #B1B1B6", +"*@ c #494955", +"=@ c #83838B", +"-@ c #ECECED", +";@ c #EFEFF0", +">@ c #E1E1E4", +",@ c #7F7F89", +"'@ c #D7D7DB", +")@ c #5C5C68", +"!@ c #7F7F88", +"~@ c #D7D7D9", +"{@ c #60606B", +"]@ c #B6B6BB", +"^@ c #8A8A92", +"/@ c #686873", +"(@ c #4C4C5A", +"_@ c #555562", +":@ c #5C5C67", +"<@ c #4E4E5A", +"[@ c #98989F", +"}@ c #DFDFE1", +"|@ c #96969D", +"1@ c #50505C", +"2@ c #AFAFB4", +"3@ c #72727B", +"4@ c #C0C0C4", +"5@ c #51515D", +"6@ c #B5B5BA", +"7@ c #50505D", +"8@ c #595964", +"9@ c #8B8B93", +"0@ c #919198", +"a@ c #C2C2C6", +"b@ c #6E6E77", +"c@ c #6E6E78", +"d@ c #82828A", +"e@ c #DDDDDF", +"f@ c #4F4F5A", +"g@ c #60606A", +"h@ c #63636D", +"i@ c #6F6F78", +"j@ c #C6C6CA", +"k@ c #7A7A84", +"l@ c #B6B6BC", +"m@ c #81818B", +"n@ c #F6F6F7", +"o@ c #83838C", +"p@ c #B7B7BD", +"q@ c #B8B8BE", +"r@ c #A1A1A9", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ $ $ % % $ $ & * # + ", +" + @ $ $ = - ; = $ $ $ > , # + ", +" + @ $ ' ) ! ~ ) ' $ { ] ^ / ( _ : < [ } $ $ $ $ | 1 2 3 4 5 $ 6 7 < # + ", +" + @ $ > 8 9 0 a > $ b c d 8 $ e f g h i j k $ [ k 1 $ l m n 4 $ $ o c # + ", +" + @ $ > p q q r > $ s t ) $ $ c u v l p w $ > > $ $ $ $ ] $ x - # + ", +" + @ $ > , n y , > $ : x j m $ & z _ A B 8 $ > C D E F F G $ H # + ", +" + @ $ > r r > $ H I J K $ & L * M x N O = E M $ P Q R 3 $ > # + ", +" + @ $ > > $ b N S T $ & u = U V F ( = v w W X x S Y $ > # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` Z # + ", +" + @ Z ` . . . . . . . . . . . . . . . . . . . . . . . . . .` Z Z ` . . . . . . . . . . . . . . . . . . . . . . . . . .` Z # + ", +" + @ ` .....S m ....+.S ..@.......X 0 X #.X P ..6 X X $.....%.` ` .....&.P @.*...=.-.8 8 -.=...@.......=.-.8 8 -.=.....%.` # + ", +" + @ ;. .>.>.,.'.>.>.).!.>.@.>.>.>.u >.>.@.>.>.>.@.>.>.>.>.>.%.;. ;. .>.>.~. >.{.>.].^.{./.(._.>.@.>.>.>.].^.{./.(._.>.>.%.;. # + ", +" + @ :. .<.<.@.[.}.}.|.u <.@.<.<.<.u <.<.@.<.<.<.@.<.<.<.<.<.%.:. :. .<.<.~.1.2.<.<.3.4.<.<.5.6.<.@.<.<.<.3.4.<.<.5.6.<.<.%.:. # + ", +" + @ 7. .<.<.@.e 8.9.0.u <.@.<.<.<.u <.<.@.<.<.<.N u u a.<.<.%.7. 7. .<.<.b.c.H d.<.X 2.<.<.<.P <.@.<.<.<.X 2.<.<.<.P <.<.%.7. # + ", +" + @ e. .f.f.g.f.h.u f.u f.u 2.f.<.i.f.f.g.f.f.f.g.f.f.f.f.f.%.e. e. .f.f.f.f.j.a f.3.k.f.f.5.l.f.g.f.f.f.3.k.f.f.5.l.f.f.%.e. # + ", +" + @ m. .n.n.g.n.o.p.n.q.n.r.s.n.t.u.n.n.g.n.n.n.g.n.n.n.n.n.%.m. m. .n.n.v.n.w.x.n.s.y.z.A.B.C.n.g.n.n.n.s.y.z.A.B.C.n.n.%.m. # + ", +" + @ D. .E.E.g.E.E.E.E.'.E.F.B.'.G.H.E.E.g.E.E.E.N '.'.I.E.E.%.D. D. .E.E.J.g.K.L.E.n.M.a o M.n.E.N.0 0 8.n.M.a o M.n.E.E.%.D. # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ 2 D Q. c $ ( $ > # + ", +" + @ R.$ d @.D S. k T. # + ", +" + @ U.$ ). V.D g $ > | 1 2 3 4 5 W.$ X.F $ * , < o # + ", +" + @ 2 ) 5 Q $ 1 $ > 1 $ l m n 4 Y.$ j Z.$ `. +$ 1 # + ", +" + @ .+$ ++i.D S. $ > > $ $ $ $ ] @+D % 0 i.3 1 $ _. # + ", +" + @ U.$ ,.) / $ > C D E F F G N.K = s D X #+$+ # + ", +" + @ %+$ $ 1 $ > M $ P Q R 3 (.D < , 3 $ ). # + ", +" + @ .+$ D S. $ > w W X x S Y &+$ / `.$ R # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ *+-+-+-+-+-+-+-+-+-+-+-+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. >+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #..+H ,+'+ #.i 3 A Q. #. #.i D > 7 # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. < R.)+!+8 < T )+T 3. #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. x ~+ , n < {+ {+]+ #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. #. < 5. 5.]+ n $+ ~+^+ #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. #. < >+)+>+3. 8 G )+>+< 3 ~+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. #. #./+3 (+5. _+,+:+R.#. <+[+7 # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ *+-+-+-+-+-+-+-+-+-+-+-+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ I > H }+|+ #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. 1+`. #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. 2+O #. 3+: 4+}+5+/+W 6+++ #.i 3 A Q. 3+: 4+}+5+ 5 & C > +#. 7+t 8+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. , R.% #. @+ 9+Y 0+2 , O a+ < T )+T 3. @+ 9+Y T 3.- $+~+#.V.2 -. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ I > %+3.S. #. b+l :+> c+ g.d+e+f+ < {+ {+]+ b+l :+> c+ C 4. #+:+g+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. h+~ , {+I j W.i+j+ < 5. 5.]+ h+~ , {+I [+4. #.k+3. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. > d+, 3.< z l+3 )+ < >+)+>+3. > d+, 3.< m+3.- $+~+#.$+~.>+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. #. b [+H ( #. f+4 #./+3 (+5. b [+H ( #. 2+& H 4+].#. - P * # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ $+]+4. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ n+3 m+ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ *+-+-+-+-+-+-+-+-+-+-+-+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ Y.[+O C !+ >+ >+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ b+6 s )+G N 5+ #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ m M d m+ #. #.i D > 7 #.i 3 A Q. #. #.i D > 7 # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ C 4. 4.[+ #. #. #. < T )+T 3. #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ C 4. 4.[+ #. #. #. < {+ {+]+ #. #. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ Z.M d m+ n $+ ~+^+ #. < 5. 5.]+ n $+ ~+^+ #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ b+6 T.)+-.N 5+ 8 G )+>+< 3 ~+ < >+)+>+3. 8 G )+>+< 3 ~+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ r 4+[ 4+r _+,+:+R.#. <+[+7 #./+3 (+5. _+,+:+R.#. <+[+7 # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ #. # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ *+-+-+-+-+-+-+-+-+-+-+-+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ n+o+]+N 1+ #. p+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ a -. - }. #. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ q+r+ #. #. #.i 3 A Q. #.W.s+t+u+N.p #. ].4+- v+3 X. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ w+x+o+F #. #. < T )+T 3. < r y+x r z+,. #. 9.9.k+c # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ 5.1 6 9. #. #. < {+ {+]+ ^+A+)+^ A+)+= #. - :+@.)+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ B+s+ n $+ ~+^+ < 5. 5.]+ #. #. #. #. B+S 4+- # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ 8+)+ e+L 8 G )+>+< < >+)+>+3. #. #. #. #. 0 ! 9.9. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ }+q+4+L b+ _+,+:+R.#. #./+3 (+5. #. #. #. #. h C+ - 4+]. # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ # + ", +" + @ *+-+;+;+;+;+;+;+;+;+;+;+=+ # + ", +" + @ *+=+=+=+=+=+=+=+=+=+=+=+=+ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ $ $ $ 6 i | & * # + ", +" + @ $ [ t+D+$ 1+ , $ > # + ", +" + @ $ > V.$ 0 $ 6 7 < | 1 2 3 4 5 _ : < [ } | 1 2 3 4 5 $ $ $ $ _ : < [ } # + ", +" + @ $ :+V.( $ R $ $ o c 1 $ l m n 4 f g h i j 1 $ l m n 4 k $ [ k f g h i j # + ", +" + @ $ $ $ D 2 E+ $ x - > $ $ $ $ ] u v l p w > $ $ $ $ ] $ > u v l p w # + ", +" + @ $ s+F S. $ H C D E F F G z _ A B 8 C D E F F G $ > z _ A B 8 # + ", +" + @ $ > $ > M $ P Q R 3 L * M x N M $ P Q R 3 O = E L * M x N # + ", +" + @ $ > $ > w W X x S Y u = U V F w W X x S Y ( = v u = U V F # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z # + ", +" + @ Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z # + ", +" + @ ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` # + ", +" + @ ;. .....8+3 y ........%.;. ;. .......F+N.i+G+....%.;. ;. .....H+: C 9 b+....%.;. ;. .........d y ......%.;. # + ", +" + @ I+ .2.2.5.J+N 2.2.2.2.%.I+ I+ .2.2.2.t.2.d+}+2.2.%.I+ I+ .2.2.K+L+2.M+h.2.2.%.I+ I+ .2.2.2.N+O+N 2.2.2.%.I+ # + ", +" + @ P+ .<.<.<.<.N <.<.<.<.%.P+ P+ .<.<.<.<.<.2.]+<.<.%.P+ P+ .<.<.<.<.<.Q+o <.<.%.P+ P+ .<.<.<.9.R+N <.<.<.%.P+ # + ", +" + @ :. .S+S+S+S+T+S+S+S+S+%.:. :. .S+S+S+S+S+g+% S+S+%.:. :. .S+S+S+B+3 c+$+S+S+%.:. :. .S+S+@+(+S+T+S+S+S+%.:. # + ", +" + @ 7. .U+U+U+U+V+U+U+U+U+%.7. 7. .U+U+U+U+W+K X+U+U+%.7. 7. .U+U+U+U+Y+Z+`+U+U+%.7. 7. .U+U+I. @U+V+U+U+U+%.7. # + ", +" + @ e. .f.f.f.f.N.f.f.f.f.%.e. e. .f.f.f.f.I.M.f.f.f.%.e. e. .f.f.f.f.f..@4+f.f.%.e. e. .f.f.6 S S ) u f.f.%.e. # + ", +" + @ m. .n.n.n.n.N.n.n.n.n.%.m. m. .n.n.n.+@@@n.n.n.n.%.m. m. .n.n.#@$@n.%@&@n.n.%.m. m. .n.n.n.n.n.N.n.n.n.%.m. # + ", +" + @ D. .*@*@=@-@) -@=@*@*@%.D. D. .*@*@*@;@]+: @.*@*@%.D. D. .*@*@L.4+: B.F.*@*@%.D. D. .*@*@*@*@*@N.*@*@*@%.D. # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z # + ", +" + @ Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z # + ", +" + @ ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` # + ", +" + @ ;. .......;@[+[+_ ....%.;. ;. .......d N.N *.....%.;. ;. .....U.[+[+>@#.....%.;. ;. .......,@'@'@,@....%.;. # + ", +" + @ I+ .2.2.2.N 2.2.2.2.2.%.I+ I+ .2.2.y+D+; 2.)@2.2.%.I+ I+ .2.2.2.2.2.!@}+2.2.%.I+ I+ .2.2.2.~@{@| ~@2.2.%.I+ # + ", +" + @ P+ .<.<.<.N <.<.<.<.<.%.P+ P+ .<.<.+.t.<.<.<.<.<.%.P+ P+ .<.<.<.<.<.]@^@<.<.%.P+ P+ .<.<.<.o /@5.o <.<.%.P+ # + ", +" + @ :. .S+S+S+c+K l.- S+S+%.:. :. .S+S+,.[.2 & , S+S+%.:. :. .S+S+S+S+(@s+_@S+S+%.:. :. .S+S+S+z v v A+S+S+%.:. # + ", +" + @ 7. .U+U+U+:@<@[@&@U+U+%.7. 7. .U+U+}@|@1@[@2@U+U+%.7. 7. .U+U+U+U+3@i+U+U+U+%.7. 7. .U+U+U+I.C.C.4@U+U+%.7. # + ", +" + @ e. .f.f.f.f.f.5@K f.f.%.e. e. .f.f.6@.@f.7@K f.f.%.e. e. .f.f.f.f.r.&+f.f.f.%.e. e. .f.f.f.H <.<.H f.f.%.e. # + ", +" + @ m. .n.n.8@Y+n.9@l.n.n.%.m. m. .n.n.0@M.n.%@W.n.n.%.m. m. .n.n.n.n.4+#@n.n.n.%.m. m. .n.n.n.a@b@c@f+n.n.%.m. # + ", +" + @ D. .*@*@d@H e@J.F.*@*@%.D. D. .*@*@f@4@H l g@*@*@%.D. D. .*@*@*@h@,.*@*@*@*@%.D. D. .*@*@*@i@i.i.i@*@*@%.D. # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` Z # + ", +" + @ Z ` . . . . . . . . .` Z # + ", +" + @ ` .=.=.=.=.=.=.=.=.=.%.` # + ", +" + @ ;. ...................%.;. n+o+]+N 1+ # + ", +" + @ I+ .2.2.2.2.2.2.2.2.2.%.I+ a -. - }. # + ", +" + @ P+ .<.<.<.<.<.<.<.<.<.%.P+ q+r+ 3+: 4+}+5+3.Q W.1+ 2+& t j@5+ # + ", +" + @ :. .S+S+S+S+S+S+S+S+S+%.:. w+x+o+F @+ 9+Y k@X )+s+@+ T e+ j+`. # + ", +" + @ 7. .U+U+U+U+U+U+U+U+U+%.7. 5.1 6 9. b+l :+> c+ 6 V._+h. : > > > N # + ", +" + @ e. .f.f.f.f.f.f.f.f.f.%.e. B+s+ h+~ , {+I 9.* l@{ > 0+ # + ", +" + @ m. .n.n.n.n.n.n.n.n.n.%.m. 8+)+ e+L > d+, 3.< z+,+S 2+ m+u+; )+z+ # + ", +" + @ D. .*@*@*@*@*@*@*@*@*@%.D. }+q+4+L b+ b [+H ( #. 6 h+ 2+R C N i # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.O. # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ j+p+#.y j@ $ > # + ", +" + @ m@D n@u+( > , $ > # + ", +" + @ g.$ o@ )+ { ] ^ / ( $ 6 7 < {+A y >+$ > # + ", +" + @ = #.)@ b c d 8 $ e $ $ o c p@$ q@8 $ > # + ", +" + @ = #.)@ s t ) $ $ c $ x - l+= 4.$ > # + ", +" + @ g.$ m@ )+ : x j m $ & $ H l+= 4.$ > # + ", +" + @ m@D #.W.r@C H I J K $ & $ > p@$ q@8 $ > # + ", +" + @ o@p+n@= C+ b N S T $ & $ > {+(+n [.$ > # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z Z ` ` ` ` ` ` ` ` ` Z # + ", +" + @ Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z Z ` . . . . . . . . .` Z # + ", +" + @ ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` ` .=.=.=.=.=.=.=.=.=.%.` # + ", +" + @ ;. .....8+3 y ........%.;. ;. .......F+N.i+G+....%.;. ;. .....H+: C 9 b+....%.;. # + ", +" + @ I+ .2.2.5.J+N 2.2.2.2.%.I+ I+ .2.2.2.t.2.d+}+2.2.%.I+ I+ .2.2.K+L+2.M+h.2.2.%.I+ # + ", +" + @ P+ .<.<.<.<.N <.<.<.<.%.P+ P+ .<.<.<.<.<.2.]+<.<.%.P+ P+ .<.<.<.<.<.Q+o <.<.%.P+ # + ", +" + @ :. .S+S+S+S+T+S+S+S+S+%.:. :. .S+S+S+S+S+g+% S+S+%.:. :. .S+S+S+B+3 c+$+S+S+%.:. # + ", +" + @ 7. .U+U+U+U+V+U+U+U+U+%.7. 7. .U+U+U+U+W+K X+U+U+%.7. 7. .U+U+U+U+Y+Z+`+U+U+%.7. # + ", +" + @ e. .f.f.f.f.N.f.f.f.f.%.e. e. .f.f.f.f.I.M.f.f.f.%.e. e. .f.f.f.f.f..@4+f.f.%.e. # + ", +" + @ m. .n.n.n.n.N.n.n.n.n.%.m. m. .n.n.n.+@@@n.n.n.n.%.m. m. .n.n.#@$@n.%@&@n.n.%.m. # + ", +" + @ D. .*@*@=@-@) -@=@*@*@%.D. D. .*@*@*@;@]+: @.*@*@%.D. D. .*@*@L.4+: B.F.*@*@%.D. # + ", +" + @ O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. O.P.%.%.%.%.%.%.%.%.%.P.O. # + ", +" + @ O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. O.P.P.P.P.P.P.P.P.P.O. # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/empty.xpm b/hdspmixer/pixmaps/empty.xpm index 284abc1..5bfe06b 100644 --- a/hdspmixer/pixmaps/empty.xpm +++ b/hdspmixer/pixmaps/empty.xpm @@ -1,658 +1,258 @@ /* XPM */ -char * empty_xpm[] = { -"76 253 402 2", -" c None", -". c #404840", -"+ c #40483F", -"@ c #202720", -"# c #70786F", -"$ c #707060", -"% c #2F2F2F", -"& c #A0A0A0", -"* c #6F6F6F", -"= c #060606", -"- c #A0A09F", -"; c #A09FA0", -"> c #9FA0A0", -", c #9F9FA0", -"' c #9FA09F", -") c #A09F9F", -"! c #9F9F9F", -"~ c #9F9F9E", -"{ c #9EA09F", -"] c #9E9F9F", -"^ c #9E9F9E", -"/ c #9F9E9E", -"( c #9F9E9F", -"_ c #9E9E9E", -": c #9E9E9F", -"< c #9D9E9D", -"[ c #9E9E9D", -"} c #9D9E9E", -"| c #9E9F9D", -"1 c #9D9F9E", -"2 c #9D9F9D", -"3 c #9E9D9E", -"4 c #9E9D9D", -"5 c #9D9D9D", -"6 c #9D9D9E", -"7 c #9D9E9C", -"8 c #9C9D9D", -"9 c #9C9E9D", -"0 c #9D9D9C", -"a c #9C9E9C", -"b c #9C9D9C", -"c c #9D9C9C", -"d c #9C9C9C", -"e c #9C9C9D", -"f c #9B9C9C", -"g c #9B9D9C", -"h c #9C9D9B", -"i c #9C9C9B", -"j c #9B9D9B", -"k c #9B9C9B", -"l c #9B9B9B", -"m c #9B9B9C", -"n c #9C9B9B", -"o c #9A9C9B", -"p c #9B9C9A", -"q c #9B9B9A", -"r c #9A9C9A", -"s c #9A9B9A", -"t c #9A9B9B", -"u c #9A9A9A", -"v c #999B9A", -"w c #999B99", -"x c #999A99", -"y c #9A9B99", -"z c #999A9A", -"A c #9A9A99", -"B c #989A99", -"C c #999A98", -"D c #989A98", -"E c #999999", -"F c #999998", -"G c #989998", -"H c #989999", -"I c #989997", -"J c #989A97", -"K c #979998", -"L c #979A98", -"M c #979A97", -"N c #979997", -"O c #979897", -"P c #989898", -"Q c #989897", -"R c #979898", -"S c #969897", -"T c #969997", -"U c #979896", -"V c #969896", -"W c #979996", -"X c #969996", -"Y c #969796", -"Z c #969797", -"` c #979797", -" . c #979796", -".. c #969795", -"+. c #969895", -"@. c #959895", -"#. c #959796", -"$. c #959896", -"%. c #959795", -"&. c #959695", -"*. c #959696", -"=. c #959794", -"-. c #959694", -";. c #949695", -">. c #949795", -",. c #949794", -"'. c #949694", -"). c #949693", -"!. c #939693", -"~. c #939694", -"{. c #949594", -"]. c #949593", -"^. c #939593", -"/. c #939594", -"(. c #929593", -"_. c #939592", -":. c #939493", -"<. c #929592", -"[. c #929493", -"}. c #929492", -"|. c #939492", -"1. c #929491", -"2. c #919592", -"3. c #919492", -"4. c #919491", -"5. c #919591", -"6. c #929591", -"7. c #919391", -"8. c #929392", -"9. c #929391", -"0. c #919392", -"a. c #909391", -"b. c #919490", -"c. c #919390", -"d. c #909390", -"e. c #909490", -"f. c #909491", -"g. c #909291", -"h. c #909290", -"i. c #919290", -"j. c #8F9290", -"k. c #8F9390", -"l. c #90938F", -"m. c #90928F", -"n. c #8F938F", -"o. c #8F928F", -"p. c #90918F", -"q. c #8F9190", -"r. c #8F918F", -"s. c #8F928E", -"t. c #8E928F", -"u. c #8E918F", -"v. c #8F918E", -"w. c #8E928E", -"x. c #8E918E", -"y. c #8E908E", -"z. c #8E918D", -"A. c #8D918E", -"B. c #8D908E", -"C. c #8E908D", -"D. c #8D918D", -"E. c #8D908D", -"F. c #8C908D", -"G. c #8D908C", -"H. c #8C908C", -"I. c #8C8F8C", -"J. c #8D8F8C", -"K. c #8C8F8D", -"L. c #8D8F8D", -"M. c #8B8F8C", -"N. c #8C908B", -"O. c #8C8F8B", -"P. c #8B8F8B", -"Q. c #8B8E8C", -"R. c #8C8E8B", -"S. c #8B8E8B", -"T. c #8C8E8C", -"U. c #8B8E8A", -"V. c #8A8F8B", -"W. c #8A8E8B", -"X. c #8B8F8A", -"Y. c #8A8E8A", -"Z. c #8A8F8A", -"`. c #8A8D8A", -" + c #8A8D8B", -".+ c #8B8D8A", -"++ c #898E8A", -"@+ c #8A8E89", -"#+ c #898E89", -"$+ c #8A8D89", -"%+ c #898D89", -"&+ c #898D8A", -"*+ c #898C89", -"=+ c #8A8C89", -"-+ c #898C8A", -";+ c #898D88", -">+ c #898C88", -",+ c #888D89", -"'+ c #888D88", -")+ c #888C89", -"!+ c #888C88", -"~+ c #888C87", -"{+ c #878C88", -"]+ c #888B88", -"^+ c #878C87", -"/+ c #878B88", -"(+ c #888B87", -"_+ c #878B87", -":+ c #868B87", -"<+ c #878C86", -"[+ c #878B86", -"}+ c #868A86", -"|+ c #878A86", -"1+ c #878A87", -"2+ c #868B86", -"3+ c #868A87", -"4+ c #858A86", -"5+ c #868A85", -"6+ c #868B85", -"7+ c #858A85", -"8+ c #858B85", -"9+ c #858B86", -"0+ c #858986", -"a+ c #858985", -"b+ c #868985", -"c+ c #868986", -"d+ c #848985", -"e+ c #848A85", -"f+ c #858984", -"g+ c #858A84", -"h+ c #848984", -"i+ c #848A84", -"j+ c #848884", -"k+ c #858884", -"l+ c #848885", -"m+ c #848983", -"n+ c #848883", -"o+ c #838984", -"p+ c #838883", -"q+ c #838884", -"r+ c #838983", -"s+ c #838783", -"t+ c #838784", -"u+ c #838882", -"v+ c #828882", -"w+ c #828783", -"x+ c #828883", -"y+ c #838782", -"z+ c #828782", -"A+ c #828781", -"B+ c #818782", -"C+ c #818781", -"D+ c #828682", -"E+ c #818681", -"F+ c #818682", -"G+ c #828681", -"H+ c #808681", -"I+ c #818680", -"J+ c #808781", -"K+ c #818580", -"L+ c #818581", -"M+ c #808680", -"N+ c #808581", -"O+ c #808580", -"P+ c #7F8580", -"Q+ c #80857F", -"R+ c #7F8680", -"S+ c #7F857F", -"T+ c #80867F", -"U+ c #7F867F", -"V+ c #80847F", -"W+ c #7F847F", -"X+ c #808480", -"Y+ c #7F8480", -"Z+ c #7E847F", -"`+ c #7E857F", -" @ c #7F847E", -".@ c #7E847E", -"+@ c #7F857E", -"@@ c #7E837F", -"#@ c #7F837F", -"$@ c #7F837E", -"%@ c #7E837E", -"&@ c #7E847D", -"*@ c #7D837D", -"=@ c #7D847D", -"-@ c #7D847E", -";@ c #7E837D", -">@ c #7D837E", -",@ c #7D827D", -"'@ c #7C837C", -")@ c #7D837C", -"!@ c #7C827D", -"~@ c #7C837D", -"{@ c #7D827C", -"]@ c #7C827C", -"^@ c #7B827C", -"/@ c #7C827B", -"(@ c #7C817C", -"_@ c #7B827B", -":@ c #7C817B", -"<@ c #7B817B", -"[@ c #7B817C", -"}@ c #7A827B", -"|@ c #7A817B", -"1@ c #7B817A", -"2@ c #7A817A", -"3@ c #7B807B", -"4@ c #7A807B", -"5@ c #7B807A", -"6@ c #7A807A", -"7@ c #7A8079", -"8@ c #798179", -"9@ c #79817A", -"0@ c #798079", -"a@ c #79807A", -"b@ c #7A7F79", -"c@ c #797F79", -"d@ c #797F7A", -"e@ c #7A7F7A", -"f@ c #787F79", -"g@ c #797F78", -"h@ c #798078", -"i@ c #788079", -"j@ c #787F78", -"k@ c #788078", -"l@ c #797E78", -"m@ c #787E78", -"n@ c #787E79", -"o@ c #777E78", -"p@ c #787F77", -"q@ c #787E77", -"r@ c #777F77", -"s@ c #777E77", -"t@ c #777F78", -"u@ c #787D77", -"v@ c #777D78", -"w@ c #777D77", -"x@ c #767E76", -"y@ c #767E77", -"z@ c #777E76", -"A@ c #767D77", -"B@ c #777D76", -"C@ c #767D76", -"D@ c #757D76", -"E@ c #767C76", -"F@ c #767D75", -"G@ c #757D75", -"H@ c #757C76", -"I@ c #757C75", -"J@ c #767C75", -"K@ c #757C74", -"L@ c #747D75", -"M@ c #747C74", -"N@ c #747C75", -"O@ c #757B75", -"P@ c #757B74", -"Q@ c #747B74", -"R@ c #747B75", -"S@ c #747C73", -"T@ c #747B73", -"U@ c #737C74", -"V@ c #737B74", -"W@ c #737C73", -"X@ c #737B73", -"Y@ c #747A74", -"Z@ c #747A73", -"`@ c #737A74", -" # c #737A73", -".# c #737B72", -"+# c #727A73", -"@# c #737A72", -"## c #727B73", -"$# c #727A72", -"%# c #727B72", -"&# c #737972", -"*# c #727973", -"=# c #727972", -"-# c #727A71", -";# c #727971", -"># c #717A72", -",# c #717972", -"'# c #717A71", -")# c #717971", -"!# c #717871", -"~# c #717872", -"{# c #727871", -"]# c #717970", -"^# c #717870", -"/# c #707970", -"(# c #707971", -"_# c #707871", -":# c #707870", -"<# c #050505", -"[# c #6D6D6D", -"}# c #000000", -"|# c #666666", -"1# c #606860", -"2# c #506050", -"3# c #5D5C5D", -"4# c #202F2F", -"5# c #1F261F", -". + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @ ", -"# $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * = ", -"& & - & & & ; & > - & - ; - - & & & & & & & & & & & & & & , & & & & & - > & > & & & & & & - , & - > > & & & & & & & & & & & & & > & - & & & & & & & * = ", -"& & & ' ; & & ' ; & ' - & > > ) ; & ) > , & & & ) & & & & - & & & > > & ; > - & & ; - ) - & & & > ; - & & - ) ; & & - & ; ; & & & & ; & > > & & & ) * = ", -"- > & ) & ; & - > > & ; > & ; & - & > , > ) > & - & - > & , & & > - ; > ! ' & & > & & ! - & - & ; & - & - & - > & ) ' ) - & > ' & ' > ; & - > & ' & * = ", -"- - ! - ' & ' ' ) & ; ) - > & & ; & - ) & > - - > - - > & ' ! & ' > ! ; ) & & > > - > & > , > ) - ; & > ' - ! ; ) ! ' & - ' ) ' ) - & ; - - & & , & * = ", -") > - - ) ! ; ) ! ! , , - ' ) > - ' ) ) - ' ; & , & , ! ' ) ! ; & > & , - ) ) & ! & & ! - ' ! ! , - ' ! ; > - ' ' ' ! ' , - > , > ' ! ) ' , - ! > ) * = ", -") , ! , - ! ! , ) - ! , ! > > & - ) ; ; ' ; ) ! - , ! ' ) ' ' ' , > ; ! > > ) ) ; ' , - ) , , & > - > ! ! ' - ! ! ) ! > - ; ' ; ' ! , , ) ! ) ) ' ! * = ", -"' ! ) ! ; , - ' ! , ' ' ; , ! ! ' ' ! ! ! ! ' > - ! - ! , ' ! ! ) & ' ! ' ) ! ' , , ' ! ' - > > ! ! ' ) ! ! ' ! ! ' ' ! ! ! , - ! ' ) ' ! ' ) ! ! > * = ", -"' ! ! ! ! ' ! ' ) ! ) , ! ! ! ! ! ' ! ' ! ' ! ! ' ! ! ' ' , ! ' ! , - ! ! , ! ! ! ! ' , ! ' ) ! ! ' ! ' ! ! ! ! ) ! ' ' ! ! ! ! ' ' > ! ! ! ' ! ) ! * = ", -"! ~ ! ! ! ! ! ! ' ' ! ! ! ' ! ! ! ' ! ! ! ! ! ! ! ! ! ! ! ! ! ! ~ ! ! { ! ' ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' ! ! ! ' ! ! ! ] ! { ! ! ! ! ! * = ", -"! ! ! ! ! ~ ! ! ! ! ! ~ ] ! ! ! ! ~ ~ ! ! ! ! ! ! ! ! ~ ~ ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' ! ! ] ! ~ ~ ~ ! ] ] ! ! ! ! ! ] ~ ~ ! ! ! ' ! ^ ] ] * = ", -"! ~ ! ] ! ! ! ~ ! ! ! ! ] ] ! / ! ] ( ! ! ( ! ! ! ! ! ] ( ! ~ ! ~ ~ ! ~ ] ] ] ! ! ! ! ~ ! ] ] ^ ~ ( ! ( ! ^ ] ] ] ! ! ~ ~ ! ~ ! _ ] ] ! ~ ! ] ! ! ! * = ", -"^ ! ^ ] ~ ] ! ! ! ^ ! ^ ! / ^ : ~ ~ ] ! ~ ^ ! ~ ~ ^ ^ ! ! ^ / ^ ( ! ! ( _ : ] ^ ! ~ ! ! ! ! ! ! ] ! ^ ! ~ ^ ! ! ~ ! ] ( : / : _ _ ] ] ^ ! ] ! ] ! ! * = ", -"] ( ~ _ ^ : ^ ] _ _ ^ ^ ! ~ ! ] _ ~ / _ _ ~ ! ^ : ^ ] ] _ ^ ! : / ] ^ ! ] ( ] ^ ^ / ! ] _ ^ ~ _ : ~ / ~ ] ^ ] ! ~ ^ ^ / ] / ] ] ^ ~ ] ] : ] _ ! ] ^ * = ", -": ^ : _ _ ^ ^ ^ ! ] ^ ^ ! ^ ] / _ _ : ~ ~ / ~ : _ : _ ! : _ ~ ^ : ^ : _ ] / ~ _ ^ _ ~ ( ^ ^ ! ^ ^ _ _ _ ~ _ ^ ^ _ ] _ _ ~ ! ^ : _ _ ~ _ ^ _ ] ! ^ ^ * = ", -"_ ! ^ ] _ _ ^ _ ^ ^ : ! ^ ^ ^ _ _ _ _ : _ _ ~ _ : _ / ^ ^ _ / ^ _ ] / _ ~ ] _ _ ~ _ _ ~ _ _ _ _ _ ^ ^ _ ] : ^ ] / ^ ^ ~ ^ _ _ / : ^ _ ] : ^ ^ ^ : _ * = ", -"_ _ ~ ^ _ ^ ^ _ ~ ^ _ _ _ _ _ _ _ ^ ^ _ _ ^ _ ^ _ _ _ _ ^ _ _ _ _ ^ _ _ ^ _ ^ _ _ _ ^ ^ ^ ^ _ / _ _ ^ _ _ ^ ^ _ ] ^ _ ^ _ _ _ ^ ^ _ ^ _ _ ^ _ _ ] ^ * = ", -"< _ _ _ _ [ } ^ _ _ } [ [ _ ^ ^ } ^ ^ _ ^ _ _ ^ ^ _ _ [ _ _ _ _ ^ _ ^ ^ _ _ ^ } _ _ ^ _ ^ _ _ [ _ _ _ _ _ _ _ _ _ ^ _ [ ^ _ _ _ _ | [ [ _ _ ^ _ _ } * = ", -"[ [ [ < _ _ [ _ _ 1 _ 1 ^ _ _ _ _ _ 2 _ } ^ ^ _ _ < } _ _ _ _ ^ _ < _ ^ ^ [ _ } } [ _ | _ } _ _ } _ } _ _ _ _ _ ^ _ | } | _ _ [ _ ^ _ _ [ [ } _ ^ [ * = ", -"_ _ } _ _ [ _ _ [ _ _ _ } < [ } _ _ < < } [ < [ _ } } _ } } } [ < _ } [ _ < _ [ _ _ _ _ _ _ [ [ } < } _ [ < < } } _ < } } _ } _ [ } < } _ [ _ _ [ < * = ", -"< _ 3 [ [ } 4 [ } 3 } _ _ } 5 < 5 _ _ } [ [ } [ < < < [ } [ < < 4 5 [ 6 [ [ 4 < } [ 5 _ } _ < 5 < } [ } [ [ < [ < } < } } } } } 5 [ 4 _ 5 _ [ < _ 4 * = ", -"5 5 5 < < [ [ < < [ 4 < [ 5 < 6 < < } _ [ < < < 6 < } 5 4 } [ < } [ 5 } < < 5 < 5 < [ } < < [ < 5 5 5 } < 5 _ _ < < 5 } < 4 _ < _ < < 6 [ < < < < [ * = ", -"< < 4 [ < < 5 [ } < 5 5 < < 4 5 } < 5 5 < } 5 5 5 } < < } < 4 5 } < < 5 [ } < < 6 5 < < < < 5 } 5 5 < < 5 } [ < < < < < 5 } 5 5 < [ < < < } } < < 5 * = ", -"< < < 5 5 5 < < < 7 < 5 5 < 5 < < < 5 5 < 5 5 < < < 5 5 5 < 5 < < 5 < < 8 < < < 5 5 < 5 5 < 5 5 < 5 < 5 < < < < 5 < 5 5 < < 5 < < 5 5 < 5 < < 5 < < * = ", -"8 8 8 5 5 5 5 5 5 8 9 5 5 < < 8 5 5 0 5 5 5 5 5 < < 5 5 < < < 7 < < 8 0 5 < 5 5 0 5 8 < 5 5 8 5 5 5 5 5 8 < < 5 5 5 5 5 5 0 5 5 < 5 5 < 5 < 5 < a 5 * = ", -"5 5 5 a a 0 8 5 8 5 0 < 5 5 7 < 5 8 0 0 5 < 8 8 5 0 0 9 b 5 8 8 9 5 5 5 < 5 5 0 8 8 5 < 8 5 b 0 9 0 < 7 0 0 5 8 < 5 a 0 5 8 8 8 5 7 5 8 7 5 0 7 0 8 * = ", -"5 8 5 5 8 < 5 8 b 8 0 5 b b 0 8 b 5 < 5 5 0 5 8 b 8 5 5 0 b 0 0 5 8 8 8 8 5 8 b 8 8 0 8 5 b b b a 5 8 8 5 7 5 b 9 b 5 8 5 8 b 8 8 7 5 8 < 0 0 5 5 b * = ", -"b b 0 8 0 b b 0 b b b b b 8 b b 8 b b b b b 8 b 0 b 8 0 0 b b 8 b 5 b 0 b 8 5 b b 5 8 b 5 8 b c 8 b 8 8 0 5 8 b b b b 8 0 b 8 0 0 b b d 0 8 e 0 b 0 * = ", -"b b c b 8 8 b b d b 8 d b b b e 8 0 b b b b d 8 d 5 b b b b 5 b b b 0 b d 0 b 8 b 0 d 5 d b 0 b b 0 b b 8 d b d 0 b b b b 8 c d b b b 8 d b 0 d 8 b * = ", -"d b d d b b b d d b b b b b b b b b d d b b b b d b d b b b b d b b d b b b b d b b b b d b b b b d b b d b d b d b b d b b b d d d b b b b d b b b * = ", -"b b b f g b b d d b d b h b b b d i d b b i d d d d b f b i b d h d b b b b d b j d b d f d i h b f h b h d b b d d b b d d b d d b b d d d f d d d * = ", -"b f b i g d d k d d i d g f k b d i b g d i i g h d h f g i i i i b g f b k h i b i h h i b d d f b b b d d d k j h f i g k j b b b d j j i d b d d * = ", -"k d h k i k g f d d i d i i d i d k i f i k k k d f h i d d k h h f i i h f f k j h i d d d i i f i i f i i k g f j d h i d k i f i k b d b d f i i * = ", -"k i f i f k i i k g k k i f j k k j k k k k i k f i k k k j k i k j k d f k k f i k d k j k d i k k i d g d i k k k k b d k f i j f f k d k j d f k * = ", -"f k k k i k k k k k k k k i i k f k k k k k k k l d m k l f k k i k d k f f f k k k k k k k k k k k k k n k k k k m k k k i k k k k f k k f k k k k * = ", -"k k k k k k k k l k k k k k k k k l o k k k l k k k k k o k p k k p k k l k l k k p k k k k l k l k l k k k o k k k k l k k p k k k k k k k k k k k * = ", -"k o k o k k k k q l p k l k l o k r q o l s k o l k o k k k o k k k q k k l o l l o k k k o k k p r l k k k k t o k l o q o s l k k k k l o k p k k * = ", -"k l q t k k r l p l k q s k l k r t k s k t p o l k t l k l s o l r l t k q t o t s l q k l o s o k s r s t k p q k p k t l p l o o s q o q t s l q * = ", -"p q o s s p p s s s l s o s s q q l o o l t r q r q s r l r r t o p k s t l q s t s p s s r t p s t r t q o r t t r o r p s s r s s t p s s l t o r * = ", -"s r q p q s s s s s s s s l r s s s q s t t l s s s t s s s r s t p s s o s s t s s s t s q s s q s s q s s s s s s s s q q s r s s s s t q s q s s * = ", -"s s s r s s s q s s s s s s s s s s s s t s s s s q s s s s s s s s s s s t s s s s s s s s q s s s s s s s s s s s s t s s s s s s s s s s s s s s * = ", -"s s s u s s s v s s w x y s s s u s s s s s y y s v s s y s y s y s y s u s y v v y z u v s s v s y v y s s v u s s s u s s s s y u s s v w u v s s * = ", -"v u s y s u s v s u v u y u A A y x s z x s s v s A w z s u w v s u s A w v v y v w v v s y y s u s s s y s w A v v z A s v s s s u u y A z v w A u * = ", -"s s A x v y v s y y w w u A y w s v y v x w s s y v x s v y y x s A s y s v w v A u w s u s z u s z v s x u A z x y v z v w A A z x u w y y u v z y * = ", -"x x z A w w x x x x v y x x x x x v z A x x x x x x x A A A A w w z z x x y x w A A w w x x w x x u z v w x x A x w u x w z y x z A w A x x x x v v * = ", -"x x x x x x x x x x x x x x w x w x v x x x A w x x x x x x z x v x x w x x x x x y x x w x x z x z x x x x x x x x x x x x x x x x x x x x x x x z * = ", -"x x B C C x x x x B x B x C C B x x x x C x x w x C x x x x x x x x x x x B B x B C D C w x x x C x x x x x x x x x x x x w x B x D D C x w x x D x * = ", -"D x B x C C E C x x B B x x D x x F C B B B x C x C C B B x B B D C C E x B C B x B C B x B x B B C B x C D D x B x B x B B x x D x E x B x B x x D * = ", -"C x C B D D D C C C x x D C C C G D B x x G D B B B G E x D C C x x D B D H x D D x C x D B x B B x B F x D H D C x C E B D H D B C E B H x F C x C * = ", -"C G G D H D D D D D C G D C B F C G D B G C D D D B D D G G G C G B D G F C G G B F G F H G C G x G D D D E G D E F G F E B G D F G G G F F G G D G * = ", -"D F D G G D B G G G G G G G G G H D G G B D G G G G F F G D G D G G G G G D H G G D G G D G D D G D G G G G D G D D G G G D G D D H D H G G D G D G * = ", -"I G G G G G G G G G G J J D K G G I G K G I G G G D G G D D G I G I L G G K G G I G K I I K K K G G K G G G L G G D G G K K M I G G G J I G G G G G * = ", -"G N K K N N N N I N G G K N K G N G I N G G K N L I K G G K G I G G K I I G G G G I K K G I G N I G K N N G G I K N K G N N N G K K G I I N N G G G * = ", -"K K O N K I G N I N N K N N N P N I O K P P G K N G K K G Q N I K I N N I K G I I N O K N Q I K R I O K N O I I Q I R K G K R N I I K K Q P P K Q R * = ", -"N N O Q G I O N O N I K I N O N O N K N I R O O N N N I Q P O N O N G N N N O N N I I O O K R N N N O N I N N N I G Q N N I N I N N Q N N R N I K N * = ", -"O O N N N O N O N N O O O O O O O O O O N O O O N O O N O O O O N O N O O O O N N O O O N O N O O N O O O N O N N N N O O O N O N N N O O O O O N O * = ", -"S T S O O O O U O V O W N U N U V W U O S U O U O O O N O O N S W S N W N N O O O N O O O O O O T N N S O O O W N T O O S S W O V O U U O S T O X V * = ", -"U V W V V U V V S S O O U N S O S S U T S S O U O T S V S W S S O S O U O U S V S O S O O N O S S S U U S S S O U U U U S S U O O N V U V U V V T V * = ", -"S U S V Y V S S V O V V V V S V S Z V U O V S O V V U V V O S U V V V Y U U O V V U S ` V V O U O U S U O V V O V V O V V V U S V V V U S S V V O V * = ", -"V U V V Y V S Y .V Y V V V V V V V V V V V Y V U V S V S U V V Y S Y U Y V V V Y V V S V Y U V S V V V .Y V V V .V V U V Y Z Y V V S V .V Y V Y * = ", -"Y V V ..V Y Y +.Y V V V +.V Y V V ..V @.Y +.+.#.Y V V V V Y Y Y V V Y Y V Y Y V Y Y Y V Y V Y V Y +.Y Y V Y V +.V #.V V V Y V $.Y #.Y Y Y V ..Y V V * = ", -"V #.#.$.Y +.Y ..Y Y +.$...V Y Y $.+.V Y #.Y ..V Y Y #...Y #.#.V V Y #.Y #...V Y V $.#.V ....#.V ......#.Y +.#.V V Y #.Y Y ..V V ..Y #.Y V Y ..+.V V * = ", -"%.@.#.$.V +.......@.Y #.Y #.#.%.%...%...@...%...%.@.%.%.V %.#.Y %.%.Y V #...Y $.%.%.Y #.@.#.Y ..Y ........+.Y +.%.#.@.%.Y @...Y $.Y %.#.Y %...%.Y #.* = ", -"%.%.#.%.#...%.%.%.%.%.#.%.%.%.#.@...Y %...#.....Y Y %.#...%...%.%.%.%...%...#.....%...%.#...%...%.#...%.%.%.%.%...+.Y %.%.#.Y ..%.%.#.%.%.#.%.%.%.Y * = ", -"&.%.%.%.%.%.%.%.%.&.%.%.%.&.%.%.%.%.%.%.#.%.%.&.%.%.%.&.#.%.%.#...%.&.&.%.%.%.%.&.%.%.%.%.%.%.&.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.%.%.%.%.%.%.%.%.&.%.%.* = ", -"%.%.%.=.=.%.%.=.-.=.%.%.=.%.;.%.%.&.%.-.&.&.%.&.%.&.&.=.%.%.&.%.%.%.&.=.&.-.=.%.;.%.%.&.;.%.%.;.%.%.>.&.%.&.,.%.,.&.&.&.=.%.&.%.'.%.&.%.&.%.>.&.%.%.* = ", -"&.&.%.'.=.'.>.-.%.&.;.=.'.&.,.=.>.&.=.=.&.'.'.>.=.&.>.=.>.%.'.'.%.%.%.%.%.,.>.'.=.,.&.%.%.>.%.-.=.&.=.,.;.'.'.>.&.%.>.=.;.-.>.'.;.%.&.,.;.;.&.-.&.,.* = ", -"%.-.-.,.=.'.'.%.'.-.'.,.'.%.>.,.;.;.'.'.;.>.;.'.'.-.;.'.=.&.;.,.-.'.>.'.'.-.&.-.=.>.>.'.=.,.'.'.%.=.'.-.'.'.'.-.;.'.'.,.-.=.>.'.-.=.,.&.'.'.'.'.'.,.* = ", -",.'.'.-.'.;.'.,.'.'.'.'.;.,.'.'.'.'.'.'.'.,.'.'.'.'.'.'.,.'.'.'.'.'.'.'.'.'.,.'.-.'.'.'.-.'.'.'.'.'.'.-.'.'.;.-.,.'.'.'.;.'.'.'.'.'.'.'.'.'.,.'.-.'.* = ", -"'.).).'.!.'.'.'.'.'.~.'.'.).'.{.~.{.~.'.'.'.'.'.'.'.'.'.).'.'.'.{.).'.'.'.'.'.'.'.'.'.).'.~.{.).~.].'.'.'.'.'.'.).).'.'.).'.'.'.'.'.'.].'.).'.'.~.'.* = ", -"~.'.^.).'.'.'.!.).~.'.).).{.{././.~.].'.~.{.~.'.'.{.!.'.).].].'.).~.'.~./.{.'.'.].^.!.'.{.).~.'.).'.'.!./.'.~.'.!.'.'.~./.{.]./.].'.!.).'.^.'.{.^.'.* = ", -"~.).{.).~.'.].^.'.!.^.'./.^.~././.!.~.!.!.!./.'.).^./.~./.).~.'.^.^.{.{.~.^.].~.~./.).~./.^.~.~.!.~.{./.'.].).!.'.~.].).!.^.~./.].~.'.!.~.^.!.'.).^.* = ", -"{.!.^.).^.^.^.!.^.!.].'.~.!./.^.!.{.^.^.^.^.{.^.^./.!.^.^.!.^.^.!.!.).^.!.^.!.!.^.^.].~.!.].!.!.^.!.!.^.^.^.^./.^.^.).^./.^.!.^./.^./.].~.'.!.!.!.!.* = ", -"^.!.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.(.^.^.^.!.^.^.^.^.^.!.^.^.^.^.^.^.(.^.^.^.^.^.^.^.^.^.^.(.^.^.^.^.^.^.^.^.^.^.^.^.^.^.!.!.^.^.^.^.^.^.^.(.^.* = ", -"_.^.^.(.^._._.^.(.^.^.:.^.(._.^.^.<.^.^.(.^.<.^.<.^.(.^.(.(.^.(._.^.^.^._._.(.(.^.^.^.(.<.^._.^.(.<.(.(._.^._.^._.^._.(.^.^.(.^.(.^.<.(.^.^.^._.(.[.* = ", -"(._.^.:.(.<.[.(.^.(.}.[._.(.^.(._._._.(.:.<.(.[.(.^.}.<.[.(._.[.<._.|.}.^.(.^.}.<.[.(.(.[.:.[.<.(.[._.:.[.^.^._.}.(.(.^.^.^.:._.<.[.<.|.(.(.[.(.[.^.* = ", -"<.}.<.<.<._.}.<.<.<.}.<.}.<.<.:.(.[._.(.<.[._.}._.}.<.<.}._.}.}.^._._.}._.}.}.<.}.<._.<.^.:._.}.^.<.}.<.}.<.}.}.|.(._.^.(.:.<.^.<.<.[.<._._.|.<.<.}.* = ", -"<.}.<.}.}.}.}.<.}.}.}.|.<.}.}.<.<.}.}.}.}.}.}.}.}.<.}.}.}.}.}.}.}.<.}.}.<.<.<.}.}.}.}.<.<.<.}.}.<.}.<.(.}.}.}.}.|.<.}.}.<.}.<.}.}.}.<.<.}.}.}.}.}.}.* = ", -"}.}.}.1.2.1.}.1.}.}.3.}.1.}.}.<.4.}.3.}.}.}.}.}.3.3.}.<.1.1.2.}.4.<.}.5.3.6.}.1.}.1.}.}.1.}.1.}.}.1.4.}.}.3.}.1.5.4.4.}.<.3.3.3.1.}.}.4.2.}.3.<.<.}.* = ", -"4.1.}.}.}.1.3.}.1.1.3.4.}.}.}.}.}.}.4.1.3.4.1.}.}.4.3.4.}.7.1.}.4.}.4.1.}.1.3.}.1.}.4.7.8.3.3.4.1.1.1.1.1.}.3.4.}.}.9.3.1.}.3.1.3.}.1.4.}.4.1.}.1.}.* = ", -"0.3.1.1.}.0.4.4.1.4.4.4.7.9.4.4.1.1.3.7.8.8.4.7.4.4.0.4.7.8.7.4.3.4.4.1.1.3.1.9.8.4.4.1.3.4.7.4.1.3.}.7.1.3.1.4.7.7.4.3.4.3.8.4.}.4.4.7.}.1.4.1.1.1.* = ", -"4.7.7.7.4.7.4.7.3.1.4.4.7.7.4.1.7.7.4.7.1.7.4.7.3.4.7.4.7.4.7.7.7.4.9.4.7.7.4.7.7.7.7.7.7.4.7.4.4.4.4.7.4.3.7.4.4.4.7.4.9.4.4.4.3.4.4.4.4.1.7.7.4.4.* = ", -"4.a.b.7.7.7.7.7.7.c.b.a.c.7.c.7.c.4.c.7.4.7.4.a.7.4.7.7.7.a.b.7.7.a.4.c.7.c.7.a.4.7.7.d.7.7.7.a.b.e.7.7.7.4.c.e.d.4.4.7.c.a.7.7.7.7.7.e.4.7.7.b.4.c.* = ", -"e.c.a.a.a.d.a.7.d.4.a.f.d.c.7.d.7.7.a.e.d.d.a.c.7.d.d.a.c.a.d.a.4.4.7.f.7.d.7.a.7.d.b.7.7.7.c.a.7.7.f.c.d.c.e.a.7.c.c.a.7.d.7.a.a.a.7.4.f.7.d.7.7.d.* = ", -"a.a.d.c.d.d.d.a.d.c.d.7.a.d.d.a.d.d.7.7.7.d.d.g.d.a.h.d.d.d.d.a.7.7.a.d.7.d.a.d.7.d.d.d.a.d.h.a.d.c.d.h.7.d.d.d.d.7.d.d.a.d.a.d.a.d.h.d.c.c.a.7.c.d.* = ", -"d.d.d.h.h.h.d.h.d.g.d.d.d.d.d.h.d.a.h.d.d.h.d.d.i.d.d.d.d.d.a.d.d.d.h.a.a.d.d.d.h.d.d.d.d.d.d.h.d.g.d.d.h.h.d.d.h.d.h.d.d.d.d.d.d.h.i.d.d.h.h.h.d.d.* = ", -"h.j.k.d.h.j.h.j.h.d.d.d.l.d.h.d.l.l.d.m.d.h.l.h.h.h.n.d.l.h.d.h.k.d.k.h.d.d.d.m.d.d.h.k.h.j.m.k.d.h.h.l.h.d.d.k.h.d.h.d.h.m.l.d.l.k.d.k.h.l.d.m.d.m.* = ", -"k.k.h.m.j.h.l.d.m.j.d.j.m.h.j.o.j.h.k.m.k.m.n.j.j.o.d.d.j.m.h.n.o.d.m.o.d.h.h.k.h.j.o.d.h.d.l.l.j.o.h.j.d.o.n.m.k.k.m.h.d.j.h.j.k.h.j.j.j.h.l.j.j.d.* = ", -"o.h.n.o.n.o.o.o.j.m.j.j.h.h.m.j.o.o.j.o.o.j.h.o.o.j.o.o.k.o.h.h.o.o.o.j.h.o.m.j.n.m.h.j.o.j.o.h.m.m.n.o.j.j.o.m.o.o.j.j.j.o.o.o.j.o.n.m.o.o.o.o.n.m.* = ", -"o.o.j.p.o.o.o.o.o.o.o.j.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.m.o.q.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.m.o.m.m.o.o.o.j.o.o.o.o.o.o.o.r.o.q.o.o.o.o.o.m.o.j.o.m.o.* = ", -"o.o.o.s.o.r.r.r.o.r.r.r.o.t.u.r.o.o.o.t.s.o.u.o.o.o.o.o.o.r.o.o.s.r.o.o.o.o.t.u.o.o.o.o.r.o.o.s.o.o.u.v.o.o.o.r.r.r.o.w.v.r.o.r.o.r.r.r.o.o.t.r.o.o.* = ", -"o.t.r.t.s.v.r.u.w.w.r.x.x.t.w.v.v.x.o.r.r.r.w.o.v.s.o.w.o.w.u.r.u.u.w.o.o.o.w.r.u.u.s.x.o.s.r.v.r.u.x.w.s.s.w.w.s.r.v.v.r.u.r.o.r.s.s.o.r.u.u.r.t.r.* = ", -"u.x.u.u.t.x.t.x.u.x.w.x.u.u.t.u.o.s.s.v.x.t.w.v.x.x.x.v.w.x.v.x.r.v.v.w.t.w.u.s.o.u.u.w.v.w.r.x.t.t.o.t.r.v.x.x.v.v.x.u.u.x.t.u.w.v.w.v.x.w.w.x.x.x.* = ", -"u.x.x.v.x.x.x.x.x.x.v.u.x.v.x.x.w.x.x.v.x.u.x.u.x.x.w.u.x.x.x.w.v.x.x.x.x.r.x.x.x.x.x.w.x.x.x.r.x.x.x.x.x.x.x.x.u.r.x.x.x.v.x.x.x.u.x.x.x.x.v.x.x.x.* = ", -"x.x.x.x.y.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.y.x.x.x.x.y.x.y.y.z.x.z.A.y.x.x.A.x.x.x.x.x.x.x.z.x.A.z.x.B.z.x.z.z.x.x.y.z.x.z.x.z.x.x.x.x.B.y.x.x.x.B.x.z.* = ", -"B.z.y.A.C.A.y.x.B.B.A.z.C.D.C.E.x.C.D.C.z.A.B.z.D.y.C.y.D.D.x.x.z.D.x.C.z.A.z.z.z.E.E.A.B.B.x.D.x.x.z.A.A.A.x.z.E.D.D.A.C.x.D.y.x.x.B.E.A.E.x.x.A.x.* = ", -"B.D.A.x.D.C.E.D.E.D.z.A.B.C.E.B.z.A.C.E.E.E.B.D.D.E.D.A.D.E.B.C.A.z.D.D.B.x.x.x.E.D.E.z.A.E.D.y.A.z.x.x.D.A.z.E.E.B.A.z.A.D.D.B.E.C.A.B.E.D.D.C.y.C.* = ", -"E.B.D.E.E.D.z.E.A.E.E.B.E.E.B.D.E.B.E.E.E.E.E.D.E.D.D.E.E.B.E.E.E.E.E.E.E.D.B.E.E.E.E.E.C.D.E.E.E.E.E.B.E.C.E.D.E.E.C.B.E.D.E.E.B.E.E.E.E.D.C.E.E.D.* = ", -"E.F.G.E.E.E.E.E.E.E.E.E.E.E.E.D.E.E.F.E.E.E.E.E.G.E.G.E.E.E.E.E.E.F.E.F.E.E.F.E.F.G.G.E.E.E.E.E.E.E.E.E.E.E.D.E.E.E.E.E.G.E.E.F.F.H.E.F.E.E.E.G.E.E.* = ", -"G.F.G.E.H.G.H.E.H.E.E.H.I.J.E.E.G.E.E.K.G.H.I.K.E.E.G.H.E.G.E.F.G.G.F.H.E.E.F.E.H.E.L.K.K.G.G.I.L.L.F.H.E.F.K.E.E.E.H.G.H.G.F.G.F.G.G.J.K.G.G.F.F.K.* = ", -"G.G.F.H.I.F.F.H.I.L.J.H.E.J.E.G.G.E.K.K.I.H.I.G.K.H.H.H.F.I.G.F.H.I.L.H.G.F.H.H.I.H.K.L.F.J.H.G.G.G.J.I.H.H.I.L.K.I.I.F.G.H.H.G.G.J.H.H.H.J.H.K.I.H.* = ", -"H.I.I.H.G.I.H.I.I.I.I.I.I.H.G.I.I.H.I.I.I.I.H.I.F.F.I.F.H.I.I.I.I.I.H.I.H.I.I.L.G.I.I.I.I.H.G.I.H.H.H.I.I.I.I.H.F.I.G.I.I.I.H.I.I.H.I.H.J.I.H.H.I.H.* = ", -"I.H.M.H.N.I.I.I.N.O.I.I.I.I.I.H.M.I.P.I.I.I.I.I.N.O.I.I.I.P.H.H.I.I.P.I.I.I.M.I.O.I.I.O.H.I.O.I.H.I.I.H.I.I.I.I.O.O.I.H.I.I.I.M.I.I.I.I.H.I.I.P.O.I.* = ", -"I.I.I.M.I.O.P.I.M.I.I.M.P.O.M.O.O.I.I.I.I.O.O.I.O.M.I.I.I.M.Q.M.I.I.P.O.M.O.I.M.O.O.I.O.I.I.M.I.M.I.P.I.O.P.M.M.P.M.I.P.O.M.P.I.M.M.I.M.I.O.M.O.P.O.* = ", -"P.P.O.R.Q.R.S.P.M.R.P.P.O.O.O.O.O.P.I.I.P.O.M.I.O.I.M.M.R.P.P.M.P.P.O.P.S.M.O.O.S.P.O.P.S.P.R.M.M.P.P.P.P.P.P.O.P.O.P.O.P.R.P.T.P.M.T.P.O.P.P.Q.Q.P.* = ", -"S.P.S.O.P.P.S.P.S.M.P.S.P.P.P.P.S.S.P.P.P.S.S.R.S.S.S.P.P.P.P.P.P.P.S.S.P.P.S.O.S.P.S.P.P.P.P.P.S.S.Q.P.S.P.P.S.S.S.P.P.P.S.I.P.S.P.P.S.P.S.P.P.S.M.* = ", -"S.S.S.U.P.V.S.S.S.W.S.P.V.P.X.P.S.W.S.W.P.P.X.S.S.P.S.S.S.Y.U.S.W.S.S.W.W.U.W.S.S.Y.S.X.S.Y.P.P.P.S.W.U.X.S.P.S.Y.S.S.S.P.U.P.P.P.S.S.Y.S.W.X.W.P.S.* = ", -"W.S.Y.W.Y.Y.S.Y.Y.U.Y.S.Y.Y.S.S.Y.S.W.S.Y.P.W.S.S.S.U.Z.W.Y.W.Y.S.S.S.P.S.Y.X.U.S.Y.Y.Y.W.S.W.W.S.W.U.W.Y.W.S.S.W.S.P.S.S.Y.P.S.Y.X.W.S.U.S.Z.W.W.Y.* = ", -"W.Y.Y.Y.W.Y.U.`.U.Y.W.W.Y.Y.Y.S.U.Y.Y.U.S.Y. +U.U.W.Y.`.W.W.Y.W.Y.`.W.Y.U.U.Y.U.U..+S.Y.Y.U.Y.Y.W.Y.Y.Y.W.Y.U.W.U.U.W.W.U.U.Y.W.Y.Y.Y.U.U.W.Y.Y.Y.W.* = ", -"Y.Y.Y.Y.Y.Y.`.Y.`.`.Y. +`.Y.`.Y.Y.Y.Y.`.Y.Y.Y.U.Y.Y.Y.Y.`.Y.Y.Y.`.Y.Y.Y.Y.`.Y.Y.Y.Y.U.Y.`.W.Y.W.`.Y.Y.`.`.`.`.Y.Y.Y.Y.Y.Y.Y.Y.Y.`.Y.U.Y.Y.Y.Y.`.`.U.* = ", -"`.`.Y.`.++Y.++++`.`.@+Y.#+Y.Y.Y.@+$+++`.`.`.Y.@+Y.`.++@+`.++Y.Y.Y.`.`.Y.Y.$+%+%+`.`.`.`.&+Y.Y.@+Y.`.@+Y.++Y.&+Y.`.@+`.++`.$+++++&+Y.@+`.Y.&+Y.Y.`.@+* = ", -"@+$+%+#+&+%+`.`.&+Y.%+%+&+`.@+$+%+`.Y.%+&+$+&+&+$+%+%+`.`.&+Y.%+++%+`.$+&+`.$+Y.%+%+$+&+&+++`.++$+%+`.`.%+$+`.%+`.&+++Y.#+`.&+@+#+&+`.++$+@+&+`.#+%+* = ", -"`.%+@+%+%+%+$+++$+%+%+%+%+%+%+%+%+%+%+%+&+$+%+%+%+`.&+%+%+%+Y.%+$+`.`.&+%+#+%+#+#+%+%+%+%+%+%+$+%+`.%+`.%+&+%+#+$+#+%+$+%+&+%+`.$+%+%+$+`.%+%+`.%+$+* = ", -"%+%+*+%+%+%+%+%+%+%+*+%+=+%+%+*+%+%+%+%+%+%+*+*+*+%+%+%+%+%+%+%+*+%+%+%+%+%+%+$+%+%+$+%+%+%+*+%+%+%+%+%+%+%+%+%+%+%+-+%+*+%+%+%+%+%+%+%+%+%+%+%+%+%+* = ", -";+%+*+>+%+,+%+%+%+%+*+,+*+;+,+%+%+%+'+%+>+*+>+;+*+)+%+,+%+%+>+%+%+%+*+%+%+*+%+'+%+;+%+*+*+)+;+)+*+*+*+>+*+*+*+%+)+*+)+;+,+%+*+%+%+,+!+%+>+*+%+'+%+>+* = ", -")+'+;+!+;+,+,+*+*+*+)+!+)+;+%+>+!+;+*+)+%+'+)+%+*+>+%+)+>+!+!+%+;+*+!+;+)+!+*+,+;+%+'+)+;+!+)+,+*+>+*+*+'+>+*+,+>+!+;+)+>+,+!+>+%+*+,+,+)+*+>+*+*+!+* = ", -">+)+!+!+;+)+'+%+>+*+!+!+>+)+>+!+>+>+!+!+!+'+>+!+!+!+!+,+'+>+!+!+!+>+!+!+)+*+!+>+!+'+!+>+'+!+!+!+!+!+*+>+'+*+;+>+!+;+*+)+,+>+;+!+!+!+!+!+'+'+'+!+)+)+* = ", -"!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+* = ", -"!+!+~+~+{+]+]+]+]+~+~+^+{+!+!+!+!+!+!+^+!+{+{+/+{+~+{+!+!+~+!+{+{+^+~+~+{+!+]+!+!+!+~+~+]+]+!+!+!+/+]+{+{+!+!+^+!+!+~+~+(+!+!+!+!+{+{+{+^+]+~+!+~+~+* = ", -"^+(+]+!+/+{+(+~+/+(+_+!+!+~+^+/+{+(+/+_+(+_+_+~+]+~+(+!+~+(+]+]+(+{+_+_+]+^+!+!+_+_+^+/+!+^+(+~+_+^+(+(+(+^+!+!+^+/+(+^+_+/+~+^+~+^+_+~+{+{+!+{+^+]+* = ", -"^+~+]+{+_+(+(+/+(+_+_+^+_+_+(+_+(+~+_+!+_+(+^+_+_+_+(+^+^+^+_+_+{+^+_+_+_+{+(+^+^+~+_+(+_+_+/+_+_+^+/+~+(+_+_+_+/+~+^+_+^+_+(+/+(+_+(+^+/+^+_+_+^+]+* = ", -"_+:+_+_+_+_+_+^+_+_+_+_+_+_+_+_+^+_+_+_+_+_+_+_+_+:+_+_+^+_+_+_+_+_+_+_+_+<+_+^+_+_+_+_+_+_+_+_+_+_+_+_+_+_+^+_+_+_+_+_+_+_+_+_+_+_+^+^+_+_+_+^+^+[+* = ", -"_+_+_+[+_+[+_+[+[+[+_+}+:+|+[+:+_+:+_+[+1+2+_+2+:+_+_+2+_+[+_+_+_+_+_+_+_+:+_+_+_+_+[+:+_+_+_+_+_+[+_+_+[+2+_+_+_+_+:+_+[+:+[+}+_+:+2+[+_+_+[+:+_+_+* = ", -"1+:+_+_+:+:+2+[+_+1+:+_+:+:+}+3+[+:+_+1+2+_+3+_+:+|+_+2+[+2+:+_+:+}+[+2+1+:+2+_+}+2+_+2+3+:+}+[+2+[+2+_+[+2+|+}+2+[+2+}+[+1+_+2+2+1+2+:+_+}+}+[+3+:+* = ", -"}+2+}+|+}+:+}+}+|+|+2+3+}+2+}+2+}+}+}+}+2+[+[+2+2+|+}+|+}+}+2+2+}+}+2+2+3+2+}+2+2+}+}+2+}+1+:+}+|+2+}+3+2+|+2+}+_+}+2+2+|+2+2+2+2+}+|+3+}+2+2+}+}+2+* = ", -"}+2+}+}+}+}+}+2+}+4+2+}+}+5+}+}+2+}+}+}+}+}+2+2+2+2+2+}+4+2+}+4+}+}+}+2+}+4+}+2+}+}+6+}+}+}+6+}+}+}+}+}+}+}+}+}+}+2+}+}+2+}+}+}+}+}+}+}+}+}+5+2+}+}+* = ", -"4+7+4+}+2+}+5+5+}+5+4+5+}+}+}+8+}+4+4+}+}+4+5+9+4+}+5+4+}+4+5+7+5+}+4+}+5+5+}+}+9+5+5+9+}+4+}+}+5+5+4+}+}+7+5+}+4+5+}+5+5+7+2+4+}+2+}+}+}+4+7+4+}+4+* = ", -"5+}+7+5+7+4+7+7+5+5+7+7+7+0+a+}+5+4+7+4+7+4+5+}+4+0+}+7+4+7+4+a+5+0+7+a+4+0+5+7+5+b+5+7+c+7+7+4+7+5+5+}+0+4+0+4+5+}+7+5+7+7+7+5+}+5+5+c+4+7+7+}+c+4+* = ", -"4+7+7+5+4+7+a+7+4+5+b+7+7+5+7+a+4+0+a+a+a+7+4+a+7+7+7+5+a+b+4+7+4+a+7+7+7+7+a+a+4+7+0+7+b+7+7+5+a+a+}+4+4+7+7+a+7+b+a+7+7+7+a+7+7+4+7+}+7+7+b+a+7+5+* = ", -"a+d+a+7+7+d+a+7+a+7+7+a+a+a+a+e+a+a+a+7+7+a+7+a+a+7+7+a+7+d+7+7+f+a+a+7+a+7+a+7+7+a+7+a+7+a+7+g+7+7+7+7+7+7+7+a+7+d+7+a+a+7+e+7+a+a+a+7+a+7+a+a+a+7+* = ", -"a+g+f+f+h+7+a+f+a+f+a+d+f+g+a+d+d+h+h+a+7+e+d+d+a+a+f+d+f+d+f+a+d+f+f+a+7+i+d+f+a+d+a+d+h+a+f+f+a+a+d+a+7+h+7+a+d+a+d+d+a+d+h+f+e+a+d+i+h+a+f+d+a+a+* = ", -"d+f+a+h+h+d+d+d+f+h+a+d+h+h+h+d+h+f+f+a+h+f+d+d+h+h+f+d+a+a+d+h+a+e+h+f+f+h+f+h+h+d+a+a+a+h+f+f+d+d+h+d+h+h+h+d+d+h+h+h+h+d+h+a+f+d+h+a+h+h+f+h+f+f+* = ", -"j+j+h+k+h+h+j+l+d+h+j+f+h+h+h+h+l+l+d+h+h+h+d+j+h+h+a+h+j+f+h+h+h+h+h+h+h+h+h+h+d+j+h+f+k+j+l+f+f+h+h+j+h+d+h+h+j+h+j+k+h+d+h+j+k+h+h+h+j+j+j+h+k+h+* = ", -"h+j+h+j+j+h+h+j+j+m+j+h+h+h+h+m+h+j+j+h+j+j+h+h+h+h+j+h+j+j+h+h+h+h+h+j+n+j+o+m+h+j+n+h+m+j+h+n+h+h+m+h+n+h+h+j+j+j+h+h+j+h+m+m+m+h+h+n+h+h+m+h+h+h+* = ", -"n+o+n+j+m+j+h+j+n+j+n+j+j+m+h+n+p+n+j+q+j+h+m+r+p+j+m+h+h+q+o+h+n+n+j+h+h+n+m+j+r+h+j+j+m+j+h+j+h+h+h+h+m+o+q+h+j+o+j+j+m+j+q+m+j+o+q+h+n+r+o+o+h+p+* = ", -"j+p+j+q+p+p+p+r+n+n+p+n+p+n+q+n+p+n+q+p+p+j+m+p+p+n+j+n+q+n+p+p+p+q+j+p+n+n+q+p+j+p+p+h+p+p+p+o+p+j+q+j+p+n+n+p+o+p+n+o+q+p+p+p+m+p+j+p+p+q+p+p+p+p+* = ", -"p+p+p+p+p+p+p+p+q+n+p+p+p+p+p+p+p+p+p+p+n+q+p+p+j+p+p+p+p+p+q+p+p+p+p+q+p+p+p+p+p+p+s+p+n+p+p+n+p+q+p+p+p+p+p+p+q+p+p+p+p+p+p+p+s+p+t+s+p+p+q+p+p+p+* = ", -"s+u+s+s+p+v+p+p+s+p+s+p+p+p+s+s+p+p+p+p+s+p+p+p+s+s+p+p+p+p+p+u+p+s+s+p+s+p+p+p+p+p+p+s+p+p+w+w+x+p+u+p+p+p+p+s+p+p+p+p+p+p+p+p+s+s+w+x+p+x+s+s+u+x+* = ", -"p+y+p+u+s+w+s+w+s+s+z+z+s+x+u+w+s+u+v+y+u+z+s+v+p+p+y+p+w+z+p+p+u+p+w+p+x+v+s+s+p+p+u+p+s+v+u+v+w+u+s+w+u+p+y+s+x+p+s+p+z+p+y+w+y+y+p+z+p+p+s+s+z+w+* = ", -"w+v+u+v+v+w+y+u+s+p+w+y+s+s+y+z+z+s+v+y+z+z+s+v+v+x+y+s+z+v+z+v+z+y+z+p+s+w+s+z+v+u+w+z+y+w+u+y+w+z+u+v+w+z+v+s+z+y+z+w+y+v+x+u+s+v+s+y+z+x+v+z+x+v+* = ", -"y+z+z+z+w+z+z+v+y+z+z+z+z+z+z+z+w+z+y+z+s+s+z+z+v+z+z+z+z+z+z+z+v+z+z+z+z+p+z+z+z+w+z+w+z+z+z+z+v+v+w+z+z+z+z+z+z+w+z+z+u+z+z+z+y+z+w+w+z+z+z+w+z+z+* = ", -"A+z+z+B+z+z+z+z+A+z+z+z+z+z+z+z+z+z+z+z+z+B+z+z+z+z+B+z+B+A+z+C+z+z+z+D+z+z+z+z+B+z+A+z+z+D+B+z+D+z+z+z+z+z+z+C+z+z+z+z+z+A+z+B+z+z+z+z+z+z+D+z+z+z+* = ", -"B+z+B+B+A+B+B+B+A+D+E+z+E+C+D+z+E+A+E+F+G+G+B+G+F+B+G+D+B+z+D+C+B+z+z+G+B+A+D+G+A+z+C+A+z+z+B+z+z+B+C+A+z+A+A+B+C+B+D+A+D+A+A+A+B+D+B+G+B+G+D+C+B+z+* = ", -"E+D+F+E+F+G+F+G+E+E+F+z+B+E+C+G+A+C+z+C+G+G+z+C+C+G+E+F+D+C+G+A+G+C+z+B+C+E+D+C+E+B+E+D+B+B+B+G+A+C+C+z+B+E+G+B+B+B+G+E+E+E+E+C+C+F+C+C+A+E+G+F+E+D+* = ", -"E+A+F+E+E+z+E+E+E+C+B+E+B+F+E+F+E+E+F+E+C+G+E+C+E+C+C+E+E+E+E+E+C+C+E+E+E+D+E+E+E+E+G+G+E+A+B+G+E+B+D+E+E+A+E+C+E+E+C+E+F+C+E+F+E+E+E+E+E+E+G+B+F+E+* = ", -"E+E+H+E+E+E+E+H+E+C+H+H+E+E+E+I+E+E+E+E+I+E+E+E+E+E+E+E+E+C+E+C+E+E+I+E+C+E+E+E+E+I+E+E+E+E+C+I+E+E+E+C+E+E+E+H+E+E+E+E+H+E+E+E+E+H+J+E+E+E+C+E+H+E+* = ", -"H+E+H+I+K+E+K+I+H+H+L+M+E+E+E+K+I+H+E+I+N+E+L+H+L+K+H+E+E+E+E+E+H+M+H+L+E+H+H+E+E+H+E+H+E+H+I+M+I+H+I+H+L+H+H+I+H+I+L+E+M+E+I+E+H+I+I+H+H+M+M+H+E+N+* = ", -"O+E+I+I+H+H+I+H+L+H+O+M+M+L+I+N+I+M+H+I+K+E+H+M+M+N+I+M+N+H+O+M+M+M+E+E+H+M+H+H+O+I+H+E+I+M+I+O+O+M+E+O+O+N+M+H+L+M+I+E+H+M+H+M+N+I+I+N+H+M+M+E+M+O+* = ", -"O+E+O+O+K+M+M+E+K+O+O+O+K+M+M+H+M+M+O+O+O+O+N+O+O+O+O+O+K+O+O+M+N+M+M+O+O+M+M+M+O+M+I+O+O+M+M+K+M+M+N+M+O+O+O+O+K+M+K+O+M+K+O+M+N+O+M+I+M+N+H+M+O+O+* = ", -"O+M+P+O+O+M+O+M+O+Q+O+Q+O+O+M+O+O+O+R+O+O+M+O+O+M+O+S+M+M+O+M+O+P+O+P+O+O+O+O+O+Q+M+O+O+O+O+P+M+M+O+O+O+M+O+O+O+O+O+P+O+O+T+O+O+M+M+O+P+O+M+O+O+M+P+* = ", -"O+O+P+P+O+O+O+Q+Q+S+Q+O+S+O+O+T+P+Q+O+Q+P+O+O+T+Q+O+P+O+O+P+S+T+P+P+T+Q+P+P+S+O+O+O+O+P+O+O+Q+O+O+P+P+O+O+O+Q+Q+Q+S+Q+Q+O+O+O+Q+O+U+Q+S+O+O+S+O+O+O+* = ", -"S+V+P+P+Q+O+Q+V+O+S+Q+P+W+O+P+P+Q+P+O+S+S+P+W+P+P+O+S+Q+S+S+X+Q+S+P+O+Q+P+P+Q+S+W+X+Q+P+S+Q+P+S+O+P+P+O+Q+O+P+Q+P+Q+S+X+P+P+P+Q+O+P+P+W+S+P+Q+P+S+Q+* = ", -"S+Q+Q+S+S+O+Y+W+W+Q+W+S+S+S+W+W+S+W+W+Q+P+W+W+P+W+S+O+V+P+Q+Y+S+O+S+W+S+S+O+P+Q+Y+S+W+P+Y+S+S+Q+S+S+S+W+P+W+W+S+Y+W+S+S+S+Q+V+P+W+S+W+P+Q+P+W+S+S+S+* = ", -"Z+S+W+S+W+W+W+W+S+W+S+W+S+S+W+W+S+S+W+`+S+Z+W+`+S+`+W+W+W+S+W+W+S+S+W+W+ @S+S+ @W+S+W+W+S+S+W+ @W+W+S+S+S+W+W+W+W+W+W+S+W+W+W+`+W+S+W+W+W+W+S+W+W+W+* = ", -"W+ @W+W+Z+ @W+ @S+Z+W+.@W+W+ @`+ @Z+W+W+ @W+W+.@ @ @W+ @.@.@`+S+ @W+W+ @+@W+Z+W+W+W+W+W+ @W+ @ @Z+Z+W+W+Z+ @S+ @W+S+W+S+W+ @S+S+W+.@Z+ @Z+W+W+ @W+W+* = ", -".@Z+.@W+ @ @W+.@Z+ @ @.@W+ @.@W+W+ @Z+W+.@Z+.@.@Z+.@Z+Z+ @ @Z+W+W+.@ @.@Z+.@.@ @ @W+ @.@Z+ @.@W+ @.@ @W+.@W+W+ @ @Z+.@.@ @.@W+Z+ @W+ @W+Z+.@Z+Z+W+W+* = ", -".@.@@@.@.@.@ @.@Z+ @#@$@ @W+@@%@Z+.@.@.@.@.@.@.@.@ @.@.@.@ @Z+.@.@%@.@$@.@.@Z+.@Z+.@Z+.@%@Z+ @.@.@.@.@.@ @Z+%@.@ @.@.@%@.@ @ @.@.@.@.@.@Z+$@ @.@.@.@* = ", -".@%@.@.@%@.@.@.@.@%@%@.@%@.@.@.@%@.@.@.@&@.@%@%@.@.@.@.@%@.@.@.@.@.@.@%@%@.@.@.@%@.@.@.@.@.@.@.@%@.@.@%@.@.@.@.@%@.@.@.@.@%@.@%@.@&@.@%@.@.@.@.@%@.@* = ", -"&@.@*@=@%@-@%@;@-@%@;@;@%@&@&@&@;@-@%@;@-@%@;@&@>@-@%@.@&@%@;@.@;@>@.@.@;@%@>@%@*@.@.@*@>@%@.@%@.@.@%@;@;@%@%@>@%@>@-@%@&@%@%@.@%@%@.@.@%@.@-@.@&@.@* = ", -";@%@&@%@%@;@;@>@.@>@%@.@*@.@%@*@&@*@*@%@*@>@;@;@-@%@;@&@%@-@=@>@%@%@>@=@*@;@*@>@*@*@>@&@%@>@=@-@*@%@.@.@=@>@;@;@>@%@>@*@=@%@-@%@.@-@%@&@;@>@=@&@-@*@* = ", -";@>@;@*@%@*@*@*@*@>@*@*@>@*@*@*@>@*@;@;@*@;@*@*@*@*@>@>@*@*@;@*@=@*@*@>@*@=@*@%@;@*@>@;@>@*@*@;@-@>@*@*@*@>@*@*@*@>@.@*@*@;@*@;@*@%@>@&@>@*@*@*@*@*@* = ", -",@*@*@*@>@*@*@*@*@*@*@*@*@*@*@;@*@*@*@*@*@*@*@*@*@*@*@;@*@,@,@*@*@*@*@*@,@,@,@*@*@*@,@*@*@*@*@*@*@*@*@*@*@;@*@*@*@*@*@,@*@*@>@*@*@*@,@*@*@,@>@;@*@*@* = ", -"*@'@)@*@*@,@,@)@)@!@,@*@,@~@,@~@*@,@~@*@*@)@)@,@~@{@*@,@*@*@*@,@*@,@*@*@)@,@~@*@~@,@,@!@*@,@*@*@*@,@!@*@*@*@,@,@)@]@*@,@*@,@*@*@~@,@*@*@,@~@{@{@,@,@* = ", -"{@)@!@*@]@,@]@'@'@,@)@~@!@,@!@{@{@'@*@,@]@!@!@{@]@]@*@~@)@!@*@]@*@,@!@,@*@*@~@*@)@{@~@'@!@~@{@*@,@,@]@)@)@{@)@]@~@]@{@{@{@~@!@*@]@*@'@!@'@)@,@~@!@!@* = ", -"]@]@]@'@!@'@!@,@!@]@,@!@'@'@]@]@]@]@{@]@]@{@]@!@]@]@'@)@]@!@)@]@]@{@'@!@{@!@,@]@{@]@]@*@!@]@)@,@,@]@]@'@!@!@,@{@]@]@]@{@]@!@)@)@]@*@~@]@'@!@]@{@)@]@* = ", -"{@{@]@]@]@{@!@!@]@]@{@]@]@]@]@]@{@!@'@,@{@]@]@{@]@!@]@]@{@]@!@]@]@]@]@]@]@{@]@]@]@)@!@]@]@]@]@]@]@]@]@]@]@]@]@]@]@]@]@]@'@]@]@]@'@]@]@]@]@]@{@'@]@]@* = ", -"]@]@]@^@]@]@]@]@^@]@]@]@]@]@]@^@]@]@]@/@(@]@]@_@^@]@^@]@(@_@]@]@^@]@]@]@]@(@/@:@/@(@^@]@]@]@/@]@]@^@]@]@/@]@]@]@]@]@]@(@]@(@]@]@]@^@]@]@]@]@]@]@]@/@* = ", -"]@]@/@:@]@<@_@]@<@:@<@/@(@]@(@]@^@]@(@[@^@]@^@]@]@]@[@]@]@<@]@^@/@^@/@[@:@]@]@^@^@]@_@[@^@:@^@[@(@/@]@]@]@]@^@:@/@<@(@/@:@^@(@_@]@(@(@]@]@]@(@]@]@^@* = ", -"<@[@]@/@_@(@_@_@_@^@[@_@<@:@:@<@_@[@_@[@:@<@[@(@_@/@<@^@]@[@_@_@/@(@[@_@_@:@:@<@<@_@^@]@^@^@<@:@[@^@<@:@:@^@^@<@:@<@(@[@]@]@<@<@<@_@^@]@_@^@:@/@_@_@* = ", -"<@/@<@:@<@[@^@[@<@^@<@:@(@_@:@<@<@[@<@_@<@_@:@<@[@^@<@_@[@<@/@[@<@<@<@/@:@^@/@/@<@_@_@_@:@:@<@<@_@<@<@_@_@:@<@<@:@:@^@<@<@<@_@^@[@^@_@_@^@_@/@/@<@<@* = ", -"_@_@<@<@<@<@<@<@<@<@_@<@<@<@<@<@<@<@<@<@<@_@<@<@<@<@}@<@<@|@<@<@<@<@_@<@_@<@<@_@<@_@<@<@1@1@<@<@<@|@<@<@<@<@|@<@<@<@<@<@<@<@<@<@<@_@<@_@<@|@<@<@<@<@* = ", -"<@1@<@<@<@1@|@|@|@<@|@<@|@<@<@1@<@<@|@<@<@|@<@<@2@1@1@|@<@<@<@<@<@1@1@1@<@|@<@<@<@1@1@|@1@<@<@<@3@3@<@<@2@1@1@|@|@<@<@|@<@|@1@<@1@<@<@<@|@|@<@1@4@2@* = ", -"|@1@5@2@4@3@1@2@4@6@|@|@<@1@1@3@<@2@<@5@3@1@4@1@2@5@2@2@|@3@<@3@2@<@|@<@5@<@2@<@<@5@4@3@<@|@1@|@2@4@1@1@2@2@5@2@<@1@3@2@<@|@2@|@4@3@2@5@<@1@5@2@5@5@* = ", -"6@<@4@1@2@|@4@2@2@3@<@6@2@1@2@6@2@2@4@2@|@1@6@1@6@3@2@2@6@<@<@2@6@2@3@6@1@4@4@2@2@2@1@|@|@6@1@2@1@3@5@2@6@2@2@1@6@5@6@<@1@6@2@1@2@2@2@1@2@2@|@2@2@5@* = ", -"6@2@2@6@2@5@6@1@4@6@6@2@6@2@2@2@2@6@2@6@6@2@6@2@2@2@4@6@2@2@4@1@6@2@|@6@6@6@2@2@4@6@2@5@6@2@2@2@2@6@2@6@6@6@2@2@2@6@6@6@6@2@2@|@6@6@6@2@6@5@2@6@6@4@* = ", -"7@6@7@6@6@2@8@6@2@6@2@6@6@6@2@6@7@6@6@2@6@6@6@6@6@6@6@6@2@7@6@6@9@6@2@6@7@6@6@6@6@6@6@9@6@6@6@6@6@6@6@6@6@6@6@2@6@6@2@2@6@6@6@0@a@9@6@6@6@6@6@6@6@2@* = ", -"7@a@7@6@a@6@a@0@0@0@a@6@0@a@0@7@7@a@a@6@6@6@6@7@7@0@6@6@6@a@7@6@a@6@7@6@a@6@6@7@a@7@a@6@2@6@6@a@6@7@7@7@6@a@a@6@6@7@a@0@a@7@7@a@a@6@0@a@0@a@a@a@7@6@* = ", -"a@0@a@0@0@0@0@b@0@a@0@0@b@0@a@c@6@6@d@a@a@7@0@0@a@c@0@c@7@0@7@6@7@0@a@0@0@b@7@6@7@6@a@0@0@7@c@7@e@a@0@0@a@0@b@a@c@0@6@7@0@c@c@a@a@0@6@a@6@e@7@0@0@0@* = ", -"0@7@0@0@0@0@0@6@0@6@c@0@c@c@0@0@0@7@0@0@7@7@0@c@7@c@0@c@0@c@a@7@c@c@d@0@0@0@7@7@0@0@b@7@0@a@7@c@6@0@c@0@7@7@6@0@c@c@c@c@c@c@a@a@0@6@0@e@0@b@a@0@e@7@* = ", -"c@c@c@0@0@c@c@0@c@0@0@0@0@c@0@c@c@c@0@0@c@c@0@0@0@c@0@c@c@c@0@c@c@c@c@0@0@c@c@0@0@c@0@c@c@c@0@c@c@0@0@0@c@c@c@0@c@c@c@0@0@0@c@0@0@c@c@c@0@0@c@c@0@c@* = ", -"f@f@g@0@h@c@0@i@0@0@c@0@g@j@f@c@g@0@g@c@c@c@f@j@0@c@c@g@i@c@i@f@c@f@g@c@j@0@c@h@c@0@c@0@h@j@c@f@c@h@c@c@j@f@c@c@c@0@0@k@f@f@f@h@c@g@g@c@0@i@j@c@0@h@* = ", -"i@j@f@j@j@j@g@f@0@f@g@f@f@g@c@j@c@j@f@0@f@c@f@g@h@j@g@c@f@j@f@g@g@0@0@g@g@g@j@c@0@j@c@c@f@f@g@k@j@c@f@c@0@g@c@g@c@g@g@f@c@c@h@j@c@f@f@c@c@f@j@c@f@g@* = ", -"g@g@f@j@g@g@c@g@j@f@g@j@l@g@g@j@j@j@f@c@g@f@j@m@f@f@j@g@j@g@g@g@j@j@f@j@c@c@c@j@j@g@c@f@g@f@g@g@j@g@f@g@g@f@g@g@c@f@f@j@j@g@f@g@g@l@f@f@j@c@f@m@c@g@* = ", -"m@f@j@j@j@j@m@j@j@j@j@g@f@j@j@j@f@j@g@m@j@j@j@j@m@m@j@j@j@j@j@j@j@j@j@j@f@j@f@j@l@j@j@j@m@j@j@j@m@j@j@m@j@m@j@j@j@j@l@f@j@j@j@j@m@f@m@f@n@f@j@j@g@j@* = ", -"m@j@j@j@j@m@j@j@j@j@j@m@j@j@j@j@j@j@j@j@j@j@j@j@j@j@j@m@j@m@j@j@j@j@m@j@j@j@j@m@j@j@j@j@m@m@j@o@j@j@j@j@j@j@j@j@m@j@j@m@j@m@j@m@m@j@j@j@m@j@p@j@m@j@* = ", -"m@j@j@m@m@q@j@m@m@o@r@q@j@j@m@s@s@j@p@s@p@m@t@m@m@o@t@j@p@o@m@t@q@j@o@m@m@j@m@j@j@m@j@q@j@o@r@t@m@q@s@s@t@m@m@j@t@t@j@t@j@q@m@s@m@j@q@m@m@m@o@r@m@m@* = ", -"q@q@o@q@q@t@m@o@j@j@o@s@s@s@m@j@o@p@m@o@j@r@r@s@q@o@q@r@q@q@m@q@o@q@p@q@o@t@q@q@j@o@m@s@q@r@t@p@o@q@q@q@q@o@o@s@m@o@t@t@o@o@q@m@m@q@m@q@s@m@q@s@o@s@* = ", -"r@s@q@q@s@s@q@q@s@p@s@s@o@s@s@o@m@q@s@s@s@o@s@o@s@q@o@p@p@o@p@q@o@s@s@o@s@q@s@q@o@o@r@q@s@s@s@s@o@s@s@m@m@s@r@s@o@s@q@j@s@m@s@s@o@q@s@s@s@s@q@s@o@q@* = ", -"q@s@s@s@q@o@s@s@s@s@s@u@s@o@s@s@s@s@o@s@s@s@o@s@s@o@s@q@s@o@s@s@s@s@o@s@s@v@s@s@s@s@s@s@o@s@s@s@s@s@o@q@s@s@s@s@s@s@o@s@s@s@q@s@s@s@o@o@s@s@s@s@s@s@* = ", -"w@w@s@s@s@s@x@s@s@s@s@y@s@s@s@w@s@s@y@s@s@s@s@s@w@s@s@s@s@s@s@s@s@y@s@s@s@s@w@s@s@s@s@w@s@s@w@z@s@s@s@s@s@w@s@s@s@s@s@s@s@s@s@s@s@s@z@s@s@s@s@s@A@s@* = ", -"w@w@w@s@w@s@A@y@y@A@s@s@A@s@s@z@w@s@s@w@w@s@s@w@A@s@s@z@z@s@s@y@B@w@s@s@s@z@B@A@s@w@w@A@s@s@w@y@w@y@s@s@s@w@w@w@w@w@B@w@w@s@s@B@y@w@x@w@s@x@w@w@w@w@* = ", -"x@x@B@A@B@A@w@B@s@y@B@x@s@w@A@z@B@w@s@C@A@s@z@B@y@C@A@A@y@y@B@s@s@s@w@w@z@C@A@A@s@A@w@C@z@y@B@s@z@B@z@A@A@y@w@x@B@s@A@A@y@w@z@s@A@z@w@C@z@z@y@w@A@w@* = ", -"s@A@s@C@A@C@A@B@w@C@C@C@A@C@B@s@w@w@B@x@A@C@A@B@s@B@x@x@z@C@C@A@C@A@A@A@C@C@A@C@A@y@C@x@C@x@w@A@A@w@z@w@C@y@C@B@A@s@x@C@A@x@x@w@C@s@B@z@y@A@C@C@C@B@* = ", -"A@C@C@x@x@C@x@C@C@C@C@C@C@C@C@C@C@C@x@A@C@C@C@C@B@x@C@x@C@C@w@C@C@x@C@C@x@C@B@C@C@B@A@C@C@C@C@A@C@C@C@C@C@C@C@C@x@x@C@A@C@B@C@x@C@B@A@C@B@x@C@C@C@B@* = ", -"C@C@C@C@C@C@C@C@C@C@D@C@C@C@C@C@C@C@C@E@C@E@C@C@C@D@C@C@C@C@C@F@C@C@C@C@D@C@C@E@C@E@C@C@C@C@C@C@F@C@C@C@C@C@C@C@F@C@C@C@C@C@C@C@C@E@C@C@C@C@C@C@C@C@* = ", -"E@C@F@F@E@C@F@C@C@G@C@D@G@F@D@H@F@C@C@C@C@C@D@E@C@C@C@C@C@C@C@H@F@C@C@D@E@C@C@C@D@E@F@C@C@C@E@G@F@C@C@I@C@J@F@C@G@G@C@C@C@E@E@F@C@F@C@D@C@C@C@C@C@C@* = ", -"H@D@D@G@G@J@D@F@C@F@C@F@D@E@J@E@F@F@J@E@H@E@H@G@H@F@J@C@I@F@J@C@C@F@C@C@D@G@E@C@H@I@I@G@F@D@H@G@C@F@J@C@G@E@E@C@C@F@E@D@J@C@C@C@H@F@E@D@F@E@D@C@H@C@* = ", -"J@G@E@J@I@I@E@F@E@G@G@G@C@I@J@G@D@E@I@I@D@F@H@G@H@G@F@I@I@J@G@G@D@C@I@F@I@D@I@G@G@I@C@E@E@H@D@D@F@C@E@H@I@G@F@H@I@D@I@G@C@C@C@E@G@G@J@E@D@F@F@I@J@G@* = ", -"I@J@I@G@D@E@I@I@H@J@F@E@I@H@G@I@H@I@I@I@I@H@I@G@J@E@I@I@G@G@H@J@G@F@G@I@G@G@G@I@E@I@F@J@I@I@I@J@I@I@I@G@G@G@G@H@G@I@J@I@J@I@J@I@D@E@C@I@I@G@I@G@I@I@* = ", -"G@I@I@I@I@I@G@G@I@I@I@G@I@I@G@I@I@I@G@I@G@I@I@I@I@I@G@I@I@I@G@I@I@I@I@I@H@I@I@J@G@G@I@I@I@I@I@I@I@G@I@I@G@I@I@I@F@H@G@I@I@G@I@I@I@I@I@G@I@D@G@I@I@G@* = ", -"G@I@I@I@I@I@I@K@K@I@I@G@I@L@I@M@I@I@I@I@G@I@I@N@K@I@I@I@N@I@I@I@G@N@I@I@I@G@I@I@M@I@I@I@I@I@I@I@I@I@I@I@N@N@I@I@N@N@I@I@I@I@I@I@I@N@I@I@I@K@I@N@M@K@* = ", -"K@I@M@I@I@K@I@I@I@I@I@N@N@K@O@N@K@K@M@O@K@N@N@I@I@M@I@K@K@I@M@I@M@N@I@P@M@M@K@I@I@N@K@O@I@I@K@I@I@I@K@M@I@I@N@I@M@M@I@K@N@I@N@N@I@N@N@I@I@K@I@I@M@I@* = ", -"N@N@N@I@I@P@O@K@K@P@I@P@N@N@M@M@N@O@Q@K@N@O@K@N@K@M@M@N@K@K@K@P@N@I@N@N@K@R@M@N@M@K@M@K@K@K@M@P@I@M@M@N@Q@M@I@O@N@P@M@Q@O@N@I@I@I@P@M@I@K@N@I@I@O@K@* = ", -"R@N@N@M@I@K@R@K@Q@M@N@O@N@M@M@I@Q@I@R@M@N@O@N@Q@R@M@P@M@M@O@M@I@R@K@M@R@N@Q@Q@R@M@I@Q@M@Q@M@K@Q@M@Q@R@I@K@M@I@K@K@R@O@K@K@M@M@Q@P@N@Q@Q@Q@O@P@K@P@N@* = ", -"Q@Q@K@M@M@Q@Q@N@Q@M@Q@M@Q@Q@P@M@N@O@N@M@P@M@P@Q@M@K@M@M@Q@M@M@M@Q@Q@P@M@Q@Q@Q@K@M@Q@M@N@M@Q@R@M@Q@Q@N@M@Q@Q@M@N@M@M@Q@Q@M@Q@Q@Q@K@M@Q@Q@M@N@M@Q@M@P@* = ", -"M@Q@Q@Q@Q@Q@Q@Q@M@Q@Q@M@Q@Q@M@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@M@Q@Q@M@Q@Q@M@Q@Q@Q@Q@Q@Q@Q@M@Q@Q@Q@Q@Q@M@Q@Q@Q@Q@Q@Q@Q@Q@Q@M@Q@Q@M@Q@Q@Q@M@Q@Q@Q@Q@Q@Q@M@M@Q@* = ", -"S@Q@S@T@Q@U@M@V@Q@Q@M@Q@Q@V@Q@Q@V@V@Q@V@Q@V@M@Q@V@T@T@Q@T@Q@T@Q@Q@V@Q@M@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W@V@T@Q@S@T@Q@Q@Q@Q@M@T@Q@T@Q@T@Q@M@Q@Q@Q@Q@M@Q@Q@* = ", -"Q@Q@X@Q@V@Q@Q@X@X@X@Q@V@Q@Q@V@X@T@Q@T@T@T@Q@V@Q@Q@X@V@X@Q@X@Q@T@Q@T@V@T@X@V@T@V@Q@X@T@M@X@V@X@V@T@T@M@V@T@Q@Q@V@T@Q@T@U@V@S@V@Q@Q@X@X@Q@V@Q@Q@U@Q@Q@* = ", -"T@Q@Y@Q@X@T@Z@V@Q@T@Z@T@T@T@X@Q@V@X@V@Q@V@Q@T@X@X@T@Y@X@X@Q@V@V@T@X@V@X@T@V@X@V@V@T@T@T@Q@`@Q@V@T@X@X@X@ #V@V@X@X@Q@V@V@V@V@V@Q@T@Z@V@V@X@Z@T@Q@Q@Z@* = ", -"X@V@T@V@Q@T@T@X@X@Y@Z@T@X@Q@X@T@V@X@X@Q@Q@T@V@ #Q@V@T@T@X@Q@Z@Q@X@Q@V@X@V@ #Q@X@Q@Q@X@`@Y@Q@ #V@Q@X@T@ #V@X@X@V@`@V@X@T@T@X@X@Y@X@X@T@Q@V@V@X@X@X@V@* = ", -"T@X@X@X@X@ #X@V@T@ # # # #X@V@`@Z@ #X@X@X@ #X@ #X@T@Z@T@X@X@`@ # #X@X@ #X@ # #X@X@X@X@X@ #X@`@ #V@X@ #X@Z@ #X@Z@ #X@ #T@ #`@ #X@T@ #X@X@ #X@X@ # #V@* = ", -" # #X@ #X@ #X@ # # # #X@X@X@ #X@ # # # #X@ #X@X@ #X@X@`@ #X@X@ #X@ # #X@X@X@X@ #X@X@ # #X@ # #X@ # # #X@ # # # # #X@X@ #X@X@ # #X@ #X@X@ #X@`@X@ # #* = ", -".#.#X@X@ #X@+#X@+# #@#@#+#X@ #X@X@@# # #X@ #.#X@ # #X@ # # # #X@ # #+#+# ###.#$#@#X@X@ # #@# # # # #@# # #X@X@ # # #X@X@+# #$#$#@# #.# #X@$# #%#X@+#* = ", -"X@.#.# #@# # #+#+# # #@# # # # ###+### #@# #@#@###+#X@ #+#$# #.# #X@+#@#+# #+#@#+# #+# #+#+#@### # ###$# #+#X@+#X@+### #X@$# # # #+# ### # #$#.# #@#* = ", -"+#+#$#%#@#@# #X@ #$#@#X@@#$# #+# # #$#.###+#+#$# #X@$#@#@# # #$#+#@#+#X@$#$# #@# #+#+# #+#+# #+#@# #$#+#$#.#X@X@ # #$# #$#+#@# # #+# #@#.# #X@@# #+#* = ", -"$# # #$#$#+#@#@#$#$# #+#@#@#$#+#+#$# #$#$#$# #$#+#@#+#$#@# #+# #$#@#@#$#$#+# #$#@#+#@#@#$# #$#@#$#@# #@#@# #@#$#@# #+#@#$#@#$#$#@#@#@#$#$#$#@#$#@#$#* = ", -"+#$#@#+#&#$#*#*#@#$#*#$#$#+#$#$# #+#$#$#$#$#$#@#@#$#+#$#$#=#$#=#$#+#$#+#$#*#$#@#&#+#+#+#$#$#$#+#$#=#$#$#$#$#$#@#@#@#$#$#$#$#+#$# #$#=#@#$#$#&#$#$#*#* = ", -"$#+#$#$#=#$#+#$#@#$#$#=#@#@#$#$#=#=#$#$#$#$#$#$#&#$#$#$#=#$#$#$#+#+#$#$#@#$#&#*#=#=#=#=#$#$#$#$#$#=#=#$#+#@#$# #$#$#$#$#=#=#=#=#$#$#$#=#$#$#$#$#$#=#* = ", -"$#=#$#$#=#=#$#=#$#=#$#$#=#-#$#=#$#=#$#$#$#$#;#=#$#$#$#$#=#$#=#=#$#$#$#$#$#$#$#=#$#=#=#$#$#=#$#>#$#>#=#$#$#$#,#$#$#=#$#$#$#=#$#$#$#$#=#=#$#$#$#$#$#,#* = ", -"$#>#-#$#,#-#>#-#$#=#=#>#=#'#=#=#$#=#=#$#>#-#=#=#$#$#=#$#=#$#$#=#'#;#=#$#$#=#$#=#$#$#=#$#>#=#=#=#,#-#=#$#=#;#-#,#$#$#$#=#>#$#=#=#=#=#=#=#$#=#,#=#=#=#* = ", -"=#$#-#;#-#,#'#;#,#=#;#;#'#)#'#$#;#=#,#=#=#'#,#-#=#;#=#=#,#=#$#$#,#=#$#)#,#,#$#-#=#;#,#=#;#;#'#=#,#-#$#-#;#-#$#=#-#,#$#'#=#'#,#;#-#-#=#=#$#$#=#,#=#-#* = ", -"=#$#,#>#;#;#>#;#;#,#=#=#=#=#;#=#=#-#)#=#;#,#)#)#-#=#=#=#;#)#)#=#,#=#;#=#>#>#=#;#=#$#)#>#)#)#;#;#,#)#-#;#$#'#;#,#,#=#=#-#,#,#-#=#)#)#=#=#,#,#,#)#>#)#* = ", -",#)#)#;#)#,#)#)#'#$#)#'#;#)#)#;#=#)#)#=#;#)#=#,#'#=#=#'#)#)#)#)#)#-#-#=#,#,#>#=#,#,#=#,#;#)#-#)#)#)#=#=#-#>#)#;#=#)#,#'#,#)#)#;#)#)#)#,#)#'#)#;#)#-#* = ", -")#)#;#)#)#,#,#)#=#;#=#,#,#,#)#;#,#)#,#)#)#)#)#,#)#,#'#,#,#;#,#)#)#,#;#,#)#)#=#)#)#;#;#;#,#,#,#;#;#)#,#,#)#;#)#;#)#)#)#)#)#=#'#)#;#)#;#)#)#,#)#)#)#>#* = ", -")#!#)#)#)#)#=#)#)#)#)#)#)#)#~#)#)#,#)#)#=#)#)#;#)#)#;#)#)#)#)#)#!#)#)#;#)#)#)#)#!#)#)#;#;#;#;#,#)#=#)#)#,#)#)#)#)#)#)#)#)#)#)#)#;#,#)#)#)#;#)#)#;#)#* = ", -")#!#)#)#!#{#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#,#)#,#)#)#)#)#,#)#;#)#)#)#)#)#)#)#)#)#)#)#)#,#)#)#)#{#)#)#)#)#!#)#)#)#)#!#~#)#)#)#)#)#!#)#)#)#)#)#)#)#* = ", -"]#)#!#!#]#!#)#)#)#]#)#!#)#)#^#)#/#)#]#]#(#)#)#)#)#)#!#!#!#)#)#!#!#)#)#!#)#!#)#!#)#!#)#!#)#!#]#!#)#)#!#)#]#)#_#)#)#)#!#)#(#)#_#!#!#)#)#]#_#)#)#)#!#(#* = ", -"(#)#]#!#^#!#)#]#(#^#)#!#)#(#]#)#!#(#)#!#)#)#)#(#^#!#)#_#)#)#!#!#!#!#^#)#!#)#(#(#)#]#^#(#)#!#]#]#_#!#)#_#)#)#!#(#)#)#^#)#)#]#!#_#!#)#)#^#]#)#)#)#)#_#* = ", -")#)#]#]#)#^#]#!#)#)#)#!#/#:#!#:#!#/#)#:#^#:#/#_#:#)#_#(#)#_#(#)#)#(#^#)#)#)#_#)#!#(#_#!#]#!#^#]#)#]#]#)#)#_#!#]#^#!#]#^#)#(#!#(#!#!#:#^#:#)#_#)#:#(#* = ", -":#_#)#_#/#/#:#(#_#/#:#(#_#/#]#)#!#!#_#!#^#)#!#:#_#]#!#!#^#_#(#/#^#:#^#_#^#]#)#!#!#(#!#:#)#:#)#]#]#]#!#!#!#^#]#)#_#:#)#)#]#:#:#(#:#_#)#^#/#]#!#^#(#_#* = ", -"(#_#(#:#^#/#!#_#]#(#:#_#)#)#:#]#)#(#(#(#!#/#!#^#^#_#!#!#!#^#:#_#!#_#/#!#^#:#(#:#/#:#:#_#^#(#(#/#]#)#_#:#]#(#]#_#!#:#!#_#^#^#/#(#!#_#/#(#_#^#_#:#:#_#* = ", -"]#/#:#:#/#:#:#:#:#:#/#_#!#^#:#:#:#_#^#(#^#^#_#:#/#:#_#:#/#]#_#:#^#:#^#/#/#:#_#]#_#_#(#^#_#]#(#/#^#]#:#/#!#:#!#:#^#:#]#_#!#:#_#_#]#_#!#:#:#]#]#^#_#)#* = ", -":#^#:#/#:#_#:#:#:#:#_#:#^#/#:#:#:#^#:#:#/#/#!#/#^#:#)#:#:#^#_#/#:#)#:#:#:#:#:#^#^#/#:#:#:#:#_#^#:#:#:#:#:#:#:#(#^#_#^#:#:#:#)#_#:#_#:#:#^#_#:#/#:#^#* = ", -":#:#:#:#:#:#:#:#/#:#!#(#:#_#:#:#:#_#_#:#:#:#^#_#:#:#:#_#:#:#:#/#:#:#:#^#^#/#:#:#:#^#:#:#:#_#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#^#/#:#^#:#:#:#:#:#/#/#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* = ", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#* <#", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#[#}#", -":#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#|#}#", -"1#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#3#}#", -"% 4#@ @ @ @ @ @ 4#@ @ 4#@ @ @ @ @ @ 4#@ @ 4#@ @ @ @ @ @ 4#@ @ 4#4#4#4#4#4#4#4#4#4#4#4#4#@ @ @ @ @ @ 4#@ @ 4#@ @ 4#@ @ 4#@ @ @ @ 4#@ @ 4#@ @ @ @ @ 4#@ 5#"}; +char const * empty_xpm[] = { +"76 253 2 1", +" c None", +". c #595966", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................", +"............................................................................"}; diff --git a/hdspmixer/pixmaps/empty_2.xpm b/hdspmixer/pixmaps/empty_2.xpm index 31ff7b2..ce7fd0e 100644 --- a/hdspmixer/pixmaps/empty_2.xpm +++ b/hdspmixer/pixmaps/empty_2.xpm @@ -1,513 +1,406 @@ /* XPM */ -char * empty_2_xpm[] = { -"76 253 257 2", -" c None", -". c #D1E0E5", -"+ c #E7F6F9", -"@ c #F2FFFF", -"# c #FBFFFF", +char const * empty_2_xpm[] = { +"76 253 150 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", "$ c #FFFFFF", -"% c #C4CACB", -"& c #C7D5D9", -"* c #BECDD2", -"= c #B8C5C9", -"- c #AEBDC1", -"; c #B2BDC2", -"> c #B5B6B6", -", c #A9B5B9", -"' c #A2ADB2", -") c #A1ACAE", -"! c #AAAAAA", -"~ c #A6A6A6", -"{ c #A0A0A0", -"] c #9CA5A9", -"^ c #9F9FA0", -"/ c #939DA1", -"( c #A0A09F", -"_ c #9FA09F", -": c #A09F9F", -"< c #90928F", -"[ c #949A9B", -"} c #9B9C9B", -"| c #9D9E9D", -"1 c #999A99", -"2 c #969896", -"3 c #919391", -"4 c #959795", -"5 c #929592", -"6 c #869194", -"7 c #8E999C", -"8 c #8C969A", -"9 c #8A9395", -"0 c #848E91", -"a c #8C908B", -"b c #8E918E", -"c c #8C908C", -"d c #8D908D", -"e c #888B88", -"f c #8D8F8D", -"g c #8C8F8C", -"h c #8B8F8C", -"i c #8C8F8B", -"j c #898D89", -"k c #8B8E8B", -"l c #8A8E8A", -"m c #8A8D8A", -"n c #898C89", -"o c #898D89", -"p c #888C88", -"q c #848B8B", -"r c #888C87", -"s c #838884", -"t c #878C87", -"u c #858A86", -"v c #868B86", -"w c #878B87", -"x c #868A86", -"y c #858A85", -"z c #858985", -"A c #848984", -"B c #848883", -"C c #808880", -"D c #828882", -"E c #838883", -"F c #828686", -"G c #818782", -"H c #838783", -"I c #828782", -"J c #808680", -"K c #818681", -"L c #818581", -"M c #808580", -"N c #778082", -"O c #7E898B", -"P c #7D8689", -"Q c #7A8386", -"R c #7F8580", -"S c #D170D1", -"T c #C54CC5", -"U c #A837A8", -"V c #902F90", -"W c #757E81", -"X c #80887F", -"Y c #80857F", -"Z c #7F887F", -"` c #7D847D", -" . c #7F847F", -".. c #7E847E", -"+. c #7E827E", -"@. c #7E837E", -"#. c #7D827D", -"$. c #7D837D", -"%. c #7C827C", -"&. c #7B827C", -"*. c #7C817B", -"=. c #7A817A", -"-. c #7A817A", -";. c #7B817B", -">. c #7A807A", -",. c #798079", -"'. c #708070", -"). c #6E716E", -"!. c #717678", -"~. c #7A7F7A", -"{. c #797F79", -"]. c #787F78", -"^. c #727B7D", -"/. c #777E78", -"(. c #787E77", -"_. c #747C73", -":. c #767D75", -"<. c #767E76", -"[. c #777E77", -"}. c #777D77", -"|. c #767D76", -"1. c #747C74", -"2. c #757C75", -"3. c #757B75", -"4. c #747B74", -"5. c #737B74", -"6. c #747B73", -"7. c #727972", -"8. c #737B73", -"9. c #717971", -"0. c #707870", -"a. c #6D7679", -"b. c #6C7274", -"c. c #686E71", -"d. c #70786F", -"e. c #707060", -"f. c #616669", -"g. c #696D6A", -"h. c #6D6E6D", -"i. c #6F6F6F", -"j. c #646B6D", -"k. c #666966", -"l. c #626562", -"m. c #5C6365", -"n. c #595F61", -"o. c #5F685F", -"p. c #5B605B", -"q. c #5E615E", -"r. c #506050", -"s. c #494F51", -"t. c #545A5C", -"u. c #5A5C5A", -"v. c #5A5D5A", -"w. c #555A55", -"x. c #565956", -"y. c #575A57", -"z. c #555855", -"A. c #535654", -"B. c #545754", -"C. c #525552", -"D. c #535653", -"E. c #515451", -"F. c #515251", -"G. c #505350", -"H. c #4D5254", -"I. c #50534F", -"J. c #50584F", -"K. c #4F584F", -"L. c #4C504B", -"M. c #4F544F", -"N. c #4D524D", -"O. c #4F524F", -"P. c #4E514E", -"Q. c #4F504F", -"R. c #4D504D", -"S. c #4B504B", -"T. c #405040", -"U. c #464A4A", -"V. c #494E4E", -"W. c #4D4E4D", -"X. c #4C4F4C", -"Y. c #494E49", -"Z. c #4B4F4B", -"`. c #4A4E4A", -" + c #4A4D4A", -".+ c #494C49", -"++ c #494A49", -"@+ c #484B48", -"#+ c #444843", -"$+ c #474C47", -"%+ c #464A45", -"&+ c #474A47", -"*+ c #464946", -"=+ c #454A45", -"-+ c #454945", -";+ c #424842", -">+ c #434645", -",+ c #454645", -"'+ c #444744", -")+ c #414641", -"!+ c #434743", -"~+ c #424542", -"{+ c #414441", -"]+ c #404340", -"^+ c #3E4142", -"/+ c #6B236B", -"(+ c #531B53", -"_+ c #4D194D", -":+ c #471747", -"<+ c #3C3E40", -"[+ c #40423F", -"}+ c #40483F", -"|+ c #3B403B", -"1+ c #3F443F", -"2+ c #3E413E", -"3+ c #3F423F", -"4+ c #3D413D", -"5+ c #1E2120", -"6+ c #2D3030", -"7+ c #363A39", -"8+ c #393B39", -"9+ c #3E3F3E", -"0+ c #3C3F3C", -"a+ c #393D39", -"b+ c #3B3F3B", -"c+ c #373C37", -"d+ c #363A36", -"e+ c #303F30", -"f+ c #333434", -"g+ c #333433", -"h+ c #303730", -"i+ c #242728", -"j+ c #2A2C2D", -"k+ c #2F2F2F", -"l+ c #212E2E", -"m+ c #222425", -"n+ c #202720", -"o+ c #3B143B", -"p+ c #0F1010", -"q+ c #1B1C19", -"r+ c #121212", -"s+ c #0F1510", -"t+ c #170817", -"u+ c #100F0F", -"v+ c #07090A", -"w+ c #0A0A0A", -"x+ c #0D0D0D", -"y+ c #0E0E0E", -"z+ c #0F0F0F", -"A+ c #0B040B", -"B+ c #01070E", -"C+ c #040404", -"D+ c #050606", -"E+ c #070707", -"F+ c #060606", -"G+ c #030303", -"H+ c #000000", -"}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+n+", -"d.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.k+", -"( ( ( ( ( ( ( ( ( ( ( ( ( ( : : : : ( ( : : : : : : : : : : : : : : : : : : ( ( ( ( ( : : : : : : : : : : : : : : ^ _ _ _ _ ^ ^ : ^ ^ ^ ^ : { { { : i.F+", -"( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ { { : i.F+", -"( ^ Z Q.k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+k+k+k+k+k+k+6+k+k+k+k+o.^ { { : i.F+", -"( ^ Z Q.K.K.Q.Q.}+J.T.P.K.1+Q.Q.Q.T.)+J.T.W.K.)+Q.Q.Q.T.}+K.T.W.K.}+Q.Q.Q.T.)+K.T.Q.K.}+Q.Q.J.T.Q.K.1+Q.Q.W.T.}+}+T.T.T.T.T.K.T.}+R.T.Q.}+}+{ { { : i.F+", -"( ^ Z Q.).k.).l.I.y.l.v.A.k.p.l.q.y.q.q.q.q.F.l.p.l.q.k.z.p.k.k.q.l.).k.q.q.p.y.k.k.k.q.k.q.p.k.v.l.q.q.).q.k.l.q.l.q.D.k.k.q.l.l.u.h.E.P.~+{ ( ( : i.F+", -"( ^ Z Q.Z.w.L.E.R.B.B.S.N. +x.D.P.P.$+w.#+G.R.-+ +Y.&+=+N.M.Y.u.G.C.R.I.E.z.N.*+N.A.G.X..+z.w.G.@+$+X.A.G.&+{+M.$+L.>+P. +M.D.*+Y.w.X.A.{+d+_ ( ^ ^ i.F+", -"^ ^ Z Q.q.@+0+>+1+E.>+4+1+3+R.`..+N.$+=+)+C..+P.]+*+ +-+S.a+2+X.P.]+3+4+2+w.;+a+Y.]+'+2+O.-+ +>+4+E.=+-+*+C.$+$+N. +{+P. +Y.M.K.E.|+!+{+&+g+_ ^ ^ : h.F+", -"_ ^ Z P.y.$+Y.{+-+2+4+M.B.)+P.!+2+=+C.=+S.*+$ $ $ $ $ $ D.B.G.$ $ y.>+Y.E..+$+D.$ $ $ b+A.P.$ $ $ O.!+X.E.O.'+N.;+N.>+&+P.$+N.E.a+E.R.#+!+~+_ ^ _ ^ i.F+", -"_ _ Z Q.q.B.I.P.z.P.y.0+-+R.C.D.2+Y.Y.E.)+`.$ $ $ $ $ $ K.$+ +$ $ '+.+M.R.X.M.!+$ $ $ `..+ +$ $ $ C.a+~+X.-+ +=+$+#+3+R. +$+2+$+=+4+*+ +>+9+^ : ^ ^ i.C+", -": ^ Z Q.l.N.E.2+)+X.P.Y.N.a+X.w.*+M.$+$+#+D.~+.+X.$ $ S.=+E. +$ $ B.z.C.B.`.$+)+$ $ $ $ *+$ $ $ $ @+w.P.M.{+N.1+Y.#+3+X. +$+)+Y.w.@+!+'+~+[+: | ^ : i.F+", -": ^ Z Q.p.@+@+D.M.P.d+@+M.G.x.A.&+-+=+$+#+&+R.O.$ $ &+R.$+S.c+$ $ P.]+;+P.M.=+Y.$ $ $ $ .+$ $ $ $ {+w.X.b+*+Z.E.$+Y.'+&+{+#+;+2+$+-+$+#+*+g+: : : | i.F+", -"^ | Z Q.w.!+B.>+N.'+ +S.=+$+]+N.d+N.Y.S.)+C.O. +$ $ P.)+1+N.-+$ $ R.`.1+u.C.N.!+$ $ &+$ .+$ ~+$ $ &+E.R.A.@+~+M.;+A.X. +Z.$+$+b+)+!+`.@+*+,+: ^ | ^ i.F+", -"_ | Z Q.q.{+*+O.M.@+ +y.M.-+.+&+]+D.E.M.$+O.&+$ $ -+X.&+=+v.;+$ $ .+ + +a+A.N.$+$ $ ~+$ $ $ $+$ $ M.z.X.M.*+`.!+N.$+&+8+)+-+`.4+M.=+D.N.0+8+^ : | ^ h.F+", -": | Z Q.O.`. +M.v.&+Y.E.N.~+X.N. +N.M.1+Y.&+$ $ $ $ $ $ M.E.R.$ $ $ $ $ $ `.`.!+$ $ A.$ $ $ B.$ $ 4+$+O.E.G.G.M.#+2+>+X.C.w.=+M.2+)+N.y.8+0+: | ^ ^ i.F+", -": ^ R Q.X.Y.]+A.'+P.>+Y.X.*+&+]+X.d+N.Y.S.~+$ $ $ $ $ $ )+1+M.$ $ $ $ $ $ u.K.N.$ $ P.&+$ @+-+$ $ N.@+E.L.D.Y.)+M.!+z.P.Y.Y.$+$+a+{+>+ +~+2+^ | | ^ i.F+", -"^ | +.R.l.M.w.&+$+@+]+$+-+$+{+'+4+2+M.B.1+P.;+2+#+D.=+P.@+#+Y.!+P.C.P.A.z.C.Z.)+w.!+Y.E.@+@+A.A.O.R.a+C.X.P.]+M.O.)+`.E.P.)+N.;+N.!+*+P.~+2+| ^ : | i.F+", -"| ^ +.W.E.E.#+X.=+$+v.;+N.O..+S..+b+C.N.$+ +X.>+x.2+X.$+$+Z.P.A.N.O.*+Z.-+G.$+$+c+{+&+X.2+M.$+C.P.!+$+3+0+X.A.1+)+)+]+G..+$+0+P.P.2+1+=+O.j+| | ^ ^ h.F+", -"| ^ Z K.C.*+a+z.v.N.$+$+N.$+O.*+.+Y.4+c+C.R.R.!+0+'+3+3+Y.Y.)+3+)+G.@+.+A.&+=+#+'+!+ +.+G.@+2+*+.+N.Y.>+-+&+-+$+a+S..+@+c+$+-+*+Y.4+M.L.9+]+| ^ ^ | i.F+", -"| | Z K.E.$+y.P.@+*+Z.$+)+~+&+'+{+R.=+S.$+M.`.A.!+P.D.R.)+)+-+!+$+X.*+ +R.$+=+M.'+N.M.@+9+]+!+C.'+M.p.@+R.E.Y.Y.1+&+]+-+O.`.S.1+3+|+=+$+[+{+^ | | | i.F+", -"| : Z K.G.O.(+_+:+:+:+:+:+:+:+:+:+_+U M.=+ +`.G.q.0+!+R.$+;+N.Y.0+@+O.M.=+#+Y.N.$+Y.u.*+ + +*+O.$+#+-+8+3+ +R.;+M.-+Y.'+$+M.P.P.M.#+I.I.2+,+| | ^ | i.F+", -"| | Z Q.P.X.V V V V V V V V V V V V :+#+1+0+!+&+2+]+!+Y.Y.1+$+=+G.R.3+E.;+-+=+N.X.B.Y. +'+R.G.E.N.v.Y.2+&+4+@+a+;+O..+M.E.S.N.*+Z.Y.;+Y.,+[+| : | | i.F+", -"| | Z K.P.C./+V S T T T T T T T T o+t+M.u.X.-+P.~+C.'+w.#+d+$+a+&+X.3+{+O.#+a+M.%+#+E.p.~+0+ +R.E.-+b+*+&+P.Z.)+1+$+`.D.G.$+%+w.#+|+M.)+*+k+| | | | i.F+", -"| | Z Q.p.`./+V V V V V V V V V V o+t+)+@+1+#+D..+v.$ $ $ Y.`.E.O.$ ]+P.$ y.=+M.)+#+R.R.@+ +]+&+]+N.*+&+x.X.M.M.N.Y.!+N.X.)+N.=+-+)+=+4+ +0+| | : } i.F+", -"| | Z K.B.!+/+V V V V V V V V V V o+t+)+-+&+*+&+4+$ {+v.d+$ `.`.$ X.&+$ X.#+=+D.]+~+ +$+b+N.0+P.@+-+'+'+N.R.`.N.$+4+P.A.Z.)+$+E.N.#+|+R.]+++| | | } i.F+", -"| | Z Q.D.$+/+V V V V V V V V V V :+t+Y.&+-+R.>+G.$ ]+-+-+$ 3+$ $ $ $ $ $ *+M.=+$+A.a+.+f+a+Y.-+1+~+M..+$+E.P.1+D.Z.D.3+=+B.Y.M.M.z.y.X.,+8+: } ^ | i.C+", -"| } Z Q.L.P./+V T V V V V V V V V :+t+)+Y.&+>+!+~+$ O.C.$+$ `.0+$ 2+*+$ X.Y.Y.$+a+@+8+N.'+c+N.u.B.$+N.`.N.8+&+;+N.a+&+R.A.Z.-+z.N.M.=+`.E.8+} | | } i.F+", -"| } Z Q.C.w./+V V V V V V V V V V o+t+Y.G.0+2+'+*+$ *+-+$+$ 8+&+$ .+*+$ @+$+1+y.=+'+]+.+ +*+X.2+X..+R. +O.O.&+$+B.Y.{+@+&+)+S.$+b+B.C.!+'+[+| | | | i.C+", -"| | Z Q.v..+/+/+V V V V V V V V V :+t+Y.$+E.!+.+@+$ @+P.Z.$ ~+ +$ -+ +$ E.@+1+D.)+R.>+ + +$+$+{+R.d+R.`.P.!+D.M.Y.N.'+P.R.N.w.#+N.=+1+S.8+8+| } | } i.F+", -"} | R P.G.G./+V T V V V V V V V V o+t+-+`.@+G. +C.P.$ $ $ )+N.{+$ 2+D.$ 2+X.=+=+M.-+P.G.*+0+1+{+C.!+O.v.$+X.M.$+Y.1+@+~+)+1+K.=+)+2+P. +8+++| | } | i.F+", -"| } Z Q.A.*+/+V /+V V V V V V V /+:+t+1+-+&+O.$+P..+4+*+$+;+ +.+X.N.3+D.*+X.)+M.z.A.*+.+4+N.!+*+-+N.#+E.*+ +N.$+a+3+&+B.#+M.S.S.4+2+4+&+{+8+| } | } i.F+", -"| } Z Q.p.`./+o+t+t+A+A+A+A+A+A+t+A+t+#+-+]+C.G.{+O.8+M.!+S.)+8+u.@+D.N.O.4+N.)+1+~+E.&+X.B.#+!+O.2+{+~+-+'+'+Z.=+!+@+>+`.|+#+a+w.1+z.~+]+0+} | } } i.F+", -"} } Z Q.y.N.t+H+H+H+H+H+H+H+H+H+H+H+H+)+Y.=+&+~+D.-+*+1+=+)+S.R.X.|+.+a+O.-+$+;+D.S.G.C.~+b+]+b+E.)+P..+O.Y.X.M.|+$+D.-+'+N.1+4+D.w.~+-+]+[+} } } | i.F+", -"} } Z Q.x.C.Y.=+S.O.'+$+Y.~+B.*+C.=+M.$+2+1+Z.O.X.a+R.-+D.C.1+)+G.2+@+c+*+@+N.$+E.2+$+C.0+G.{+O.B.$+{+-+ +]+&+Y.O.=+O..+N.E.a+N.|+D. +v.@+2+| } } } i.F+", -"} } Z Q.w.Z.%+G.N.)+N.)+@+d+*+$+@+b+#+2+Z.x. +&+E.`.2+N.=+M.]+`.~+C.2+&+.+M.$+S.{+!+`.*+E.X.M.2+-+S.y.X.R.O.-+B.Y.c+w.N.0+#+$+!+Y.@+`.R.8+,+} } | } i.F+", -"} } Z Q.x.%+8+Z.2+B.S.K.1+P.&+.+E.d+;+;+S.D.Y. +.+.+z.R.M.4+Y..+1+&+E.b+E.`.=+a+$+@+b+*+'+*+&+~+C.M.)+G.a+G.-+S.)+8+y.&+ +4+Y.3+&+M.C.Y.{+9+} } } } i.C+", -"} } Z R.q.1+!+~+)+E.Y.$+a+N.P.]+{+$+w.f+!+ +E.X.~+[+-+~+=+a+P.Y.S.G..+X.@+)+=+#+@+$+`.0+~+G.-+G.'+#+'+.+>+!+Y.Y.;+R.b+!+E.Z.M.2+O.;+1+)+W.8+} } } } i.F+", -"} } Z Q.l.)+R. +R.'+D.Y.S.C.{+X.X.)+M.M.3+{+)+*+.+.+.+$+a+=+$+#+.+&+'+u.{+{+N.)+b+2+M.&+d+3+3+C.b+;+!+3+'+2+)+|+2+a+4+*+)+c+z.p.P.$+$+P.{+[+} } } } i.C+", -"} } Z Q.v.Z.@+{+)+ +J.D.)+)+!+{+`.*+N.Z.M.P.&+~+Z.>+@+Y.$+w.M.=+X.X.G. +@+S.|+M.|+Y.=+z. +X. +0+M.S.M..+R.v.-+$+$+!+N.=+#+L.M.-+-+L.c+N.{+d+} } } } i.F+", -"} } Z Q.w.)+~+Y.#+=+1+E.;+#+]+-+~+N.S.Y.b+.+b+G.*+ +-+z.S.N.E.)+|+~+4+E.!+N.Y.N.$+ +G.2+.+z.*+G.D.a+M.2+B. +v.N.S.y.Z.$+!+#+a+1+Y.S.;+I.{+9+} } } } i.C+", -"} 1 Z P.k.4+(+_+:+:+:+:+:+:+:+:+:+_+U Y.0+M.#+@+.+E.S.O.C.$+=+S.4+A.3+@+D.Y.=+2+Z.&+-+-+ +G.'+~+#+Y.8+~+.+&+N.|+N.P.&+'+|+B.`.C.E.w.E.@+b+8+} } } } i.F+", -"} } R P.l.v.V V V V V V V V V V V V :+1+3+]+]+.+&+q.b+!+N.$+)+N.Y.0+@+G.O.=+#+Y.E.1+z.X.2+.+R.0+Z.N.p.R.@+~+S.$+S.)+b+'+M.`.b+4+y.$+b+)+X.g+} 1 } } i.C+", -"} } Z Q.x.C./+V S T T T T T T T T o+t+|+4+&+@+Y..+2+3+!+Y.Y.1+$+=+G.R.3+E.;+=+2+z.'+!+D.O.~+@+P.0+X.Y.@+.+a+D.#+#+4+~+`.P.L. +N.Z.#+$+)+>+d+1 1 } } i.F+", -"1 1 X Q.G.=+/+V V V V V V V V V V o+t+)+D.X.O.C.~+$ +O.$+=+y.$ &+$ z.C.&+a+Y.$+-+E.b+P.0+B.Y.v.M.R.y.S.Y.2+x.Y.M.O.x.C..+#+$+C.)+N.N.!+0+8+} 1 } 1 i.F+", -"1 } Z W.l.&+/+V V V V V V V V V V o+t+#+!+)+.+3+2+$ $ 0+M.1+$ $ O..+ +G.2+Y.C.!+N.`.{+ +Y.E.E.'+1+2+@+ +C.X. +!+;+x.-+*+Y.4+-+;+#+y.O.$+2+9+} 1 1 1 i.F+", -"1 1 Z Q.p.Z./+V V V V V V V V V V :+t+w.D. + + +*+$ $ 2+)+Y.$ $ R.$ +P.$ &+S.$ b+C.]+]+u.)+ +&+C.$+)+G..+.+-+Y.;+-+.+.+'+Y.S.$+-+-+ +R.d+{+1 } 1 1 i.F+", -"1 1 Z Q.v.)+/+V T V V V V V V V V :+t+Y.a+.+R.p.R.$ ~+$ S.$ P.$ +$ X.Y.*+$ $ w.z.@+{+-+E.Y.Z.]+v.d+M.R.R.-+Z.=+!+ +z.&+C.!+Y.-+d+M.O.Y.0+8+1 1 1 1 i.F+", -"1 1 R Q.u.C./+V V V V V V V V V V o+t+C.w.~+*+*+X.$ {+$ $+$ {+$ '+$ R.Y.X.$ $ $+)+&+8+'+ +-+D.&+-+.+&+~+S.&+{+S.$+!+~+@+E.;+-+N.Z.*+.+3+3+g+1 1 1 1 i.F+", -"1 1 .Q.R.!+/+/+V V V V V V V V V :+t+=+=+1+G.R.~+$ ]+$ $+$ 3+$ *+$ `.2+E.$ $ =+b+{+!+X.R.1+1+O.!+R.N.~+N.]+)+=+;+Y.*+]+P.)+1+;+Y.c+]+&+]+9+1 1 1 1 i.F+", -"1 1 +.Q.l.X./+V T V V V V V V V V o+t+N.g+$+G.M.x.$ P.Y.$ Z..+$ @+$ *+S.$ B.$+$ E.S.2+N.]+~+P.M.@+ +.+0+P.N.`.M.2+D.$+{+-+E.=+M.S.~+!+0+.+8+1 1 1 1 i.F+", -"1 1 +.Q.v.)+/+V /+V V V V V V V /+:+t+D.Z.E.]+`. +2+=+M.a+G.Y.*+b+.+.+8+-+#+=+=+1+E.E.{+P.8+P.'+P.!+a+y.*+C.R.G.0+N.!+{+w.S.a+#+Y.C.@+.+[+8+1 1 1 1 i.F+", -"1 1 +.W.q.>+/+o+t+t+A+A+A+A+A+A+t+A+t+;+4+2+1+N.`. +R.Y.=+;+C..+M.~+*+ +'+P.a+2+Z.P.)+{+2+2+z.'+b+Z.~+-+2+G.-+Y.)+|+E.&+~+M.=+Y.C.)+{+R.8+f+1 1 2 1 i.F+", -"1 2 +.Q.E.Y.t+H+H+H+H+H+H+H+H+H+H+H+H+y.b+~+ +*+*+)+D.*+=+2+'+~+R.R.X.|+ +b+M.!+&+!+z.S.O.C.!+b+)+b+G.{+P. +G.Y.Y.N.4+.+#+=+E.$+$+M.`.{+*+9+2 1 1 2 i.F+", -"1 1 +.W.v.@+`.E.*+`..+.+x. +*+O.2+E.~+)+N.E.X.E.P.8+P.!+X.!+`.3+!+X.G.]+~+]+!+-+4+`.X.X.3+2+R.2+0+E.*+G.&+0+P.X.X..+E.0+D.;+N.E.a+M.0+C.'+ +1 1 1 1 h.F+", -"1 2 +.Q.E.b+'+&+Y.'+@+`.=+$+E.*+O.E.=+b+2+{+E.!+P.p.@+S.N.$+Y.]+@+~+'+E.X.X.|+4+b+*+@+#+P.Y.C.y.D.S.~+0+R.z.-+M.|+N.~+@+.+1+)+S.$+8+Q.C.g+~+1 2 1 2 i.F+", -"1 1 +.W.C..+)+*+@+O.$+P.$+|+*+Y.'+S.$+Y.N.]+C.*+X.#+E.y.D.#+$+4+R.~+*+-+R.-+K.-+Y.X..+0+{+.+A.X.2+#+a+y.)+B.!+#+Y.Y.&+A.Y.d+D.4+$+1+C.Z. +8+1 2 1 2 i.C+", -"2 2 +.Q.B.N.&+A.N.~+X.-+S.$+M.!+`.-+$+1+L.~+O.{+.+Y.C.!+$+$+X.X.3+D.!+O.!+`.4+C.*+0+@+1+A.'+M.'+ +`.*+&+{+X.c+S.Y.X.{+C.@+Y.#+]+)+Y.@+X.*+k+1 2 1 2 i.F+", -"1 2 +.W.A.`.Y.E.N.`.S.d+v.;+~+E.R.a+N.$+L.X..+!+.+X. +&+)+;+*+X.R.R.A.=+3+1+=+=+$+>+%+E.P.)+M.'+.+d+*+*+.+b+-+4+S.w.@+&+M.Y.M.#+M.{+)+I.[+g+2 1 1 2 i.F+", -"2 2 +.Q.B.*+3+x.a+X. +D.S.]+{+M.P.!+c+Y.X.*+.+.+E.~+X.$+=+2+*+X.O. +p.-+>+4+=+N.c+~+3+-+{+ +O.E.y.)+P.@+#+&+%+1+`.b+@+D.G.Y.4+N.=+M.]+X.0+,+1 2 2 2 i.F+", -"2 1 +.W.Q.z.b+.+]+B.3+X.w.`. +&+a+'+=+Y.$+>+Z.O.-+E.X.$+=+M.=+!+~+P.`.$+@+N.D.N.b+]+A.Z.-+!+O. +=+-+L.#+y.y.;+=+$+;+0+P.C.S.D.Y.N.-+G.~+*+0+2 1 2 2 i.F+", -"2 4 +.Q.q.*+(+_+:+:+:+:+:+:+:+:+:+_+U 2+-+3+*+.+*+M.X.O.C.$+=+S.4+A.3+@+D.Y.#+M.X.M.C.$+=+Z.4+A.3+G.X.O.C.$+=+S.4+A.3+&+-+=+N.Y.N.$+3+P.{+k+2 2 2 2 i.F+", -"2 2 +.W.A.y.V V V V V V V V V V V V :+)+`.*+*+$+*+q.b+!+R.$+)+N.Y.0+@+G.O.=+#+q.b+!+N.%+)+N.Y.0+&+q.b+!+R.$+;+P.Y.0+@+O.D.Y.-+#+#+N.'+[+8+g+2 2 2 4 i.C+", -"2 4 +.Q.k.G./+V S T T T T T T T T o+t+1+$+#+]+]+>+2+3+!+ +Y.1+$+=+G.R.3+E.;+=+2+]+!+ +Y.1+Y.=+G.R.2+3+!+Y.Y.1+$+=+G.R.2+M.=+#+;+N.~+.+Z.{+8+2 2 2 4 i.F+", -"2 2 +.W.Q.y./+V V V V V V V V V V o+t+&+#+#+*+R.X.$ $ $ $ -+1+.+a+$+G.a+C.N.w.%+-+@+{+$ '+@+~+#+2+4+M.A.~+N.!+4+#+C.=+P.M.;+-+)+N.C.O.D.O.~+4 4 2 2 i.F+", -"2 4 +.Q.W.2+/+V V V V V V V V V V o+t+;+~+~+&+*+@+$ P. +1+$ C.*+x. +P.P.x.y.L.`.=+`.!+$ O.A.3+x.D.M.G.C.!+D.2+P.{+$+ +2+-+S.#+=+4+I.X. +&+~+2 4 2 4 i.F+", -"4 4 +.Q.X.`./+V V V V V V V V V V :+t+Y.Y.-+b+'+@+$ a+@+y.$ -+@+$ $ X. +a+$ $ $ ~+d+P.$ A.$ $ $ $ 8+&+>+$ $ $+S.=+$ $ &+a+D.C.#+Y.S.=+N.[+,+4 4 2 4 i.C+", -"4 4 +.Q.y.Z./+V T V V V V V V V V :+t+=+1+E.S.C..+$ $ $ $ N.!+$ X.@+$ E.@+$ )+S.$ #+@+$ z.O.2+~+$ Y.-+$ O.X.$ #+$ ~+z.$ )+%+.+=+2+N.#+%+@+9+4 4 4 4 i.F+", -"4 4 +.W.u.-+/+V V V V V V V V V V o+t+2+N.P.#+R.C.$ 0+q.$ Y. +$ $ $ $ P.~+$ |+1+$ 2+#+$ .+X.$ $ $ 4+=+$ -+G.R.)+$ $ $ $ N.]+1+~+O.N.)+#+,+f+4 4 4 4 i.F+", -"4 4 +.Q.E.v./+/+V V V V V V V V V :+t+;+S.=+$+{+E.$ '+M.)+$ !+$ G..+P.E.b+$ S.#+$ P.~+$ O.$ 3+G.$ =+C.$ A.v.$ )+$ -+-+~+C.#+=+)+=+)+L.L.*+g+4 4 4 4 i.F+", -"4 4 +.W.x.G./+V T V V V V V V V V o+t+)+`.@+w.R.E.$ X.$+-+# %+X.$ $ $ -+'+$ $ $ c+~+3+$ ~+$ $ $ $ {+P.@+$ $ &+1+Z.$ $ $ C.S.D.Y.N.-+G.~+*+8+4 4 5 4 h.F+", -"4 4 +.T.W.X./+V /+V V V V V V V /+:+t+C.!+D.3+P.!+E.X.$+=+M.*+~+!+P.`.&+$+$ C.N.b+{+A. +#+~+I.`.*+-+R.'+y.x.!+=+$+!+4+P.-+=+N.Y.N.&+1+P.[+g+5 4 4 4 i.F+", -"4 5 +.Q.l.v./+o+t+t+A+A+A+A+A+A+t+A+t+M.$+M.@+!+M.'+.+Y.b+S.)+@+X.v.G.~+`.$ N.E.#+]+.+2+*+I.~+Z.d+E.N.@+D.!+'+=+$+2+X.A.I.Y.Y.#+#+N.'+2+8+g+4 5 4 4 h.F+", -"4 4 +.W.q.{+t+H+H+H+H+H+H+H+H+H+H+H+H+a+S.'+c+O.u.~+b+)+w.!+4+$+8+$+O.c+E.L.B.-+#+&+{+$+#+$+{+'+4+0+N.C.]+R.~+|+;+E.-+X.*+1+B.;+N.;+.+L.]+0+5 5 4 5 i.F+", -"4 5 +.T.A. +.+O.G.y.C.=+;+$+`.&+.+R.N.N.)+=+S..+P.8+P.4+N.1+)+X.M..+X.`.2+Y..+E.-+{+y.@+E.1+1+P.2+@+8+$+@+P.Y.C.4+@+D.4+C.)+N.C.&+]+,+`.1+$+4 5 4 5 i.D+", -"4 3 +.Q.p.c+w.R.4+w.M.1+B.-+y..+0+N.$+1+N.E.{+W.*+.+'+=+p.$+4+Z.S.G.C..+~+S.!+7+1+'+]+]+7+$+>+-+@+ +D.{+{+{+&+L.>+Y.2+`.{+{+{+~+*+0+~+[+a+0+5 4 4 5 i.D+", -"5 4 +.T.q.Y.E.S.M.C.$+=+S.4+A.3+&+D.Y.#+G.*+Y.E.b+ +d+8+$+-+4+]+M. +.+E.P.{+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+5 5 5 4 i.D+", -"5 5 '.T.v.=+q.0+!+R.$+;+N.Y.0+@+O.M.=+#+b+@+G.X.&+P.]+c+N.#+Y.*+M.G.@+@+-+E.h+s+s+s+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+B+z+z+B+z+z+z+z+z+z+z+y+5 4 5 5 i.D+", -"4 5 '.Q.q.@+2+]+!+Y.Y.1+Y.=+G.R.3+E.;+-+*+b+.+8+*+X.*+D.=+;+$+=+#+R.@+{+P..+T.j k l l l l l l l l l l l l l l l l l l l l l l l l l l l l j 5 4 5 5 i.D+", -"5 5 '.T.B.O.M.R.2+M.4+#+M.y.A.v.2+!+Y.=+-+)+B.&+&+{+&+!+S.S.Z.b+Z.0+E.*+ +'+T.j j j j j j j j j j j j j j j j j l l l l l j j j j j j j j j 5 5 5 5 i.D+", -"5 5 '.T.M.R.E.X.O.C.$+=+S.4+A.3+@+D.Y.;+M.'+{+&+R.z.y.$+N.4+)+R.y.{+.+E.P.R.h+h+h+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+o.5 5 5 3 i.D+", -"5 3 '.T.D.E.p.0+!+R.$+;+N.Y.0+@+G.N.$+#+@+*+*+'+D.I.~+$+N.a+Z.&+Y.@+b+D.*+*+K.K.T.Q.K.}+Q.Q.J.T.Q.K.}+Q.Q.Q.T.}+}+T.T.T.T.T.K.T.}+Q.T.Q.)+}+3 5 3 5 i.D+", -"5 3 '.T.x.S.N.#+A.-+O.y.C. +]+*+'+-+y.N.$+'+N. +'+~+&+#+1+S.-+X.Y.E. +D.!+N.E.S.)+~+$+#+@+`.#+ +X.=+@+C.*+P.E.=+a+2+{+E.~+N.v.$+Z.O.Y.Y.0+0+3 5 5 3 i.D+", -"5 3 '.T.E.S.2+A.!+ +Y.1+$+*+O.X.2+E.)+-+!+`.=+#+C.#+B.3+S.1+'+Y..+E.*+)+y.$+E.1+1+P.2+@+8+&+@+R.Y.C.2+$+D.4+C.)+N.C.&+]+-+`.1+$+$+M.%+P..+]+3 3 3 3 i.D+", -"3 5 '.T.y.S.(+_+:+:+:+:+:+:+:+:+:+_+U b+-+P.y.&+E.E.X.O.C.$+=+S.4+A.3+&+D.Y.#+E.S.M.C.$+%+S.4+D.2+@+D.Y.#+E.X.O.C.$+=+S.4+A.3+&+D.Y.=+%+#+,+3 5 5 3 i.D+", -"3 3 9.T.u.G.V V V V V V V V V V V V :+#+$+D.a+!+3+p.0+!+R.$+)+N.Y.0+@+O.M.=+;+q.0+!+L.$+)+N. +0+&+I.I.=+-+p.0+!+R.$+)+N.Y.0+@+O.M.=+#+l.@+0+3 3 5 3 i.D+", -"3 3 +.W.q.'+/+V S T T T T T T T T o+t+2+S..+@+-+P.2+3+!+ +Y.1+$+=+G.R.2+E.;+-+2+]+!+ +Y.1+$+%+I.R.3+G.)+#+2+3+!+ +Y.1+$+*+O.L.3+G.)+=+d+{+,+< 3 3 3 i.D+", -"3 3 +.T.q.0+/+V V V V V V V V V V o+t+M.]+R.Y.N..+$ ~+ +N.M.w.]+O..+#+.+*+)+S.|+$+E.D.N.$ Z.I.%+E.~+L.$ $ $ $ )+$+`.X.B.2+Y.]+v.-+$ %+I.@+0+3 3 3 3 i.D+", -"3 < +.Q.x.~+/+V V V V V V V V V V o+t+#+!+>+a+O.'+$ P.)+M.Y.b+]+$+ +@+v.&+A.E.Y.B.$+@+I.$ P..+]+Z.$+@+$ !+.+!+$ #+-+]+]+.+0+1+1+$ !+&+Z.2+4+< < 3 < i.D+", -"< < +.Q.q..+/+V V V V V V V V V V :+t+)+3+!+`.x.X.$ '+D.Y.L.1+$ $ -+R.$ $ $ $ 1+2+0+$ $ $ b+L.~+#+4+I.$ +'+2+$ -+'+$ $ *+$+I.$ $ $ Y.Z.I.6+< 3 3 < i.F+", -"3 < +.T.q.`./+V T V V V V V V V V :+t+$+.+u. +c+3+$ ~+b+y.$+# L.G.$ O.'+]+'+$ -+Y.$ !+!+$ [+~+~+-+#+!+$ @+#+Y.$ ;+$ 2+2+$ w.'+-+$ Z.4+3+]+8+3 3 3 < h.D+", -"< < +.Q.A.P./+V V V V V V V V V V o+t+Y.N.]+P.b+R.$ ~+&+$+#+$ 2+D.$ '+&+$ $ $ Y.b+$ )+&+$ @+B.{+!+ +$+$ N.0+P.$ #+$ $ $ $ Y.P.Y.$ N.C.%+b+6+< < < < i.D+", -"< b +.T.x.x./+/+V V V V V V V V V :+t+!+&+.+D.-+ +$ *+N.|+N.$ &+,+$ +$ 0+y.$ b+~+$ 2+#+$ 2+Y.X.C.`.O.$ @+.+I.$ )+$ ~+a+.+1+B.1+$ w.Z. +,+g+< < < < i.D+", -"< < '.T.M. +/+V T V V V V V V V V o+t+1+.+.+~+z.&+$ $ $ $ M.!+$ $ A.@+$ $ $ $ M.4+3+$ $ $ 2+!+@+Y.`.1+$ $ $ $ S.S.-+$ $ $ Y.c+N.$ %+ +$ !+8+< b < < i.F+", -"b < '.Q.q.Y./+V /+V V V V V V V /+:+t+)+~+*+X.$+-+R.O.y.w.E.1+3+v.)+.+&+C.Y.1+M.$+@+,+Z.'+&+ +.+D.#+ +,+c+E.G.Y.)+!+]+D.!+J.M.M.4+4+'+Z.P.8+< < b < h.F+", -"< b '.T.q.!+/+o+t+t+A+A+A+A+A+A+t+A+t+|+!+-+~+$+R.L.Z.#+S.1+!+Y.@+G.*+)+y.@+#+1+%+Y.*+Z.0+X..+R. +P.O.*+@+z.X.)+=+N.N.x.#+S.=+1+S.0+*+I.[+d+< b < b i.F+", -"b b '.T.D. +t+H+H+H+H+H+H+H+H+H+H+H+H+4+)+*+'+E.~+z.=+7+Y.b+=+Z.1+]+R.,+%+M.N.B.Y.$+!+R.P.O.X.v. +4+&+b+*+b+-+E.`.I.E.@+,+D.;+|+M.)+.+8+0+j+b b < b i.F+", -"b b '.T.v.Y.2+z.`.E.O.y.C..+]+*+'+-+y.N.$+-+R. +'+{+*+#+1+S.-+X.Y.E. +D.!+N.C.Z.)+~+&+-+@+Z.,+ +L.%+@+C.*+O.E.=+a+4+{+C.!+N.v.$+S.O..+ +0+0+b b b b i.F+", -"b d '.T.u.!+4+&+>+&+0+ +{+R.{+y.S.|+$+a+4+0+)+~+P.-+)+x.=+y.1+Z.&+!+*+#+C.R.1+Z.#+ +@+O.{+.+!+&+]+L.~+P.]+.+Y.E.)+-+@+R.X.4+C.)+L.]+.+9+L.8+b d b d i.F+", -"b d '.T.N.#+*+!+8+$+Z.1+R.!+&+&+P.G.*+'+1+>+4+'+&+X.a+O.X.&+$+X.3+R.7+-+a+!+>+c+2+!+1+]+d+&+!+'+&+.+C.{+{+]+*+X.~+Y.4+ +{+]+]+{+*+0+~+[+8+|+b b b d i.F+", -"b b '.T.T.T.h+h+e+k+k+h+h+9+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+a d b d i.F+", -"d d '.T.h+s+z+B+s+B+z+y+z+z+z+z+z+z+z+z+z+B+z+z+z+z+z+z+z+z+z+B+z+z+z+z+z+z+z+z+z+B+z+z+y+z+z+u+y+z+z+z+y+z+z+z+z+z+B+z+z+B+z+z+z+z+z+z+z+z+b b d d i.F+", -"d d b b c d c d c c b d d d d d d d d d d d d d d d d b c d d d b d d d d b b b d d d b d d d b d b b b c b d d d d b d b c c d d d b d c d d d b f i.F+", -"d d d d d c b c b d d d d d d d c d c c d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d c d d c d d d d d c c c i.F+", -"d c c d d d d d d d d d d d d d d d c c d d c c c d c c c d d d d c d c d d c d c c a c d d d d d d d d d d d d d d d d c d c c c c d c d d c c f g i.F+", -"c c c c a a c d a c c c i i c d c d c f c c h f c c c c c a d c c c c c d d c d c c f g g c c g f f c a c c g c c c a c c c c c c c c g h c c c g g i.F+", -"a a c a h c c a i f i a d f c a a c g g i c i a h a a a c h a c a i f c a c a a i a g f c i a a a c i h a a h g h h i c a a a a a i a a a i a h h i i.F+", -"a h h a a h a h h h h i i a a h h a h h i i a h c c h c a h h h h i a i a h h g a h h h h a a h a a a h h i h a c h a h h h a h h a h a i h a a h h i.F+", -"i a h a a h h h a i h i h h h a h h i h h h h h a i h i h l a a h i l h h h h h i h h i a h i h a h i a h h h h i i h a h h h h h h h h a h h l i k i.F+", -"i h h h h i i h h h i h l i h i i h i i h i i h i h h h h h k h h h l i h i h h i i h i g i h h h h l h i l h h l h h l i h l h h h h h h i h i h k i.F+", -"l l i k k k l l h k l l i i i h i l h h l h h h i i h h k l l h l l i l l h i i l l i l l l i h h h l l i l h i l i l i i k i k h h k l i l l k k l h.F+", -"l h l i l l l h l h h l l l l l k k l h l l k k l l l h l h l h l h k k l h l h l h k l h l l l l l k l k l l l k l h l l l i l l l h l h k l h l k i.F+", -"k k k l h l k k k l k h l h l l k l k l h l l k k h l k k l l k l k l l l l l k k l k l k l h l h l l l l l h l l l l l h l l l h l k l k l l l h m i.F+", -"l k l l l l k l l l l k l l k k l k l k j h l k k k l l l l l l k k k h k l l l k l l l l k l l k l l l l l k k l l h k k j h k l l l k l k l l l j i.F+", -"l l l l l l l j k l l l l l l k l l l l k l m l l l l j l l l l l j l l l l l l l m k l l l l l l j l l l l l l l l l l l l l l l l l l l l l l l m i.F+", -"l l l l l l j l m j l m j l j l l l l j l l l l l l l l j l l l j l l l l j l l l l k l m l l l j l l j m j j l l l l l l l l l j l l l l l l m j m i.F+", -"m j l j j l j j j j j l j l l l j j j j j j l j l j j j j j l l l j m l l j j j j j j j j l l j j j j l j l j l j l j j j j j j j l j j l j l j j j i.F+", -"j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j l j j j j j j j j l j j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j j j n i.F+", -"j j j j j j j j j p j j j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j p j j n i.F+", -"j j n j j j j p j p n j n j j n j j j j j j n n n j j j j j j j n j j j j j j j j j j j j j n j j p j j j p j j j j n j n j j j j j j j j j p j j n i.F+", -"p j n p j p j p j p n p n p j j j j p j p n p p n p j p j j p j j j n j j n j p j p j n n p p p n p n r n p n j p n p p p j n j j p p j p n p r j e i.F+", -"p p p p p p p p n p p p n p j r r r n p j p n j n p j n p p p j p n p p p p n p p j p n p p p j n r n n p p n p p r r p p j p p j n p p p n r n n e i.F+", -"p p p p p p p p r n r r r n p p n r p p p r r r r r r p r r r t p p p p p n p p p p p r r r r r r r n r r n p p p p n p p r r p p p p p p p t r p e i.F+", -"p p p p e e w e e e e e p p p r r r r r r r e e e e e r e e e t p p p p p t r r p r r r e e e r e e e e r r t p p t w e e e r r r t p p p p t e e e i.F+", -"p p t t t e w e e r r v t r r r e e e v e w w w w r w e e r e w w v r r p t e r r p r r e e e e r w e w w e r t p p t r w e e e e w p t t e t p r r i.F+", -"t w e p x w w r w w w p r r t w w r w x r v x r e r r e r w e e r t v w e v e e x x v e r v r r e v w w w v p p t v e w w w r v r v x w w e p t v e i.F+", -"t r e p w w w w e x w t w w e v e r v n v e t v w w e t v v x w t t v v v t r v v r x e v v w v x v w r w x v v e t t w v x w e w x r v w v x v t e i.F+", -"w v w w v x r v x x v w w w v v t w v v v v v w w v v v v r v w v e v e v t w r x r v v v e v e x r x r v v t w w w w v x r v v v v t t x r v t t x i.F+", -"w w w v w v v v r x v x v x v v v v w v x v v v v v v v v v v w v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v x v v v v v v v v v x i.F+", -"x v v v v v v v v x v v v v x x v v v x v v x v v x v v v v v v v x v v x v v v x v v v x v x v v v v v v v x x v v v x v x v v v x v v v x x v x x i.F+", -"x v x x x v x x x x v x x v x v x x x x v v v v v x x x x x v v x x v v x v x v v x x v x x v x x v x x v x v x v x v v x v v v v x x x x v v z z x i.F+", -"x v x x x x x v x y v x x y x x v x x x y u y v v v v x y v x y x x x v x y x v x x y x x x y x x x x x x x x x x v x x v x x x x x x x x x y x x z i.F+", -"y y y x v x y y x y y y x x x y x y y x y u y u u x y y x y y y y x y x y y x x y y y y x y x x y y y x x y y x y y x y y y v y x v x x x y y z x z i.F+", -"y x y y y y y y y z z z y z z x y y y y A y y y y z x y y y y z y z y z y z y y y z y y z y y y y y y x z y z y y x y y y y y y x y y z y z z z z z i.F+", -"u y y y y y z z z z z z z y y z y z z z z A u A y y y y z z y y y z y y y y z z y y z y z y y y z z x y y y y z y z z y y y z y y y y x y z z z z z i.F+", -"A s z y y A z z z z z z z z z A z z z y A A y z z y y z y A y y A z z y z y z y y z y z y z y A y y y y y y y z y A y z z y A y z z z y z z z z z z i.F+", -"z A B B A y z B z B z s A A z A A A A z y A s s z z A A A A A z A A A z y A A A z A z A A z A A z z A z y A y z A z A A z A A A A z A A A z A A z z i.F+", -"z B z B B s s s z B z s B A A A A z A z A A z A A A A A z z A A z A A A A A A A A A z z z A A A A A A A A A A A A A A A A A A z A A A z A A A A A B i.F+", -"s s A z B A B s s s B z B A A A s s z s s B s B A A z A B z A A A A A A A A A A A B A A B B s A A A A B A A A A B A B B A A A B B A A A B B B A B B i.F+", -"A s A B B A s B B B B B B B A B A B B s s B A A A A B A B B A A A A A s B B E B A B B A B B A B A A B A B A A B B B A A B A B B B A A B A A B A A B i.F+", -"B s B s A B A B B B B B B B A B D B B E B B B D E s A A A E s A B B s A A B B B D B B B B B A s A A A A B E E A B s s s A B E B B E H s B E s s A H i.F+", -"B D B E D D D D B B H B D B E B D B B I H B A E E B s B s B E D D E B D B B E H z D D A D D E s E s E B D B B D E E B s s B D H B H B H H s E E D H i.F+", -"H H H H H D D H H B H H D H H I I I D I B H E D B D D D B E E D H H H H D D D D D D H D B D E B E E D B D D H H H D D D D D D H H H H H H D E D D H i.F+", -"H I H H H I H H H H H H H I I I B I B I B D D D H H B D D D D D H H H H H H H H H D D H D D I I D D D D D H H H H H H H D D H H H H I D D D H H I I i.F+", -"H I H D H I H I H H K K H I I I I I K I D K H D D D I D I I D D I B I H I I H H H D D D H D D D I D H I D D I H I H H H I D I I I I H K H D H H I I i.F+", -"I I H G G I I I H H I I H H H I K B D I I I H D D D I H I D K I K I K H H I H I D D I I I I D I I I D D I I I H K I K I I D D I H I I H K D D I D I i.F+", -"H K I I H G I I H K I I I K I K I I I K H H I I D I I I I I K H I K I I I H I I I I I I I I I I D D I I I I K K H I K I D I I K H K H G K I I I I K i.F+", -"K I I G I I I I K G G G I K I I I I I I I I I I I I G I G K K C K I I L I K I I G I K K I K G I K I I I I I I C K K I I I K I K I G G K I I K I I K i.F+", -"G I G G K G G G K G L G L C L I J K J K K K I K K G L L G I L K K I I L G K K K K I C K I I G I I K J K I K K G C K K K K I K I J L G L K K K G G K i.F+", -"J K K L G L G K J L L G G J K K I K I K K K I K K L L G K K L I L K I G C K K G K G K K G G G K K K C I G J K G G G K L L L L J J G J C G K L L L L i.F+", -"K I K K K I K K L J G L G K J K K K K K K K K K K C K K J J J J C J J L L L K K K K K K J K K L J G K J K I K G J K I J G K K G L L L L J L L G L L i.F+", -"K K J J J J J J L C J J J J K J J J J J J J J J J J K K J I J G J J J L C K K K K J K K J L C J J J J G J J J J J J J J J J J K J L C J J M C J R M i.F+", -"J K J J L J L Y R R L J J J J Y J J J J L J L J L Y J J J J J J J J J L J J J K J J J J J J J J J J J J M J J J J J L J J J J M R M J J J J J J L R i.F+", -"Y J J J J J J R L L .J J M J R J J J J Y J J J J M J J M J R J J J J J J J J J Y J J J J J J R R J J Y R L J J L J J J M R L R L Y J R J J J K M Y i.F+", -"R J R R Y M M L Y Y .R Y J J J J J R R R R R R R R R R Y R R J R J J R Y J J J Y J J Y Y J J Y J J R J Y Y Y Y Y J Y R J Y Y Y R .J J J R J J M Y i.F+", -"R J R R .M Y Y Y .R Y R R J R R R R R R J R R J R ..J J R J R R R R R R R R Y Y J R R R R R J J R R R J R R R R R R R R Y Y Y R J R R Y J Y Y Y .i.F+", -"Y R R R .Y Y Y Y ..Y R Y R R Y R Y R Y R R R Y Y R R R R R ..Y R R Y Y R R ..R Y R R R R R Y Y R R R R R R Y Y Y ..Y Y R R Y Y .R Y ..R R ..R R Y i.F+", -".. .R R Y Y Y Y R ..Y R .R R R Y R R ....R ..R R M ..Y .... .Y ..R R Y R R Y .... .Y R ..Y ... .R R R Y R R Y R Y .. .R R .Y R R R ....R Y R .. .i.F+", -"R Y Y ....Y . . .Y .......... ..... .R R .. .R ....Y Y .Y .R R ....Y ..R R Y .....R ... .Y ..Y ....R .. .Y ...R Y ..Y Y .......R R R ..Y ..Y h.F+", -"` R ..Y . . . .....Y ...Y . ...Y .` Y .. .` Y .. . . .R .....Y . .....Y ....Y ...Y ..Y ` .. ...Y Y ... . ......... ...` ..Y .. . . ... . .@.i.F+", -" ... .@.@.@. ...Y ` .` . ......... . ... . .` .... ...` ....R ` . ..... ... . . . . ... ...@.@.@.@.@.@...Y .. .Y .Y ...Y .. .@.@.` . . .` .@.i.F+", -"` ...@.Y @.@.@..... .` ...` . ..... .` ......@.@.@... ..... . .` ..` ....` .... . .......` @.Y ..@.Y ` . .......` ` ..` . .@.Y .. . .` .... .@.i.F+", -"` ` @.` ` ` Y @.` ..@.@. . .@.@...` .` ..` ` ` ` Y @.` ` .. .....@.` @.` ` .` ..` ...@. . .` ` ` ` ` .. .@.` ..` .@.` ....` ` ..` ` ..@. .` ` @.i.F+", -"` @.` ` @.` ` ` ` @.@.` @.` ` ` @.` ` ` ` ` @.@.` ` ` ` @.` ..` ` ` ` @.@.` ` ` @.` ` ` ` ` ` ` @.` ` @.` ` ` ` @.` ` ` ` @.` @.` ` ` @.` ` ..` @.@.i.F+", -"` ` $.` @.` @.$.` @.$.$.@.` ` ` $.` @.$.` @.$.` $.` @.` ` @.$.` $.$.` ` $.@.$.@.$.` ` $.$.@.` @.` ` @.$.$.@.@.$.@.$.` @.` @.@.` @.@.` ` @.` ` ` ` @.i.F+", -"$.@.` @.@.$.$.$.` $.@.` $.` $.$.` $.$.@.$.$.$.$.` @.$.` @.` ` $.@.@.$.` $.$.$.$.$.$.$.` @.$.` ` $.@.` ` ` $.$.$.$.@.$.$.` @.` @.` ` @.` $.$.` ` ` #.i.F+", -"$.$.$.$.@.$.$.$.$.$.$.$.$.$.%.$.$.$.$.$.%.$.$.$.$.$.$.$.%.$.$.%.` $.$.$.$.` $.@.$.$.$.$.$.$.$.$.` $.$.$.$.$.$.$.$.$.` $.$.$.$.$.$.@.$.` $.$.$.$.$.#.i.F+", -"#.$.$.$.#.#.#.#.#.%.#.#.#.#.%.#.$.$.%.$.$.%.#.#.#.$.$.$.%.#.#.%.#.#.#.$.#.#.#.$.$.$.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.#.$.$.$.#.$.$.#.$.#.#.#.i.F+", -"$.%.%.$.#.#.#.%.%.%.%.#.#.&.#.&.$.#.%.#.#.%.%.#.%.*.$.#.%.%.#.%.#.#.#.#.%.#.%.$.%.#.#.%.$.#.$.$.$.#.%.$.$.$.#.#.%.*.#.#.$.#.#.#.%.#.$.$.#.%.%.*.#.#.i.F+", -"%.%.%.$.*.#.;.&.&.#.%.#.&.#.#.*.#.%.#.#.&.#.%.#.%.*.$.%.%.#.#.*.#.#.%.#.#.#.%.$.%.%.%.%.%.%.%.$.#.#.%.%.%.%.%.%.%.%.*.*.*.&.&.$.%.$.%.%.%.%.#.%.%.%.i.F+", -"%.%.%.%.%.&.&.#.&.%.#.%.%.%.%.*.*.*.*.*.*.*.*.%.%.%.%.%.*.&.%.&.%.#.%.%.*.%.#.*.%.%.%.$.%.%.%.#.#.%.%.%.%.%.#.%.*.%.%.#.*.#.%.%.%.$.%.%.%.%.%.%.%.%.i.F+", -"%.%.%.%.%.*.#.&.&.;.#.%.%.%.%.*.#.%.%.#.#.%.*.#.%.&.&.;.#.&.#.%.%.%.%.%.*.#.%.*.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.%.%.%.%.%.*.%.%.%.%.%.%.%.%.%.%.*.i.F+", -"%.%.%.&.%.%.&.&.&.&.%.%.%.%.%.&.%.%.%.*.*.&.&.=.&.&.&.&.*.;.%.%.&.%.%.%.%.*.*.*.*.*.&.%.%.%.=.%.%.&.%.%.*.%.%.%.*.%.%.*.%.*.%.*.%.&.%.%.%.%.%.%.%.*.i.F+", -"%.%.*.=.&.>.=.#.>.;.>.;.*.%.*.%.&.%.*.;.&.&.&.&.%.&.;.&.&.>.&.&.*.&.*.;.*.%.%.&.;.&.=.=.&.=.&.;.*.*.%.%.%.%.&.*.*.;.*.*.*.&.*.&.%.*.*.%.%.%.*.%.%.&.i.F+", -"=.;.%.*.&.;.=.=.=.&.;.=.;.*.*.;.;.;.;.&.*.;.;.;.=.;.>.&.&.;.=.;.*.*.;.;.=.*.;.;.;.&.&.&.&.&.=.*.;.&.=.*.*.&.&.=.*.;.%.;.%.*.=.=.=.=.&.%.=.&.*.*.=.=.i.F+", -"=.*.;.*.>.;.&.;.>.&.>.*.%.;.*.;.;.&.;.&.=.=.;.;.;.&.&.=.;.>.;.;.;.;.=.*.>.&.;.;.=.=.=.&.;.*.;.=.&.;.;.=.&.*.;.;.*.*.&.;.;.=.&.&.;.&.=.=.&.=.*.%.*.>.i.F+", -"&.=.;.;.;.=.=.&.>.&.=.>.>.=.;.;.;.=.=.=.=.&.=.=.=.=.=.=.&.>.>.;.;.;.;.;.&.=.&.=.;.&.>.>.>.=.;.;.;.=.;.=.=.=.=.=.;.;.;.;.;.=.=.=.;.&.;.&.;.=.;.=.=.>.i.F+", -"=.=.=.=.=.=.=.=.=.=.>.&.=.;.;.=.=.=.=.;.=.=.=.=.=.=.=.=.=.>.&.=.=.=.=.=.=.=.=.=.;.=.>.&.=.=.=.=.>.>.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.>.>.i.F+", -"=.=.>.=.>.>.=.=.>.>.=.=.=.=.=.>.=.=.=.>.>.=.>.=.=.>.=.=.=.>.=.>.=.=.=.=.>.=.=.=.=.>.>.>.=.=.=.=.=.>.=.=.=.,.>.=.=.=.>.=.=.=.=.=.>.>.=.>.=.=.>.,.>.~.i.F+", -">.=.>.=.=.=.>.=.=.>.=.>.=.=.=.>.=.=.>.=.=.=.>.=.>.>.=.=.>.=.=.=.>.=.>.>.=.>.>.=.=.=.=.=.=.>.=.=.=.>.>.=.>.,.=.=.,.>.>.=.=.>.,.=.=.=.=.=.=.=.=.,.=.~.i.F+", -">.=.=.>.=.>.>.=.>.>.>.=.>.=.=.=.=.>.=.>.>.=.>.=.=.=.>.>.=.=.>.=.>.=.=.>.>.>.=.=.>.>.=.>.>.=.=.=.=.,.=.>.>.,.=.=.=.,.>.>.>.=.,.=.>.>.>.=.>.>.=.>.,.~.i.F+", -",.>.,.>.>.=.,.>.=.>.=.>.>.>.=.>.,.>.>.=.>.>.>.>.>.>.>.>.=.,.>.>.,.>.=.>.,.>.>.>.>.>.>.,.>.>.>.>.>.,.>.>.>.,.>.=.,.,.=.=.>.>.,.,.,.,.>.>.>.>.>.>.,.>.i.F+", -",.,.,.>.,.,.,.].,.,.,.~.{.{.,.,.,.,.,.>.>.>.>.,.,.,.~.~.~.,.,.>.,.>.,.>.,.>.>.,.,.,.,.>.=.~.~.{.~.{.,.,.>.,.,.~.~.{.,.,.{.{.{.{.,.>.,.,.{.{.{.,.,.~.i.F+", -",.,.,.,.].,.,.{.,.,.,.{.{.{.{.{.>.>.{.,.,.,.,.,.,.{.{.{.{.{.{.~.{.{.{.{.,.{.,.>.,.~.{.{.,.{.{.{.~.,.,.,.,.,.{.{.{.].~.{.{.].{.,.,.,.~.{.~.~.{.].{.{.i.F+", -"{.{.{.{.].{.,.,.,.>.{.,.{.{.{.{.{.{.{.,.,.,.,.{.,.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.,.{.{.~.].{.{.{.{.{.{.{.].{.{.{.{.{.,.].~.{.~.{.{.{.].~.{.i.F+", -"{.{.{.{.].{.].].{.,.,.,.{.{.{.{.{.{.,.,.{.{.,.,.,.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.].{.{.].{.{.{.{.].{.,.,.,.{.{.].{.{.{.{.{.].{.{.{.i.F+", -"]./.].{.].{.{.].,.,.{.,.(.(.].{.].{.].{.{.{.].].,.{.{.].,.{.]./.{./.].{./.{.{.].{.{.{.{.].].{.].{.].].{.(./.{.{.{.].,.[./././.{.].].].{.{.]./.{.{.].i.F+", -"{./.{.].(.(.{./.{.].]././.{.{./.{.].].,.].{.].].].].].].].(.].(.].{.{.].].]./.{.{./.{.{.].].].]./.{.].{.{.].{.].{.(.{./.{.{.].[.].{./.{.{././.{.].(.i.F+", -"].]./.].{.(.{.]./.].].].].].]./.].].].{.].].]./.].].].].].(.{.(.].].{./.{.{.{././.].{./.].].].].].]./.{.(.{.].].{./././.].].{.].{.(./././.{././.{.(.i.F+", -"/.{.].].].]./.].].].].].].].].].].].]./.].].].]././.[.].(.(.].].].].].]./.].]./.].].].]./.].].]./.]././.]./.]./.]./.].]././.].]./.{./.{./.{.].(.{.(.i.F+", -"/.].].].]././.].].].]./.].].].].].].].].].].].].].].[.(.].(.].].].]./.]./.].]./.].].].]././.]./.].].].]./.].]././.].]./.]./.]././.].].]./.].(.]./.(.i.F+", -"/.].].]./.[.].(.(.[.<.(.].]./.<.<.].[.<.[./././././.[.].(.}.(./.(.]./././.]./.].]./.].[.]./.<././.[.[.[././.]./././.]./.].}./.}./.].(././././.[.(.(.i.F+", -"(.(./.(.(.]././.].].[.<.<.<./.]./.[./././.<.<.}.}./.(.<.(.(.(.(./.(.[.[././.[.[.]././.[.(.[.].[./.[.(.(.(././.[.]./././././.}.]./.(./.(.}.].(.}./.}.i.F+", -"[.[.(.(.<.<.[.(.[.].[.<./.<.<././.}.|.|.}./.}./.<.[.<.(.]./.(.]./.<.<./.}.}.}.[././.[.[.<.<.<.<./.<.<././.<.<.<./.<.[.].}.].[.[./.[.<.<.<.[.[.<.<.}.i.F+", -"[.<.<./.(./.<.<.<.<.<.}.<./.}.}.}.<./.|.|.}./.}.<./.<.(.[./.<.<.<.<./.<.<.}.}.}.<.<.<.<./.}.}.}.<.<./.[.}.}.}.<.<.<./.<.<.<.[.<.<.<././.<.<.<.}.}.|.i.F+", -"}.}.<.<.<.<.<.<./.<./.|.}.}.}.}.}.|.|./.|./.<.<.}.<.[.[.<.<.<.}.}.|.}.<.<.}.}.}.}.<.<.}.<.}.}.|.}.}.<.<.}.}.}.}.}.}.}.}.}.}.}.}.}.}.|.}.}.<.<.}.|.|.i.F+", -"}.}.}.<.}.<.|.<.<.|.<.<.|.}.}.|.}.|.|.}.}.|.|.}.|.<.<.<.<.}.}.|.|.}.}.<.<.|.|.|.}.}.}.|.<.}.}.|.}.|.}.}.}.}.}.}.}.}.|.}.}.}.<.|.|.}.|.}.}.<.}.}.}.|.i.F+", -"<.<.|.|.|.|.}.|.<.<.|.<.}.}.|.|.|.|./.2.2./.<.|.<.|.|.|.<.}.|.}./.<.}.}.<.2.}.|./.|.}.|.<.|.|.}.|.|.|.|.|.<.}.<.|.<.|.|.<.}.|.}.|.|.}.2.<.<.<.}.2.}.i.F+", -"<.|.<.|.|.|.|.|.}.|.|.|.|.|.|.}.}.|.|.|.|.2.|.|.<.|.<.|.|.2.2.|.2.|.|.|.|.2.|.2.|.<.|.<.|.<.}.|.|.}.|.}.2.<.|.|.|.<.<.|.2.|.:.}.|.}.|.|.<.|.|.|.2.}.i.F+", -"|.|.|.<.<.|.<.|.|.|.|.|.|.|.2.|.|.2.|.}.2.|.2.|.|.<.|.|.|.2.}.|.|.<.|.|.|.2.}.2.|.|.|.|.|.|.2.|.|.|.|.2.|.|.|.|.<.<.|.|.2.}.|.|.|.|.}.2.|.<.|.|.2.:.i.F+", -"|.|.|.|.|.|.|.|.|.|.2.|.|.|.|.|.|.|.|.3.|.3.|.2.|.2.|.2.|.|.2.:.|.|.|.2.2.|.|.3.|.2.|.|.|.|.|.2.:.|.|.2.|.|.|.|.:.|.|.|.2.|.|.|.|.3.|.2.|.|.|.|.|.2.i.F+", -"2.|.:.|.2.|.:.|.|.1.|.2.1.2.2.3.2.|.|.|.2.|.|.2.|.|.2.|.|.|.2.3.:.|.|.2.|.|.|.|.2.2.:.|.|.|.2.1.:.|.2.1.|.2.:.|.1.1.|.|.2.|.3.:.|.:.2.2.|.|.|.|.|.2.i.F+", -"2.|.2.1.1.2.2.:.|.:.|.:.2.|.3.|.2.2.3.|.3.2.2.2.2.:.2.|.2.:.:.|.|.:.|.|.1.1.|.2.2.3.3.2.:.|.2.1.|.:.3.|.1.2.2.|.|.:.2.2.2.|.|.|.2.:.|.2.:.2.2.|.3.2.i.F+", -"3.2.3.2.1.2.2.|.2.1.2.2.2.1.2.2.2.|.2.2.2.|.2.1.2.:.|.1.1.2.1.1.2.|.1.|.1.|.2.1.:.3.|.3.3.2.2.2.:.|.2.2.1.1.|.2.1.|.1.:.|.|.|.2.1.1.2.2.2.:.:.3.:.1.i.F+", -"2.:.3.:.2.2.1.1.2.2.:.|.3.2.1.1.2.1.1.1.1.2.1.|.2.2.1.1.:.1.2.2.1.|.1.2.2.1.1.1.2.1.:.:.3.1.1.:.4.1.1.:.1.2.2.2.1.1.2.1.2.1.2.2.|.2.|.1.1.1.1.|.1.3.i.F+", -"1.1.2.2.2.2.:.:.2.2.2.1.1.1.:.2.2.1.:.1.:.2.1.1.1.1.:.2.2.1.:.2.1.2.1.1.2.1.3.:.1.:.2.1.3.3.3.1.2.:.2.2.1.2.2.1.|.2.:.2.1.:.2.2.2.2.1.:.1.|.1.1.1.1.i.F+", -":.1.2.1.1.1.1._._.1.1.:.1.1.2.1.2.3.3.3.1.2.1.1.1.1.2.2.1.2.2.2.1.1.1.2.2.:.1.2.1.2.1.1.1.:.3.1.1.1.2.2.1.1.2.1.1.1.2.2.2.1.1.1.2.1.2.2.2.1.1.1.1.6.i.F+", -"1.2.1.1.3.6.3.3.3.3.4.3.4.3.3.1.4.4.8.3.6.4.5.3.3.1.2.1.1.2.4.3.5.1.1.4.4.4.4.1.1.1._.3.1.1.6.3.3.1.1.1.1.1.1.1.5.4.3.6.4.4.3.4.3.4.4.3.3.4.3.4.6.3.i.F+", -"5.5.1.3.3.6.3.3.6.3.4.4.5.5.4.4.5.3.5.3.4.3.6.3.4.4.1.1.4.4.4.4.5.3.3.5.4.5.4.3.5.3.6.3.6.3.6.3.3.6.4.4.6._.1.3.5.4.4.6.3.4.3.3.3.3.6.3.4.5.3.4.3.6.i.F+", -"3.4.4.6.3.3.5.4.5.4.5.3.3.6.6.4.5.3.5.4.4.3.4.6.4.6.6.4.5.3.1.3.3.6.6.5.3.4.6.4.6.3.5.5.5.5.4.5.4.5.5.4.3.5.3.1.4.3.3.6.3.4.4.6.6.4.4.4.5.3.6.3.6.4.i.F+", -"4.4.3.6.4.4.4.3.5.4.4.4.4.4.3.6.3.3.5.4.3.6.3.6.4.3.6.4.4.4.4.4.4.4.3.6.4.4.4.3.6.4.4.3.5.4.3.5.4.4.3.5.4.4.4.3.5.4.4.4.4.4.4.4.3.6.4.4.4.3.5.4.4.3.i.F+", -"4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.5.5.5.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.i.F+", -"6.4.6.6.4.5.4.5.4.4.4.4.4.5.4.4.5.5.4.5.4.5.4.4.5.6.6.4.6.4.6.4.4.5.4.4.4.4.4.4.4.4.4.4.4.4.5.5.5.8.5.8.5.6.8.5.5.4.5.5.8.5.6.4.6.4.4.5.5.5.4.4.4.4.i.F+", -"4.4.7.4.5.4.4.7.8.7.4.5.4.4.5.8.6.4.6.6.6.4.5.4.6.8.7.8.4.8.4.6.4.6.5.6.8.5.6.5.4.7.6.4.7.5.7.5.8.8.5.5.8.5.5.5.8.5.8.5.5.8.7.5.4.8.7.5.5.4.4.5.4.4.i.F+", -"6.4.4.4.7.6.6.5.4.6.7.6.6.6.7.6.8.7.8.4.8.6.6.8.8.6.6.7.7.6.4.5.6.8.5.8.6.5.8.5.5.6.6.6.4.7.3.5.8.7.8.8.7.5.5.7.8.5.5.5.5.5.5.5.6.6.5.5.7.8.8.5.5.7.i.D+", -"8.5.6.5.4.6.6.7.7.6.6.6.8.4.7.6.8.6.7.6.6.6.4.7.4.6.6.6.6.6.7.4.8.4.5.8.5.7.4.8.4.4.8.5.4.4.7.5.5.8.8.7.5.8.7.5.5.5.7.8.6.8.8.4.8.8.6.5.5.5.8.8.8.5.i.D+", -"6.8.8.8.7.7.7.8.6.7.7.7.7.7.8.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.8.8.7.7.5.i.D+", -"7.7.C W.k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+6+k+6+k+k+k+o.} 8.7.7.i.D+", -"8.7.Z K.K.K.Q.Q.)+J.T.Q.K.}+Q.Q.W.T.}+J.T.W.J.}+W.W.Q.T.1+K.T.Q.K.)+Q.Q.Q.T.}+J.T.Q.K.1+Q.W.J.T.Q.K.)+Q.Q.Q.T.}+)+T.T.T.T.T.K.T.1+P.T.Q.}+1+| 9._.7.i.D+", -"8.8.Z K.7.q.v.l.l.y.y.k.v.l.l.u.k.y.u.q.v.l.q.y.q.g.q.k.l.u.v.D.k.p.q.g.l.v.k.E.x.q.l.k.u.p.g.q.x.B.C.k.q.l.v.k.l.q.g.q.w.l.q.l.l.k.y.k.]+,+~ 8.7.7.i.D+", -"7.7.Z K.A.N.`.`.p.B.P.Z.C.I..+@+R.`.=+E.`.E.I.x.I.u.@+D.w.E.$+@+R. +R.E. +G.E.`.S.x.L.A.x.N.~+*+$+w.@+z.l.N.E.A.P.G.*+P.=+Y.w.C.E.!+>+]+~+]+! 7.7.7.i.D+", -"7.7.Z K.$+S.@+#+v.'+X.$+L.I.Y.)+{+~+4+$+#+8+{+b+N.2+N.L.M.%+N. +X..+D.Z.D.)+J.Y.b+*+V.a+ +N.p.S.U.1+V.U.N.~+0+!+N.X.++X.V.#+Y.~+Y.)+>+G.>+~+! 7.7.7.i.D+", -"7.7.Z K.p.C.!+V.v+p+u+y+x+p+u+u+u+u+u+u+x+u+u+u+u+u+y+u+u+z+x+y+y+y+y+p+z+p+x+x+x+x+x+x+y+x+x+x+x+x+y+x+y+x+x+w+x+x+x+w+y+y+x+y+y+v+]+b+.+8+! 7.7.7.i.D+", -"7.7.Z K.B.'+P.R.j+/ ] , = % % % % % % % % = = ; - , ' / [ ] ] ] / / / [ 7 8 9 0 0 0 q O Q ^.b.a.N N W ^.^.^.^.!.!.a.a.a.a.b.a.j.a.s. +!+0+4+! 7.7.7.i.D+", -"7.7.Z K.w.$+P.P.f+- * . % % % % % % % % % % = = = - = * * , ) ] ] / ] / 7 / 6 0 O O O O Q P Q Q W ^.W ^.^.a.^.a.a.b.b.b.b.b.c.c.a.U.<+M.'+g+! 9.7.0.i.D+", -"7.9.Z K.v.=+*+b+6+] * c.x+v+v+v+v+D+v+B+v+v+v+E+D+w+i+; ' 5+E+A+v+v+v+v+p+p+y+w+w+v+w+v+y+i+8 U.r+w+w+x+w+x+v+x+x+x+x+y+x+x+x+U.P >+y..+]+]+! 7.7.7.i.D+", -"7.7.C K.q.!+!+{+j+/ = 6+H+k+,+9+<+<+8+8+8+0+8+<+9+E+C+- / H+q+^+8+7+7+>+r+H+5+[+7+f+7+^+w+D+/ i+H+g+7+d+f+f+7+f+f+f+f+f+f+6+g+!.W >+*+`.{+W.! 9.7.9.i.D+", -"7.7.Z K.y.D.0+P.j+) & ^+x+; # @ @ @ @ + + . & . + U.G+; ] H+f.& - , , * t.E+q - 7 7 / ' j+C+] i+H+9 7 7 7 8 9 9 9 9 6 6 6 6 0 N Q H.3+.+-+0+! 0.9.0.i.D+", -"9.9.Z K.p.z.M.B.q+f.P j+y+- ' O 0 O 0 O , . * - Q m+G+, ] H+n.; / / 7 ' ^+D+^.] P P Q 6 i+D+] j+H+O ^.t.n.t.t.n.t.t.t.t.t.t.H.t.m.<+)+C.3+9+! 0.7.9.i.D+", -"9.0.Z K.I.4+Z.~+H+H+H+H+r+- q+H+H+H+H+H+p+j.= & H+H+r+; / H+t.; / 7 8 ) <+H+!.] O O O 8 i+C+] j+H+0 t.H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+7+]+d+'+! 0.0.9.i.D+", -"9.0.Z K.C.Y.'+#+5+b.0 6+v+' , 0 0 9 9 P q+H+q+b., , ) ; 9 H+t.; / / 7 / 9 <.8 6 P P P 8 i+v+] j+H+O N b.b.c.b.c.b.b.c.c.c.c.c.c.!.U.{+'+>+b+! 0.7.0.i.D+", -"9.0.Z K.S.Y.~+ +l+6 ' >+D+7 * = * * * & & b.w+H+5+9 = = 8 H+t., 8 8 8 9 7 / 6 O P Q O 8 i+v+] 6+H+9 0 6 6 0 6 0 6 O O O O O O W P H.=+]+G.3+! 7.0.0.i.D+", -"0.0.Z K.y.N.$+@+i+^.8 f+C+0 - ' ' ' , , - & = u.r+H+5+9 / H+t., / 8 8 9 6 0 0 0 O O O 8 m+D+/ j+H+V.t.s.H.s.H.H.s.V.V.V.V.V.U.j.P s.-+I.~+8+! 0.0.0.i.D+", -"0.0.Z K.q.V.p.{+m+a.6 <+H+O , ) ' ' ' ' ' ' , & , A.H+m./ H+s., 7 8 9 6 0 O 0 0 O Q Q 8 5+H+] 7+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+m.8 s.|+)+&+9+! 0.0.0.i.F+", -"0.0.Z R.B.`.M.G.m+a.a.0 !.8 / / ] ' ) ) ] ' ] ] - = 9 ] ) N 9 / 7 8 9 9 0 0 O P Q Q Q P ^.!.8 Q b.b.a.b.b.b.c.b.c.b.).c.c.c.j.q Q s.L.a+X.0+! 0.0.0.h.D+", -"0.0.Z K.q.S.4+.+n+a.b.Q 6 6 7 ] ' ' ' ' ' ] ' ' ' ' - ' ' ' ' / / 7 7 7 9 9 7 8 6 6 O P 0 6 O 0 6 9 0 6 O O 0 0 0 O O O O P Q a.N H.1+N.9+d+! 0.0.0.i.F+", -"0.0.Z R.B.C.4+V.m+a.a.t.j.W f.f.a.c.b.] 8 ) 6 !.!.N c.a.Q 6 f.n.O 9 n.j.P 7 f.m.b.b.n.f.O f.n.j.m.n.W a.W j.H.H.f.m.t.n.c.m.H.t.P H.N.N.~+~+~ 0.0.0.h.D+", -"0.d.Z K.l.Z.)+E.m+^.j.x+m+l+U.f+6+w+m+c.U.a.7+r+y+v+r+f+j+7+^+<+6 m.p+r+f+c.D+U.m+r+7+f+N 7+w+p+s.p+s.U.H.b+<+7+i+i+h+w+6+5+r+r+P H.$+#+[+,+! 0.0.0.i.D+", -"0.0.Z Q.Z.E.!+{+i+N a.t.b.f.0 O O j.^.j.f.j.O N a.b.a.^.7 N / / ' 0 O O j.f.f.f.c.c.n.f.6 b.n.m.m.n.t.n.s.m.Q W c.t.t.j.b.t.t.H.0 t.4+L.'+0+! d.0.0.i.D+", -"0.0.Z Q.M.R.$+U.q+j.j.c.b.^.a.W P q 0 0 6 0 8 6 9 9 0 q 0 0 O P Q P q 0 O N O N P P ^.^.^.^.N Q a.N ^.^.a.a.a.a.^.^.a.^.^.^.a.a.W V.1+-+2+9+~ d.d.0.i.F+", -"0.0.Z Q.l.@+>+@+w+x+x+x+x+x+w+x+x+y+y+x+y+x+x+x+x+y+p+x+x+x+w+y+x+x+x+w+z+x+x+p+x+w+x+y+x+x+y+x+y+x+x+x+x+x+x+x+x+y+x+x+w+y+y+x+x+w+3+R.,+#+! d.d.0.h.D+", -"0.0.Z Q.C.P.~+-+ +.+G.%+]+u.@+-+]+Y.Y.#+ +4+R. +R..+O.M.=+$+A. +~+@+P.O.z.-+N.=+3+X.2+&+E.*+'+ +R.4+x. +~+ +-+#+4+-+ + +~+-+b+$+N.1+y..+%+,+~ d.d.0.i.F+", -"0.d.` Q.v.R.@+2+@+*+9+*+ + + +'+{+@+)+]+a+@+y.@+++'+E.D.-+-+&+!+ +X.'+2+Z.X. +#+{+~+X.@+,+G.&+-+E.E.9+*+!+.+E.N.@+ +d+u.>+)+O.L.8+P. +W.*+)+! d.d.0.h.D+", -"0.d.Z Q.z. +Q.,+y.9+8+++8+,+++F.Q.Q.9+W. +9+Q.++A.&+++>+Q.++[+9+9+,+^+{+9+++~+>+,+,+,+9+~+F.,+,+F.{+++*+++~+9+++9+{+]+*+{+,+{+>+W.f+W.~+c+[+! 0.0.0.i.F+", -"0.0.R P.T.T.h+h+e+k+k+h+h+9+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+! 0.0.0.h.D+", -"0.0.Z Q.h+s+y+B+s+B+y+y+y+x+x+y+y+y+y+y+y+B+y+y+x+x+y+y+y+x+x+B+y+y+x+x+y+y+y+x+x+B+y+y+y+y+x+x+x+y+y+x+y+y+y+y+x+x+B+y+x+B+x+x+y+y+y+y+y+y+! 0.0.0.i.F+", -"0.0.^ ~ ! > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ! 0.0.0.h.D+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.i.F+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.h.C+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.h.H+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.k.H+", -"o.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.u.H+", -"k+l+n+n+n+n+n+n+l+n+n+l+n+n+n+n+n+n+l+n+n+l+n+n+n+n+n+n+l+n+n+l+l+l+l+l+l+l+l+l+l+l+l+l+n+n+n+n+n+n+l+n+n+l+n+n+l+n+n+l+n+n+n+n+l+n+n+l+n+n+n+n+n+l+n+n+"}; +"% c #E0E0E3", +"& c #B9B9BF", +"* c #92929B", +"= c #C4C4C8", +"- c #CFCFD3", +"; c #F3F3F4", +"> c #5D5D6A", +", c #5E5E6A", +"' c #686874", +") c #F5F5F5", +"! c #6A6A76", +"~ c #EDEDEE", +"{ c #FCFCFC", +"] c #909098", +"^ c #909099", +"/ c #CCCCD0", +"( c #96969E", +"_ c #CECED2", +": c #CBCBCF", +"< c #8D8D96", +"[ c #FDFDFD", +"} c #8C8C95", +"| c #6B6B76", +"1 c #5C5C69", +"2 c #F2F2F3", +"3 c #F1F1F2", +"4 c #F0F0F1", +"5 c #AFAFB5", +"6 c #333339", +"7 c #34343A", +"8 c #1C1F22", +"9 c #1A1E20", +"0 c #8B8B94", +"a c #DEDEE1", +"b c #EAEAEC", +"c c #DFDFE2", +"d c #8A8A94", +"e c #A8A8AF", +"f c #A2A2A9", +"g c #B3B3B9", +"h c #74747F", +"i c #E5E5E7", +"j c #888891", +"k c #5A5A67", +"l c #878790", +"m c #E4E4E6", +"n c #72727D", +"o c #EDEDEF", +"p c #ECECEE", +"q c #5F5F6B", +"r c #AAAAB0", +"s c #9D9DA5", +"t c #9C9CA4", +"u c #C9C9CD", +"v c #FEFEFE", +"w c #92929A", +"x c #6C6C77", +"y c #F5F5F6", +"z c #AAAAB1", +"A c #878791", +"B c #86868F", +"C c #E0E0E2", +"D c #EBEBEC", +"E c #FAFAFA", +"F c #CDCDD1", +"G c #CECED1", +"H c #D8D8DB", +"I c #E1E1E3", +"J c #666672", +"K c #676773", +"L c #9F9FA7", +"M c #A0A0A7", +"N c #7C7C86", +"O c #63636F", +"P c #E6E6E8", +"Q c #70707C", +"R c #6D6D78", +"S c #DBDBDD", +"T c #DBDBDE", +"U c #B0B0B6", +"V c #C0C0C5", +"W c #D5D5D9", +"X c #D5D5D8", +"Y c #E2E2E5", +"Z c #D6D6D9", +"` c #9999A1", +" . c #9898A0", +".. c #E9E9EB", +"+. c #62626E", +"@. c #A7A7AE", +"#. c #61616E", +"$. c #C7C7CB", +"%. c #F9F9FA", +"&. c #C3C3C8", +"*. c #C2C2C7", +"=. c #EEEEEF", +"-. c #636370", +";. c #ACACB3", +">. c #C6C6CA", +",. c #AEAEB4", +"'. c #BEBEC3", +"). c #DDDDE0", +"!. c #646470", +"~. c #7D7D87", +"{. c #5C5C68", +"]. c #D2D2D6", +"^. c #A9A9B0", +"/. c #8E8E97", +"(. c #82828C", +"_. c #C1C1C6", +":. c #B2B2B8", +"<. c #656571", +"[. c #84848E", +"}. c #BCBCC1", +"|. c #5B5B68", +"1. c #70707B", +"2. c #696975", +"3. c #E2E2E4", +"4. c #BDBDC2", +"5. c #C8C8CD", +"6. c #6F6F7A", +"7. c #696974", +"8. c #EBEBED", +"9. c #7D7D88", +"0. c #B4B4BA", +"a. c #777782", +"b. c #757580", +"c. c #9797A0", +"d. c #ABABB2", +"e. c #AEAEB5", +"f. c #BFBFC4", +"g. c #8A8A93", +"h. c #A3A3AA", +"i. c #E7E7E9", +"j. c #B7B7BC", +"k. c #B6B6BC", +"l. c #9D9DA4", +"m. c #D7D7DA", +"n. c #94949D", +"o. c #EFEFF0", +"p. c #898992", +"q. c #A1A1A8", +"r. c #B7B7BD", +"s. c #ADADB3", +" ", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ $ $ $ $ $ $ % $ $ & & $ $ # + ", +" + @ * * * = $ - $ % $ $ ; > , ; $ $ # + ", +" + @ ' ; ) ! $ % $ ~ { ] ^ { ~ $ # + ", +" + @ / $ ( $ % $ % / _ - : % $ # + ", +" + @ ( $ / $ % $ % < [ [ } % $ # + ", +" + @ | ) ; ' $ % $ % 1 2 3 1 % $ # + ", +" + @ - $ = * * * $ 4 5 5 5 $ % } } % $ # + ", +" + @ $ $ $ $ $ $ $ $ $ $ $ $ % % $ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ 6 8 8 8 8 8 8 8 8 8 8 8 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 0 a b c d e % ] f a g # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 h i j k l m n o , p q # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 r s t e u v % % v % w # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 c x x a y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 c x x a y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 z s t e y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 h i A k B m n y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 } C D C } y y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ 6 8 8 8 8 8 8 8 8 8 8 8 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 E F G E H # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y I J K I y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y e L M e y y N C > O P Q # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y R S T x y y U U V M # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y W } X y y > Y Z k # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y ` ; . y y | ..C > # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y +.@.#. y y - ] U U # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y y y ` $. > C N # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ 6 8 8 8 8 8 8 8 8 8 8 8 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 %.% % &.h y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y ( *. y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y O =. -.;.S >.n y ,.P '.' y ( ).C *.n !.;.c % ~.-.;.S >.n # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y {.f ]. ^./. (._. E ^.k ^.:. y <. [.}. ^.:.> |.+.^./. (._. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 %.% 2 E 1. ).% % % m E 2. 2.3. y h 4.Y % o c x ).% % % m # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y > 4.5. % 6. E 7. 7.3. y G ^ 1 2.%. a x % 6. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y , 8.9. e 0., k a. E @.k @.:. y % b.1 :.E e :.> |.+.e 0., k a. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y c.G -.d.c m ,. y e.P f.7. y g.a I h.y -.;.I C N -.d.c m ,. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ 6 8 8 8 8 8 8 8 8 8 8 8 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y y %.C i.T ^ f a g # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y y y 1 0 Y /. p q # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y 7.j.3.k.' ( ).C *.n ' 4.P ;.y y l.m. -.;.S >.n u v % n. # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y :.^.k ^.U <. [.}. g e |.d.E y x o. ^./. (._. y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y 3.2. 2.I h 4.Y % o Y 2. ! E y R =. ).% % % m y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y 3.7. 7.I G ^ 1 2.%. Y 7. ! E y l.m. % 6. y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 y :.@.k @.U % b.1 :.E g @.k r E y {.p.I } e 0., k a. y # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 E o o o q. 7.r.3.j.' g.a I h.y ' 4.P s.y %.% i.T ] -.d.c m ,. y H # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 8 9 9 9 9 9 9 9 9 9 9 7 # + ", +" + @ 6 7 7 7 7 7 7 7 7 7 7 7 7 # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/empty_linux.xpm b/hdspmixer/pixmaps/empty_linux.xpm index e74ff51..f8556f8 100644 --- a/hdspmixer/pixmaps/empty_linux.xpm +++ b/hdspmixer/pixmaps/empty_linux.xpm @@ -1,1791 +1,306 @@ /* XPM */ -char * empty_linux_xpm[] = { -"76 253 1535 2", -" c None", -". c #404840", -"+ c #40483F", -"@ c #202720", -"# c #70786F", -"$ c #707060", -"% c #2F2F2F", -"& c #A0A0A0", -"* c #6F6F6F", -"= c #060606", -"- c #A0A09F", -"; c #A09FA0", -"> c #9FA0A0", -", c #9F9FA0", -"' c #9FA09F", -") c #A09F9F", -"! c #9F9F9F", -"~ c #9F9F9E", -"{ c #9EA09F", -"] c #9E9F9F", -"^ c #9E9F9E", -"/ c #9F9E9E", -"( c #9F9E9F", -"_ c #9E9E9E", -": c #9E9E9F", -"< c #9D9E9D", -"[ c #9E9E9D", -"} c #9D9E9E", -"| c #9E9F9D", -"1 c #9D9F9E", -"2 c #9D9F9D", -"3 c #9E9D9E", -"4 c #9E9D9D", -"5 c #9D9D9D", -"6 c #9D9D9E", -"7 c #9D9E9C", -"8 c #9C9D9D", -"9 c #9C9E9D", -"0 c #9D9D9C", -"a c #9C9E9C", -"b c #9C9D9C", -"c c #9D9C9C", -"d c #9C9C9C", -"e c #9C9C9D", -"f c #9B9C9C", -"g c #9B9D9C", -"h c #9C9D9B", -"i c #9C9C9B", -"j c #9B9D9B", -"k c #9B9C9B", -"l c #9B9B9B", -"m c #9B9B9C", -"n c #9C9B9B", -"o c #9A9C9B", -"p c #9B9C9A", -"q c #9B9B9A", -"r c #9A9C9A", -"s c #9A9B9A", -"t c #9A9B9B", -"u c #9A9A9A", -"v c #999B9A", -"w c #999B99", -"x c #999A99", -"y c #9A9B99", -"z c #999A9A", -"A c #9A9A99", -"B c #989A99", -"C c #999A98", -"D c #989A98", -"E c #999999", -"F c #999998", -"G c #989998", -"H c #989999", -"I c #989997", -"J c #989A97", -"K c #979998", -"L c #979A98", -"M c #979A97", -"N c #979997", -"O c #979897", -"P c #989898", -"Q c #989897", -"R c #979898", -"S c #969897", -"T c #969997", -"U c #979896", -"V c #969896", -"W c #979996", -"X c #969996", -"Y c #969796", -"Z c #969797", -"` c #979797", -" . c #979796", -".. c #969795", -"+. c #969895", -"@. c #959895", -"#. c #959796", -"$. c #959896", -"%. c #959795", -"&. c #959695", -"*. c #959696", -"=. c #959794", -"-. c #959694", -";. c #949695", -">. c #949795", -",. c #949794", -"'. c #949694", -"). c #949693", -"!. c #939693", -"~. c #939694", -"{. c #949594", -"]. c #949593", -"^. c #939593", -"/. c #939594", -"(. c #929593", -"_. c #939592", -":. c #939493", -"<. c #929592", -"[. c #929493", -"}. c #929492", -"|. c #939492", -"1. c #929491", -"2. c #919592", -"3. c #919492", -"4. c #919491", -"5. c #919591", -"6. c #929591", -"7. c #919391", -"8. c #929392", -"9. c #929391", -"0. c #919392", -"a. c #909391", -"b. c #919490", -"c. c #919390", -"d. c #909390", -"e. c #909490", -"f. c #909491", -"g. c #909291", -"h. c #909290", -"i. c #919290", -"j. c #8F9290", -"k. c #8F9390", -"l. c #90938F", -"m. c #90928F", -"n. c #8F938F", -"o. c #8F928F", -"p. c #90918F", -"q. c #8F9190", -"r. c #8F918F", -"s. c #8F928E", -"t. c #8E928F", -"u. c #8E918F", -"v. c #8F918E", -"w. c #8E928E", -"x. c #8E918E", -"y. c #8E908E", -"z. c #8E918D", -"A. c #8D918E", -"B. c #8D908E", -"C. c #8E908D", -"D. c #8D918D", -"E. c #8D908D", -"F. c #8C908D", -"G. c #8D908C", -"H. c #8C908C", -"I. c #8C8F8C", -"J. c #8D8F8C", -"K. c #8C8F8D", -"L. c #8D8F8D", -"M. c #8B8F8C", -"N. c #8C908B", -"O. c #8C8F8B", -"P. c #8B8F8B", -"Q. c #8B8E8C", -"R. c #8C8E8B", -"S. c #8B8E8B", -"T. c #8C8E8C", -"U. c #8B8E8A", -"V. c #8A8F8B", -"W. c #8A8E8B", -"X. c #8B8F8A", -"Y. c #8A8E8A", -"Z. c #8A8F8A", -"`. c #8A8D8A", -" + c #8A8D8B", -".+ c #8B8D8A", -"++ c #898E8A", -"@+ c #8A8E89", -"#+ c #898E89", -"$+ c #8A8D89", -"%+ c #898D89", -"&+ c #898D8A", -"*+ c #898C89", -"=+ c #8A8C89", -"-+ c #898C8A", -";+ c #898D88", -">+ c #898C88", -",+ c #888D89", -"'+ c #888D88", -")+ c #888C89", -"!+ c #888C88", -"~+ c #878C88", -"{+ c #6C6E6C", -"]+ c #3A3A3A", -"^+ c #303027", -"/+ c #303022", -"(+ c #313023", -"_+ c #303023", -":+ c #303024", -"<+ c #2F3024", -"[+ c #2F2F25", -"}+ c #2E2F25", -"|+ c #2E2F26", -"1+ c #2E2E26", -"2+ c #2E2E27", -"3+ c #2D2E27", -"4+ c #2D2E28", -"5+ c #2D2D28", -"6+ c #2C2D28", -"7+ c #2C2D29", -"8+ c #2C2C29", -"9+ c #2C2C2A", -"0+ c #2B2C2A", -"a+ c #2B2C2B", -"b+ c #2A2C2B", -"c+ c #2A2C2C", -"d+ c #2A2B2C", -"e+ c #292B2C", -"f+ c #292A2D", -"g+ c #2C2C2E", -"h+ c #5B5C5B", -"i+ c #2F2E21", -"j+ c #6E6D47", -"k+ c #A19F69", -"l+ c #A9A971", -"m+ c #A9A972", -"n+ c #A9A873", -"o+ c #A8A774", -"p+ c #A7A775", -"q+ c #A7A676", -"r+ c #A6A677", -"s+ c #A5A578", -"t+ c #A4A578", -"u+ c #A4A47A", -"v+ c #A3A47B", -"w+ c #A2A37C", -"x+ c #A2A27D", -"y+ c #A1A27E", -"z+ c #A0A17F", -"A+ c #9FA181", -"B+ c #9FA081", -"C+ c #9E9F82", -"D+ c #9D9F83", -"E+ c #9C9E84", -"F+ c #9C9E85", -"G+ c #9B9D86", -"H+ c #9A9D87", -"I+ c #9A9C87", -"J+ c #999C89", -"K+ c #989B8A", -"L+ c #989A8B", -"M+ c #979A8C", -"N+ c #969A8D", -"O+ c #96998E", -"P+ c #95988E", -"Q+ c #95988F", -"R+ c #949790", -"S+ c #939692", -"T+ c #929693", -"U+ c #919694", -"V+ c #909495", -"W+ c #909496", -"X+ c #8F9497", -"Y+ c #8E9398", -"Z+ c #8E9399", -"`+ c #8D929A", -" @ c #8C929A", -".@ c #8C919C", -"+@ c #838894", -"@@ c #595D65", -"#@ c #27282B", -"$@ c #878C87", -"%@ c #888B88", -"&@ c #888C87", -"*@ c #888B87", -"=@ c #2E2E29", -"-@ c #717047", -";@ c #ABAA6E", -">@ c #AAA86E", -",@ c #7F7E54", -"'@ c #565639", -")@ c #42422C", -"!@ c #41402C", -"~@ c #525239", -"{@ c #787854", -"]@ c #A3A374", -"^@ c #A6A576", -"/@ c #A4A478", -"(@ c #A4A479", -"_@ c #A3A37A", -":@ c #A2A37B", -"<@ c #555641", -"[@ c #404031", -"}@ c #8D8E6F", -"|@ c #60614D", -"1@ c #8A8C70", -"2@ c #9D9E83", -"3@ c #9D9E84", -"4@ c #9C9D84", -"5@ c #999C87", -"6@ c #999B89", -"7@ c #989B89", -"8@ c #989B8B", -"9@ c #96998C", -"0@ c #95998D", -"a@ c #95998E", -"b@ c #94978F", -"c@ c #949890", -"d@ c #939791", -"e@ c #939691", -"f@ c #919593", -"g@ c #909594", -"h@ c #909396", -"i@ c #8F9397", -"j@ c #8D9398", -"k@ c #8E929A", -"l@ c #8B919B", -"m@ c #8B909D", -"n@ c #8A909D", -"o@ c #5B5E68", -"p@ c #2B2C2D", -"q@ c #2B2B22", -"r@ c #95935D", -"s@ c #ACAB6D", -"t@ c #706F47", -"u@ c #22221B", -"v@ c #34363B", -"w@ c #5A5D64", -"x@ c #70747C", -"y@ c #737780", -"z@ c #64676E", -"A@ c #404248", -"B@ c #20211D", -"C@ c #626145", -"D@ c #A3A376", -"E@ c #A5A579", -"F@ c #A4A37A", -"G@ c #68684F", -"H@ c #1E1E18", -"I@ c #898A6C", -"J@ c #999979", -"K@ c #3C3D31", -"L@ c #6F715A", -"M@ c #5A5B4A", -"N@ c #686956", -"O@ c #595A4B", -"P@ c #979981", -"Q@ c #5B5D4E", -"R@ c #858774", -"S@ c #6C6E5F", -"T@ c #727465", -"U@ c #6B6D61", -"V@ c #5B5C52", -"W@ c #6F7266", -"X@ c #565850", -"Y@ c #93968A", -"Z@ c #93978F", -"`@ c #929692", -" # c #8E9298", -".# c #8D9299", -"+# c #8C919A", -"@# c #8C919B", -"## c #8A8F9E", -"$# c #8A909E", -"%# c #777B88", -"&# c #262628", -"*# c #878B88", -"=# c #878B87", -"-# c #868B87", -";# c #96945C", -"># c #AAA96A", -",# c #414129", -"'# c #333438", -")# c #7A7E85", -"!# c #737779", -"~# c #92979D", -"{# c #979CA4", -"]# c #9499A1", -"^# c #777A7E", -"/# c #8C909A", -"(# c #484A50", -"_# c #313124", -":# c #9B9B71", -"<# c #A3A47A", -"[# c #77775B", -"}# c #25261D", -"|# c #9B9C79", -"1# c #9A9B7A", -"2# c #666753", -"3# c #1D1D17", -"4# c #35352C", -"5# c #2C2D24", -"6# c #4E4F42", -"7# c #32322A", -"8# c #56574B", -"9# c #5B5D50", -"0# c #67695C", -"a# c #0F100E", -"b# c #262723", -"c# c #85887D", -"d# c #95988D", -"e# c #94988F", -"f# c #939790", -"g# c #929691", -"h# c #919594", -"i# c #8F9396", -"j# c #8D919A", -"k# c #8B909C", -"l# c #777C88", -"m# c #2B2B2B", -"n# c #878B86", -"o# c #727145", -"p# c #AEAC6A", -"q# c #45484E", -"r# c #8B8F96", -"s# c #898D8E", -"t# c #A9A024", -"u# c #646769", -"v# c #979CA3", -"w# c #808387", -"x# c #A8A023", -"y# c #707478", -"z# c #959AA4", -"A# c #656870", -"B# c #2C2C21", -"C# c #9E9E74", -"D# c #A3A479", -"E# c #A2A37A", -"F# c #76775A", -"G# c #8E8E6E", -"H# c #7B7C61", -"I# c #36372B", -"J# c #6D6E58", -"K# c #71725E", -"L# c #656655", -"M# c #3C3D33", -"N# c #4B4C3F", -"O# c #535548", -"P# c #747565", -"Q# c #2C2D27", -"R# c #959886", -"S# c #33332E", -"T# c #0A0A09", -"U# c #76796E", -"V# c #94988E", -"W# c #8F9496", -"X# c #8D9397", -"Y# c #8D9199", -"Z# c #8B919C", -"`# c #8A909C", -" $ c #8A8F9D", -".$ c #898F9E", -"+$ c #5B5F68", -"@$ c #595B59", -"#$ c #878A87", -"$$ c #2F2E1F", -"%$ c #AEAC69", -"&$ c #333437", -"*$ c #8B8F95", -"=$ c #989DA2", -"-$ c #7B794B", -";$ c #9A9329", -">$ c #7A7E82", -",$ c #979DA4", -"'$ c #92969D", -")$ c #969033", -"!$ c #7A783C", -"~$ c #9499A2", -"{$ c #959BA5", -"]$ c #51535A", -"^$ c #4C4C38", -"/$ c #A3A379", -"($ c #3E3E30", -"_$ c #0A0A08", -":$ c #1F2018", -"<$ c #1C1D16", -"[$ c #10110D", -"}$ c #38392C", -"|$ c #0F0F0C", -"1$ c #4C4D3F", -"2$ c #35352D", -"3$ c #1A1A16", -"4$ c #646555", -"5$ c #181916", -"6$ c #262721", -"7$ c #0E0E0D", -"8$ c #3C3D35", -"9$ c #30302C", -"0$ c #151513", -"a$ c #868A7E", -"b$ c #929690", -"c$ c #8F9494", -"d$ c #8F9495", -"e$ c #8E9397", -"f$ c #8D9298", -"g$ c #8C9199", -"h$ c #898F9D", -"i$ c #868B86", -"j$ c #868A86", -"k$ c #868A87", -"l$ c #6C6D6C", -"m$ c #706F43", -"n$ c #ADAB68", -"o$ c #22221A", -"p$ c #7A7E84", -"q$ c #848788", -"r$ c #7C7B4A", -"s$ c #B9AF27", -"t$ c #4D4D3B", -"u$ c #908A26", -"v$ c #707373", -"w$ c #7F8386", -"x$ c #8C8625", -"y$ c #5E5F4F", -"z$ c #B5AC28", -"A$ c #7E7B42", -"B$ c #7D8186", -"C$ c #9398A2", -"D$ c #1F2020", -"E$ c #8D8D68", -"F$ c #8F906D", -"G$ c #7B7C5F", -"H$ c #7B7B5F", -"I$ c #7D7E62", -"J$ c #7F7F64", -"K$ c #7D7D64", -"L$ c #7D7E65", -"M$ c #7E8068", -"N$ c #878970", -"O$ c #777964", -"P$ c #92947C", -"Q$ c #7A7D6A", -"R$ c #787968", -"S$ c #787A6A", -"T$ c #7C7F6F", -"U$ c #747769", -"V$ c #828576", -"W$ c #73766A", -"X$ c #888B7F", -"Y$ c #95988C", -"Z$ c #94988D", -"`$ c #94978E", -" % c #939690", -".% c #929791", -"+% c #909593", -"@% c #909494", -"#% c #8F9395", -"$% c #8E9396", -"%% c #8E9297", -"&% c #8C9198", -"*% c #8B909B", -"=% c #8A909B", -"-% c #595D66", -";% c #6A6C6A", -">% c #878A86", -",% c #393A39", -"'% c #A4A261", -")% c #848350", -"!% c #333538", -"~% c #797C7D", -"{% c #A19922", -"]% c #968F2A", -"^% c #4C4D3C", -"/% c #ADA429", -"(% c #706D31", -"_% c #7D8187", -":% c #959AA1", -"<% c #767445", -"[% c #B3AA29", -"}% c #938C2F", -"|% c #AFA625", -"1% c #63676A", -"2% c #53565D", -"3% c #52523D", -"4% c #A2A379", -"5% c #868666", -"6% c #61624B", -"7% c #919372", -"8% c #9FA07E", -"9% c #9E9F7F", -"0% c #9EA080", -"a% c #9D9F81", -"b% c #9C9E82", -"c% c #9C9D83", -"d% c #9B9D84", -"e% c #9B9C85", -"f% c #616354", -"g% c #848674", -"h% c #76786A", -"i% c #888B7B", -"j% c #979A8A", -"k% c #96998A", -"l% c #96988B", -"m% c #95998C", -"n% c #93968F", -"o% c #92978F", -"p% c #909493", -"q% c #8F9394", -"r% c #8E9296", -"s% c #8D9297", -"t% c #8B919A", -"u% c #8A8F9C", -"v% c #818694", -"w% c #383938", -"x% c #868A85", -"y% c #858A86", -"z% c #858A85", -"A% c #303026", -"B% c #AFAD67", -"C% c #5B5A36", -"D% c #585B60", -"E% c #969B9E", -"F% c #6D7072", -"G% c #808488", -"H% c #888326", -"I% c #706C32", -"J% c #7C8086", -"K% c #878C92", -"L% c #858A90", -"M% c #9499A0", -"N% c #8F8923", -"O% c #7F8389", -"P% c #6E7277", -"Q% c #81858F", -"R% c #7B7F88", -"S% c #29291E", -"T% c #A0A076", -"U% c #A1A37A", -"V% c #7E7F60", -"W% c #050504", -"X% c #3C3D2F", -"Y% c #9E9F7D", -"Z% c #898A6E", -"`% c #87896D", -" & c #929377", -".& c #7D7F67", -"+& c #9B9D82", -"@& c #8F9179", -"#& c #757665", -"$& c #33332B", -"%& c #494A40", -"&& c #4D4E44", -"*& c #636559", -"=& c #949686", -"-& c #6C6F63", -";& c #7F8175", -">& c #95988B", -",& c #909492", -"'& c #8E9395", -")& c #8D9296", -"!& c #8B9199", -"~& c #8B909A", -"{& c #898F9C", -"]& c #2A2C2D", -"^& c #30301F", -"/& c #47462A", -"(& c #6E7176", -"_& c #989DA1", -":& c #989CA2", -"<& c #797D7E", -"[& c #7F8388", -"}& c #8C9196", -"|& c #080808", -"1& c #030304", -"2& c #7B7F86", -"3& c #6B6E71", -"4& c #8D929B", -"5& c #969BA5", -"6& c #8D939D", -"7& c #181812", -"8& c #9A9A72", -"9& c #5F5F49", -"0& c #39392C", -"a& c #141410", -"b& c #8E9071", -"c& c #5C5D4A", -"d& c #25251D", -"e& c #7A7C64", -"f& c #0E0F0C", -"g& c #777963", -"h& c #2E2F27", -"i& c #10100D", -"j& c #1B1C19", -"k& c #5B5D52", -"l& c #292A25", -"m& c #282925", -"n& c #191917", -"o& c #66685F", -"p& c #94988C", -"q& c #93978E", -"r& c #92968F", -"s& c #919690", -"t& c #8D9197", -"u& c #8C9298", -"v& c #8A909A", -"w& c #8A8F9B", -"x& c #27292C", -"y& c #868986", -"z& c #B0AD67", -"A& c #48472A", -"B& c #707378", -"C& c #999DA1", -"D& c #7B7F7E", -"E& c #92979B", -"F& c #0A0B0A", -"G& c #040404", -"H& c #6C7179", -"I& c #767A7B", -"J& c #969BA4", -"K& c #8D929D", -"L& c #161610", -"M& c #979871", -"N& c #A1A179", -"O& c #1B1B14", -"P& c #1C1C16", -"Q& c #0D0D0A", -"R& c #555643", -"S& c #85866A", -"T& c #21211B", -"U& c #96987B", -"V& c #181814", -"W& c #4A4B3E", -"X& c #33342B", -"Y& c #93967E", -"Z& c #4C4E42", -"`& c #494B40", -" * c #42433A", -".* c #4D4E45", -"+* c #848779", -"@* c #717368", -"#* c #2A2B28", -"$* c #93968B", -"%* c #94978D", -"&* c #8D9295", -"** c #8C9197", -"=* c #8B9198", -"-* c #8B9099", -";* c #8A8F9A", -">* c #89909B", -",* c #898E9C", -"'* c #868985", -")* c #858985", -"!* c #848985", -"~* c #AFAD66", -"{* c #5C5C37", -"]* c #5E6165", -"^* c #969A9D", -"/* c #757978", -"(* c #939799", -"_* c #8A8529", -":* c #7F7B3A", -"<* c #91959A", -"[* c #858A91", -"}* c #747780", -"|* c #7C7A43", -"1* c #938B23", -"2* c #75797D", -"3* c #8F959D", -"4* c #7A7E86", -"5* c #212118", -"6* c #9B9C73", -"7* c #575841", -"8* c #78795C", -"9* c #494938", -"0* c #14140F", -"a* c #78795F", -"b* c #535444", -"c* c #070705", -"d* c #5B5C4B", -"e* c #161713", -"f* c #545548", -"g* c #151512", -"h* c #32322B", -"i* c #23241F", -"j* c #404139", -"k* c #22231F", -"l* c #474941", -"m* c #454640", -"n* c #93978D", -"o* c #93968E", -"p* c #91968F", -"q* c #909591", -"r* c #8F9492", -"s* c #8F9493", -"t* c #8E9394", -"u* c #8D9395", -"v* c #8A9099", -"w* c #898F9B", -"x* c #888F9C", -"y* c #2A2B2D", -"z* c #858A84", -"A* c #3B3C3A", -"B* c #A2A05E", -"C* c #86854F", -"D* c #393B3D", -"E* c #7E8281", -"F* c #A29922", -"G* c #A29A2C", -"H* c #60604C", -"I* c #A9A12C", -"J* c #807C39", -"K* c #94999F", -"L* c #B0A729", -"M* c #4C4C3A", -"N* c #9A922B", -"O* c #B0A625", -"P* c #626568", -"Q* c #51545A", -"R* c #3E3F2E", -"S* c #A0A177", -"T* c #727355", -"U* c #565641", -"V* c #77785C", -"W* c #77785E", -"X* c #76775F", -"Y* c #505141", -"Z* c #5E5F4E", -"`* c #6F705C", -" = c #80826B", -".= c #515244", -"+= c #646556", -"@= c #585A4D", -"#= c #56584C", -"$= c #5A5B50", -"%= c #878979", -"&= c #505148", -"*= c #56584F", -"== c #86897D", -"-= c #94978C", -";= c #93978C", -">= c #93968D", -",= c #92968E", -"'= c #92958F", -")= c #919590", -"!= c #8F9393", -"~= c #8D9294", -"{= c #888E9C", -"]= c #7F8692", -"^= c #3A3B3A", -"/= c #848A84", -"(= c #848984", -"_= c #858984", -":= c #6F706F", -"<= c #6C6C3F", -"[= c #ADAB66", -"}= c #24241B", -"|= c #898D91", -"1= c #7F8385", -"2= c #716F46", -"3= c #BBB128", -"4= c #5C5C48", -"5= c #898327", -"6= c #666969", -"7= c #808487", -"8= c #868025", -"9= c #4B4C3C", -"0= c #B8AF28", -"a= c #696738", -"b= c #6A6E74", -"c= c #868B94", -"d= c #1B1B1B", -"e= c #707051", -"f= c #A2A378", -"g= c #93946E", -"h= c #8F906C", -"i= c #90916E", -"j= c #9E9F7A", -"k= c #9FA07C", -"l= c #9EA07D", -"m= c #9E9F7E", -"n= c #9C9E7F", -"o= c #9C9E81", -"p= c #9A9C82", -"q= c #9A9C84", -"r= c #999B84", -"s= c #989B85", -"t= c #989A86", -"u= c #919482", -"v= c #878A7A", -"w= c #959889", -"x= c #95978B", -"y= c #92978D", -"z= c #909590", -"A= c #8E9393", -"B= c #8C9295", -"C= c #8A9098", -"D= c #898F9A", -"E= c #888F9B", -"F= c #565A62", -"G= c #6D6F6D", -"H= c #848884", -"I= c #818682", -"J= c #2D2C1F", -"K= c #AEAC66", -"L= c #757445", -"M= c #3B3D3F", -"N= c #979CA0", -"O= c #979BA0", -"P= c #76744C", -"Q= c #A0982A", -"R= c #828689", -"S= c #8F949A", -"T= c #8A8F94", -"U= c #958F2D", -"V= c #6D6B37", -"W= c #848891", -"X= c #959BA4", -"Y= c #4E5056", -"Z= c #2E2E21", -"`= c #98996E", -" - c #3C3C2C", -".- c #090A08", -"+- c #1A1B14", -"@- c #191913", -"#- c #848467", -"$- c #9C9D7C", -"%- c #9C9E7E", -"&- c #9B9E80", -"*- c #9B9D81", -"=- c #999C83", -"-- c #959883", -";- c #979A86", -">- c #747668", -",- c #0D0D0B", -"'- c #85887A", -")- c #94988A", -"!- c #929588", -"~- c #94968C", -"{- c #92958E", -"]- c #91958F", -"^- c #8F9491", -"/- c #8C9090", -"(- c #8B9097", -"_- c #8A8F99", -":- c #888D9B", -"<- c #262629", -"[- c #858884", -"}- c #606160", -"|- c #6C6B40", -"1- c #ADAB67", -"2- c #434328", -"3- c #56585B", -"4- c #979CA1", -"5- c #8A8E8F", -"6- c #A09722", -"7- c #646768", -"8- c #979CA2", -"9- c #9F9621", -"0- c #64676C", -"a- c #959AA3", -"b- c #64676D", -"c- c #171812", -"d- c #7C7D59", -"e- c #A2A377", -"f- c #737355", -"g- c #25241B", -"h- c #939570", -"i- c #64654D", -"j- c #2C2C22", -"k- c #5B5C47", -"l- c #191813", -"m- c #1E1E17", -"n- c #646552", -"o- c #525345", -"p- c #191A15", -"q- c #35362D", -"r- c #393A31", -"s- c #181815", -"t- c #272823", -"u- c #8A8D7B", -"v- c #161715", -"w- c #787A6E", -"x- c #252623", -"y- c #11120F", -"z- c #343631", -"A- c #494B46", -"B- c #191B19", -"C- c #1A1B19", -"D- c #1F201F", -"E- c #7A7E7A", -"F- c #323433", -"G- c #161817", -"H- c #282A2A", -"I- c #56595A", -"J- c #161617", -"K- c #262728", -"L- c #2D2F30", -"M- c #1C1C1E", -"N- c #292B2D", -"O- c #858B95", -"P- c #898E9B", -"Q- c #888E9B", -"R- c #555A61", -"S- c #5E605E", -"T- c #848883", -"U- c #848983", -"V- c #918F56", -"W- c #A8A765", -"X- c #403E27", -"Y- c #3F4043", -"Z- c #8F9498", -"`- c #747879", -" ; c #85898E", -".; c #969BA1", -"+; c #727578", -"@; c #848890", -"#; c #484B4F", -"$; c #191912", -"%; c #70704F", -"&; c #A2A274", -"*; c #A3A476", -"=; c #A2A376", -"-; c #737455", -";; c #24251B", -">; c #9B9C76", -",; c #808162", -"'; c #191A14", -"); c #0C0C0A", -"!; c #36372C", -"~; c #2B2B23", -"{; c #464739", -"]; c #4F5041", -"^; c #1C1D18", -"/; c #535547", -"(; c #0D0E0B", -"_; c #3C3D34", -":; c #25251F", -"<; c #4B4C43", -"[; c #161714", -"}; c #464840", -"|; c #31312D", -"1; c #82857A", -"2; c #31332F", -"3; c #4B4D48", -"4; c #121212", -"5; c #737670", -"6; c #5B5D59", -"7; c #151615", -"8; c #0E100F", -"9; c #393B3A", -"0; c #4C4E4F", -"a; c #0A0A0A", -"b; c #626669", -"c; c #55585E", -"d; c #868C96", -"e; c #717682", -"f; c #2D2E2E", -"g; c #838884", -"h; c #838983", -"i; c #838984", -"j; c #838883", -"k; c #2A2A24", -"l; c #8F8D55", -"m; c #A9A966", -"n; c #67653E", -"o; c #424447", -"p; c #7E8387", -"q; c #6C7175", -"r; c #46484B", -"s; c #171815", -"t; c #343424", -"u; c #81815A", -"v; c #A3A373", -"w; c #A3A375", -"x; c #64654A", -"y; c #1C1C15", -"z; c #747457", -"A; c #2E2E23", -"B; c #3B3B2E", -"C; c #525341", -"D; c #444436", -"E; c #535443", -"F; c #84866C", -"G; c #7F816C", -"H; c #131310", -"I; c #5A5C4E", -"J; c #34352E", -"K; c #5D5F53", -"L; c #131311", -"M; c #4F5148", -"N; c #252621", -"O; c #7A7D71", -"P; c #1F1F1D", -"Q; c #4C4F49", -"R; c #6F736D", -"S; c #414340", -"T; c #232322", -"U; c #131414", -"V; c #565957", -"W; c #2E3030", -"X; c #5C5F5F", -"Y; c #0C0D0D", -"Z; c #777C80", -"`; c #505356", -" > c #53565A", -".> c #7E848D", -"+> c #898E9A", -"@> c #717680", -"#> c #67663E", -"$> c #AAA968", -"%> c #9F9D62", -"&> c #6C6B43", -"*> c #3E3D27", -"=> c #272719", -"-> c #242317", -";> c #2F2F1F", -">> c #4E4E34", -",> c #7B7B53", -"'> c #9E9E6C", -")> c #A4A572", -"!> c #A4A473", -"~> c #A4A474", -"{> c #A2A375", -"]> c #4E4E39", -"^> c #2B2B20", -"/> c #444534", -"(> c #888969", -"_> c #828365", -":> c #2C2D23", -"<> c #2D2D24", -"[> c #787961", -"}> c #9B9D7F", -"|> c #48493C", -"1> c #999B82", -"2> c #686A59", -"3> c #24251F", -"4> c #383931", -"5> c #626456", -"6> c #595B51", -"7> c #51534A", -"8> c #21211E", -"9> c #44453F", -"0> c #72756C", -"a> c #131413", -"b> c #2D2F2C", -"c> c #2F302E", -"d> c #727572", -"e> c #5D605E", -"f> c #212221", -"g> c #383A39", -"h> c #5A5D5D", -"i> c #272728", -"j> c #5C5F62", -"k> c #3E4042", -"l> c #262729", -"m> c #383A3E", -"n> c #7F848D", -"o> c #838784", -"p> c #838783", -"q> c #646564", -"r> c #65643E", -"s> c #99975F", -"t> c #A9A86A", -"u> c #A5A56A", -"v> c #A3A26A", -"w> c #A5A46C", -"x> c #A6A56F", -"y> c #A6A670", -"z> c #A5A571", -"A> c #A5A572", -"B> c #A0A175", -"C> c #9D9D75", -"D> c #9D9D76", -"E> c #9E9F78", -"F> c #9FA07A", -"G> c #9E9F7B", -"H> c #9B9D7A", -"I> c #989979", -"J> c #9C9E7D", -"K> c #9C9D7F", -"L> c #999B7F", -"M> c #989A7F", -"N> c #999B83", -"O> c #959780", -"P> c #949781", -"Q> c #969985", -"R> c #939684", -"S> c #939685", -"T> c #949888", -"U> c #909285", -"V> c #919588", -"W> c #4E504A", -"X> c #0E0E0E", -"Y> c #71746E", -"Z> c #8D918B", -"`> c #90948F", -" , c #8F948F", -"., c #8B8F8D", -"+, c #8B8F8F", -"@, c #8D9292", -"#, c #8A8F91", -"$, c #8A8F93", -"%, c #797E84", -"&, c #4E5256", -"*, c #252627", -"=, c #636463", -"-, c #828783", -";, c #828883", -">, c #838882", -",, c #747674", -"', c #414240", -"), c #30302A", -"!, c #313125", -"~, c #303123", -"{, c #313123", -"], c #313024", -"^, c #303124", -"/, c #303025", -"(, c #2F3026", -"_, c #2F2F27", -":, c #2D2E29", -"<, c #2C2D2A", -"[, c #292A28", -"}, c #20211F", -"|, c #262625", -"1, c #2C2C2B", -"2, c #2C2C2C", -"3, c #2B2C2C", -"4, c #2B2B2C", -"5, c #414241", -"6, c #828782", -"7, c #828882", -"8, c #838782", -"9, c #828781", -"0, c #818782", -"a, c #818781", -"b, c #828682", -"c, c #818681", -"d, c #828681", -"e, c #BED2BC", -"f, c #525650", -"g, c #292B2A", -"h, c #111212", -"i, c #606460", -"j, c #757A75", -"k, c #ACB8AC", -"l, c #DEDEDE", -"m, c #EFF0EF", -"n, c #FEFEFC", -"o, c #808681", -"p, c #818680", -"q, c #687068", -"r, c #424543", -"s, c #D6D6D4", -"t, c #808781", -"u, c #818580", -"v, c #818581", -"w, c #808680", -"x, c #808581", -"y, c #808580", -"z, c #7F8580", -"A, c #80857F", -"B, c #80867F", -"C, c #7F857F", -"D, c #7F867F", -"E, c #80847F", -"F, c #1C1C1C", -"G, c #808480", -"H, c #7F847F", -"I, c #7F8480", -"J, c #7E847F", -"K, c #7E857F", -"L, c #7F847E", -"M, c #7E847E", -"N, c #7E837F", -"O, c #7F837E", -"P, c #7E837E", -"Q, c #C6C6C4", -"R, c #E8E9E9", -"S, c #7E847D", -"T, c #7D837D", -"U, c #7D847D", -"V, c #7D847E", -"W, c #7E837D", -"X, c #CBCBCC", -"Y, c #7D837E", -"Z, c #939992", -"`, c #7D827D", -" ' c #7C837C", -".' c #7D837C", -"+' c #353835", -"@' c #7C837D", -"#' c #7D827C", -"$' c #7C827D", -"%' c #7C827C", -"&' c #B3C0B4", -"*' c #C7D9C5", -"=' c #DBF3DC", -"-' c #D6ECD4", -";' c #D2E9D4", -">' c #7C827B", -",' c #CDE4CE", -"'' c #7C817C", -")' c #7B827C", -"!' c #7B817B", -"~' c #7B817C", -"{' c #C8DEC9", -"]' c #7B827B", -"^' c #7C817B", -"/' c #9DA79E", -"(' c #C2DAC4", -"_' c #7A817B", -":' c #7B817A", -"<' c #7A807B", -"[' c #7A817A", -"}' c #7B807A", -"|' c #7A807A", -"1' c #A6B0A6", -"2' c #7A8079", -"3' c #79807A", -"4' c #798079", -"5' c #7A7F7A", -"6' c #7A7F79", -"7' c #797F79", -"8' c #787F79", -"9' c #788079", -"0' c #787F78", -"a' c #798078", -"b' c #797F78", -"c' c #787E78", -"d' c #787E79", -"e' c #787F77", -"f' c #787E77", -"g' c #777E78", -"h' c #777F77", -"i' c #777E77", -"j' c #D2D2D4", -"k' c #777D77", -"l' c #777E76", -"m' c #767D77", -"n' c #777D76", -"o' c #767E77", -"p' c #767E76", -"q' c #767D76", -"r' c #767C76", -"s' c #767D75", -"t' c #757D75", -"u' c #757D76", -"v' c #757C76", -"w' c #767C75", -"x' c #757C75", -"y' c #757C74", -"z' c #747D75", -"A' c #747C75", -"B' c #747C74", -"C' c #757B75", -"D' c #757B74", -"E' c #747B74", -"F' c #747B75", -"G' c #747C73", -"H' c #747B73", -"I' c #737C74", -"J' c #737B74", -"K' c #737C73", -"L' c #737B73", -"M' c #747A74", -"N' c #747A73", -"O' c #737A74", -"P' c #737A73", -"Q' c #808880", -"R' c #4D4E4D", -"S' c #2D3030", -"T' c #5F685F", -"U' c #737B72", -"V' c #7F887F", -"W' c #4F584F", -"X' c #4F504F", -"Y' c #414641", -"Z' c #50584F", -"`' c #405040", -" ) c #3F443F", -".) c #4E514E", -"+) c #727B72", -"@) c #727A73", -"#) c #727972", -"$) c #5E615E", -"%) c #5A5D5A", -"&) c #626562", -"*) c #575A57", -"=) c #666966", -"-) c #5A5C5A", -";) c #696D6A", -">) c #535653", -",) c #5B605B", -"') c #515451", -")) c #565956", -"!) c #545754", -"~) c #525552", -"{) c #555A55", -"]) c #404340", -"^) c #454645", -"/) c #A6A6A6", -"() c #737A72", -"_) c #535654", -":) c #4D524D", -"<) c #4A4E4A", -"[) c #4B4F4B", -"}) c #50534F", -"|) c #494C49", -"1) c #484B48", -"2) c #4D504D", -"3) c #454A45", -"4) c #474C47", -"5) c #4A4D4A", -"6) c #505350", -"7) c #4B504B", -"8) c #4C504B", -"9) c #424542", -"0) c #464946", -"a) c #555855", -"b) c #494E49", -"c) c #434743", -"d) c #434645", -"e) c #AAAAAA", -"f) c #727A72", -"g) c #444843", -"h) c #444744", -"i) c #4C4F4C", -"j) c #414441", -"k) c #3D413D", -"l) c #393B39", -"m) c #3B3F3B", -"n) c #3E413E", -"o) c #4F544F", -"p) c #464A45", -"q) c #494E4E", -"r) c #393D39", -"s) c #464A4A", -"t) c #3C3F3C", -"u) c #494A49", -"v) c #07090A", -"w) c #0F1010", -"x) c #100F0F", -"y) c #0D0D0D", -"z) c #0F0F0F", -"A) c #727973", -"B) c #939DA1", -"C) c #9CA5A9", -"D) c #A9B5B9", -"E) c #B8C5C9", -"F) c #C4CACB", -"G) c #B2BDC2", -"H) c #AEBDC1", -"I) c #A2ADB2", -"J) c #949A9B", -"K) c #8E999C", -"L) c #8C969A", -"M) c #8A9395", -"N) c #848E91", -"O) c #848B8B", -"P) c #7E898B", -"Q) c #7A8386", -"R) c #727B7D", -"S) c #6C7274", -"T) c #6D7679", -"U) c #778082", -"V) c #757E81", -"W) c #717678", -"X) c #646B6D", -"Y) c #494F51", -"Z) c #333434", -"`) c #BECDD2", -" ! c #D1E0E5", -".! c #A1ACAE", -"+! c #869194", -"@! c #7D8689", -"#! c #686E71", -"$! c #3C3E40", -"%! c #333433", -"&! c #717972", -"*! c #717A72", -"=! c #050606", -"-! c #01070E", -";! c #070707", -">! c #242728", -",! c #1E2120", -"'! c #0B040B", -")! c #000000", -"!! c #3E3F3E", -"~! c #3E4142", -"{! c #363A39", -"]! c #40423F", -"^! c #363A36", -"/! c #727A71", -"(! c #C7D5D9", -"_! c #FBFFFF", -":! c #F2FFFF", -" - & - ; - - & & & & & & & & & & & & & & , & & & & & - > & > & & & & & & - , & - > > & & & & & & & & & & & & & > & - & & & & & & & * = ", -"& & & ' ; & & ' ; & ' - & > > ) ; & ) > , & & & ) & & & & - & & & > > & ; > - & & ; - ) - & & & > ; - & & - ) ; & & - & ; ; & & & & ; & > > & & & ) * = ", -"- > & ) & ; & - > > & ; > & ; & - & > , > ) > & - & - > & , & & > - ; > ! ' & & > & & ! - & - & ; & - & - & - > & ) ' ) - & > ' & ' > ; & - > & ' & * = ", -"- - ! - ' & ' ' ) & ; ) - > & & ; & - ) & > - - > - - > & ' ! & ' > ! ; ) & & > > - > & > , > ) - ; & > ' - ! ; ) ! ' & - ' ) ' ) - & ; - - & & , & * = ", -") > - - ) ! ; ) ! ! , , - ' ) > - ' ) ) - ' ; & , & , ! ' ) ! ; & > & , - ) ) & ! & & ! - ' ! ! , - ' ! ; > - ' ' ' ! ' , - > , > ' ! ) ' , - ! > ) * = ", -") , ! , - ! ! , ) - ! , ! > > & - ) ; ; ' ; ) ! - , ! ' ) ' ' ' , > ; ! > > ) ) ; ' , - ) , , & > - > ! ! ' - ! ! ) ! > - ; ' ; ' ! , , ) ! ) ) ' ! * = ", -"' ! ) ! ; , - ' ! , ' ' ; , ! ! ' ' ! ! ! ! ' > - ! - ! , ' ! ! ) & ' ! ' ) ! ' , , ' ! ' - > > ! ! ' ) ! ! ' ! ! ' ' ! ! ! , - ! ' ) ' ! ' ) ! ! > * = ", -"' ! ! ! ! ' ! ' ) ! ) , ! ! ! ! ! ' ! ' ! ' ! ! ' ! ! ' ' , ! ' ! , - ! ! , ! ! ! ! ' , ! ' ) ! ! ' ! ' ! ! ! ! ) ! ' ' ! ! ! ! ' ' > ! ! ! ' ! ) ! * = ", -"! ~ ! ! ! ! ! ! ' ' ! ! ! ' ! ! ! ' ! ! ! ! ! ! ! ! ! ! ! ! ! ! ~ ! ! { ! ' ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' ! ! ! ' ! ! ! ] ! { ! ! ! ! ! * = ", -"! ! ! ! ! ~ ! ! ! ! ! ~ ] ! ! ! ! ~ ~ ! ! ! ! ! ! ! ! ~ ~ ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ' ! ! ] ! ~ ~ ~ ! ] ] ! ! ! ! ! ] ~ ~ ! ! ! ' ! ^ ] ] * = ", -"! ~ ! ] ! ! ! ~ ! ! ! ! ] ] ! / ! ] ( ! ! ( ! ! ! ! ! ] ( ! ~ ! ~ ~ ! ~ ] ] ] ! ! ! ! ~ ! ] ] ^ ~ ( ! ( ! ^ ] ] ] ! ! ~ ~ ! ~ ! _ ] ] ! ~ ! ] ! ! ! * = ", -"^ ! ^ ] ~ ] ! ! ! ^ ! ^ ! / ^ : ~ ~ ] ! ~ ^ ! ~ ~ ^ ^ ! ! ^ / ^ ( ! ! ( _ : ] ^ ! ~ ! ! ! ! ! ! ] ! ^ ! ~ ^ ! ! ~ ! ] ( : / : _ _ ] ] ^ ! ] ! ] ! ! * = ", -"] ( ~ _ ^ : ^ ] _ _ ^ ^ ! ~ ! ] _ ~ / _ _ ~ ! ^ : ^ ] ] _ ^ ! : / ] ^ ! ] ( ] ^ ^ / ! ] _ ^ ~ _ : ~ / ~ ] ^ ] ! ~ ^ ^ / ] / ] ] ^ ~ ] ] : ] _ ! ] ^ * = ", -": ^ : _ _ ^ ^ ^ ! ] ^ ^ ! ^ ] / _ _ : ~ ~ / ~ : _ : _ ! : _ ~ ^ : ^ : _ ] / ~ _ ^ _ ~ ( ^ ^ ! ^ ^ _ _ _ ~ _ ^ ^ _ ] _ _ ~ ! ^ : _ _ ~ _ ^ _ ] ! ^ ^ * = ", -"_ ! ^ ] _ _ ^ _ ^ ^ : ! ^ ^ ^ _ _ _ _ : _ _ ~ _ : _ / ^ ^ _ / ^ _ ] / _ ~ ] _ _ ~ _ _ ~ _ _ _ _ _ ^ ^ _ ] : ^ ] / ^ ^ ~ ^ _ _ / : ^ _ ] : ^ ^ ^ : _ * = ", -"_ _ ~ ^ _ ^ ^ _ ~ ^ _ _ _ _ _ _ _ ^ ^ _ _ ^ _ ^ _ _ _ _ ^ _ _ _ _ ^ _ _ ^ _ ^ _ _ _ ^ ^ ^ ^ _ / _ _ ^ _ _ ^ ^ _ ] ^ _ ^ _ _ _ ^ ^ _ ^ _ _ ^ _ _ ] ^ * = ", -"< _ _ _ _ [ } ^ _ _ } [ [ _ ^ ^ } ^ ^ _ ^ _ _ ^ ^ _ _ [ _ _ _ _ ^ _ ^ ^ _ _ ^ } _ _ ^ _ ^ _ _ [ _ _ _ _ _ _ _ _ _ ^ _ [ ^ _ _ _ _ | [ [ _ _ ^ _ _ } * = ", -"[ [ [ < _ _ [ _ _ 1 _ 1 ^ _ _ _ _ _ 2 _ } ^ ^ _ _ < } _ _ _ _ ^ _ < _ ^ ^ [ _ } } [ _ | _ } _ _ } _ } _ _ _ _ _ ^ _ | } | _ _ [ _ ^ _ _ [ [ } _ ^ [ * = ", -"_ _ } _ _ [ _ _ [ _ _ _ } < [ } _ _ < < } [ < [ _ } } _ } } } [ < _ } [ _ < _ [ _ _ _ _ _ _ [ [ } < } _ [ < < } } _ < } } _ } _ [ } < } _ [ _ _ [ < * = ", -"< _ 3 [ [ } 4 [ } 3 } _ _ } 5 < 5 _ _ } [ [ } [ < < < [ } [ < < 4 5 [ 6 [ [ 4 < } [ 5 _ } _ < 5 < } [ } [ [ < [ < } < } } } } } 5 [ 4 _ 5 _ [ < _ 4 * = ", -"5 5 5 < < [ [ < < [ 4 < [ 5 < 6 < < } _ [ < < < 6 < } 5 4 } [ < } [ 5 } < < 5 < 5 < [ } < < [ < 5 5 5 } < 5 _ _ < < 5 } < 4 _ < _ < < 6 [ < < < < [ * = ", -"< < 4 [ < < 5 [ } < 5 5 < < 4 5 } < 5 5 < } 5 5 5 } < < } < 4 5 } < < 5 [ } < < 6 5 < < < < 5 } 5 5 < < 5 } [ < < < < < 5 } 5 5 < [ < < < } } < < 5 * = ", -"< < < 5 5 5 < < < 7 < 5 5 < 5 < < < 5 5 < 5 5 < < < 5 5 5 < 5 < < 5 < < 8 < < < 5 5 < 5 5 < 5 5 < 5 < 5 < < < < 5 < 5 5 < < 5 < < 5 5 < 5 < < 5 < < * = ", -"8 8 8 5 5 5 5 5 5 8 9 5 5 < < 8 5 5 0 5 5 5 5 5 < < 5 5 < < < 7 < < 8 0 5 < 5 5 0 5 8 < 5 5 8 5 5 5 5 5 8 < < 5 5 5 5 5 5 0 5 5 < 5 5 < 5 < 5 < a 5 * = ", -"5 5 5 a a 0 8 5 8 5 0 < 5 5 7 < 5 8 0 0 5 < 8 8 5 0 0 9 b 5 8 8 9 5 5 5 < 5 5 0 8 8 5 < 8 5 b 0 9 0 < 7 0 0 5 8 < 5 a 0 5 8 8 8 5 7 5 8 7 5 0 7 0 8 * = ", -"5 8 5 5 8 < 5 8 b 8 0 5 b b 0 8 b 5 < 5 5 0 5 8 b 8 5 5 0 b 0 0 5 8 8 8 8 5 8 b 8 8 0 8 5 b b b a 5 8 8 5 7 5 b 9 b 5 8 5 8 b 8 8 7 5 8 < 0 0 5 5 b * = ", -"b b 0 8 0 b b 0 b b b b b 8 b b 8 b b b b b 8 b 0 b 8 0 0 b b 8 b 5 b 0 b 8 5 b b 5 8 b 5 8 b c 8 b 8 8 0 5 8 b b b b 8 0 b 8 0 0 b b d 0 8 e 0 b 0 * = ", -"b b c b 8 8 b b d b 8 d b b b e 8 0 b b b b d 8 d 5 b b b b 5 b b b 0 b d 0 b 8 b 0 d 5 d b 0 b b 0 b b 8 d b d 0 b b b b 8 c d b b b 8 d b 0 d 8 b * = ", -"d b d d b b b d d b b b b b b b b b d d b b b b d b d b b b b d b b d b b b b d b b b b d b b b b d b b d b d b d b b d b b b d d d b b b b d b b b * = ", -"b b b f g b b d d b d b h b b b d i d b b i d d d d b f b i b d h d b b b b d b j d b d f d i h b f h b h d b b d d b b d d b d d b b d d d f d d d * = ", -"b f b i g d d k d d i d g f k b d i b g d i i g h d h f g i i i i b g f b k h i b i h h i b d d f b b b d d d k j h f i g k j b b b d j j i d b d d * = ", -"k d h k i k g f d d i d i i d i d k i f i k k k d f h i d d k h h f i i h f f k j h i d d d i i f i i f i i k g f j d h i d k i f i k b d b d f i i * = ", -"k i f i f k i i k g k k i f j k k j k k k k i k f i k k k j k i k j k d f k k f i k d k j k d i k k i d g d i k k k k b d k f i j f f k d k j d f k * = ", -"f k k k i k k k k k k k k i i k f k k k k k k k l d m k l f k k i k d k f f f k k k k k k k k k k k k k n k k k k m k k k i k k k k f k k f k k k k * = ", -"k k k k k k k k l k k k k k k k k l o k k k l k k k k k o k p k k p k k l k l k k p k k k k l k l k l k k k o k k k k l k k p k k k k k k k k k k k * = ", -"k o k o k k k k q l p k l k l o k r q o l s k o l k o k k k o k k k q k k l o l l o k k k o k k p r l k k k k t o k l o q o s l k k k k l o k p k k * = ", -"k l q t k k r l p l k q s k l k r t k s k t p o l k t l k l s o l r l t k q t o t s l q k l o s o k s r s t k p q k p k t l p l o o s q o q t s l q * = ", -"p q o s s p p s s s l s o s s q q l o o l t r q r q s r l r r t o p k s t l q s t s p s s r t p s t r t q o r t t r o r p s s r s s t p s s l t o r * = ", -"s r q p q s s s s s s s s l r s s s q s t t l s s s t s s s r s t p s s o s s t s s s t s q s s q s s q s s s s s s s s q q s r s s s s t q s q s s * = ", -"s s s r s s s q s s s s s s s s s s s s t s s s s q s s s s s s s s s s s t s s s s s s s s q s s s s s s s s s s s s t s s s s s s s s s s s s s s * = ", -"s s s u s s s v s s w x y s s s u s s s s s y y s v s s y s y s y s y s u s y v v y z u v s s v s y v y s s v u s s s u s s s s y u s s v w u v s s * = ", -"v u s y s u s v s u v u y u A A y x s z x s s v s A w z s u w v s u s A w v v y v w v v s y y s u s s s y s w A v v z A s v s s s u u y A z v w A u * = ", -"s s A x v y v s y y w w u A y w s v y v x w s s y v x s v y y x s A s y s v w v A u w s u s z u s z v s x u A z x y v z v w A A z x u w y y u v z y * = ", -"x x z A w w x x x x v y x x x x x v z A x x x x x x x A A A A w w z z x x y x w A A w w x x w x x u z v w x x A x w u x w z y x z A w A x x x x v v * = ", -"x x x x x x x x x x x x x x w x w x v x x x A w x x x x x x z x v x x w x x x x x y x x w x x z x z x x x x x x x x x x x x x x x x x x x x x x x z * = ", -"x x B C C x x x x B x B x C C B x x x x C x x w x C x x x x x x x x x x x B B x B C D C w x x x C x x x x x x x x x x x x w x B x D D C x w x x D x * = ", -"D x B x C C E C x x B B x x D x x F C B B B x C x C C B B x B B D C C E x B C B x B C B x B x B B C B x C D D x B x B x B B x x D x E x B x B x x D * = ", -"C x C B D D D C C C x x D C C C G D B x x G D B B B G E x D C C x x D B D H x D D x C x D B x B B x B F x D H D C x C E B D H D B C E B H x F C x C * = ", -"C G G D H D D D D D C G D C B F C G D B G C D D D B D D G G G C G B D G F C G G B F G F H G C G x G D D D E G D E F G F E B G D F G G G F F G G D G * = ", -"D F D G G D B G G G G G G G G G H D G G B D G G G G F F G D G D G G G G G D H G G D G G D G D D G D G G G G D G D D G G G D G D D H D H G G D G D G * = ", -"I G G G G G G G G G G J J D K G G I G K G I G G G D G G D D G I G I L G G K G G I G K I I K K K G G K G G G L G G D G G K K M I G G G J I G G G G G * = ", -"G N K K N N N N I N G G K N K G N G I N G G K N L I K G G K G I G G K I I G G G G I K K G I G N I G K N N G G I K N K G N N N G K K G I I N N G G G * = ", -"K K O N K I G N I N N K N N N P N I O K P P G K N G K K G Q N I K I N N I K G I I N O K N Q I K R I O K N O I I Q I R K G K R N I I K K Q P P K Q R * = ", -"N N O Q G I O N O N I K I N O N O N K N I R O O N N N I Q P O N O N G N N N O N N I I O O K R N N N O N I N N N I G Q N N I N I N N Q N N R N I K N * = ", -"O O N N N O N O N N O O O O O O O O O O N O O O N O O N O O O O N O N O O O O N N O O O N O N O O N O O O N O N N N N O O O N O N N N O O O O O N O * = ", -"S T S O O O O U O V O W N U N U V W U O S U O U O O O N O O N S W S N W N N O O O N O O O O O O T N N S O O O W N T O O S S W O V O U U O S T O X V * = ", -"U V W V V U V V S S O O U N S O S S U T S S O U O T S V S W S S O S O U O U S V S O S O O N O S S S U U S S S O U U U U S S U O O N V U V U V V T V * = ", -"S U S V Y V S S V O V V V V S V S Z V U O V S O V V U V V O S U V V V Y U U O V V U S ` V V O U O U S U O V V O V V O V V V U S V V V U S S V V O V * = ", -"V U V V Y V S Y .V Y V V V V V V V V V V V Y V U V S V S U V V Y S Y U Y V V V Y V V S V Y U V S V V V .Y V V V .V V U V Y Z Y V V S V .V Y V Y * = ", -"Y V V ..V Y Y +.Y V V V +.V Y V V ..V @.Y +.+.#.Y V V V V Y Y Y V V Y Y V Y Y V Y Y Y V Y V Y V Y +.Y Y V Y V +.V #.V V V Y V $.Y #.Y Y Y V ..Y V V * = ", -"V #.#.$.Y +.Y ..Y Y +.$...V Y Y $.+.V Y #.Y ..V Y Y #...Y #.#.V V Y #.Y #...V Y V $.#.V ....#.V ......#.Y +.#.V V Y #.Y Y ..V V ..Y #.Y V Y ..+.V V * = ", -"%.@.#.$.V +.......@.Y #.Y #.#.%.%...%...@...%...%.@.%.%.V %.#.Y %.%.Y V #...Y $.%.%.Y #.@.#.Y ..Y ........+.Y +.%.#.@.%.Y @...Y $.Y %.#.Y %...%.Y #.* = ", -"%.%.#.%.#...%.%.%.%.%.#.%.%.%.#.@...Y %...#.....Y Y %.#...%...%.%.%.%...%...#.....%...%.#...%...%.#...%.%.%.%.%...+.Y %.%.#.Y ..%.%.#.%.%.#.%.%.%.Y * = ", -"&.%.%.%.%.%.%.%.%.&.%.%.%.&.%.%.%.%.%.%.#.%.%.&.%.%.%.&.#.%.%.#...%.&.&.%.%.%.%.&.%.%.%.%.%.%.&.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.%.%.%.%.%.%.%.%.&.%.%.* = ", -"%.%.%.=.=.%.%.=.-.=.%.%.=.%.;.%.%.&.%.-.&.&.%.&.%.&.&.=.%.%.&.%.%.%.&.=.&.-.=.%.;.%.%.&.;.%.%.;.%.%.>.&.%.&.,.%.,.&.&.&.=.%.&.%.'.%.&.%.&.%.>.&.%.%.* = ", -"&.&.%.'.=.'.>.-.%.&.;.=.'.&.,.=.>.&.=.=.&.'.'.>.=.&.>.=.>.%.'.'.%.%.%.%.%.,.>.'.=.,.&.%.%.>.%.-.=.&.=.,.;.'.'.>.&.%.>.=.;.-.>.'.;.%.&.,.;.;.&.-.&.,.* = ", -"%.-.-.,.=.'.'.%.'.-.'.,.'.%.>.,.;.;.'.'.;.>.;.'.'.-.;.'.=.&.;.,.-.'.>.'.'.-.&.-.=.>.>.'.=.,.'.'.%.=.'.-.'.'.'.-.;.'.'.,.-.=.>.'.-.=.,.&.'.'.'.'.'.,.* = ", -",.'.'.-.'.;.'.,.'.'.'.'.;.,.'.'.'.'.'.'.'.,.'.'.'.'.'.'.,.'.'.'.'.'.'.'.'.'.,.'.-.'.'.'.-.'.'.'.'.'.'.-.'.'.;.-.,.'.'.'.;.'.'.'.'.'.'.'.'.'.,.'.-.'.* = ", -"'.).).'.!.'.'.'.'.'.~.'.'.).'.{.~.{.~.'.'.'.'.'.'.'.'.'.).'.'.'.{.).'.'.'.'.'.'.'.'.'.).'.~.{.).~.].'.'.'.'.'.'.).).'.'.).'.'.'.'.'.'.].'.).'.'.~.'.* = ", -"~.'.^.).'.'.'.!.).~.'.).).{.{././.~.].'.~.{.~.'.'.{.!.'.).].].'.).~.'.~./.{.'.'.].^.!.'.{.).~.'.).'.'.!./.'.~.'.!.'.'.~./.{.]./.].'.!.).'.^.'.{.^.'.* = ", -"~.).{.).~.'.].^.'.!.^.'./.^.~././.!.~.!.!.!./.'.).^./.~./.).~.'.^.^.{.{.~.^.].~.~./.).~./.^.~.~.!.~.{./.'.].).!.'.~.].).!.^.~./.].~.'.!.~.^.!.'.).^.* = ", -"{.!.^.).^.^.^.!.^.!.].'.~.!./.^.!.{.^.^.^.^.{.^.^./.!.^.^.!.^.^.!.!.).^.!.^.!.!.^.^.].~.!.].!.!.^.!.!.^.^.^.^./.^.^.).^./.^.!.^./.^./.].~.'.!.!.!.!.* = ", -"^.!.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.(.^.^.^.!.^.^.^.^.^.!.^.^.^.^.^.^.(.^.^.^.^.^.^.^.^.^.^.(.^.^.^.^.^.^.^.^.^.^.^.^.^.^.!.!.^.^.^.^.^.^.^.(.^.* = ", -"_.^.^.(.^._._.^.(.^.^.:.^.(._.^.^.<.^.^.(.^.<.^.<.^.(.^.(.(.^.(._.^.^.^._._.(.(.^.^.^.(.<.^._.^.(.<.(.(._.^._.^._.^._.(.^.^.(.^.(.^.<.(.^.^.^._.(.[.* = ", -"(._.^.:.(.<.[.(.^.(.}.[._.(.^.(._._._.(.:.<.(.[.(.^.}.<.[.(._.[.<._.|.}.^.(.^.}.<.[.(.(.[.:.[.<.(.[._.:.[.^.^._.}.(.(.^.^.^.:._.<.[.<.|.(.(.[.(.[.^.* = ", -"<.}.<.<.<._.}.<.<.<.}.<.}.<.<.:.(.[._.(.<.[._.}._.}.<.<.}._.}.}.^._._.}._.}.}.<.}.<._.<.^.:._.}.^.<.}.<.}.<.}.}.|.(._.^.(.:.<.^.<.<.[.<._._.|.<.<.}.* = ", -"<.}.<.}.}.}.}.<.}.}.}.|.<.}.}.<.<.}.}.}.}.}.}.}.}.<.}.}.}.}.}.}.}.<.}.}.<.<.<.}.}.}.}.<.<.<.}.}.<.}.<.(.}.}.}.}.|.<.}.}.<.}.<.}.}.}.<.<.}.}.}.}.}.}.* = ", -"}.}.}.1.2.1.}.1.}.}.3.}.1.}.}.<.4.}.3.}.}.}.}.}.3.3.}.<.1.1.2.}.4.<.}.5.3.6.}.1.}.1.}.}.1.}.1.}.}.1.4.}.}.3.}.1.5.4.4.}.<.3.3.3.1.}.}.4.2.}.3.<.<.}.* = ", -"4.1.}.}.}.1.3.}.1.1.3.4.}.}.}.}.}.}.4.1.3.4.1.}.}.4.3.4.}.7.1.}.4.}.4.1.}.1.3.}.1.}.4.7.8.3.3.4.1.1.1.1.1.}.3.4.}.}.9.3.1.}.3.1.3.}.1.4.}.4.1.}.1.}.* = ", -"0.3.1.1.}.0.4.4.1.4.4.4.7.9.4.4.1.1.3.7.8.8.4.7.4.4.0.4.7.8.7.4.3.4.4.1.1.3.1.9.8.4.4.1.3.4.7.4.1.3.}.7.1.3.1.4.7.7.4.3.4.3.8.4.}.4.4.7.}.1.4.1.1.1.* = ", -"4.7.7.7.4.7.4.7.3.1.4.4.7.7.4.1.7.7.4.7.1.7.4.7.3.4.7.4.7.4.7.7.7.4.9.4.7.7.4.7.7.7.7.7.7.4.7.4.4.4.4.7.4.3.7.4.4.4.7.4.9.4.4.4.3.4.4.4.4.1.7.7.4.4.* = ", -"4.a.b.7.7.7.7.7.7.c.b.a.c.7.c.7.c.4.c.7.4.7.4.a.7.4.7.7.7.a.b.7.7.a.4.c.7.c.7.a.4.7.7.d.7.7.7.a.b.e.7.7.7.4.c.e.d.4.4.7.c.a.7.7.7.7.7.e.4.7.7.b.4.c.* = ", -"e.c.a.a.a.d.a.7.d.4.a.f.d.c.7.d.7.7.a.e.d.d.a.c.7.d.d.a.c.a.d.a.4.4.7.f.7.d.7.a.7.d.b.7.7.7.c.a.7.7.f.c.d.c.e.a.7.c.c.a.7.d.7.a.a.a.7.4.f.7.d.7.7.d.* = ", -"a.a.d.c.d.d.d.a.d.c.d.7.a.d.d.a.d.d.7.7.7.d.d.g.d.a.h.d.d.d.d.a.7.7.a.d.7.d.a.d.7.d.d.d.a.d.h.a.d.c.d.h.7.d.d.d.d.7.d.d.a.d.a.d.a.d.h.d.c.c.a.7.c.d.* = ", -"d.d.d.h.h.h.d.h.d.g.d.d.d.d.d.h.d.a.h.d.d.h.d.d.i.d.d.d.d.d.a.d.d.d.h.a.a.d.d.d.h.d.d.d.d.d.d.h.d.g.d.d.h.h.d.d.h.d.h.d.d.d.d.d.d.h.i.d.d.h.h.h.d.d.* = ", -"h.j.k.d.h.j.h.j.h.d.d.d.l.d.h.d.l.l.d.m.d.h.l.h.h.h.n.d.l.h.d.h.k.d.k.h.d.d.d.m.d.d.h.k.h.j.m.k.d.h.h.l.h.d.d.k.h.d.h.d.h.m.l.d.l.k.d.k.h.l.d.m.d.m.* = ", -"k.k.h.m.j.h.l.d.m.j.d.j.m.h.j.o.j.h.k.m.k.m.n.j.j.o.d.d.j.m.h.n.o.d.m.o.d.h.h.k.h.j.o.d.h.d.l.l.j.o.h.j.d.o.n.m.k.k.m.h.d.j.h.j.k.h.j.j.j.h.l.j.j.d.* = ", -"o.h.n.o.n.o.o.o.j.m.j.j.h.h.m.j.o.o.j.o.o.j.h.o.o.j.o.o.k.o.h.h.o.o.o.j.h.o.m.j.n.m.h.j.o.j.o.h.m.m.n.o.j.j.o.m.o.o.j.j.j.o.o.o.j.o.n.m.o.o.o.o.n.m.* = ", -"o.o.j.p.o.o.o.o.o.o.o.j.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.m.o.q.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.m.o.m.m.o.o.o.j.o.o.o.o.o.o.o.r.o.q.o.o.o.o.o.m.o.j.o.m.o.* = ", -"o.o.o.s.o.r.r.r.o.r.r.r.o.t.u.r.o.o.o.t.s.o.u.o.o.o.o.o.o.r.o.o.s.r.o.o.o.o.t.u.o.o.o.o.r.o.o.s.o.o.u.v.o.o.o.r.r.r.o.w.v.r.o.r.o.r.r.r.o.o.t.r.o.o.* = ", -"o.t.r.t.s.v.r.u.w.w.r.x.x.t.w.v.v.x.o.r.r.r.w.o.v.s.o.w.o.w.u.r.u.u.w.o.o.o.w.r.u.u.s.x.o.s.r.v.r.u.x.w.s.s.w.w.s.r.v.v.r.u.r.o.r.s.s.o.r.u.u.r.t.r.* = ", -"u.x.u.u.t.x.t.x.u.x.w.x.u.u.t.u.o.s.s.v.x.t.w.v.x.x.x.v.w.x.v.x.r.v.v.w.t.w.u.s.o.u.u.w.v.w.r.x.t.t.o.t.r.v.x.x.v.v.x.u.u.x.t.u.w.v.w.v.x.w.w.x.x.x.* = ", -"u.x.x.v.x.x.x.x.x.x.v.u.x.v.x.x.w.x.x.v.x.u.x.u.x.x.w.u.x.x.x.w.v.x.x.x.x.r.x.x.x.x.x.w.x.x.x.r.x.x.x.x.x.x.x.x.u.r.x.x.x.v.x.x.x.u.x.x.x.x.v.x.x.x.* = ", -"x.x.x.x.y.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.y.x.x.x.x.y.x.y.y.z.x.z.A.y.x.x.A.x.x.x.x.x.x.x.z.x.A.z.x.B.z.x.z.z.x.x.y.z.x.z.x.z.x.x.x.x.B.y.x.x.x.B.x.z.* = ", -"B.z.y.A.C.A.y.x.B.B.A.z.C.D.C.E.x.C.D.C.z.A.B.z.D.y.C.y.D.D.x.x.z.D.x.C.z.A.z.z.z.E.E.A.B.B.x.D.x.x.z.A.A.A.x.z.E.D.D.A.C.x.D.y.x.x.B.E.A.E.x.x.A.x.* = ", -"B.D.A.x.D.C.E.D.E.D.z.A.B.C.E.B.z.A.C.E.E.E.B.D.D.E.D.A.D.E.B.C.A.z.D.D.B.x.x.x.E.D.E.z.A.E.D.y.A.z.x.x.D.A.z.E.E.B.A.z.A.D.D.B.E.C.A.B.E.D.D.C.y.C.* = ", -"E.B.D.E.E.D.z.E.A.E.E.B.E.E.B.D.E.B.E.E.E.E.E.D.E.D.D.E.E.B.E.E.E.E.E.E.E.D.B.E.E.E.E.E.C.D.E.E.E.E.E.B.E.C.E.D.E.E.C.B.E.D.E.E.B.E.E.E.E.D.C.E.E.D.* = ", -"E.F.G.E.E.E.E.E.E.E.E.E.E.E.E.D.E.E.F.E.E.E.E.E.G.E.G.E.E.E.E.E.E.F.E.F.E.E.F.E.F.G.G.E.E.E.E.E.E.E.E.E.E.E.D.E.E.E.E.E.G.E.E.F.F.H.E.F.E.E.E.G.E.E.* = ", -"G.F.G.E.H.G.H.E.H.E.E.H.I.J.E.E.G.E.E.K.G.H.I.K.E.E.G.H.E.G.E.F.G.G.F.H.E.E.F.E.H.E.L.K.K.G.G.I.L.L.F.H.E.F.K.E.E.E.H.G.H.G.F.G.F.G.G.J.K.G.G.F.F.K.* = ", -"G.G.F.H.I.F.F.H.I.L.J.H.E.J.E.G.G.E.K.K.I.H.I.G.K.H.H.H.F.I.G.F.H.I.L.H.G.F.H.H.I.H.K.L.F.J.H.G.G.G.J.I.H.H.I.L.K.I.I.F.G.H.H.G.G.J.H.H.H.J.H.K.I.H.* = ", -"H.I.I.H.G.I.H.I.I.I.I.I.I.H.G.I.I.H.I.I.I.I.H.I.F.F.I.F.H.I.I.I.I.I.H.I.H.I.I.L.G.I.I.I.I.H.G.I.H.H.H.I.I.I.I.H.F.I.G.I.I.I.H.I.I.H.I.H.J.I.H.H.I.H.* = ", -"I.H.M.H.N.I.I.I.N.O.I.I.I.I.I.H.M.I.P.I.I.I.I.I.N.O.I.I.I.P.H.H.I.I.P.I.I.I.M.I.O.I.I.O.H.I.O.I.H.I.I.H.I.I.I.I.O.O.I.H.I.I.I.M.I.I.I.I.H.I.I.P.O.I.* = ", -"I.I.I.M.I.O.P.I.M.I.I.M.P.O.M.O.O.I.I.I.I.O.O.I.O.M.I.I.I.M.Q.M.I.I.P.O.M.O.I.M.O.O.I.O.I.I.M.I.M.I.P.I.O.P.M.M.P.M.I.P.O.M.P.I.M.M.I.M.I.O.M.O.P.O.* = ", -"P.P.O.R.Q.R.S.P.M.R.P.P.O.O.O.O.O.P.I.I.P.O.M.I.O.I.M.M.R.P.P.M.P.P.O.P.S.M.O.O.S.P.O.P.S.P.R.M.M.P.P.P.P.P.P.O.P.O.P.O.P.R.P.T.P.M.T.P.O.P.P.Q.Q.P.* = ", -"S.P.S.O.P.P.S.P.S.M.P.S.P.P.P.P.S.S.P.P.P.S.S.R.S.S.S.P.P.P.P.P.P.P.S.S.P.P.S.O.S.P.S.P.P.P.P.P.S.S.Q.P.S.P.P.S.S.S.P.P.P.S.I.P.S.P.P.S.P.S.P.P.S.M.* = ", -"S.S.S.U.P.V.S.S.S.W.S.P.V.P.X.P.S.W.S.W.P.P.X.S.S.P.S.S.S.Y.U.S.W.S.S.W.W.U.W.S.S.Y.S.X.S.Y.P.P.P.S.W.U.X.S.P.S.Y.S.S.S.P.U.P.P.P.S.S.Y.S.W.X.W.P.S.* = ", -"W.S.Y.W.Y.Y.S.Y.Y.U.Y.S.Y.Y.S.S.Y.S.W.S.Y.P.W.S.S.S.U.Z.W.Y.W.Y.S.S.S.P.S.Y.X.U.S.Y.Y.Y.W.S.W.W.S.W.U.W.Y.W.S.S.W.S.P.S.S.Y.P.S.Y.X.W.S.U.S.Z.W.W.Y.* = ", -"W.Y.Y.Y.W.Y.U.`.U.Y.W.W.Y.Y.Y.S.U.Y.Y.U.S.Y. +U.U.W.Y.`.W.W.Y.W.Y.`.W.Y.U.U.Y.U.U..+S.Y.Y.U.Y.Y.W.Y.Y.Y.W.Y.U.W.U.U.W.W.U.U.Y.W.Y.Y.Y.U.U.W.Y.Y.Y.W.* = ", -"Y.Y.Y.Y.Y.Y.`.Y.`.`.Y. +`.Y.`.Y.Y.Y.Y.`.Y.Y.Y.U.Y.Y.Y.Y.`.Y.Y.Y.`.Y.Y.Y.Y.`.Y.Y.Y.Y.U.Y.`.W.Y.W.`.Y.Y.`.`.`.`.Y.Y.Y.Y.Y.Y.Y.Y.Y.`.Y.U.Y.Y.Y.Y.`.`.U.* = ", -"`.`.Y.`.++Y.++++`.`.@+Y.#+Y.Y.Y.@+$+++`.`.`.Y.@+Y.`.++@+`.++Y.Y.Y.`.`.Y.Y.$+%+%+`.`.`.`.&+Y.Y.@+Y.`.@+Y.++Y.&+Y.`.@+`.++`.$+++++&+Y.@+`.Y.&+Y.Y.`.@+* = ", -"@+$+%+#+&+%+`.`.&+Y.%+%+&+`.@+$+%+`.Y.%+&+$+&+&+$+%+%+`.`.&+Y.%+++%+`.$+&+`.$+Y.%+%+$+&+&+++`.++$+%+`.`.%+$+`.%+`.&+++Y.#+`.&+@+#+&+`.++$+@+&+`.#+%+* = ", -"`.%+@+%+%+%+$+++$+%+%+%+%+%+%+%+%+%+%+%+&+$+%+%+%+`.&+%+%+%+Y.%+$+`.`.&+%+#+%+#+#+%+%+%+%+%+%+$+%+`.%+`.%+&+%+#+$+#+%+$+%+&+%+`.$+%+%+$+`.%+%+`.%+$+* = ", -"%+%+*+%+%+%+%+%+%+%+*+%+=+%+%+*+%+%+%+%+%+%+*+*+*+%+%+%+%+%+%+%+*+%+%+%+%+%+%+$+%+%+$+%+%+%+*+%+%+%+%+%+%+%+%+%+%+%+-+%+*+%+%+%+%+%+%+%+%+%+%+%+%+%+* = ", -";+%+*+>+%+,+%+%+%+%+*+,+*+;+,+%+%+%+'+%+>+*+>+;+*+)+%+,+%+%+>+%+%+%+*+%+%+*+%+'+%+;+%+*+*+)+;+)+*+*+*+>+*+*+*+%+)+*+)+;+,+%+*+%+%+,+!+%+>+*+%+'+%+>+* = ", -")+'+;+!+;+,+,+*+*+*+)+!+)+;+%+>+!+;+*+)+%+'+)+%+*+>+%+)+>+!+!+%+;+*+!+;+)+!+*+,+;+%+'+)+;+!+)+,+*+>+*+*+'+>+*+,+>+!+;+)+>+,+!+>+%+*+,+,+)+*+>+*+*+!+* = ", -">+)+!+!+;+)+'+%+>+*+!+!+>+)+>+!+>+>+!+!+!+'+>+!+!+!+!+,+'+>+!+!+!+>+!+!+)+*+!+>+!+'+!+>+'+!+!+!+!+!+*+>+'+*+;+>+!+;+*+)+,+>+;+!+!+!+!+!+'+'+'+!+)+)+* = ", -"!+!+~+~+~+~+~+~+~+{+]+^+/+(+(+(+_+_+_+:+:+<+<+[+[+}+|+|+1+2+3+3+4+4+5+6+6+6+6+7+8+8+9+9+0+a+a+a+b+c+c+c+d+e+e+f+g+]+{+~+~+~+~+~+~+~+~+!+!+!+!+!+!+!+* = ", -"!+!+~+~+~+~+~+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@h+~+~+~+~+~+~+~+$@%@&@!+&@&@* = ", -"$@*@~+~+~+~+=@-@;@>@,@'@)@!@~@{@]@^@s+/@(@_@:@<@[@}@z+|@1@C+2@3@4@G+I+5@6@7@8@M+9@0@a@b@c@d@e@T+f@g@V+h@i@j@k@`+l@m@m@n@o@p@~+~+~+~+~+&@~+~+!+~+$@%@* = ", -"$@~+~+~+~+q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@(@F@:@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@P+Q+Z@d@`@<.f@g@W+W+i@ #.#+#@#.@n@##$#%#&#~+~+~+~+$@*#$@=#=#$@%@* = ", -"=#-#~+~+=@;#>#,#'#)#!#~#{#{#]#^#/#(#_#:#(@<#:@[#}#|#1#u@2#3#4#5#6#7#8#9#5+0#a#b#7+c#d#e#b@f#g#`@f@h#V+i#i@Y+.#j#@#k#m@######l#m#~+~+~+$@=#=#=#$@$@n#* = ", -"=#=#~+h+o#p#,#q#r#s#t#u#{#v#w#x#y#z#A#B#C#D#E#F#}#G#H#I#J#|+K#L#M#N#O#P#Q#R#S#T#U#9@d#V#b@f#e@`@f@f@V+W#i#X#.#Y#+#Z#`# $ $.$ $+$@$~+~+n#=#=#n#-#=#=#* = ", -"#$-#~+$$%$o#&$*$=$-$;$>$,${#'$)$!$~${$]$^$/$E#($_$:$<$[$}$|$1$2$3$4$5$6$7$8$T#9$0$a$0@V#Z@f#b$g#2.f@c$d$i#e$f$g$+#l@`# $ $####h$#@~+i$-#=#j$j$n#k$-#* = ", -"j$i$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$/$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%6.2.+%@%#%$%%%f$&%+#*%=%n@ $h$h$h$-%;%>%k$j$i$i$j$j$i$* = ", -"j$i$,%'%)%!%~%{%]%^%/%(%_%:%<%[%M@}%|%1%2%3%4%E#5%6%7%8%9%0%a%b%c%d%e%f%g%h%i%j%k%l%m%Z$`$n%o%g#2.p%@%q%$%r%s%&%g$t%=%u%h$h$h$h$v%w%j$j$j$j$x%i$j$j$* = ", -"y%z%A%B%C%D%E%F%G%H%I%J%K%L%M%<%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&=&-&;&>&Z$`$n%b$g#5.,&c$c$'&)&s%&%!&~&=%u%{&{&h$h$h$]&j$j$j$y%z%y%j$y%* = ", -"x%j$^&B%/&(&_&_&:&<&[&}&|&1&2&M%3&4&5&{$6&7&8&E#9&0&a&b&c&d&e&f&g&a&h&i&%&j&k&l&m&n&o&p&`$q&r&s&5.,&p%c$'&)&t&u&&%~&v&w&{&{&{&{&h$x&x%y&y%z%z%j$y&y%* = ", -"y%z%^&z&A&B&C&_&:&D&E&f$F&G&H&M%I&J&5&{$K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&`& *.*0$+*@*#*$*%*q&r&b$5.,&p%c$'&&*)&**=*-*;*>*{&{&,*{&{&x&z%j$z%z%'*)*z%x%* = ", -")*!*A%~*{*]*^*/*(*_*:*<*[*}*.#|*1*O%2*3*4*5*6*7*Q&8*9*0*a*i&b*c*d*e*f*g*h*i*j*k*l*b#m*$*n*o*r&p*5.q*r*s*t*u*)&**=*v*v&w*{&{&x*{&,*y*)*z%)*z%)*)*)*z%* = ", -")*z*A*B*C*D*E*F*G*H*I*J*<*K*|*L*M*N*O*P*Q*R*S*T*U*5%V*R&W*X*Y*Z*`* =.=+=@=#=$=%=&=*===-=;=>=,='=)=f.r*!=t*~=)&**=*-*;*w*{&{={=,*]=^=!*/=(=)*_=!*)*)** = ", -"!*_=:=<=[=}=|=1=2=3=4=5=6=7=8=9=0=a=b=c=d=e=f=g=h=i=j=k=l=m=n=n=o=+&p=q=r=s=t=u=v=w=>&x=%*y=o*'=z=f.r*A=A=~=B=**=*C=v*D=E={={=,*F=G=(=)*(=(=_=(=_=_=* = ", -"H=I=I=J=K=L=M=N=O=P=Q=R=S=v#T=U=V=W=X=Y=Z=`=f= -.-+-@-#-Y%$-%-n=&-*-p==-r=--;->-,-'-)-!-~->=,={-]-z=^-/-A=&*&*}&(-C=_-;*w*{={=:-<-I=(=(=H=H=H=(=[-(=* = ", -"(=I=I=}-|-1-2-3-4-5-6-7-8-v#1=9-0-a-b-c-d-D@e-f-g-h-i-j-k-l-m-n-[$o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-Q-R-S-I=(=T-(=(=U-(=(=(=* = ", -"T-I=I=I=9$V-W-X-Y-Z-`- ;8-8-.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;!;~;{;];^;/;(;_;:;<;[;};|;1;2;3;4;5;6;7;8;9;D-0;a;b;&#e+c;d;D=Q-e;f;I=I=g;(=T-h;i;i;(=j;* = ", -"H=I=I=I=I=k;l;m;n;m-o;3&p;[&q;r;s;t;u;v;]@w;=;x;y;z;A;B;<$C;D;E;F;|$:;G;H;I;J;K;L;M;N;O;P;Q;a;R;S;T;U;V;W;X;Y;Z;`; >Y;.>+>@>K-I=I=I=H=j;j;g;j;j;j;j;* = ", -"j;I=I=I=I=I=|;#>$>%>&>*>=>->;>>>,>'>)>!>~>{>=;]>^>^>/>(>_>:><>[>}>|>Z*1>2>3>4>5>l&6>7>8>9>0>a>b>c>d>e>f>g>h>i>j>k>l>m>n>2%% I=I=I=I=o>p>j;j;g;j;j;j;* = ", -"I=I=I=I=I=I=I=q>^>r>s>t>u>v>w>x>y>z>A>!>]@w;=;B>C>D>E>F>G>H>I>J>K>L>M>p=N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,T=%,&,*,=,I=I=I=I=I=-,;,j;;,p>p>>,;,* = ", -"j;I=I=I=I=I=I=I=I=,,',),!,~,{,_+],_#^,:+/,/,/,/,(,(,(,_,_,|+h&h&h&2+2+4+4+4+4+:,7+7+7+<,<,[,},|,a+1,2,3,a+3,4,p@f;5,,,I=I=I=I=I=I=I=j;6,j;j;p>p>6,-,* = ", -"-,7,>,7,7,-,8,>,p>j;-,8,p>p>8,6,6,p>7,8,6,6,p>7,7,;,8,p>6,7,6,7,6,8,6,j;p>-,p>6,7,>,-,6,8,-,>,8,-,6,>,7,-,6,7,p>6,8,6,-,8,7,;,I=I=7,p>8,6,;,7,6,;,7,* = ", -"8,6,6,6,-,6,6,7,8,6,6,6,6,6,6,6,-,6,8,6,p>p>6,6,7,6,6,6,6,6,6,6,7,6,6,6,6,j;6,6,6,-,6,-,6,6,6,6,7,7,-,6,6,6,6,6,6,-,6,6,>,6,6,6,8,6,-,-,6,6,6,-,6,6,* = ", -"9,6,6,0,6,6,6,6,9,6,6,6,6,6,6,6,6,6,6,6,6,0,6,6,6,6,0,6,0,9,6,a,6,6,6,b,6,6,6,6,0,6,9,6,6,b,0,6,b,6,6,6,6,6,6,a,6,6,6,6,6,9,6,0,6,6,6,6,6,6,b,6,6,6,* = ", -"0,6,0,0,9,0,0,0,9,b,c,6,c,a,b,6,c,9,c,I=d,d,0,d,I=0,d,b,e,e,e,e,e,e,e,e,e,e,e,e,e,6,a,9,6,6,0,6,6,0,a,9,6,9,9,0,a,0,b,9,b,9,9,9,0,b,0,d,0,d,b,a,0,6,* = ", -"c,b,I=c,I=d,I=d,c,c,I=6,0,c,a,d,9,a,6,a,d,d,6,a,e,e,e,e,e,i$f,g,h,1&1&1&h,g,f,i$e,e,e,e,e,0,0,d,9,a,a,6,0,c,d,0,0,0,d,c,c,c,c,a,a,I=a,a,9,c,d,I=c,b,* = ", -"c,9,I=c,c,6,c,c,c,a,0,c,0,I=c,I=c,c,I=c,a,d,e,e,e,i,1&1&1&g,j,k,l,m,n,m,l,k,j,g,1&1&1&i,e,e,e,d,c,0,b,c,c,9,c,a,c,c,a,c,I=a,c,I=c,c,c,c,c,c,d,0,I=c,* = ", -"c,c,o,c,c,c,c,o,c,a,o,o,c,c,c,p,c,c,c,e,e,e,q,1&1&r,s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,r,1&1&q,e,e,e,c,a,c,c,c,o,c,c,c,c,o,c,c,c,c,o,t,c,c,c,a,c,o,c,* = ", -"o,c,o,p,u,c,u,p,o,o,v,w,c,c,c,u,p,o,e,e,r,1&h,s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,h,1&r,e,e,o,v,o,o,p,o,p,v,c,w,c,p,c,o,p,p,o,o,w,w,o,c,x,* = ", -"y,c,p,p,o,o,p,o,v,o,y,w,w,v,p,x,e,e,q,1&g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,1&q,e,e,x,w,o,v,w,p,c,o,w,o,w,x,p,p,x,o,w,w,c,w,y,* = ", -"y,c,y,y,u,w,w,c,u,y,y,y,u,w,w,e,e,1&1&m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,1&1&e,e,y,y,u,w,u,y,w,u,y,w,x,y,w,p,w,x,o,w,y,y,* = ", -"y,w,z,y,y,w,y,w,y,A,y,A,y,y,e,j,1&i$n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$1&j,e,y,y,y,z,y,y,B,y,y,w,w,y,z,y,w,y,y,w,z,* = ", -"y,y,z,z,y,y,y,A,A,C,A,y,e,e,r,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&r,e,e,C,A,A,y,y,y,A,y,D,A,C,y,y,C,y,y,y,* = ", -"C,E,z,z,A,y,A,E,y,C,A,e,e,F,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&F,e,e,C,G,z,z,z,A,y,z,z,H,C,z,A,z,C,A,* = ", -"C,A,A,C,C,y,I,H,H,A,e,e,h,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,h,e,e,C,C,A,E,z,H,C,H,z,A,z,H,C,C,C,* = ", -"J,C,H,C,H,H,H,H,C,H,e,F,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,F,e,C,H,H,H,K,H,C,H,H,H,H,C,H,H,H,* = ", -"H,L,H,H,J,L,H,L,C,e,r,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&r,e,H,L,C,C,H,M,J,L,J,H,H,L,H,H,* = ", -"M,J,M,H,L,L,H,M,e,j,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&j,e,M,H,J,L,H,L,H,J,M,J,J,H,H,* = ", -"M,M,N,M,M,M,L,e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,L,M,M,M,M,M,J,O,L,M,M,M,* = ", -"M,P,M,M,P,M,M,e,1&i$n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,l,Q,Q,R,n,n,n,n,n,n,n,n,n,n,n,n,i$1&e,M,P,M,S,M,P,M,M,M,M,P,M,* = ", -"S,M,T,U,P,V,e,q,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$g,F,h,g,g,F,i,m,n,n,n,n,n,n,n,n,n,n,n,1&q,e,M,P,P,M,M,P,M,V,M,S,M,* = ", -"W,P,S,P,P,e,e,1&m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,X,f,h,q,X,R,n,n,n,m,i$g,m,n,n,n,n,n,n,n,n,n,n,m,1&e,e,M,V,P,S,W,Y,U,S,V,T,* = ", -"W,Y,W,T,P,e,r,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,r,g,k,n,n,n,n,n,n,n,n,n,m,Z,n,n,n,n,n,n,n,n,n,n,n,g,r,e,T,P,Y,S,Y,T,T,T,T,T,* = ", -"`,T,T,T,Y,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$g,Z,n,n,n,n,n,n,n,n,n,n,n,n,l,n,n,n,n,n,n,n,n,n,n,n,n,1&e,T,T,`,T,T,`,Y,W,T,T,* = ", -"T, '.'T,e,q,h,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,+'j,m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,h,q,e,`,T,T,`,@'#'#'`,`,* = ", -"#'.'$'T,e,1&s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,Z,g,X,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,1&e,T, '$' '.'`,@'$'$'* = ", -"%'%'%'e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,q,i,m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,@'%' '$'%'#'.'%'* = ", -"#'#'%'e,i,r,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,&'j,f,+'g,F,f,j,j,j,j,q,q,i,i,q,i$X,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,r,i,e,%'%'%'%'#' '%'%'* = ", -"%'%'%'e,1&s,n,n,n,n,n,n,n,n,n,n,n,n,n,R,q,F,+'Z,*'='='='='-'-'-'-';';';';';'-'-'='*'j,i$l,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,1&e,%'%'%'%'%'%'%'>'* = ", -"%'%'>'e,1&n,n,n,n,n,n,n,n,n,n,n,n,R,+'1&k,='='='-'-'-'-'-';';';';';';';',',',',',',',',','&'X,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,''%'%'%'''%'%')'* = ", -"!'~'e,e,1&n,n,n,n,n,n,n,n,n,n,n,f,F,k,='-';';';'-'-'-'q,+'-'-'1&;';';'F,1&+',','g,j,,'{'{'{','*'l,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,%']')'^'>']']'* = ", -"!'>'e,i$g,n,n,n,n,n,n,n,n,n,R,h,j,=';';';';';'-'-'-'-'+'1&-'-'1&;';'/'h,,',',','1&r,,'{'{'{'{'{'{'{'m,n,n,n,n,n,n,n,n,n,n,n,n,n,g,i$e,]')']'>'>'!'!'* = ", -"]']'e,f,j,n,n,n,n,n,n,n,n,n,g,Z,=';';';';';'-'-'-'-'-'g,1&-'-'1&;';'Z,g,,',',','1&g,,'{'{'{'{'{'*'*'('Q,n,n,n,n,n,n,n,n,n,n,n,n,j,f,e,]'!'_'!'!'!'!'* = ", -"!':'e,g,k,n,n,n,n,n,n,n,n,k,i,=',',';';';';'-'-'-'-'-'F,1&-'-'1&;';'e,1&,',',','1&F,,'{'{'{'{'{'*'('('(','n,n,n,n,n,n,n,n,n,n,n,k,g,e,!'_'_'!':'<'['* = ", -"_':'e,h,l,n,n,n,n,n,n,n,n,f,-';',',';';';';'-'-'-'-'-'1&1&-'-'1&;';';'1&i$,',','1&1&,'{'{'{'{'{'*'('('*'e,s,n,n,n,n,n,n,n,n,n,n,l,h,e,}'!':'}'['}'}'* = ", -"|'!'e,1&m,n,n,n,n,n,n,n,n,i,=',',',';';';';';'-'-'-'-'1&1&e,-'1&;';';'i$1&,',','F,1&*'{'{'{'{'{'*'('('('*'e,m,n,n,n,n,n,n,n,n,n,m,1&e,:'['['_'['['}'* = ", -"|'['e,1&n,n,n,n,n,n,n,n,n,k,-',',',';';';';';'-'-'-'('1&g,i$-'1&;';';','h,Z,,'/'+'1&&'{'{'{'{'{'*'('('('*'e,1'n,n,n,n,n,n,n,n,n,n,1&e,['|'}'['|'|'<'* = ", -"2'|'e,1&m,n,n,n,n,n,n,n,n,n,-',',',',';';';';';'-'-'&'1&r,f,;'1&;';';';'f,g,,'q,r,1&1'{'{'{'{'*'*'('('('*'e,f,n,n,n,n,n,n,n,n,n,m,1&e,|'|'|'|'|'|'['* = ", -"2'3'e,h,l,n,n,n,n,n,n,n,n,n,m,,',',',';';';';';';';'1'1&q,+';'1&;';';','*'1&,'+'q,1&i${'{'{'{'*'*'('('('*'&'F,n,n,n,n,n,n,n,n,n,l,h,e,3'4'3'3'3'2'|'* = ", -"3'4'e,g,k,n,n,n,n,n,n,n,n,n,n,-',',',',';';';';';';'j,+'Z,F,;'1&;';',',','1&,'g,i$g,f,{'{'{'{'*'*'('('*'e,/'+'n,n,n,n,n,n,n,n,n,k,g,e,3'|'5'2'4'4'4'* = ", -"4'2'e,f,j,n,n,n,n,n,n,n,n,n,n,n,;',',',',';';';';';'f,h,g,1&;'1&;',',',','1&,'F,g,h,F,{'{'{'{'*'*'('('e,k,h,X,n,n,n,n,n,n,n,n,n,j,f,e,5'4'6'3'4'5'2'* = ", -"7'7'e,i$g,n,n,n,n,n,n,n,n,n,n,n,n,R,{',',',';';';';'g,F,+'1&,'1&,',',','/'1&,'h,g,g,1&{'{'{'*'*'('('e,&'g,j,n,n,n,n,n,n,n,n,n,n,g,i$e,7'4'4'7'7'4'7'* = ", -"8'8'e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,*'*',',',';';'1&i$,'1&e,1&r,q,q,F,1&i$,'1&&'1'1&{'{'{'*'('e,&'q,1&Z,n,n,n,n,n,n,n,n,n,n,n,1&e,e,7'4'9'0'7'4'a'* = ", -"9'0'8'e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,R,k,Q,{',','q,e,,'q,e,q,q,i$,'q,&','*'q,{'e,q,{'*'*'e,&'Z,1&r,m,n,n,n,n,n,n,n,n,n,n,n,n,1&e,8'7'7'8'0'7'8'b'* = ", -"b'b'8'e,1&s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,R,Z,/'e,*'*'{',',',',',',',','{'{'{'*'('e,e,&'1'r,h,f,l,n,n,n,n,n,n,n,n,n,n,n,n,n,s,1&e,8'8'0'7'8'c'7'b'* = ", -"c'8'0'e,i,r,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,1'q,f,q,j,Z,/'k,&'&'&'&'/'j,q,i,+'g,r,i$X,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,r,i,e,c'8'd'8'0'0'b'0'* = ", -"c'0'0'e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,l,X,k,Z,r,F,j,Z,&'R,R,m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,0'0'c'0'e'0'c'0'* = ", -"c'0'0'c'e,1&s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,q,r,l,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,1&e,0'f'c'c'c'g'h'c'c'* = ", -"f'f'g'f'e,q,h,n,n,n,n,n,n,n,n,n,n,n,m,n,n,n,n,n,n,n,n,n,n,n,n,n,Z,g,Z,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,h,q,e,f'c'f'i'c'f'i'g'i'* = ", -"h'i'f'f'i'e,1&n,n,n,n,n,n,n,n,n,n,n,l,j'n,n,n,n,n,n,n,n,n,n,&'g,i,R,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,g'f'i'i'i'i'f'i'g'f'* = ", -"f'i'i'i'f'e,r,g,n,n,n,n,n,n,n,n,n,n,n,r,X,n,n,n,n,n,n,m,Z,F,g,Q,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,r,e,i'i'g'g'i'i'i'i'i'i'* = ", -"k'k'i'i'i'e,e,1&m,n,n,n,n,n,n,n,n,n,n,m,+'+'q,i$j,f,g,h,i,l,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,1&e,e,i'i'l'i'i'i'i'i'm'i'* = ", -"k'k'k'i'k'i'e,q,1&n,n,n,n,n,n,n,n,n,n,n,n,X,i$q,j,/'R,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&q,e,n'o'k'p'k'i'p'k'k'k'k'* = ", -"p'p'n'm'n'm'k'e,1&i$n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$1&e,l'i'm'l'k'q'l'l'o'k'm'k'* = ", -"i'm'i'q'm'q'm'e,e,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&e,e,p'k'q'i'n'l'o'm'q'q'q'n'* = ", -"m'q'q'p'p'q'p'q'e,j,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&j,e,n'q'p'q'n'm'q'n'p'q'q'q'n'* = ", -"q'q'q'q'q'q'q'q'q'e,r,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&r,e,q'q'q'q'q'r'q'q'q'q'q'q'q'q'* = ", -"r'q's's'r'q's'q'q't'e,F,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,F,e,q'q'r'r's'q's'q'u'q'q'q'q'q'q'* = ", -"v'u'u't't'w'u's'q's'e,e,h,g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,h,e,e,u'w'q'q'q'v's'r'u's'r'u'q'v'q'* = ", -"w't'r'w'x'x'r's'r't't'e,e,F,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&F,e,e,x't'q'q'q'r't't'w'r'u's's'x'w't'* = ", -"x'w'x't'u'r'x'x'v'w's'r'e,e,r,1&n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,1&r,e,e,x'w'x'w'x'w'x'u'r'q'x'x't'x't'x'x'* = ", -"t'x'x'x'x'x't't'x'x'x't'x'x'e,j,1&i$n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,i$1&j,e,x's'v't'x'x't'x'x'x'x'x't'x'u't'x'x't'* = ", -"t'x'x'x'x'x'x'y'y'x'x't'x'z'x'e,e,1&1&m,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,m,1&1&e,e,x'x'A'A'x'x'x'x'x'x'x'A'x'x'x'y'x'A'B'y'* = ", -"y'x'B'x'x'y'x'x'x'x'x'A'A'y'C'A'e,e,q,1&g,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,g,1&q,e,e,x'A'x'B'B'x'y'A'x'A'A'x'A'A'x'x'y'x'x'B'x'* = ", -"A'A'A'x'x'D'C'y'y'D'x'D'A'A'B'B'A'C'e,e,r,1&h,s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,h,1&r,e,e,A'E'B'x'C'A'D'B'E'C'A'x'x'x'D'B'x'y'A'x'x'C'y'* = ", -"F'A'A'B'x'y'F'y'E'B'A'C'A'B'B'x'E'x'F'e,e,e,q,1&1&r,s,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,s,r,1&1&q,e,e,e,F'x'y'B'x'y'y'F'C'y'y'B'B'E'D'A'E'E'E'C'D'y'D'A'* = ", -"E'E'y'B'B'E'E'A'E'B'E'B'E'E'D'B'A'C'A'B'D'B'e,e,e,i,1&1&1&g,j,k,l,m,n,m,l,k,j,g,1&1&1&i,e,e,e,B'E'E'A'B'E'E'B'A'B'B'E'E'B'E'E'E'y'B'E'E'B'A'B'E'B'D'* = ", -"B'E'E'E'E'E'E'E'B'E'E'B'E'E'B'E'E'E'E'E'E'E'E'E'e,e,e,e,e,i$f,g,h,1&1&1&h,g,f,i$e,e,e,e,e,E'E'B'E'E'E'E'E'E'E'E'E'B'E'E'B'E'E'E'B'E'E'E'E'E'E'B'B'E'* = ", -"G'E'G'H'E'I'B'J'E'E'B'E'E'J'E'E'J'J'E'J'E'J'B'E'J'H'H'E'e,e,e,e,e,e,e,e,e,e,e,e,e,E'E'E'E'E'E'E'E'K'J'H'E'G'H'E'E'E'E'B'H'E'H'E'H'E'B'E'E'E'E'B'E'E'* = ", -"E'E'L'E'J'E'E'L'L'L'E'J'E'E'J'L'H'E'H'H'H'E'J'E'E'L'J'L'E'L'E'H'E'H'J'H'L'J'H'J'E'L'H'B'L'J'L'J'H'H'B'J'H'E'E'J'H'E'H'I'J'G'J'E'E'L'L'E'J'E'E'I'E'E'* = ", -"H'E'M'E'L'H'N'J'E'H'N'H'H'H'L'E'J'L'J'E'J'E'H'L'L'H'M'L'L'E'J'J'H'L'J'L'H'J'L'J'J'H'H'H'E'O'E'J'H'L'L'L'P'J'J'L'L'E'J'J'J'J'J'E'H'N'J'J'L'N'H'E'E'N'* = ", -"L'J'H'J'E'H'H'L'L'M'N'H'L'E'L'H'J'L'L'E'E'H'J'P'E'J'H'H'L'E'N'E'L'E'J'L'J'P'E'L'E'E'L'O'M'E'P'J'E'L'H'P'J'L'L'J'O'J'L'H'H'L'L'M'L'L'H'E'J'J'L'L'L'J'* = ", -"H'L'L'L'L'P'L'J'H'P'P'P'P'L'J'O'N'P'L'L'L'P'L'P'L'H'N'H'L'L'O'P'P'L'L'P'L'P'P'L'L'L'L'L'P'L'O'P'J'L'P'L'N'P'L'N'P'L'P'H'P'O'P'L'H'P'L'L'P'L'L'P'P'J'* = ", -"P'P'Q'R'% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % S'% S'% S'% % % T'k L'P'P'* = ", -"U'U'V'W'W'W'X'X'Y'Z'`'X'W'+ X'X'R'`'+ Z'`'R'Z'+ R'R'X'`' )W'`'X'W'Y'X'X'X'`'+ Z'`'X'W' )X'R'Z'`'X'W'Y'X'X'X'`'+ Y'`'`'`'`'`'W'`' ).)`'X'+ )< +)L'@)* = ", -"L'U'V'W'#)$)%)&)&)*)*)=)%)&)&)-)=)*)-)$)%)&)$)*)$);)$)=)&)-)%)>)=),)$);)&)%)=)')))$)&)=)-),);)$)))!)~)=)$)&)%)=)&)$);)$){)&)$)&)&)=)*)=)])^)/)U'P'()* = ", -"@)@)V'W'_):)<)<),)!).)[)~)})|)1)2)<)3)')<)')})))})-)1)>){)')4)1)2)5)2)')5)6)')<)7)))8)_))):)9)0)4){)1)a)&):)')_).)6)0).)3)b){)~)')c)d)])9)])e)()P'@)* = ", -"f)P'V'W'4)7)1)g)%)h)i)4)8)})b)Y'j)9)k)4)g)l)j)m):)n):)8)o)p):)5)i)|)>)[)>)Y'Z'b)m)0)q)r)5):),)7)s) )q)s):)9)t)c):)i)u)i)q)g)b)9)b)Y'd)6)d)9)e)f)()f)* = ", -"@)f)V'W',)~)c)q)v)w)x)X>y)w)x)x)x)x)x)x)y)x)x)x)x)x)X>x)x)z)y)X>X>X>X>w)z)w)y)y)y)y)y)y)X>y)y)y)y)y)X>y)X>y)y)a;y)y)y)a;X>X>y)X>X>v)])m)|)l)e)f)f)A)* = ", -"f)@)V'W'!)h).)2)]&B)C)D)E)F)F)F)F)F)F)F)F)E)E)G)H)D)I)B)J)C)C)C)B)B)B)J)K)L)M)N)N)N)O)P)Q)R)S)T)U)U)V)R)R)R)R)W)W)T)T)T)T)S)T)X)T)Y)5)c)t)k)e)f)f)#)* = ", -"f)#)V'W'{)4).).)Z)H)`) !F)F)F)F)F)F)F)F)F)F)E)E)E)H)E)`)`)D).!C)C)B)C)B)K)B)+!N)P)P)P)P)Q)@!Q)Q)V)R)V)R)R)T)R)T)T)S)S)S)S)S)#!#!T)s)$!o)h)%!e)f)f)&!* = ", -"f)*!V'W'%)3)0)m)S'C)`)#!y)v)v)v)v)=!v)-!v)v)v);!=!a;>!G)I),!;!'!v)v)v)v)w)w)X>a;a;v)a;v)X>>!L)s)4;a;a;y)a;y)v)y)y)y)y)X>y)y)y)s)@!d)*)|)])])e)#)#)#)* = ", -"#)f)Q'W'$)c)c)j)]&B)E)S')!% ^)!!$!$!l)l)l)t)l)$!!!;!G&H)B))!j&~!l){!{!d)4;)!,!]!{!Z){!~!a;=!B)>!)!%!{!^!Z)Z){!Z)Z)Z)Z)Z)Z)S'%!W)V)d)0)<)j)R'e)&!#)/!* = ", -"#)f)V'W'*)>)t).)]&.!(!~!y)G)_!:!:!:!:!!)!M)K)K)K)L)M)M)M)M)+!+!+!+!N)U)Q)1!2!|)3!t)e)4!*!4!* = ", -"&!4!V'W',)a)o)!)j&}!@!]&X>H)I)P)N)P)N)P)D) !`)H)Q)5![!D)C))!6!G)B)B)K)I)~!=!R)C)@!@!Q)+!>!=!C)]&)!P)R)|!6!|!|!6!|!|!|!|!|!|!1!|!7!$!Y'~)2!!!e)8!4!/!* = ", -"4!4!V'W'})k)[)9))!)!)!)!4;H)j&)!)!)!)!)!w)X)E)(!)!)!4;G)B))!|!G)B)K)L).!$!)!W)C)P)P)P)L)>!G&C)]&)!N)|!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!{!])^!h)e)4!4!*!* = ", -"4!9!V'W'~)b)h)g),!S)N)S'v)I)D)N)N)M)M)@!j&)!j&S)D)D).!G)M))!|!G)B)B)K)B)M)p'L)+!@!@!@!L)>!v)C)]&)!P)U)S)S)#!S)#!S)S)#!#!#!#!#!#!W)s)j)h)d)m)e)4!8!4!* = ", -"4!9!V'W'7)b)9)5)0!+!I)d)=!K)`)E)`)`)`)(!(!S)a;)!,!M)E)E)L))!|!D)L)L)L)M)K)B)+!P)@!Q)P)L)>!v)C)S')!M)N)+!+!N)+!N)+!P)P)P)P)P)P)V)@!1!3)])6)2!e)4!4!4!* = ", -"a!4!V'W'*):)4)1)>!R)L)Z)G&N)H)I)I)I)D)D)H)(!E)-)4;)!,!M)B))!|!D)B)L)L)M)+!N)N)N)P)P)P)L)5!=!B)]&)!q)|!Y)1!Y)1!1!Y)q)q)q)q)q)s)X)@!Y)3!})9)l)e)4!9!b!* = ", -"b!4!V'W'$)q),)j)5!T)+!$!)!P)D).!I)I)I)I)I)I)D)(!D)_))!7!B))!Y)D)K)L)M)+!N)P)N)N)P)Q)Q)L),!)!C){!)!)!)!)!)!)!)!)!)!)!)!)!)!)!)!7!L)Y)c!Y'd!!!e)4!4!e!* = ", -"4!4!V'2)!)<)o)6)5!T)T)N)W)L)B)B)C)I).!.!C)I)C)C)H)E)M)C).!U)M)B)K)L)M)M)N)N)P)@!Q)Q)Q)@!R)W)L)Q)S)S)T)S)S)S)#!S)#!S)f!#!#!#!X)O)Q)Y)8)r)i)t)e)4!g!b!* = ", -"g!e!V'W'$)7)k)|)@ T)S)Q)+!+!K)C)I)I)I)I)I)C)I)I)I)I)H)I)I)I)I)B)B)K)K)K)M)M)K)L)+!+!P)@!N)+!P)N)+!M)N)+!P)P)N)N)N)P)P)P)P)@!Q)T)U)1! ):)!!^!e)h!b!e!* = ", -"b!e!V'2)!)~)k)q)5!T)T)|!X)V)}!}!T)#!S)C)L).!+!W)W)U)#!T)Q)+!}!6!P)M)6!X)@!K)}!7!S)S)6!}!P)}!6!X)7!6!V)T)V)X)1!1!}!7!|!6!#!7!1!|!@!1!:):)9)9)/)g!g!e!* = ", -"a!i!V'W'&)[)Y'')5!R)X)y)5!0!s)Z)S'a;5!#!s)T){!4;X>v)4;Z)]&{!~!$!+!7!w)4;Z)#!=!s)5!4;{!Z)U){!a;w)Y)w)Y)s)1!m)$!{!>!>!j!a;S',!4;4;@!1!4)g)]!^)e)h!e!4!* = ", -"g!h!V'X'[)')c)j)>!U)T)|!S)}!N)P)P)X)R)X)}!X)P)U)T)S)T)R)K)U)B)B)I)N)P)P)X)}!}!}!#!#!6!}!+!S)6!7!7!6!|!6!Y)7!Q)V)#!|!|!X)S)|!|!1!N)|!k)8)h)t)e)i!g!h!* = ", -"g!g!V'X'o)2)4)s)j&X)X)#!S)R)T)V)@!O)N)N)+!N)L)+!M)M)N)O)N)N)P)@!Q)@!O)N)P)U)P)U)@!@!R)R)R)R)U)Q)T)U)R)R)T)T)T)T)R)R)T)R)R)R)T)T)V)q) )3!n)!!/)i!g!g!* = ", -"g!g!V'X'&)1)d)1)a;y)y)y)y)y)a;y)y)X>X>y)X>y)y)y)y)X>w)y)y)y)a;X>y)y)y)a;z)y)y)w)y)a;y)X>y)y)X>y)X>y)y)y)y)y)y)y)y)X>y)y)a;X>X>y)y)a;2!2)^)g)e)g!g!g!* = ", -"g!g!V'X'~).)9)3!5)|)6)p)])-)1)3!])b)b)g)5)k)2)5)2)|)k!o)3)4)_)5)9)1).)k!a)3!:)3)2!i)n)d!')0)h)5)2)k)))5)9)5)3!g)k)3!5)5)9)3!m)4):) )*)|)p)^)/)g!g!g!* = ", -"g!g!U,X'%)2)1)n)1)0)!!0)5)5)5)h)j)1)Y'])r)1)*)1)u)h)')>)3!3!d!c)5)i)h)n)[)i)5)g)j)9)i)1)^)6)d!3!')')!!0)c)|)'):)1)5)^!-)d)Y'k!8)l).)5)R'0)Y'e)g!g!g!* = ", -"g!g!V'X'a)5)X'^)*)!!l)u)l)^)u)l!X'X'!!R'5)!!X'u)_)d!u)d)X'u)]!!!!!^)~!j)!!u)9)d)^)^)^)!!9)l!^)^)l!j)u)0)u)9)!!u)!!j)])0)j)^)j)d)R'Z)R'9)m!]!e)g!g!g!* = ", -"g!g!z,.)`'`'j!j!n!% % j!j!!!n!j!j!n!n!n!j!n!j!n!n!j!j!n!n!n!j!n!j!n!n!j!j!n!n!n!j!n!j!n!n!j!j!n!n!n!j!n!j!j!n!n!n!j!n!j!n!% j!!!% n!!!j!% j&e)g!g!g!* = ", -"g!g!V'X'j!o!X>-!o!-!X>X>X>y)y)X>X>X>X>X>X>-!X>X>y)y)X>X>X>y)y)-!X>X>y)y)X>X>X>y)y)-!X>X>X>X>y)y)y)X>X>y)X>X>X>X>y)y)-!X>y)-!y)y)X>X>X>X>X>X>e)g!g!g!* = ", -"g!g!, /)e)p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!p!e)g!g!g!* = ", -"g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!* = ", -"g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!* q!", -"g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!r!)!", -"g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!g!s!)!", -"t!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!u!v!)!", -"% w!@ @ @ @ @ @ w!@ @ w!@ @ @ @ @ @ w!@ @ w!@ @ @ @ @ @ w!@ @ w!w!w!w!w!w!w!w!w!w!w!w!w!@ @ @ @ @ @ w!@ @ w!@ @ w!@ @ w!@ @ @ @ w!@ @ w!@ @ @ @ @ w!@ x!"}; +char const * empty_linux_xpm[] = { +"76 253 50 1", +" c #595966", +". c #5A5A67", +"+ c #5B5B68", +"@ c #5C5C69", +"# c #5F5F6C", +"$ c #656572", +"% c #6B6B78", +"& c #757582", +"* c #7B7B88", +"= c #80808D", +"- c #82828F", +"; c #848491", +"> c #61616E", +", c #6C6C79", +"' c #7C7C89", +") c #838390", +"! c #72727F", +"~ c #696976", +"{ c #5D5D6A", +"] c #686875", +"^ c #7D7D8A", +"/ c #858592", +"( c #60606D", +"_ c #6D6D7A", +": c #81818E", +"< c #777784", +"[ c #7F7F8C", +"} c #747481", +"| c #5E5E6B", +"1 c #767683", +"2 c #737380", +"3 c #646471", +"4 c #636370", +"5 c #62626F", +"6 c #7E7E8B", +"7 c #71717E", +"8 c #7A7A87", +"9 c #6E6E7B", +"0 c #676774", +"a c #797986", +"b c #666673", +"c c #6A6A77", +"d c #6F6F7C", +"e c #787885", +"f c #70707D", +"g c #878794", +"h c #868693", +"i c #888895", +"j c #8A8A97", +"k c #898996", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" .+++@@@@+++. ", +" .#$%&*=-;;;;-=*&%$#. ", +" +>,';)=*!~>>>>>>~!*=);',>+ ", +" {]^/)&$(.. ..($&)/^]{ ", +" @_:/<${. .{$. .>};[]. ", +" |. .>1/<| ", +" .]:=$. .$=:]. ", +" .,/&{ {&/,. ", +" @2/_. ._/2@ ", +" @<)3. .3)<@ ", +" @<:4 4:<@ ", +" .2)4 4)2. ", +" .,/3 3/,. ", +" ]/_. ._/] ", +" |:&. .&:| ", +" .<={ .@|(5#@ {=<. ", +" ]/$ {~1'[6^6*~+ $/] ", +" @[1. .>7^890>{{5~a9. .1[@ ", +" _;> .(7*2b+ {9# >;_ ", +" @:}. @,82>. +{ .}:@ ", +" ]/> 41}5. >/] ", +" .'<. +~8c+ .<'. ", +" >/$ {!&( $/> ", +" ,){ .@{5b~d*=}d_c04{@+ {), ", +" .'&. .@$,2e&!99%]00000]0]c,%0|+ .&'. ", +" #;$ +$7* @e> 5hj3{;7 f)( 3jg5 >-+ ", +" @;> @!+ $ijb{;7 (/d bjk$ >;@ ", +" @;> +]. ]hh_{;7 .}=| 9/g~ + >;@ ", +" @;> @ ~)=1|;7 4/%.}=/9 .]+ >;@ ", +" @;> 9=8'|;7 +6<+ea:}. +!| >;@ ", +" +-> .}^2[(;7 &[{^}68. (a| >-+ ", +" +=~ +8af)3;7 7)([78[+ .,8+ ~=+ ", +" +*! +[g/g0;7 }[5)/g/@ .b[] !*+ ", +" .&*. @):*g~;7 .|#6e4h66g| @]62+ .*&. ", +" %=. {h_(/,;-14=)/b3/$bh$ .51-d+ .=% ", +" $)( +++ {}(@!b2e&#,&$.>}||}5 @37=a3. ()$ ", +" #;$ +|3#@@+.. ... . . .++{5,<^&b+ $;# ", +" .'&. .#3],_0b$4>##||#4]~_!&e8!~#. .&'. ", +" ,){ .@{>~_d7}<['<&117,0#@. {), ", +" >/$ .#d8$@+ $/> ", +" .'<. +$e!| .<'. ", +" ]/> . .>}8$+ >/] ", +" @:}. +c@ +3}*9| .}:@ ", +" _;> c&0@+++@49a'd#. >;_ ", +" @[1. +,''e<8'6a%| .1[@ ", +" ]/$ {099%3|+ $/] ", +" .<={ {=<. ", +" |:&. .&:| ", +" ]/_. ._/] ", +" .,/3 3/,. ", +" .2)4 4)2. ", +" @<:4 4:<@ ", +" @<)3. .3)<@ ", +" @2/_. ._/2@ ", +" .,/&{ {&/,. ", +" .]:=$. .$=:]. ", +" |. .>1/<| ", +" .][;}>. .>};[]. ", +" @_:/<${. .{$,';)=*!~>>>>>>~!*=);',>+ ", +" .#$%&*=-;;;;-=*&%$#. ", +" .+++@@@@+++. ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/iomixer.xpm b/hdspmixer/pixmaps/iomixer.xpm index 31a4b16..8407705 100644 --- a/hdspmixer/pixmaps/iomixer.xpm +++ b/hdspmixer/pixmaps/iomixer.xpm @@ -1,513 +1,337 @@ /* XPM */ -char * iomixer_xpm[] = { -"36 253 257 2", -" c None", -". c #000000", -"+ c #080000", -"@ c #080808", -"# c #080810", -"$ c #001008", -"% c #101010", -"& c #181010", -"* c #002010", -"= c #101818", -"- c #181818", -"; c #201818", -"> c #002918", -", c #202018", -"' c #003118", -") c #202020", -"! c #202029", -"~ c #292020", -"{ c #202920", -"] c #392020", -"^ c #292920", -"/ c #292929", -"( c #004120", -"_ c #293131", -": c #412920", -"< c #313131", -"[ c #104A29", -"} c #393939", -"| c #394139", -"1 c #414141", -"2 c #20524A", -"3 c #414152", -"4 c #4A4141", -"5 c #414A41", -"6 c #4A4A41", -"7 c #4A4A4A", -"8 c #524A41", -"9 c #4A524A", -"0 c #525252", -"a c #734A29", -"b c #525A52", -"c c #5A5A52", -"d c #625A4A", -"e c #317B20", -"f c #5A625A", -"g c #62625A", -"h c #626A62", -"i c #6A6A62", -"j c #6A6A6A", -"k c #736A62", -"l c #737373", -"m c #7B736A", -"n c #737383", -"o c #9C7329", -"p c #737B73", -"q c #737B7B", -"r c #7B7B73", -"s c #7B7B7B", -"t c #AC6A5A", -"u c #7B8373", -"v c #7B837B", -"w c #83837B", -"x c #838383", -"y c #838B83", -"z c #8B8B83", -"A c #8B8B8B", -"B c #8B948B", -"C c #94948B", -"D c #949494", -"E c #949C94", -"F c #949C9C", -"G c #9C9C94", -"H c #9C9C9C", -"I c #9CA49C", -"J c #9CA4A4", -"K c #A4A49C", -"L c #A4A4A4", -"M c #C5A45A", -"N c #A4ACA4", -"O c #ACACA4", -"P c #ACACAC", -"Q c #B4B4AC", -"R c #C5B48B", -"S c #BDBDB4", -"T c #C5C5BD", -"U c #CDCDCD", -"V c #D5D5CD", -"W c #F6CDCD", -"X c #DEDED5", -"Y c #DEE6DE", -"Z c #E6E6E6", -"` c #EEEEEE", -" . c #F6EEEE", -".. c #F6F6F6", -"+. c #F6FFFF", -"@. c #FFFFFF", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #52524A", -"p+ c #524A52", -"q+ c #4A4A4A", -"r+ c #625A4A", -"s+ c #00005A", -"t+ c #311800", -"u+ c #291800", -"v+ c #412000", -"w+ c #311800", -"x+ c #311800", -"y+ c #311800", -"z+ c #412000", -"A+ c #4A2900", -"B+ c #000010", -"C+ c #4A4100", -"D+ c #4A4141", -"E+ c #4A4141", -"F+ c #292041", -"G+ c #8B8B29", -"H+ c #8B8B8B", -"7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ", -"r m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m ", -"m P N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N ", -"k N L | } < < < < < < < < < } l N L N L 1 | | } | | | | | | | 1 w L L L ", -"k N L o o o o o o o o o o o o : N L N L ] : : : : : : : : : : ] & L L L ", -"k N L a o R M M M M M M M M ] & N L N L ; : W t t t t t t t t % . L L L ", -"k N L a o o @.o o o o o @.o ] & N L N L ; : a : : @.@.@.: : : & . L L L ", -"k L L a o o @.@.o o o @.@.o ] & L L L L ; : a : @.: : : : : : & . L L L ", -"k L L a o o @.@.o o o @.@.o : % L L L L ; : a : @.: : : : : : & . L L L ", -"k L L a o M @.o @.o @.o @.o : & L L L L ; : a : : @.@.: : : : & . L L L ", -"k L L a o o @.o @.o @.o @.o ] % L L L L ; : a : : : : @.: : : & . L L L ", -"k L L a a o @.o o @.o o @.o : & L L L L ; : a : : : : @.: : : & . L L L ", -"k L L a o M @.o o @.o o @.o ] & L L L L ; : a : @.@.@.] : : : & . L L L ", -"k L L a o a o o o o o o o a : & L L L L ; : : ] ] ] ] ] ] ] ; & . L L L ", -"k L L a ] % % # # # # # # & # % L L L L ; & . . . . . . . . . . . L L L ", -"k L L & . . . . . . . . . . . . L L L L + . . . . . . . . . . . . L L L ", -"k L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", -"k L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", -"k L A v v v v v v v v v v v v v v v v v v v v v v v v v v v v v A G I I ", -"k L x 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } | 1 I J J ", -"k L y | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ _ < 1 N N N ", -"k J y } < / / ! ) , - , - , - , - , - , - , - , - , , ) ! / / < } P N N ", -"k J y < _ / ! , - - = = = = = = = = = = = = = = = = = - , ! / _ < P N N ", -"k J y < / ! , - = % % # # # # # # # # # # # # # # % = = - , ! / < P N N ", -"k J y _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ! / _ P N N ", -"k J y _ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ P N N ", -"k J y < / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # & = - ) / _ P N N ", -"k J y < / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < P N N ", -"k J y < _ / ! , - - = = = = = = = = = = = = = = = = - - - ! / _ < P N N ", -"k J y } _ / / ! ) , - - - - - - - - - - - - - - , - , ) ! / / < } P N N ", -"k J A 1 < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | Q N N ", -"k J E 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } 1 1 Q N N ", -"k J J P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S Q L L ", -"k I J N N P P P P P P P P P P P P P P P P P P P P P P P P P P P P L J J ", -"k L J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J ", -"k L A v v v v v v v v v v v v v v v v v v v v v v v v v v v v v A G I I ", -"k L x 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } | 1 I J J ", -"k L y | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ _ < 1 N N N ", -"k J y } < / / ! ) , - , - , - , - , - , - , - , - , , ) ! / / < } P N N ", -"k J y < _ / ! , - - = = = = = = = = = = = = = = = = = - , ! / _ < P N N ", -"k J y < / ! , - = % % # # # # # # # # # # # # # # % = = - , ! / < P N N ", -"k J y _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ! / _ P N N ", -"k J y _ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ P N N ", -"k J y < / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # & = - ) / _ P N N ", -"k J y < / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < P N N ", -"k J y < _ / ! , - - = = = = = = = = = = = = = = = = - - - ! / _ < P N N ", -"k J y } _ / / ! ) , - - - - - - - - - - - - - - , - , ) ! / / < } P N N ", -"k J A 1 < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | Q N N ", -"k J E 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } 1 1 Q N N ", -"k J J P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S Q L L ", -"k I J N N P P P P P P P P P P P P P P P P P P P P P P P P P P P P L J J ", -"k J B h < < < < < < < < < < < < < < < < < < < < < < < < < < < < h B H H ", -"k I A 7 c c 0 0 7 c 9 0 b 7 0 0 0 9 7 7 9 9 9 9 9 b 9 7 0 9 0 7 7 E I I ", -"k I A 0 9 c 0 9 c 0 9 9 9 b 0 c 0 c 9 9 9 7 b 7 9 c b b 9 9 c 7 < I I I ", -"k I A b 9 0 9 0 7 0 7 c b 7 7 c 7 c 9 9 7 0 0 0 9 9 9 9 0 0 c 5 { I I I ", -"k I A b 7 9 9 b b 7 7 b 7 b 7 7 9 0 b 0 9 9 c 7 9 9 7 9 7 7 7 1 / I I I ", -"k I A b b 0 7 0 0 7 7 0 b b 9 c f c h r w r r u w r s m g 0 c 1 / I I I ", -"k I A b c 7 9 7 / ) < 1 7 9 7 7 f 9 i . . . . . . . . . . 7 0 7 { I I I ", -"k I A b c c 9 1 ) m 4 9 9 c 9 c g 9 f . . . . . . . . . . 5 7 7 { I I I ", -"k I A b b 9 c 6 ^ d / f f 0 b 7 b 9 g . * $ * * * $ * > . 5 9 | ^ I I I ", -"k I z b 0 b 7 7 / 8 ~ h c 9 c 9 g 9 c . * * > > > ' > ( . | 9 5 / I I I ", -"k I A b c 7 9 7 ) 8 ~ i h c c 7 f c i . ' ' ( > ' ( ( [ . 1 7 | { I I I ", -"k I A b b 9 7 7 / 8 ~ k f 7 7 7 g 9 f . > ' ( ( ' ( ( [ . 1 9 7 / I I I ", -"k I A b b 7 7 1 ^ 8 ~ h f c 7 9 b 7 g . > > ' ' ( ' ( [ . 1 5 7 { I H H ", -"k I A b 9 0 9 | ^ 8 ~ k b 0 9 0 b 7 h . > ' ( ' ' ( ( [ . 5 5 7 ) H I I ", -"k I y b 9 7 7 5 { 8 ~ h b c 9 9 c 0 h . > ' ' ( ' ( ( [ . | 5 | ^ H H H ", -"k I y b 9 b 7 7 / 8 ~ i b c 9 7 f b h . > ' ' ' ( ' ( [ . | 9 5 / H H H ", -"k I A b c 9 b 6 / 8 ~ m f 9 0 9 b 9 h . > ' ' ' ' ( ( [ . 7 1 5 ^ H H H ", -"k I y b 0 9 0 | { 8 ~ h h 7 7 9 c b f . > ' ( ' ' ( ( [ . 5 0 | { H H H ", -"k I y b b 9 0 5 / 8 ~ i f 9 b 9 g 7 g . > > ' ( ' ' ( [ . 5 7 5 / H H H ", -"k I y 0 9 0 9 7 / 8 ~ m c 7 0 9 f 9 g . > > ( ( ' ' ( [ . 1 7 | { H H H ", -"k I y b 7 c b 7 / 8 ~ i c 0 0 7 0 c c . > > ' ( ' ( ( [ . | 0 | { H H H ", -"k I y 0 9 c b 5 / 8 ~ h f 7 0 9 0 c i . > ' ' > ( ' ( [ . 5 7 5 { H H H ", -"k I y b c 0 7 5 / 8 ~ h g 7 c 7 f b h . > > ' ' ( ' ( [ . | 5 7 ) H H H ", -"k I y 0 0 7 7 7 ) 8 ~ i h 7 0 c c 0 g . > ' ' ' ' ' ( [ . 1 9 7 ) H H H ", -"k I y 0 c 7 9 1 ) 8 ~ h c 9 c 9 g c c . ' ' ( ( ( ' ( [ . 7 7 5 / H H H ", -"k I y 0 7 0 9 | { 8 ~ h b c 7 b 0 0 f . ' ' ' ' ' ' ( [ . 1 9 1 / H H H ", -"k I y 0 9 b 7 1 ^ 8 ~ k f 9 0 9 c 9 g . > ' ( ' ( ' ( [ . 1 5 1 { H H H ", -"k I y 0 7 b c 7 { 8 ~ g h 0 7 c b c h . > > ' ' ' ' ( [ . 5 5 5 ^ H H H ", -"k I y 0 9 9 b 6 ) 8 ~ h f 9 7 9 g 9 g . > > ' ' ' ( ( [ . 7 5 1 ) H H H ", -"k I y 0 7 c 7 7 / 8 ~ h b 7 7 b f 7 h . > > ' ' ( ( ( [ . 1 5 7 ) H H H ", -"k I y 0 9 9 b 7 / 8 ~ k f 9 7 0 b 0 g . ' ' ( ' ' ' ( [ . 5 5 1 / H H F ", -"k H y 0 9 c 9 1 ^ 8 ~ k f b 7 c 0 c h . > ' ' ( ' ' ( [ . 1 9 | / H H F ", -"k H y 0 0 9 c | { 8 ~ i h 7 7 9 0 7 g . > > ( ( ' ( ( [ . 7 0 1 / H F H ", -"k H y 0 9 b 0 | ^ 8 ~ g f 9 7 9 b 9 h . ' > ( ' ' ' ( [ . 5 9 1 ) H H H ", -"k H y 0 9 c c 1 { 8 ~ h g b 9 c b 9 i . > ' ' > ( ' ( [ . | 7 1 { F H H ", -"k H y 0 0 9 9 1 ^ 8 ~ m b c 0 b f 9 f . > > ' ' ' ' ' [ . 7 7 5 { H H H ", -"k H y 0 7 b 0 5 { 8 ~ i b 0 c 7 0 c f . > ( ' ' ' ' ( [ . | 7 7 ^ F H H ", -"k H y 0 b 9 c 7 ) 8 ~ i h 9 9 7 f 9 g . > > ( ' ( ' ( [ . | 7 7 / F H H ", -"k H y 0 7 9 9 7 ^ 8 ~ i f 0 b 0 b 9 i . > > ' ' ' ' ( [ . | 9 1 ^ F H H ", -"k H y 0 0 0 b 1 { 8 ~ h b 9 9 c f c g . > ' ' ' ' ' ( [ . 7 5 1 ) F H H ", -"k H y 0 9 0 c 5 ) 8 ~ i g 9 b 9 g 9 g . > ' ( ' ' ( ( [ . | 0 1 ) F F F ", -"k H y 0 b b 9 1 { 8 ~ i h 0 7 9 9 7 f . > ( ' ' ' ( ( [ . 5 7 7 / F F F ", -"k H y 0 9 9 9 5 / 8 ~ h f 0 0 9 f 7 c . > > ' ( > ' ( [ . | 9 1 / F F F ", -"k H y 0 7 7 c | / 8 ~ g g 0 0 9 b 9 g . > ' ( ' ' ' ( [ . 7 9 1 / F F F ", -"k H y 0 9 7 9 5 / 8 ~ k b b b c b 0 f . > > ( ' ( ( ( [ . | 7 5 { F F F ", -"k H y 0 9 0 c 7 / 8 ~ h h 7 7 9 b 9 f . > > ' ( ( ' ( [ . 7 7 1 { F F E ", -"k H y 0 9 9 0 5 / 8 ~ h g 9 7 c g b f . > ' ' > ' ( ( [ . 7 0 1 ^ E E E ", -"k H x 0 9 9 9 1 / 8 ~ g g 9 7 7 f 9 f . > ' ' ( > ' ( [ . 5 0 | / E F F ", -"k H x 0 9 0 c | ^ 8 ~ k g 9 0 9 b 7 i . > > ( ' ' ' ( [ . 5 1 5 ^ E E E ", -"k F x 0 7 b c 5 / 8 ~ i c c 7 b b 7 h . > ' ( ' ' ' ( [ . 7 5 7 / E E E ", -"k F x 0 9 0 7 5 { 8 ~ m b 9 7 7 g c f . > > ( ' ' ' ( [ . 5 0 7 { E E E ", -"k G x 0 0 7 b 1 / 8 ~ k g c 9 b 0 b c . > ' > ' ' ' ( [ . | 5 5 ^ E E E ", -"k F x 0 c 0 9 | ^ 8 ~ i b c 0 0 c 7 f . > ' ' ' ' ( ( [ . 7 0 7 / E E E ", -"k F x 0 c b 0 1 / 8 ~ g h b 0 9 f 0 g . ' > ' ' ' ' ( [ . 1 7 1 ^ E E E ", -"k F x 0 9 0 0 7 / 8 ~ i f 9 0 0 f 9 i . > > ' ( ( ' ( [ . 5 5 5 / E E E ", -"k G x 0 7 9 c 7 ) 8 ~ g h 0 7 9 f 7 h . > > ( ' ' ' ( [ . 7 7 1 / E E E ", -"k G x 0 0 9 7 7 / 8 ~ g b 9 c b g 9 h . ' > ' ' ' ( ( [ . 5 9 5 ) E E E ", -"k F x 0 7 9 0 1 ^ 8 ~ h b 9 0 c c 7 f . > ' ( ' ( ' ( [ . 7 9 5 { E E E ", -"k G x 0 0 7 7 5 { 8 ~ h b b 9 9 f 9 f . > > ( ( ( ( ( [ . 5 5 7 { E E E ", -"k G x 0 c 7 c 7 { 8 ~ g h 0 9 9 g c g . * ' ( ' ' ( ( [ . 7 5 | / E E E ", -"k F x 0 c 7 9 7 { 8 ~ g f b 9 b 0 c c . ' ' ' ' ( ( ( [ . 5 9 1 ^ E E E ", -"k F x 0 0 9 0 5 { 8 ~ i b b 0 9 c 0 f . > ' ' ' ' ' ( [ . 1 5 5 / E E E ", -"k E x 0 c 9 b 7 { 8 ~ g h 9 c 9 0 0 h . > > ( ( ( ( ( [ . 1 7 7 / E E E ", -"k E x 0 9 b b 7 / 8 ~ g h 9 0 c f 0 f . ' ' ' ' ( ( ( [ . 5 9 1 ) E E E ", -"k E x 0 c 7 7 5 { 8 ~ i g 0 9 7 g b f . > > ' > ' ( ( [ . 5 1 7 { E E E ", -"k E x 0 b 7 7 1 ^ 8 ~ k f 0 c c 0 9 i . > > ' ' ' ( ( [ . | 0 7 ^ E E E ", -"k E x 0 9 9 b 1 / 8 ~ i g 9 0 c c b h . > ' ' ( ' ' ( [ . 5 7 7 { E E E ", -"k E x 0 b 9 7 5 ) 8 ~ l b 0 9 9 b 0 g . > > ( ' ' ' ( [ . 5 7 5 ^ E E E ", -"k E x 9 9 0 b 5 / 8 ~ h g 9 c 7 f 0 g . > ' ' ( ' ( ( [ . 1 7 7 { E E E ", -"k E x 0 0 b 9 5 / 8 ~ h c 9 9 7 f 9 h . > ' ' ' ' ( ( [ . 5 5 1 ) E D D ", -"k E x 0 9 9 0 7 { 8 ~ h f b 7 c g c h . > > ( ' > ' ( [ . 5 9 7 ) D E E ", -"k E x 9 9 0 0 1 / 8 ~ i f 9 0 b f 7 g . ' ' ' ( ' ( ( [ . 5 0 5 { D D D ", -"k E x 0 0 0 c 7 ^ 8 ~ m b 7 7 9 f 7 f . > ' ' ( ' ( ( [ . 7 7 7 ) E D D ", -"k E x 9 c 7 b | ^ 8 ~ k f 0 7 0 f 0 h . > > ( ' ( ( ( [ . 1 5 5 { D D D ", -"k E v 9 7 7 7 | ^ 8 ~ h f 0 9 c 0 9 h . > > ( ' ' ' ( [ . 1 9 5 { D D D ", -"k E v 0 9 7 9 5 { 8 ~ k g 9 9 9 g 7 f . > > ' ' ' ' ( [ . 1 9 5 / D D D ", -"k E v 9 0 9 0 7 ) 8 ~ h c 7 9 7 f 9 h . ' ' ( ' ' ' ( [ . 5 5 7 ^ D D D ", -"k E v 9 9 9 b 7 { 8 ~ h b b 9 0 g 9 f . > ' ' ( ' ( ( [ . 7 7 5 ) D D D ", -"k E v 9 9 9 0 5 { 8 ~ h b 9 b b b 9 g . > ' ' ( ' ' ( [ . 5 0 1 ^ D D D ", -"k E v 9 0 0 c 5 { 8 ~ h b c b b b 0 g . > > ' ( ' ' ' [ . 1 9 7 ) D D D ", -"k E v 9 9 7 9 | / 8 ~ i c c 9 9 0 c f . > > ( ' ' ' ( [ . 5 5 5 / D D D ", -"k E v 9 b c 0 7 { 8 ~ h b 0 9 0 f b h . > ' ( ' ' ( ( [ . 1 0 5 ^ D D D ", -"k E v 9 0 9 c 1 { 8 ~ m c 9 9 c c 0 h . > > ' ( ' ( ( [ . 7 1 7 { D D D ", -"k E v 9 b 7 0 5 / 8 ~ i f 7 b c g 9 f . > > ( ( ' ( ( [ . | 5 5 ^ D D D ", -"k D v 9 7 9 b 1 / 8 ~ i c 9 7 c b 9 h . > ' ' > ( ( ( [ . 5 9 5 / D D D ", -"k E v 9 7 c 0 7 { 8 ~ k b 0 9 0 g 7 i . > ' ' ' ( > ( [ . 1 0 7 / D D D ", -"k D v 9 0 7 9 1 ) 8 ~ i g 7 9 9 b 0 h . ' ' ( ( ( ' ( [ . 7 0 1 / D D D ", -"k D v 9 9 9 9 5 ^ 8 ~ h f 9 9 b g b f . > ' ' > ( ' ( [ . 7 1 5 ^ D D D ", -"k E v 9 9 b 9 5 ) 8 ~ h f c 9 b g 9 f . > ' ( ( ( ' ( [ . | 5 5 ) D D D ", -"k D v 9 b 7 b | { 8 ~ h b 9 b 7 c 0 f . > > ' ' ' ' ( [ . 6 0 5 ) D D D ", -"k D v 9 7 9 9 | / 8 ~ i g 0 0 9 g 9 f . > ' ' ' ' ( ( [ . 1 5 5 / D D D ", -"k D v 9 9 7 7 5 ^ 8 ~ g f 0 7 7 g 0 f . > ' ' ' ' ' ( [ . 7 0 5 / D D D ", -"k D v 9 9 7 7 5 { 8 ~ i f 9 0 c 0 7 g . > > ' ' ' > ( [ . 7 9 1 / D D D ", -"k D v 9 b b 9 | / 8 ~ h c 7 7 9 b 9 g . > > ( ' ' ( ( [ . | 0 7 ) D D D ", -"k D v 9 9 9 0 1 / 8 ~ i h 0 b 9 c 9 g . > ' ' ' ( ( ( [ . 7 1 1 ^ C C C ", -"k D v 9 0 c 9 7 { 8 ~ i h 0 b 9 f 7 i . > ( ( ' ( ' ( [ . 7 5 5 { C C C ", -"k D v 9 0 9 7 7 ^ 8 ~ i g 0 b 9 f 9 i . ' ' ' ' > ' ( [ . | 9 1 { C C C ", -"k D v 9 b 0 9 5 / 8 ~ h f 7 9 9 f 9 f . > > ( ' ( ' ' [ . 5 7 5 / C C C ", -"k D v 9 9 7 0 | / 8 ~ k g 7 9 9 c c g . > ' ( ' ' ' ( [ . | 9 | / C C C ", -"k D v 9 c 9 c 5 ) 8 ~ l b b 9 7 f b g . > > ' ' ' ( ( [ . 7 0 7 { B B B ", -"k D v 9 9 7 b 5 ) 8 ~ k g 9 9 9 b 9 h . ' ( ' ' ' ( ( [ . | 9 7 ) B C C ", -"k D v 9 9 7 0 1 ) 8 ~ i c 7 c 7 g 7 h . > ' ( ' ' ' ( [ . | 5 7 { C B B ", -"k D v 9 c b 7 5 { 8 ~ k f 7 9 c c b c . > ' ' ' ( ' ( [ . 5 7 7 ) C B B ", -"k D v 9 c 9 b | ^ 8 ~ g f 7 0 0 f b i . > ' ' ( ( ( ( [ . 5 9 | { B B B ", -"k D v 9 9 0 0 | / 8 ~ i b 7 9 9 b 0 f . > ' ' ( ' ( ( [ . 5 1 7 ^ B B B ", -"k D v 9 0 0 b 5 ) 8 ~ h h 7 9 0 0 0 g . ' ' ' ' ' ' ( [ . 5 9 7 / B B B ", -"k D v 9 c 9 b 5 ^ 8 ~ i g 9 9 7 g 0 h . ' > ' ( ( ' ( [ . 7 5 7 ^ B B B ", -"k D v 9 7 b c | { 8 ~ h f 7 b 9 f 9 i . ' ' ' ' ( ' ( [ . | 5 5 { B B B ", -"k C v 9 b 7 0 7 ^ 8 ~ h f 7 7 9 b 9 i . > ' ' ' ( ' ( [ . | 7 1 ) B B B ", -"k C v 9 7 9 9 7 { 8 ~ g g 0 9 0 g 9 h . > ' ( ' ( ' ( [ . 1 9 5 / B B B ", -"k C v 9 9 0 9 5 / 8 ~ k b 0 c 0 b 0 h . ' ' ( ' ( ( ( [ . 1 0 7 ^ B B B ", -"k C v 9 7 0 c | / 8 ~ g h 9 0 b f 9 f . ' ' ( ( ' ' ( [ . 7 1 1 { B B B ", -"k C v 9 0 b c 5 { 8 ~ h g 7 9 9 0 9 i . * > ' ' ( ' ( [ . 5 0 | { B B B ", -"k C v 9 7 c 9 5 ^ 8 ~ i h c 7 9 f b g . ' ' ' ( ( ( ( [ . | 9 | ) B B B ", -"k C v 9 7 0 9 | / 8 ~ g h 0 7 0 b b f . ' ' ' ' ( ( ( [ . 7 5 1 / B B B ", -"k B v 9 9 0 7 5 / 8 ~ h b 7 0 9 0 c h . > ' ' ' ' ( ( [ . 7 5 | / B B B ", -"k C s 9 0 c b 7 / 8 ~ k h 0 9 b g 9 h . > > ' ( ( ( ( [ . 7 5 1 / B B B ", -"k C B 9 7 b c 9 / 8 ~ g g c 0 7 9 b f . > ' ( ( ' ' ( [ . 1 5 7 / B B B ", -"k B B 9 9 0 0 0 { 8 ~ h c 7 9 c 9 c f . > ' ' ' ' ' ( [ . 1 9 | { B B B ", -"k B B 9 0 9 9 7 / 8 ~ h h 0 b 0 7 9 g . > ' ' ( ' ( ( [ . 1 0 5 ^ B B B ", -"k B B 7 0 7 7 0 ^ 8 ~ h f 9 0 0 b b c . ' ' ' ' ( ' ( [ . 7 5 5 / B B B ", -"k B B 7 0 0 0 9 / 8 ~ g f 7 9 9 b 9 i . > > ( ' ' ( ( [ . 7 9 5 / B A A ", -"k B A 7 0 0 c 7 { 8 ~ h g 7 c 7 9 9 f . > ' ' ( ' ( ( [ . 6 5 5 ^ B B B ", -"k B A 7 c 0 0 c ) 8 ~ i h 7 0 0 b 7 f . > ' ' ( ( ( ( [ . 7 9 | / A A A ", -"k B A 7 0 9 0 9 / 8 ~ i g 9 7 c 7 7 g . > > ( ' ' ( ( [ . | 5 7 ^ A A A ", -"k B A 7 0 7 7 c ^ 8 ~ i c 7 9 9 7 9 f . > ' ( ' ( ' ( [ . 7 7 5 ^ A A A ", -"k B A 7 7 9 9 c { 8 ~ h c 7 7 9 9 c c . > ' ' ' ( ' ( [ . 7 7 5 / A A A ", -"k B A 7 0 c 7 9 / 8 ~ i h c 9 9 0 b f . > ' ' > ' ' ( [ . 1 9 | ) A A A ", -"k B A 7 7 9 9 b ^ 8 ~ i g 7 b b 7 c g . ' > ( ' ' ' ( [ . 1 7 7 ^ A A A ", -"k B A 7 7 0 9 7 { 8 ~ h b c 7 b 7 0 f . ' ' ' ' ' ' ( [ . 1 9 1 / A A A ", -"k B A 7 9 7 0 9 ^ 8 ~ i f 9 9 7 7 9 h . > ' ' ' ( ' ( [ . | 7 1 ) A A A ", -"k B A 7 c 9 0 9 { 8 ~ i h 9 7 9 9 c h . > > ( ' ' ' ( [ . 1 0 | / A A A ", -"k B A 7 9 b 0 0 { 8 ~ g g 0 9 0 9 b f . > ' ' ' > ( ( [ . 5 7 5 ^ A A A ", -"k A A 7 9 9 b 7 { 8 ~ i b c 9 9 7 9 f . ' > ' ( ' ' ( [ . | 5 5 { A A A ", -"k B A 7 b b 7 c ^ 8 ~ i f 9 7 0 7 c f . > ' ( ' ' ' ( [ . 5 0 1 ) A A A ", -"k A A 7 0 b b 9 / 8 ~ k h c 9 0 9 7 f . ' > ( ' ' ' ( [ . 5 5 5 ^ A A A ", -"k A A 7 9 b 9 9 { 8 ~ k h 9 0 9 7 c h . > ' ( ( ' ' ( [ . 7 5 5 { A A A ", -"k A y 7 b 0 0 9 ^ 8 ~ i f 9 9 0 7 9 h . > > ( ' ( ( ' [ . 7 7 5 / y y y ", -"k A y 7 0 c 9 c / 8 ~ k h b 7 7 b 0 f . > > ' ' ' ( ( [ . 5 9 | ) y A A ", -"k A y 7 c 9 9 b ) 8 ~ i b 9 7 9 9 b f . > ' ( ' ' ' ( [ . | 1 7 ^ A y y ", -"k A y 6 0 b b 0 / 8 ~ m b 9 c 9 7 0 g . > > ' ' ( ' ( [ . 5 9 | / y y y ", -"k A y 6 9 b 0 7 { 8 ~ h f 7 9 b 9 0 h . > > ' ' ( ( ' [ . | 5 | { y y y ", -"k A y 6 9 0 9 b / 8 ~ i h 9 b b 9 b i . ' ' ( ' ' ' ( [ . | 5 5 ) y y y ", -"k A y 6 0 0 9 0 { 8 ~ k b 9 7 c 9 c g . > ' ( ' ( ' ( [ . 7 7 | ^ y y y ", -"k A y 6 c b b 7 { 8 ~ h g 0 7 0 0 7 f . > ' ( ' ( ( ( [ . | 1 5 / y y y ", -"k A y 6 7 7 c 9 ^ 8 ~ h b 0 0 0 b c f . ' ( [ [ [ [ [ [ . 5 7 1 ^ y y y ", -"k y y 5 9 0 b 0 < } - k c 7 c c c 9 i . ( [ 2 | e 2 5 | . 1 7 | { y y y ", -"k y y 5 c 9 7 7 9 ~ @ r h 0 9 9 9 9 0 . . . . . . . . . . | 5 1 { y y y ", -"k y y 5 0 0 0 0 b m w w b 9 0 0 0 7 9 5 | } 1 < < } < < } 1 9 7 ^ y y y ", -"k y y 5 7 9 9 b b b i f c 7 b b 7 c 9 0 5 7 1 7 5 5 7 7 1 7 9 7 ^ y y y ", -"k y y 5 0 9 0 b b 9 c c 9 c 7 9 9 9 c 0 7 0 9 9 7 7 9 0 9 9 9 | / y y y ", -"k y y 0 9 9 } } | < < } } 1 | } } | | | } | } | < } 1 < | 1 } < , y x x ", -"k y x p } = % # = # % % % % % % % & % % % # % % # % % % & % % % % y y y ", -"k y y x x x x y y y y x x y x y x x x x y y x x y x x x x y x y x x x x ", -"k y v s q q q q q q q q q q q q q q q q q q q q q q s q q q s s v x x x ", -"k y l h h h h h h g h h h h h h g h h h g h h h h g g h g h g h l v x x ", -"k y j 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < < | 1 v y y ", -"k y j | < _ _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | B A A ", -"k y j < _ _ / ! ) , - , - , - , - , - , - , - , - , , ) ! / _ < | D B B ", -"k y j < _ / ! , - = = = = = = = = = = = = = = = = = - - , ! / _ < C A A ", -"k y j _ / ! , - = = % # # # # # # # # # # # # # # % % = - , ! / < C A A ", -"k y j _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ C A A ", -"k x j / / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ C A A ", -"k x j _ / ) - = & # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / < C A A ", -"k x j _ / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < C A A ", -"k x j < _ / ! , - - = = = = = = = = = = = = = = = = - - , ! / _ < C A A ", -"k x j < _ / / ! ) - , - - - - - - - - - - - - - - , , ) ! / / < } C A A ", -"k x l | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | D A A ", -"k x q 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ _ < } 1 1 H A A ", -"k x y B I K N K K K K K K K K K K K K K K K K K K K K K K K L K L E y y ", -"k x x A B B B B B B B B C C B B B B B B B B B B C C B C B B C B B y x x ", -"k x v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v ", -"k x v | } } } } } } } } } } } } } } } } } } } } } } } } } } } } } v v v ", -"k x v T V T T T T T T T T T T T T T T T T T T T T T T T T T T T T C v v ", -"k x v T Z +.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.f v v ", -"k x v O X ..................................................+...` | v v ", -"k x v Q X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` X 4 v v ", -"k v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 5 v v ", -"k v v Q X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v v ", -"k v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v v ", -"k v v Q X ..` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v v ", -"k v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v v ", -"k v v Q X .` ` . . . . . . . . . . . . . . . . . . . . . . .` Y 4 v v ", -"k v v O X U X X X X X X X X X X X X X X X X X X X X X X X X Y U O 6 s s ", -"k v v S C k h i h h h h h h h h h h h h h h h h h h h h h h i g f 6 v v ", -"k v s i , # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # v v ", -"k v v s s v v s v v v v v s s s v s v v v v s v v s v v s v v s s s v v ", -"k v s v v v s v v s v s s s v v s v v s v v v v s v s v s v v v v v v v ", -"k v s ) - = - = - = - = - = - = - = - = - = - = - = - = - = - = = q q q ", -"k v q / X n n n n n n n n n n n n n n n n n n n n n n n n n n n @ s s s ", -"k s s / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q q ", -"k s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q q ", -"k s q / ! = = = = = = = = = = = = = = = = = = = = = = = = = = # @ q q q ", -"k s q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p q q ", -"k s q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p q q ", -"k s q q q q q q q q q p p q p q q q q q q p q q q q p q p q q q q q q q ", -"k j f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ", -"9 < _ / / / / / / _ / / _ / / _ / / _ / / / / _ / / _ / / / / / _ / / / "}; +char const * iomixer_xpm[] = { +"36 253 81 1", +" c #595966", +". c #2E3038", +"+ c #333342", +"@ c #2F2F3B", +"# c #27272B", +"$ c #616176", +"% c #4F4F5D", +"& c #474752", +"* c #28282B", +"= c #4E4E5C", +"- c #F1F1F2", +"; c #ABABB2", +"> c #696975", +", c #C3C3C7", +"' c #DFDFE2", +") c #E3E3E5", +"! c #93939C", +"~ c #28282C", +"{ c #4D4D5A", +"] c #E5E5E7", +"^ c #D0D0D3", +"/ c #D0D0D4", +"( c #E4E4E6", +"_ c #BEBEC3", +": c #757580", +"< c #52525F", +"[ c #676772", +"} c #29292C", +"| c #4C4C59", +"1 c #BCBCC1", +"2 c #61616D", +"3 c #62626D", +"4 c #BBBBC0", +"5 c #D9D9DC", +"6 c #5D5D69", +"7 c #29292D", +"8 c #4B4B59", +"9 c #E3E3E6", +"0 c #86868F", +"a c #96969E", +"b c #97979F", +"c c #85858E", +"d c #8D8D96", +"e c #F0F0F1", +"f c #C2C2C7", +"g c #787883", +"h c #2A2A2D", +"i c #4C4C58", +"j c #E4E4E5", +"k c #555561", +"l c #C8C8CB", +"m c #C8C8CC", +"n c #545460", +"o c #5A5A65", +"p c #97979E", +"q c #DEDEE0", +"r c #A0A0A7", +"s c #2A2A2E", +"t c #4B4B58", +"u c #C9C9CD", +"v c #575763", +"w c #DCDCDE", +"x c #2B2B2E", +"y c #4B4B57", +"z c #75757F", +"A c #7E7E86", +"B c #7C7C84", +"C c #B9B9BE", +"D c #2B2B2F", +"E c #494955", +"F c #B8B8BD", +"G c #DBDBDD", +"H c #BEBEC2", +"I c #64646E", +"J c #32323E", +"K c #313136", +"L c #000000", +"M c #474951", +"N c #404044", +"O c #7A7A8F", +"P c #737384", +" ", +" .................................. ", +" .................................. ", +" ..+@#########@+....+@#########@+.. ", +" ..@#$$$$$$$$$#@....@#$$$$$$$$$#@.. ", +" ..#$%%%%%%%%%&#....#$%%%%%%%%%&#.. ", +" ..*$==-;==;-=&*....*$==>,')!==&*.. ", +" ..~${{]^{{/({&~....~${{_:{<[{{&~.. ", +" ..}$||(1234(|&}....}$||56|||||&}.. ", +" ..7$8890abc98&7....7$88defg888&7.. ", +" ..h$iijklmnji&h....h$iiiopqrii&h.. ", +" ..s$tt)tumt)t&s....s$tttttvwtt&s.. ", +" ..x$yy)yzzy)y&x....x$yyAiyBCyy&x.. ", +" ..D$EE)EEEE)E&D....D$EEF]GHIEE&D.. ", +" ..JK&&&&&&&&&KJ....JK&&&&&&&&&KJ.. ", +" ..+JKKKKKKKKKJ+....+JKKKKKKKKKJ+.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..................LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ..................LLLLLLLLLL...... ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" "}; diff --git a/hdspmixer/pixmaps/iomixer_r.xpm b/hdspmixer/pixmaps/iomixer_r.xpm index 6428cd4..6fdd8b5 100644 --- a/hdspmixer/pixmaps/iomixer_r.xpm +++ b/hdspmixer/pixmaps/iomixer_r.xpm @@ -1,513 +1,337 @@ /* XPM */ -char * iomixer_r_xpm[] = { -"36 253 257 2", -" c None", -". c #000000", -"+ c #080000", -"@ c #080808", -"# c #080810", -"$ c #001008", -"% c #101010", -"& c #181010", -"* c #002010", -"= c #101818", -"- c #181818", -"; c #201818", -"> c #002918", -", c #202018", -"' c #003118", -") c #202020", -"! c #202029", -"~ c #292020", -"{ c #202920", -"] c #392020", -"^ c #292920", -"/ c #292929", -"( c #004120", -"_ c #293131", -": c #412920", -"< c #313131", -"[ c #104A29", -"} c #393939", -"| c #394139", -"1 c #414141", -"2 c #20524A", -"3 c #414152", -"4 c #4A4141", -"5 c #414A41", -"6 c #4A4A41", -"7 c #4A4A4A", -"8 c #524A41", -"9 c #4A524A", -"0 c #525252", -"a c #734A29", -"b c #525A52", -"c c #5A5A52", -"d c #625A4A", -"e c #317B20", -"f c #5A625A", -"g c #62625A", -"h c #626A62", -"i c #6A6A62", -"j c #6A6A6A", -"k c #736A62", -"l c #737373", -"m c #7B736A", -"n c #737383", -"o c #9C7329", -"p c #737B73", -"q c #737B7B", -"r c #7B7B73", -"s c #7B7B7B", -"t c #AC6A5A", -"u c #7B8373", -"v c #7B837B", -"w c #83837B", -"x c #838383", -"y c #838B83", -"z c #8B8B83", -"A c #8B8B8B", -"B c #8B948B", -"C c #94948B", -"D c #949494", -"E c #949C94", -"F c #949C9C", -"G c #9C9C94", -"H c #9C9C9C", -"I c #9CA49C", -"J c #9CA4A4", -"K c #A4A49C", -"L c #A4A4A4", -"M c #C5A45A", -"N c #A4ACA4", -"O c #ACACA4", -"P c #ACACAC", -"Q c #B4B4AC", -"R c #C5B48B", -"S c #BDBDB4", -"T c #C5C5BD", -"U c #CDCDCD", -"V c #D5D5CD", -"W c #F6CDCD", -"X c #DEDED5", -"Y c #DEE6DE", -"Z c #E6E6E6", -"` c #EEEEEE", -" . c #F6EEEE", -".. c #F6F6F6", -"+. c #F6FFFF", -"@. c #FFFFFF", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #52524A", -"p+ c #524A52", -"q+ c #4A4A4A", -"r+ c #625A4A", -"s+ c #00005A", -"t+ c #311800", -"u+ c #291800", -"v+ c #412000", -"w+ c #311800", -"x+ c #311800", -"y+ c #311800", -"z+ c #412000", -"A+ c #4A2900", -"B+ c #000010", -"C+ c #4A4100", -"D+ c #4A4141", -"E+ c #4A4141", -"F+ c #292041", -"G+ c #8B8B29", -"H+ c #8B8B8B", -"7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 / ", -"m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m < ", -"P P N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N g ", -"N N L | } < < < < < < < < < } l N L N L 1 | | } | | | | | | | 1 w L L c ", -"N N L o o o o o o o o o o o o : N L N L ] : : : : : : : : : : ] & L L c ", -"N N L a o R M M M M M M M M ] & N L N L ; : W t t t t t t t t % . L L c ", -"N N L a o o @.o o o o o @.o ] & N L N L ; : a : : @.@.@.: : : & . L L c ", -"L L L a o o @.@.o o o @.@.o ] & L L L L ; : a : @.: : : : : : & . L L c ", -"L L L a o o @.@.o o o @.@.o : % L L L L ; : a : @.: : : : : : & . L L c ", -"L L L a o M @.o @.o @.o @.o : & L L L L ; : a : : @.@.: : : : & . L L c ", -"L L L a o o @.o @.o @.o @.o ] % L L L L ; : a : : : : @.: : : & . L L c ", -"L L L a a o @.o o @.o o @.o : & L L L L ; : a : : : : @.: : : & . L L c ", -"L L L a o M @.o o @.o o @.o ] & L L L L ; : a : @.@.@.] : : : & . L L c ", -"L L L a o a o o o o o o o a : & L L L L ; : : ] ] ] ] ] ] ] ; & . L L c ", -"L L L a ] % % # # # # # # & # % L L L L ; & . . . . . . . . . . . L L c ", -"L L L & . . . . . . . . . . . . L L L L + . . . . . . . . . . . . L L c ", -"L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L b ", -"L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L b ", -"L L A v v v v v v v v v v v v v v v v v v v v v v v v v v v v v A G I b ", -"L L x 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } | 1 I J b ", -"L L y | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ _ < 1 N N b ", -"J J y } < / / ! ) , - , - , - , - , - , - , - , - , , ) ! / / < } P N b ", -"J J y < _ / ! , - - = = = = = = = = = = = = = = = = = - , ! / _ < P N b ", -"J J y < / ! , - = % % # # # # # # # # # # # # # # % = = - , ! / < P N b ", -"J J y _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ! / _ P N b ", -"J J y _ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ P N b ", -"J J y < / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # & = - ) / _ P N b ", -"J J y < / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < P N b ", -"J J y < _ / ! , - - = = = = = = = = = = = = = = = = - - - ! / _ < P N 0 ", -"J J y } _ / / ! ) , - - - - - - - - - - - - - - , - , ) ! / / < } P N 0 ", -"J J A 1 < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | Q N 0 ", -"J J E 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } 1 1 Q N 0 ", -"J J J P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S Q L 0 ", -"I I J N N P P P P P P P P P P P P P P P P P P P P P P P P P P P P L J 0 ", -"L L J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J b ", -"L L A v v v v v v v v v v v v v v v v v v v v v v v v v v v v v A G I b ", -"L L x 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } | 1 I J b ", -"L L y | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ _ < 1 N N b ", -"J J y } < / / ! ) , - , - , - , - , - , - , - , - , , ) ! / / < } P N b ", -"J J y < _ / ! , - - = = = = = = = = = = = = = = = = = - , ! / _ < P N b ", -"J J y < / ! , - = % % # # # # # # # # # # # # # # % = = - , ! / < P N b ", -"J J y _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ! / _ P N b ", -"J J y _ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ P N b ", -"J J y < / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # & = - ) / _ P N b ", -"J J y < / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < P N b ", -"J J y < _ / ! , - - = = = = = = = = = = = = = = = = - - - ! / _ < P N 0 ", -"J J y } _ / / ! ) , - - - - - - - - - - - - - - , - , ) ! / / < } P N 0 ", -"J J A 1 < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | Q N 0 ", -"J J E 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ < < } 1 1 Q N 0 ", -"J J J P S S S S S S S S S S S S S S S S S S S S S S S S S S S S S Q L 0 ", -"I I J N N P P P P P P P P P P P P P P P P P P P P P P P P P P P P L J 0 ", -"J J B h < < < < < < < < < < < < < < < < < < < < < < < < < < < < h B H 0 ", -"I I A 7 c c 0 0 7 c 9 0 b 7 0 0 0 9 7 7 9 9 9 9 9 b 9 7 0 9 0 7 7 E I 0 ", -"I I A 0 9 c 0 9 c 0 9 9 9 b 0 c 0 c 9 9 9 7 b 7 9 c b b 9 9 c 7 < I I 0 ", -"I I A b 9 0 9 0 7 0 7 c b 7 7 c 7 c 9 9 7 0 0 0 9 9 9 9 0 0 c 5 { I I 0 ", -"I I A b 7 9 9 b b 7 7 b 7 b 7 7 9 0 b 0 9 9 c 7 9 9 7 9 7 7 7 1 / I I 0 ", -"I I A b b 0 7 0 0 7 7 0 b b 9 c f c h r w r r u w r s m g 0 c 1 / I I 0 ", -"I I A b c 7 9 7 / ) < 1 7 9 7 7 f 9 i . . . . . . . . . . 7 0 7 { I I 0 ", -"I I A b c c 9 1 ) m 4 9 9 c 9 c g 9 f . . . . . . . . . . 5 7 7 { I I 0 ", -"I I A b b 9 c 6 ^ d / f f 0 b 7 b 9 g . * $ * * * $ * > . 5 9 | ^ I I 0 ", -"I I z b 0 b 7 7 / 8 ~ h c 9 c 9 g 9 c . * * > > > ' > ( . | 9 5 / I I 0 ", -"I I A b c 7 9 7 ) 8 ~ i h c c 7 f c i . ' ' ( > ' ( ( [ . 1 7 | { I I 0 ", -"I I A b b 9 7 7 / 8 ~ k f 7 7 7 g 9 f . > ' ( ( ' ( ( [ . 1 9 7 / I I 0 ", -"I I A b b 7 7 1 ^ 8 ~ h f c 7 9 b 7 g . > > ' ' ( ' ( [ . 1 5 7 { I H 0 ", -"I I A b 9 0 9 | ^ 8 ~ k b 0 9 0 b 7 h . > ' ( ' ' ( ( [ . 5 5 7 ) H I 0 ", -"I I y b 9 7 7 5 { 8 ~ h b c 9 9 c 0 h . > ' ' ( ' ( ( [ . | 5 | ^ H H 0 ", -"I I y b 9 b 7 7 / 8 ~ i b c 9 7 f b h . > ' ' ' ( ' ( [ . | 9 5 / H H 0 ", -"I I A b c 9 b 6 / 8 ~ m f 9 0 9 b 9 h . > ' ' ' ' ( ( [ . 7 1 5 ^ H H 0 ", -"I I y b 0 9 0 | { 8 ~ h h 7 7 9 c b f . > ' ( ' ' ( ( [ . 5 0 | { H H 0 ", -"I I y b b 9 0 5 / 8 ~ i f 9 b 9 g 7 g . > > ' ( ' ' ( [ . 5 7 5 / H H 0 ", -"I I y 0 9 0 9 7 / 8 ~ m c 7 0 9 f 9 g . > > ( ( ' ' ( [ . 1 7 | { H H 0 ", -"I I y b 7 c b 7 / 8 ~ i c 0 0 7 0 c c . > > ' ( ' ( ( [ . | 0 | { H H 0 ", -"I I y 0 9 c b 5 / 8 ~ h f 7 0 9 0 c i . > ' ' > ( ' ( [ . 5 7 5 { H H 0 ", -"I I y b c 0 7 5 / 8 ~ h g 7 c 7 f b h . > > ' ' ( ' ( [ . | 5 7 ) H H 0 ", -"I I y 0 0 7 7 7 ) 8 ~ i h 7 0 c c 0 g . > ' ' ' ' ' ( [ . 1 9 7 ) H H 0 ", -"I I y 0 c 7 9 1 ) 8 ~ h c 9 c 9 g c c . ' ' ( ( ( ' ( [ . 7 7 5 / H H 0 ", -"I I y 0 7 0 9 | { 8 ~ h b c 7 b 0 0 f . ' ' ' ' ' ' ( [ . 1 9 1 / H H 0 ", -"I I y 0 9 b 7 1 ^ 8 ~ k f 9 0 9 c 9 g . > ' ( ' ( ' ( [ . 1 5 1 { H H 0 ", -"I I y 0 7 b c 7 { 8 ~ g h 0 7 c b c h . > > ' ' ' ' ( [ . 5 5 5 ^ H H 0 ", -"I I y 0 9 9 b 6 ) 8 ~ h f 9 7 9 g 9 g . > > ' ' ' ( ( [ . 7 5 1 ) H H 0 ", -"I I y 0 7 c 7 7 / 8 ~ h b 7 7 b f 7 h . > > ' ' ( ( ( [ . 1 5 7 ) H H 0 ", -"I I y 0 9 9 b 7 / 8 ~ k f 9 7 0 b 0 g . ' ' ( ' ' ' ( [ . 5 5 1 / H H 0 ", -"H H y 0 9 c 9 1 ^ 8 ~ k f b 7 c 0 c h . > ' ' ( ' ' ( [ . 1 9 | / H H 0 ", -"H H y 0 0 9 c | { 8 ~ i h 7 7 9 0 7 g . > > ( ( ' ( ( [ . 7 0 1 / H H 0 ", -"H H y 0 9 b 0 | ^ 8 ~ g f 9 7 9 b 9 h . ' > ( ' ' ' ( [ . 5 9 1 ) H F 0 ", -"H H y 0 9 c c 1 { 8 ~ h g b 9 c b 9 i . > ' ' > ( ' ( [ . | 7 1 { F H 0 ", -"H H y 0 0 9 9 1 ^ 8 ~ m b c 0 b f 9 f . > > ' ' ' ' ' [ . 7 7 5 { H H 0 ", -"H H y 0 7 b 0 5 { 8 ~ i b 0 c 7 0 c f . > ( ' ' ' ' ( [ . | 7 7 ^ F F 0 ", -"H H y 0 b 9 c 7 ) 8 ~ i h 9 9 7 f 9 g . > > ( ' ( ' ( [ . | 7 7 / F F 0 ", -"H H y 0 7 9 9 7 ^ 8 ~ i f 0 b 0 b 9 i . > > ' ' ' ' ( [ . | 9 1 ^ F F 9 ", -"H H y 0 0 0 b 1 { 8 ~ h b 9 9 c f c g . > ' ' ' ' ' ( [ . 7 5 1 ) F F 9 ", -"H H y 0 9 0 c 5 ) 8 ~ i g 9 b 9 g 9 g . > ' ( ' ' ( ( [ . | 0 1 ) F F 0 ", -"H H y 0 b b 9 1 { 8 ~ i h 0 7 9 9 7 f . > ( ' ' ' ( ( [ . 5 7 7 / F F 9 ", -"H H y 0 9 9 9 5 / 8 ~ h f 0 0 9 f 7 c . > > ' ( > ' ( [ . | 9 1 / F F 9 ", -"H H y 0 7 7 c | / 8 ~ g g 0 0 9 b 9 g . > ' ( ' ' ' ( [ . 7 9 1 / F F 9 ", -"H H y 0 9 7 9 5 / 8 ~ k b b b c b 0 f . > > ( ' ( ( ( [ . | 7 5 { F F 9 ", -"H H y 0 9 0 c 7 / 8 ~ h h 7 7 9 b 9 f . > > ' ( ( ' ( [ . 7 7 1 { F F 9 ", -"H H y 0 9 9 0 5 / 8 ~ h g 9 7 c g b f . > ' ' > ' ( ( [ . 7 0 1 ^ E E 9 ", -"H H x 0 9 9 9 1 / 8 ~ g g 9 7 7 f 9 f . > ' ' ( > ' ( [ . 5 0 | / E F 9 ", -"H H x 0 9 0 c | ^ 8 ~ k g 9 0 9 b 7 i . > > ( ' ' ' ( [ . 5 1 5 ^ E E 9 ", -"F F x 0 7 b c 5 / 8 ~ i c c 7 b b 7 h . > ' ( ' ' ' ( [ . 7 5 7 / E E 9 ", -"F F x 0 9 0 7 5 { 8 ~ m b 9 7 7 g c f . > > ( ' ' ' ( [ . 5 0 7 { E E 9 ", -"G G x 0 0 7 b 1 / 8 ~ k g c 9 b 0 b c . > ' > ' ' ' ( [ . | 5 5 ^ E E 9 ", -"F F x 0 c 0 9 | ^ 8 ~ i b c 0 0 c 7 f . > ' ' ' ' ( ( [ . 7 0 7 / E E 9 ", -"F F x 0 c b 0 1 / 8 ~ g h b 0 9 f 0 g . ' > ' ' ' ' ( [ . 1 7 1 ^ E E 9 ", -"F F x 0 9 0 0 7 / 8 ~ i f 9 0 0 f 9 i . > > ' ( ( ' ( [ . 5 5 5 / E E 9 ", -"G G x 0 7 9 c 7 ) 8 ~ g h 0 7 9 f 7 h . > > ( ' ' ' ( [ . 7 7 1 / E E 9 ", -"G G x 0 0 9 7 7 / 8 ~ g b 9 c b g 9 h . ' > ' ' ' ( ( [ . 5 9 5 ) E E 9 ", -"F F x 0 7 9 0 1 ^ 8 ~ h b 9 0 c c 7 f . > ' ( ' ( ' ( [ . 7 9 5 { E E 9 ", -"G G x 0 0 7 7 5 { 8 ~ h b b 9 9 f 9 f . > > ( ( ( ( ( [ . 5 5 7 { E E 9 ", -"G G x 0 c 7 c 7 { 8 ~ g h 0 9 9 g c g . * ' ( ' ' ( ( [ . 7 5 | / E E 9 ", -"F F x 0 c 7 9 7 { 8 ~ g f b 9 b 0 c c . ' ' ' ' ( ( ( [ . 5 9 1 ^ E E 9 ", -"F F x 0 0 9 0 5 { 8 ~ i b b 0 9 c 0 f . > ' ' ' ' ' ( [ . 1 5 5 / E E 9 ", -"E E x 0 c 9 b 7 { 8 ~ g h 9 c 9 0 0 h . > > ( ( ( ( ( [ . 1 7 7 / E E 9 ", -"E E x 0 9 b b 7 / 8 ~ g h 9 0 c f 0 f . ' ' ' ' ( ( ( [ . 5 9 1 ) E E 9 ", -"E E x 0 c 7 7 5 { 8 ~ i g 0 9 7 g b f . > > ' > ' ( ( [ . 5 1 7 { E E 9 ", -"E E x 0 b 7 7 1 ^ 8 ~ k f 0 c c 0 9 i . > > ' ' ' ( ( [ . | 0 7 ^ E E 9 ", -"E E x 0 9 9 b 1 / 8 ~ i g 9 0 c c b h . > ' ' ( ' ' ( [ . 5 7 7 { E E 9 ", -"E E x 0 b 9 7 5 ) 8 ~ l b 0 9 9 b 0 g . > > ( ' ' ' ( [ . 5 7 5 ^ E E 9 ", -"E E x 9 9 0 b 5 / 8 ~ h g 9 c 7 f 0 g . > ' ' ( ' ( ( [ . 1 7 7 { E E 9 ", -"E E x 0 0 b 9 5 / 8 ~ h c 9 9 7 f 9 h . > ' ' ' ' ( ( [ . 5 5 1 ) E D 9 ", -"E E x 0 9 9 0 7 { 8 ~ h f b 7 c g c h . > > ( ' > ' ( [ . 5 9 7 ) D E 9 ", -"E E x 9 9 0 0 1 / 8 ~ i f 9 0 b f 7 g . ' ' ' ( ' ( ( [ . 5 0 5 { D D 9 ", -"E E x 0 0 0 c 7 ^ 8 ~ m b 7 7 9 f 7 f . > ' ' ( ' ( ( [ . 7 7 7 ) E D 9 ", -"E E x 9 c 7 b | ^ 8 ~ k f 0 7 0 f 0 h . > > ( ' ( ( ( [ . 1 5 5 { D D 9 ", -"E E v 9 7 7 7 | ^ 8 ~ h f 0 9 c 0 9 h . > > ( ' ' ' ( [ . 1 9 5 { D D 9 ", -"E E v 0 9 7 9 5 { 8 ~ k g 9 9 9 g 7 f . > > ' ' ' ' ( [ . 1 9 5 / D D 9 ", -"E E v 9 0 9 0 7 ) 8 ~ h c 7 9 7 f 9 h . ' ' ( ' ' ' ( [ . 5 5 7 ^ D D 9 ", -"E E v 9 9 9 b 7 { 8 ~ h b b 9 0 g 9 f . > ' ' ( ' ( ( [ . 7 7 5 ) D D 9 ", -"E E v 9 9 9 0 5 { 8 ~ h b 9 b b b 9 g . > ' ' ( ' ' ( [ . 5 0 1 ^ D D 9 ", -"E E v 9 0 0 c 5 { 8 ~ h b c b b b 0 g . > > ' ( ' ' ' [ . 1 9 7 ) D D 9 ", -"E E v 9 9 7 9 | / 8 ~ i c c 9 9 0 c f . > > ( ' ' ' ( [ . 5 5 5 / D D 9 ", -"E E v 9 b c 0 7 { 8 ~ h b 0 9 0 f b h . > ' ( ' ' ( ( [ . 1 0 5 ^ D D 9 ", -"E E v 9 0 9 c 1 { 8 ~ m c 9 9 c c 0 h . > > ' ( ' ( ( [ . 7 1 7 { D D 9 ", -"E E v 9 b 7 0 5 / 8 ~ i f 7 b c g 9 f . > > ( ( ' ( ( [ . | 5 5 ^ D D 9 ", -"D D v 9 7 9 b 1 / 8 ~ i c 9 7 c b 9 h . > ' ' > ( ( ( [ . 5 9 5 / D D 9 ", -"E E v 9 7 c 0 7 { 8 ~ k b 0 9 0 g 7 i . > ' ' ' ( > ( [ . 1 0 7 / D D 9 ", -"D D v 9 0 7 9 1 ) 8 ~ i g 7 9 9 b 0 h . ' ' ( ( ( ' ( [ . 7 0 1 / D D 9 ", -"D D v 9 9 9 9 5 ^ 8 ~ h f 9 9 b g b f . > ' ' > ( ' ( [ . 7 1 5 ^ D D 9 ", -"E E v 9 9 b 9 5 ) 8 ~ h f c 9 b g 9 f . > ' ( ( ( ' ( [ . | 5 5 ) D D 7 ", -"D D v 9 b 7 b | { 8 ~ h b 9 b 7 c 0 f . > > ' ' ' ' ( [ . 6 0 5 ) D D 9 ", -"D D v 9 7 9 9 | / 8 ~ i g 0 0 9 g 9 f . > ' ' ' ' ( ( [ . 1 5 5 / D D 9 ", -"D D v 9 9 7 7 5 ^ 8 ~ g f 0 7 7 g 0 f . > ' ' ' ' ' ( [ . 7 0 5 / D D 7 ", -"D D v 9 9 7 7 5 { 8 ~ i f 9 0 c 0 7 g . > > ' ' ' > ( [ . 7 9 1 / D D 7 ", -"D D v 9 b b 9 | / 8 ~ h c 7 7 9 b 9 g . > > ( ' ' ( ( [ . | 0 7 ) D D 7 ", -"D D v 9 9 9 0 1 / 8 ~ i h 0 b 9 c 9 g . > ' ' ' ( ( ( [ . 7 1 1 ^ C C 7 ", -"D D v 9 0 c 9 7 { 8 ~ i h 0 b 9 f 7 i . > ( ( ' ( ' ( [ . 7 5 5 { C C 7 ", -"D D v 9 0 9 7 7 ^ 8 ~ i g 0 b 9 f 9 i . ' ' ' ' > ' ( [ . | 9 1 { C C 7 ", -"D D v 9 b 0 9 5 / 8 ~ h f 7 9 9 f 9 f . > > ( ' ( ' ' [ . 5 7 5 / C C 7 ", -"D D v 9 9 7 0 | / 8 ~ k g 7 9 9 c c g . > ' ( ' ' ' ( [ . | 9 | / C C 7 ", -"D D v 9 c 9 c 5 ) 8 ~ l b b 9 7 f b g . > > ' ' ' ( ( [ . 7 0 7 { B B 7 ", -"D D v 9 9 7 b 5 ) 8 ~ k g 9 9 9 b 9 h . ' ( ' ' ' ( ( [ . | 9 7 ) B C 7 ", -"D D v 9 9 7 0 1 ) 8 ~ i c 7 c 7 g 7 h . > ' ( ' ' ' ( [ . | 5 7 { C B 7 ", -"D D v 9 c b 7 5 { 8 ~ k f 7 9 c c b c . > ' ' ' ( ' ( [ . 5 7 7 ) C B 7 ", -"D D v 9 c 9 b | ^ 8 ~ g f 7 0 0 f b i . > ' ' ( ( ( ( [ . 5 9 | { B B 7 ", -"D D v 9 9 0 0 | / 8 ~ i b 7 9 9 b 0 f . > ' ' ( ' ( ( [ . 5 1 7 ^ B B 7 ", -"D D v 9 0 0 b 5 ) 8 ~ h h 7 9 0 0 0 g . ' ' ' ' ' ' ( [ . 5 9 7 / B B 7 ", -"D D v 9 c 9 b 5 ^ 8 ~ i g 9 9 7 g 0 h . ' > ' ( ( ' ( [ . 7 5 7 ^ B B 7 ", -"D D v 9 7 b c | { 8 ~ h f 7 b 9 f 9 i . ' ' ' ' ( ' ( [ . | 5 5 { B B 7 ", -"C C v 9 b 7 0 7 ^ 8 ~ h f 7 7 9 b 9 i . > ' ' ' ( ' ( [ . | 7 1 ) B B 7 ", -"C C v 9 7 9 9 7 { 8 ~ g g 0 9 0 g 9 h . > ' ( ' ( ' ( [ . 1 9 5 / B B 7 ", -"C C v 9 9 0 9 5 / 8 ~ k b 0 c 0 b 0 h . ' ' ( ' ( ( ( [ . 1 0 7 ^ B B 7 ", -"C C v 9 7 0 c | / 8 ~ g h 9 0 b f 9 f . ' ' ( ( ' ' ( [ . 7 1 1 { B B 7 ", -"C C v 9 0 b c 5 { 8 ~ h g 7 9 9 0 9 i . * > ' ' ( ' ( [ . 5 0 | { B B 7 ", -"C C v 9 7 c 9 5 ^ 8 ~ i h c 7 9 f b g . ' ' ' ( ( ( ( [ . | 9 | ) B B 7 ", -"C C v 9 7 0 9 | / 8 ~ g h 0 7 0 b b f . ' ' ' ' ( ( ( [ . 7 5 1 / B B 7 ", -"B B v 9 9 0 7 5 / 8 ~ h b 7 0 9 0 c h . > ' ' ' ' ( ( [ . 7 5 | / B B 7 ", -"C C s 9 0 c b 7 / 8 ~ k h 0 9 b g 9 h . > > ' ( ( ( ( [ . 7 5 1 / B B 7 ", -"C C B 9 7 b c 9 / 8 ~ g g c 0 7 9 b f . > ' ( ( ' ' ( [ . 1 5 7 / B B 7 ", -"B B B 9 9 0 0 0 { 8 ~ h c 7 9 c 9 c f . > ' ' ' ' ' ( [ . 1 9 | { B B 7 ", -"B B B 9 0 9 9 7 / 8 ~ h h 0 b 0 7 9 g . > ' ' ( ' ( ( [ . 1 0 5 ^ B B 7 ", -"B B B 7 0 7 7 0 ^ 8 ~ h f 9 0 0 b b c . ' ' ' ' ( ' ( [ . 7 5 5 / B B 7 ", -"B B B 7 0 0 0 9 / 8 ~ g f 7 9 9 b 9 i . > > ( ' ' ( ( [ . 7 9 5 / B A 7 ", -"B B A 7 0 0 c 7 { 8 ~ h g 7 c 7 9 9 f . > ' ' ( ' ( ( [ . 6 5 5 ^ B B 7 ", -"B B A 7 c 0 0 c ) 8 ~ i h 7 0 0 b 7 f . > ' ' ( ( ( ( [ . 7 9 | / A A 7 ", -"B B A 7 0 9 0 9 / 8 ~ i g 9 7 c 7 7 g . > > ( ' ' ( ( [ . | 5 7 ^ A A 7 ", -"B B A 7 0 7 7 c ^ 8 ~ i c 7 9 9 7 9 f . > ' ( ' ( ' ( [ . 7 7 5 ^ A A 7 ", -"B B A 7 7 9 9 c { 8 ~ h c 7 7 9 9 c c . > ' ' ' ( ' ( [ . 7 7 5 / A A 7 ", -"B B A 7 0 c 7 9 / 8 ~ i h c 9 9 0 b f . > ' ' > ' ' ( [ . 1 9 | ) A A 7 ", -"B B A 7 7 9 9 b ^ 8 ~ i g 7 b b 7 c g . ' > ( ' ' ' ( [ . 1 7 7 ^ A A 7 ", -"B B A 7 7 0 9 7 { 8 ~ h b c 7 b 7 0 f . ' ' ' ' ' ' ( [ . 1 9 1 / A A 6 ", -"B B A 7 9 7 0 9 ^ 8 ~ i f 9 9 7 7 9 h . > ' ' ' ( ' ( [ . | 7 1 ) A A 7 ", -"B B A 7 c 9 0 9 { 8 ~ i h 9 7 9 9 c h . > > ( ' ' ' ( [ . 1 0 | / A A 7 ", -"B B A 7 9 b 0 0 { 8 ~ g g 0 9 0 9 b f . > ' ' ' > ( ( [ . 5 7 5 ^ A A 6 ", -"A A A 7 9 9 b 7 { 8 ~ i b c 9 9 7 9 f . ' > ' ( ' ' ( [ . | 5 5 { A A 6 ", -"B B A 7 b b 7 c ^ 8 ~ i f 9 7 0 7 c f . > ' ( ' ' ' ( [ . 5 0 1 ) A A 6 ", -"A A A 7 0 b b 9 / 8 ~ k h c 9 0 9 7 f . ' > ( ' ' ' ( [ . 5 5 5 ^ A A 6 ", -"A A A 7 9 b 9 9 { 8 ~ k h 9 0 9 7 c h . > ' ( ( ' ' ( [ . 7 5 5 { A A 5 ", -"A A y 7 b 0 0 9 ^ 8 ~ i f 9 9 0 7 9 h . > > ( ' ( ( ' [ . 7 7 5 / y y 5 ", -"A A y 7 0 c 9 c / 8 ~ k h b 7 7 b 0 f . > > ' ' ' ( ( [ . 5 9 | ) y A 5 ", -"A A y 7 c 9 9 b ) 8 ~ i b 9 7 9 9 b f . > ' ( ' ' ' ( [ . | 1 7 ^ A y 6 ", -"A A y 6 0 b b 0 / 8 ~ m b 9 c 9 7 0 g . > > ' ' ( ' ( [ . 5 9 | / y y 5 ", -"A A y 6 9 b 0 7 { 8 ~ h f 7 9 b 9 0 h . > > ' ' ( ( ' [ . | 5 | { y y 5 ", -"A A y 6 9 0 9 b / 8 ~ i h 9 b b 9 b i . ' ' ( ' ' ' ( [ . | 5 5 ) y y 5 ", -"A A y 6 0 0 9 0 { 8 ~ k b 9 7 c 9 c g . > ' ( ' ( ' ( [ . 7 7 | ^ y y 5 ", -"A A y 6 c b b 7 { 8 ~ h g 0 7 0 0 7 f . > ' ( ' ( ( ( [ . | 1 5 / y y 5 ", -"A A y 6 7 7 c 9 ^ 8 ~ h b 0 0 0 b c f . ' ( [ [ [ [ [ [ . 5 7 1 ^ y y 5 ", -"y y y 5 9 0 b 0 < } - k c 7 c c c 9 i . ( [ 2 | e 2 5 | . 1 7 | { y y 5 ", -"y y y 5 c 9 7 7 9 ~ @ r h 0 9 9 9 9 0 . . . . . . . . . . | 5 1 { y y 5 ", -"y y y 5 0 0 0 0 b m w w b 9 0 0 0 7 9 5 | } 1 < < } < < } 1 9 7 ^ y y 5 ", -"y y y 5 7 9 9 b b b i f c 7 b b 7 c 9 0 5 7 1 7 5 5 7 7 1 7 9 7 ^ y y 5 ", -"y y y 5 0 9 0 b b 9 c c 9 c 7 9 9 9 c 0 7 0 9 9 7 7 9 0 9 9 9 | / y y 5 ", -"y y y 0 9 9 } } | < < } } 1 | } } | | | } | } | < } 1 < | 1 } < , y x 5 ", -"y y x p } = % # = # % % % % % % % & % % % # % % # % % % & % % % % y y 5 ", -"y y y x x x x y y y y x x y x y x x x x y y x x y x x x x y x y x x x 1 ", -"y y v s q q q q q q q q q q q q q q q q q q q q q q s q q q s s v x x 5 ", -"y y l h h h h h h g h h h h h h g h h h g h h h h g g h g h g h l v x 1 ", -"y y j 1 | } < < _ _ / / / / / / / / / / / / / / / / _ _ < < < | 1 v y 5 ", -"y y j | < _ _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | B A 1 ", -"y y j < _ _ / ! ) , - , - , - , - , - , - , - , - , , ) ! / _ < | D B 1 ", -"y y j < _ / ! , - = = = = = = = = = = = = = = = = = - - , ! / _ < C A 5 ", -"y y j _ / ! , - = = % # # # # # # # # # # # # # # % % = - , ! / < C A 1 ", -"y y j _ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ C A 1 ", -"x x j / / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / _ C A 5 ", -"x x j _ / ) - = & # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # % = - ) / < C A 1 ", -"x x j _ / ! , - = % % # # # # # # # # # # # # # # % % = - , ! / < C A 5 ", -"x x j < _ / ! , - - = = = = = = = = = = = = = = = = - - , ! / _ < C A 1 ", -"x x j < _ / / ! ) - , - - - - - - - - - - - - - - , , ) ! / / < } C A 1 ", -"x x l | < < _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / _ < < | D A 1 ", -"x x q 1 1 } < < _ _ / / / / / / / / / / / / / / / / _ _ _ < } 1 1 H A 1 ", -"x x y B I K N K K K K K K K K K K K K K K K K K K K K K K K L K L E y 1 ", -"x x x A B B B B B B B B C C B B B B B B B B B B C C B C B B C B B y x 1 ", -"x x v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v 1 ", -"x x v | } } } } } } } } } } } } } } } } } } } } } } } } } } } } } v v 1 ", -"x x v T V T T T T T T T T T T T T T T T T T T T T T T T T T T T T C v 1 ", -"x x v T Z +.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.f v 1 ", -"x x v O X ..................................................+...` | v 1 ", -"x x v Q X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` X 4 v 1 ", -"v v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 5 v | ", -"v v v Q X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v | ", -"v v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v | ", -"v v v Q X ..` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v | ", -"v v v O X .` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` .` X 6 v | ", -"v v v Q X .` ` . . . . . . . . . . . . . . . . . . . . . . .` Y 4 v 1 ", -"v v v O X U X X X X X X X X X X X X X X X X X X X X X X X X Y U O 6 s | ", -"v v v S C k h i h h h h h h h h h h h h h h h h h h h h h h i g f 6 v | ", -"v v s i , # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # v | ", -"v v v s s v v s v v v v v s s s v s v v v v s v v s v v s v v s s s v | ", -"v v s v v v s v v s v s s s v v s v v s v v v v s v s v s v v v v v v | ", -"v v s ) - = - = - = - = - = - = - = - = - = - = - = - = - = - = = q q | ", -"v v q / X n n n n n n n n n n n n n n n n n n n n n n n n n n n @ s s | ", -"s s s / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q | ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q | ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q | ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! @ q q } ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q | ", -"s s q / 3 = = = = = = = = = = = = = = = = = = = = = = = = = = ! . q q } ", -"s s q / ! = = = = = = = = = = = = = = = = = = = = = = = = = = # @ q q | ", -"s s q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p q } ", -"s s q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p q | ", -"s s q q q q q q q q q p p q p q q q q q q p q q q q p q p q q q q q q } ", -"k j f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f < ", -"9 < _ / / / / / / _ / / _ / / _ / / _ / / / / _ / / _ / / / / / _ / / / "}; +char const * iomixer_r_xpm[] = { +"36 253 81 1", +" c #595966", +". c #2E3038", +"+ c #333342", +"@ c #2F2F3B", +"# c #27272B", +"$ c #616176", +"% c #4F4F5D", +"& c #474752", +"* c #28282B", +"= c #4E4E5C", +"- c #F1F1F2", +"; c #ABABB2", +"> c #696975", +", c #C3C3C7", +"' c #DFDFE2", +") c #E3E3E5", +"! c #93939C", +"~ c #28282C", +"{ c #4D4D5A", +"] c #E5E5E7", +"^ c #D0D0D3", +"/ c #D0D0D4", +"( c #E4E4E6", +"_ c #BEBEC3", +": c #757580", +"< c #52525F", +"[ c #676772", +"} c #29292C", +"| c #4C4C59", +"1 c #BCBCC1", +"2 c #61616D", +"3 c #62626D", +"4 c #BBBBC0", +"5 c #D9D9DC", +"6 c #5D5D69", +"7 c #29292D", +"8 c #4B4B59", +"9 c #E3E3E6", +"0 c #86868F", +"a c #96969E", +"b c #97979F", +"c c #85858E", +"d c #8D8D96", +"e c #F0F0F1", +"f c #C2C2C7", +"g c #787883", +"h c #2A2A2D", +"i c #4C4C58", +"j c #E4E4E5", +"k c #555561", +"l c #C8C8CB", +"m c #C8C8CC", +"n c #545460", +"o c #5A5A65", +"p c #97979E", +"q c #DEDEE0", +"r c #A0A0A7", +"s c #2A2A2E", +"t c #4B4B58", +"u c #C9C9CD", +"v c #575763", +"w c #DCDCDE", +"x c #2B2B2E", +"y c #4B4B57", +"z c #75757F", +"A c #7E7E86", +"B c #7C7C84", +"C c #B9B9BE", +"D c #2B2B2F", +"E c #494955", +"F c #B8B8BD", +"G c #DBDBDD", +"H c #BEBEC2", +"I c #64646E", +"J c #32323E", +"K c #313136", +"L c #000000", +"M c #474951", +"N c #404044", +"O c #7A7A8F", +"P c #737384", +" ", +" .................................. ", +" .................................. ", +" ..+@#########@+....+@#########@+.. ", +" ..@#$$$$$$$$$#@....@#$$$$$$$$$#@.. ", +" ..#$%%%%%%%%%&#....#$%%%%%%%%%&#.. ", +" ..*$==-;==;-=&*....*$==>,')!==&*.. ", +" ..~${{]^{{/({&~....~${{_:{<[{{&~.. ", +" ..}$||(1234(|&}....}$||56|||||&}.. ", +" ..7$8890abc98&7....7$88defg888&7.. ", +" ..h$iijklmnji&h....h$iiiopqrii&h.. ", +" ..s$tt)tumt)t&s....s$tttttvwtt&s.. ", +" ..x$yy)yzzy)y&x....x$yyAiyBCyy&x.. ", +" ..D$EE)EEEE)E&D....D$EEF]GHIEE&D.. ", +" ..JK&&&&&&&&&KJ....JK&&&&&&&&&KJ.. ", +" ..+JKKKKKKKKKJ+....+JKKKKKKKKKJ+.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..................LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" .MMMMMMMNOMMM.....LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ........#$........LLLLLLLLLL...... ", +" ..................LLLLLLLLLL...... ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" ..PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.. ", +" .................................. ", +" .................................. ", +" .................................. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" ..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.. ", +" .................................. ", +" .................................. ", +" "}; diff --git a/hdspmixer/pixmaps/level.xpm b/hdspmixer/pixmaps/level.xpm index a92fe26..87af86c 100644 --- a/hdspmixer/pixmaps/level.xpm +++ b/hdspmixer/pixmaps/level.xpm @@ -1,399 +1,617 @@ /* XPM */ -char * level_xpm[] = { -"8 139 257 2", -" c None", -". c #149003", -"+ c #24B114", -"@ c #2DC114", -"# c #35C91C", -"$ c #3DC91C", -"% c #4DD22D", -"& c #6EEA4D", -"* c #004816", -"= c #004849", -"- c #00487C", -"; c #0048AF", -"> c #0048E2", -", c #007B00", -"' c #007B16", -") c #007B49", -"! c #007B7C", -"~ c #007BAF", -"{ c #007BE2", -"] c #00AE00", -"^ c #00AE16", -"/ c #00AE49", -"( c #00AE7C", -"_ c #00AEAF", -": c #00AEE2", -"< c #00E100", -"[ c #00E116", -"} c #00E149", -"| c #00E17C", -"1 c #00E1AF", -"2 c #00E1E2", -"3 c #00FF00", -"4 c #00FF16", -"5 c #00FF49", -"6 c #00FF7C", -"7 c #00FFAF", -"8 c #00FFE2", -"9 c #161500", -"0 c #161516", -"a c #161549", -"b c #16157C", -"c c #1615AF", -"d c #1615E2", -"e c #164800", -"f c #164816", -"g c #164849", -"h c #16487C", -"i c #1648AF", -"j c #1648E2", -"k c #167B00", -"l c #167B16", -"m c #167B49", -"n c #167B7C", -"o c #167BAF", -"p c #167BE2", -"q c #16AE00", -"r c #16AE16", -"s c #16AE49", -"t c #16AE7C", -"u c #16AEAF", -"v c #16AEE2", -"w c #16E100", -"x c #16E116", -"y c #16E149", -"z c #16E17C", -"A c #16E1AF", -"B c #16E1E2", -"C c #16FF00", -"D c #16FF16", -"E c #16FF49", -"F c #16FF7C", -"G c #16FFAF", -"H c #16FFE2", -"I c #491500", -"J c #491516", -"K c #491549", -"L c #49157C", -"M c #4915AF", -"N c #4915E2", -"O c #494800", -"P c #494816", -"Q c #494849", -"R c #49487C", -"S c #4948AF", -"T c #4948E2", -"U c #497B00", -"V c #497B16", -"W c #497B49", -"X c #497B7C", -"Y c #497BAF", -"Z c #497BE2", -"` c #49AE00", -" . c #49AE16", -".. c #49AE49", -"+. c #49AE7C", -"@. c #49AEAF", -"#. c #49AEE2", -"$. c #49E100", -"%. c #49E116", -"&. c #49E149", -"*. c #49E17C", -"=. c #49E1AF", -"-. c #49E1E2", -";. c #49FF00", -">. c #49FF16", -",. c #49FF49", -"'. c #49FF7C", -"). c #49FFAF", -"!. c #49FFE2", -"~. c #7C1500", -"{. c #7C1516", -"]. c #7C1549", -"^. c #7C157C", -"/. c #7C15AF", -"(. c #7C15E2", -"_. c #7C4800", -":. c #7C4816", -"<. c #7C4849", -"[. c #7C487C", -"}. c #7C48AF", -"|. c #7C48E2", -"1. c #7C7B00", -"2. c #7C7B16", -"3. c #7C7B49", -"4. c #7C7B7C", -"5. c #7C7BAF", -"6. c #7C7BE2", -"7. c #7CAE00", -"8. c #7CAE16", -"9. c #7CAE49", -"0. c #7CAE7C", -"a. c #7CAEAF", -"b. c #7CAEE2", -"c. c #7CE100", -"d. c #7CE116", -"e. c #7CE149", -"f. c #7CE17C", -"g. c #7CE1AF", -"h. c #7CE1E2", -"i. c #7CFF00", -"j. c #7CFF16", -"k. c #7CFF49", -"l. c #7CFF7C", -"m. c #7CFFAF", -"n. c #7CFFE2", -"o. c #AF1500", -"p. c #AF1516", -"q. c #AF1549", -"r. c #AF157C", -"s. c #AF15AF", -"t. c #AF15E2", -"u. c #AF4800", -"v. c #AF4816", -"w. c #AF4849", -"x. c #AF487C", -"y. c #AF48AF", -"z. c #AF48E2", -"A. c #AF7B00", -"B. c #AF7B16", -"C. c #AF7B49", -"D. c #AF7B7C", -"E. c #AF7BAF", -"F. c #AF7BE2", -"G. c #AFAE00", -"H. c #AFAE16", -"I. c #AFAE49", -"J. c #AFAE7C", -"K. c #AFAEAF", -"L. c #AFAEE2", -"M. c #AFE100", -"N. c #AFE116", -"O. c #AFE149", -"P. c #AFE17C", -"Q. c #AFE1AF", -"R. c #AFE1E2", -"S. c #AFFF00", -"T. c #AFFF16", -"U. c #AFFF49", -"V. c #AFFF7C", -"W. c #AFFFAF", -"X. c #AFFFE2", -"Y. c #E21500", -"Z. c #E21516", -"`. c #E21549", -" + c #E2157C", -".+ c #E215AF", -"++ c #E215E2", -"@+ c #E24800", -"#+ c #E24816", -"$+ c #E24849", -"%+ c #E2487C", -"&+ c #E248AF", -"*+ c #E248E2", -"=+ c #E27B00", -"-+ c #E27B16", -";+ c #E27B49", -">+ c #E27B7C", -",+ c #E27BAF", -"'+ c #E27BE2", -")+ c #E2AE00", -"!+ c #E2AE16", -"~+ c #E2AE49", -"{+ c #E2AE7C", -"]+ c #E2AEAF", -"^+ c #E2AEE2", -"/+ c #E2E100", -"(+ c #E2E116", -"_+ c #E2E149", -":+ c #E2E17C", -"<+ c #E2E1AF", -"[+ c #E2E1E2", -"}+ c #E2FF00", -"|+ c #E2FF16", -"1+ c #E2FF49", -"2+ c #E2FF7C", -"3+ c #E2FFAF", -"4+ c #E2FFE2", -"5+ c #001500", -"6+ c #002200", -"7+ c #002F00", -"8+ c #0B3D0B", -"9+ c #184A18", -"0+ c #265826", -"a+ c #336533", -"b+ c #407240", -"c+ c #4E804E", -"d+ c #5B8D5B", -"e+ c #699B69", -"f+ c #76A876", -"g+ c #84B684", -"h+ c #91C391", -"i+ c #9ED09E", -"j+ c #ACDEAC", -"k+ c #B9EBB9", -"l+ c #C7F9C7", -"m+ c #D4FFD4", -"n+ c #E2FFE2", -"o+ c #006100", -"p+ c #001563", -"q+ c #001900", -"r+ c #A12400", -"s+ c #004900", -"t+ c #5E199F", -"u+ c #00D200", -"v+ c #001A00", -"w+ c #00FF00", -"x+ c #83183D", -"y+ c #00AF00", -"z+ c #472C51", -"A+ c #007B00", -"B+ c #3A1680", -"C+ c #006E00", -"D+ c #001800", -"E+ c #00FF00", -"F+ c #3F1555", -"G+ c #008600", -"H+ c #95154F", -". . . . . . . + ", -"+ + + + @ + # $ ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"+ @ # # # # % % ", -"@ $ % % % % % & ", -"$ % & & & & & % "}; +char const * level_xpm[] = { +"8 139 475 2", +" c #FD0D0E", +". c #FD0E0E", +"+ c #BD0707", +"@ c #FD1A0E", +"# c #FC1A0E", +"$ c #BD1408", +"% c #BC1407", +"& c #BC1307", +"* c #BC1308", +"= c #BD1407", +"- c #FC320F", +"; c #FC320E", +"> c #FC330E", +", c #FD320F", +"' c #FC330F", +") c #BC2008", +"! c #BC1F08", +"~ c #FC4A0F", +"{ c #FB4A0F", +"] c #FC4B0F", +"^ c #FB4B0F", +"/ c #FB4B10", +"( c #BC2C08", +"_ c #BC2B08", +": c #BB2C08", +"< c #FB6310", +"[ c #BB3808", +"} c #BA3808", +"| c #FB7B10", +"1 c #FA7B11", +"2 c #FB7C11", +"3 c #FA7B10", +"4 c #FA7C10", +"5 c #FB7B11", +"6 c #BB4409", +"7 c #BA4509", +"8 c #BA4409", +"9 c #BB4509", +"0 c #BA4408", +"a c #BB4508", +"b c #FA8C10", +"c c #FA8C11", +"d c #FB8C11", +"e c #BA5409", +"f c #BA5509", +"g c #FA9C11", +"h c #F99C11", +"i c #FA9C12", +"j c #BA6409", +"k c #B96409", +"l c #BA6309", +"m c #F9AC12", +"n c #FAAC12", +"o c #FAAC11", +"p c #FAAB12", +"q c #F9AC11", +"r c #B97409", +"s c #BA7409", +"t c #B97309", +"u c #F9BC11", +"v c #F9BB12", +"w c #F9BC12", +"x c #F9BB11", +"y c #B98309", +"z c #B98409", +"A c #F9CC12", +"B c #F9CC13", +"C c #F9CB12", +"D c #F9CB13", +"E c #F8CB12", +"F c #B8930A", +"G c #B99309", +"H c #B89309", +"I c #B9930A", +"J c #B9940A", +"K c #F9DB13", +"L c #F9DB12", +"M c #F8DB13", +"N c #F8DB12", +"O c #B8A30A", +"P c #B9A40A", +"Q c #B8A309", +"R c #F8EB13", +"S c #F8EA13", +"T c #F8EB12", +"U c #B6AE0A", +"V c #B6AF0A", +"W c #B7AE0A", +"X c #B7AF0A", +"Y c #B6AE09", +"Z c #F3EE13", +"` c #F3ED13", +" . c #F4ED13", +".. c #F3EE12", +"+. c #F4EE13", +"@. c #F4EE12", +"#. c #B0AC09", +"$. c #B0AD0A", +"%. c #B1AD0A", +"&. c #B1AD09", +"*. c #B1AC0A", +"=. c #B0AD09", +"-. c #EDEC12", +";. c #EEEC12", +">. c #EDEC13", +",. c #EDEB12", +"'. c #AAAB09", +"). c #ABAB09", +"!. c #E7EA11", +"~. c #E7EA12", +"{. c #E8EA12", +"]. c #E8EB12", +"^. c #A4A909", +"/. c #A5A909", +"(. c #A5AA09", +"_. c #E2E811", +":. c #E1E812", +"<. c #E1E811", +"[. c #9EA809", +"}. c #9EA709", +"|. c #9FA709", +"1. c #DCE611", +"2. c #DCE610", +"3. c #DBE711", +"4. c #DBE611", +"5. c #99A509", +"6. c #99A609", +"7. c #99A508", +"8. c #D6E510", +"9. c #D6E511", +"0. c #D5E511", +"a. c #D5E510", +"b. c #92A408", +"c. c #92A309", +"d. c #92A308", +"e. c #CFE310", +"f. c #D0E310", +"g. c #CFE20F", +"h. c #CFE30F", +"i. c #8CA208", +"j. c #8DA208", +"k. c #C9E110", +"l. c #C9E10F", +"m. c #CAE210", +"n. c #CAE110", +"o. c #86A108", +"p. c #87A008", +"q. c #86A008", +"r. c #C3DF0F", +"s. c #C4DF0F", +"t. c #C3E00F", +"u. c #819E08", +"v. c #809F08", +"w. c #809E08", +"x. c #819F08", +"y. c #809F07", +"z. c #BEDE0F", +"A. c #BDDE0F", +"B. c #BDDE0E", +"C. c #BDDD0F", +"D. c #BEDE0E", +"E. c #7B9D07", +"F. c #7A9D08", +"G. c #7B9D08", +"H. c #B7DC0E", +"I. c #B8DB0E", +"J. c #B7DC0F", +"K. c #759B07", +"L. c #759A07", +"M. c #749B07", +"N. c #B2DA0D", +"O. c #B1DA0D", +"P. c #B1DA0E", +"Q. c #B2DA0E", +"R. c #6E9907", +"S. c #6F9907", +"T. c #6F9A07", +"U. c #ACD80D", +"V. c #ABD80D", +"W. c #ACD90D", +"X. c #ABD90D", +"Y. c #689707", +"Z. c #689706", +"`. c #699707", +" + c #A5D70C", +".+ c #A5D60C", +"++ c #A5D70D", +"@+ c #A6D70D", +"#+ c #A6D60D", +"$+ c #A6D70C", +"%+ c #A6D60C", +"&+ c #639506", +"*+ c #639507", +"=+ c #639607", +"-+ c #639606", +";+ c #9FD50D", +">+ c #9FD50C", +",+ c #A0D50D", +"'+ c #A0D50C", +")+ c #A0D40D", +"!+ c #A0D40C", +"~+ c #5D9406", +"{+ c #5C9406", +"]+ c #5D9306", +"^+ c #9AD30C", +"/+ c #99D30C", +"(+ c #9AD30B", +"_+ c #99D30B", +":+ c #569206", +"<+ c #94D10C", +"[+ c #94D10B", +"}+ c #93D10B", +"|+ c #93D10C", +"1+ c #519006", +"2+ c #509006", +"3+ c #8ECF0B", +"4+ c #8DD00A", +"5+ c #8DCF0B", +"6+ c #8ED00A", +"7+ c #8ED00B", +"8+ c #8DD00B", +"9+ c #4A8E05", +"0+ c #4B8E06", +"a+ c #4B8E05", +"b+ c #4B8F05", +"c+ c #88CD0A", +"d+ c #88CD0B", +"e+ c #87CD0A", +"f+ c #87CE0A", +"g+ c #87CE0B", +"h+ c #448C05", +"i+ c #458D05", +"j+ c #458C05", +"k+ c #458D06", +"l+ c #448D05", +"m+ c #82CC0A", +"n+ c #82CB0A", +"o+ c #81CB0A", +"p+ c #81CB09", +"q+ c #3F8B05", +"r+ c #3F8A05", +"s+ c #408B05", +"t+ c #408A05", +"u+ c #7CCA0A", +"v+ c #7CCA09", +"w+ c #7BCA0A", +"x+ c #7BCA09", +"y+ c #3D8A05", +"z+ c #3D8905", +"A+ c #79C909", +"B+ c #78C909", +"C+ c #78C90A", +"D+ c #79C809", +"E+ c #3C8905", +"F+ c #3B8905", +"G+ c #3C8805", +"H+ c #75C809", +"I+ c #75C709", +"J+ c #3A8705", +"K+ c #3A8805", +"L+ c #3A8704", +"M+ c #71C709", +"N+ c #71C609", +"O+ c #71C608", +"P+ c #71C708", +"Q+ c #388604", +"R+ c #388605", +"S+ c #388705", +"T+ c #388704", +"U+ c #6EC609", +"V+ c #6EC608", +"W+ c #6EC508", +"X+ c #378604", +"Y+ c #368504", +"Z+ c #378505", +"`+ c #6AC508", +" @ c #6BC508", +".@ c #6BC408", +"+@ c #358504", +"@@ c #358404", +"#@ c #348404", +"$@ c #67C408", +"%@ c #68C407", +"&@ c #68C408", +"*@ c #338304", +"=@ c #338404", +"-@ c #64C308", +";@ c #64C307", +">@ c #63C208", +",@ c #63C207", +"'@ c #318204", +")@ c #61C208", +"!@ c #61C107", +"~@ c #60C207", +"{@ c #61C207", +"]@ c #308204", +"^@ c #308104", +"/@ c #2F8204", +"(@ c #5DC107", +"_@ c #5DC007", +":@ c #5DC008", +"<@ c #2E8004", +"[@ c #2E8104", +"}@ c #59BF07", +"|@ c #59C006", +"1@ c #5AC007", +"2@ c #5ABF07", +"3@ c #59C007", +"4@ c #2C7F04", +"5@ c #2C7F03", +"6@ c #2C8004", +"7@ c #57BE07", +"8@ c #56BE07", +"9@ c #56BF06", +"0@ c #56BF07", +"a@ c #57BF06", +"b@ c #2A7F04", +"c@ c #2B7E03", +"d@ c #2B7E04", +"e@ c #2A7E03", +"f@ c #53BD06", +"g@ c #53BD07", +"h@ c #52BE07", +"i@ c #53BE06", +"j@ c #52BE06", +"k@ c #297D03", +"l@ c #297E04", +"m@ c #297E03", +"n@ c #4FBD06", +"o@ c #50BD06", +"p@ c #50BC06", +"q@ c #4FBC07", +"r@ c #4FBC06", +"s@ c #277D03", +"t@ c #277C03", +"u@ c #4CBC05", +"v@ c #4CBB06", +"w@ c #4CBC06", +"x@ c #267B03", +"y@ c #257B03", +"z@ c #257C03", +"A@ c #48BA06", +"B@ c #49BB06", +"C@ c #48BA05", +"D@ c #48BB06", +"E@ c #49BB05", +"F@ c #237A03", +"G@ c #247A03", +"H@ c #45BA06", +"I@ c #46BA05", +"J@ c #45BA05", +"K@ c #45B906", +"L@ c #227903", +"M@ c #227A03", +"N@ c #41B905", +"O@ c #41B906", +"P@ c #42B905", +"Q@ c #42B805", +"R@ c #207803", +"S@ c #207802", +"T@ c #207903", +"U@ c #3FB805", +"V@ c #3EB704", +"W@ c #3EB805", +"X@ c #3EB705", +"Y@ c #3FB705", +"Z@ c #1F7703", +"`@ c #1F7702", +" # c #1E7703", +".# c #1E7702", +"+# c #3BB604", +"@# c #3BB705", +"## c #3BB605", +"$# c #3AB605", +"%# c #1D7602", +"&# c #1D7603", +"*# c #38B604", +"=# c #38B504", +"-# c #37B504", +";# c #37B604", +"># c #38B605", +",# c #1B7502", +"'# c #34B504", +")# c #34B404", +"!# c #197402", +"~# c #1A7402", +"{# c #30B404", +"]# c #31B404", +"^# c #31B304", +"/# c #31B403", +"(# c #30B304", +"_# c #187302", +":# c #2DB303", +"<# c #2DB304", +"[# c #2DB203", +"}# c #2DB204", +"|# c #167202", +"1# c #2AB103", +"2# c #29B203", +"3# c #29B103", +"4# c #2AB203", +"5# c #147102", +"6# c #26B003", +"7# c #26B103", +"8# c #27B102", +"9# c #27B003", +"0# c #126F01", +"a# c #137002", +"b# c #127002", +"c# c #126F02", +"d# c #137001", +"e# c #136F01", +"f# c #23AF03", +"g# c #23B003", +"h# c #23AF02", +"i# c #116F02", +"j# c #116F01", +"k# c #20AF03", +"l# c #20AF02", +"m# c #1FAE02", +"n# c #1FAF02", +"o# c #0F6E02", +"p# c #0F6E01", +"q# c #0F6D01", +"r# c #0F6D02", +"s# c #1CAE02", +"t# c #1CAE03", +"u# c #1CAD03", +"v# c #1DAD02", +"w# c #0D6D01", +"x# c #0E6D01", +"y# c #19AC02", +"z# c #18AC01", +"A# c #19AC01", +"B# c #18AC02", +"C# c #0C6C01", +"D# c #0C6B01", +"E# c #15AC02", +"F# c #15AB02", +"G# c #15AC01", +"H# c #0A6B01", +"I# c #12AA01", +"J# c #12AA02", +"K# c #086A01", +"L# c #0FA901", +"M# c #0EA902", +"N# c #0FAA01", +"O# c #0EA901", +"P# c #066901", +"Q# c #076901", +"R# c #0BA801", +"S# c #056801", +"T# c #056700", +"U# c #056701", +"V# c #07A701", +"W# c #08A801", +"X# c #07A801", +"Y# c #08A700", +"Z# c #08A800", +"`# c #07A700", +" $ c #08A701", +".$ c #036701", +"+$ c #036600", +"@$ c #036700", +"#$ c #04A600", +"$$ c #05A601", +"%$ c #04A601", +"&$ c #05A600", +"*$ c #016600", +"=$ c #026600", +"-$ c #026500", +";$ c #01A500", +">$ c #00A500", +",$ c #01A501", +"'$ c #01A600", +" . . . . . ", +"+ + + + + + + + ", +"@ # @ # @ @ @ @ ", +"$ % & & & * * = ", +"- - ; > , ' ; ' ", +") ! ! ! ! ) ! ) ", +"~ { ] ] ] ^ { / ", +"( _ ( : : : : : ", +"< < < < < < < < ", +"[ [ } [ [ [ [ } ", +"| 1 | 2 3 4 2 5 ", +"6 7 8 9 0 a 6 7 ", +"b b c c c c d b ", +"e e e f e f e e ", +"g g g h g h h i ", +"j k j j k k j l ", +"m n m m o p q q ", +"r s s r t r s r ", +"u v w v v w x v ", +"y y z z y y y y ", +"A B C C D E A A ", +"F G H I I G J I ", +"K K L L M L N K ", +"O P Q O O O Q Q ", +"R R R R S T R R ", +"U V W X X V V Y ", +"Z ` ...+.....@.", +"#.$.%.%.&.$.*.=.", +"-.;.>.;.,.-.;.-.", +"'.).'.).'.).).).", +"!.~.~.{.].].~.~.", +"^./.^.(././.^./.", +"_.:._.<._._.:._.", +"[.}.}.[.[.|.[.}.", +"1.2.3.3.1.3.4.3.", +"5.6.6.6.6.6.6.7.", +"8.9.0.8.0.a.0.8.", +"b.b.b.b.c.d.d.b.", +"e.f.e.f.g.f.h.f.", +"i.j.j.i.j.j.j.i.", +"k.l.k.l.l.m.k.n.", +"o.p.q.p.p.o.q.p.", +"r.s.r.s.s.s.t.s.", +"u.u.v.w.u.x.x.y.", +"z.A.B.z.C.A.A.D.", +"E.E.E.E.F.G.E.E.", +"H.I.H.H.J.H.J.I.", +"K.K.K.L.M.K.K.K.", +"N.O.O.N.O.P.Q.P.", +"R.S.S.T.R.R.S.R.", +"U.U.V.U.U.V.W.X.", +"Y.Y.Y.Y.Y.Z.Y.`.", +" +.+++@+.+#+$+%+", +"&+*+*+=+-+-+&+-+", +";+>+>+,+'+'+)+!+", +"~+{+~+~+]+{+]+~+", +"^+/+(+(+/+/+^+_+", +":+:+:+:+:+:+:+:+", +"<+[+[+[+[+}+<+|+", +"1+1+2+1+1+1+2+1+", +"3+3+4+5+6+5+7+8+", +"9+9+9+0+a+b+0+0+", +"c+d+e+e+f+e+e+g+", +"h+i+j+k+l+i+j+l+", +"m+n+m+o+p+o+o+o+", +"q+r+s+s+q+s+q+t+", +"u+v+v+u+u+v+w+x+", +"y+y+z+y+z+y+z+z+", +"A+B+C+B+A+B+D+C+", +"E+F+E+E+E+G+G+F+", +"H+H+I+H+H+H+H+H+", +"J+K+J+K+K+J+L+J+", +"M+N+O+M+M+P+M+P+", +"Q+R+Q+Q+S+Q+R+T+", +"U+U+V+W+U+U+U+U+", +"X+Y+Y+Y+X+Y+Y+Z+", +"`+ @.@ @.@ @`+`+", +"+@@@#@@@@@@@@@+@", +"$@$@$@$@$@%@&@&@", +"*@=@*@*@*@*@*@*@", +"-@-@;@>@-@-@,@-@", +"'@'@'@'@'@'@'@'@", +")@)@!@!@~@~@{@!@", +"]@]@^@^@^@^@^@/@", +"(@(@(@_@(@:@(@(@", +"<@<@<@<@<@<@[@<@", +"}@|@1@1@2@3@2@1@", +"4@5@4@6@5@4@6@4@", +"7@8@9@0@a@0@0@0@", +"b@c@b@d@c@e@d@c@", +"f@g@h@i@i@i@j@f@", +"k@k@l@m@k@k@k@k@", +"n@o@n@p@q@r@o@n@", +"s@t@t@t@t@t@t@t@", +"u@v@u@w@v@w@w@w@", +"x@y@z@y@y@y@x@y@", +"A@B@C@D@E@E@B@C@", +"F@G@G@G@F@G@F@F@", +"H@I@J@K@K@I@K@J@", +"L@M@L@L@L@M@L@L@", +"N@O@P@P@P@Q@P@N@", +"R@R@S@T@R@R@R@R@", +"U@V@W@U@X@W@Y@W@", +"Z@Z@Z@`@ #.#.#Z@", +"+#@#####@#####$#", +"%#&#&#&#%#%#%#&#", +"*#=#-#;#*#*#=#>#", +",#,#,#,#,#,#,#,#", +"'#)#'#'#'#'#'#)#", +"!#~#!#!#!#!#!#!#", +"{#]#^#{#/#(#^#/#", +"_#_#_#_#_#_#_#_#", +":#<#[#[#:#}#:#:#", +"|#|#|#|#|#|#|#|#", +"1#1#2#3#2#1#4#1#", +"5#5#5#5#5#5#5#5#", +"6#7#8#9#6#9#6#7#", +"0#a#b#0#c#a#d#e#", +"f#g#g#f#g#f#f#h#", +"i#j#i#j#i#i#i#i#", +"k#l#m#n#m#m#l#l#", +"o#o#p#q#p#o#r#p#", +"s#t#s#u#v#s#s#v#", +"w#x#w#w#x#w#w#w#", +"y#z#y#A#B#y#y#z#", +"C#C#C#C#C#C#C#D#", +"E#F#E#G#F#G#G#G#", +"H#H#H#H#H#H#H#H#", +"I#I#I#J#I#J#I#J#", +"K#K#K#K#K#K#K#K#", +"L#M#N#N#L#O#O#L#", +"P#Q#Q#P#Q#Q#Q#Q#", +"R#R#R#R#R#R#R#R#", +"S#T#S#S#S#U#S#U#", +"V#W#X#Y#Z#`# $Y#", +".$+$@$.$@$@$@$.$", +"#$$$%$#$#$#$#$&$", +"*$*$*$=$*$-$=$=$", +";$>$;$;$,$;$'$;$"}; diff --git a/hdspmixer/pixmaps/loopback.xpm b/hdspmixer/pixmaps/loopback.xpm new file mode 100644 index 0000000..a327467 --- /dev/null +++ b/hdspmixer/pixmaps/loopback.xpm @@ -0,0 +1,69 @@ +/* XPM */ +char const * loopback_xpm[] = { +"34 15 51 1", +" c None", +". c #2E3038", +"+ c #FFFB7C", +"@ c #FDF97B", +"# c #2E2D11", +"$ c #000000", +"% c #383716", +"& c #898740", +"* c #F1EE75", +"= c #22210A", +"- c #727034", +"; c #E2DE6D", +"> c #D5D267", +", c #787637", +"' c #FBF77A", +") c #AAA750", +"! c #ABA851", +"~ c #CDC962", +"{ c #83813C", +"] c #C8C560", +"^ c #84823D", +"/ c #F7F378", +"( c #949145", +"_ c #B7B457", +": c #949245", +"< c #353414", +"[ c #87853F", +"} c #F1ED75", +"| c #3B3A17", +"1 c #DFDB6C", +"2 c #161505", +"3 c #4B4A20", +"4 c #E5E16E", +"5 c #FEFA7C", +"6 c #E8E470", +"7 c #535124", +"8 c #FAF679", +"9 c #E7E370", +"0 c #66642E", +"a c #E4E06E", +"b c #F6F277", +"c c #EAE671", +"d c #E0DC6C", +"e c #B9B658", +"f c #5F5D2A", +"g c #EDE973", +"h c #69672F", +"i c #DDD96A", +"j c #333342", +"k c #32323E", +"l c #313136", +"..................................", +".++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++.", +".+++@#++++@$$%&*@$$=-;+@#++>,*+++.", +".+++@#++++@#+')!@#+@~{+@#+]^/++++.", +".+++@#++++@#+'!!@#+@~(+@#_:'+++++.", +".+++@#++++@$$<[}@$$$|1+@234++++++.", +".+++@#++++@#++++@#+5678@#90a+++++.", +".+++@#++++@#++++@#+59#b@#+c0d++++.", +".+++@$$$$e@#++++@$$2f]+@#++ghi+++.", +".++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++.", +"..jklllllllllkj....jklllllllllkj.."}; diff --git a/hdspmixer/pixmaps/matrix_black.xpm b/hdspmixer/pixmaps/matrix_black.xpm index e96c3cf..2aafb17 100644 --- a/hdspmixer/pixmaps/matrix_black.xpm +++ b/hdspmixer/pixmaps/matrix_black.xpm @@ -1,272 +1,17 @@ /* XPM */ -char * matrix_black_xpm[] = { -"32 12 257 2", -" c None", -". c #000000", -"+ c #080808", -"@ c #080810", -"# c #001008", -"$ c #101010", -"% c #181010", -"& c #002010", -"* c #101818", -"= c #181818", -"- c #002918", -"; c #202018", -"> c #003118", -", c #202020", -"' c #202029", -") c #292020", -"! c #202920", -"~ c #292920", -"{ c #292929", -"] c #004120", -"^ c #293131", -"/ c #313131", -"( c #104A29", -"_ c #393939", -": c #394139", -"< c #414141", -"[ c #20524A", -"} c #4A4141", -"| c #414A41", -"1 c #4A4A41", -"2 c #4A4A4A", -"3 c #524A41", -"4 c #4A524A", -"5 c #525252", -"6 c #525A52", -"7 c #5A5A52", -"8 c #625A4A", -"9 c #317B20", -"0 c #5A625A", -"a c #62625A", -"b c #626A62", -"c c #6A6A62", -"d c #6A6A6A", -"e c #736A62", -"f c #737373", -"g c #7B736A", -"h c #737B73", -"i c #737B7B", -"j c #7B7B73", -"k c #7B7B7B", -"l c #7B8373", -"m c #7B837B", -"n c #83837B", -"o c #838383", -"p c #838B83", -"q c #8B8B83", -"r c #8B8B8B", -"s c #8B948B", -"t c #94948B", -"u c #949494", -"v c #949C94", -"w c #949C9C", -"x c #9C9C94", -"y c #9C9C9C", -"z c #9CA49C", -"A c #9CA4A4", -"B c #A4A49C", -"C c #A4A4A4", -"D c #A4ACA4", -"E c #ACACA4", -"F c #ACACAC", -"G c #B4B4AC", -"H c #BDBDB4", -"I c #C5C5BD", -"J c #CDCDCD", -"K c #D5D5CD", -"L c #DEDED5", -"M c #DEE6DE", -"N c #E6E6E6", -"O c #EEEEEE", -"P c #F6EEEE", -"Q c #F6F6F6", -"R c #F6FFFF", -"S c #FFFFFF", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0099FF", -"p+ c #00CCFF", -"q+ c #00FFFF", -"r+ c #3300FF", -"s+ c #3333FF", -"t+ c #3366FF", -"u+ c #3399FF", -"v+ c #33CCFF", -"w+ c #33FFFF", -"x+ c #6600FF", -"y+ c #6633FF", -"z+ c #6666FF", -"A+ c #6699FF", -"B+ c #66CCFF", -"C+ c #66FFFF", -"D+ c #9900FF", -"E+ c #9933FF", -"F+ c #9966FF", -"G+ c #9999FF", -"H+ c #99CCFF", -"f b b b b b b a b b b b b b a b b b a b b b b a a b a b a b f m ", -"d < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / / : < m ", -"d : / ^ ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : s ", -"d / ^ ^ { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { ^ / : u ", -"d / ^ { ' ; = * * * * * * * * * * * * * * * * * = = ; ' { ^ / t ", -"d ^ { ' ; = * * $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t ", -"d ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t ", -"d { { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t ", -"d ^ { , = * % @ + + + + + + + + + + + + + + + + @ $ * = , { / t ", -"d ^ { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t ", -"d / ^ { ' ; = = * * * * * * * * * * * * * * * * = = ; ' { ^ / t ", -"d a b b b a b b b b b a b b b a b b b a a b b b b a m m a m t t "}; +char const * matrix_black_xpm[] = { +"32 12 2 1", +" c None", +". c #000000", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_grey.xpm b/hdspmixer/pixmaps/matrix_grey.xpm index 40d0a34..b7ac81d 100644 --- a/hdspmixer/pixmaps/matrix_grey.xpm +++ b/hdspmixer/pixmaps/matrix_grey.xpm @@ -1,37 +1,17 @@ /* XPM */ -char * matrix_grey_xpm[] = { -"32 12 22 1", +char const * matrix_grey_xpm[] = { +"32 12 2 1", " c None", -". c #A0A0A0", -"+ c #98A098", -"@ c #989898", -"# c #7F7F7F", -"$ c #6F776F", -"% c #909088", -"& c #909890", -"* c #777777", -"= c #949494", -"- c #909898", -"; c #777F77", -"> c #949493", -", c #949394", -"' c #939494", -") c #939394", -"! c #939493", -"~ c #949393", -"{ c #939393", -"] c #A8A8A0", -"^ c #889088", -"/ c #B1B1A8", -".+++++++++++++++++++++++++++++++", -"@#$$$$$$$$$$$$$$$$$$$$$$$$$$$$%&", -"@*============================&-", -"-;============================++", -"-;============================.+", -"-;>===,='>=>,>>==============).+", -"-;=!,==!,=!>=''~,=~')===~====>.+", -"-;=~=,=>''=,'=,=>=')'~'=>=>'=).+", -"-#{>!=!!~=,~>'==,=>~='>>'>>'=!]+", -"-^>>~{,~{{))>!~'>!~~>!,=)=){!~]+", -"--.///////////////////////////]@", -"&-++..........................@-"}; +". c #737384", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_grey_l.xpm b/hdspmixer/pixmaps/matrix_grey_l.xpm index b1a434e..68c24b4 100644 --- a/hdspmixer/pixmaps/matrix_grey_l.xpm +++ b/hdspmixer/pixmaps/matrix_grey_l.xpm @@ -1,37 +1,17 @@ /* XPM */ -char * matrix_grey_l_xpm[] = { -"32 12 22 1", +char const * matrix_grey_l_xpm[] = { +"32 12 2 1", " c None", -". c #6F776F", -"+ c #98A098", -"@ c #7F7F7F", -"# c #909088", -"$ c #909890", -"% c #777777", -"& c #949494", -"* c #909898", -"= c #777F77", -"- c #A0A0A0", -"; c #949493", -"> c #949394", -", c #939494", -"' c #939394", -") c #939493", -"! c #949393", -"~ c #939393", -"{ c #A8A8A0", -"] c #889088", -"^ c #B1B1A8", -"/ c #989898", -".+++++++++++++++++++++++++++++++", -".@............................#$", -".%&&&&&&&&&&&&&&&&&&&&&&&&&&&&$*", -".=&&&&&&&&&&&&&&&&&&&&&&&&&&&&++", -".=&&&&&&&&&&&&&&&&&&&&&&&&&&&&-+", -".=;&&&>&,;&;>;;&&&&&&&&&&&&&&'-+", -".=&)>&&)>&);&,,!>&!,'&&&!&&&&;-+", -".=&!&>&;,,&>,&>&;&,',!,&;&;,&'-+", -".@~;)&))!&>!;,&&>&;!&,;;,;;,&){+", -".];;!~>!~~'';)!,;)!!;)>&'&'~)!{+", -".*-^^^^^^^^^^^^^^^^^^^^^^^^^^^{/", -".*++--------------------------/*"}; +". c #737384", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_grey_o.xpm b/hdspmixer/pixmaps/matrix_grey_o.xpm index 8dce291..6cd79f3 100644 --- a/hdspmixer/pixmaps/matrix_grey_o.xpm +++ b/hdspmixer/pixmaps/matrix_grey_o.xpm @@ -1,37 +1,17 @@ /* XPM */ -char * matrix_grey_o_xpm[] = { -"32 12 22 1", +char const * matrix_grey_o_xpm[] = { +"32 12 2 1", " c None", -". c #6F776F", -"+ c #989898", -"@ c #7F7F7F", -"# c #909088", -"$ c #909890", -"% c #777777", -"& c #949494", -"* c #909898", -"= c #777F77", -"- c #98A098", -"; c #A0A0A0", -"> c #949493", -", c #949394", -"' c #939494", -") c #939394", -"! c #939493", -"~ c #949393", -"{ c #939393", -"] c #A8A8A0", -"^ c #889088", -"/ c #B1B1A8", +". c #737384", "................................", -"+@............................#$", -"+%&&&&&&&&&&&&&&&&&&&&&&&&&&&&$*", -"*=&&&&&&&&&&&&&&&&&&&&&&&&&&&&--", -"*=&&&&&&&&&&&&&&&&&&&&&&&&&&&&;-", -"*=>&&&,&'>&>,>>&&&&&&&&&&&&&&);-", -"*=&!,&&!,&!>&''~,&~')&&&~&&&&>;-", -"*=&~&,&>''&,'&,&>&')'~'&>&>'&);-", -"*@{>!&!!~&,~>'&&,&>~&'>>'>>'&!]-", -"*^>>~{,~{{))>!~'>!~~>!,&)&){!~]-", -"**;///////////////////////////]+", -"$*--;;;;;;;;;;;;;;;;;;;;;;;;;;+*"}; +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_grey_ol.xpm b/hdspmixer/pixmaps/matrix_grey_ol.xpm index 64c6c40..a3a8815 100644 --- a/hdspmixer/pixmaps/matrix_grey_ol.xpm +++ b/hdspmixer/pixmaps/matrix_grey_ol.xpm @@ -1,37 +1,17 @@ /* XPM */ -char * matrix_grey_ol_xpm[] = { -"32 12 22 1", +char const * matrix_grey_ol_xpm[] = { +"32 12 2 1", " c None", -". c #6F776F", -"+ c #7F7F7F", -"@ c #909088", -"# c #909890", -"$ c #777777", -"% c #949494", -"& c #909898", -"* c #777F77", -"= c #98A098", -"- c #A0A0A0", -"; c #949493", -"> c #949394", -", c #939494", -"' c #939394", -") c #939493", -"! c #949393", -"~ c #939393", -"{ c #A8A8A0", -"] c #889088", -"^ c #B1B1A8", -"/ c #989898", +". c #737384", "................................", -".+............................@#", -".$%%%%%%%%%%%%%%%%%%%%%%%%%%%%#&", -".*%%%%%%%%%%%%%%%%%%%%%%%%%%%%==", -".*%%%%%%%%%%%%%%%%%%%%%%%%%%%%-=", -".*;%%%>%,;%;>;;%%%%%%%%%%%%%%'-=", -".*%)>%%)>%);%,,!>%!,'%%%!%%%%;-=", -".*%!%>%;,,%>,%>%;%,',!,%;%;,%'-=", -".+~;)%))!%>!;,%%>%;!%,;;,;;,%){=", -".];;!~>!~~'';)!,;)!!;)>%'%'~)!{=", -".&-^^^^^^^^^^^^^^^^^^^^^^^^^^^{/", -".&==--------------------------/&"}; +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_mute.xpm b/hdspmixer/pixmaps/matrix_mute.xpm index 3c917d8..b42e2af 100644 --- a/hdspmixer/pixmaps/matrix_mute.xpm +++ b/hdspmixer/pixmaps/matrix_mute.xpm @@ -1,40 +1,17 @@ /* XPM */ -char * matrix_mute_xpm[] = { -"32 12 25 1", +char const * matrix_mute_xpm[] = { +"32 12 2 1", " c None", -". c #C5C5BD", -"+ c #D5D5CD", -"@ c #94948B", -"# c #7B837B", -"$ c #B35A00", -"% c #DE8C00", -"& c #FFC128", -"* c #CC9900", -"= c #700909", -"- c #5A625A", -"; c #ACACA4", -"> c #394139", -", c #B4B4AC", -"' c #4A4141", -") c #872100", -"! c #414A41", -"~ c #4A4A41", -"{ c #CC6600", -"] c #7B7B7B", -"^ c #BDBDB4", -"/ c #736A62", -"( c #626A62", -"_ c #6A6A62", -": c #62625A", -".+............................@#", -".$%&*************************=-#", -";$%%%%%%%%%%%%%%%%%%%%%%%%%%%=>#", -",$%%%%%%%%%%%%%%%%%%%%%%%%%%%='#", -";$%%%%%%%%%%%%%%%%%%%%%%%%%%%)!#", -",$%*%%%%%%%%%%%%%%%%%%%%%%%%%)~#", -";$%%%%%%%%%%%%%%%%%%%%%%%%%%%=~#", -",$$%%%%%%%%%%%%%%%%%%%%%%%%%%)~#", -";$%*%%%%%%%%%%%%%%%%%%%%%%%%%=~#", -",$%$%%%%%%%%%%%%%%%%%%%%%%%%$)'#", -";***************************{*~]", -"^@/(_((((((((((((((((((((((_:-~#"}; +". c #E66840", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_white.xpm b/hdspmixer/pixmaps/matrix_white.xpm index c741b5b..4ac57f0 100644 --- a/hdspmixer/pixmaps/matrix_white.xpm +++ b/hdspmixer/pixmaps/matrix_white.xpm @@ -1,272 +1,17 @@ /* XPM */ -char * matrix_white_xpm[] = { -"32 12 257 2", -" c None", -". c #000000", -"+ c #080808", -"@ c #080810", -"# c #001008", -"$ c #101010", -"% c #181010", -"& c #002010", -"* c #101818", -"= c #181818", -"- c #002918", -"; c #202018", -"> c #003118", -", c #202020", -"' c #202029", -") c #292020", -"! c #202920", -"~ c #292920", -"{ c #292929", -"] c #004120", -"^ c #293131", -"/ c #313131", -"( c #104A29", -"_ c #393939", -": c #394139", -"< c #414141", -"[ c #20524A", -"} c #4A4141", -"| c #414A41", -"1 c #4A4A41", -"2 c #4A4A4A", -"3 c #524A41", -"4 c #4A524A", -"5 c #525252", -"6 c #525A52", -"7 c #5A5A52", -"8 c #625A4A", -"9 c #317B20", -"0 c #5A625A", -"a c #62625A", -"b c #626A62", -"c c #6A6A62", -"d c #6A6A6A", -"e c #736A62", -"f c #737373", -"g c #7B736A", -"h c #737B73", -"i c #737B7B", -"j c #7B7B73", -"k c #7B7B7B", -"l c #7B8373", -"m c #7B837B", -"n c #83837B", -"o c #838383", -"p c #838B83", -"q c #8B8B83", -"r c #8B8B8B", -"s c #8B948B", -"t c #94948B", -"u c #949494", -"v c #949C94", -"w c #949C9C", -"x c #9C9C94", -"y c #9C9C9C", -"z c #9CA49C", -"A c #9CA4A4", -"B c #A4A49C", -"C c #A4A4A4", -"D c #A4ACA4", -"E c #ACACA4", -"F c #ACACAC", -"G c #B4B4AC", -"H c #BDBDB4", -"I c #C5C5BD", -"J c #CDCDCD", -"K c #D5D5CD", -"L c #DEDED5", -"M c #DEE6DE", -"N c #E6E6E6", -"O c #EEEEEE", -"P c #F6EEEE", -"Q c #F6F6F6", -"R c #F6FFFF", -"S c #FFFFFF", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0099FF", -"p+ c #00CCFF", -"q+ c #00FFFF", -"r+ c #3300FF", -"s+ c #3333FF", -"t+ c #3366FF", -"u+ c #3399FF", -"v+ c #33CCFF", -"w+ c #33FFFF", -"x+ c #6600FF", -"y+ c #6633FF", -"z+ c #6666FF", -"A+ c #6699FF", -"B+ c #66CCFF", -"C+ c #66FFFF", -"D+ c #9900FF", -"E+ c #9933FF", -"F+ c #9966FF", -"G+ c #9999FF", -"H+ c #99CCFF", -"I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I t m ", -"I N R S S S S S S S S S S S S S S S S S S S S S S S S S S S 0 m ", -"E L Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R Q O : m ", -"G L P O O O O O O O O O O O O O O O O O O O O O O O O O O L } m ", -"E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L | m ", -"G L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m ", -"E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m ", -"G L Q O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m ", -"E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m ", -"G L P O O P P P P P P P P P P P P P P P P P P P P P P P O M } m ", -"E L J L L L L L L L L L L L L L L L L L L L L L L L L M J E 1 k ", -"H t e b c b b b b b b b b b b b b b b b b b b b b b b c a 0 1 m "}; +char const * matrix_white_xpm[] = { +"32 12 2 1", +" c None", +". c #FFFFFF", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/matrix_yellow.xpm b/hdspmixer/pixmaps/matrix_yellow.xpm index c4ab7f7..d587c0f 100644 --- a/hdspmixer/pixmaps/matrix_yellow.xpm +++ b/hdspmixer/pixmaps/matrix_yellow.xpm @@ -1,272 +1,17 @@ /* XPM */ -char * matrix_yellow_xpm[] = { -"32 12 257 2", -" c None", -". c #000000", -"+ c #080000", -"@ c #080808", -"# c #080810", -"$ c #001008", -"% c #101010", -"& c #181010", -"* c #002010", -"= c #101818", -"- c #181818", -"; c #201818", -"> c #002918", -", c #202018", -"' c #003118", -") c #202020", -"! c #202029", -"~ c #292020", -"{ c #202920", -"] c #392020", -"^ c #292920", -"/ c #292929", -"( c #004120", -"_ c #293131", -": c #412920", -"< c #313131", -"[ c #104A29", -"} c #393939", -"| c #394139", -"1 c #414141", -"2 c #20524A", -"3 c #414152", -"4 c #4A4141", -"5 c #414A41", -"6 c #4A4A41", -"7 c #4A4A4A", -"8 c #524A41", -"9 c #4A524A", -"0 c #525252", -"a c #734A29", -"b c #525A52", -"c c #5A5A52", -"d c #625A4A", -"e c #317B20", -"f c #5A625A", -"g c #62625A", -"h c #626A62", -"i c #6A6A62", -"j c #6A6A6A", -"k c #736A62", -"l c #737373", -"m c #7B736A", -"n c #737383", -"o c #9C7329", -"p c #737B73", -"q c #737B7B", -"r c #7B7B73", -"s c #7B7B7B", -"t c #AC6A5A", -"u c #7B8373", -"v c #7B837B", -"w c #83837B", -"x c #838383", -"y c #838B83", -"z c #8B8B83", -"A c #8B8B8B", -"B c #8B948B", -"C c #94948B", -"D c #949494", -"E c #949C94", -"F c #949C9C", -"G c #9C9C94", -"H c #9C9C9C", -"I c #9CA49C", -"J c #9CA4A4", -"K c #A4A49C", -"L c #A4A4A4", -"M c #C5A45A", -"N c #A4ACA4", -"O c #ACACA4", -"P c #ACACAC", -"Q c #B4B4AC", -"R c #C5B48B", -"S c #BDBDB4", -"T c #C5C5BD", -"U c #CDCDCD", -"V c #D5D5CD", -"W c #F6CDCD", -"X c #DEDED5", -"Y c #DEE6DE", -"Z c #E6E6E6", -"` c #EEEEEE", -" . c #F6EEEE", -".. c #F6F6F6", -"+. c #F6FFFF", -"@. c #FFFFFF", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #52524A", -"p+ c #524A52", -"q+ c #4A4A4A", -"r+ c #625A4A", -"s+ c #00005A", -"t+ c #311800", -"u+ c #291800", -"v+ c #412000", -"w+ c #311800", -"x+ c #311800", -"y+ c #311800", -"z+ c #412000", -"A+ c #4A2900", -"B+ c #000010", -"C+ c #4A4100", -"D+ c #4A4141", -"E+ c #4A4141", -"F+ c #292041", -"G+ c #8B8B29", -"H+ c #8B8B8B", -"T V T T T T T T T T T T T T T T T T T T T T T T T T T T T T C v ", -"T _+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+f v ", -"O G._+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+G.| v ", -"Q G./+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.4 v ", -"O G./+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.5 v ", -"Q G._+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.6 v ", -"O G./+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.6 v ", -"Q A._+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+_+G.6 v ", -"O G./+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+/+/+G.6 v ", -"Q A./+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+_+/+4 v ", -"O G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.A.G.6 s ", -"S C k h i h h h h h h h h h h h h h h h h h h h h h h i g f 6 v "}; +char const * matrix_yellow_xpm[] = { +"32 12 2 1", +" c None", +". c #FFFB7C", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................", +"................................"}; diff --git a/hdspmixer/pixmaps/monitor.xpm b/hdspmixer/pixmaps/monitor.xpm index 4d84ef6..96b523e 100644 --- a/hdspmixer/pixmaps/monitor.xpm +++ b/hdspmixer/pixmaps/monitor.xpm @@ -1,513 +1,406 @@ /* XPM */ -char * monitor_xpm[] = { -"76 253 257 2", -" c None", -". c #D1E0E5", -"+ c #E7F6F9", -"@ c #F2FFFF", -"# c #FBFFFF", +char const * monitor_xpm[] = { +"76 253 150 2", +" c #595966", +". c #51515B", +"+ c #3D3D42", +"@ c #717187", +"# c #53535E", "$ c #FFFFFF", -"% c #C4CACB", -"& c #C7D5D9", -"* c #BECDD2", -"= c #B8C5C9", -"- c #AEBDC1", -"; c #B2BDC2", -"> c #B5B6B6", -", c #A9B5B9", -"' c #A2ADB2", -") c #A1ACAE", -"! c #AAAAAA", -"~ c #A6A6A6", -"{ c #A0A0A0", -"] c #9CA5A9", -"^ c #9F9FA0", -"/ c #939DA1", -"( c #A0A09F", -"_ c #9FA09F", -": c #A09F9F", -"< c #90928F", -"[ c #949A9B", -"} c #9B9C9B", -"| c #9D9E9D", -"1 c #999A99", -"2 c #969896", -"3 c #919391", -"4 c #959795", -"5 c #929592", -"6 c #869194", -"7 c #8E999C", -"8 c #8C969A", -"9 c #8A9395", -"0 c #848E91", -"a c #8C908B", -"b c #8E918E", -"c c #8C908C", -"d c #8D908D", -"e c #888B88", -"f c #8D8F8D", -"g c #8C8F8C", -"h c #8B8F8C", -"i c #8C8F8B", -"j c #898D89", -"k c #8B8E8B", -"l c #8A8E8A", -"m c #8A8D8A", -"n c #898C89", -"o c #898D89", -"p c #888C88", -"q c #848B8B", -"r c #888C87", -"s c #838884", -"t c #878C87", -"u c #858A86", -"v c #868B86", -"w c #878B87", -"x c #868A86", -"y c #858A85", -"z c #858985", -"A c #848984", -"B c #848883", -"C c #808880", -"D c #828882", -"E c #838883", -"F c #828686", -"G c #818782", -"H c #838783", -"I c #828782", -"J c #808680", -"K c #818681", -"L c #818581", -"M c #808580", -"N c #778082", -"O c #7E898B", -"P c #7D8689", -"Q c #7A8386", -"R c #7F8580", -"S c #D170D1", -"T c #C54CC5", -"U c #A837A8", -"V c #902F90", -"W c #757E81", -"X c #80887F", -"Y c #80857F", -"Z c #7F887F", -"` c #7D847D", -" . c #7F847F", -".. c #7E847E", -"+. c #7E827E", -"@. c #7E837E", -"#. c #7D827D", -"$. c #7D837D", -"%. c #7C827C", -"&. c #7B827C", -"*. c #7C817B", -"=. c #7A817A", -"-. c #7A817A", -";. c #7B817B", -">. c #7A807A", -",. c #798079", -"'. c #708070", -"). c #6E716E", -"!. c #717678", -"~. c #7A7F7A", -"{. c #797F79", -"]. c #787F78", -"^. c #727B7D", -"/. c #777E78", -"(. c #787E77", -"_. c #747C73", -":. c #767D75", -"<. c #767E76", -"[. c #777E77", -"}. c #777D77", -"|. c #767D76", -"1. c #747C74", -"2. c #757C75", -"3. c #757B75", -"4. c #747B74", -"5. c #737B74", -"6. c #747B73", -"7. c #727972", -"8. c #737B73", -"9. c #717971", -"0. c #707870", -"a. c #6D7679", -"b. c #6C7274", -"c. c #686E71", -"d. c #70786F", -"e. c #707060", -"f. c #616669", -"g. c #696D6A", -"h. c #6D6E6D", -"i. c #6F6F6F", -"j. c #646B6D", -"k. c #666966", -"l. c #626562", -"m. c #5C6365", -"n. c #595F61", -"o. c #5F685F", -"p. c #5B605B", -"q. c #5E615E", -"r. c #506050", -"s. c #494F51", -"t. c #545A5C", -"u. c #5A5C5A", -"v. c #5A5D5A", -"w. c #555A55", -"x. c #565956", -"y. c #575A57", -"z. c #555855", -"A. c #535654", -"B. c #545754", -"C. c #525552", -"D. c #535653", -"E. c #515451", -"F. c #515251", -"G. c #505350", -"H. c #4D5254", -"I. c #50534F", -"J. c #50584F", -"K. c #4F584F", -"L. c #4C504B", -"M. c #4F544F", -"N. c #4D524D", -"O. c #4F524F", -"P. c #4E514E", -"Q. c #4F504F", -"R. c #4D504D", -"S. c #4B504B", -"T. c #405040", -"U. c #464A4A", -"V. c #494E4E", -"W. c #4D4E4D", -"X. c #4C4F4C", -"Y. c #494E49", -"Z. c #4B4F4B", -"`. c #4A4E4A", -" + c #4A4D4A", -".+ c #494C49", -"++ c #494A49", -"@+ c #484B48", -"#+ c #444843", -"$+ c #474C47", -"%+ c #464A45", -"&+ c #474A47", -"*+ c #464946", -"=+ c #454A45", -"-+ c #454945", -";+ c #424842", -">+ c #434645", -",+ c #454645", -"'+ c #444744", -")+ c #414641", -"!+ c #434743", -"~+ c #424542", -"{+ c #414441", -"]+ c #404340", -"^+ c #3E4142", -"/+ c #6B236B", -"(+ c #531B53", -"_+ c #4D194D", -":+ c #471747", -"<+ c #3C3E40", -"[+ c #40423F", -"}+ c #40483F", -"|+ c #3B403B", -"1+ c #3F443F", -"2+ c #3E413E", -"3+ c #3F423F", -"4+ c #3D413D", -"5+ c #1E2120", -"6+ c #2D3030", -"7+ c #363A39", -"8+ c #393B39", -"9+ c #3E3F3E", -"0+ c #3C3F3C", -"a+ c #393D39", -"b+ c #3B3F3B", -"c+ c #373C37", -"d+ c #363A36", -"e+ c #303F30", -"f+ c #333434", -"g+ c #333433", -"h+ c #303730", -"i+ c #242728", -"j+ c #2A2C2D", -"k+ c #2F2F2F", -"l+ c #212E2E", -"m+ c #222425", -"n+ c #202720", -"o+ c #3B143B", -"p+ c #0F1010", -"q+ c #1B1C19", -"r+ c #121212", -"s+ c #0F1510", -"t+ c #170817", -"u+ c #100F0F", -"v+ c #07090A", -"w+ c #0A0A0A", -"x+ c #0D0D0D", -"y+ c #0E0E0E", -"z+ c #0F0F0F", -"A+ c #0B040B", -"B+ c #01070E", -"C+ c #040404", -"D+ c #050606", -"E+ c #070707", -"F+ c #060606", -"G+ c #030303", -"H+ c #000000", -"}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+n+", -"d.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.k+", -"( ( ( ( ( ( ( ( ( ( ( ( ( ( : : : : ( ( : : : : : : : : : : : : : : : : : : ( ( ( ( ( : : : : : : : : : : : : : : ^ _ _ _ _ ^ ^ : ^ ^ ^ ^ : { { { : i.F+", -"( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ { { : i.F+", -"( ^ Z Q.k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+k+k+k+k+k+k+6+k+k+k+k+o.^ { { : i.F+", -"( ^ Z Q.K.K.Q.Q.}+J.T.P.K.1+Q.Q.Q.T.)+J.T.W.K.)+Q.Q.Q.T.}+K.T.W.K.}+Q.Q.Q.T.)+K.T.Q.K.}+Q.Q.J.T.Q.K.1+Q.Q.W.T.}+}+T.T.T.T.T.K.T.}+R.T.Q.}+}+{ { { : i.F+", -"( ^ Z Q.).k.).l.I.y.l.v.A.k.p.l.q.y.q.q.q.q.F.l.p.l.q.k.z.p.k.k.q.l.).k.q.q.p.y.k.k.k.q.k.q.p.k.v.l.q.q.).q.k.l.q.l.q.D.k.k.q.l.l.u.h.E.P.~+{ ( ( : i.F+", -"( ^ Z Q.Z.w.L.E.R.B.B.S.N. +x.D.P.P.$+w.#+G.R.-+ +Y.&+=+N.M.Y.u.G.C.R.I.E.z.N.*+N.A.G.X..+z.w.G.@+$+X.A.G.&+{+M.$+L.>+P. +M.D.*+Y.w.X.A.{+d+_ ( ^ ^ i.F+", -"^ ^ Z Q.q.@+0+>+1+E.>+4+1+3+R.`..+N.$+=+)+C..+P.]+*+ +-+S.a+2+X.P.]+3+4+2+w.;+a+Y.]+'+2+O.-+ +>+4+E.=+-+*+C.$+$+N. +{+P. +Y.M.K.E.|+!+{+&+g+_ ^ ^ : h.F+", -"_ ^ Z P.y.$+Y.{+-+2+4+M.B.)+P.$ $ $ {+]+X.$ $ $ E.X.A.~+S.E.S.>+E.J.Q..+@+E.C.J.$ $ *+C.=+$ =+B.`.A.~+S.E.S.!+E.O.!+N.&+P.$+N.E.a+E.R.#+!+~+_ ^ _ ^ i.F+", -"_ _ Z Q.q.B.I.P.z.P.y.0+-+R.C.$ $ $ 3+{+&+$ $ $ N.~+{+P.2+b+E.&+J.E.N. +N.7+=+)+N.c+-+*+$ $ =+%+)+{+P.2+b+E.&+Z.'+Y.!+R. +$+2+$+=+4+*+ +>+9+^ : ^ ^ i.C+", -": ^ Z Q.l.N.E.2+)+X.P.Y.N.a+X.$ $ $ $ &+$ $ $ $ )+2+$ $ $ $ G.P.$ $ $ $ N.I.=+$+$ $ d+$ $ $ $ ~+3+$ $ $ $ G.P.$ $ $ $ X. +$+)+Y.w.@+!+'+~+[+: | ^ : i.F+", -": ^ Z Q.p.@+@+D.M.P.d+@+M.G.x.$ $ $ $ X.$ $ $ $ b+$ $ 3+#+$ $ +$ $ $ $ $ $ C.N.$ $ C.>+$ $ q.M.$ $ 3+#+$ $ +$ $ Y..+&+{+#+;+2+$+-+$+#+*+g+: : : | i.F+", -"^ | Z Q.w.!+B.>+N.'+ +S.=+$+]+$ $ E.$ {+$ {+$ $ $+$ $ X.1+$ $ z.$ $ O..+$ $ E.E.$ $ -+C.$ $ $+B.$ $ X.1+$ $ B.$ $ ~+B. +Z.$+$+b+)+!+`.@+*+,+: ^ | ^ i.F+", -"_ | Z Q.q.{+*+O.M.@+ +y.M.-+.+$ $ )+$ $ $ E.$ $ E.$ $ #+L.$ $ L.$ $ P. +$ $ =+)+$ $ d+&+$ $ q.S.$ $ ;+S.$ $ Z.$ $ Y.*+8+)+-+`.4+M.=+D.N.0+8+^ : | ^ h.F+", -": | Z Q.O.`. +M.v.&+Y.E.N.~+X.$ $ )+$ $ $ +$ $ x.$ $ @+$+$ $ +$ $ q. +$ $ =+%+$ $ -+]+$ $ $+)+$ $ $+%+$ $ +$ $ I.1+X.C.w.=+M.2+)+N.y.8+0+: | ^ ^ i.F+", -": ^ R Q.X.Y.]+A.'+P.>+Y.X.*+&+$ $ !+#+$ b+`.$ $ ]+X.$ $ $ $ `.b+$ $ L. +$ $ C.N.$ $ q.~+O.$ $ %+Z.$ $ $ $ `.a+$ $ Y.!+P.Y.Y.$+$+a+{+>+ +~+2+^ | | ^ i.F+", -"^ | +.R.l.M.w.&+$+@+]+$+-+$+{+'+4+2+M.B.1+P.;+2+#+D.=+P.@+#+Y.!+P.C.P.A.z.C.Z.)+w.!+Y.E.@+@+A.A.O.R.a+C.X.P.]+M.O.)+`.E.P.)+N.;+N.!+*+P.~+2+| ^ : | i.F+", -"| ^ +.W.E.E.#+X.=+$+v.;+N.O..+S..+b+C.N.$+ +X.>+x.2+X.$+$+Z.P.A.N.O.*+Z.-+G.$+$+c+{+&+X.2+M.$+C.P.!+$+3+0+X.A.1+)+)+]+G..+$+0+P.P.2+1+=+O.j+| | ^ ^ h.F+", -"| ^ Z K.C.*+a+z.v.N.$+$+N.$+O.*+.+Y.4+c+C.R.R.!+0+'+3+3+Y.Y.)+3+)+G.@+.+A.&+=+#+'+!+ +.+G.@+2+*+.+N.Y.>+-+&+-+$+a+S..+@+c+$+-+*+Y.4+M.L.9+]+| ^ ^ | i.F+", -"| | Z K.E.$+y.P.@+*+Z.$+)+~+&+'+{+R.=+S.$+M.`.A.!+P.D.R.)+)+-+!+$+X.*+ +R.$+=+M.'+N.M.@+9+]+!+C.'+M.p.@+R.E.Y.Y.1+&+]+-+O.`.S.1+3+|+=+$+[+{+^ | | | i.F+", -"| : Z K.G.O.(+_+:+:+:+:+:+:+:+:+:+_+U M.=+ +`.G.q.0+!+R.$+;+N.Y.0+@+O.M.=+#+Y.N.$+Y.u.*+ + +*+O.$+#+-+8+3+ +R.;+M.-+Y.'+$+M.P.P.M.#+I.I.2+,+| | ^ | i.F+", -"| | Z Q.P.X.V V V V V V V V V V V V :+#+1+0+!+&+2+]+!+Y.Y.1+$+=+G.R.3+E.;+-+=+N.X.B.Y. +'+R.G.E.N.v.Y.2+&+4+@+a+;+O..+M.E.S.N.*+Z.Y.;+Y.,+[+| : | | i.F+", -"| | Z K.P.C./+V S T T T T T T T T o+t+M.u.X.-+P.~+C.'+w.#+d+$+a+&+X.3+{+O.#+a+M.%+#+E.p.~+0+ +R.E.-+b+*+&+P.Z.)+1+$+`.D.G.$+%+w.#+|+M.)+*+k+| | | | i.F+", -"| | Z Q.p.`./+V V V V V V V V V V o+t+)+@+1+#+D..+$ $ $ $ $ Y.G.$ %+$+D.N..+$ G.~+#+S.X.$ +]+&+]+N.*+&+x.X.M.M.N.Y.!+N.X.)+N.=+-+)+=+4+ +0+| | : } i.F+", -"| | Z K.B.!+/+V V V V V V V V V V o+t+)+-+&+*+&+4+E.]+v.N.$ Y.Y.$ $+a+.+8+X.$ $ ]+~+ +$ $ N.0+P.@+-+'+'+N.R.`.N.$+4+P.A.Z.)+$+E.N.#+|+R.]+++| | | } i.F+", -"| | Z Q.D.$+/+V V V V V V V V V V :+t+Y.&+-+R.>+G.a+]+#+$ E.1+=+$ w.%+!+]+@+$ $ @+C.8+$ $ a+Y.-+1+~+M..+$+E.P.1+D.Z.D.3+=+B.Y.M.M.z.y.X.,+8+: } ^ | i.C+", -"| } Z Q.L.P./+V T V V V V V V V V :+t+)+Y.&+>+!+~+P.G.$ $ a+Y.0+$ 2+$+D.P..+$ @+$ &+$ X.$ c+N.u.B.$+N.`.N.8+&+;+N.a+&+R.A.Z.-+z.N.M.=+`.E.8+} | | } i.F+", -"| } Z Q.C.w./+V V V V V V V V V V o+t+Y.G.0+2+'+*+E.&+$ $+E.P.&+$ $+a+.+8+R.$ A.$ ~+$ @+$ *+X.2+X..+R. +O.O.&+$+B.Y.{+@+&+)+S.$+b+B.C.!+'+[+| | | | i.C+", -"| | Z Q.v..+/+/+V V V V V V V V V :+t+Y.$+E.!+.+@+a+$ P.S.a+~+`.$ y.%+>+]+~+$ ]+$ $+$ 1+$ $+$+{+R.d+R.`.P.!+D.M.Y.N.'+P.R.N.w.#+N.=+1+S.8+8+| } | } i.F+", -"} | R P.G.G./+V T V V V V V V V V o+t+-+`.@+G. +C.$ $ $ $ $ L.~+$ $ $ $ 2+x.$ P.Y.$ S.Y.$ 0+1+{+C.!+O.v.$+X.M.$+Y.1+@+~+)+1+K.=+)+2+P. +8+++| | } | i.F+", -"| } Z Q.A.*+/+V /+V V V V V V V /+:+t+1+-+&+O.$+P..+4+*+$+;+ +.+X.N.3+D.*+X.)+M.z.A.*+.+4+N.!+*+-+N.#+E.*+ +N.$+a+3+&+B.#+M.S.S.4+2+4+&+{+8+| } | } i.F+", -"| } Z Q.p.`./+o+t+t+A+A+A+A+A+A+t+A+t+#+-+]+C.G.{+O.8+M.!+S.)+8+u.@+D.N.O.4+N.)+1+~+E.&+X.B.#+!+O.2+{+~+-+'+'+Z.=+!+@+>+`.|+#+a+w.1+z.~+]+0+} | } } i.F+", -"} } Z Q.y.N.t+H+H+H+H+H+H+H+H+H+H+H+H+)+Y.=+&+~+D.-+*+1+=+)+S.R.X.|+.+a+O.-+$+;+D.S.G.C.~+b+]+b+E.)+P..+O.Y.X.M.|+$+D.-+'+N.1+4+D.w.~+-+]+[+} } } | i.F+", -"} } Z Q.x.C.Y.=+S.O.'+$+Y.~+B.*+C.=+M.$+2+1+Z.O.X.a+R.-+D.C.1+)+G.2+@+c+*+@+N.$+E.2+$+C.0+G.{+O.B.$+{+-+ +]+&+Y.O.=+O..+N.E.a+N.|+D. +v.@+2+| } } } i.F+", -"} } Z Q.w.Z.%+G.N.)+N.)+@+d+*+$+@+b+#+2+Z.x. +&+E.`.2+N.=+M.]+`.~+C.2+&+.+M.$+S.{+!+`.*+E.X.M.2+-+S.y.X.R.O.-+B.Y.c+w.N.0+#+$+!+Y.@+`.R.8+,+} } | } i.F+", -"} } Z Q.x.%+8+Z.2+B.S.K.1+P.&+.+E.d+;+;+S.D.Y. +.+.+z.R.M.4+Y..+1+&+E.b+E.`.=+a+$+@+b+*+'+*+&+~+C.M.)+G.a+G.-+S.)+8+y.&+ +4+Y.3+&+M.C.Y.{+9+} } } } i.C+", -"} } Z R.q.1+!+~+)+E.Y.$+a+N.P.]+{+$+w.f+!+ +E.X.~+[+-+~+=+a+P.Y.S.G..+X.@+)+=+#+@+$+`.0+~+G.-+G.'+#+'+.+>+!+Y.Y.;+R.b+!+E.Z.M.2+O.;+1+)+W.8+} } } } i.F+", -"} } Z Q.l.)+R. +R.'+D.Y.S.C.{+X.X.)+M.M.3+{+)+*+.+.+.+$+a+=+$+#+.+&+'+u.{+{+N.)+b+2+M.&+d+3+3+C.b+;+!+3+'+2+)+|+2+a+4+*+)+c+z.p.P.$+$+P.{+[+} } } } i.C+", -"} } Z Q.v.Z.@+{+)+ +J.D.)+)+!+{+`.*+N.Z.M.P.&+~+Z.>+@+Y.$+w.M.=+X.X.G. +@+S.|+M.|+Y.=+z. +X. +0+M.S.M..+R.v.-+$+$+!+N.=+#+L.M.-+-+L.c+N.{+d+} } } } i.F+", -"} } Z Q.w.)+~+Y.#+=+1+E.;+#+]+-+~+N.S.Y.b+.+b+G.*+ +-+z.S.N.E.)+|+~+4+E.!+N.Y.N.$+ +G.2+.+z.*+G.D.a+M.2+B. +v.N.S.y.Z.$+!+#+a+1+Y.S.;+I.{+9+} } } } i.C+", -"} 1 Z P.k.4+(+_+:+:+:+:+:+:+:+:+:+_+U Y.0+M.#+@+.+E.S.O.C.$+=+S.4+A.3+@+D.Y.=+2+Z.&+-+-+ +G.'+~+#+Y.8+~+.+&+N.|+N.P.&+'+|+B.`.C.E.w.E.@+b+8+} } } } i.F+", -"} } R P.l.v.V V V V V V V V V V V V :+1+3+]+]+.+&+q.b+!+N.$+)+N.Y.0+@+G.O.=+#+Y.E.1+z.X.2+.+R.0+Z.N.p.R.@+~+S.$+S.)+b+'+M.`.b+4+y.$+b+)+X.g+} 1 } } i.C+", -"} } Z Q.x.C./+V S T T T T T T T T o+t+|+4+&+@+Y..+2+3+!+Y.Y.1+$+=+G.R.3+E.;+=+2+z.'+!+D.O.~+@+P.0+X.Y.@+.+a+D.#+#+4+~+`.P.L. +N.Z.#+$+)+>+d+1 1 } } i.F+", -"1 1 X Q.G.=+/+V V V V V V V V V V o+t+)+D.X.O.C.~+$ +O.$+=+y.$ &+$ z.C.&+a+Y.$+-+E.b+P.0+B.Y.v.M.R.y.S.Y.2+x.Y.M.O.x.C..+#+$+C.)+N.N.!+0+8+} 1 } 1 i.F+", -"1 } Z W.l.&+/+V V V V V V V V V V o+t+#+!+)+.+3+2+$ $ 0+M.1+$ $ O..+ +G.2+Y.C.!+N.`.{+ +Y.E.E.'+1+2+@+ +C.X. +!+;+x.-+*+Y.4+-+;+#+y.O.$+2+9+} 1 1 1 i.F+", -"1 1 Z Q.p.Z./+V V V V V V V V V V :+t+w.D. + + +*+$ $ 2+)+Y.$ $ R.$ +P.$ &+S.$ b+C.]+]+u.)+ +&+C.$+)+G..+.+-+Y.;+-+.+.+'+Y.S.$+-+-+ +R.d+{+1 } 1 1 i.F+", -"1 1 Z Q.v.)+/+V T V V V V V V V V :+t+Y.a+.+R.p.R.$ ~+$ S.$ P.$ +$ X.Y.*+$ $ w.z.@+{+-+E.Y.Z.]+v.d+M.R.R.-+Z.=+!+ +z.&+C.!+Y.-+d+M.O.Y.0+8+1 1 1 1 i.F+", -"1 1 R Q.u.C./+V V V V V V V V V V o+t+C.w.~+*+*+X.$ {+$ $+$ {+$ '+$ R.Y.X.$ $ $+)+&+8+'+ +-+D.&+-+.+&+~+S.&+{+S.$+!+~+@+E.;+-+N.Z.*+.+3+3+g+1 1 1 1 i.F+", -"1 1 .Q.R.!+/+/+V V V V V V V V V :+t+=+=+1+G.R.~+$ ]+$ $+$ 3+$ *+$ `.2+E.$ $ =+b+{+!+X.R.1+1+O.!+R.N.~+N.]+)+=+;+Y.*+]+P.)+1+;+Y.c+]+&+]+9+1 1 1 1 i.F+", -"1 1 +.Q.l.X./+V T V V V V V V V V o+t+N.g+$+G.M.x.$ P.Y.$ Z..+$ @+$ *+S.$ B.$+$ E.S.2+N.]+~+P.M.@+ +.+0+P.N.`.M.2+D.$+{+-+E.=+M.S.~+!+0+.+8+1 1 1 1 i.F+", -"1 1 +.Q.v.)+/+V /+V V V V V V V /+:+t+D.Z.E.]+`. +2+=+M.a+G.Y.*+b+.+.+8+-+#+=+=+1+E.E.{+P.8+P.'+P.!+a+y.*+C.R.G.0+N.!+{+w.S.a+#+Y.C.@+.+[+8+1 1 1 1 i.F+", -"1 1 +.W.q.>+/+o+t+t+A+A+A+A+A+A+t+A+t+;+4+2+1+N.`. +R.Y.=+;+C..+M.~+*+ +'+P.a+2+Z.P.)+{+2+2+z.'+b+Z.~+-+2+G.-+Y.)+|+E.&+~+M.=+Y.C.)+{+R.8+f+1 1 2 1 i.F+", -"1 2 +.Q.E.Y.t+H+H+H+H+H+H+H+H+H+H+H+H+y.b+~+ +*+*+)+D.*+=+2+'+~+R.R.X.|+ +b+M.!+&+!+z.S.O.C.!+b+)+b+G.{+P. +G.Y.Y.N.4+.+#+=+E.$+$+M.`.{+*+9+2 1 1 2 i.F+", -"1 1 +.W.v.@+`.E.*+`..+.+x. +*+O.2+E.~+)+N.E.X.E.P.8+P.!+X.!+`.3+!+X.G.]+~+]+!+-+4+`.X.X.3+2+R.2+0+E.*+G.&+0+P.X.X..+E.0+D.;+N.E.a+M.0+C.'+ +1 1 1 1 h.F+", -"1 2 +.Q.E.b+'+&+Y.'+@+`.=+$+E.*+O.E.=+b+2+{+E.!+P.p.@+S.N.$+Y.]+@+~+'+E.X.X.|+4+b+*+@+#+P.Y.C.y.D.S.~+0+R.z.-+M.|+N.~+@+.+1+)+S.$+8+Q.C.g+~+1 2 1 2 i.F+", -"1 1 +.W.C..+)+*+@+O.$+P.$+|+*+Y.'+S.$+Y.N.]+C.*+X.#+E.y.D.#+$+4+R.~+*+-+R.-+K.-+Y.X..+0+{+.+A.X.2+#+a+y.)+B.!+#+Y.Y.&+A.Y.d+D.4+$+1+C.Z. +8+1 2 1 2 i.C+", -"2 2 +.Q.B.N.&+A.N.~+X.-+S.$+M.!+`.-+$+1+L.~+O.{+.+Y.C.!+$+$+X.X.3+D.!+O.!+`.4+C.*+0+@+1+A.'+M.'+ +`.*+&+{+X.c+S.Y.X.{+C.@+Y.#+]+)+Y.@+X.*+k+1 2 1 2 i.F+", -"1 2 +.W.A.`.Y.E.N.`.S.d+v.;+~+E.R.a+N.$+L.X..+!+.+X. +&+)+;+*+X.R.R.A.=+3+1+=+=+$+>+%+E.P.)+M.'+.+d+*+*+.+b+-+4+S.w.@+&+M.Y.M.#+M.{+)+I.[+g+2 1 1 2 i.F+", -"2 2 +.Q.B.*+3+x.a+X. +D.S.]+{+M.P.!+c+Y.X.*+.+.+E.~+X.$+=+2+*+X.O. +p.-+>+4+=+N.c+~+3+-+{+ +O.E.y.)+P.@+#+&+%+1+`.b+@+D.G.Y.4+N.=+M.]+X.0+,+1 2 2 2 i.F+", -"2 1 +.W.Q.z.b+.+]+B.3+X.w.`. +&+a+'+=+Y.$+>+Z.O.-+E.X.$+=+M.=+!+~+P.`.$+@+N.D.N.b+]+A.Z.-+!+O. +=+-+L.#+y.y.;+=+$+;+0+P.C.S.D.Y.N.-+G.~+*+0+2 1 2 2 i.F+", -"2 4 +.Q.q.*+(+_+:+:+:+:+:+:+:+:+:+_+U 2+-+3+*+.+*+M.X.O.C.$+=+S.4+A.3+@+D.Y.#+M.X.M.C.$+=+Z.4+A.3+G.X.O.C.$+=+S.4+A.3+&+-+=+N.Y.N.$+3+P.{+k+2 2 2 2 i.F+", -"2 2 +.W.A.y.V V V V V V V V V V V V :+)+`.*+*+$+*+q.b+!+R.$+)+N.Y.0+@+G.O.=+#+q.b+!+N.%+)+N.Y.0+&+q.b+!+R.$+;+P.Y.0+@+O.D.Y.-+#+#+N.'+[+8+g+2 2 2 4 i.C+", -"2 4 +.Q.k.G./+V S T T T T T T T T o+t+1+$+#+]+]+>+2+3+!+ +Y.1+$+=+G.R.3+E.;+=+2+]+!+ +Y.1+Y.=+G.R.2+3+!+Y.Y.1+$+=+G.R.2+M.=+#+;+N.~+.+Z.{+8+2 2 2 4 i.F+", -"2 2 +.W.Q.y./+V V V V V V V V V V o+t+&+#+#+*+R.X.$ $ $ $ -+1+.+a+$+G.a+C.N.w.%+-+@+{+$ '+@+~+#+2+4+M.A.~+N.!+4+#+C.=+P.M.;+-+)+N.C.O.D.O.~+4 4 2 2 i.F+", -"2 4 +.Q.W.2+/+V V V V V V V V V V o+t+;+~+~+&+*+@+$ P. +1+$ C.*+x. +P.P.x.y.L.`.=+`.!+$ O.A.3+x.D.M.G.C.!+D.2+P.{+$+ +2+-+S.#+=+4+I.X. +&+~+2 4 2 4 i.F+", -"4 4 +.Q.X.`./+V V V V V V V V V V :+t+Y.Y.-+b+'+@+$ a+@+y.$ -+@+$ $ X. +a+$ $ $ ~+d+P.$ A.$ $ $ $ 8+&+>+$ $ $+S.=+$ $ &+a+D.C.#+Y.S.=+N.[+,+4 4 2 4 i.C+", -"4 4 +.Q.y.Z./+V T V V V V V V V V :+t+=+1+E.S.C..+$ $ $ $ N.!+$ X.@+$ E.@+$ )+S.$ #+@+$ z.O.2+~+$ Y.-+$ O.X.$ #+$ ~+z.$ )+%+.+=+2+N.#+%+@+9+4 4 4 4 i.F+", -"4 4 +.W.u.-+/+V V V V V V V V V V o+t+2+N.P.#+R.C.$ 0+q.$ Y. +$ $ $ $ P.~+$ |+1+$ 2+#+$ .+X.$ $ $ 4+=+$ -+G.R.)+$ $ $ $ N.]+1+~+O.N.)+#+,+f+4 4 4 4 i.F+", -"4 4 +.Q.E.v./+/+V V V V V V V V V :+t+;+S.=+$+{+E.$ '+M.)+$ !+$ G..+P.E.b+$ S.#+$ P.~+$ O.$ 3+G.$ =+C.$ A.v.$ )+$ -+-+~+C.#+=+)+=+)+L.L.*+g+4 4 4 4 i.F+", -"4 4 +.W.x.G./+V T V V V V V V V V o+t+)+`.@+w.R.E.$ X.$+-+# %+X.$ $ $ -+'+$ $ $ c+~+3+$ ~+$ $ $ $ {+P.@+$ $ &+1+Z.$ $ $ C.S.D.Y.N.-+G.~+*+8+4 4 5 4 h.F+", -"4 4 +.T.W.X./+V /+V V V V V V V /+:+t+C.!+D.3+P.!+E.X.$+=+M.*+~+!+P.`.&+$+$ C.N.b+{+A. +#+~+I.`.*+-+R.'+y.x.!+=+$+!+4+P.-+=+N.Y.N.&+1+P.[+g+5 4 4 4 i.F+", -"4 5 +.Q.l.v./+o+t+t+A+A+A+A+A+A+t+A+t+M.$+M.@+!+M.'+.+Y.b+S.)+@+X.v.G.~+`.$ N.E.#+]+.+2+*+I.~+Z.d+E.N.@+D.!+'+=+$+2+X.A.I.Y.Y.#+#+N.'+2+8+g+4 5 4 4 h.F+", -"4 4 +.W.q.{+t+H+H+H+H+H+H+H+H+H+H+H+H+a+S.'+c+O.u.~+b+)+w.!+4+$+8+$+O.c+E.L.B.-+#+&+{+$+#+$+{+'+4+0+N.C.]+R.~+|+;+E.-+X.*+1+B.;+N.;+.+L.]+0+5 5 4 5 i.F+", -"4 5 +.T.A. +.+O.G.y.C.=+;+$+`.&+.+R.N.N.)+=+S..+P.8+P.4+N.1+)+X.M..+X.`.2+Y..+E.-+{+y.@+E.1+1+P.2+@+8+$+@+P.Y.C.4+@+D.4+C.)+N.C.&+]+,+`.1+$+4 5 4 5 i.D+", -"4 3 +.Q.p.c+w.R.4+w.M.1+B.-+y..+0+N.$+1+N.E.{+W.*+.+'+=+p.$+4+Z.S.G.C..+~+S.!+7+1+'+]+]+7+$+>+-+@+ +D.{+{+{+&+L.>+Y.2+`.{+{+{+~+*+0+~+[+a+0+5 4 4 5 i.D+", -"5 4 +.T.q.Y.E.S.M.C.$+=+S.4+A.3+&+D.Y.#+G.*+Y.E.b+ +d+8+$+-+4+]+M. +.+E.P.{+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+5 5 5 4 i.D+", -"5 5 '.T.v.=+q.0+!+R.$+;+N.Y.0+@+O.M.=+#+b+@+G.X.&+P.]+c+N.#+Y.*+M.G.@+@+-+E.h+s+s+s+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+B+z+z+B+z+z+z+z+z+z+z+y+5 4 5 5 i.D+", -"4 5 '.Q.q.@+2+]+!+Y.Y.1+Y.=+G.R.3+E.;+-+*+b+.+8+*+X.*+D.=+;+$+=+#+R.@+{+P..+T.j k l l l l l l l l l l l l l l l l l l l l l l l l l l l l j 5 4 5 5 i.D+", -"5 5 '.T.B.O.M.R.2+M.4+#+M.y.A.v.2+!+Y.=+-+)+B.&+&+{+&+!+S.S.Z.b+Z.0+E.*+ +'+T.j j j j j j j j j j j j j j j j j l l l l l j j j j j j j j j 5 5 5 5 i.D+", -"5 5 '.T.M.R.E.X.O.C.$+=+S.4+A.3+@+D.Y.;+M.'+{+&+R.z.y.$+N.4+)+R.y.{+.+E.P.R.h+h+h+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+o.5 5 5 3 i.D+", -"5 3 '.T.D.E.p.0+!+R.$+;+N.Y.0+@+G.N.$+#+@+*+*+'+D.I.~+$+N.a+Z.&+Y.@+b+D.*+*+K.K.T.Q.K.}+Q.Q.J.T.Q.K.}+Q.Q.Q.T.}+}+T.T.T.T.T.K.T.}+Q.T.Q.)+}+3 5 3 5 i.D+", -"5 3 '.T.x.S.N.#+A.-+O.y.C. +]+*+'+-+y.N.$+'+N. +'+~+&+#+1+S.-+X.Y.E. +D.!+N.E.S.)+~+$+#+@+`.#+ +X.=+@+C.*+P.E.=+a+2+{+E.~+N.v.$+Z.O.Y.Y.0+0+3 5 5 3 i.D+", -"5 3 '.T.E.S.2+A.!+ +Y.1+$+*+O.X.2+E.)+-+!+`.=+#+C.#+B.3+S.1+'+Y..+E.*+)+y.$+E.1+1+P.2+@+8+&+@+R.Y.C.2+$+D.4+C.)+N.C.&+]+-+`.1+$+$+M.%+P..+]+3 3 3 3 i.D+", -"3 5 '.T.y.S.(+_+:+:+:+:+:+:+:+:+:+_+U b+-+P.y.&+E.E.X.O.C.$+=+S.4+A.3+&+D.Y.#+E.S.M.C.$+%+S.4+D.2+@+D.Y.#+E.X.O.C.$+=+S.4+A.3+&+D.Y.=+%+#+,+3 5 5 3 i.D+", -"3 3 9.T.u.G.V V V V V V V V V V V V :+#+$+D.a+!+3+p.0+!+R.$+)+N.Y.0+@+O.M.=+;+q.0+!+L.$+)+N. +0+&+I.I.=+-+p.0+!+R.$+)+N.Y.0+@+O.M.=+#+l.@+0+3 3 5 3 i.D+", -"3 3 +.W.q.'+/+V S T T T T T T T T o+t+2+S..+@+-+P.2+3+!+ +Y.1+$+=+G.R.2+E.;+-+2+]+!+ +Y.1+$+%+I.R.3+G.)+#+2+3+!+ +Y.1+$+*+O.L.3+G.)+=+d+{+,+< 3 3 3 i.D+", -"3 3 +.T.q.0+/+V V V V V V V V V V o+t+M.]+R.Y.N..+$ ~+ +N.M.w.]+O..+#+.+*+)+S.|+$+E.D.N.$ Z.I.%+E.~+L.$ $ $ $ )+$+`.X.B.2+Y.]+v.-+$ %+I.@+0+3 3 3 3 i.D+", -"3 < +.Q.x.~+/+V V V V V V V V V V o+t+#+!+>+a+O.'+$ P.)+M.Y.b+]+$+ +@+v.&+A.E.Y.B.$+@+I.$ P..+]+Z.$+@+$ !+.+!+$ #+-+]+]+.+0+1+1+$ !+&+Z.2+4+< < 3 < i.D+", -"< < +.Q.q..+/+V V V V V V V V V V :+t+)+3+!+`.x.X.$ '+D.Y.L.1+$ $ -+R.$ $ $ $ 1+2+0+$ $ $ b+L.~+#+4+I.$ +'+2+$ -+'+$ $ *+$+I.$ $ $ Y.Z.I.6+< 3 3 < i.F+", -"3 < +.T.q.`./+V T V V V V V V V V :+t+$+.+u. +c+3+$ ~+b+y.$+# L.G.$ O.'+]+'+$ -+Y.$ !+!+$ [+~+~+-+#+!+$ @+#+Y.$ ;+$ 2+2+$ w.'+-+$ Z.4+3+]+8+3 3 3 < h.D+", -"< < +.Q.A.P./+V V V V V V V V V V o+t+Y.N.]+P.b+R.$ ~+&+$+#+$ 2+D.$ '+&+$ $ $ Y.b+$ )+&+$ @+B.{+!+ +$+$ N.0+P.$ #+$ $ $ $ Y.P.Y.$ N.C.%+b+6+< < < < i.D+", -"< b +.T.x.x./+/+V V V V V V V V V :+t+!+&+.+D.-+ +$ *+N.|+N.$ &+,+$ +$ 0+y.$ b+~+$ 2+#+$ 2+Y.X.C.`.O.$ @+.+I.$ )+$ ~+a+.+1+B.1+$ w.Z. +,+g+< < < < i.D+", -"< < '.T.M. +/+V T V V V V V V V V o+t+1+.+.+~+z.&+$ $ $ $ M.!+$ $ A.@+$ $ $ $ M.4+3+$ $ $ 2+!+@+Y.`.1+$ $ $ $ S.S.-+$ $ $ Y.c+N.$ %+ +$ !+8+< b < < i.F+", -"b < '.Q.q.Y./+V /+V V V V V V V /+:+t+)+~+*+X.$+-+R.O.y.w.E.1+3+v.)+.+&+C.Y.1+M.$+@+,+Z.'+&+ +.+D.#+ +,+c+E.G.Y.)+!+]+D.!+J.M.M.4+4+'+Z.P.8+< < b < h.F+", -"< b '.T.q.!+/+o+t+t+A+A+A+A+A+A+t+A+t+|+!+-+~+$+R.L.Z.#+S.1+!+Y.@+G.*+)+y.@+#+1+%+Y.*+Z.0+X..+R. +P.O.*+@+z.X.)+=+N.N.x.#+S.=+1+S.0+*+I.[+d+< b < b i.F+", -"b b '.T.D. +t+H+H+H+H+H+H+H+H+H+H+H+H+4+)+*+'+E.~+z.=+7+Y.b+=+Z.1+]+R.,+%+M.N.B.Y.$+!+R.P.O.X.v. +4+&+b+*+b+-+E.`.I.E.@+,+D.;+|+M.)+.+8+0+j+b b < b i.F+", -"b b '.T.v.Y.2+z.`.E.O.y.C..+]+*+'+-+y.N.$+-+R. +'+{+*+#+1+S.-+X.Y.E. +D.!+N.C.Z.)+~+&+-+@+Z.,+ +L.%+@+C.*+O.E.=+a+4+{+C.!+N.v.$+S.O..+ +0+0+b b b b i.F+", -"b d '.T.u.!+4+&+>+&+0+ +{+R.{+y.S.|+$+a+4+0+)+~+P.-+)+x.=+y.1+Z.&+!+*+#+C.R.1+Z.#+ +@+O.{+.+!+&+]+L.~+P.]+.+Y.E.)+-+@+R.X.4+C.)+L.]+.+9+L.8+b d b d i.F+", -"b d '.T.N.#+*+!+8+$+Z.1+R.!+&+&+P.G.*+'+1+>+4+'+&+X.a+O.X.&+$+X.3+R.7+-+a+!+>+c+2+!+1+]+d+&+!+'+&+.+C.{+{+]+*+X.~+Y.4+ +{+]+]+{+*+0+~+[+8+|+b b b d i.F+", -"b b '.T.T.T.h+h+e+k+k+h+h+9+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+a d b d i.F+", -"d d '.T.h+s+z+B+s+B+z+y+z+z+z+z+z+z+z+z+z+B+z+z+z+z+z+z+z+z+z+B+z+z+z+z+z+z+z+z+z+B+z+z+y+z+z+u+y+z+z+z+y+z+z+z+z+z+B+z+z+B+z+z+z+z+z+z+z+z+b b d d i.F+", -"d d b b c d c d c c b d d d d d d d d d d d d d d d d b c d d d b d d d d b b b d d d b d d d b d b b b c b d d d d b d b c c d d d b d c d d d b f i.F+", -"d d d d d c b c b d d d d d d d c d c c d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d c d d c d d d d d c c c i.F+", -"d c c d d d d d d d d d d d d d d d c c d d c c c d c c c d d d d c d c d d c d c c a c d d d d d d d d d d d d d d d d c d c c c c d c d d c c f g i.F+", -"c c c c a a c d a c c c i i c d c d c f c c h f c c c c c a d c c c c c d d c d c c f g g c c g f f c a c c g c c c a c c c c c c c c g h c c c g g i.F+", -"a a c a h c c a i f i a d f c a a c g g i c i a h a a a c h a c a i f c a c a a i a g f c i a a a c i h a a h g h h i c a a a a a i a a a i a h h i i.F+", -"a h h a a h a h h h h i i a a h h a h h i i a h c c h c a h h h h i a i a h h g a h h h h a a h a a a h h i h a c h a h h h a h h a h a i h a a h h i.F+", -"i a h a a h h h a i h i h h h a h h i h h h h h a i h i h l a a h i l h h h h h i h h i a h i h a h i a h h h h i i h a h h h h h h h h a h h l i k i.F+", -"i h h h h i i h h h i h l i h i i h i i h i i h i h h h h h k h h h l i h i h h i i h i g i h h h h l h i l h h l h h l i h l h h h h h h i h i h k i.F+", -"l l i k k k l l h k l l i i i h i l h h l h h h i i h h k l l h l l i l l h i i l l i l l l i h h h l l i l h i l i l i i k i k h h k l i l l k k l h.F+", -"l h l i l l l h l h h l l l l l k k l h l l k k l l l h l h l h l h k k l h l h l h k l h l l l l l k l k l l l k l h l l l i l l l h l h k l h l k i.F+", -"k k k l h l k k k l k h l h l l k l k l h l l k k h l k k l l k l k l l l l l k k l k l k l h l h l l l l l h l l l l l h l l l h l k l k l l l h m i.F+", -"l k l l l l k l l l l k l l k k l k l k j h l k k k l l l l l l k k k h k l l l k l l l l k l l k l l l l l k k l l h k k j h k l l l k l k l l l j i.F+", -"l l l l l l l j k l l l l l l k l l l l k l m l l l l j l l l l l j l l l l l l l m k l l l l l l j l l l l l l l l l l l l l l l l l l l l l l l m i.F+", -"l l l l l l j l m j l m j l j l l l l j l l l l l l l l j l l l j l l l l j l l l l k l m l l l j l l j m j j l l l l l l l l l j l l l l l l m j m i.F+", -"m j l j j l j j j j j l j l l l j j j j j j l j l j j j j j l l l j m l l j j j j j j j j l l j j j j l j l j l j l j j j j j j j l j j l j l j j j i.F+", -"j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j l j j j j j j j j l j j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j j j n i.F+", -"j j j j j j j j j p j j j j j j j j j j j j j j j j j j j j l j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j p j j n i.F+", -"j j n j j j j p j p n j n j j n j j j j j j n n n j j j j j j j n j j j j j j j j j j j j j n j j p j j j p j j j j n j n j j j j j j j j j p j j n i.F+", -"p j n p j p j p j p n p n p j j j j p j p n p p n p j p j j p j j j n j j n j p j p j n n p p p n p n r n p n j p n p p p j n j j p p j p n p r j e i.F+", -"p p p p p p p p n p p p n p j r r r n p j p n j n p j n p p p j p n p p p p n p p j p n p p p j n r n n p p n p p r r p p j p p j n p p p n r n n e i.F+", -"p p p p p p p p r n r r r n p p n r p p p r r r r r r p r r r t p p p p p n p p p p p r r r r r r r n r r n p p p p n p p r r p p p p p p p t r p e i.F+", -"p p p p e e w e e e e e p p p r r r r r r r e e e e e r e e e t p p p p p t r r p r r r e e e r e e e e r r t p p t w e e e r r r t p p p p t e e e i.F+", -"p p t t t e w e e r r v t r r r e e e v e w w w w r w e e r e w w v r r p t e r r p r r e e e e r w e w w e r t p p t r w e e e e w p t t e t p r r i.F+", -"t w e p x w w r w w w p r r t w w r w x r v x r e r r e r w e e r t v w e v e e x x v e r v r r e v w w w v p p t v e w w w r v r v x w w e p t v e i.F+", -"t r e p w w w w e x w t w w e v e r v n v e t v w w e t v v x w t t v v v t r v v r x e v v w v x v w r w x v v e t t w v x w e w x r v w v x v t e i.F+", -"w v w w v x r v x x v w w w v v t w v v v v v w w v v v v r v w v e v e v t w r x r v v v e v e x r x r v v t w w w w v x r v v v v t t x r v t t x i.F+", -"w w w v w v v v r x v x v x v v v v w v x v v v v v v v v v v w v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v x v v v v v v v v v x i.F+", -"x v v v v v v v v x v v v v x x v v v x v v x v v x v v v v v v v x v v x v v v x v v v x v x v v v v v v v x x v v v x v x v v v x v v v x x v x x i.F+", -"x v x x x v x x x x v x x v x v x x x x v v v v v x x x x x v v x x v v x v x v v x x v x x v x x v x x v x v x v x v v x v v v v x x x x v v z z x i.F+", -"x v x x x x x v x y v x x y x x v x x x y u y v v v v x y v x y x x x v x y x v x x y x x x y x x x x x x x x x x v x x v x x x x x x x x x y x x z i.F+", -"y y y x v x y y x y y y x x x y x y y x y u y u u x y y x y y y y x y x y y x x y y y y x y x x y y y x x y y x y y x y y y v y x v x x x y y z x z i.F+", -"y x y y y y y y y z z z y z z x y y y y A y y y y z x y y y y z y z y z y z y y y z y y z y y y y y y x z y z y y x y y y y y y x y y z y z z z z z i.F+", -"u y y y y y z z z z z z z y y z y z z z z A u A y y y y z z y y y z y y y y z z y y z y z y y y z z x y y y y z y z z y y y z y y y y x y z z z z z i.F+", -"A s z y y A z z z z z z z z z A z z z y A A y z z y y z y A y y A z z y z y z y y z y z y z y A y y y y y y y z y A y z z y A y z z z y z z z z z z i.F+", -"z A B B A y z B z B z s A A z A A A A z y A s s z z A A A A A z A A A z y A A A z A z A A z A A z z A z y A y z A z A A z A A A A z A A A z A A z z i.F+", -"z B z B B s s s z B z s B A A A A z A z A A z A A A A A z z A A z A A A A A A A A A z z z A A A A A A A A A A A A A A A A A A z A A A z A A A A A B i.F+", -"s s A z B A B s s s B z B A A A s s z s s B s B A A z A B z A A A A A A A A A A A B A A B B s A A A A B A A A A B A B B A A A B B A A A B B B A B B i.F+", -"A s A B B A s B B B B B B B A B A B B s s B A A A A B A B B A A A A A s B B E B A B B A B B A B A A B A B A A B B B A A B A B B B A A B A A B A A B i.F+", -"B s B s A B A B B B B B B B A B D B B E B B B D E s A A A E s A B B s A A B B B D B B B B B A s A A A A B E E A B s s s A B E B B E H s B E s s A H i.F+", -"B D B E D D D D B B H B D B E B D B B I H B A E E B s B s B E D D E B D B B E H z D D A D D E s E s E B D B B D E E B s s B D H B H B H H s E E D H i.F+", -"H H H H H D D H H B H H D H H I I I D I B H E D B D D D B E E D H H H H D D D D D D H D B D E B E E D B D D H H H D D D D D D H H H H H H D E D D H i.F+", -"H I H H H I H H H H H H H I I I B I B I B D D D H H B D D D D D H H H H H H H H H D D H D D I I D D D D D H H H H H H H D D H H H H I D D D H H I I i.F+", -"H I H D H I H I H H K K H I I I I I K I D K H D D D I D I I D D I B I H I I H H H D D D H D D D I D H I D D I H I H H H I D I I I I H K H D H H I I i.F+", -"I I H G G I I I H H I I H H H I K B D I I I H D D D I H I D K I K I K H H I H I D D I I I I D I I I D D I I I H K I K I I D D I H I I H K D D I D I i.F+", -"H K I I H G I I H K I I I K I K I I I K H H I I D I I I I I K H I K I I I H I I I I I I I I I I D D I I I I K K H I K I D I I K H K H G K I I I I K i.F+", -"K I I G I I I I K G G G I K I I I I I I I I I I I I G I G K K C K I I L I K I I G I K K I K G I K I I I I I I C K K I I I K I K I G G K I I K I I K i.F+", -"G I G G K G G G K G L G L C L I J K J K K K I K K G L L G I L K K I I L G K K K K I C K I I G I I K J K I K K G C K K K K I K I J L G L K K K G G K i.F+", -"J K K L G L G K J L L G G J K K I K I K K K I K K L L G K K L I L K I G C K K G K G K K G G G K K K C I G J K G G G K L L L L J J G J C G K L L L L i.F+", -"K I K K K I K K L J G L G K J K K K K K K K K K K C K K J J J J C J J L L L K K K K K K J K K L J G K J K I K G J K I J G K K G L L L L J L L G L L i.F+", -"K K J J J J J J L C J J J J K J J J J J J J J J J J K K J I J G J J J L C K K K K J K K J L C J J J J G J J J J J J J J J J J K J L C J J M C J R M i.F+", -"J K J J L J L Y R R L J J J J Y J J J J L J L J L Y J J J J J J J J J L J J J K J J J J J J J J J J J J M J J J J J L J J J J M R M J J J J J J L R i.F+", -"Y J J J J J J R L L .J J M J R J J J J Y J J J J M J J M J R J J J J J J J J J Y J J J J J J R R J J Y R L J J L J J J M R L R L Y J R J J J K M Y i.F+", -"R J R R Y M M L Y Y .R Y J J J J J R R R R R R R R R R Y R R J R J J R Y J J J Y J J Y Y J J Y J J R J Y Y Y Y Y J Y R J Y Y Y R .J J J R J J M Y i.F+", -"R J R R .M Y Y Y .R Y R R J R R R R R R J R R J R ..J J R J R R R R R R R R Y Y J R R R R R J J R R R J R R R R R R R R Y Y Y R J R R Y J Y Y Y .i.F+", -"Y R R R .Y Y Y Y ..Y R Y R R Y R Y R Y R R R Y Y R R R R R ..Y R R Y Y R R ..R Y R R R R R Y Y R R R R R R Y Y Y ..Y Y R R Y Y .R Y ..R R ..R R Y i.F+", -".. .R R Y Y Y Y R ..Y R .R R R Y R R ....R ..R R M ..Y .... .Y ..R R Y R R Y .... .Y R ..Y ... .R R R Y R R Y R Y .. .R R .Y R R R ....R Y R .. .i.F+", -"R Y Y ....Y . . .Y .......... ..... .R R .. .R ....Y Y .Y .R R ....Y ..R R Y .....R ... .Y ..Y ....R .. .Y ...R Y ..Y Y .......R R R ..Y ..Y h.F+", -"` R ..Y . . . .....Y ...Y . ...Y .` Y .. .` Y .. . . .R .....Y . .....Y ....Y ...Y ..Y ` .. ...Y Y ... . ......... ...` ..Y .. . . ... . .@.i.F+", -" ... .@.@.@. ...Y ` .` . ......... . ... . .` .... ...` ....R ` . ..... ... . . . . ... ...@.@.@.@.@.@...Y .. .Y .Y ...Y .. .@.@.` . . .` .@.i.F+", -"` ...@.Y @.@.@..... .` ...` . ..... .` ......@.@.@... ..... . .` ..` ....` .... . .......` @.Y ..@.Y ` . .......` ` ..` . .@.Y .. . .` .... .@.i.F+", -"` ` @.` ` ` Y @.` ..@.@. . .@.@...` .` ..` ` ` ` Y @.` ` .. .....@.` @.` ` .` ..` ...@. . .` ` ` ` ` .. .@.` ..` .@.` ....` ` ..` ` ..@. .` ` @.i.F+", -"` @.` ` @.` ` ` ` @.@.` @.` ` ` @.` ` ` ` ` @.@.` ` ` ` @.` ..` ` ` ` @.@.` ` ` @.` ` ` ` ` ` ` @.` ` @.` ` ` ` @.` ` ` ` @.` @.` ` ` @.` ` ..` @.@.i.F+", -"` ` $.` @.` @.$.` @.$.$.@.` ` ` $.` @.$.` @.$.` $.` @.` ` @.$.` $.$.` ` $.@.$.@.$.` ` $.$.@.` @.` ` @.$.$.@.@.$.@.$.` @.` @.@.` @.@.` ` @.` ` ` ` @.i.F+", -"$.@.` @.@.$.$.$.` $.@.` $.` $.$.` $.$.@.$.$.$.$.` @.$.` @.` ` $.@.@.$.` $.$.$.$.$.$.$.` @.$.` ` $.@.` ` ` $.$.$.$.@.$.$.` @.` @.` ` @.` $.$.` ` ` #.i.F+", -"$.$.$.$.@.$.$.$.$.$.$.$.$.$.%.$.$.$.$.$.%.$.$.$.$.$.$.$.%.$.$.%.` $.$.$.$.` $.@.$.$.$.$.$.$.$.$.` $.$.$.$.$.$.$.$.$.` $.$.$.$.$.$.@.$.` $.$.$.$.$.#.i.F+", -"#.$.$.$.#.#.#.#.#.%.#.#.#.#.%.#.$.$.%.$.$.%.#.#.#.$.$.$.%.#.#.%.#.#.#.$.#.#.#.$.$.$.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.#.$.$.$.#.$.$.#.$.#.#.#.i.F+", -"$.%.%.$.#.#.#.%.%.%.%.#.#.&.#.&.$.#.%.#.#.%.%.#.%.*.$.#.%.%.#.%.#.#.#.#.%.#.%.$.%.#.#.%.$.#.$.$.$.#.%.$.$.$.#.#.%.*.#.#.$.#.#.#.%.#.$.$.#.%.%.*.#.#.i.F+", -"%.%.%.$.*.#.;.&.&.#.%.#.&.#.#.*.#.%.#.#.&.#.%.#.%.*.$.%.%.#.#.*.#.#.%.#.#.#.%.$.%.%.%.%.%.%.%.$.#.#.%.%.%.%.%.%.%.%.*.*.*.&.&.$.%.$.%.%.%.%.#.%.%.%.i.F+", -"%.%.%.%.%.&.&.#.&.%.#.%.%.%.%.*.*.*.*.*.*.*.*.%.%.%.%.%.*.&.%.&.%.#.%.%.*.%.#.*.%.%.%.$.%.%.%.#.#.%.%.%.%.%.#.%.*.%.%.#.*.#.%.%.%.$.%.%.%.%.%.%.%.%.i.F+", -"%.%.%.%.%.*.#.&.&.;.#.%.%.%.%.*.#.%.%.#.#.%.*.#.%.&.&.;.#.&.#.%.%.%.%.%.*.#.%.*.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.*.%.%.%.%.%.*.%.%.%.%.%.%.%.%.%.%.*.i.F+", -"%.%.%.&.%.%.&.&.&.&.%.%.%.%.%.&.%.%.%.*.*.&.&.=.&.&.&.&.*.;.%.%.&.%.%.%.%.*.*.*.*.*.&.%.%.%.=.%.%.&.%.%.*.%.%.%.*.%.%.*.%.*.%.*.%.&.%.%.%.%.%.%.%.*.i.F+", -"%.%.*.=.&.>.=.#.>.;.>.;.*.%.*.%.&.%.*.;.&.&.&.&.%.&.;.&.&.>.&.&.*.&.*.;.*.%.%.&.;.&.=.=.&.=.&.;.*.*.%.%.%.%.&.*.*.;.*.*.*.&.*.&.%.*.*.%.%.%.*.%.%.&.i.F+", -"=.;.%.*.&.;.=.=.=.&.;.=.;.*.*.;.;.;.;.&.*.;.;.;.=.;.>.&.&.;.=.;.*.*.;.;.=.*.;.;.;.&.&.&.&.&.=.*.;.&.=.*.*.&.&.=.*.;.%.;.%.*.=.=.=.=.&.%.=.&.*.*.=.=.i.F+", -"=.*.;.*.>.;.&.;.>.&.>.*.%.;.*.;.;.&.;.&.=.=.;.;.;.&.&.=.;.>.;.;.;.;.=.*.>.&.;.;.=.=.=.&.;.*.;.=.&.;.;.=.&.*.;.;.*.*.&.;.;.=.&.&.;.&.=.=.&.=.*.%.*.>.i.F+", -"&.=.;.;.;.=.=.&.>.&.=.>.>.=.;.;.;.=.=.=.=.&.=.=.=.=.=.=.&.>.>.;.;.;.;.;.&.=.&.=.;.&.>.>.>.=.;.;.;.=.;.=.=.=.=.=.;.;.;.;.;.=.=.=.;.&.;.&.;.=.;.=.=.>.i.F+", -"=.=.=.=.=.=.=.=.=.=.>.&.=.;.;.=.=.=.=.;.=.=.=.=.=.=.=.=.=.>.&.=.=.=.=.=.=.=.=.=.;.=.>.&.=.=.=.=.>.>.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.>.>.i.F+", -"=.=.>.=.>.>.=.=.>.>.=.=.=.=.=.>.=.=.=.>.>.=.>.=.=.>.=.=.=.>.=.>.=.=.=.=.>.=.=.=.=.>.>.>.=.=.=.=.=.>.=.=.=.,.>.=.=.=.>.=.=.=.=.=.>.>.=.>.=.=.>.,.>.~.i.F+", -">.=.>.=.=.=.>.=.=.>.=.>.=.=.=.>.=.=.>.=.=.=.>.=.>.>.=.=.>.=.=.=.>.=.>.>.=.>.>.=.=.=.=.=.=.>.=.=.=.>.>.=.>.,.=.=.,.>.>.=.=.>.,.=.=.=.=.=.=.=.=.,.=.~.i.F+", -">.=.=.>.=.>.>.=.>.>.>.=.>.=.=.=.=.>.=.>.>.=.>.=.=.=.>.>.=.=.>.=.>.=.=.>.>.>.=.=.>.>.=.>.>.=.=.=.=.,.=.>.>.,.=.=.=.,.>.>.>.=.,.=.>.>.>.=.>.>.=.>.,.~.i.F+", -",.>.,.>.>.=.,.>.=.>.=.>.>.>.=.>.,.>.>.=.>.>.>.>.>.>.>.>.=.,.>.>.,.>.=.>.,.>.>.>.>.>.>.,.>.>.>.>.>.,.>.>.>.,.>.=.,.,.=.=.>.>.,.,.,.,.>.>.>.>.>.>.,.>.i.F+", -",.,.,.>.,.,.,.].,.,.,.~.{.{.,.,.,.,.,.>.>.>.>.,.,.,.~.~.~.,.,.>.,.>.,.>.,.>.>.,.,.,.,.>.=.~.~.{.~.{.,.,.>.,.,.~.~.{.,.,.{.{.{.{.,.>.,.,.{.{.{.,.,.~.i.F+", -",.,.,.,.].,.,.{.,.,.,.{.{.{.{.{.>.>.{.,.,.,.,.,.,.{.{.{.{.{.{.~.{.{.{.{.,.{.,.>.,.~.{.{.,.{.{.{.~.,.,.,.,.,.{.{.{.].~.{.{.].{.,.,.,.~.{.~.~.{.].{.{.i.F+", -"{.{.{.{.].{.,.,.,.>.{.,.{.{.{.{.{.{.{.,.,.,.,.{.,.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.,.{.{.~.].{.{.{.{.{.{.{.].{.{.{.{.{.,.].~.{.~.{.{.{.].~.{.i.F+", -"{.{.{.{.].{.].].{.,.,.,.{.{.{.{.{.{.,.,.{.{.,.,.,.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.].{.{.].{.{.{.{.].{.,.,.,.{.{.].{.{.{.{.{.].{.{.{.i.F+", -"]./.].{.].{.{.].,.,.{.,.(.(.].{.].{.].{.{.{.].].,.{.{.].,.{.]./.{./.].{./.{.{.].{.{.{.{.].].{.].{.].].{.(./.{.{.{.].,.[./././.{.].].].{.{.]./.{.{.].i.F+", -"{./.{.].(.(.{./.{.].]././.{.{./.{.].].,.].{.].].].].].].].(.].(.].{.{.].].]./.{.{./.{.{.].].].]./.{.].{.{.].{.].{.(.{./.{.{.].[.].{./.{.{././.{.].(.i.F+", -"].]./.].{.(.{.]./.].].].].].]./.].].].{.].].]./.].].].].].(.{.(.].].{./.{.{.{././.].{./.].].].].].]./.{.(.{.].].{./././.].].{.].{.(./././.{././.{.(.i.F+", -"/.{.].].].]./.].].].].].].].].].].].]./.].].].]././.[.].(.(.].].].].].]./.].]./.].].].]./.].].]./.]././.]./.]./.]./.].]././.].]./.{./.{./.{.].(.{.(.i.F+", -"/.].].].]././.].].].]./.].].].].].].].].].].].].].].[.(.].(.].].].]./.]./.].]./.].].].]././.]./.].].].]./.].]././.].]./.]./.]././.].].]./.].(.]./.(.i.F+", -"/.].].]./.[.].(.(.[.<.(.].]./.<.<.].[.<.[./././././.[.].(.}.(./.(.]./././.]./.].]./.].[.]./.<././.[.[.[././.]./././.]./.].}./.}./.].(././././.[.(.(.i.F+", -"(.(./.(.(.]././.].].[.<.<.<./.]./.[./././.<.<.}.}./.(.<.(.(.(.(./.(.[.[././.[.[.]././.[.(.[.].[./.[.(.(.(././.[.]./././././.}.]./.(./.(.}.].(.}./.}.i.F+", -"[.[.(.(.<.<.[.(.[.].[.<./.<.<././.}.|.|.}./.}./.<.[.<.(.]./.(.]./.<.<./.}.}.}.[././.[.[.<.<.<.<./.<.<././.<.<.<./.<.[.].}.].[.[./.[.<.<.<.[.[.<.<.}.i.F+", -"[.<.<./.(./.<.<.<.<.<.}.<./.}.}.}.<./.|.|.}./.}.<./.<.(.[./.<.<.<.<./.<.<.}.}.}.<.<.<.<./.}.}.}.<.<./.[.}.}.}.<.<.<./.<.<.<.[.<.<.<././.<.<.<.}.}.|.i.F+", -"}.}.<.<.<.<.<.<./.<./.|.}.}.}.}.}.|.|./.|./.<.<.}.<.[.[.<.<.<.}.}.|.}.<.<.}.}.}.}.<.<.}.<.}.}.|.}.}.<.<.}.}.}.}.}.}.}.}.}.}.}.}.}.}.|.}.}.<.<.}.|.|.i.F+", -"}.}.}.<.}.<.|.<.<.|.<.<.|.}.}.|.}.|.|.}.}.|.|.}.|.<.<.<.<.}.}.|.|.}.}.<.<.|.|.|.}.}.}.|.<.}.}.|.}.|.}.}.}.}.}.}.}.}.|.}.}.}.<.|.|.}.|.}.}.<.}.}.}.|.i.F+", -"<.<.|.|.|.|.}.|.<.<.|.<.}.}.|.|.|.|./.2.2./.<.|.<.|.|.|.<.}.|.}./.<.}.}.<.2.}.|./.|.}.|.<.|.|.}.|.|.|.|.|.<.}.<.|.<.|.|.<.}.|.}.|.|.}.2.<.<.<.}.2.}.i.F+", -"<.|.<.|.|.|.|.|.}.|.|.|.|.|.|.}.}.|.|.|.|.2.|.|.<.|.<.|.|.2.2.|.2.|.|.|.|.2.|.2.|.<.|.<.|.<.}.|.|.}.|.}.2.<.|.|.|.<.<.|.2.|.:.}.|.}.|.|.<.|.|.|.2.}.i.F+", -"|.|.|.<.<.|.<.|.|.|.|.|.|.|.2.|.|.2.|.}.2.|.2.|.|.<.|.|.|.2.}.|.|.<.|.|.|.2.}.2.|.|.|.|.|.|.2.|.|.|.|.2.|.|.|.|.<.<.|.|.2.}.|.|.|.|.}.2.|.<.|.|.2.:.i.F+", -"|.|.|.|.|.|.|.|.|.|.2.|.|.|.|.|.|.|.|.3.|.3.|.2.|.2.|.2.|.|.2.:.|.|.|.2.2.|.|.3.|.2.|.|.|.|.|.2.:.|.|.2.|.|.|.|.:.|.|.|.2.|.|.|.|.3.|.2.|.|.|.|.|.2.i.F+", -"2.|.:.|.2.|.:.|.|.1.|.2.1.2.2.3.2.|.|.|.2.|.|.2.|.|.2.|.|.|.2.3.:.|.|.2.|.|.|.|.2.2.:.|.|.|.2.1.:.|.2.1.|.2.:.|.1.1.|.|.2.|.3.:.|.:.2.2.|.|.|.|.|.2.i.F+", -"2.|.2.1.1.2.2.:.|.:.|.:.2.|.3.|.2.2.3.|.3.2.2.2.2.:.2.|.2.:.:.|.|.:.|.|.1.1.|.2.2.3.3.2.:.|.2.1.|.:.3.|.1.2.2.|.|.:.2.2.2.|.|.|.2.:.|.2.:.2.2.|.3.2.i.F+", -"3.2.3.2.1.2.2.|.2.1.2.2.2.1.2.2.2.|.2.2.2.|.2.1.2.:.|.1.1.2.1.1.2.|.1.|.1.|.2.1.:.3.|.3.3.2.2.2.:.|.2.2.1.1.|.2.1.|.1.:.|.|.|.2.1.1.2.2.2.:.:.3.:.1.i.F+", -"2.:.3.:.2.2.1.1.2.2.:.|.3.2.1.1.2.1.1.1.1.2.1.|.2.2.1.1.:.1.2.2.1.|.1.2.2.1.1.1.2.1.:.:.3.1.1.:.4.1.1.:.1.2.2.2.1.1.2.1.2.1.2.2.|.2.|.1.1.1.1.|.1.3.i.F+", -"1.1.2.2.2.2.:.:.2.2.2.1.1.1.:.2.2.1.:.1.:.2.1.1.1.1.:.2.2.1.:.2.1.2.1.1.2.1.3.:.1.:.2.1.3.3.3.1.2.:.2.2.1.2.2.1.|.2.:.2.1.:.2.2.2.2.1.:.1.|.1.1.1.1.i.F+", -":.1.2.1.1.1.1._._.1.1.:.1.1.2.1.2.3.3.3.1.2.1.1.1.1.2.2.1.2.2.2.1.1.1.2.2.:.1.2.1.2.1.1.1.:.3.1.1.1.2.2.1.1.2.1.1.1.2.2.2.1.1.1.2.1.2.2.2.1.1.1.1.6.i.F+", -"1.2.1.1.3.6.3.3.3.3.4.3.4.3.3.1.4.4.8.3.6.4.5.3.3.1.2.1.1.2.4.3.5.1.1.4.4.4.4.1.1.1._.3.1.1.6.3.3.1.1.1.1.1.1.1.5.4.3.6.4.4.3.4.3.4.4.3.3.4.3.4.6.3.i.F+", -"5.5.1.3.3.6.3.3.6.3.4.4.5.5.4.4.5.3.5.3.4.3.6.3.4.4.1.1.4.4.4.4.5.3.3.5.4.5.4.3.5.3.6.3.6.3.6.3.3.6.4.4.6._.1.3.5.4.4.6.3.4.3.3.3.3.6.3.4.5.3.4.3.6.i.F+", -"3.4.4.6.3.3.5.4.5.4.5.3.3.6.6.4.5.3.5.4.4.3.4.6.4.6.6.4.5.3.1.3.3.6.6.5.3.4.6.4.6.3.5.5.5.5.4.5.4.5.5.4.3.5.3.1.4.3.3.6.3.4.4.6.6.4.4.4.5.3.6.3.6.4.i.F+", -"4.4.3.6.4.4.4.3.5.4.4.4.4.4.3.6.3.3.5.4.3.6.3.6.4.3.6.4.4.4.4.4.4.4.3.6.4.4.4.3.6.4.4.3.5.4.3.5.4.4.3.5.4.4.4.3.5.4.4.4.4.4.4.4.3.6.4.4.4.3.5.4.4.3.i.F+", -"4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.5.5.5.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.i.F+", -"6.4.6.6.4.5.4.5.4.4.4.4.4.5.4.4.5.5.4.5.4.5.4.4.5.6.6.4.6.4.6.4.4.5.4.4.4.4.4.4.4.4.4.4.4.4.5.5.5.8.5.8.5.6.8.5.5.4.5.5.8.5.6.4.6.4.4.5.5.5.4.4.4.4.i.F+", -"4.4.7.4.5.4.4.7.8.7.4.5.4.4.5.8.6.4.6.6.6.4.5.4.6.8.7.8.4.8.4.6.4.6.5.6.8.5.6.5.4.7.6.4.7.5.7.5.8.8.5.5.8.5.5.5.8.5.8.5.5.8.7.5.4.8.7.5.5.4.4.5.4.4.i.F+", -"6.4.4.4.7.6.6.5.4.6.7.6.6.6.7.6.8.7.8.4.8.6.6.8.8.6.6.7.7.6.4.5.6.8.5.8.6.5.8.5.5.6.6.6.4.7.3.5.8.7.8.8.7.5.5.7.8.5.5.5.5.5.5.5.6.6.5.5.7.8.8.5.5.7.i.D+", -"8.5.6.5.4.6.6.7.7.6.6.6.8.4.7.6.8.6.7.6.6.6.4.7.4.6.6.6.6.6.7.4.8.4.5.8.5.7.4.8.4.4.8.5.4.4.7.5.5.8.8.7.5.8.7.5.5.5.7.8.6.8.8.4.8.8.6.5.5.5.8.8.8.5.i.D+", -"6.8.8.8.7.7.7.8.6.7.7.7.7.7.8.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.8.8.7.7.5.i.D+", -"7.7.C W.k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+6+k+6+k+6+k+k+k+o.} 8.7.7.i.D+", -"8.7.Z K.K.K.Q.Q.)+J.T.Q.K.}+Q.Q.W.T.}+J.T.W.J.}+W.W.Q.T.1+K.T.Q.K.)+Q.Q.Q.T.}+J.T.Q.K.1+Q.W.J.T.Q.K.)+Q.Q.Q.T.}+)+T.T.T.T.T.K.T.1+P.T.Q.}+1+| 9._.7.i.D+", -"8.8.Z K.7.q.v.l.l.y.y.k.v.l.l.u.k.y.u.q.v.l.q.y.q.g.q.k.l.u.v.D.k.p.q.g.l.v.k.E.x.q.l.k.u.p.g.q.x.B.C.k.q.l.v.k.l.q.g.q.w.l.q.l.l.k.y.k.]+,+~ 8.7.7.i.D+", -"7.7.Z K.A.N.`.`.p.B.P.Z.C.I..+@+R.`.=+E.`.E.I.x.I.u.@+D.w.E.$+@+R. +R.E. +G.E.`.S.x.L.A.x.N.~+*+$+w.@+z.l.N.E.A.P.G.*+P.=+Y.w.C.E.!+>+]+~+]+! 7.7.7.i.D+", -"7.7.Z K.$+S.@+#+v.'+X.$+L.I.Y.)+{+~+4+$+#+8+{+b+N.2+N.L.M.%+N. +X..+D.Z.D.)+J.Y.b+*+V.a+ +N.p.S.U.1+V.U.N.~+0+!+N.X.++X.V.#+Y.~+Y.)+>+G.>+~+! 7.7.7.i.D+", -"7.7.Z K.p.C.!+V.v+p+u+y+x+p+u+u+u+u+u+u+x+u+u+u+u+u+y+u+u+z+x+y+y+y+y+p+z+p+x+x+x+x+x+x+y+x+x+x+x+x+y+x+y+x+x+w+x+x+x+w+y+y+x+y+y+v+]+b+.+8+! 7.7.7.i.D+", -"7.7.Z K.B.'+P.R.j+/ ] , = % % % % % % % % = = ; - , ' / [ ] ] ] / / / [ 7 8 9 0 0 0 q O Q ^.b.a.N N W ^.^.^.^.!.!.a.a.a.a.b.a.j.a.s. +!+0+4+! 7.7.7.i.D+", -"7.7.Z K.w.$+P.P.f+- * . % % % % % % % % % % = = = - = * * , ) ] ] / ] / 7 / 6 0 O O O O Q P Q Q W ^.W ^.^.a.^.a.a.b.b.b.b.b.c.c.a.U.<+M.'+g+! 9.7.0.i.D+", -"7.9.Z K.v.=+*+b+6+] * c.x+v+v+v+v+D+v+B+v+v+v+E+D+w+i+; ' 5+E+A+v+v+v+v+p+p+y+w+w+v+w+v+y+i+8 U.r+w+w+x+w+x+v+x+x+x+x+y+x+x+x+U.P >+y..+]+]+! 7.7.7.i.D+", -"7.7.C K.q.!+!+{+j+/ = 6+H+k+,+9+<+<+8+8+8+0+8+<+9+E+C+- / H+q+^+8+7+7+>+r+H+5+[+7+f+7+^+w+D+/ i+H+g+7+d+f+f+7+f+f+f+f+f+f+6+g+!.W >+*+`.{+W.! 9.7.9.i.D+", -"7.7.Z K.y.D.0+P.j+) & ^+x+; # @ @ @ @ + + . & . + U.G+; ] H+f.& - , , * t.E+q - 7 7 / ' j+C+] i+H+9 7 7 7 8 9 9 9 9 6 6 6 6 0 N Q H.3+.+-+0+! 0.9.0.i.D+", -"9.9.Z K.p.z.M.B.q+f.P j+y+- ' O 0 O 0 O , . * - Q m+G+, ] H+n.; / / 7 ' ^+D+^.] P P Q 6 i+D+] j+H+O ^.t.n.t.t.n.t.t.t.t.t.t.H.t.m.<+)+C.3+9+! 0.7.9.i.D+", -"9.0.Z K.I.4+Z.~+H+H+H+H+r+- q+H+H+H+H+H+p+j.= & H+H+r+; / H+t.; / 7 8 ) <+H+!.] O O O 8 i+C+] j+H+0 t.H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+7+]+d+'+! 0.0.9.i.D+", -"9.0.Z K.C.Y.'+#+5+b.0 6+v+' , 0 0 9 9 P q+H+q+b., , ) ; 9 H+t.; / / 7 / 9 <.8 6 P P P 8 i+v+] j+H+O N b.b.c.b.c.b.b.c.c.c.c.c.c.!.U.{+'+>+b+! 0.7.0.i.D+", -"9.0.Z K.S.Y.~+ +l+6 ' >+D+7 * = * * * & & b.w+H+5+9 = = 8 H+t., 8 8 8 9 7 / 6 O P Q O 8 i+v+] 6+H+9 0 6 6 0 6 0 6 O O O O O O W P H.=+]+G.3+! 7.0.0.i.D+", -"0.0.Z K.y.N.$+@+i+^.8 f+C+0 - ' ' ' , , - & = u.r+H+5+9 / H+t., / 8 8 9 6 0 0 0 O O O 8 m+D+/ j+H+V.t.s.H.s.H.H.s.V.V.V.V.V.U.j.P s.-+I.~+8+! 0.0.0.i.D+", -"0.0.Z K.q.V.p.{+m+a.6 <+H+O , ) ' ' ' ' ' ' , & , A.H+m./ H+s., 7 8 9 6 0 O 0 0 O Q Q 8 5+H+] 7+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+m.8 s.|+)+&+9+! 0.0.0.i.F+", -"0.0.Z R.B.`.M.G.m+a.a.0 !.8 / / ] ' ) ) ] ' ] ] - = 9 ] ) N 9 / 7 8 9 9 0 0 O P Q Q Q P ^.!.8 Q b.b.a.b.b.b.c.b.c.b.).c.c.c.j.q Q s.L.a+X.0+! 0.0.0.h.D+", -"0.0.Z K.q.S.4+.+n+a.b.Q 6 6 7 ] ' ' ' ' ' ] ' ' ' ' - ' ' ' ' / / 7 7 7 9 9 7 8 6 6 O P 0 6 O 0 6 9 0 6 O O 0 0 0 O O O O P Q a.N H.1+N.9+d+! 0.0.0.i.F+", -"0.0.Z R.B.C.4+V.m+a.a.t.j.W f.f.a.c.b.] 8 ) 6 !.!.N c.a.Q 6 f.n.O 9 n.j.P 7 f.m.b.b.n.f.O f.n.j.m.n.W a.W j.H.H.f.m.t.n.c.m.H.t.P H.N.N.~+~+~ 0.0.0.h.D+", -"0.d.Z K.l.Z.)+E.m+^.j.x+m+l+U.f+6+w+m+c.U.a.7+r+y+v+r+f+j+7+^+<+6 m.p+r+f+c.D+U.m+r+7+f+N 7+w+p+s.p+s.U.H.b+<+7+i+i+h+w+6+5+r+r+P H.$+#+[+,+! 0.0.0.i.D+", -"0.0.Z Q.Z.E.!+{+i+N a.t.b.f.0 O O j.^.j.f.j.O N a.b.a.^.7 N / / ' 0 O O j.f.f.f.c.c.n.f.6 b.n.m.m.n.t.n.s.m.Q W c.t.t.j.b.t.t.H.0 t.4+L.'+0+! d.0.0.i.D+", -"0.0.Z Q.M.R.$+U.q+j.j.c.b.^.a.W P q 0 0 6 0 8 6 9 9 0 q 0 0 O P Q P q 0 O N O N P P ^.^.^.^.N Q a.N ^.^.a.a.a.a.^.^.a.^.^.^.a.a.W V.1+-+2+9+~ d.d.0.i.F+", -"0.0.Z Q.l.@+>+@+w+x+x+x+x+x+w+x+x+y+y+x+y+x+x+x+x+y+p+x+x+x+w+y+x+x+x+w+z+x+x+p+x+w+x+y+x+x+y+x+y+x+x+x+x+x+x+x+x+y+x+x+w+y+y+x+x+w+3+R.,+#+! d.d.0.h.D+", -"0.0.Z Q.C.P.~+-+ +.+G.%+]+u.@+-+]+Y.Y.#+ +4+R. +R..+O.M.=+$+A. +~+@+P.O.z.-+N.=+3+X.2+&+E.*+'+ +R.4+x. +~+ +-+#+4+-+ + +~+-+b+$+N.1+y..+%+,+~ d.d.0.i.F+", -"0.d.` Q.v.R.@+2+@+*+9+*+ + + +'+{+@+)+]+a+@+y.@+++'+E.D.-+-+&+!+ +X.'+2+Z.X. +#+{+~+X.@+,+G.&+-+E.E.9+*+!+.+E.N.@+ +d+u.>+)+O.L.8+P. +W.*+)+! d.d.0.h.D+", -"0.d.Z Q.z. +Q.,+y.9+8+++8+,+++F.Q.Q.9+W. +9+Q.++A.&+++>+Q.++[+9+9+,+^+{+9+++~+>+,+,+,+9+~+F.,+,+F.{+++*+++~+9+++9+{+]+*+{+,+{+>+W.f+W.~+c+[+! 0.0.0.i.F+", -"0.0.R P.T.T.h+h+e+k+k+h+h+9+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+e+e+h+h+e+e+e+h+e+h+h+e+e+e+h+e+h+e+k+h+9+k+e+9+h+k+q+! 0.0.0.h.D+", -"0.0.Z Q.h+s+y+B+s+B+y+y+y+x+x+y+y+y+y+y+y+B+y+y+x+x+y+y+y+x+x+B+y+y+x+x+y+y+y+x+x+B+y+y+y+y+x+x+x+y+y+x+y+y+y+y+x+x+B+y+x+B+x+x+y+y+y+y+y+y+! 0.0.0.i.F+", -"0.0.^ ~ ! > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ! 0.0.0.h.D+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.i.F+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.h.C+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.h.H+", -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.k.H+", -"o.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.u.H+", -"k+l+n+n+n+n+n+n+l+n+n+l+n+n+n+n+n+n+l+n+n+l+n+n+n+n+n+n+l+n+n+l+l+l+l+l+l+l+l+l+l+l+l+l+n+n+n+n+n+n+l+n+n+l+n+n+l+n+n+l+n+n+n+n+l+n+n+l+n+n+n+n+n+l+n+n+"}; +"% c #B9B9BF", +"& c #E0E0E3", +"* c #ACACB3", +"= c #9D9DA4", +"- c #F3F3F4", +"; c #5D5D6A", +"> c #5E5E6A", +", c #92929B", +"' c #878791", +") c #5C5C69", +"! c #EDEDEE", +"~ c #FCFCFC", +"{ c #909098", +"] c #909099", +"^ c #62626E", +"/ c #A5A5AC", +"( c #E2E2E4", +"_ c #E5E5E7", +": c #BDBDC2", +"< c #CCCCD0", +"[ c #70707C", +"} c #C4C4C9", +"| c #FAFAFA", +"1 c #CECED2", +"2 c #CFCFD3", +"3 c #CBCBCF", +"4 c #BFBFC4", +"5 c #C6C6CB", +"6 c #B3B3B9", +"7 c #B2B2B8", +"8 c #EBEBEC", +"9 c #CACACE", +"0 c #A0A0A7", +"a c #8D8D96", +"b c #FDFDFD", +"c c #8C8C95", +"d c #5A5A67", +"e c #F4F4F5", +"f c #E1E1E3", +"g c #F7F7F7", +"h c #5C5C68", +"i c #DBDBDE", +"j c #F8F8F9", +"k c #F2F2F3", +"l c #F1F1F2", +"m c #BCBCC1", +"n c #EAEAEC", +"o c #8F8F98", +"p c #E2E2E5", +"q c #A6A6AD", +"r c #A3A3AA", +"s c #F0F0F1", +"t c #333339", +"u c #34343A", +"v c #1C1F22", +"w c #1A1E20", +"x c #D1D1D5", +"y c #FBFBFB", +"z c #F5F5F6", +"A c #CDCDD1", +"B c #CECED1", +"C c #5B5B68", +"D c #D7D7DA", +"E c #A2A2A9", +"F c #666672", +"G c #676773", +"H c #ADADB3", +"I c #A8A8AF", +"J c #9F9FA7", +"K c #82828C", +"L c #EBEBED", +"M c #656571", +"N c #6D6D78", +"O c #DBDBDD", +"P c #6C6C77", +"Q c #D5D5D9", +"R c #D5D5D8", +"S c #9999A1", +"T c #9898A0", +"U c #A7A7AE", +"V c #61616E", +"W c #6A6A76", +"X c #EDEDEF", +"Y c #A1A1A8", +"Z c #D8D8DB", +"` c #7C7C86", +" . c #E0E0E2", +".. c #63636F", +"+. c #E6E6E8", +"@. c #B0B0B6", +"#. c #C0C0C5", +"$. c #D6D6D9", +"%. c #6B6B76", +"&. c #E9E9EB", +"*. c #C7C7CB", +"=. c #F9F9FA", +"-. c #C3C3C8", +";. c #74747F", +">. c #96969E", +",. c #C2C2C7", +"'. c #EEEEEF", +"). c #636370", +"!. c #C6C6CA", +"~. c #72727D", +"{. c #AEAEB4", +"]. c #BEBEC3", +"^. c #686874", +"/. c #DDDDE0", +"(. c #646470", +"_. c #DFDFE2", +":. c #7D7D87", +"<. c #D2D2D6", +"[. c #A9A9B0", +"}. c #8E8E97", +"|. c #C1C1C6", +"1. c #84848E", +"2. c #70707B", +"3. c #E4E4E6", +"4. c #696975", +"5. c #C8C8CD", +"6. c #6F6F7A", +"7. c #696974", +"8. c #DEDEE1", +"9. c #7D7D88", +"0. c #B4B4BA", +"a. c #777782", +"b. c #757580", +"c. c #9797A0", +"d. c #ABABB2", +"e. c #AEAEB5", +"f. c #8A8A93", +"g. c #E7E7E9", +"h. c #8B8B94", +"i. c #ECECEE", +"j. c #5F5F6B", +"k. c #B7B7BC", +"l. c #B6B6BC", +"m. c #C9C9CD", +"n. c #FEFEFE", +"o. c #94949D", +"p. c #EFEFF0", +"q. c #AAAAB0", +"r. c #898992", +"s. c #B7B7BD", +" ", +" ", +" ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ $ $ % % $ $ $ & * = # + ", +" + @ $ $ - ; > - $ $ , ' $ & ) # + ", +" + @ $ ! ~ { ] ~ ! $ ^ / & ( / ^ $ _ : - < [ $ & $ $ $ $ ^ / & ( / ^ $ _ } | # + ", +" + @ $ & < 1 2 3 & $ / $ : 4 $ / $ $ 5 6 $ 7 $ & , $ 8 , / $ : 4 $ / $ $ 9 0 # + ", +" + @ $ & a b b c & $ ( - d d e f $ g h ; $ i $ & $ & ( - d d e f $ j ; # + ", +" + @ $ & ) k l ) & $ ( - d d e f $ & $ & $ & $ & ( - d d e f $ f # + ", +" + @ $ & c c & $ / $ m : $ / $ & $ & $ & n - o / $ m : $ / $ & # + ", +" + @ $ & & $ ^ / f p q ^ $ & $ & $ & r - s ^ / f p q ^ $ & # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u x & & & 8 y z | A B | # + ", +" + @ t v w w w w w w w w w w u C D E z z f F G f z # + ", +" + @ t v w w w w w w w w w w u H B z z I J 0 I z # + ", +" + @ t v w w w w w w w w w w u K L M z z N O i P z # + ", +" + @ t v w w w w w w w w w w u F L K z z Q c R z # + ", +" + @ t v w w w w w w w w w w u B * z z S - T z # + ", +" + @ t v w w w w w w w w w w u r D C z z ^ U V z # + ", +" + @ t v w w w w w w w w w w u y 8 & & & & W | X X X Y z z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u | A B | Z # + ", +" + @ t v w w w w w w w w w w u z f F G f z # + ", +" + @ t v w w w w w w w w w w u z I J 0 I z z ` .; ..+.[ # + ", +" + @ t v w w w w w w w w w w u z N O i P z z @.@.#.0 # + ", +" + @ t v w w w w w w w w w w u z Q c R z z ; p $.d # + ", +" + @ t v w w w w w w w w w w u z S - T z z %.&. .; # + ", +" + @ t v w w w w w w w w w w u z ^ U V z z 2 { @.@. # + ", +" + @ t v w w w w w w w w w w u z z z S *. ; .` # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u =.& & -.;. z # + ", +" + @ t v w w w w w w w w w w u z >.,. z # + ", +" + @ t v w w w w w w w w w w u z ..'. ).* O !.~. z {.+.].^. z >./. .,.~. (.* _.& :.).* O !.~. # + ", +" + @ t v w w w w w w w w w w u z h E <. [.}. K |. | [.d [.7 z M 1.m [.7 ; C ^ [.}. K |. # + ", +" + @ t v w w w w w w w w w w u =.& k | 2. /.& & & 3. | 4. 4.( z ;.: p & X _.P /.& & & 3. # + ", +" + @ t v w w w w w w w w w w u z ; : 5. & 6. | 7. 7.( z B ] ) 4.=. 8.P & 6. # + ", +" + @ t v w w w w w w w w w w u z > L 9. I 0.> d a. | U d U 7 z & b.) 7 | I 7 ; C ^ I 0.> d a. # + ", +" + @ t v w w w w w w w w w w u z c.B ).d._.3.{. z e.+.4 7. z f.8.f r z ).* f .` ).d._.3.{. # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t v w w w w w w w w w w u z # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ t v v v v v v v v v v v u # + ", +" + @ t v w w w w w w w w w w u z z =. .g.i ] E 8.6 # + ", +" + @ t v w w w w w w w w w w u z z z ) h.p }. i.j. # + ", +" + @ t v w w w w w w w w w w u z 7.k.( l.^. >./. .,.~. ^.: +.* z z = D ).* O !.~.m.n.& o. # + ", +" + @ t v w w w w w w w w w w u z 7 [.d [.@. M 1.m 6 I C d.| z P p. [.}. K |. z # + ", +" + @ t v w w w w w w w w w w u z ( 4. 4.f ;.: p & X p 4. W | z N '. /.& & & 3. z # + ", +" + @ t v w w w w w w w w w w u z ( 7. 7.f B ] ) 4.=. p 7. W | z = D & 6. z # + ", +" + @ t v w w w w w w w w w w u z 7 U d U @. & b.) 7 | 6 U d q.| z h r.f c I 0.> d a. z # + ", +" + @ t v w w w w w w w w w w u | X X X Y 7.s.( k.^. f.8.f r z ^.: +.H z =.& g.i { ).d._.3.{. z Z # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t v w w w w w w w w w w u # + ", +" + @ t u u u u u u u u u u u u # + ", +" + @ # + ", +" + @ # + ", +" + @ # + ", +" . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . ", +" . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/mute.xpm b/hdspmixer/pixmaps/mute.xpm index 83c71e4..7e69f21 100644 --- a/hdspmixer/pixmaps/mute.xpm +++ b/hdspmixer/pixmaps/mute.xpm @@ -1,59 +1,137 @@ /* XPM */ -char * mute_xpm[] = { -"13 26 30 1", -" c None", -". c #1B7B1B", -"+ c #2F5F2F", -"@ c #434343", -"# c #7A817A", -"$ c #DE8C00", -"% c #872100", -"& c #B35A00", -"* c #FFCC00", -"= c #FFFF00", -"- c #700909", -"; c #272727", -"> c #FFCC66", -", c #FFFFFF", -"' c #001B40", -") c #191919", -"! c #000D00", -"~ c #000500", -"{ c #000000", -"] c #3D3E3D", -"^ c #4A1B00", -"/ c #0B0000", -"( c #3B0C00", -"_ c #5C4C1C", -": c #5C3C00", -"< c #3D1600", -"[ c #6D3E00", -"} c #CDCDCD", -"| c #0D0000", -"1 c #8E6E1E", -".+@@@@@@@@@+#", -"$$$$$$$$$$$$%", -"&*=********-;", -"&$>,>>>>>,>-;", -"&$>,,>>>,,>-;", -"&$>,,>>>,,>%;", -"&$=,>,>,>,>%;", -"&$>,>,>,>,>-;", -"&&>,>>,>>,>%;", -"&$=,>>,>>,>-;", -"&$&>>>>>>>&%;", -"&-;;'''''';';", -";))))))))))))", -"!~{{{{{{{{{~]", -"^^^^^^^^^^^^{", -"/(_::::::::{{", -"<[[[[[[[[[[{{", -"<[[}[[[[[}[{{", -"<[[}}[[[}}[|{", -"<[1}}[[[}}[|{", -"<[[}[}[}[}[{{", -"<<[}[}[}[}[|{", -"<[1}[[}[[}[{{", -"<[<}[[}[[}<|{", -"<{{{{{{{{{{{{", -"{{{{{{{{{{{{{"}; +char const * mute_xpm[] = { +"13 26 108 2", +" c #665C59", +". c #69544D", +"+ c #8F462F", +"@ c #E66840", +"# c #FF9E7F", +"$ c #90472F", +"% c #FF9D7E", +"& c #100907", +"* c #865242", +"= c #5E3A2E", +"- c #37221B", +"; c #91472F", +"> c #FF9D7D", +", c #291914", +"' c #492C23", +") c #FD9B7C", +"! c #3E261E", +"~ c #37211A", +"{ c #92472F", +"] c #FF9C7C", +"^ c #2F1C16", +"/ c #563429", +"( c #EE9173", +"_ c #C87A61", +": c #734637", +"< c #93472F", +"[ c #FE9B7B", +"} c #2E1C16", +"| c #9C5F4B", +"1 c #A56550", +"2 c #7C4C3C", +"3 c #BD735B", +"4 c #36211A", +"5 c #94482F", +"6 c #FE9A7A", +"7 c #E58B6E", +"8 c #5B382C", +"9 c #482B22", +"0 c #F19273", +"a c #95482F", +"b c #3F261E", +"c c #5F392D", +"d c #F29374", +"e c #FE9979", +"f c #B86F57", +"g c #CD7B61", +"h c #F29273", +"i c #96482F", +"j c #FE9978", +"k c #F29172", +"l c #362019", +"m c #6F554C", +"n c #A34B2F", +"o c #FA8E6B", +"p c #666659", +"q c #69684D", +"r c #8F8C2F", +"s c #E6E040", +"t c #FFFB7F", +"u c #908D2F", +"v c #FFFB7E", +"w c #100F07", +"x c #868342", +"y c #5E5C2E", +"z c #37361B", +"A c #918E2F", +"B c #FFFB7D", +"C c #292814", +"D c #494723", +"E c #FDF97C", +"F c #3E3D1E", +"G c #37361A", +"H c #928F2F", +"I c #FFFB7C", +"J c #2F2E16", +"K c #565429", +"L c #EEEA73", +"M c #C8C461", +"N c #737137", +"O c #93902F", +"P c #FEFA7B", +"Q c #2E2E16", +"R c #9C994B", +"S c #A5A250", +"T c #7C7A3C", +"U c #BDBA5B", +"V c #36351A", +"W c #94912F", +"X c #FEFA7A", +"Y c #E5E16E", +"Z c #5B5A2C", +"` c #484722", +" . c #F1ED73", +".. c #95922F", +"+. c #3F3E1E", +"@. c #5F5E2D", +"#. c #F2EE74", +"$. c #FEFA79", +"%. c #B8B557", +"&. c #CDC961", +"*. c #F2EE73", +"=. c #96932F", +"-. c #FEFA78", +";. c #F2EE72", +">. c #363519", +",. c #6F6E4C", +"'. c #A39F2F", +"). c #FAF56B", +" . + + + + + + + + + . ", +". + @ @ @ @ @ @ @ @ @ + . ", +"+ @ # # # # # # # # # # + ", +"$ @ % % & * % % = - % % $ ", +"; @ > > , ' > ) ! ~ > > ; ", +"{ @ ] ] ^ / ( _ : ~ ] ] { ", +"< @ [ [ } | 1 2 3 4 [ [ < ", +"5 @ 6 6 } 7 8 9 0 4 6 6 5 ", +"a @ 6 6 } 6 b c d 4 6 6 a ", +"a @ e e } e f g h 4 e e a ", +"i @ j j } j j j k l j j i ", +"m n o o o o o o o o o n m ", +" m n n n n n n n n n m ", +"p q r r r r r r r r r q p ", +"q r s s s s s s s s s r q ", +"r s t t t t t t t t t t r ", +"u s v v w x v v y z v v u ", +"A s B B C D B E F G B B A ", +"H s I I J K L M N G I I H ", +"O s P P Q R S T U V P P O ", +"W s X X Q Y Z ` .V X X W ", +"..s X X Q X +.@.#.V X X ..", +"..s $.$.Q $.%.&.*.V $.$...", +"=.s -.-.Q -.-.-.;.>.-.-.=.", +",.'.).).).).).).).).).'.,.", +"p ,.'.'.'.'.'.'.'.'.'.,.p "}; diff --git a/hdspmixer/pixmaps/output.xpm b/hdspmixer/pixmaps/output.xpm index 3fc334f..c827b1c 100644 --- a/hdspmixer/pixmaps/output.xpm +++ b/hdspmixer/pixmaps/output.xpm @@ -1,468 +1,282 @@ /* XPM */ -char * output_xpm[] = { -"36 208 257 2", -" c None", -". c #000000", -"+ c #080808", -"@ c #080810", -"# c #001008", -"$ c #101010", -"% c #181010", -"& c #002010", -"* c #101818", -"= c #181818", -"- c #002918", -"; c #202018", -"> c #003118", -", c #202020", -"' c #202029", -") c #292020", -"! c #202920", -"~ c #292920", -"{ c #292929", -"] c #004120", -"^ c #293131", -"/ c #313131", -"( c #104A29", -"_ c #393939", -": c #394139", -"< c #414141", -"[ c #20524A", -"} c #4A4141", -"| c #414A41", -"1 c #4A4A41", -"2 c #4A4A4A", -"3 c #524A41", -"4 c #4A524A", -"5 c #525252", -"6 c #525A52", -"7 c #5A5A52", -"8 c #625A4A", -"9 c #317B20", -"0 c #5A625A", -"a c #62625A", -"b c #626A62", -"c c #6A6A62", -"d c #6A6A6A", -"e c #736A62", -"f c #737373", -"g c #7B736A", -"h c #737B73", -"i c #737B7B", -"j c #7B7B73", -"k c #7B7B7B", -"l c #7B8373", -"m c #7B837B", -"n c #83837B", -"o c #838383", -"p c #838B83", -"q c #8B8B83", -"r c #8B8B8B", -"s c #8B948B", -"t c #94948B", -"u c #949494", -"v c #949C94", -"w c #949C9C", -"x c #9C9C94", -"y c #9C9C9C", -"z c #9CA49C", -"A c #9CA4A4", -"B c #A4A49C", -"C c #A4A4A4", -"D c #A4ACA4", -"E c #ACACA4", -"F c #ACACAC", -"G c #B4B4AC", -"H c #BDBDB4", -"I c #C5C5BD", -"J c #CDCDCD", -"K c #D5D5CD", -"L c #DEDED5", -"M c #DEE6DE", -"N c #E6E6E6", -"O c #EEEEEE", -"P c #F6EEEE", -"Q c #F6F6F6", -"R c #F6FFFF", -"S c #FFFFFF", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0099FF", -"p+ c #00CCFF", -"q+ c #00FFFF", -"r+ c #3300FF", -"s+ c #3333FF", -"t+ c #3366FF", -"u+ c #3399FF", -"v+ c #33CCFF", -"w+ c #33FFFF", -"x+ c #6600FF", -"y+ c #6633FF", -"z+ c #6666FF", -"A+ c #6699FF", -"B+ c #66CCFF", -"C+ c #66FFFF", -"D+ c #9900FF", -"E+ c #9933FF", -"F+ c #9966FF", -"G+ c #9999FF", -"H+ c #99CCFF", -"2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 { ", -"j g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g ", -"g F D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", -"e C r m m m m m m m m m m m m m m m m m m m m m m m m m m m m m r x z z ", -"e C o < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / _ : < z A A ", -"e C p : / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ ^ / < D D D ", -"e A p _ / { { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { { / _ F D D ", -"e A p / ^ { ' ; = = * * * * * * * * * * * * * * * * * = ; ' { ^ / F D D ", -"e A p / { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ * * = ; ' { / F D D ", -"e A p ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = ' { ^ F D D ", -"e A p ^ { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ F D D ", -"e A p / { , = * $ @ + + + + + + + + + + + + + + + + @ % * = , { ^ F D D ", -"e A p / { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / F D D ", -"e A p / ^ { ' ; = = * * * * * * * * * * * * * * * * = = = ' { ^ / F D D ", -"e A p _ ^ { { ' , ; = = = = = = = = = = = = = = ; = ; , ' { { / _ F D D ", -"e A r < / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : G D D ", -"e A v < < _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / _ < < G D D ", -"e A A F 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 G C C ", -"e z A D D F F F F F F F F F F F F F F F F F F F F F F F F F F F F C A A ", -"e A s b / / / / / / / / / / / / / / / / / / / / / / / / / / / / b s y y ", -"e z r 2 7 7 5 5 2 7 4 5 6 2 5 5 5 4 2 2 4 4 4 4 4 6 4 2 5 4 5 2 2 v z z ", -"e z r 5 4 7 5 4 7 5 4 4 4 6 5 7 5 7 4 4 4 2 6 2 4 7 6 6 4 4 7 2 / z z z ", -"e z r 6 4 5 4 5 2 5 2 7 6 2 2 7 2 7 4 4 2 5 5 5 4 4 4 4 5 5 7 | ! z z z ", -"e z r 6 2 4 4 6 6 2 2 6 2 6 2 2 4 5 6 5 4 4 7 2 4 4 2 4 2 2 2 < { z z z ", -"e z r 6 6 5 2 5 5 2 2 5 6 6 4 7 0 7 b j n j j l n j k g a 5 7 < { z z z ", -"e z r 6 7 2 4 2 { , / < 2 4 2 2 0 4 c . . . . . . . . . . 2 5 2 ! z z z ", -"e z r 6 7 7 4 < , g } 4 4 7 4 7 a 4 0 . . . . . . . . . . | 2 2 ! z z z ", -"e z r 6 6 4 7 1 ~ 8 { 0 0 5 6 2 6 4 a . & # & & & # & - . | 4 : ~ z z z ", -"e z q 6 5 6 2 2 { 3 ) b 7 4 7 4 a 4 7 . & & - - - > - ] . : 4 | { z z z ", -"e z r 6 7 2 4 2 , 3 ) c b 7 7 2 0 7 c . > > ] - > ] ] ( . < 2 : ! z z z ", -"e z r 6 6 4 2 2 { 3 ) e 0 2 2 2 a 4 0 . - > ] ] > ] ] ( . < 4 2 { z z z ", -"e z r 6 6 2 2 < ~ 3 ) b 0 7 2 4 6 2 a . - - > > ] > ] ( . < | 2 ! z y y ", -"e z r 6 4 5 4 : ~ 3 ) e 6 5 4 5 6 2 b . - > ] > > ] ] ( . | | 2 , y z z ", -"e z p 6 4 2 2 | ! 3 ) b 6 7 4 4 7 5 b . - > > ] > ] ] ( . : | : ~ y y y ", -"e z p 6 4 6 2 2 { 3 ) c 6 7 4 2 0 6 b . - > > > ] > ] ( . : 4 | { y y y ", -"e z r 6 7 4 6 1 { 3 ) g 0 4 5 4 6 4 b . - > > > > ] ] ( . 2 < | ~ y y y ", -"e z p 6 5 4 5 : ! 3 ) b b 2 2 4 7 6 0 . - > ] > > ] ] ( . | 5 : ! y y y ", -"e z p 6 6 4 5 | { 3 ) c 0 4 6 4 a 2 a . - - > ] > > ] ( . | 2 | { y y y ", -"e z p 5 4 5 4 2 { 3 ) g 7 2 5 4 0 4 a . - - ] ] > > ] ( . < 2 : ! y y y ", -"e z p 6 2 7 6 2 { 3 ) c 7 5 5 2 5 7 7 . - - > ] > ] ] ( . : 5 : ! y y y ", -"e z p 5 4 7 6 | { 3 ) b 0 2 5 4 5 7 c . - > > - ] > ] ( . | 2 | ! y y y ", -"e z p 6 7 5 2 | { 3 ) b a 2 7 2 0 6 b . - - > > ] > ] ( . : | 2 , y y y ", -"e z p 5 5 2 2 2 , 3 ) c b 2 5 7 7 5 a . - > > > > > ] ( . < 4 2 , y y y ", -"e z p 5 7 2 4 < , 3 ) b 7 4 7 4 a 7 7 . > > ] ] ] > ] ( . 2 2 | { y y y ", -"e z p 5 2 5 4 : ! 3 ) b 6 7 2 6 5 5 0 . > > > > > > ] ( . < 4 < { y y y ", -"e z p 5 4 6 2 < ~ 3 ) e 0 4 5 4 7 4 a . - > ] > ] > ] ( . < | < ! y y y ", -"e z p 5 2 6 7 2 ! 3 ) a b 5 2 7 6 7 b . - - > > > > ] ( . | | | ~ y y y ", -"e z p 5 4 4 6 1 , 3 ) b 0 4 2 4 a 4 a . - - > > > ] ] ( . 2 | < , y y y ", -"e z p 5 2 7 2 2 { 3 ) b 6 2 2 6 0 2 b . - - > > ] ] ] ( . < | 2 , y y y ", -"e z p 5 4 4 6 2 { 3 ) e 0 4 2 5 6 5 a . > > ] > > > ] ( . | | < { y y y ", -"e y p 5 4 7 4 < ~ 3 ) e 0 6 2 7 5 7 b . - > > ] > > ] ( . < 4 : { y y y ", -"e y p 5 5 4 7 : ! 3 ) c b 2 2 4 5 2 a . - - ] ] > ] ] ( . 2 5 < { y y y ", -"e y p 5 4 6 5 : ~ 3 ) a 0 4 2 4 6 4 b . > - ] > > > ] ( . | 4 < , y w w ", -"e y p 5 4 7 7 < ! 3 ) b a 6 4 7 6 4 c . - > > - ] > ] ( . : 2 < ! w y y ", -"e y p 5 5 4 4 < ~ 3 ) g 6 7 5 6 0 4 0 . - - > > > > > ( . 2 2 | ! y y y ", -"e y p 5 2 6 5 | ! 3 ) c 6 5 7 2 5 7 0 . - ] > > > > ] ( . : 2 2 ~ w w w ", -"e y p 5 6 4 7 2 , 3 ) c b 4 4 2 0 4 a . - - ] > ] > ] ( . : 2 2 { w w w ", -"e y p 5 2 4 4 2 ~ 3 ) c 0 5 6 5 6 4 c . - - > > > > ] ( . : 4 < ~ w w w ", -"e y p 5 5 5 6 < ! 3 ) b 6 4 4 7 0 7 a . - > > > > > ] ( . 2 | < , w w w ", -"e y p 5 4 5 7 | , 3 ) c a 4 6 4 a 4 a . - > ] > > ] ] ( . : 5 < , w w w ", -"e y p 5 6 6 4 < ! 3 ) c b 5 2 4 4 2 0 . - ] > > > ] ] ( . | 2 2 { w w w ", -"e y p 5 4 4 4 | { 3 ) b 0 5 5 4 0 2 7 . - - > ] - > ] ( . : 4 < { w w w ", -"e y p 5 2 2 7 : { 3 ) a a 5 5 4 6 4 a . - > ] > > > ] ( . 2 4 < { w w w ", -"e y p 5 4 2 4 | { 3 ) e 6 6 6 7 6 5 0 . - - ] > ] ] ] ( . : 2 | ! w w w ", -"e y p 5 4 5 7 2 { 3 ) b b 2 2 4 6 4 0 . - - > ] ] > ] ( . 2 2 < ! w w w ", -"e y p 5 4 4 5 | { 3 ) b a 4 2 7 a 6 0 . - > > - > ] ] ( . 2 5 < ~ v v v ", -"e y o 5 4 4 4 < { 3 ) a a 4 2 2 0 4 0 . - > > ] - > ] ( . | 5 : { v w w ", -"e y o 5 4 5 7 : ~ 3 ) e a 4 5 4 6 2 c . - - ] > > > ] ( . | < | ~ v v v ", -"e w o 5 2 6 7 | { 3 ) c 7 7 2 6 6 2 b . - > ] > > > ] ( . 2 | 2 { v v v ", -"e w o 5 4 5 2 | ! 3 ) g 6 4 2 2 a 7 0 . - - ] > > > ] ( . | 5 2 ! v v v ", -"e x o 5 5 2 6 < { 3 ) e a 7 4 6 5 6 7 . - > - > > > ] ( . : | | ~ v v v ", -"e w o 5 7 5 4 : ~ 3 ) c 6 7 5 5 7 2 0 . - > > > > ] ] ( . 2 5 2 { v v v ", -"e w o 5 7 6 5 < { 3 ) a b 6 5 4 0 5 a . > - > > > > ] ( . < 2 < ~ v v v ", -"e w o 5 4 5 5 2 { 3 ) c 0 4 5 5 0 4 c . - - > ] ] > ] ( . | | | { v v v ", -"e x o 5 2 4 7 2 , 3 ) a b 5 2 4 0 2 b . - - ] > > > ] ( . 2 2 < { v v v ", -"e x o 5 5 4 2 2 { 3 ) a 6 4 7 6 a 4 b . > - > > > ] ] ( . | 4 | , v v v ", -"e w o 5 2 4 5 < ~ 3 ) b 6 4 5 7 7 2 0 . - > ] > ] > ] ( . 2 4 | ! v v v ", -"e x o 5 5 2 2 | ! 3 ) b 6 6 4 4 0 4 0 . - - ] ] ] ] ] ( . | | 2 ! v v v ", -"e x o 5 7 2 7 2 ! 3 ) a b 5 4 4 a 7 a . & > ] > > ] ] ( . 2 | : { v v v ", -"e w o 5 7 2 4 2 ! 3 ) a 0 6 4 6 5 7 7 . > > > > ] ] ] ( . | 4 < ~ v v v ", -"e w o 5 5 4 5 | ! 3 ) c 6 6 5 4 7 5 0 . - > > > > > ] ( . < | | { v v v ", -"e v o 5 7 4 6 2 ! 3 ) a b 4 7 4 5 5 b . - - ] ] ] ] ] ( . < 2 2 { v v v ", -"e v o 5 4 6 6 2 { 3 ) a b 4 5 7 0 5 0 . > > > > ] ] ] ( . | 4 < , v v v ", -"e v o 5 7 2 2 | ! 3 ) c a 5 4 2 a 6 0 . - - > - > ] ] ( . | < 2 ! v v v ", -"e v o 5 6 2 2 < ~ 3 ) e 0 5 7 7 5 4 c . - - > > > ] ] ( . : 5 2 ~ v v v ", -"e v o 5 4 4 6 < { 3 ) c a 4 5 7 7 6 b . - > > ] > > ] ( . | 2 2 ! v v v ", -"e v o 5 6 4 2 | , 3 ) f 6 5 4 4 6 5 a . - - ] > > > ] ( . | 2 | ~ v v v ", -"e v o 4 4 5 6 | { 3 ) b a 4 7 2 0 5 a . - > > ] > ] ] ( . < 2 2 ! v v v ", -"e v o 5 5 6 4 | { 3 ) b 7 4 4 2 0 4 b . - > > > > ] ] ( . | | < , v u u ", -"e v o 5 4 4 5 2 ! 3 ) b 0 6 2 7 a 7 b . - - ] > - > ] ( . | 4 2 , u v v ", -"e v o 4 4 5 5 < { 3 ) c 0 4 5 6 0 2 a . > > > ] > ] ] ( . | 5 | ! u u u ", -"e v o 5 5 5 7 2 ~ 3 ) g 6 2 2 4 0 2 0 . - > > ] > ] ] ( . 2 2 2 , v u u ", -"e v o 4 7 2 6 : ~ 3 ) e 0 5 2 5 0 5 b . - - ] > ] ] ] ( . < | | ! u u u ", -"e v m 4 2 2 2 : ~ 3 ) b 0 5 4 7 5 4 b . - - ] > > > ] ( . < 4 | ! u u u ", -"e v m 5 4 2 4 | ! 3 ) e a 4 4 4 a 2 0 . - - > > > > ] ( . < 4 | { u u u ", -"e v m 4 5 4 5 2 , 3 ) b 7 2 4 2 0 4 b . > > ] > > > ] ( . | | 2 ~ u u u ", -"e v m 4 4 4 6 2 ! 3 ) b 6 6 4 5 a 4 0 . - > > ] > ] ] ( . 2 2 | , u u u ", -"e v m 4 4 4 5 | ! 3 ) b 6 4 6 6 6 4 a . - > > ] > > ] ( . | 5 < ~ u u u ", -"e v m 4 5 5 7 | ! 3 ) b 6 7 6 6 6 5 a . - - > ] > > > ( . < 4 2 , u u u ", -"e v m 4 4 2 4 : { 3 ) c 7 7 4 4 5 7 0 . - - ] > > > ] ( . | | | { u u u ", -"e v m 4 6 7 5 2 ! 3 ) b 6 5 4 5 0 6 b . - > ] > > ] ] ( . < 5 | ~ u u u ", -"e v m 4 5 4 7 < ! 3 ) g 7 4 4 7 7 5 b . - - > ] > ] ] ( . 2 < 2 ! u u u ", -"e v m 4 6 2 5 | { 3 ) c 0 2 6 7 a 4 0 . - - ] ] > ] ] ( . : | | ~ u u u ", -"e u m 4 2 4 6 < { 3 ) c 7 4 2 7 6 4 b . - > > - ] ] ] ( . | 4 | { u u u ", -"e v m 4 2 7 5 2 ! 3 ) e 6 5 4 5 a 2 c . - > > > ] - ] ( . < 5 2 { u u u ", -"e u m 4 5 2 4 < , 3 ) c a 2 4 4 6 5 b . > > ] ] ] > ] ( . 2 5 < { u u u ", -"e u m 4 4 4 4 | ~ 3 ) b 0 4 4 6 a 6 0 . - > > - ] > ] ( . 2 < | ~ u u u ", -"e v m 4 4 6 4 | , 3 ) b 0 7 4 6 a 4 0 . - > ] ] ] > ] ( . : | | , u u u ", -"e u m 4 6 2 6 : ! 3 ) b 6 4 6 2 7 5 0 . - - > > > > ] ( . 1 5 | , u u u ", -"e u m 4 2 4 4 : { 3 ) c a 5 5 4 a 4 0 . - > > > > ] ] ( . < | | { u u u ", -"e u m 4 4 2 2 | ~ 3 ) a 0 5 2 2 a 5 0 . - > > > > > ] ( . 2 5 | { u u u ", -"e u m 4 4 2 2 | ! 3 ) c 0 4 5 7 5 2 a . - - > > > - ] ( . 2 4 < { u u u ", -"e u m 4 6 6 4 : { 3 ) b 7 2 2 4 6 4 a . - - ] > > ] ] ( . : 5 2 , u u u ", -"e u m 4 4 4 5 < { 3 ) c b 5 6 4 7 4 a . - > > > ] ] ] ( . 2 < < ~ t t t ", -"e u m 4 5 7 4 2 ! 3 ) c b 5 6 4 0 2 c . - ] ] > ] > ] ( . 2 | | ! t t t ", -"e u m 4 5 4 2 2 ~ 3 ) c a 5 6 4 0 4 c . > > > > - > ] ( . : 4 < ! t t t ", -"e u m 4 6 5 4 | { 3 ) b 0 2 4 4 0 4 0 . - - ] > ] > > ( . | 2 | { t t t ", -"e u m 4 4 2 5 : { 3 ) e a 2 4 4 7 7 a . - > ] > > > ] ( . : 4 : { t t t ", -"e u m 4 7 4 7 | , 3 ) f 6 6 4 2 0 6 a . - - > > > ] ] ( . 2 5 2 ! s s s ", -"e u m 4 4 2 6 | , 3 ) e a 4 4 4 6 4 b . > ] > > > ] ] ( . : 4 2 , s t t ", -"e u m 4 4 2 5 < , 3 ) c 7 2 7 2 a 2 b . - > ] > > > ] ( . : | 2 ! t s s ", -"e u m 4 7 6 2 | ! 3 ) e 0 2 4 7 7 6 7 . - > > > ] > ] ( . | 2 2 , t s s ", -"e u m 4 7 4 6 : ~ 3 ) a 0 2 5 5 0 6 c . - > > ] ] ] ] ( . | 4 : ! s s s ", -"e u m 4 4 5 5 : { 3 ) c 6 2 4 4 6 5 0 . - > > ] > ] ] ( . | < 2 ~ s s s ", -"e u m 4 5 5 6 | , 3 ) b b 2 4 5 5 5 a . > > > > > > ] ( . | 4 2 { s s s ", -"e u m 4 7 4 6 | ~ 3 ) c a 4 4 2 a 5 b . > - > ] ] > ] ( . 2 | 2 ~ s s s ", -"e u m 4 2 6 7 : ! 3 ) b 0 2 6 4 0 4 c . > > > > ] > ] ( . : | | ! s s s ", -"e t m 4 6 2 5 2 ~ 3 ) b 0 2 2 4 6 4 c . - > > > ] > ] ( . : 2 < , s s s ", -"e t m 4 2 4 4 2 ! 3 ) a a 5 4 5 a 4 b . - > ] > ] > ] ( . < 4 | { s s s ", -"e t m 4 4 5 4 | { 3 ) e 6 5 7 5 6 5 b . > > ] > ] ] ] ( . < 5 2 ~ s s s ", -"e t m 4 2 5 7 : { 3 ) a b 4 5 6 0 4 0 . > > ] ] > > ] ( . 2 < < ! s s s ", -"e t m 4 5 6 7 | ! 3 ) b a 2 4 4 5 4 c . & - > > ] > ] ( . | 5 : ! s s s ", -"e t m 4 2 7 4 | ~ 3 ) c b 7 2 4 0 6 a . > > > ] ] ] ] ( . : 4 : , s s s ", -"e t m 4 2 5 4 : { 3 ) a b 5 2 5 6 6 0 . > > > > ] ] ] ( . 2 | < { s s s ", -"e s m 4 4 5 2 | { 3 ) b 6 2 5 4 5 7 b . - > > > > ] ] ( . 2 | : { s s s ", -"e t k 4 5 7 6 2 { 3 ) e b 5 4 6 a 4 b . - - > ] ] ] ] ( . 2 | < { s s s ", -"e t s 4 2 6 7 4 { 3 ) a a 7 5 2 4 6 0 . - > ] ] > > ] ( . < | 2 { s s s ", -"e s s 4 4 5 5 5 ! 3 ) b 7 2 4 7 4 7 0 . - > > > > > ] ( . < 4 : ! s s s ", -"e s s 4 5 4 4 2 { 3 ) b b 5 6 5 2 4 a . - > > ] > ] ] ( . < 5 | ~ s s s ", -"e s s 2 5 2 2 5 ~ 3 ) b 0 4 5 5 6 6 7 . > > > > ] > ] ( . 2 | | { s s s ", -"e s s 2 5 5 5 4 { 3 ) a 0 2 4 4 6 4 c . - - ] > > ] ] ( . 2 4 | { s r r ", -"e s r 2 5 5 7 2 ! 3 ) b a 2 7 2 4 4 0 . - > > ] > ] ] ( . 1 | | ~ s s s ", -"e s r 2 7 5 5 7 , 3 ) c b 2 5 5 6 2 0 . - > > ] ] ] ] ( . 2 4 : { r r r ", -"e s r 2 5 4 5 4 { 3 ) c a 4 2 7 2 2 a . - - ] > > ] ] ( . : | 2 ~ r r r ", -"e s r 2 5 2 2 7 ~ 3 ) c 7 2 4 4 2 4 0 . - > ] > ] > ] ( . 2 2 | ~ r r r ", -"e s r 2 2 4 4 7 ! 3 ) b 7 2 2 4 4 7 7 . - > > > ] > ] ( . 2 2 | { r r r ", -"e s r 2 5 7 2 4 { 3 ) c b 7 4 4 5 6 0 . - > > - > > ] ( . < 4 : , r r r ", -"e s r 2 2 4 4 6 ~ 3 ) c a 2 6 6 2 7 a . > - ] > > > ] ( . < 2 2 ~ r r r ", -"e s r 2 2 5 4 2 ! 3 ) b 6 7 2 6 2 5 0 . > > > > > > ] ( . < 4 < { r r r ", -"e s r 2 4 2 5 4 ~ 3 ) c 0 4 4 2 2 4 b . - > > > ] > ] ( . : 2 < , r r r ", -"e s r 2 7 4 5 4 ! 3 ) c b 4 2 4 4 7 b . - - ] > > > ] ( . < 5 : { r r r ", -"e s r 2 4 6 5 5 ! 3 ) a a 5 4 5 4 6 0 . - > > > - ] ] ( . | 2 | ~ r r r ", -"e r r 2 4 4 6 2 ! 3 ) c 6 7 4 4 2 4 0 . > - > ] > > ] ( . : | | ! r r r ", -"e s r 2 6 6 2 7 ~ 3 ) c 0 4 2 5 2 7 0 . - > ] > > > ] ( . | 5 < , r r r ", -"e r r 2 5 6 6 4 { 3 ) e b 7 4 5 4 2 0 . > - ] > > > ] ( . | | | ~ r r r ", -"e r r 2 4 6 4 4 ! 3 ) e b 4 5 4 2 7 b . - > ] ] > > ] ( . 2 | | ! r r r ", -"e r p 2 6 5 5 4 ~ 3 ) c 0 4 4 5 2 4 b . - - ] > ] ] > ( . 2 2 | { p p p ", -"e r p 2 5 7 4 7 { 3 ) e b 6 2 2 6 5 0 . - - > > > ] ] ( . | 4 : , p r r ", -"e r p 2 7 4 4 6 , 3 ) c 6 4 2 4 4 6 0 . - > ] > > > ] ( . : < 2 ~ r p p ", -"e r p 1 5 6 6 5 { 3 ) g 6 4 7 4 2 5 a . - - > > ] > ] ( . | 4 : { p p p ", -"e r p 1 4 6 5 2 ! 3 ) b 0 2 4 6 4 5 b . - - > > ] ] > ( . : | : ! p p p ", -"e r p 1 4 5 4 6 { 3 ) c b 4 6 6 4 6 c . > > ] > > > ] ( . : | | , p p p ", -"e r p 1 5 5 4 5 ! 3 ) e 6 4 2 7 4 7 a . - > ] > ] > ] ( . 2 2 : ~ p p p ", -"e r p 1 7 6 6 2 ! 3 ) b a 5 2 5 5 2 0 . - > ] > ] ] ] ( . : < | { p p p ", -"e r p 1 2 2 7 4 ~ 3 ) b 6 5 5 5 6 7 0 . > ] ( ( ( ( ( ( . | 2 < ~ p p p ", -"e p p | 4 5 6 5 / _ = e 7 2 7 7 7 4 c . ] ( [ : 9 [ | : . < 2 : ! p p p ", -"e p p | 7 4 2 2 4 ) + j b 5 4 4 4 4 5 . . . . . . . . . . : | < ! p p p ", -"e p p | 5 5 5 5 6 g n n 6 4 5 5 5 2 4 | : _ < / / _ / / _ < 4 2 ~ p p p ", -"e p p | 2 4 4 6 6 6 c 0 7 2 6 6 2 7 4 5 | 2 < 2 | | 2 2 < 2 4 2 ~ p p p ", -"e p p | 5 4 5 6 6 4 7 7 4 7 2 4 4 4 7 5 2 5 4 4 2 2 4 5 4 4 4 : { p p p ", -"e p p 5 4 4 _ _ : / / _ _ < : _ _ : : : _ : _ : / _ < / : < _ / ; p o o ", -"e p o h _ * $ @ * @ $ $ $ $ $ $ $ % $ $ $ @ $ $ @ $ $ $ % $ $ $ $ p p p ", -"e p p o o o o p p p p o o p o p o o o o p p o o p o o o o p o p o o o o ", -"e p m k i i i i i i i i i i i i i i i i i i i i i i k i i i k k m o o o ", -"e p f b b b b b b a b b b b b b a b b b a b b b b a a b a b a b f m o o ", -"e p d < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / / : < m p p ", -"e p d : / ^ ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : s r o ", -"e p d / ^ ^ { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { ^ / : u s s ", -"e p d / ^ { ' ; = * * * * * * * * * * * * * * * * * = = ; ' { ^ / t r r ", -"e p d ^ { ' ; = * * $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t r r ", -"e p d ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t r r ", -"e o d { { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t r r ", -"e o d ^ { , = * % @ + + + + + + + + + + + + + + + + @ $ * = , { / t r r ", -"e o d ^ { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t r r ", -"e o d / ^ { ' ; = = * * * * * * * * * * * * * * * * = = ; ' { ^ / t r r ", -"e o d / ^ { { ' , = ; = = = = = = = = = = = = = = ; ; , ' { { / _ t r r ", -"e o f : / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : u r r ", -"e o i < < _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ ^ / _ < < y r r ", -"e o p s z B D B B B B B B B B B B B B B B B B B B B B B B B C B C v p p ", -"e o o r s s s s s s s s t t s s s s s s s s s s t t s t s s t s s p o o ", -"e o m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m ", -"e o m : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ m m m ", -"e o m I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I t m m ", -"e o m I N R S S S S S S S S S S S S S S S S S S S S S S S S S S S 0 m m ", -"e o m E L Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R Q O : m m ", -"e o m G L P O O O O O O O O O O O O O O O O O O O O O O O O O O L } m m ", -"e m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L | m m ", -"e m m G L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m m ", -"e m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m m ", -"e m m G L Q O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m m ", -"e m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m m ", -"e m m G L P O O P P P P P P P P P P P P P P P P P P P P P P P O M } m m ", -"e m m E L J L L L L L L L L L L L L L L L L L L L L L L L L M J E 1 k k ", -"e m m H t e b c b b b b b b b b b b b b b b b b b b b b b b c a 0 1 m m ", -"e m k c ; @ + + + + + + + + + + + + + + + + + + + + + + + + + + + @ m m ", -"e m m k k m m k m m m m m k k k m k m m m m k m m k m m k m m k k k m m ", -"e d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ", -"4 / ^ { { { { { { ^ { { ^ { { ^ { { ^ { { { { ^ { { ^ { { { { { ^ { { { "}; +char const * output_xpm[] = { +"36 224 55 1", +" c None", +". c #595966", +"+ c #2E3038", +"@ c #000000", +"# c #474951", +"$ c #404044", +"% c #7A7A8F", +"& c #27272B", +"* c #616176", +"= c #737384", +"- c #757585", +"; c #D4D4D4", +"> c #D6D6D6", +", c #D3D3D4", +"' c #C3C3C6", +") c #848491", +"! c #D5D5D5", +"~ c #CACACB", +"{ c #93939C", +"] c #9D9DA5", +"^ c #C8C8CA", +"/ c #787888", +"( c #B6B6BA", +"_ c #A3A3AA", +": c #C5C5C7", +"< c #A7A7AE", +"[ c #C4C4C6", +"} c #7D7D8C", +"| c #797989", +"1 c #C0C0C2", +"2 c #AFAFB4", +"3 c #BFBFC2", +"4 c #D3D3D3", +"5 c #95959F", +"6 c #D5D5D6", +"7 c #D1D1D2", +"8 c #91919B", +"9 c #757586", +"0 c #8E8E99", +"a c #D1D1D1", +"b c #8F8F99", +"c c #CBCBCD", +"d c #92929C", +"e c #7F7F8D", +"f c #8C8C97", +"g c #96969F", +"h c #AFAFB5", +"i c #CECECF", +"j c #A6A6AD", +"k c #8A8A96", +"l c #CCCCCD", +"m c #9898A1", +"n c #333342", +"o c #32323E", +"p c #313136", +"....................................", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++++++++++++@@@@@@@@@@++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +"....................................", +".++++++++++++++++++++++++++++++++++.", +".+================================+.", +".+================================+.", +".+================================+.", +".+===-;====->>,')->>!~{=-;==]^)===+.", +".+===-;====-;=/((-;=-_:=-;=<[}====+.", +".+===-;====-;=|((-;=-_1=-;23/=====+.", +".+===-;====->>,[)->>>45=-678======+.", +".+===-;====-;====-;=90a|-;bcd=====+.", +".+===-;====-;====-;=9b;e-;=fcg====+.", +".+===->>>>h-;====->>6ij=-;==klm===+.", +".+================================+.", +".+================================+.", +".+================================+.", +".++nopppppppppon++++nopppppppppon++.", +"...................................."}; diff --git a/hdspmixer/pixmaps/output_r.xpm b/hdspmixer/pixmaps/output_r.xpm index 78fc61b..51b1984 100644 --- a/hdspmixer/pixmaps/output_r.xpm +++ b/hdspmixer/pixmaps/output_r.xpm @@ -1,468 +1,282 @@ /* XPM */ -char * output_r_xpm[] = { -"36 208 257 2", -" c None", -". c #000000", -"+ c #080808", -"@ c #080810", -"# c #001008", -"$ c #101010", -"% c #181010", -"& c #002010", -"* c #101818", -"= c #181818", -"- c #002918", -"; c #202018", -"> c #003118", -", c #202020", -"' c #202029", -") c #292020", -"! c #202920", -"~ c #292920", -"{ c #292929", -"] c #004120", -"^ c #293131", -"/ c #313131", -"( c #104A29", -"_ c #393939", -": c #394139", -"< c #414141", -"[ c #20524A", -"} c #4A4141", -"| c #414A41", -"1 c #4A4A41", -"2 c #4A4A4A", -"3 c #524A41", -"4 c #4A524A", -"5 c #525252", -"6 c #525A52", -"7 c #5A5A52", -"8 c #625A4A", -"9 c #317B20", -"0 c #5A625A", -"a c #62625A", -"b c #626A62", -"c c #6A6A62", -"d c #6A6A6A", -"e c #736A62", -"f c #737373", -"g c #7B736A", -"h c #737B73", -"i c #737B7B", -"j c #7B7B73", -"k c #7B7B7B", -"l c #7B8373", -"m c #7B837B", -"n c #83837B", -"o c #838383", -"p c #838B83", -"q c #8B8B83", -"r c #8B8B8B", -"s c #8B948B", -"t c #94948B", -"u c #949494", -"v c #949C94", -"w c #949C9C", -"x c #9C9C94", -"y c #9C9C9C", -"z c #9CA49C", -"A c #9CA4A4", -"B c #A4A49C", -"C c #A4A4A4", -"D c #A4ACA4", -"E c #ACACA4", -"F c #ACACAC", -"G c #B4B4AC", -"H c #BDBDB4", -"I c #C5C5BD", -"J c #CDCDCD", -"K c #D5D5CD", -"L c #DEDED5", -"M c #DEE6DE", -"N c #E6E6E6", -"O c #EEEEEE", -"P c #F6EEEE", -"Q c #F6F6F6", -"R c #F6FFFF", -"S c #FFFFFF", -"T c #6633FF", -"U c #666600", -"V c #666633", -"W c #666666", -"X c #666699", -"Y c #6666CC", -"Z c #6666FF", -"` c #669900", -" . c #669933", -".. c #669966", -"+. c #669999", -"@. c #6699CC", -"#. c #6699FF", -"$. c #66CC00", -"%. c #66CC33", -"&. c #66CC66", -"*. c #66CC99", -"=. c #66CCCC", -"-. c #66CCFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0099FF", -"p+ c #00CCFF", -"q+ c #00FFFF", -"r+ c #3300FF", -"s+ c #3333FF", -"t+ c #3366FF", -"u+ c #3399FF", -"v+ c #33CCFF", -"w+ c #33FFFF", -"x+ c #6600FF", -"y+ c #6633FF", -"z+ c #6666FF", -"A+ c #6699FF", -"B+ c #66CCFF", -"C+ c #66FFFF", -"D+ c #9900FF", -"E+ c #9933FF", -"F+ c #9966FF", -"G+ c #9999FF", -"H+ c #99CCFF", -"2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 { ", -"j g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g / ", -"F F D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D a ", -"C C r m m m m m m m m m m m m m m m m m m m m m m m m m m m m m r x z 6 ", -"C C o < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / _ : < z A 6 ", -"C C p : / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ ^ / < D D 6 ", -"A A p _ / { { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { { / _ F D 6 ", -"A A p / ^ { ' ; = = * * * * * * * * * * * * * * * * * = ; ' { ^ / F D 6 ", -"A A p / { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ * * = ; ' { / F D 6 ", -"A A p ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = ' { ^ F D 6 ", -"A A p ^ { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ F D 6 ", -"A A p / { , = * $ @ + + + + + + + + + + + + + + + + @ % * = , { ^ F D 6 ", -"A A p / { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / F D 6 ", -"A A p / ^ { ' ; = = * * * * * * * * * * * * * * * * = = = ' { ^ / F D 5 ", -"A A p _ ^ { { ' , ; = = = = = = = = = = = = = = ; = ; , ' { { / _ F D 5 ", -"A A r < / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : G D 5 ", -"A A v < < _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / _ < < G D 5 ", -"A A A F 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 G C 5 ", -"z z A D D F F F F F F F F F F F F F F F F F F F F F F F F F F F F C A 5 ", -"A A s b / / / / / / / / / / / / / / / / / / / / / / / / / / / / b s y 5 ", -"z z r 2 7 7 5 5 2 7 4 5 6 2 5 5 5 4 2 2 4 4 4 4 4 6 4 2 5 4 5 2 2 v z 5 ", -"z z r 5 4 7 5 4 7 5 4 4 4 6 5 7 5 7 4 4 4 2 6 2 4 7 6 6 4 4 7 2 / z z 5 ", -"z z r 6 4 5 4 5 2 5 2 7 6 2 2 7 2 7 4 4 2 5 5 5 4 4 4 4 5 5 7 | ! z z 5 ", -"z z r 6 2 4 4 6 6 2 2 6 2 6 2 2 4 5 6 5 4 4 7 2 4 4 2 4 2 2 2 < { z z 5 ", -"z z r 6 6 5 2 5 5 2 2 5 6 6 4 7 0 7 b j n j j l n j k g a 5 7 < { z z 5 ", -"z z r 6 7 2 4 2 { , / < 2 4 2 2 0 4 c . . . . . . . . . . 2 5 2 ! z z 5 ", -"z z r 6 7 7 4 < , g } 4 4 7 4 7 a 4 0 . . . . . . . . . . | 2 2 ! z z 5 ", -"z z r 6 6 4 7 1 ~ 8 { 0 0 5 6 2 6 4 a . & # & & & # & - . | 4 : ~ z z 5 ", -"z z q 6 5 6 2 2 { 3 ) b 7 4 7 4 a 4 7 . & & - - - > - ] . : 4 | { z z 5 ", -"z z r 6 7 2 4 2 , 3 ) c b 7 7 2 0 7 c . > > ] - > ] ] ( . < 2 : ! z z 5 ", -"z z r 6 6 4 2 2 { 3 ) e 0 2 2 2 a 4 0 . - > ] ] > ] ] ( . < 4 2 { z z 5 ", -"z z r 6 6 2 2 < ~ 3 ) b 0 7 2 4 6 2 a . - - > > ] > ] ( . < | 2 ! z y 5 ", -"z z r 6 4 5 4 : ~ 3 ) e 6 5 4 5 6 2 b . - > ] > > ] ] ( . | | 2 , y z 5 ", -"z z p 6 4 2 2 | ! 3 ) b 6 7 4 4 7 5 b . - > > ] > ] ] ( . : | : ~ y y 5 ", -"z z p 6 4 6 2 2 { 3 ) c 6 7 4 2 0 6 b . - > > > ] > ] ( . : 4 | { y y 5 ", -"z z r 6 7 4 6 1 { 3 ) g 0 4 5 4 6 4 b . - > > > > ] ] ( . 2 < | ~ y y 5 ", -"z z p 6 5 4 5 : ! 3 ) b b 2 2 4 7 6 0 . - > ] > > ] ] ( . | 5 : ! y y 5 ", -"z z p 6 6 4 5 | { 3 ) c 0 4 6 4 a 2 a . - - > ] > > ] ( . | 2 | { y y 5 ", -"z z p 5 4 5 4 2 { 3 ) g 7 2 5 4 0 4 a . - - ] ] > > ] ( . < 2 : ! y y 5 ", -"z z p 6 2 7 6 2 { 3 ) c 7 5 5 2 5 7 7 . - - > ] > ] ] ( . : 5 : ! y y 5 ", -"z z p 5 4 7 6 | { 3 ) b 0 2 5 4 5 7 c . - > > - ] > ] ( . | 2 | ! y y 5 ", -"z z p 6 7 5 2 | { 3 ) b a 2 7 2 0 6 b . - - > > ] > ] ( . : | 2 , y y 5 ", -"z z p 5 5 2 2 2 , 3 ) c b 2 5 7 7 5 a . - > > > > > ] ( . < 4 2 , y y 5 ", -"z z p 5 7 2 4 < , 3 ) b 7 4 7 4 a 7 7 . > > ] ] ] > ] ( . 2 2 | { y y 5 ", -"z z p 5 2 5 4 : ! 3 ) b 6 7 2 6 5 5 0 . > > > > > > ] ( . < 4 < { y y 5 ", -"z z p 5 4 6 2 < ~ 3 ) e 0 4 5 4 7 4 a . - > ] > ] > ] ( . < | < ! y y 5 ", -"z z p 5 2 6 7 2 ! 3 ) a b 5 2 7 6 7 b . - - > > > > ] ( . | | | ~ y y 5 ", -"z z p 5 4 4 6 1 , 3 ) b 0 4 2 4 a 4 a . - - > > > ] ] ( . 2 | < , y y 5 ", -"z z p 5 2 7 2 2 { 3 ) b 6 2 2 6 0 2 b . - - > > ] ] ] ( . < | 2 , y y 5 ", -"z z p 5 4 4 6 2 { 3 ) e 0 4 2 5 6 5 a . > > ] > > > ] ( . | | < { y y 5 ", -"y y p 5 4 7 4 < ~ 3 ) e 0 6 2 7 5 7 b . - > > ] > > ] ( . < 4 : { y y 5 ", -"y y p 5 5 4 7 : ! 3 ) c b 2 2 4 5 2 a . - - ] ] > ] ] ( . 2 5 < { y y 5 ", -"y y p 5 4 6 5 : ~ 3 ) a 0 4 2 4 6 4 b . > - ] > > > ] ( . | 4 < , y w 5 ", -"y y p 5 4 7 7 < ! 3 ) b a 6 4 7 6 4 c . - > > - ] > ] ( . : 2 < ! w y 5 ", -"y y p 5 5 4 4 < ~ 3 ) g 6 7 5 6 0 4 0 . - - > > > > > ( . 2 2 | ! y y 5 ", -"y y p 5 2 6 5 | ! 3 ) c 6 5 7 2 5 7 0 . - ] > > > > ] ( . : 2 2 ~ w w 5 ", -"y y p 5 6 4 7 2 , 3 ) c b 4 4 2 0 4 a . - - ] > ] > ] ( . : 2 2 { w w 5 ", -"y y p 5 2 4 4 2 ~ 3 ) c 0 5 6 5 6 4 c . - - > > > > ] ( . : 4 < ~ w w 4 ", -"y y p 5 5 5 6 < ! 3 ) b 6 4 4 7 0 7 a . - > > > > > ] ( . 2 | < , w w 4 ", -"y y p 5 4 5 7 | , 3 ) c a 4 6 4 a 4 a . - > ] > > ] ] ( . : 5 < , w w 5 ", -"y y p 5 6 6 4 < ! 3 ) c b 5 2 4 4 2 0 . - ] > > > ] ] ( . | 2 2 { w w 4 ", -"y y p 5 4 4 4 | { 3 ) b 0 5 5 4 0 2 7 . - - > ] - > ] ( . : 4 < { w w 4 ", -"y y p 5 2 2 7 : { 3 ) a a 5 5 4 6 4 a . - > ] > > > ] ( . 2 4 < { w w 4 ", -"y y p 5 4 2 4 | { 3 ) e 6 6 6 7 6 5 0 . - - ] > ] ] ] ( . : 2 | ! w w 4 ", -"y y p 5 4 5 7 2 { 3 ) b b 2 2 4 6 4 0 . - - > ] ] > ] ( . 2 2 < ! w w 4 ", -"y y p 5 4 4 5 | { 3 ) b a 4 2 7 a 6 0 . - > > - > ] ] ( . 2 5 < ~ v v 4 ", -"y y o 5 4 4 4 < { 3 ) a a 4 2 2 0 4 0 . - > > ] - > ] ( . | 5 : { v w 4 ", -"y y o 5 4 5 7 : ~ 3 ) e a 4 5 4 6 2 c . - - ] > > > ] ( . | < | ~ v v 4 ", -"w w o 5 2 6 7 | { 3 ) c 7 7 2 6 6 2 b . - > ] > > > ] ( . 2 | 2 { v v 4 ", -"w w o 5 4 5 2 | ! 3 ) g 6 4 2 2 a 7 0 . - - ] > > > ] ( . | 5 2 ! v v 4 ", -"x x o 5 5 2 6 < { 3 ) e a 7 4 6 5 6 7 . - > - > > > ] ( . : | | ~ v v 4 ", -"w w o 5 7 5 4 : ~ 3 ) c 6 7 5 5 7 2 0 . - > > > > ] ] ( . 2 5 2 { v v 4 ", -"w w o 5 7 6 5 < { 3 ) a b 6 5 4 0 5 a . > - > > > > ] ( . < 2 < ~ v v 4 ", -"w w o 5 4 5 5 2 { 3 ) c 0 4 5 5 0 4 c . - - > ] ] > ] ( . | | | { v v 4 ", -"x x o 5 2 4 7 2 , 3 ) a b 5 2 4 0 2 b . - - ] > > > ] ( . 2 2 < { v v 4 ", -"x x o 5 5 4 2 2 { 3 ) a 6 4 7 6 a 4 b . > - > > > ] ] ( . | 4 | , v v 4 ", -"w w o 5 2 4 5 < ~ 3 ) b 6 4 5 7 7 2 0 . - > ] > ] > ] ( . 2 4 | ! v v 4 ", -"x x o 5 5 2 2 | ! 3 ) b 6 6 4 4 0 4 0 . - - ] ] ] ] ] ( . | | 2 ! v v 4 ", -"x x o 5 7 2 7 2 ! 3 ) a b 5 4 4 a 7 a . & > ] > > ] ] ( . 2 | : { v v 4 ", -"w w o 5 7 2 4 2 ! 3 ) a 0 6 4 6 5 7 7 . > > > > ] ] ] ( . | 4 < ~ v v 4 ", -"w w o 5 5 4 5 | ! 3 ) c 6 6 5 4 7 5 0 . - > > > > > ] ( . < | | { v v 4 ", -"x v o 5 7 4 6 2 ! 3 ) a b 4 7 4 5 5 b . - - ] ] ] ] ] ( . < 2 2 { v v 4 ", -"x v o 5 4 6 6 2 { 3 ) a b 4 5 7 0 5 0 . > > > > ] ] ] ( . | 4 < , v v 4 ", -"x v o 5 7 2 2 | ! 3 ) c a 5 4 2 a 6 0 . - - > - > ] ] ( . | < 2 ! v v 4 ", -"x v o 5 6 2 2 < ~ 3 ) e 0 5 7 7 5 4 c . - - > > > ] ] ( . : 5 2 ~ v v 4 ", -"x v o 5 4 4 6 < { 3 ) c a 4 5 7 7 6 b . - > > ] > > ] ( . | 2 2 ! v v 4 ", -"x v o 5 6 4 2 | , 3 ) f 6 5 4 4 6 5 a . - - ] > > > ] ( . | 2 | ~ v v 4 ", -"v v o 4 4 5 6 | { 3 ) b a 4 7 2 0 5 a . - > > ] > ] ] ( . < 2 2 ! v v 4 ", -"v v o 5 5 6 4 | { 3 ) b 7 4 4 2 0 4 b . - > > > > ] ] ( . | | < , v u 4 ", -"v v o 5 4 4 5 2 ! 3 ) b 0 6 2 7 a 7 b . - - ] > - > ] ( . | 4 2 , u v 4 ", -"v v o 4 4 5 5 < { 3 ) c 0 4 5 6 0 2 a . > > > ] > ] ] ( . | 5 | ! u u 4 ", -"v v o 5 5 5 7 2 ~ 3 ) g 6 2 2 4 0 2 0 . - > > ] > ] ] ( . 2 2 2 , v u 4 ", -"v v o 4 7 2 6 : ~ 3 ) e 0 5 2 5 0 5 b . - - ] > ] ] ] ( . < | | ! u u 4 ", -"v v m 4 2 2 2 : ~ 3 ) b 0 5 4 7 5 4 b . - - ] > > > ] ( . < 4 | ! u u 4 ", -"v v m 5 4 2 4 | ! 3 ) e a 4 4 4 a 2 0 . - - > > > > ] ( . < 4 | { u u 4 ", -"v v m 4 5 4 5 2 , 3 ) b 7 2 4 2 0 4 b . > > ] > > > ] ( . | | 2 ~ u u 4 ", -"v v m 4 4 4 6 2 ! 3 ) b 6 6 4 5 a 4 0 . - > > ] > ] ] ( . 2 2 | , u u 4 ", -"v v m 4 4 4 5 | ! 3 ) b 6 4 6 6 6 4 a . - > > ] > > ] ( . | 5 < ~ u u 4 ", -"v v m 4 5 5 7 | ! 3 ) b 6 7 6 6 6 5 a . - - > ] > > > ( . < 4 2 , u u 4 ", -"v v m 4 4 2 4 : { 3 ) c 7 7 4 4 5 7 0 . - - ] > > > ] ( . | | | { u u 4 ", -"v v m 4 6 7 5 2 ! 3 ) b 6 5 4 5 0 6 b . - > ] > > ] ] ( . < 5 | ~ u u 4 ", -"v v m 4 5 4 7 < ! 3 ) g 7 4 4 7 7 5 b . - - > ] > ] ] ( . 2 < 2 ! u u 4 ", -"v v m 4 6 2 5 | { 3 ) c 0 2 6 7 a 4 0 . - - ] ] > ] ] ( . : | | ~ u u 4 ", -"u u m 4 2 4 6 < { 3 ) c 7 4 2 7 6 4 b . - > > - ] ] ] ( . | 4 | { u u 4 ", -"v v m 4 2 7 5 2 ! 3 ) e 6 5 4 5 a 2 c . - > > > ] - ] ( . < 5 2 { u u 4 ", -"u u m 4 5 2 4 < , 3 ) c a 2 4 4 6 5 b . > > ] ] ] > ] ( . 2 5 < { u u 4 ", -"u u m 4 4 4 4 | ~ 3 ) b 0 4 4 6 a 6 0 . - > > - ] > ] ( . 2 < | ~ u u 4 ", -"v v m 4 4 6 4 | , 3 ) b 0 7 4 6 a 4 0 . - > ] ] ] > ] ( . : | | , u u 2 ", -"u u m 4 6 2 6 : ! 3 ) b 6 4 6 2 7 5 0 . - - > > > > ] ( . 1 5 | , u u 4 ", -"u u m 4 2 4 4 : { 3 ) c a 5 5 4 a 4 0 . - > > > > ] ] ( . < | | { u u 4 ", -"u u m 4 4 2 2 | ~ 3 ) a 0 5 2 2 a 5 0 . - > > > > > ] ( . 2 5 | { u u 2 ", -"u u m 4 4 2 2 | ! 3 ) c 0 4 5 7 5 2 a . - - > > > - ] ( . 2 4 < { u u 2 ", -"u u m 4 6 6 4 : { 3 ) b 7 2 2 4 6 4 a . - - ] > > ] ] ( . : 5 2 , u u 2 ", -"u u m 4 4 4 5 < { 3 ) c b 5 6 4 7 4 a . - > > > ] ] ] ( . 2 < < ~ t t 2 ", -"u u m 4 5 7 4 2 ! 3 ) c b 5 6 4 0 2 c . - ] ] > ] > ] ( . 2 | | ! t t 2 ", -"u u m 4 5 4 2 2 ~ 3 ) c a 5 6 4 0 4 c . > > > > - > ] ( . : 4 < ! t t 2 ", -"u u m 4 6 5 4 | { 3 ) b 0 2 4 4 0 4 0 . - - ] > ] > > ( . | 2 | { t t 2 ", -"u u m 4 4 2 5 : { 3 ) e a 2 4 4 7 7 a . - > ] > > > ] ( . : 4 : { t t 2 ", -"u u m 4 7 4 7 | , 3 ) f 6 6 4 2 0 6 a . - - > > > ] ] ( . 2 5 2 ! s s 2 ", -"u u m 4 4 2 6 | , 3 ) e a 4 4 4 6 4 b . > ] > > > ] ] ( . : 4 2 , s t 2 ", -"u u m 4 4 2 5 < , 3 ) c 7 2 7 2 a 2 b . - > ] > > > ] ( . : | 2 ! t s 2 ", -"u u m 4 7 6 2 | ! 3 ) e 0 2 4 7 7 6 7 . - > > > ] > ] ( . | 2 2 , t s 2 ", -"u u m 4 7 4 6 : ~ 3 ) a 0 2 5 5 0 6 c . - > > ] ] ] ] ( . | 4 : ! s s 2 ", -"u u m 4 4 5 5 : { 3 ) c 6 2 4 4 6 5 0 . - > > ] > ] ] ( . | < 2 ~ s s 2 ", -"u u m 4 5 5 6 | , 3 ) b b 2 4 5 5 5 a . > > > > > > ] ( . | 4 2 { s s 2 ", -"u u m 4 7 4 6 | ~ 3 ) c a 4 4 2 a 5 b . > - > ] ] > ] ( . 2 | 2 ~ s s 2 ", -"u u m 4 2 6 7 : ! 3 ) b 0 2 6 4 0 4 c . > > > > ] > ] ( . : | | ! s s 2 ", -"t t m 4 6 2 5 2 ~ 3 ) b 0 2 2 4 6 4 c . - > > > ] > ] ( . : 2 < , s s 2 ", -"t t m 4 2 4 4 2 ! 3 ) a a 5 4 5 a 4 b . - > ] > ] > ] ( . < 4 | { s s 2 ", -"t t m 4 4 5 4 | { 3 ) e 6 5 7 5 6 5 b . > > ] > ] ] ] ( . < 5 2 ~ s s 2 ", -"t t m 4 2 5 7 : { 3 ) a b 4 5 6 0 4 0 . > > ] ] > > ] ( . 2 < < ! s s 2 ", -"t t m 4 5 6 7 | ! 3 ) b a 2 4 4 5 4 c . & - > > ] > ] ( . | 5 : ! s s 2 ", -"t t m 4 2 7 4 | ~ 3 ) c b 7 2 4 0 6 a . > > > ] ] ] ] ( . : 4 : , s s 2 ", -"t t m 4 2 5 4 : { 3 ) a b 5 2 5 6 6 0 . > > > > ] ] ] ( . 2 | < { s s 2 ", -"s s m 4 4 5 2 | { 3 ) b 6 2 5 4 5 7 b . - > > > > ] ] ( . 2 | : { s s 2 ", -"t t k 4 5 7 6 2 { 3 ) e b 5 4 6 a 4 b . - - > ] ] ] ] ( . 2 | < { s s 2 ", -"t t s 4 2 6 7 4 { 3 ) a a 7 5 2 4 6 0 . - > ] ] > > ] ( . < | 2 { s s 2 ", -"s s s 4 4 5 5 5 ! 3 ) b 7 2 4 7 4 7 0 . - > > > > > ] ( . < 4 : ! s s 2 ", -"s s s 4 5 4 4 2 { 3 ) b b 5 6 5 2 4 a . - > > ] > ] ] ( . < 5 | ~ s s 2 ", -"s s s 2 5 2 2 5 ~ 3 ) b 0 4 5 5 6 6 7 . > > > > ] > ] ( . 2 | | { s s 2 ", -"s s s 2 5 5 5 4 { 3 ) a 0 2 4 4 6 4 c . - - ] > > ] ] ( . 2 4 | { s r 2 ", -"s s r 2 5 5 7 2 ! 3 ) b a 2 7 2 4 4 0 . - > > ] > ] ] ( . 1 | | ~ s s 2 ", -"s s r 2 7 5 5 7 , 3 ) c b 2 5 5 6 2 0 . - > > ] ] ] ] ( . 2 4 : { r r 2 ", -"s s r 2 5 4 5 4 { 3 ) c a 4 2 7 2 2 a . - - ] > > ] ] ( . : | 2 ~ r r 2 ", -"s s r 2 5 2 2 7 ~ 3 ) c 7 2 4 4 2 4 0 . - > ] > ] > ] ( . 2 2 | ~ r r 2 ", -"s s r 2 2 4 4 7 ! 3 ) b 7 2 2 4 4 7 7 . - > > > ] > ] ( . 2 2 | { r r 2 ", -"s s r 2 5 7 2 4 { 3 ) c b 7 4 4 5 6 0 . - > > - > > ] ( . < 4 : , r r 2 ", -"s s r 2 2 4 4 6 ~ 3 ) c a 2 6 6 2 7 a . > - ] > > > ] ( . < 2 2 ~ r r 2 ", -"s s r 2 2 5 4 2 ! 3 ) b 6 7 2 6 2 5 0 . > > > > > > ] ( . < 4 < { r r 1 ", -"s s r 2 4 2 5 4 ~ 3 ) c 0 4 4 2 2 4 b . - > > > ] > ] ( . : 2 < , r r 2 ", -"s s r 2 7 4 5 4 ! 3 ) c b 4 2 4 4 7 b . - - ] > > > ] ( . < 5 : { r r 2 ", -"s s r 2 4 6 5 5 ! 3 ) a a 5 4 5 4 6 0 . - > > > - ] ] ( . | 2 | ~ r r 1 ", -"r r r 2 4 4 6 2 ! 3 ) c 6 7 4 4 2 4 0 . > - > ] > > ] ( . : | | ! r r 1 ", -"s s r 2 6 6 2 7 ~ 3 ) c 0 4 2 5 2 7 0 . - > ] > > > ] ( . | 5 < , r r 1 ", -"r r r 2 5 6 6 4 { 3 ) e b 7 4 5 4 2 0 . > - ] > > > ] ( . | | | ~ r r 1 ", -"r r r 2 4 6 4 4 ! 3 ) e b 4 5 4 2 7 b . - > ] ] > > ] ( . 2 | | ! r r | ", -"r r p 2 6 5 5 4 ~ 3 ) c 0 4 4 5 2 4 b . - - ] > ] ] > ( . 2 2 | { p p | ", -"r r p 2 5 7 4 7 { 3 ) e b 6 2 2 6 5 0 . - - > > > ] ] ( . | 4 : , p r | ", -"r r p 2 7 4 4 6 , 3 ) c 6 4 2 4 4 6 0 . - > ] > > > ] ( . : < 2 ~ r p 1 ", -"r r p 1 5 6 6 5 { 3 ) g 6 4 7 4 2 5 a . - - > > ] > ] ( . | 4 : { p p | ", -"r r p 1 4 6 5 2 ! 3 ) b 0 2 4 6 4 5 b . - - > > ] ] > ( . : | : ! p p | ", -"r r p 1 4 5 4 6 { 3 ) c b 4 6 6 4 6 c . > > ] > > > ] ( . : | | , p p | ", -"r r p 1 5 5 4 5 ! 3 ) e 6 4 2 7 4 7 a . - > ] > ] > ] ( . 2 2 : ~ p p | ", -"r r p 1 7 6 6 2 ! 3 ) b a 5 2 5 5 2 0 . - > ] > ] ] ] ( . : < | { p p | ", -"r r p 1 2 2 7 4 ~ 3 ) b 6 5 5 5 6 7 0 . > ] ( ( ( ( ( ( . | 2 < ~ p p | ", -"p p p | 4 5 6 5 / _ = e 7 2 7 7 7 4 c . ] ( [ : 9 [ | : . < 2 : ! p p | ", -"p p p | 7 4 2 2 4 ) + j b 5 4 4 4 4 5 . . . . . . . . . . : | < ! p p | ", -"p p p | 5 5 5 5 6 g n n 6 4 5 5 5 2 4 | : _ < / / _ / / _ < 4 2 ~ p p | ", -"p p p | 2 4 4 6 6 6 c 0 7 2 6 6 2 7 4 5 | 2 < 2 | | 2 2 < 2 4 2 ~ p p | ", -"p p p | 5 4 5 6 6 4 7 7 4 7 2 4 4 4 7 5 2 5 4 4 2 2 4 5 4 4 4 : { p p | ", -"p p p 5 4 4 _ _ : / / _ _ < : _ _ : : : _ : _ : / _ < / : < _ / ; p o | ", -"p p o h _ * $ @ * @ $ $ $ $ $ $ $ % $ $ $ @ $ $ @ $ $ $ % $ $ $ $ p p | ", -"p p p o o o o p p p p o o p o p o o o o p p o o p o o o o p o p o o o < ", -"p p m k i i i i i i i i i i i i i i i i i i i i i i k i i i k k m o o | ", -"p p f b b b b b b a b b b b b b a b b b a b b b b a a b a b a b f m o < ", -"p p d < : _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ / / / : < m p | ", -"p p d : / ^ ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : s r < ", -"p p d / ^ ^ { ' , ; = ; = ; = ; = ; = ; = ; = ; = ; ; , ' { ^ / : u s < ", -"p p d / ^ { ' ; = * * * * * * * * * * * * * * * * * = = ; ' { ^ / t r | ", -"p p d ^ { ' ; = * * $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t r < ", -"p p d ^ { ' = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t r < ", -"o o d { { , = * $ @ + + + + + + + + + + + + + + + + @ $ * = , { ^ t r | ", -"o o d ^ { , = * % @ + + + + + + + + + + + + + + + + @ $ * = , { / t r < ", -"o o d ^ { ' ; = * $ $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ * = ; ' { / t r | ", -"o o d / ^ { ' ; = = * * * * * * * * * * * * * * * * = = ; ' { ^ / t r < ", -"o o d / ^ { { ' , = ; = = = = = = = = = = = = = = ; ; , ' { { / _ t r < ", -"o o f : / / ^ { { { ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' { { { ^ / / : u r < ", -"o o i < < _ / / ^ ^ { { { { { { { { { { { { { { { { ^ ^ ^ / _ < < y r < ", -"o o p s z B D B B B B B B B B B B B B B B B B B B B B B B B C B C v p < ", -"o o o r s s s s s s s s t t s s s s s s s s s s t t s t s s t s s p o < ", -"o o m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m < ", -"o o m : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ m m < ", -"o o m I K I I I I I I I I I I I I I I I I I I I I I I I I I I I I t m < ", -"o o m I N R S S S S S S S S S S S S S S S S S S S S S S S S S S S 0 m < ", -"o o m E L Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R Q O : m < ", -"o o m G L P O O O O O O O O O O O O O O O O O O O O O O O O O O L } m < ", -"m m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L | m : ", -"m m m G L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m : ", -"m m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m : ", -"m m m G L Q O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m : ", -"m m m E L P O O O O O O O O O O O O O O O O O O O O O O O O P O L 1 m : ", -"m m m G L P O O P P P P P P P P P P P P P P P P P P P P P P P O M } m < ", -"m m m E L J L L L L L L L L L L L L L L L L L L L L L L L L M J E 1 k : ", -"m m m H t e b c b b b b b b b b b b b b b b b b b b b b b b c a 0 1 m : ", -"m m k c ; @ + + + + + + + + + + + + + + + + + + + + + + + + + + + @ m : ", -"m m m k k m m k m m m m m k k k m k m m m m k m m k m m k m m k k k m : ", -"e d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / ", -"4 / ^ { { { { { { ^ { { ^ { { ^ { { ^ { { { { ^ { { ^ { { { { { ^ { { { "}; +char const * output_r_xpm[] = { +"36 224 55 1", +" c None", +". c #595966", +"+ c #2E3038", +"@ c #000000", +"# c #474951", +"$ c #404044", +"% c #7A7A8F", +"& c #27272B", +"* c #616176", +"= c #737384", +"- c #757585", +"; c #D4D4D4", +"> c #D6D6D6", +", c #D3D3D4", +"' c #C3C3C6", +") c #848491", +"! c #D5D5D5", +"~ c #CACACB", +"{ c #93939C", +"] c #9D9DA5", +"^ c #C8C8CA", +"/ c #787888", +"( c #B6B6BA", +"_ c #A3A3AA", +": c #C5C5C7", +"< c #A7A7AE", +"[ c #C4C4C6", +"} c #7D7D8C", +"| c #797989", +"1 c #C0C0C2", +"2 c #AFAFB4", +"3 c #BFBFC2", +"4 c #D3D3D3", +"5 c #95959F", +"6 c #D5D5D6", +"7 c #D1D1D2", +"8 c #91919B", +"9 c #757586", +"0 c #8E8E99", +"a c #D1D1D1", +"b c #8F8F99", +"c c #CBCBCD", +"d c #92929C", +"e c #7F7F8D", +"f c #8C8C97", +"g c #96969F", +"h c #AFAFB5", +"i c #CECECF", +"j c #A6A6AD", +"k c #8A8A96", +"l c #CCCCCD", +"m c #9898A1", +"n c #333342", +"o c #32323E", +"p c #313136", +"....................................", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".+#######$%###+++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++&*++++++++@@@@@@@@@@++++++.", +".++++++++++++++++++@@@@@@@@@@++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++==============================++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +".++++++++++++++++++++++++++++++++++.", +"....................................", +".++++++++++++++++++++++++++++++++++.", +".+================================+.", +".+================================+.", +".+================================+.", +".+===-;====->>,')->>!~{=-;==]^)===+.", +".+===-;====-;=/((-;=-_:=-;=<[}====+.", +".+===-;====-;=|((-;=-_1=-;23/=====+.", +".+===-;====->>,[)->>>45=-678======+.", +".+===-;====-;====-;=90a|-;bcd=====+.", +".+===-;====-;====-;=9b;e-;=fcg====+.", +".+===->>>>h-;====->>6ij=-;==klm===+.", +".+================================+.", +".+================================+.", +".+================================+.", +".++nopppppppppon++++nopppppppppon++.", +"...................................."}; diff --git a/hdspmixer/pixmaps/over.xpm b/hdspmixer/pixmaps/over.xpm index 6b0e7e3..e56c73b 100644 --- a/hdspmixer/pixmaps/over.xpm +++ b/hdspmixer/pixmaps/over.xpm @@ -1,273 +1,18 @@ /* XPM */ -char * over_xpm[] = { -"30 13 257 2", -" c None", -". c #000000", -"+ c #080000", -"@ c #080808", -"# c #080810", -"$ c #001008", -"% c #101010", -"& c #181010", -"* c #002010", -"= c #101818", -"- c #181818", -"; c #201818", -"> c #002918", -", c #202018", -"' c #003118", -") c #202020", -"! c #202029", -"~ c #292020", -"{ c #202920", -"] c #392020", -"^ c #292920", -"/ c #292929", -"( c #004120", -"_ c #293131", -": c #412920", -"< c #313129", -"[ c #313131", -"} c #104A29", -"| c #393939", -"1 c #394139", -"2 c #414141", -"3 c #20524A", -"4 c #414152", -"5 c #4A4141", -"6 c #414A41", -"7 c #4A4A41", -"8 c #4A4A4A", -"9 c #524A41", -"0 c #4A524A", -"a c #525252", -"b c #734A29", -"c c #5A524A", -"d c #525A52", -"e c #5A5A52", -"f c #625A4A", -"g c #317B20", -"h c #5A625A", -"i c #62625A", -"j c #6A6252", -"k c #626A62", -"l c #6A6A62", -"m c #6A6A6A", -"n c #736A62", -"o c #737373", -"p c #7B736A", -"q c #737383", -"r c #9C7329", -"s c #737B73", -"t c #737B7B", -"u c #7B7B73", -"v c #7B7B7B", -"w c #AC6A5A", -"x c #7B8373", -"y c #7B837B", -"z c #83837B", -"A c #838383", -"B c #838B83", -"C c #8B8B83", -"D c #8B8B8B", -"E c #9C8B73", -"F c #8B948B", -"G c #94948B", -"H c #949494", -"I c #949C94", -"J c #949C9C", -"K c #9C9C94", -"L c #9C9C9C", -"M c #B49C83", -"N c #9CA49C", -"O c #9CA4A4", -"P c #A4A49C", -"Q c #A4A4A4", -"R c #C5A45A", -"S c #A4ACA4", -"T c #ACACA4", -"U c #ACACAC", -"V c #B4B4AC", -"W c #C5B48B", -"X c #BDBDB4", -"Y c #C5C5BD", -"Z c #D5C59C", -"` c #CDCDCD", -" . c #D5D5CD", -".. c #E6D5A4", -"+. c #F6CDCD", -"@. c #DEDED5", -"#. c #DEE6DE", -"$. c #E6E6E6", -"%. c #EEEEEE", -"&. c #F6EEEE", -"*. c #F6F6F6", -"=. c #F6FFFF", -"-. c #FFFFFF", -";. c #66FF00", -">. c #66FF33", -",. c #66FF66", -"'. c #66FF99", -"). c #66FFCC", -"!. c #66FFFF", -"~. c #990000", -"{. c #990033", -"]. c #990066", -"^. c #990099", -"/. c #9900CC", -"(. c #9900FF", -"_. c #993300", -":. c #993333", -"<. c #993366", -"[. c #993399", -"}. c #9933CC", -"|. c #9933FF", -"1. c #996600", -"2. c #996633", -"3. c #996666", -"4. c #996699", -"5. c #9966CC", -"6. c #9966FF", -"7. c #999900", -"8. c #999933", -"9. c #999966", -"0. c #999999", -"a. c #9999CC", -"b. c #9999FF", -"c. c #99CC00", -"d. c #99CC33", -"e. c #99CC66", -"f. c #99CC99", -"g. c #99CCCC", -"h. c #99CCFF", -"i. c #99FF00", -"j. c #99FF33", -"k. c #99FF66", -"l. c #99FF99", -"m. c #99FFCC", -"n. c #99FFFF", -"o. c #CC0000", -"p. c #CC0033", -"q. c #CC0066", -"r. c #CC0099", -"s. c #CC00CC", -"t. c #CC00FF", -"u. c #CC3300", -"v. c #CC3333", -"w. c #CC3366", -"x. c #CC3399", -"y. c #CC33CC", -"z. c #CC33FF", -"A. c #CC6600", -"B. c #CC6633", -"C. c #CC6666", -"D. c #CC6699", -"E. c #CC66CC", -"F. c #CC66FF", -"G. c #CC9900", -"H. c #CC9933", -"I. c #CC9966", -"J. c #CC9999", -"K. c #CC99CC", -"L. c #CC99FF", -"M. c #CCCC00", -"N. c #CCCC33", -"O. c #CCCC66", -"P. c #CCCC99", -"Q. c #CCCCCC", -"R. c #CCCCFF", -"S. c #CCFF00", -"T. c #CCFF33", -"U. c #CCFF66", -"V. c #CCFF99", -"W. c #CCFFCC", -"X. c #CCFFFF", -"Y. c #FF0000", -"Z. c #FF0033", -"`. c #FF0066", -" + c #FF0099", -".+ c #FF00CC", -"++ c #FF00FF", -"@+ c #FF3300", -"#+ c #FF3333", -"$+ c #FF3366", -"%+ c #FF3399", -"&+ c #FF33CC", -"*+ c #FF33FF", -"=+ c #FF6600", -"-+ c #FF6633", -";+ c #FF6666", -">+ c #FF6699", -",+ c #FF66CC", -"'+ c #FF66FF", -")+ c #FF9900", -"!+ c #FF9933", -"~+ c #FF9966", -"{+ c #FF9999", -"]+ c #FF99CC", -"^+ c #FF99FF", -"/+ c #FFCC00", -"(+ c #FFCC33", -"_+ c #FFCC66", -":+ c #FFCC99", -"<+ c #FFCCCC", -"[+ c #FFCCFF", -"}+ c #FFFF00", -"|+ c #FFFF33", -"1+ c #FFFF66", -"2+ c #FFFF99", -"3+ c #FFFFCC", -"4+ c #FFFFFF", -"5+ c #000000", -"6+ c #0D0D0D", -"7+ c #1A1A1A", -"8+ c #282828", -"9+ c #353535", -"0+ c #434343", -"a+ c #505050", -"b+ c #5D5D5D", -"c+ c #6B6B6B", -"d+ c #787878", -"e+ c #868686", -"f+ c #939393", -"g+ c #A1A1A1", -"h+ c #AEAEAE", -"i+ c #BBBBBB", -"j+ c #C9C9C9", -"k+ c #D6D6D6", -"l+ c #E4E4E4", -"m+ c #F1F1F1", -"n+ c #FFFFFF", -"o+ c #0E4C00", -"p+ c #0A0080", -"q+ c #000403", -"r+ c #BE0F17", -"s+ c #0F3404", -"t+ c #7B04BC", -"u+ c #04BD0A", -"v+ c #05050A", -"w+ c #17F700", -"x+ c #A0035A", -"y+ c #019A14", -"z+ c #64176E", -"A+ c #186604", -"B+ c #57019D", -"C+ c #035917", -"D+ c #01030B", -"E+ c #0CF000", -"F+ c #5C0072", -"G+ c #00710C", -"H+ c #B2006C", -"2 1 | [ [ _ _ / / / / / / / / / / / / / / / / _ _ [ [ | 1 2 ", -"1 [ [ _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / / / _ [ 2 ", -"| [ / / ! ) , - , - , - , - , - , - , - , - , / / _.u._./ | ", -"[ _ / ! , - - = = = = = = = = = = = = = = = = = u.Y.Y.Y.u.2 ", -"[ / ! , - = % % # # # # # # # # # # # # # # % : Y.Y.Y.Y.Y.b ", -"_ / ! - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.Y.Y.Y.Y.Y.u.", -"_ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.Y.Y.Y.Y.Y.u.", -"[ / ) - = % # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.Y.Y.Y.Y.Y.u.", -"[ / ! , - = % % # # # # # # # # # # # # # # % : Y.Y.Y.Y.Y.b ", -"[ _ / ! , - - = = = = = = = = = = = = = = = = / u.Y.Y.Y.u.2 ", -"| _ / / ! ) , - - - - - - - - - - - - - - , - = / _.u._./ | ", -"2 [ [ _ / / / ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / / : / / [ 1 ", -"2 2 | [ [ _ _ / / / / / / / / / / / / / / / / _ _ [ [ | 2 2 "}; +char const * over_xpm[] = { +"30 13 2 1", +" c #000000", +". c #FF0000", +" ", +" ", +" ", +" ", +" ..... ", +" ..... ", +" ..... ", +" ..... ", +" ..... ", +" ", +" ", +" ", +" "}; diff --git a/hdspmixer/pixmaps/peak.xpm b/hdspmixer/pixmaps/peak.xpm index 88b20e3..33f6629 100644 --- a/hdspmixer/pixmaps/peak.xpm +++ b/hdspmixer/pixmaps/peak.xpm @@ -1,265 +1,11 @@ /* XPM */ -char * peak_xpm[] = { -"8 5 257 2", -" c None", -". c #61FF48", -"+ c #6FFF57", -"@ c #7EFF57", -"# c #86FF5E", -"$ c #93FF5E", -"% c #A4FF6C", -"& c #D4FF87", -"* c #16FF5D", -"= c #16FBFF", -"- c #42AFFF", -"; c #45ADFF", -"> c #45ADFF", -", c #41FF41", -"' c #41FF63", -") c #41FFB1", -"! c #42FDFF", -"~ c #45F7FF", -"{ c #45F7FF", -"] c #45FF45", -"^ c #45FF65", -"/ c #45FFAF", -"( c #45FFF9", -"_ c #45FFFF", -": c #45FFFF", -"< c #45FF45", -"[ c #45FF65", -"} c #45FFAF", -"| c #45FFF9", -"1 c #45FFFF", -"2 c #45FFFF", -"3 c #45FF45", -"4 c #45FF65", -"5 c #45FFAF", -"6 c #45FFF9", -"7 c #45FFFF", -"8 c #45FFFF", -"9 c #EBE000", -"0 c #FC00FC", -"a c #2C28FF", -"b c #5654FF", -"c c #5958FF", -"d c #5958FF", -"e c #5DFF16", -"f c #28FF28", -"g c #29FAFF", -"h c #55A8FF", -"i c #58A7FF", -"j c #58A7FF", -"k c #63FF41", -"l c #54FF54", -"m c #54FFAA", -"n c #55FDFF", -"o c #58F7FF", -"p c #58F7FF", -"q c #65FF45", -"r c #58FF58", -"s c #58FFA8", -"t c #58FFF8", -"u c #58FFFF", -"v c #58FFFF", -"w c #65FF45", -"x c #58FF58", -"y c #58FFA8", -"z c #58FFF8", -"A c #58FFFF", -"B c #58FFFF", -"C c #65FF45", -"D c #58FF58", -"E c #58FFA8", -"F c #58FFF8", -"G c #58FFFF", -"H c #58FFFF", -"I c #FF5916", -"J c #FF282C", -"K c #FF28FF", -"L c #AA54FF", -"M c #A958FF", -"N c #A958FF", -"O c #FFFB16", -"P c #FFFA29", -"Q c #FF54FF", -"R c #827FFF", -"S c #8582FF", -"T c #8582FF", -"U c #B1FF41", -"V c #AAFF54", -"W c #7FFF7F", -"X c #80FCFF", -"Y c #83F3FF", -"Z c #83F3FF", -"` c #AFFF45", -" . c #A8FF58", -".. c #83FF83", -"+. c #83FFF5", -"@. c #83FFFF", -"#. c #83FFFF", -"$. c #AFFF45", -"%. c #A8FF58", -"&. c #83FF83", -"*. c #83FFF5", -"=. c #83FFFF", -"-. c #83FFFF", -";. c #AFFF45", -">. c #A8FF58", -",. c #83FF83", -"'. c #83FFF5", -"). c #83FFFF", -"!. c #83FFFF", -"~. c #FF6242", -"{. c #FF5456", -"]. c #FF54AA", -"^. c #FF54FF", -"/. c #F858FF", -"(. c #F858FF", -"_. c #FFAF42", -":. c #FFA855", -"<. c #FF7F82", -"[. c #FF7FFF", -"}. c #F682FF", -"|. c #F682FF", -"1. c #FFFD42", -"2. c #FFFD55", -"3. c #FFFC80", -"4. c #D6D3D6", -"5. c #D6D5D7", -"6. c #D6D5D7", -"7. c #F9FF45", -"8. c #F8FF58", -"9. c #F5FF83", -"0. c #D6D7D6", -"a. c #D6D7D7", -"b. c #D6D7D7", -"c. c #F9FF45", -"d. c #F8FF58", -"e. c #F5FF83", -"f. c #D6D7D6", -"g. c #D6D7D7", -"h. c #D6D7D7", -"i. c #F9FF45", -"j. c #F8FF58", -"k. c #F5FF83", -"l. c #D6D7D6", -"m. c #D6D7D7", -"n. c #D6D7D7", -"o. c #FF6445", -"p. c #FF5859", -"q. c #FF58A9", -"r. c #FF58F8", -"s. c #FF58FF", -"t. c #FF58FF", -"u. c #FFAD45", -"v. c #FFA758", -"w. c #FF8285", -"x. c #FF82F6", -"y. c #FF82FF", -"z. c #FF82FF", -"A. c #FFF745", -"B. c #FFF758", -"C. c #FFF383", -"D. c #D7D5D6", -"E. c #D7D5D7", -"F. c #D7D5D7", -"G. c #FFFF45", -"H. c #FFFF58", -"I. c #FFFF83", -"J. c #D7D7D6", -"K. c #D8D8D8", -"L. c #D8D8D8", -"M. c #FFFF45", -"N. c #FFFF58", -"O. c #FFFF83", -"P. c #D7D7D6", -"Q. c #D8D8D8", -"R. c #D8D8D8", -"S. c #FFFF45", -"T. c #FFFF58", -"U. c #FFFF83", -"V. c #D7D7D6", -"W. c #D8D8D8", -"X. c #D8D8D8", -"Y. c #FF6445", -"Z. c #FF5859", -"`. c #FF58A9", -" + c #FF58F8", -".+ c #FF58FF", -"++ c #FF58FF", -"@+ c #FFAD45", -"#+ c #FFA758", -"$+ c #FF8285", -"%+ c #FF82F6", -"&+ c #FF82FF", -"*+ c #FF82FF", -"=+ c #FFF745", -"-+ c #FFF758", -";+ c #FFF383", -">+ c #D7D5D6", -",+ c #D7D5D7", -"'+ c #D7D5D7", -")+ c #FFFF45", -"!+ c #FFFF58", -"~+ c #FFFF83", -"{+ c #D7D7D6", -"]+ c #D8D8D8", -"^+ c #D8D8D8", -"/+ c #FFFF45", -"(+ c #FFFF58", -"_+ c #FFFF83", -":+ c #D7D7D6", -"<+ c #D8D8D8", -"[+ c #D8D8D8", -"}+ c #FFFF45", -"|+ c #FFFF58", -"1+ c #FFFF83", -"2+ c #D7D7D6", -"3+ c #D8D8D8", -"4+ c #D8D8D8", -"5+ c #00EA00", -"6+ c #00F500", -"7+ c #00FF00", -"8+ c #16FF16", -"9+ c #2CFF2C", -"0+ c #44FF44", -"a+ c #5AFF5A", -"b+ c #70FF70", -"c+ c #B8CFB8", -"d+ c #C1D1C1", -"e+ c #CAD3CA", -"f+ c #D2D6D2", -"g+ c #D8D8D8", -"h+ c #D8D8D8", -"i+ c #D8D8D8", -"j+ c #D8D8D8", -"k+ c #D8D8D8", -"l+ c #D8D8D8", -"m+ c #D8D8D8", -"n+ c #D8D8D8", -"o+ c #2BFF2B", -"p+ c #2D59FF", -"q+ c #00ED00", -"r+ c #FF7945", -"s+ c #16FF16", -"t+ c #C85BFF", -"u+ c #45FF45", -"v+ c #00EE00", -"w+ c #45FF45", -"x+ c #FF5A95", -"y+ c #45FF45", -"z+ c #CC43FF", -"A+ c #41FF41", -"B+ c #9158FF", -"C+ c #36FF36", -"D+ c #00EC00", -"E+ c #45FF45", -"F+ c #B833FF", -"G+ c #45FF45", -"H+ c #FF58B2", -"9 A.A.A.A.A.A.9 ", -"A.G.G.G.G.G.G.A.", -"A.G.G.G.G.G.G.A.", -"A.G.G.G.G.G.G.A.", -"9 A.A.A.A.A.A.9 "}; +char const * peak_xpm[] = { +"8 5 3 1", +" c #EBE000", +". c #FFFF45", +"+ c #FFFFAB", +" ", +"........", +"++++++++", +"........", +" "}; diff --git a/hdspmixer/pixmaps/solo.xpm b/hdspmixer/pixmaps/solo.xpm index 1bfb438..7de8c9e 100644 --- a/hdspmixer/pixmaps/solo.xpm +++ b/hdspmixer/pixmaps/solo.xpm @@ -1,57 +1,133 @@ /* XPM */ -char * solo_xpm[] = { -"13 26 28 1", -" c None", -". c #3C3E2D", -"+ c #2E3E23", -"@ c #2E3623", -"# c #7A7F51", -"$ c #690806", -"% c #7C2000", -"& c #272118", -"* c #532800", -"= c #F4BE91", -"- c #F44E10", -"; c #23241A", -"> c #151610", -", c #A85600", -"' c #FF0000", -") c #F4FDB7", -"! c #181818", -"~ c #091809", -"{ c #091009", -"] c #585949", -"^ c #000000", -"/ c #180000", -"( c #C9A1A8", -"_ c #884129", -": c #482100", -"< c #D8D8D8", -"[ c #090000", -"} c #020000", -".++@+++++++.#", -"$%%%%%%%%%%$&", -"*%=--------;>", -"*%,'')))'''&>", -"*%'')''''''&>", -"*%'')''''''&>", -"*%'''))''''&>", -"*%''''')'''&>", -"*%''''')'''&>", -"*%,')))-'''&>", -"*%--------*&>", -"*&>>>>>>>>>>>", -">>>>>>>>>>>>>", -"!~~{~~~~~~~!]", -"^^^^^^^^^^^^^", -"^/(________^^", -"^/::::::///^^", -"^/:::<< c #912F77", +", c #FF7DDD", +"' c #592B4D", +") c #D065B4", +"! c #F477D3", +"~ c #DF6DC1", +"{ c #922F78", +"] c #FF7CDD", +"^ c #35192E", +"/ c #EE73CE", +"( c #932F78", +"_ c #FE7BDC", +": c #9A4A85", +"< c #150A12", +"[ c #5B2C4E", +"} c #CA61AE", +"| c #942F79", +"1 c #FE7ADB", +"2 c #E66EC6", +"3 c #8D437A", +"4 c #261221", +"5 c #A24D8C", +"6 c #952F7A", +"7 c #D666B8", +"8 c #4C2441", +"9 c #FE79DB", +"0 c #B7579D", +"a c #FD78DA", +"b c #9E4B88", +"c c #803D6E", +"d c #962F7B", +"e c #FE78DB", +"f c #5E2C51", +"g c #23101E", +"h c #32182B", +"i c #612E53", +"j c #E66CC6", +"k c #6F4C65", +"l c #A32F84", +"m c #FA6BD5", +"n c #665959", +"o c #694D4D", +"p c #8F2F2F", +"q c #E64040", +"r c #FF7F7F", +"s c #902F2F", +"t c #FF7E7E", +"u c #D46868", +"v c #532929", +"w c #2E1616", +"x c #2A1414", +"y c #B05656", +"z c #912F2F", +"A c #FF7D7D", +"B c #592B2B", +"C c #D06565", +"D c #F47777", +"E c #DF6D6D", +"F c #922F2F", +"G c #FF7C7C", +"H c #351919", +"I c #EE7373", +"J c #932F2F", +"K c #FE7B7B", +"L c #9A4A4A", +"M c #150A0A", +"N c #5B2C2C", +"O c #CA6161", +"P c #942F2F", +"Q c #FE7A7A", +"R c #E66E6E", +"S c #8D4343", +"T c #261212", +"U c #A24D4D", +"V c #952F2F", +"W c #D66666", +"X c #4C2424", +"Y c #FE7979", +"Z c #B75757", +"` c #FD7878", +" . c #9E4B4B", +".. c #803D3D", +"+. c #962F2F", +"@. c #FE7878", +"#. c #5E2C2C", +"$. c #231010", +"%. c #321818", +"&. c #612E2E", +"*. c #E66C6C", +"=. c #6F4C4C", +"-. c #A32F2F", +";. c #FA6B6B", +" . + + + + + + + + + . ", +". + @ @ @ @ @ @ @ @ @ + . ", +"+ @ # # # # # # # # # # + ", +"$ @ % % & * = - ; % % % $ ", +"> @ , , ' ) , ! ~ , , , > ", +"{ @ ] ] ^ / ] ] ] ] ] ] { ", +"( @ _ _ : < [ } _ _ _ _ ( ", +"| @ 1 1 1 2 3 4 5 1 1 1 | ", +"6 @ 1 1 1 1 1 7 8 1 1 1 6 ", +"6 @ 9 9 0 a 9 b c 9 9 9 6 ", +"d @ e e f g h i j e e e d ", +"k l m m m m m m m m m l k ", +" k l l l l l l l l l k ", +"n o p p p p p p p p p o n ", +"o p q q q q q q q q q p o ", +"p q r r r r r r r r r r p ", +"s q t t u v w x y t t t s ", +"z q A A B C A D E A A A z ", +"F q G G H I G G G G G G F ", +"J q K K L M N O K K K K J ", +"P q Q Q Q R S T U Q Q Q P ", +"V q Q Q Q Q Q W X Q Q Q V ", +"V q Y Y Z ` Y ...Y Y Y V ", +"+.q @.@.#.$.%.&.*.@.@.@.+.", +"=.-.;.;.;.;.;.;.;.;.;.-.=.", +"n =.-.-.-.-.-.-.-.-.-.=.n "}; diff --git a/hdspmixer/src/HDSPMixerAbout.cxx b/hdspmixer/src/HDSPMixerAbout.cxx index 709529a..39587d0 100644 --- a/hdspmixer/src/HDSPMixerAbout.cxx +++ b/hdspmixer/src/HDSPMixerAbout.cxx @@ -22,7 +22,7 @@ #include "HDSPMixerAbout.h" -HDSPMixerAbout::HDSPMixerAbout(int w, int h, char *label, HDSPMixerWindow *win):Fl_Double_Window(w, h, label) +HDSPMixerAbout::HDSPMixerAbout(int w, int h, char const *label, HDSPMixerWindow *win):Fl_Double_Window(w, h, label) { basew = win; text = new HDSPMixerAboutText(10,10,w-20,h-20); diff --git a/hdspmixer/src/HDSPMixerAbout.h b/hdspmixer/src/HDSPMixerAbout.h index f59b256..e539935 100644 --- a/hdspmixer/src/HDSPMixerAbout.h +++ b/hdspmixer/src/HDSPMixerAbout.h @@ -36,7 +36,7 @@ private: HDSPMixerAboutText *text; HDSPMixerWindow *basew; public: - HDSPMixerAbout(int w, int h, char *label, HDSPMixerWindow *win); + HDSPMixerAbout(int w, int h, char const *label, HDSPMixerWindow *win); int handle(int e); }; diff --git a/hdspmixer/src/HDSPMixerAboutText.cxx b/hdspmixer/src/HDSPMixerAboutText.cxx index e0168ed..6227b11 100644 --- a/hdspmixer/src/HDSPMixerAboutText.cxx +++ b/hdspmixer/src/HDSPMixerAboutText.cxx @@ -2,6 +2,9 @@ * HDSPMixer * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) + * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) * * 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 @@ -23,7 +26,10 @@ HDSPMixerAboutText::HDSPMixerAboutText(int x, int y, int w, int h):Fl_Widget(x, y, w, h, "About Text") { - text = "HDSPMixer " VERSION " (C) 2003 Thomas Charbonnel \n\n" + text = "HDSPMixer " VERSION " (C) 2003 Thomas Charbonnel \n" + "(C) 2009 Florian Faber \n" + "(C) 2011 Adrian Knoth \n" + "(C) 2011 Fredrik lingvall \n\n" "Bitmaps by Ralf Brunner\n" "Many thanks to Martin Björnsen, Matthias Carstens and Paul Davis\n\n" "This Program is free software; you can redistribute it and/or modify\n" @@ -35,13 +41,14 @@ HDSPMixerAboutText::HDSPMixerAboutText(int x, int y, int w, int h):Fl_Widget(x, "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" "See the GNU General Public License for more details.\n\n" "You should have received a copy of the GNU General Public License\n" - "along with this program; if not, write to the Free Software\n" - "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n"; + "along with this program; if not, write to the\n" + "Free Software Foundation, Inc., 51 Franklin Street, Suite 500,\n" + "Boston, MA 02110-1335, USA.\n"; } void HDSPMixerAboutText::draw() { - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 10); fl_draw(text, x(), y(), w(), h(), FL_ALIGN_LEFT); } diff --git a/hdspmixer/src/HDSPMixerAboutText.h b/hdspmixer/src/HDSPMixerAboutText.h index 75b96ce..7ccac25 100644 --- a/hdspmixer/src/HDSPMixerAboutText.h +++ b/hdspmixer/src/HDSPMixerAboutText.h @@ -32,7 +32,7 @@ public: HDSPMixerAboutText(int x, int y, int w, int h); void draw(); private: - char *text; + char const *text; }; #endif diff --git a/hdspmixer/src/HDSPMixerCard.cxx b/hdspmixer/src/HDSPMixerCard.cxx index 38548f1..72232c8 100644 --- a/hdspmixer/src/HDSPMixerCard.cxx +++ b/hdspmixer/src/HDSPMixerCard.cxx @@ -2,6 +2,9 @@ * HDSPMixer * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) + * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) * * 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 @@ -21,74 +24,6 @@ #pragma implementation #include "HDSPMixerCard.h" -static char channel_map_df_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25 -}; - -static char channel_map_mf_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char meter_map_ds[26] = { - 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char channel_map_ds[26] = { - 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char dest_map_mf_ss[10] = { - 0, 2, 4, 6, 16, 18, 20, 22, 24, 26 -}; - -static char dest_map_ds[8] = { - 0, 2, 8, 10, 16, 18, 24, 26 -}; - -static char dest_map_df_ss[14] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26 -}; - -static char dest_map_h9652_ss[13] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 -}; - -static char dest_map_h9652_ds[7] = { - 0, 2, 8, 10, 16, 18, 24 -}; - -static char dest_map_h9632_ss[8] = { - 0, 2, 4, 6, 8, 10, 12, 14 -}; - -static char dest_map_h9632_ds[6] = { - 0, 2, 8, 10, 12, 14 -}; - -static char dest_map_h9632_qs[4] = { - 8, 10, 12, 14 -}; - -static char channel_map_h9632_ss[16] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -static char channel_map_h9632_ds[12] = { - 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -static char channel_map_h9632_qs[8] = { - 8, 9, 10, 11, 12, 13, 14, 15 -}; - static void alsactl_cb(snd_async_handler_t *handler) { int err, clock_value; @@ -181,8 +116,10 @@ int HDSPMixerCard::getSpeed() snd_ctl_elem_value_t *elemval; snd_ctl_elem_id_t * elemid; snd_ctl_t *handle; + snd_ctl_elem_value_alloca(&elemval); snd_ctl_elem_id_alloca(&elemid); + if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0) { fprintf(stderr, "Error accessing ctl interface on card %s\n.", name); return -1; @@ -198,6 +135,7 @@ int HDSPMixerCard::getSpeed() } val = snd_ctl_elem_value_get_enumerated(elemval, 0); snd_ctl_close(handle); + switch (val) { case 0: /* Autosync mode : We need to determine sample rate */ @@ -225,11 +163,12 @@ int HDSPMixerCard::getSpeed() return 0; } -HDSPMixerCard::HDSPMixerCard(HDSP_IO_Type cardtype, int id) +HDSPMixerCard::HDSPMixerCard(int cardtype, int id, char *shortname) { type = cardtype; card_id = id; snprintf(name, 6, "hw:%i", card_id); + cardname = shortname; h9632_aeb.aebi = 0; h9632_aeb.aebo = 0; if (type == H9632) { @@ -238,6 +177,7 @@ HDSPMixerCard::HDSPMixerCard(HDSP_IO_Type cardtype, int id) } else { playbacks_offset = 26; } + speed_mode = getSpeed(); if (speed_mode < 0) { fprintf(stderr, "Error trying to determine speed mode for card %s, exiting.\n", name); @@ -246,6 +186,7 @@ HDSPMixerCard::HDSPMixerCard(HDSP_IO_Type cardtype, int id) /* Set channels and mappings */ adjustSettings(); + last_preset = last_dirty = 0; basew = NULL; } @@ -269,93 +210,241 @@ void HDSPMixerCard::getAeb() { void HDSPMixerCard::adjustSettings() { if (type == Multiface) { - switch (speed_mode) { - case 0: - channels = 18; - channel_map = channel_map_mf_ss; - dest_map = dest_map_mf_ss; - meter_map = channel_map_mf_ss; - lineouts = 2; - break; - case 1: - channels = 14; - channel_map = meter_map_ds; - dest_map = dest_map_ds; - meter_map = meter_map_ds; - lineouts = 2; - break; - case 2: - /* should never happen */ - break; - } - } else if (type == Digiface) { - switch (speed_mode) { - case 0: - channels = 26; - channel_map = channel_map_df_ss; - dest_map = dest_map_df_ss; - meter_map = channel_map_df_ss; - lineouts = 2; - break; - case 1: - channels = 14; - channel_map = meter_map_ds; - dest_map = dest_map_ds; - meter_map = meter_map_ds; - lineouts = 2; - break; - case 2: - /* should never happen */ - break; - } - } else if (type == H9652) { - switch (speed_mode) { - case 0: - channels = 26; - channel_map = channel_map_df_ss; - dest_map = dest_map_h9652_ss; - meter_map = channel_map_df_ss; - lineouts = 0; - break; - case 1: - channels = 14; - channel_map = channel_map_ds; - dest_map = dest_map_h9652_ds; - meter_map = meter_map_ds; - lineouts = 0; - break; - case 2: - /* should never happen */ - break; - } - } else if (type == H9632) { - switch (speed_mode) { - case 0: - channels = 12 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); - channel_map = channel_map_h9632_ss; - dest_map = dest_map_h9632_ss; - meter_map = channel_map_h9632_ss; - lineouts = 0; - break; - case 1: - channels = 8 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); - channel_map = channel_map_h9632_ds; - dest_map = dest_map_h9632_ds; - meter_map = channel_map_h9632_ds; - lineouts = 0; - break; - case 2: - channels = 4 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); - channel_map = channel_map_h9632_qs; - dest_map = dest_map_h9632_qs; - meter_map = channel_map_h9632_qs; - lineouts = 0; - break; - } + switch (speed_mode) { + case 0: + channels_input = 18; + channels_playback = 18; + channels_output = 20; /* SS 8xAnalog+8xADAT+2xSPDIF+2xHeadphone */ + channel_map_input = channel_map_playback = channel_map_mf_ss; + dest_map = dest_map_mf_ss; + meter_map_input = meter_map_playback = channel_map_mf_ss; + break; + case 1: + channels_input = 14; + channels_playback = 14; + channels_output = 16; /* DS 8xAnalog+4xADAT(SMUX)+2xSPDIF+2xHeadphone */ + channel_map_input = channel_map_playback = meter_map_ds; + dest_map = dest_map_ds; + meter_map_input = meter_map_playback = meter_map_ds; + break; + case 2: + /* should never happen */ + break; + } + + max_channels = sizeof(channel_map_mf_ss); } - window_width = (channels+2)*STRIP_WIDTH; + + if (type == Digiface) { + switch (speed_mode) { + case 0: + channels_input = channels_playback = 26; + channels_output = 28; /* SS 3x8xADAT+2xSPDIF+2xHeadphone */ + channel_map_input = channel_map_playback = channel_map_df_ss; + dest_map = dest_map_df_ss; + meter_map_input = meter_map_playback = channel_map_df_ss; + break; + case 1: + channels_input = channels_playback = 14; + channels_output = 16; /* DS 3x4xADAT(SMUX)+2xSPDIF+2xHeadphone */ + channel_map_input = channel_map_playback = meter_map_ds; + dest_map = dest_map_ds; + meter_map_input = meter_map_playback = meter_map_ds; + break; + case 2: + /* should never happen */ + break; + } + + max_channels = sizeof(channel_map_df_ss); + } + + if (type == RPM) { + /* RPM has no digital audio connectors, hence channel mappings don't + * depend on speedmode */ + channels_input = 5; + channels_playback = channels_output = 6; /* 2xMain,2xMon,2xPH */ + channel_map_input = channel_map_playback = channel_map_rpm; + dest_map = dest_map_rpm; + meter_map_input = meter_map_playback = channel_map_rpm; + + max_channels = sizeof(channel_map_rpm); + } + + + if (type == H9652) { + switch (speed_mode) { + case 0: + channels_input = channels_playback = 26; + channels_output = 26; /* SS like Digiface, but no Headphones */ + channel_map_input = channel_map_playback = channel_map_df_ss; + dest_map = dest_map_h9652_ss; + meter_map_input = meter_map_playback = channel_map_df_ss; + break; + case 1: + channels_input = channels_playback = 14; + channels_output = 14; /* DS like Digiface, but no Headphones */ + channel_map_input = channel_map_playback = channel_map_ds; + dest_map = dest_map_h9652_ds; + meter_map_input = meter_map_playback = meter_map_ds; + break; + case 2: + /* should never happen */ + break; + } + + max_channels = sizeof(channel_map_df_ss); + } + + if (type == H9632) { + switch (speed_mode) { + case 0: + channels_input = channels_playback = 12 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channels_output = channels_playback; /* untested, no idea about this card */ + channel_map_input = channel_map_playback = channel_map_h9632_ss; + dest_map = dest_map_h9632_ss; + meter_map_input = meter_map_playback = channel_map_h9632_ss; + break; + case 1: + channels_input = channels_playback = 8 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channels_output = channels_playback; /* untested, no idea about this card */ + channel_map_input = channel_map_playback = channel_map_h9632_ds; + dest_map = dest_map_h9632_ds; + meter_map_input = meter_map_playback = channel_map_h9632_ds; + break; + case 2: + channels_input = channels_playback = 4 + ((h9632_aeb.aebi || h9632_aeb.aebo) ? 4 : 0); + channels_output = channels_playback; /* untested, no idea about this card */ + channel_map_input = channel_map_playback = channel_map_h9632_qs; + dest_map = dest_map_h9632_qs; + meter_map_input = meter_map_playback = channel_map_h9632_qs; + break; + } + + max_channels = sizeof(channel_map_h9632_ss); + } + + if (HDSPeMADI == type) { + playbacks_offset = 64; + + switch (speed_mode) { + case 0: // SS + channels_input = channels_playback = 64; + channels_output = channels_input; /* SS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ + channel_map_input = channel_map_playback = channel_map_unity_ss; + dest_map = dest_map_unity; + meter_map_input = meter_map_playback = channel_map_unity_ss; + break; + case 1: // DS + channels_input = channels_playback = 32; + channels_output = channels_input; /* DS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ + channel_map_input = channel_map_playback = channel_map_unity_ss; + dest_map = dest_map_unity; + meter_map_input = meter_map_playback = channel_map_unity_ss; + break; + case 2: // QS + channels_input = channels_playback = 16; + channels_output = channels_input; /* QS headphones missing, at least HDSPe MADI has some, MADIface hasn't */ + channel_map_input = channel_map_playback = channel_map_unity_ss; + dest_map = dest_map_unity; + meter_map_input = meter_map_playback = channel_map_unity_ss; + break; + } + + max_channels = sizeof(channel_map_unity_ss); + } + + if (HDSPeAIO == type) { + playbacks_offset = 64; + + switch (speed_mode) { + case 0: // SS + channels_input = 18; + channels_playback = 20; + channels_output = 20; /* SS 2xAnalog+2xAES+2xSPDIF+8xADAT+2xHeadphones+4xAEB */ + channel_map_input = channel_map_aio_in_ss; + channel_map_playback = channel_map_aio_out_ss; + dest_map = dest_map_aio_ss; + meter_map_input = channel_map_aio_in_ss; + meter_map_playback = channel_map_aio_out_ss; + break; + case 1: // DS + channels_input = 14; + channels_playback = 16; + channels_output = 16; /* DS 2xAnalog+2xAES+2xSPDIF+4xADAT(SMUX)+2xHeadphones+4xAEB */ + channel_map_input = channel_map_aio_in_ds; + channel_map_playback = channel_map_aio_out_ds; + dest_map = dest_map_aio_ds; + meter_map_input = channel_map_aio_in_ds; + meter_map_playback = channel_map_aio_out_ds; + break; + case 2: // QS + channels_input = 12; + channels_playback = 14; + channels_output = 14; /* QS 2xAnalog+2xAES+2xSPDIF+2xADAT(SMUX)+2xHeadphones+4xAEB */ + channel_map_input = channel_map_aio_in_qs; + channel_map_playback = channel_map_aio_out_qs; + dest_map = dest_map_aio_qs; + meter_map_input = channel_map_aio_in_qs; + meter_map_playback = channel_map_aio_out_qs; + break; + } + + max_channels = sizeof(channel_map_aio_out_ss); + } + + if (HDSP_AES == type) { + playbacks_offset = 64; /* not sure about this one? */ + + /* 16 channels for all modes */ + channels_input = 16; + channels_playback = 16; + channels_output = 16; + channel_map_input = channel_map_aes32; + channel_map_playback = channel_map_aes32; + dest_map = dest_map_aes32; + meter_map_input = channel_map_aes32; + meter_map_playback = channel_map_aes32; + + max_channels = sizeof(channel_map_aes32); + } + + if (HDSPeRayDAT == type) { + playbacks_offset = 64; + + switch (speed_mode) { + case 0: // SS + channels_input = 36; + channels_playback = 36; + channels_output = 36; /* SS 4x8xADAT+2xAES/EBU+2xSPDIF */ + channel_map_input = channel_map_playback = channel_map_raydat_ss; + dest_map = dest_map_raydat_ss; + meter_map_input = meter_map_playback = channel_map_raydat_ss; + break; + case 1: // DS + channels_input = 20; + channels_playback = 20; + channels_output = 20; /* DS 4x4xADAT(SMUX)+2xAES/EBU+2xSPDIF */ + channel_map_input = channel_map_playback = channel_map_raydat_ds; + dest_map = dest_map_raydat_ds; + meter_map_input = meter_map_playback = channel_map_raydat_ds; + break; + case 2: // QS + channels_input = 12; + channels_playback = 12; + channels_output = 12; /* QS 4x2xADAT(SMUX)+2xAES/EBU+2xSPDIF */ + channel_map_input = channel_map_playback = channel_map_raydat_qs; + dest_map = dest_map_raydat_qs; + meter_map_input = meter_map_playback = channel_map_raydat_qs; + break; + } + + max_channels = sizeof(channel_map_raydat_ss); + } + + window_width = (channels_playback+2)*STRIP_WIDTH; window_height = FULLSTRIP_HEIGHT*2+SMALLSTRIP_HEIGHT+MENU_HEIGHT; -} +} void HDSPMixerCard::setMode(int mode) { @@ -363,28 +452,30 @@ void HDSPMixerCard::setMode(int mode) adjustSettings(); actualizeStrips(); - for (int i = 0; i < channels; ++i) { - basew->inputs->strips[i]->targets->setLabels(); - basew->playbacks->strips[i]->targets->setLabels(); - basew->outputs->strips[i]->setLabels(); + for (int i = 0; i < channels_input; ++i) { + basew->inputs->strips[i]->targets->setLabels(); } - for (int i = channels; i < channels+lineouts; ++i) { - basew->outputs->strips[i]->setLabels(); + for (int i = 0; i < channels_playback; ++i) { + basew->playbacks->strips[i]->targets->setLabels(); } + for (int i = 0; i < channels_output; ++i) { + basew->outputs->strips[i]->setLabels(); + } + if (h9632_aeb.aebo && !h9632_aeb.aebi) { - basew->inputs->empty_aebi[0]->position(STRIP_WIDTH*(channels-4), basew->inputs->empty_aebi[0]->y()); - basew->inputs->empty_aebi[1]->position(STRIP_WIDTH*(channels-2), basew->inputs->empty_aebi[1]->y()); + basew->inputs->empty_aebi[0]->position(STRIP_WIDTH*(channels_input-4), basew->inputs->empty_aebi[0]->y()); + basew->inputs->empty_aebi[1]->position(STRIP_WIDTH*(channels_input-2), basew->inputs->empty_aebi[1]->y()); } else if (h9632_aeb.aebi && !h9632_aeb.aebo) { - basew->playbacks->empty_aebo[0]->position(STRIP_WIDTH*(channels-4), basew->playbacks->empty_aebo[0]->y()); - basew->playbacks->empty_aebo[1]->position(STRIP_WIDTH*(channels-2), basew->playbacks->empty_aebo[1]->y()); - basew->outputs->empty_aebo[0]->position(STRIP_WIDTH*(channels-4), basew->outputs->empty_aebo[0]->y()); - basew->outputs->empty_aebo[1]->position(STRIP_WIDTH*(channels-2), basew->outputs->empty_aebo[1]->y()); + basew->playbacks->empty_aebo[0]->position(STRIP_WIDTH*(channels_playback-4), basew->playbacks->empty_aebo[0]->y()); + basew->playbacks->empty_aebo[1]->position(STRIP_WIDTH*(channels_playback-2), basew->playbacks->empty_aebo[1]->y()); + basew->outputs->empty_aebo[0]->position(STRIP_WIDTH*(channels_playback-4), basew->outputs->empty_aebo[0]->y()); + basew->outputs->empty_aebo[1]->position(STRIP_WIDTH*(channels_playback-2), basew->outputs->empty_aebo[1]->y()); } - basew->inputs->buttons->position(STRIP_WIDTH*channels, basew->inputs->buttons->y()); + basew->inputs->buttons->position(STRIP_WIDTH*channels_input, basew->inputs->buttons->y()); basew->inputs->init_sizes(); - basew->playbacks->empty->position(STRIP_WIDTH*channels, basew->playbacks->empty->y()); + basew->playbacks->empty->position(STRIP_WIDTH*channels_playback, basew->playbacks->empty->y()); basew->playbacks->init_sizes(); - basew->outputs->empty->position(STRIP_WIDTH*(channels+lineouts), basew->outputs->empty->y()); + basew->outputs->empty->position(STRIP_WIDTH*(channels_playback), basew->outputs->empty->y()); basew->outputs->init_sizes(); basew->inputs->size(window_width, basew->inputs->h()); basew->playbacks->size(window_width, basew->playbacks->h()); @@ -401,18 +492,19 @@ void HDSPMixerCard::setMode(int mode) void HDSPMixerCard::actualizeStrips() { for (int i = 0; i < HDSP_MAX_CHANNELS; ++i) { - if (i < channels) { + if (i < channels_input) { basew->inputs->strips[i]->show(); - basew->playbacks->strips[i]->show(); - basew->outputs->strips[i]->show(); } else { basew->inputs->strips[i]->hide(); - basew->playbacks->strips[i]->hide(); - basew->outputs->strips[i]->hide(); } - } - for (int i = channels; i < channels+2; ++i) { - if (i < channels+lineouts) { + + if (i < channels_playback) { + basew->playbacks->strips[i]->show(); + } else { + basew->playbacks->strips[i]->hide(); + } + + if (i < channels_output) { basew->outputs->strips[i]->show(); } else { basew->outputs->strips[i]->hide(); @@ -424,7 +516,7 @@ void HDSPMixerCard::actualizeStrips() basew->playbacks->empty_aebo[i]->show(); basew->outputs->empty_aebo[i]->show(); } - for (int i = channels-4; i < channels; ++i) { + for (int i = channels_playback-4; i < channels_playback; ++i) { basew->playbacks->strips[i]->hide(); basew->outputs->strips[i]->hide(); } @@ -434,7 +526,7 @@ void HDSPMixerCard::actualizeStrips() basew->playbacks->empty_aebo[i]->hide(); basew->outputs->empty_aebo[i]->hide(); } - for (int i = channels-4; i < channels; ++i) { + for (int i = channels_input-4; i < channels_input; ++i) { basew->inputs->strips[i]->hide(); } } else { @@ -467,3 +559,23 @@ int HDSPMixerCard::initializeCard(HDSPMixerWindow *w) return 0; } +int HDSPMixerCard::supportsLoopback() const +{ + int err = 0; + snd_ctl_elem_value_t *elemval; + snd_ctl_elem_id_t * elemid; + snd_ctl_t *handle; + snd_ctl_elem_value_alloca(&elemval); + snd_ctl_elem_id_alloca(&elemid); + if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0) + return err; + + snd_ctl_elem_id_set_name(elemid, "Output Loopback"); + snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP); + snd_ctl_elem_id_set_index(elemid, 0); + snd_ctl_elem_value_set_id(elemval, elemid); + err = snd_ctl_elem_read(handle, elemval); + snd_ctl_close(handle); + + return err; +} diff --git a/hdspmixer/src/HDSPMixerCard.h b/hdspmixer/src/HDSPMixerCard.h index a8ce108..eecfca3 100644 --- a/hdspmixer/src/HDSPMixerCard.h +++ b/hdspmixer/src/HDSPMixerCard.h @@ -24,11 +24,19 @@ #include #include +#include #include #include +#include #include "defines.h" +#include "channelmap.h" #include "HDSPMixerWindow.h" +/* temporary workaround until hdsp.h (HDSP_IO_Type gets fixed */ +#ifndef RPM +# define RPM 4 +#endif + class HDSPMixerWindow; class HDSPMixerCard @@ -36,15 +44,21 @@ class HDSPMixerCard private: snd_ctl_t *cb_handle; snd_async_handler_t *cb_handler; + public: HDSPMixerWindow *basew; char name[6]; - HDSPMixerCard(HDSP_IO_Type cardtype, int id); - int channels, lineouts, window_width, window_height, card_id; - HDSP_IO_Type type; - char *channel_map; + std::string cardname; + HDSPMixerCard(int cardtype, int id, char *shortname); + int channels_input, channels_playback, window_width, window_height, card_id; + int channels_output; + int max_channels; + int type; + int last_preset; /* Last activated preset before switching to another card */ + int last_dirty; /* Last dirty flag before switching to another card */ + char *channel_map_input, *channel_map_playback; char *dest_map; - char *meter_map; + char *meter_map_input, *meter_map_playback; int speed_mode; int playbacks_offset; void setMode(int mode); @@ -55,6 +69,7 @@ public: void adjustSettings(); void getAeb(); hdsp_9632_aeb_t h9632_aeb; + int supportsLoopback() const; }; #endif diff --git a/hdspmixer/src/HDSPMixerCardSelector.cxx b/hdspmixer/src/HDSPMixerCardSelector.cxx index 0e31847..d685009 100644 --- a/hdspmixer/src/HDSPMixerCardSelector.cxx +++ b/hdspmixer/src/HDSPMixerCardSelector.cxx @@ -48,8 +48,11 @@ void HDSPMixerCardSelector::draw() void HDSPMixerCardSelector::ActivateCard (int i) { card = i + 1; + basew->stashPreset(); /* save current mixer state */ basew->current_card = i; basew->cards[i]->setMode (basew->cards[i]->getSpeed ()); + basew->setTitleWithFilename(); + basew->unstashPreset(); /* restore previous mixer state */ redraw (); } diff --git a/hdspmixer/src/HDSPMixerFader.cxx b/hdspmixer/src/HDSPMixerFader.cxx index 0441c51..a7f5015 100644 --- a/hdspmixer/src/HDSPMixerFader.cxx +++ b/hdspmixer/src/HDSPMixerFader.cxx @@ -31,7 +31,7 @@ HDSPMixerFader::HDSPMixerFader(int x, int y, double r, int id, int src):Fl_Widge ref = r; basew = (HDSPMixerWindow *)window(); anchor = lastpos = lasty = drag = shift_orig = y_orig = 0; - for (int i = 0; i < 14; i++) { + for (int i = 0; i < HDSP_MAX_DEST; i++) { pos[i] = 0; } } diff --git a/hdspmixer/src/HDSPMixerFader.h b/hdspmixer/src/HDSPMixerFader.h index 3090dfa..9a99d14 100644 --- a/hdspmixer/src/HDSPMixerFader.h +++ b/hdspmixer/src/HDSPMixerFader.h @@ -49,7 +49,7 @@ public: int posToInt(int p); int non_submix_dest; int dest; - int pos[14]; + int pos[HDSP_MAX_DEST]; HDSPMixerWindow *basew; HDSPMixerFader *relative; HDSPMixerGain *gain; diff --git a/hdspmixer/src/HDSPMixerGain.cxx b/hdspmixer/src/HDSPMixerGain.cxx index 9d43a73..fd6339e 100644 --- a/hdspmixer/src/HDSPMixerGain.cxx +++ b/hdspmixer/src/HDSPMixerGain.cxx @@ -33,7 +33,7 @@ void HDSPMixerGain::draw() fl_draw(text, x(), y(), w(), h(), FL_ALIGN_CENTER); } -void HDSPMixerGain::setText(char *txt) +void HDSPMixerGain::setText(char const *txt) { strncpy(text, txt, 10); redraw(); diff --git a/hdspmixer/src/HDSPMixerGain.h b/hdspmixer/src/HDSPMixerGain.h index 9f70778..a5ab55a 100644 --- a/hdspmixer/src/HDSPMixerGain.h +++ b/hdspmixer/src/HDSPMixerGain.h @@ -39,7 +39,7 @@ public: char text[10]; HDSPMixerGain(int x, int y, int parenttype); void draw(); - void setText(char *txt); + void setText(char const *txt); }; #endif diff --git a/hdspmixer/src/HDSPMixerIOMixer.cxx b/hdspmixer/src/HDSPMixerIOMixer.cxx index a431de5..119ffd7 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.cxx +++ b/hdspmixer/src/HDSPMixerIOMixer.cxx @@ -25,9 +25,9 @@ HDSPMixerIOMixer::HDSPMixerIOMixer(int x, int y, int w, int h, int ch, int type) { mixer_type = type; if (type) { - sprintf(channel_name, "Out %d", ch); + channel_name << "Out " << ch; } else { - sprintf(channel_name, "In %d", ch); + channel_name << "In " << ch; } channel_num = ch; if (channel_num%2) { @@ -37,8 +37,8 @@ HDSPMixerIOMixer::HDSPMixerIOMixer(int x, int y, int w, int h, int ch, int type) relative_num = channel_num-1; p_iomixer_xpm = iomixer_r_xpm; } - for (int j = 0; j < 3; ++j) { - for (int i = 0; i < 8; ++i) { + for (int j = 0; j < MAX_CARDS; ++j) { + for (int i = 0; i < NUM_PRESETS; ++i) { data[j][0][i] = new HDSPMixerStripData(); data[j][1][i] = new HDSPMixerStripData(); data[j][2][i] = new HDSPMixerStripData(); @@ -71,9 +71,9 @@ void HDSPMixerIOMixer::draw() Fl_Widget *const* a = array(); if (damage() & ~FL_DAMAGE_CHILD) { draw_background(); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 8); - fl_draw(channel_name, x()+4, y()+225, 27, 9, FL_ALIGN_CENTER); + fl_draw(channel_name.str().c_str(), x()+4, y()+225, 27, 9, FL_ALIGN_CENTER); for (int i=children(); i--;) { Fl_Widget& o = **a++; draw_child(o); diff --git a/hdspmixer/src/HDSPMixerIOMixer.h b/hdspmixer/src/HDSPMixerIOMixer.h index 6286daf..aa12487 100644 --- a/hdspmixer/src/HDSPMixerIOMixer.h +++ b/hdspmixer/src/HDSPMixerIOMixer.h @@ -36,6 +36,7 @@ #include "HDSPMixerStripData.h" #include "HDSPMixerMeter.h" #include "pixmaps.h" +#include class HDSPMixerWindow; class HDSPMixerSelector; @@ -50,12 +51,12 @@ class HDSPMixerMeter; class HDSPMixerIOMixer:public Fl_Group { private: - char **p_iomixer_xpm; + char const **p_iomixer_xpm; int channel_num, relative_num, mixer_type; - char channel_name[6]; + std::stringstream channel_name; void update_child(Fl_Widget &widget); public: - HDSPMixerStripData *data[3][3][8]; /* data[card][mode(ss/ds/qs)][preset number] */ + HDSPMixerStripData *data[MAX_CARDS][3][NUM_PRESETS]; /* data[card][mode(ss/ds/qs)][preset number] */ HDSPMixerPan *pan; HDSPMixerFader *fader; HDSPMixerPeak *peak; diff --git a/hdspmixer/src/HDSPMixerInputs.h b/hdspmixer/src/HDSPMixerInputs.h index 361b1da..a6c1740 100644 --- a/hdspmixer/src/HDSPMixerInputs.h +++ b/hdspmixer/src/HDSPMixerInputs.h @@ -35,7 +35,7 @@ class HDSPMixerInputs:public Fl_Group { public: HDSPMixerButtons *buttons; - HDSPMixerIOMixer *strips[26]; + HDSPMixerIOMixer *strips[HDSP_MAX_CHANNELS]; HDSPMixerInputs(int x, int y, int w, int h, int nchannels); HDSPMixerEmpty *empty_aebi[2]; }; diff --git a/hdspmixer/src/HDSPMixerLoopback.cxx b/hdspmixer/src/HDSPMixerLoopback.cxx new file mode 100644 index 0000000..fcfec2a --- /dev/null +++ b/hdspmixer/src/HDSPMixerLoopback.cxx @@ -0,0 +1,133 @@ +/* + * HDSPMixer + * + * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#pragma implementation +#include "HDSPMixerLoopback.h" + +HDSPMixerLoopback::HDSPMixerLoopback(int x, int y, int idx):Fl_Widget(x, y, 34, 15) +{ + basew = (HDSPMixerWindow *)window(); + index = idx; +} + +void HDSPMixerLoopback::draw() +{ + if (_loopback == 1) + fl_draw_pixmap(loopback_xpm, x(), y()); +} + +int HDSPMixerLoopback::get() +{ + auto const card { basew->cards[basew->current_card] }; + + if (card->supportsLoopback() != 0) + return -1; + + if (index >= card->max_channels) + return -1; + + int err; + snd_ctl_elem_value_t *elemval; + snd_ctl_elem_id_t * elemid; + snd_ctl_t *handle; + snd_ctl_elem_value_alloca(&elemval); + snd_ctl_elem_id_alloca(&elemid); + char const * const name = basew->cards[basew->current_card]->name; + if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0) { + fprintf(stderr, "Error accessing ctl interface on card %s\n.", name); + return -1; + } + + snd_ctl_elem_id_set_name(elemid, "Output Loopback"); + snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP); + snd_ctl_elem_id_set_index(elemid, index); + snd_ctl_elem_value_set_id(elemval, elemid); + if ((err = snd_ctl_elem_read(handle, elemval)) < 0) + fprintf(stderr, "cannot read loopback: %d\n", err); + else + _loopback = snd_ctl_elem_value_get_integer(elemval, 0); + + snd_ctl_close(handle); + + return _loopback; +} + +void HDSPMixerLoopback::set(int l) +{ + auto const card { basew->cards[basew->current_card] }; + + if (card->supportsLoopback() != 0) + return; + + if (index >= card->max_channels) + return; + + if (l != _loopback) { + int err; + + snd_ctl_elem_id_t *id; + snd_ctl_elem_value_t *ctl; + snd_ctl_t *handle; + + snd_ctl_elem_value_alloca(&ctl); + snd_ctl_elem_id_alloca(&id); + snd_ctl_elem_id_set_name(id, "Output Loopback"); + snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP); + snd_ctl_elem_id_set_device(id, 0); + snd_ctl_elem_id_set_index(id, index); + snd_ctl_elem_value_set_id(ctl, id); + + if ((err = snd_ctl_open( + &handle, basew->cards[basew->current_card]->name, SND_CTL_NONBLOCK)) < 0) { + fprintf(stderr, "Alsa error 1: %s\n", snd_strerror(err)); + return; + } + + snd_ctl_elem_value_set_integer(ctl, 0, l); + if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { + fprintf(stderr, "Alsa error 2: %s\n", snd_strerror(err)); + snd_ctl_close(handle); + return; + } + + _loopback = l; + + snd_ctl_close(handle); + + redraw(); + } +} + +int HDSPMixerLoopback::handle(int e) +{ + int button3 = Fl::event_button3(); + switch (e) { + case FL_PUSH: + set(!_loopback); + if (button3) + relative->set(_loopback); + basew->checkState(); + redraw(); + return 1; + default: + return Fl_Widget::handle(e); + } +} + diff --git a/hdspmixer/src/HDSPMixerLoopback.h b/hdspmixer/src/HDSPMixerLoopback.h new file mode 100644 index 0000000..07f1f0c --- /dev/null +++ b/hdspmixer/src/HDSPMixerLoopback.h @@ -0,0 +1,48 @@ +/* + * HDSPMixer + * + * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#pragma interface +#ifndef HDSPMixerLoopback_H +#define HDSPMixerLoopback_H + +#include +#include +#include "HDSPMixerWindow.h" +#include "pixmaps.h" + +class HDSPMixerWindow; + +class HDSPMixerLoopback:public Fl_Widget +{ +private: + HDSPMixerWindow *basew; + int _loopback{-1}; +public: + HDSPMixerLoopback *relative; + int index; + HDSPMixerLoopback(int x, int y, int idx); + void draw(); + int handle(int e); + int get(); + void set(int l); +}; + +#endif + diff --git a/hdspmixer/src/HDSPMixerMaster.cxx b/hdspmixer/src/HDSPMixerMaster.cxx index 9018856..f4399eb 100644 --- a/hdspmixer/src/HDSPMixerMaster.cxx +++ b/hdspmixer/src/HDSPMixerMaster.cxx @@ -31,21 +31,21 @@ HDSPMixerMaster::HDSPMixerMaster(int x, int y, int w, int h):Fl_Widget(x, y, 62, void HDSPMixerMaster::draw() { if (mute && mute_active) { - fl_push_clip(x(), y(), 29, 10); + fl_push_clip(x(), y(), 30, 11); fl_draw_pixmap(b_mute_xpm, x(), y()); fl_pop_clip(); } else if (mute) { - fl_push_clip(x(), y(), 29, 10); - fl_draw_pixmap(b_mute_xpm, x(), y()-10); + fl_push_clip(x(), y(), 30, 11); + fl_draw_pixmap(b_mute_xpm, x(), y()-11); fl_pop_clip(); } if (solo && solo_active) { - fl_push_clip(x()+32, y(), 29, 10); + fl_push_clip(x()+32, y(), 30, 11); fl_draw_pixmap(b_solo_xpm, x()+32, y()); fl_pop_clip(); } else if (solo) { - fl_push_clip(x()+32, y(), 29, 10); - fl_draw_pixmap(b_solo_xpm, x()+32, y()-10); + fl_push_clip(x()+32, y(), 30, 11); + fl_draw_pixmap(b_solo_xpm, x()+32, y()-11); fl_pop_clip(); } } @@ -55,14 +55,16 @@ int HDSPMixerMaster::handle(int e) int xpos = Fl::event_x()-x(); switch (e) { case FL_PUSH: - if (xpos >= 0 && xpos <= 29) { + if (xpos >= 0 && xpos <= 30) { if (mute) { mute = 0; } else { mute = 1; } - for (int i = 0; i < basew->cards[basew->current_card]->channels; i++) { + for (int i = 0; i < basew->cards[basew->current_card]->channels_input; i++) { basew->inputs->strips[i]->mutesolo->redraw(); + } + for (int i = 0; i < basew->cards[basew->current_card]->channels_playback; i++) { basew->playbacks->strips[i]->mutesolo->redraw(); } basew->refreshMixer(); @@ -76,8 +78,10 @@ int HDSPMixerMaster::handle(int e) } else { solo = 1; } - for (int i = 0; i < basew->cards[basew->current_card]->channels; i++) { + for (int i = 0; i < basew->cards[basew->current_card]->channels_input; i++) { basew->inputs->strips[i]->mutesolo->redraw(); + } + for (int i = 0; i < basew->cards[basew->current_card]->channels_playback; i++) { basew->playbacks->strips[i]->mutesolo->redraw(); } basew->refreshMixer(); diff --git a/hdspmixer/src/HDSPMixerMuteSolo.cxx b/hdspmixer/src/HDSPMixerMuteSolo.cxx index 3e738ca..3dcd1e6 100644 --- a/hdspmixer/src/HDSPMixerMuteSolo.cxx +++ b/hdspmixer/src/HDSPMixerMuteSolo.cxx @@ -129,8 +129,11 @@ int HDSPMixerMuteSolo::handle(int e) void HDSPMixerMuteSolo::redraw_all() { - for (int i = 0; i < (basew->cards[basew->current_card]->channels); ++i) { + for (int i = 0; i < (basew->cards[basew->current_card]->channels_input); ++i) { basew->inputs->strips[i]->mutesolo->redraw(); + } + + for (int i = 0; i < (basew->cards[basew->current_card]->channels_playback); ++i) { basew->playbacks->strips[i]->mutesolo->redraw(); } } diff --git a/hdspmixer/src/HDSPMixerOutput.cxx b/hdspmixer/src/HDSPMixerOutput.cxx index 0f70eca..8b4db34 100644 --- a/hdspmixer/src/HDSPMixerOutput.cxx +++ b/hdspmixer/src/HDSPMixerOutput.cxx @@ -21,51 +21,172 @@ #pragma implementation #include "HDSPMixerOutput.h" -static char *labels_mf_ss[20] = { +static char const *labels_madi_ss[64] = { + "1", "2", "3", "4", "5", "6", "7", "8", + "9", "10", "11", "12", "13", "14", "15", "16", + "17", "18", "19", "20", "21", "22", "23", "24", + "25", "26", "27", "28", "29", "30", "31", "32", + "33", "34", "35", "36", "37", "38", "39", "40", + "41", "42", "43", "44", "45", "46", "47", "48", + "49", "50", "51", "52", "53", "54", "55", "56", + "57", "58", "59", "60", "61", "62", "63", "64" +}; + +static char const *labels_madi_ds[64] = { + "1", "2", "3", "4", "5", "6", "7", "8", + "9", "10", "11", "12", "13", "14", "15", "16", + "17", "18", "19", "20", "21", "22", "23", "24", + "25", "26", "27", "28", "29", "30", "31", "32", +}; + +static char const *labels_madi_qs[16] = { + "1", "2", "3", "4", "5", "6", "7", "8", + "9", "10", "11", "12", "13", "14", "15", "16", +}; + + +static char const *labels_aes32[16] = { + "AES 1", "AES 2", "AES 3", "AES 4", "AES 5", "AES 6", "AES 7", "AES 8", + "AES 9", "AES 10", "AES 11", "AES 12", "AES 13", "AES 14", "AES 15", "AES 16" +}; + +static char const *labels_raydat_ss[36] = { + "A1.1", "A1.2", "A1.3", "A1.4", "A1.5", "A1.6", "A1.7", "A1.8", + "A2.1", "A2.2", "A2.3", "A2.4", "A2.5", "A2.6", "A2.7", "A2.8", + "A3.1", "A3.2", "A3.3", "A3.4", "A3.5", "A3.6", "A3.7", "A3.8", + "A4.1", "A4.2", "A4.3", "A4.4", "A4.5", "A4.6", "A4.7", "A4.8", + "AES.L", "AES.R", + "SP.L", "SP.R" +}; + +static char const *labels_raydat_ds[20] = { + "A1.1", "A1.2", "A1.3", "A1.4", + "A2.1", "A2.2", "A2.3", "A2.4", + "A3.1", "A3.2", "A3.3", "A3.4", + "A4.1", "A4.2", "A4.3", "A4.4", + "AES.L", "AES.R", + "SP.L", "SP.R" +}; + +static char const *labels_raydat_qs[12] = { + "A1.1", "A1.2", + "A2.1", "A2.2", + "A3.1", "A3.2", + "A4.1", "A4.2", + "AES.L", "AES.R", + "SP.L", "SP.R" +}; + +static char const *labels_rpm_output[6] = { + "Main L", "Main R", "Mon L", "Mon R", "PH L", "PH R" +}; + +static char const *labels_rpm_input[5] = { + "Phono 1.L", "Phono 1.R", + "Phono 2.L", "Phono 2.R", + "Mic" +}; + +static char const *labels_aio_ss_input[18] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", "A 3", "A 4", + "A 5", "A 6", "A 7", "A 8", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" +}; + +static char const *labels_aio_ss_playback[20] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", "A 3", "A 4", + "A 5", "A 6", "A 7", "A 8", + "PH.L", "PH.R", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" +}; + +static char const *labels_aio_ds_input[14] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", "A 3", "A 4", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" +}; + +static char const *labels_aio_ds_playback[16] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", "A 3", "A 4", + "PH.L", "PH.R", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" + }; + +static char const *labels_aio_qs_input[12] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" +}; + +static char const *labels_aio_qs_playback[14] = { + "AN 1", "AN 2", + "SP.L", "SP.R", + "AES.L", "AES.R", + "A 1", "A 2", + "PH.L", "PH.R", + "AEB 1", "AEB 2", "AEB 3", "AEB 4" +}; + + +static char const *labels_mf_ss[20] = { "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6", "AN 7", "AN 8", "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7", "A 8", "SP.L", "SP.R", "AN.L", "AN.R" }; -static char *labels_mf_ds[16] = { +static char const *labels_mf_ds[16] = { "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6", "AN 7", "AN 8", "A 1", "A 2", "A 3", "A 4", "SP.L", "SP.R", "AN.L", "AN.R" }; -static char *labels_df_ss[28] = { + +static char const *labels_df_ss[28] = { "A1 1", "A1 2", "A1 3", "A1 4", "A1 5", "A1 6", "A1 7", "A1 8", "A2 1", "A2 2", "A2 3", "A2 4", "A2 5", "A2 6", "A2 7", "A2 8", "A3 1", "A3 2", "A3 3", "A3 4", "A3 5", "A3 6", "A3 7", "A3 8", "SP.L", "SP.R", "AN.L", "AN.R" }; -static char *labels_df_ds[16] = { +static char const *labels_df_ds[16] = { "A1 1", "A1 2", "A1 3", "A1 4", "A2 1", "A2 2", "A2 3", "A2 4", "A3 1", "A3 2", "A3 3", "A3 4", "SP.L", "SP.R", "AN.L", "AN.R" }; -static char *labels_9632_ss[16] = { +static char const *labels_9632_ss[16] = { "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7", "A 8", "SP.L", "SP.R", "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6" }; -static char *labels_9632_ds[12] = { +static char const *labels_9632_ds[12] = { "A 1", "A 2", "A 3", "A 4", "SP.L", "SP.R", "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6" }; -static char *labels_9632_qs[8] = { +static char const *labels_9632_qs[8] = { "SP.L", "SP.R", "AN 1", "AN 2", "AN 3", "AN 4", "AN 5", "AN 6" }; HDSPMixerOutput::HDSPMixerOutput(int x, int y, int w, int h, int num):Fl_Group(x, y, w, h) { - for (int j = 0; j < 3; ++j) { - for (int i = 0; i < 8; ++i) { + for (int j = 0; j < MAX_CARDS; ++j) { + for (int i = 0; i < NUM_PRESETS; ++i) { data[j][0][i] = new HDSPMixerOutputData(); data[j][1][i] = new HDSPMixerOutputData(); data[j][2][i] = new HDSPMixerOutputData(); @@ -83,36 +204,108 @@ HDSPMixerOutput::HDSPMixerOutput(int x, int y, int w, int h, int num):Fl_Group(x peak = new HDSPMixerPeak(x+3, y+4, 0); gain = new HDSPMixerGain(x+3, y+175, 0); meter = new HDSPMixerMeter(x+20, y+27, false, peak); + loopback = new HDSPMixerLoopback(x+1, y+208, out_num); end(); } void HDSPMixerOutput::setLabels() { - HDSP_IO_Type type = basew->cards[basew->current_card]->type; + int type = basew->cards[basew->current_card]->type; int sm = basew->cards[basew->current_card]->speed_mode; + if (type == H9632) { - switch (sm) { - case 0: - labels = labels_9632_ss; - break; - case 1: - labels = labels_9632_ds; - break; - case 2: - labels = labels_9632_qs; - break; - } - } else if (type == Multiface) { - if (sm) - labels = labels_mf_ds; - else - labels = labels_mf_ss; - } else { - if (sm) - labels = labels_df_ds; - else - labels = labels_df_ss; + switch (sm) { + case 0: + labels_input = labels_playback = labels_9632_ss; + break; + case 1: + labels_input = labels_playback = labels_9632_ds; + break; + case 2: + labels_input = labels_playback = labels_9632_qs; + break; + } + return; } + + if (type == Multiface) { + if (sm) + labels_input = labels_playback = labels_mf_ds; + else + labels_input = labels_playback = labels_mf_ss; + return; + }; + + if (type == RPM) { + labels_input = labels_rpm_input; + labels_playback = labels_rpm_output; + return; + }; + + if (type == Digiface || type == H9652) { + if (sm) + labels_input = labels_playback = labels_df_ds; + else + labels_input = labels_playback = labels_df_ss; + return; + } + + + if (HDSPeMADI == type) { + switch (sm) { + case 0: + labels_input = labels_playback = labels_madi_ss; + break; + case 1: + labels_input = labels_playback = labels_madi_ds; + break; + case 2: + labels_input = labels_playback = labels_madi_qs; + break; + } + return; + } + + if (HDSP_AES == type) { + labels_input = labels_playback = labels_aes32; + return; + } + + if (HDSPeAIO == type) { + switch (sm) { + case 0: + labels_input = labels_aio_ss_input; + labels_playback = labels_aio_ss_playback; + break; + case 1: + labels_input = labels_aio_ds_input; + labels_playback = labels_aio_ds_playback; + break; + case 2: + labels_input = labels_aio_qs_input; + labels_playback = labels_aio_ds_playback; + break; + } + return; + } + + if (HDSPeRayDAT == type) { + switch (sm) { + case 0: + labels_input = labels_playback = labels_raydat_ss; + break; + case 1: + labels_input = labels_playback = labels_raydat_ds; + break; + case 2: + labels_input = labels_playback = labels_raydat_qs; + break; + } + return; + } + + fprintf(stderr, "Unknown card type for output labels, assigning defaults\n"); + labels_input = labels_playback = labels_madi_ss; } void HDSPMixerOutput::draw_background() @@ -132,9 +325,9 @@ void HDSPMixerOutput::draw() Fl_Widget*const* a = array(); if (damage() & ~FL_DAMAGE_CHILD) { draw_background(); - fl_color(FL_BLACK); + fl_color(FL_FOREGROUND_COLOR); fl_font(FL_HELVETICA, 8); - fl_draw(labels[out_num], x()+4, y()+193, 27, 9, FL_ALIGN_CENTER); + fl_draw(labels_playback[out_num], x()+4, y()+193, 27, 9, FL_ALIGN_CENTER); for (int i=children(); i--;) { Fl_Widget& o = **a++; draw_child(o); diff --git a/hdspmixer/src/HDSPMixerOutput.h b/hdspmixer/src/HDSPMixerOutput.h index 88c3583..1e04ae5 100644 --- a/hdspmixer/src/HDSPMixerOutput.h +++ b/hdspmixer/src/HDSPMixerOutput.h @@ -27,6 +27,7 @@ #include #include #include "HDSPMixerFader.h" +#include "HDSPMixerLoopback.h" #include "HDSPMixerPeak.h" #include "HDSPMixerGain.h" #include "HDSPMixerMeter.h" @@ -36,6 +37,7 @@ class HDSPMixerFader; class HDSPMixerGain; +class HDSPMixerLoopback; class HDSPMixerPeak; class HDSPMixerMeter; class HDSPMixerOutputData; @@ -46,16 +48,17 @@ class HDSPMixerOutput:public Fl_Group { private: int out_num; - char **labels; - char **p_output_xpm; + char const **labels_input, **labels_playback; + char const **p_output_xpm; HDSPMixerPeak *peak; HDSPMixerWindow *basew; void update_child(Fl_Widget& widget); public: - HDSPMixerOutputData *data[3][3][8]; /* data[card][mode(ss/ds/qs)][preset number] */ + HDSPMixerOutputData *data[MAX_CARDS][3][NUM_PRESETS]; /* data[card][mode(ss/ds/qs)][preset number] */ HDSPMixerFader *fader; HDSPMixerGain *gain; HDSPMixerMeter *meter; + HDSPMixerLoopback *loopback; HDSPMixerOutput(int x, int y, int w, int h, int out); void draw(); void draw_background(); diff --git a/hdspmixer/src/HDSPMixerOutputData.h b/hdspmixer/src/HDSPMixerOutputData.h index 885047b..75b9109 100644 --- a/hdspmixer/src/HDSPMixerOutputData.h +++ b/hdspmixer/src/HDSPMixerOutputData.h @@ -26,6 +26,7 @@ class HDSPMixerOutputData { public: int fader_pos; + int loopback; HDSPMixerOutputData(); }; diff --git a/hdspmixer/src/HDSPMixerOutputs.cxx b/hdspmixer/src/HDSPMixerOutputs.cxx index 0b4e7f4..342685d 100644 --- a/hdspmixer/src/HDSPMixerOutputs.cxx +++ b/hdspmixer/src/HDSPMixerOutputs.cxx @@ -25,13 +25,15 @@ HDSPMixerOutputs::HDSPMixerOutputs(int x, int y, int w, int h, int nchans):Fl_Gr { int i; for (i = 0; i < HDSP_MAX_CHANNELS+2; i += 2) { - strips[i] = new HDSPMixerOutput((i*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i); + strips[i] = new HDSPMixerOutput((i*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i); strips[i+1] = new HDSPMixerOutput(((i+1)*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i+1); /* Setup linked stereo channels */ strips[i]->fader->relative = strips[i+1]->fader; strips[i+1]->fader->relative = strips[i]->fader; strips[i]->fader->gain = strips[i]->gain; strips[i+1]->fader->gain = strips[i+1]->gain; + strips[i]->loopback->relative = strips[i+1]->loopback; + strips[i+1]->loopback->relative = strips[i]->loopback; } empty_aebo[0] = new HDSPMixerEmpty((nchans-6)*STRIP_WIDTH, y, 2*STRIP_WIDTH, SMALLSTRIP_HEIGHT, 0); diff --git a/hdspmixer/src/HDSPMixerOutputs.h b/hdspmixer/src/HDSPMixerOutputs.h index d073a2f..e7527d0 100644 --- a/hdspmixer/src/HDSPMixerOutputs.h +++ b/hdspmixer/src/HDSPMixerOutputs.h @@ -35,7 +35,7 @@ class HDSPMixerOutputs:public Fl_Group public: HDSPMixerEmpty *empty_aebo[2]; HDSPMixerEmpty *empty; - HDSPMixerOutput *strips[28]; + HDSPMixerOutput *strips[HDSP_MAX_CHANNELS+2]; HDSPMixerOutputs(int x, int y, int w, int h, int nchannels); }; diff --git a/hdspmixer/src/HDSPMixerPan.cxx b/hdspmixer/src/HDSPMixerPan.cxx index 5396614..c9feea4 100644 --- a/hdspmixer/src/HDSPMixerPan.cxx +++ b/hdspmixer/src/HDSPMixerPan.cxx @@ -27,7 +27,7 @@ HDSPMixerPan::HDSPMixerPan(int x, int y, int id, int src):Fl_Widget(x, y, 30, 13 index = id; basew = (HDSPMixerWindow *)window(); dest = x_orig = shift_orig = lastpos = lastx = drag = 0; - for (int i = 0; i < 14; i++) { + for (int i = 0; i < HDSP_MAX_DEST; i++) { pos[i] = 0; } } diff --git a/hdspmixer/src/HDSPMixerPan.h b/hdspmixer/src/HDSPMixerPan.h index 9a95acb..94f8ef2 100644 --- a/hdspmixer/src/HDSPMixerPan.h +++ b/hdspmixer/src/HDSPMixerPan.h @@ -28,6 +28,7 @@ #include "HDSPMixerIOMixer.h" #include "HDSPMixerWindow.h" #include "pixmaps.h" +#include "defines.h" class HDSPMixerIOMixer; class HDSPMixerWindow; @@ -39,7 +40,7 @@ private: void sendText(); void panToText(char *s); public: - int pos[14]; + int pos[HDSP_MAX_DEST]; int dest; int index; int source; diff --git a/hdspmixer/src/HDSPMixerPlaybacks.h b/hdspmixer/src/HDSPMixerPlaybacks.h index af776d0..1ef7768 100644 --- a/hdspmixer/src/HDSPMixerPlaybacks.h +++ b/hdspmixer/src/HDSPMixerPlaybacks.h @@ -34,7 +34,7 @@ class HDSPMixerPlaybacks:public Fl_Group public: HDSPMixerEmpty *empty_aebo[2]; HDSPMixerEmpty *empty; - HDSPMixerIOMixer *strips[26]; + HDSPMixerIOMixer *strips[HDSP_MAX_CHANNELS]; HDSPMixerPlaybacks(int x, int y, int w, int h, int nchannels); }; diff --git a/hdspmixer/src/HDSPMixerPresetData.cxx b/hdspmixer/src/HDSPMixerPresetData.cxx index 276d101..6359732 100644 --- a/hdspmixer/src/HDSPMixerPresetData.cxx +++ b/hdspmixer/src/HDSPMixerPresetData.cxx @@ -36,5 +36,6 @@ HDSPMixerPresetData::HDSPMixerPresetData() over = 3; level = 0; rate = 1; + loopback = 0; } diff --git a/hdspmixer/src/HDSPMixerPresetData.h b/hdspmixer/src/HDSPMixerPresetData.h index 58536d3..3b46b92 100644 --- a/hdspmixer/src/HDSPMixerPresetData.h +++ b/hdspmixer/src/HDSPMixerPresetData.h @@ -38,6 +38,7 @@ public: int over; int rate; int rmsplus3; + int loopback; HDSPMixerPresetData(); }; diff --git a/hdspmixer/src/HDSPMixerPresets.cxx b/hdspmixer/src/HDSPMixerPresets.cxx index a403179..82654d9 100644 --- a/hdspmixer/src/HDSPMixerPresets.cxx +++ b/hdspmixer/src/HDSPMixerPresets.cxx @@ -143,6 +143,7 @@ void HDSPMixerPresets::save_preset(int prst) { basew->playbacks->strips[i]->data[card][speed][p]->dest = basew->playbacks->strips[i]->targets->selected; basew->outputs->strips[i]->data[card][speed][p]->fader_pos = basew->outputs->strips[i]->fader->pos[0]; + basew->outputs->strips[i]->data[card][speed][p]->loopback = basew->outputs->strips[i]->loopback->get(); } /* Line outs */ basew->outputs->strips[HDSP_MAX_CHANNELS]->data[card][speed][p]->fader_pos = basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0]; @@ -188,23 +189,27 @@ void HDSPMixerPresets::restore_preset(int prst) { basew->playbacks->strips[i]->targets->selected = basew->playbacks->strips[i]->data[card][speed][p]->dest; basew->outputs->strips[i]->fader->pos[0] = basew->outputs->strips[i]->data[card][speed][p]->fader_pos; + basew->outputs->strips[i]->loopback->set(basew->outputs->strips[i]->data[card][speed][p]->loopback); } /* Line outs */ basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0] = basew->outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][p]->fader_pos; basew->outputs->strips[HDSP_MAX_CHANNELS+1]->fader->pos[0] = basew->outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][p]->fader_pos; - for (int i = 0; i < basew->cards[card]->channels; ++i) { + for (int i = 0; i < basew->cards[card]->channels_input; ++i) { basew->inputs->strips[i]->fader->sendGain(); basew->inputs->strips[i]->redraw(); + } + + for (int i = 0; i < basew->cards[card]->channels_playback; ++i) { basew->playbacks->strips[i]->fader->sendGain(); basew->playbacks->strips[i]->redraw(); basew->outputs->strips[i]->fader->sendGain(); basew->outputs->strips[i]->redraw(); } - basew->outputs->strips[basew->cards[card]->channels]->fader->sendGain(); - basew->outputs->strips[basew->cards[card]->channels]->redraw(); - basew->outputs->strips[basew->cards[card]->channels+1]->fader->sendGain(); - basew->outputs->strips[basew->cards[card]->channels+1]->redraw(); + basew->outputs->strips[basew->cards[card]->channels_playback]->fader->sendGain(); + basew->outputs->strips[basew->cards[card]->channels_playback]->redraw(); + basew->outputs->strips[basew->cards[card]->channels_playback+1]->fader->sendGain(); + basew->outputs->strips[basew->cards[card]->channels_playback+1]->redraw(); /* Global settings */ basew->inputs->buttons->view->input = basew->data[card][speed][p]->input; diff --git a/hdspmixer/src/HDSPMixerSelector.cxx b/hdspmixer/src/HDSPMixerSelector.cxx index bf11db0..3dcbad3 100644 --- a/hdspmixer/src/HDSPMixerSelector.cxx +++ b/hdspmixer/src/HDSPMixerSelector.cxx @@ -3,6 +3,9 @@ * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -21,62 +24,160 @@ #pragma implementation #include "HDSPMixerSelector.h" - static char *destinations_mf_ss[10] = { - "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", - "A 1+2", "A 3+4", "A 5+6", "A 7+8", - "SPDIF", "Analog" - }; - static char *destinations_mf_ds[8] = { - "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", - "A 1+2", "A 3+4", - "SPDIF", "Analog" - }; - static char *destinations_df_ss[14] = { - "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", - "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", - "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", - "SPDIF", "Analog" - }; - static char *destinations_df_ds[8] = { - "A1 1+2", "A1 3+4", - "A2 1+2", "A2 3+4", - "A3 1+2", "A3 3+4", - "SPDIF", "Analog" - }; - static char *destinations_h9652_ss[13] = { - "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", - "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", - "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", - "SPDIF" - }; +static char const *destinations_madi_ss[32] = { + "1+2", "3+4", "5+6", "7+8", + "9+10", "11+12", "13+14", "15+16", + "17+18", "19+20", "21+22", "23+24", + "25+26", "27+28", "29+30", "31+32", + "33+34", "35+36", "37+38", "39+40", + "41+42", "43+44", "45+46", "47+48", + "49+50", "51+52", "53+54", "55+56", + "57+58", "59+60", "61+62", "63+64" +}; - static char *destinations_h9652_ds[7] = { - "A1 1+2", "A1 3+4", - "A2 1+2", "A2 3+4", - "A3 1+2", "A3 3+4", - "SPDIF" - }; - static char *destinations_h9632_ss[8] = { - "A 1+2", "A 3+4", "A 5+6", "A 7+8", - "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" - }; - static char *destinations_h9632_ds[6] = { - "A 1+2", "A 3+4", - "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" - }; - static char *destinations_h9632_qs[4] = { - "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" - }; +static char const *destinations_madi_ds[16] = { + "1+2", "3+4", "5+6", "7+8", + "9+10", "11+12", "13+14", "15+16", + "17+18", "19+20", "21+22", "23+24", + "25+26", "27+28", "29+30", "31+32" +}; + +static char const *destinations_madi_qs[8] = { + "1+2", "3+4", "5+6", "7+8", + "9+10", "11+12", "13+14", "15+16" +}; + +static char const *destinations_aes32[8] = { + "AES 1+2", "AES 3+4", "AES 5+6", "AES 7+8", + "AES 9+10", "AES 11+12", "AES 13+14", "AES 15+16", +}; + +static char const *destinations_raydat_ss[18] = { + + "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", + "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", + "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", + "A4 1+2", "A4 3+4", "A4 5+6", "A4 7+8", + "AES", + "SPDIF" +}; + +static char const *destinations_raydat_ds[10] = { + "A1 1+2", "A1 3+4", + "A2 1+2", "A2 3+4", + "A3 1+2", "A3 3+4", + "A4 1+2", "A4 3+4", + "AES", + "SPDIF" +}; + +static char const *destinations_raydat_qs[6] = { + "A1 1+2", + "A2 1+2", + "A3 1+2", + "A4 1+2", + "AES", + "SPDIF" +}; + + +static char const *destinations_aio_ss[10] = { + "AN 1+2", + "AES", + "SPDIF", + "A 1+2", "A 3+4", "A 5+6", "A 7+8", + "Phones", + "AEB 1+2", + "AEB 3+4" +}; + +static char const *destinations_aio_ds[8] = { + "AN 1+2", + "AES", + "SPDIF", + "A 1+2", "A 3+4", + "Phones", + "AEB 1+2", + "AEB 3+4" +}; + +static char const *destinations_aio_qs[7] = { + "AN 1+2", + "AES", + "SPDIF", + "A 1+2", + "Phones", + "AEB 1+2", + "AEB 3+4" +}; + +static char const *destinations_mf_ss[10] = { + "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", + "A 1+2", "A 3+4", "A 5+6", "A 7+8", + "SPDIF", "Analog" +}; + +static char const *destinations_mf_ds[8] = { + "AN 1+2", "AN 3+4", "AN 5+6", "AN 7+8", + "A 1+2", "A 3+4", + "SPDIF", "Analog" +}; + +static char const *destinations_df_ss[14] = { + "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", + "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", + "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", + "SPDIF", "Analog" +}; + +static char const *destinations_df_ds[8] = { + "A1 1+2", "A1 3+4", + "A2 1+2", "A2 3+4", + "A3 1+2", "A3 3+4", + "SPDIF", "Analog" +}; + +static char const *destinations_rpm[3] = { + "Main", "Mon", "Phones" +}; + +static char const *destinations_h9652_ss[13] = { + "A1 1+2", "A1 3+4", "A1 5+6", "A1 7+8", + "A2 1+2", "A2 3+4", "A2 5+6", "A2 7+8", + "A3 1+2", "A3 3+4", "A3 5+6", "A3 7+8", + "SPDIF" +}; + +static char const *destinations_h9652_ds[7] = { + "A1 1+2", "A1 3+4", + "A2 1+2", "A2 3+4", + "A3 1+2", "A3 3+4", + "SPDIF" +}; + +static char const *destinations_h9632_ss[8] = { + "A 1+2", "A 3+4", "A 5+6", "A 7+8", + "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" +}; + +static char const *destinations_h9632_ds[6] = { + "A 1+2", "A 3+4", + "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" +}; + +static char const *destinations_h9632_qs[4] = { + "SPDIF", "AN 1+2", "AN 3+4", "AN 5+6" +}; HDSPMixerSelector::HDSPMixerSelector(int x, int y, int w, int h):Fl_Menu_(x, y, w, h) { max_dest = 0; selected = 0; basew = (HDSPMixerWindow *)window(); - setLabels(); textfont(FL_HELVETICA); textsize(8); - textcolor(FL_BLACK); + textcolor(FL_FOREGROUND_COLOR); + setLabels(); } void HDSPMixerSelector::draw() { @@ -135,7 +236,7 @@ int HDSPMixerSelector::handle(int e) { void HDSPMixerSelector::setLabels() { - HDSP_IO_Type type; + int type; hdsp_9632_aeb_t *aeb; int sm; clear(); @@ -170,6 +271,9 @@ void HDSPMixerSelector::setLabels() /* should never happen */ break; } + } else if (type == RPM) { + max_dest = 3; + destinations = destinations_rpm; } else if (type == H9652) { switch (sm) { case 0: @@ -199,7 +303,57 @@ void HDSPMixerSelector::setLabels() destinations = destinations_h9632_qs; break; } + } else if (HDSPeMADI == type) { + switch (sm) { + case 0: + max_dest = 32; + destinations = destinations_madi_ss; + break; + case 1: + max_dest = 16; + destinations = destinations_madi_ds; + break; + case 2: + max_dest = 8; + destinations = destinations_madi_qs; + break; + } + } else if (HDSP_AES == type) { + max_dest = 8; + destinations = destinations_aes32; + } else if (HDSPeAIO == type) { + switch (sm) { + case 0: + max_dest = 10; + destinations = destinations_aio_ss; + break; + case 1: + max_dest = 8; + destinations = destinations_aio_ds; + break; + case 2: + max_dest = 7; + destinations = destinations_aio_qs; + break; + } + } else if (HDSPeRayDAT == type) { + switch (sm) { + case 0: + max_dest = 18; + destinations = destinations_raydat_ss; + break; + case 1: + max_dest = 10; + destinations = destinations_raydat_ds; + break; + case 2: + max_dest = 6; + destinations = destinations_raydat_qs; + break; + } + } + for (int i = 0; i < max_dest; ++i) { add(destinations[i], 0, 0, 0, FL_MENU_TOGGLE); diff --git a/hdspmixer/src/HDSPMixerSelector.h b/hdspmixer/src/HDSPMixerSelector.h index 6f232cf..7994305 100644 --- a/hdspmixer/src/HDSPMixerSelector.h +++ b/hdspmixer/src/HDSPMixerSelector.h @@ -39,7 +39,7 @@ class HDSPMixerIOMixer; class HDSPMixerSelector:public Fl_Menu_ { private: - char **destinations; + char const **destinations; HDSPMixerWindow *basew; public: int max_dest; diff --git a/hdspmixer/src/HDSPMixerSetup.cxx b/hdspmixer/src/HDSPMixerSetup.cxx index 6fa3551..593ee70 100644 --- a/hdspmixer/src/HDSPMixerSetup.cxx +++ b/hdspmixer/src/HDSPMixerSetup.cxx @@ -91,7 +91,7 @@ static void rmsplus3_cb(Fl_Widget *widget, void *arg) } -HDSPMixerSetup::HDSPMixerSetup(int w, int h, char *label, HDSPMixerWindow *win):Fl_Double_Window(w, h, label) +HDSPMixerSetup::HDSPMixerSetup(int w, int h, char const *label, HDSPMixerWindow *win):Fl_Double_Window(w, h, label) { basew = win; plm = new Fl_Group(10, 25, 380, 60, "Peak Level Meters"); diff --git a/hdspmixer/src/HDSPMixerSetup.h b/hdspmixer/src/HDSPMixerSetup.h index 21ffbb2..ba95951 100644 --- a/hdspmixer/src/HDSPMixerSetup.h +++ b/hdspmixer/src/HDSPMixerSetup.h @@ -54,7 +54,7 @@ public: int level_val; int numbers_val; int rmsplus3_val; - HDSPMixerSetup(int w, int h, char *label, HDSPMixerWindow *win); + HDSPMixerSetup(int w, int h, char const *label, HDSPMixerWindow *win); HDSPMixerWindow *basew; void updateValues(); }; diff --git a/hdspmixer/src/HDSPMixerStripData.h b/hdspmixer/src/HDSPMixerStripData.h index 3d6cdb8..c74114c 100644 --- a/hdspmixer/src/HDSPMixerStripData.h +++ b/hdspmixer/src/HDSPMixerStripData.h @@ -22,14 +22,16 @@ #ifndef HDSPMixerStripData_H #define HDSPMixerStripData_H +#include "defines.h" + class HDSPMixerStripData { public: int mute; int solo; - int pan_pos[14]; - int fader_pos[14]; + int pan_pos[HDSP_MAX_DEST]; + int fader_pos[HDSP_MAX_DEST]; int dest; HDSPMixerStripData(); }; diff --git a/hdspmixer/src/HDSPMixerWindow.cxx b/hdspmixer/src/HDSPMixerWindow.cxx index fb90130..4a911c1 100644 --- a/hdspmixer/src/HDSPMixerWindow.cxx +++ b/hdspmixer/src/HDSPMixerWindow.cxx @@ -16,16 +16,27 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * @version 04-12-2009 [FF] + * - updated deprecated fl_ask calls + * */ #pragma implementation #include "HDSPMixerWindow.h" +/* header used in .mix file */ +const char header[] = "HDSPMixer v1"; + static void readregisters_cb(void *arg) { int err; snd_hwdep_t *hw; - hdsp_peak_rms_t peak_rms; + hdsp_peak_rms_t hdsp_peak_rms; + struct hdspm_peak_rms hdspm_peak_rms; + bool isMADI = false; + __u32 *input_peaks, *playback_peaks, *output_peaks; + __u64 *input_rms, *playback_rms, *output_rms; HDSPMixerWindow *w = (HDSPMixerWindow *)arg; @@ -39,49 +50,75 @@ static void readregisters_cb(void *arg) return; } - if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSP_IOCTL_GET_PEAK_RMS, (void *)&peak_rms)) < 0) { + if ((HDSPeMADI == w->cards[w->current_card]->type) || + (HDSPeAIO == w->cards[w->current_card]->type) || + (HDSP_AES == w->cards[w->current_card]->type) || + (HDSPeRayDAT == w->cards[w->current_card]->type)) { + isMADI = true; + if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSPM_IOCTL_GET_PEAK_RMS, (void *)&hdspm_peak_rms)) < 0) { fprintf(stderr, "HwDep ioctl failed. Metering stopped\n"); snd_hwdep_close(hw); return; + } + } else { + if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSP_IOCTL_GET_PEAK_RMS, (void *)&hdsp_peak_rms)) < 0) { + fprintf(stderr, "HwDep ioctl failed. Metering stopped\n"); + snd_hwdep_close(hw); + return; + } + } + snd_hwdep_close(hw); + + if (isMADI) { + // check for speed change + if (hdspm_peak_rms.speed != w->cards[w->current_card]->speed_mode) { + w->cards[w->current_card]->setMode(hdspm_peak_rms.speed); + } + input_peaks = hdspm_peak_rms.input_peaks; + playback_peaks = hdspm_peak_rms.playback_peaks; + output_peaks = hdspm_peak_rms.output_peaks; + + input_rms = hdspm_peak_rms.input_rms; + playback_rms = hdspm_peak_rms.playback_rms; + output_rms = hdspm_peak_rms.output_rms; + } else { + /* speed changes on non-MADI are already handled via alsactl_cb and + * getSpeed(), but the metering structs differ. + */ + input_peaks = hdsp_peak_rms.input_peaks; + playback_peaks = hdsp_peak_rms.playback_peaks; + output_peaks = hdsp_peak_rms.output_peaks; + + input_rms = hdsp_peak_rms.input_rms; + playback_rms = hdsp_peak_rms.playback_rms; + output_rms = hdsp_peak_rms.output_rms; } - snd_hwdep_close(hw); - + /* update the meter */ if (w->inputs->buttons->input) { - for (int i = 0; i < w->cards[w->current_card]->channels; ++i) { - w->inputs->strips[i]->meter->update(peak_rms.input_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xffffff00, - peak_rms.input_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xf, - peak_rms.input_rms[(w->cards[w->current_card]->meter_map[i])]); - } + for (int i = 0; i < w->cards[w->current_card]->channels_input; ++i) { + w->inputs->strips[i]->meter->update(input_peaks[(w->cards[w->current_card]->meter_map_input[i])] & 0xffffff00, + input_peaks[(w->cards[w->current_card]->meter_map_input[i])] & 0xf, + input_rms[(w->cards[w->current_card]->meter_map_input[i])]); + } } + if (w->inputs->buttons->playback) { - for (int i = 0; i < w->cards[w->current_card]->channels; ++i) { - w->playbacks->strips[i]->meter->update(peak_rms.playback_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xffffff00, - peak_rms.playback_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xf, - peak_rms.playback_rms[(w->cards[w->current_card]->meter_map[i])]); - } + for (int i = 0; i < w->cards[w->current_card]->channels_playback; ++i) { + w->playbacks->strips[i]->meter->update(playback_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00, + playback_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf, + playback_rms[(w->cards[w->current_card]->meter_map_playback[i])]); + } } + if (w->inputs->buttons->output) { - if (w->cards[w->current_card]->type != H9652) { - for (int i = 0; i < w->cards[w->current_card]->channels; ++i) { - w->outputs->strips[i]->meter->update(peak_rms.output_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xffffff00, - peak_rms.output_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xf, - 0 ); - } - for (int i = 0; i < w->cards[w->current_card]->lineouts; ++i) { - w->outputs->strips[w->cards[w->current_card]->channels+i]->meter->update(peak_rms.output_peaks[26+i] & 0xffffff00, - peak_rms.output_peaks[26+i] & 0xf, - 0 ); - } - } else { - for (int i = 0; i < w->cards[w->current_card]->channels; ++i) { - w->outputs->strips[i]->meter->update(peak_rms.output_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xffffff00, - peak_rms.output_peaks[(w->cards[w->current_card]->meter_map[i])] & 0xf, - peak_rms.output_rms[(w->cards[w->current_card]->meter_map[i])] ); - } - } + for (int i = 0; i < w->cards[w->current_card]->channels_output; ++i) { + w->outputs->strips[i]->meter->update(output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xffffff00, + output_peaks[(w->cards[w->current_card]->meter_map_playback[i])] & 0xf, + output_rms[(w->cards[w->current_card]->meter_map_playback[i])]); + } } - + Fl::add_timeout(0.03, readregisters_cb, w); } @@ -90,7 +127,7 @@ static void exit_cb(Fl_Widget *widget, void *arg) { HDSPMixerWindow *w = (HDSPMixerWindow *)arg; if (w->dirty) { - if (!fl_ask("There are unsaved changes, quit anyway ?")) return; + if (!fl_choice("There are unsaved changes, quit anyway ?", "Return", "Quit", NULL)) return; } exit(EXIT_SUCCESS); } @@ -182,8 +219,7 @@ static void save_cb(Fl_Widget *widget, void *arg) if (!(w->file_name = fl_file_chooser("Choose a file to save presets to :", "HDSPMixer preset file (*.mix)", NULL, 0))) return; } w->save(); - snprintf(w->window_title, FL_PATH_MAX, "HDSPMixer - %s", fl_filename_name(w->file_name)); - w->label(w->window_title); + w->setTitleWithFilename(); } static void make_default_cb(Fl_Widget *widget, void *arg) @@ -202,15 +238,14 @@ static void restore_defaults_cb(Fl_Widget *widget, void *arg) HDSPMixerWindow *w = (HDSPMixerWindow *)arg; int i = 0; if (w->dirty) { - if (!fl_ask("There are unsaved changes, restore factory settings anyway ?")) return; + if (!fl_choice("There are unsaved changes, restore factory settings anyway ?", "Don't restore", "Restore them", NULL)) return; } w->prefs->deleteEntry("default_file"); w->prefs->flush(); w->file_name = NULL; - snprintf(w->window_title, FL_PATH_MAX, "HDSPMixer"); - w->label(w->window_title); + w->setTitleWithFilename(); w->resetMixer(); - while (w->cards[i] != NULL) { + while (i < MAX_CARDS && w->cards[i] != NULL) { w->restoreDefaults(i++); } w->inputs->buttons->presets->preset_change(1); @@ -228,7 +263,7 @@ static void atclose_cb(Fl_Window *w, void *arg) { if (strncmp("HDSPMixer", w->label(), 9) == 0) { if (((HDSPMixerWindow *)w)->dirty) { - if (!fl_ask("There are unsaved changes, quit anyway ?")) return; + if (!fl_choice("There are unsaved changes, quit anyway ?", "Don't quit", "Quit", NULL)) return; } exit(EXIT_SUCCESS); } @@ -254,7 +289,7 @@ static int handler_cb(int event) case FL_SHORTCUT: if (key == FL_Escape) { if (w->dirty) { - if (!fl_ask("There are unsaved changes, quit anyway ?")) return 1; + if (!fl_choice("There are unsaved changes, quit anyway ?", "Don't quit", "Quit", NULL)) return 1; } exit(EXIT_SUCCESS); } @@ -302,93 +337,189 @@ static int handler_cb(int event) void HDSPMixerWindow::save() { - FILE *file; - if ((file = fopen(file_name, "w")) == NULL) { - fl_alert("Error opening file %s for saving", file_name); + const int pan_array_size = + sizeof(inputs->strips[0]->data[0][0][0]->pan_pos) / + sizeof(inputs->strips[0]->data[0][0][0]->pan_pos[0]); + /* MixerStripData defines pan_pos[HDSP_MAX_DEST], but just in case this + * will ever change, let's detect it early and fail safely instead of + * reading/writing garbage from/to preset files + */ + assert (HDSP_MAX_DEST == pan_array_size); + + /* also make sure that fader_pos[] has the same size as pan_pos. This comes + * naturally, but just to be sure. + */ + assert (pan_array_size == + sizeof(inputs->strips[0]->data[0][0][0]->fader_pos) / + sizeof(inputs->strips[0]->data[0][0][0]->fader_pos[0])); + + FILE *in,*out; + + /* We want to append any existing extra data that might got written by a + * newer version to this file, therefore write our data to file_name.tmp + * and append the old data. Also this way we would not corrupt the file + * should we crash. + */ + std::string const tmp = file_name + std::string(".tmp"); + char const * const tmpc = tmp.c_str(); + + if ((out = fopen(tmpc, "w")) == NULL) { + fl_alert("Error opening file %s for saving", tmpc); } if (dirty) { inputs->buttons->presets->save_preset(current_preset+1); } + /* since hdspmixer 1.11, we also store the meter level settings. Indicate + * the new on-disk structure via a small header */ + if (fwrite((void *)&header, sizeof(char), sizeof(header), out) != + sizeof(header)) { + goto save_error; + } + for (int speed = 0; speed < 3; ++speed) { - for (int card = 0; card < 3; ++card) { + for (int card = 0; card < MAX_CARDS; ++card) { for (int preset = 0; preset < 8; ++preset) { for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { /* inputs pans and volumes */ - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), 14, file) != 14) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, out) != pan_array_size) { goto save_error; } - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), 14, file) != 14) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, out) != pan_array_size) { goto save_error; } /* playbacks pans and volumes */ - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), 14, file) != 14) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, out) != pan_array_size) { goto save_error; } - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), 14, file) != 14) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, out) != pan_array_size) { goto save_error; } /* inputs mute/solo/dest */ - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->mute), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->mute), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->solo), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->solo), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->dest), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(inputs->strips[channel]->data[card][speed][preset]->dest), sizeof(int), 1, out) != 1) { goto save_error; } /* playbacks mute/solo/dest */ - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->mute), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->mute), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->solo), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->solo), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->dest), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(playbacks->strips[channel]->data[card][speed][preset]->dest), sizeof(int), 1, out) != 1) { goto save_error; } /* outputs volumes */ - if (fwrite((void *)&(outputs->strips[channel]->data[card][speed][preset]->fader_pos), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(outputs->strips[channel]->data[card][speed][preset]->fader_pos), sizeof(int), 1, out) != 1) { goto save_error; } } /* Lineouts */ - if (fwrite((void *)&(outputs->strips[HDSP_MAX_CHANNELS]->data[card][speed][preset]->fader_pos), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(outputs->strips[HDSP_MAX_CHANNELS]->data[card][speed][preset]->fader_pos), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][preset]->fader_pos), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][preset]->fader_pos), sizeof(int), 1, out) != 1) { goto save_error; } /* Global settings */ - if (fwrite((void *)&(data[card][speed][preset]->input), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->input), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->output), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->output), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->playback), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->playback), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->submix), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->submix), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->submix_value), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->submix_value), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->solo), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->solo), sizeof(int), 1, out) != 1) { goto save_error; } - if (fwrite((void *)&(data[card][speed][preset]->mute), sizeof(int), 1, file) != 1) { + if (fwrite((void *)&(data[card][speed][preset]->mute), sizeof(int), 1, out) != 1) { goto save_error; } + if (fwrite((void *)&(data[card][speed][preset]->last_destination), sizeof(int), 1, out) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->rmsplus3), sizeof(int), 1, out) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->numbers), sizeof(int), 1, out) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->over), sizeof(int), 1, out) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->level), sizeof(int), 1, out) != 1) { + goto save_error; + } + if (fwrite((void *)&(data[card][speed][preset]->rate), sizeof(int), 1, out) != 1) { + goto save_error; + } } } } - fclose(file); + + /* Output loopback data */ + for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { + auto const strip = outputs->strips[channel]; + + for (int card = 0; card < MAX_CARDS; ++card) { + auto const data = strip->data[card]; + + for (int speed = 0; speed < 3; ++speed) { + auto const spd = data[speed]; + + for (int preset = 0; preset < 8; ++preset) { + auto const data = spd[preset]; + + if (fwrite((void *)&(data->loopback), + sizeof(int), + 1, + out) != 1) + goto save_error; + } + } + } + } + + /* If the file we want to write already exists it could be possible that it + * was saved with a newer version. If that is the case we just append its + * content to the new output file and that way ensure that we don't lose any + * data the new version wrote. + */ + if ((in = fopen(file_name, "r")) != NULL) { + if (!fseek(in, ftell(out), SEEK_SET)) { + char buff[512]; + size_t read; + while ((read = fread(&buff, sizeof(char), sizeof(buff), in)) != 0) + fwrite(buff, sizeof(char), read, out); + if (ferror(in) || ferror(out)) + fl_alert("Error appending %s to %s", file_name, tmpc); + } + fclose(in); + } + + fclose(out); + + if (rename(tmpc, file_name)) + fl_alert("Error renaming %s to %s", tmpc, file_name); + ::remove(tmpc); + return; save_error: - fclose(file); + fclose(out); fl_alert("Error saving presets to file %s", file_name); return; } @@ -399,28 +530,66 @@ void HDSPMixerWindow::load() if ((file = fopen(file_name, "r")) == NULL) { int i = 0; fl_alert("Error opening file %s for reading", file_name); - while (cards[i] != NULL) { + while (i < MAX_CARDS && cards[i] != NULL) { restoreDefaults(i++); } inputs->buttons->presets->preset_change(1); return; } + + /* check for new ondisk format */ + char buffer[sizeof(header)]; + bool ondisk_v1 = false; + int pan_array_size = 14; /* old (pre 1.0.24) HDSP_MAX_DEST */ + int channels_per_card = 26; /* old (pre 1.0.24) HDSP_MAX_CHANNELS */ + bool res = true; + + if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) { + goto load_error; + } + if (0 == strncmp(buffer, header, sizeof(buffer))) { + /* new ondisk format found */ + ondisk_v1 = true; + pan_array_size = HDSP_MAX_DEST; + channels_per_card = HDSP_MAX_CHANNELS; + } else { + /* There are two different kinds of old format: pre 1.0.24 and + * the one used for 1.0.24/1.0.24.1. We can distinguish between + * these two by checking the file size, becase HDSP_MAX_CHANNELS + * was bumped right before the 1.0.24 release. + */ + fseek (file, 0, SEEK_END); + long filesize = ftell (file); + + if (1163808 == filesize) { + /* file written by hdspmixer v1.0.24 or v1.0.24.1 with + * HDSP_MAX_CHANNELS set to 64, but pan_array_size still at + * 14, so setting channels_per_card should get the correct + * mapping. + */ + channels_per_card = 64; /* HDSP_MAX_CHANNELS */ + } + + /* rewind to the start and simply read all data */ + rewind(file); + } + for (int speed = 0; speed < 3; ++speed) { - for (int card = 0; card < 3; ++card) { + for (int card = 0; card < MAX_CARDS; ++card) { for (int preset = 0; preset < 8; ++preset) { - for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { + for (int channel = 0; channel < channels_per_card; ++channel) { /* inputs pans and volumes */ - if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), 14, file) != 14) { + if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto load_error; } - if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), 14, file) != 14) { + if (fread((void *)&(inputs->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto load_error; } /* playbacks pans and volumes */ - if (fread((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), 14, file) != 14) { + if (fread((void *)&(playbacks->strips[channel]->data[card][speed][preset]->pan_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto load_error; } - if (fread((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), 14, file) != 14) { + if (fread((void *)&(playbacks->strips[channel]->data[card][speed][preset]->fader_pos[0]), sizeof(int), pan_array_size, file) != pan_array_size) { goto load_error; } /* inputs mute/solo/dest */ @@ -478,12 +647,72 @@ void HDSPMixerWindow::load() if (fread((void *)&(data[card][speed][preset]->mute), sizeof(int), 1, file) != 1) { goto load_error; } + /* read additional meter settings only present in newer mix files */ + if (ondisk_v1) { + if (fread((void *)&(data[card][speed][preset]->last_destination), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->rmsplus3), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->numbers), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->over), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->level), sizeof(int), 1, file) != 1) { + goto load_error; + } + if (fread((void *)&(data[card][speed][preset]->rate), sizeof(int), 1, file) != 1) { + goto load_error; + } + } } } } + + /* Output loopback data */ + for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) { + auto const strip = outputs->strips[channel]; + + for (int card = 0; card < MAX_CARDS; ++card) { + auto const data = strip->data[card]; + + for (int speed = 0; speed < 3; ++speed) { + auto const spd = data[speed]; + + for (int preset = 0; preset < 8; ++preset) { + auto const data = spd[preset]; + + /* TODO: Somewhere we get a value of 5 from, investigate + * this another day. For now just reset it here and + * continue looping to reset the value. + */ + data->loopback = 0; + + if (feof(file)) { + res = true; + continue; + } + + if (ferror(file)) { + res = false; + continue; + } + + if (fread((void *)&(data->loopback), sizeof(int), 1, file) != 1) + res = false; + } + } + } + } + + if (!res) + goto load_error; + fclose(file); - snprintf(window_title, FL_PATH_MAX, "HDSPMixer - %s", fl_filename_name(file_name)); - label(window_title); + setTitleWithFilename(); resetMixer(); inputs->buttons->presets->preset_change(1); return; @@ -493,9 +722,68 @@ load_error: return; } +void HDSPMixerWindow::setTitle(std::string suffix) +{ + std::string title = "HDSPMixer ("; + + title = title + cards[current_card]->cardname + ") "; /*cardname */ + title = title + suffix; + snprintf(window_title, FL_PATH_MAX, "%s", title.c_str()); + label(window_title); +} + +void HDSPMixerWindow::setTitleWithFilename(void) +{ + const char *filename = fl_filename_name(file_name); + + if (NULL == file_name) { + filename = "(unsaved)"; + } + + setTitle(filename); +} + +void HDSPMixerWindow::stashPreset(void) +{ + cards[current_card]->last_preset = current_preset; + cards[current_card]->last_dirty = dirty; + /* save the current mixer state to the virtual 9th preset */ + inputs->buttons->presets->save_preset(9); +} + +void HDSPMixerWindow::unstashPreset(void) +{ + /* load temporary data from virtual 9th preset */ + inputs->buttons->presets->restore_preset(9); + + current_preset = cards[current_card]->last_preset; + /* Internal notion of playback in use. Relevant for blinking buttons */ + inputs->buttons->presets->preset = current_preset + 1; + dirty = cards[current_card]->last_dirty; + /* Preset masks (which preset button is green) */ + inputs->buttons->presets->presetmask = (int)pow(2, current_preset); + if (dirty) { + /* make the buttons blink if it's unsaved. We need to remove any + * existing triggers to dirty_cb, because dirty_cb is called + * every 0.3 seconds and enabling/disabling (highlight/unlight) the + * buttons, so if we have too many callbacks, the buttons would + * remain in one state --> no blinking. We need exactly one. + */ + Fl::remove_timeout(dirty_cb, (void *)this); + Fl::add_timeout(0.3, dirty_cb, (void *)this); + } else { + /* Hack. I don't know why this is necessary, but if we're clean, + * we need to recall the preset again to correctly reflect + * the dirty/undirty state. + * + * Though it's a little bit redundant, it at least won't do any harm. + */ + inputs->buttons->presets->preset_change(current_preset+1); + } +} + void HDSPMixerWindow::restoreDefaults(int card) { - int phones; int chnls[3]; int maxdest[3]; int h9632_spdif_submix[3]; @@ -508,21 +796,22 @@ void HDSPMixerWindow::restoreDefaults(int card) chnls[1] = 14; maxdest[0] = 10; maxdest[1] = 8; - phones = 1; break; case Digiface: chnls[0] = 26; chnls[1] = 14; maxdest[0] = 14; maxdest[1] = 8; - phones = 1; break; + case RPM: + chnls[0] = chnls[1] = 6; + maxdest[0] = maxdest[1] = 3; + break; case H9652: chnls[0] = 26; chnls[1] = 14; maxdest[0] = 13; maxdest[1] = 7; - phones = 0; break; case H9632: chnls[0] = 16; @@ -538,15 +827,52 @@ void HDSPMixerWindow::restoreDefaults(int card) h9632_an12_submix[1] = 3; h9632_an12_submix[2] = 1; num_modes = 3; - phones = 0; break; + case HDSPeMADI: + chnls[0] = 64; + chnls[1] = 32; + chnls[2] = 16; + maxdest[0] = 32; + maxdest[1] = 16; + maxdest[2] = 8; + num_modes = 3; + break; + case HDSP_AES: /* these cards support full channel count at all modes */ + chnls[0] = 16; + chnls[1] = 16; + chnls[2] = 16; + maxdest[0] = 8; + maxdest[1] = 8; + maxdest[2] = 8; + num_modes = 3; + break; + case HDSPeAIO: + chnls[0] = 18; + chnls[1] = 14; + chnls[2] = 12; + maxdest[0] = 10; + maxdest[1] = 8; + maxdest[2] = 7; + num_modes = 3; + break; + case HDSPeRayDAT: + chnls[0] = 36; + chnls[1] = 20; + chnls[2] = 12; + maxdest[0] = 18; + maxdest[1] = 10; + maxdest[2] = 6; + num_modes = 3; + break; + default: /* should never happen */ return; } + for (int preset = 0; preset < 8; ++preset) { for (int speed = 0; speed < num_modes; ++speed) { - for (int i = 0; i < chnls[speed]; i+=2) { + for (int i = 0; i < 2*maxdest[speed]; i+=2) { for (int z = 0; z < maxdest[speed]; ++z) { /* Gain setup */ if (cards[card]->type == H9632) { @@ -560,13 +886,13 @@ void HDSPMixerWindow::restoreDefaults(int card) ((preset == 1 && z == h9632_an12_submix[speed]) || i == z*2 || (preset == 5 && z == h9632_spdif_submix[speed])) ? ndb : 0; } else { inputs->strips[i]->data[card][speed][preset]->fader_pos[z] = - ((preset == 6 && z == (maxdest[speed]-phones-1)) || (i == z*2 && (preset > 1 && preset < 4)) || (((preset > 0 && preset < 4) || preset == 7) && phones && (z == maxdest[speed]-1))) ? ndb : 0; + ((preset == 6 && z == (maxdest[speed]-1)) || (i == z*2 && (preset > 1 && preset < 4)) || (((preset > 0 && preset < 4) || preset == 7) && (z == maxdest[speed]-1))) ? ndb : 0; inputs->strips[i+1]->data[card][speed][preset]->fader_pos[z] = - ((preset == 6 && z == (maxdest[speed]-phones-1)) || (i == z*2 && (preset > 1 && preset < 4)) || (((preset > 0 && preset < 4) || preset == 7) && phones && (z == maxdest[speed]-1))) ? ndb : 0; + ((preset == 6 && z == (maxdest[speed]-1)) || (i == z*2 && (preset > 1 && preset < 4)) || (((preset > 0 && preset < 4) || preset == 7) && (z == maxdest[speed]-1))) ? ndb : 0; playbacks->strips[i]->data[card][speed][preset]->fader_pos[z] = - ((preset > 4 && preset < 7 && z == (maxdest[speed]-phones-1)) || i == z*2 || (phones && (z == maxdest[speed]-1))) ? ndb : 0; + ((preset > 4 && preset < 7 && z == (maxdest[speed]-1)) || i == z*2 || ((z == maxdest[speed]-1))) ? ndb : 0; playbacks->strips[i+1]->data[card][speed][preset]->fader_pos[z] = - ((preset > 4 && preset < 7 && z == (maxdest[speed]-phones-1)) || i == z*2 || (phones && (z == maxdest[speed]-1))) ? ndb : 0; + ((preset > 4 && preset < 7 && z == (maxdest[speed]-1)) || i == z*2 || ((z == maxdest[speed]-1))) ? ndb : 0; } /* Pan setup */ inputs->strips[i]->data[card][speed][preset]->pan_pos[z] = 0; @@ -582,6 +908,8 @@ void HDSPMixerWindow::restoreDefaults(int card) } outputs->strips[i]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0; outputs->strips[i+1]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0; + outputs->strips[i]->data[card][speed][preset]->loopback = 0; + outputs->strips[i+1]->data[card][speed][preset]->loopback = 0; if (preset == 3 || preset == 7) { inputs->strips[i]->data[card][speed][preset]->mute = 1; inputs->strips[i+1]->data[card][speed][preset]->mute = 1; @@ -604,7 +932,7 @@ void HDSPMixerWindow::restoreDefaults(int card) data[card][speed][preset]->submix = 0; } } else if (preset > 4 && preset < 7) { - data[card][speed][preset]->submix_value = maxdest[speed]-phones-1; + data[card][speed][preset]->submix_value = maxdest[speed]-1; if (preset == 5) { outputs->strips[chnls[speed]-2]->data[card][speed][preset]->fader_pos = ndb; outputs->strips[chnls[speed]-1]->data[card][speed][preset]->fader_pos = ndb; @@ -615,10 +943,6 @@ void HDSPMixerWindow::restoreDefaults(int card) if (preset == 3 || preset == 7) { data[card][speed][preset]->mute = 1; } - if (phones) { - outputs->strips[chnls[speed]]->data[card][speed][preset]->fader_pos = (preset != 4) ? ndb : 0; - outputs->strips[chnls[speed]+1]->data[card][speed][preset]->fader_pos = (preset != 4) ? ndb : 0; - } } } } @@ -643,8 +967,8 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, prefs->flush(); } } - for (int j = 0; j < 3; ++j) { - for (int i = 0; i < 8; ++i) { + for (int j = 0; j < MAX_CARDS; j++) { + for (int i = 0; i < NUM_PRESETS; ++i) { data[j][0][i] = new HDSPMixerPresetData(); data[j][1][i] = new HDSPMixerPresetData(); data[j][2][i] = new HDSPMixerPresetData(); @@ -669,19 +993,19 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, menubar->add("&View/Submix", 's', (Fl_Callback *)submix_cb, (void *)this, FL_MENU_TOGGLE|FL_MENU_VALUE); menubar->add("&Options/Level Meter Setup", 'm', (Fl_Callback *)setup_cb, (void *)this); menubar->add("&?/About", 0, (Fl_Callback *)about_cb, (void *)this); - inputs = new HDSPMixerInputs(0, MENU_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels); + inputs = new HDSPMixerInputs(0, MENU_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels_input); inputs->buttons->input = 1; inputs->buttons->output = 1; inputs->buttons->submix = 1; inputs->buttons->playback = 1; - playbacks = new HDSPMixerPlaybacks(0, MENU_HEIGHT+FULLSTRIP_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels); - outputs = new HDSPMixerOutputs(0, MENU_HEIGHT+FULLSTRIP_HEIGHT*2, w, SMALLSTRIP_HEIGHT, cards[0]->channels); + playbacks = new HDSPMixerPlaybacks(0, MENU_HEIGHT+FULLSTRIP_HEIGHT, w, FULLSTRIP_HEIGHT, cards[0]->channels_playback); + outputs = new HDSPMixerOutputs(0, MENU_HEIGHT+FULLSTRIP_HEIGHT*2, w, SMALLSTRIP_HEIGHT, cards[0]->channels_output); scroll->end(); end(); setup = new HDSPMixerSetup(400, 260, "Level Meters Setup", this); - about = new HDSPMixerAbout(360, 260, "About HDSPMixer", this); + about = new HDSPMixerAbout(360, 300, "About HDSPMixer", this); i = 0; - while (cards[i] != NULL) { + while (i < MAX_CARDS && cards[i] != NULL) { cards[i++]->initializeCard(this); } size_range(MIN_WIDTH, MIN_HEIGHT, cards[current_card]->window_width, cards[current_card]->window_height); @@ -692,17 +1016,20 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label, } else { printf("Initializing default presets\n"); i = 0; - while (cards[i] != NULL) { + while (i < MAX_CARDS && cards[i] != NULL) { + current_card = i; restoreDefaults(i++); + inputs->buttons->presets->preset_change(1); } - inputs->buttons->presets->preset_change(1); } Fl::atclose = atclose_cb; Fl::add_handler(handler_cb); Fl::add_timeout(0.030, readregisters_cb, this); i = 0; - while (cards[i] != NULL) + while (i < MAX_CARDS && cards[i] != NULL) { + current_card = i; inputs->buttons->cardselector->ActivateCard (i++); + } } int HDSPMixerWindow::handle(int e) @@ -790,12 +1117,10 @@ void HDSPMixerWindow::checkState() /* Outputs row */ if (outputs->strips[i]->data[current_card][speed][p]->fader_pos != outputs->strips[i]->fader->pos[0]) corrupt++; + if (outputs->strips[i]->data[current_card][speed][p]->loopback != outputs->strips[i]->loopback->get()) + corrupt++; } - /* Line outs */ - if (outputs->strips[HDSP_MAX_CHANNELS]->data[current_card][speed][p]->fader_pos != outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0]) - corrupt++; - if (outputs->strips[HDSP_MAX_CHANNELS+1]->data[current_card][speed][p]->fader_pos != outputs->strips[HDSP_MAX_CHANNELS+1]->fader->pos[0]) - corrupt++; + /* Global settings */ if (data[current_card][speed][p]->mute != inputs->buttons->master->mute) corrupt++; @@ -824,22 +1149,20 @@ void HDSPMixerWindow::checkState() corrupt++; if (corrupt) { - if (!dirty) { - dirty = 1; - snprintf(window_title, FL_PATH_MAX, "HDSPMixer - %s *", fl_filename_name(file_name)); - label(window_title); - Fl::add_timeout(0.3, dirty_cb, (void *)this); - } + if (!dirty) { + dirty = 1; + setTitleWithFilename(); + Fl::add_timeout(0.3, dirty_cb, (void *)this); + } } else { - snprintf(window_title, FL_PATH_MAX, "HDSPMixer - %s", fl_filename_name(file_name)); - label(window_title); - dirty = 0; + setTitleWithFilename(); + dirty = 0; } } void HDSPMixerWindow::setSubmix(int submix_value) { - for (int i = 0; i < cards[current_card]->channels; i++) { + for (int i = 0; i < cards[current_card]->channels_playback; i++) { inputs->strips[i]->targets->value(submix_value); inputs->strips[i]->targets->redraw(); inputs->strips[i]->fader->dest = submix_value; @@ -859,7 +1182,7 @@ void HDSPMixerWindow::setSubmix(int submix_value) void HDSPMixerWindow::unsetSubmix() { - for (int i = 0; i < cards[current_card]->channels; i++) { + for (int i = 0; i < cards[current_card]->channels_input; i++) { inputs->strips[i]->targets->value(inputs->strips[i]->targets->selected); inputs->strips[i]->targets->redraw(); inputs->strips[i]->fader->dest = inputs->strips[i]->targets->selected; @@ -881,7 +1204,7 @@ void HDSPMixerWindow::unsetSubmix() void HDSPMixerWindow::refreshMixer() { int i, j; - for (i = 1; i <= cards[current_card]->channels; ++i) { + for (i = 1; i <= cards[current_card]->channels_input; ++i) { for (j = 0; j < inputs->strips[0]->targets->max_dest; ++j) { setMixer(i, 0, j); setMixer(i, 1, j); @@ -901,7 +1224,7 @@ void HDSPMixerWindow::resetMixer() { int i, j; for (i = 0; i < (cards[current_card]->playbacks_offset*2) ; ++i) { - for (j = 0; j < (cards[current_card]->playbacks_offset+cards[current_card]->lineouts); ++j) { + for (j = 0; j < (cards[current_card]->playbacks_offset); ++j) { setGain(i, j, 0); } } @@ -917,6 +1240,8 @@ void HDSPMixerWindow::setGain(int in, int out, int value) snd_ctl_elem_id_t *id; snd_ctl_elem_value_t *ctl; snd_ctl_t *handle; + + //printf("setGain(%d, %d, %d)\n", in, out, value); snd_ctl_elem_value_alloca(&ctl); snd_ctl_elem_id_alloca(&id); @@ -927,7 +1252,7 @@ void HDSPMixerWindow::setGain(int in, int out, int value) snd_ctl_elem_value_set_id(ctl, id); if ((err = snd_ctl_open(&handle, cards[current_card]->name, SND_CTL_NONBLOCK)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 1: %s\n", snd_strerror(err)); return; } @@ -935,7 +1260,7 @@ void HDSPMixerWindow::setGain(int in, int out, int value) snd_ctl_elem_value_set_integer(ctl, 1, out); snd_ctl_elem_value_set_integer(ctl, 2, value); if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 2: %s\n", snd_strerror(err)); snd_ctl_close(handle); return; } @@ -955,6 +1280,17 @@ void HDSPMixerWindow::setMixer(int idx, int src, int dst) snd_ctl_elem_value_t *ctl; snd_ctl_t *handle; + char *channel_map; + + switch (src) { + case 0: + channel_map = cards[current_card]->channel_map_input; + break; + case 1: + case 2: + channel_map = cards[current_card]->channel_map_playback; + } + gsolo_active = inputs->buttons->master->solo_active; gmute_active = inputs->buttons->master->mute_active; gsolo = inputs->buttons->master->solo; @@ -973,7 +1309,7 @@ void HDSPMixerWindow::setMixer(int idx, int src, int dst) snd_ctl_elem_value_set_id(ctl, id); if ((err = snd_ctl_open(&handle, cards[current_card]->name, SND_CTL_NONBLOCK)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 3: %s\n", snd_strerror(err)); return; } @@ -1003,19 +1339,20 @@ void HDSPMixerWindow::setMixer(int idx, int src, int dst) right_val = attenuation_r* vol * pan; muted: - snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+cards[current_card]->channel_map[idx-1]); + snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+channel_map[idx-1]); snd_ctl_elem_value_set_integer(ctl, 1, cards[current_card]->dest_map[dst]); snd_ctl_elem_value_set_integer(ctl, 2, (int)left_val); if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 4: %s\n", snd_strerror(err)); snd_ctl_close(handle); return; } - snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+cards[current_card]->channel_map[idx-1]); + + snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+channel_map[idx-1]); snd_ctl_elem_value_set_integer(ctl, 1, cards[current_card]->dest_map[dst]+1); snd_ctl_elem_value_set_integer(ctl, 2, (int)right_val); if ((err = snd_ctl_elem_write(handle, ctl)) < 0) { - fprintf(stderr, "Alsa error: %s\n", snd_strerror(err)); + fprintf(stderr, "Alsa error 5: %s\n", snd_strerror(err)); snd_ctl_close(handle); return; } @@ -1026,10 +1363,13 @@ muted: dest = (int)floor((idx-1)/2); - for (i = 0; i < cards[current_card]->channels; ++i) { + for (i = 0; i < cards[current_card]->channels_input; ++i) { if ((vol = inputs->strips[i]->fader->posToInt(inputs->strips[i]->fader->pos[dest])) != 0) { setMixer(i+1, 0, dest); } + } + + for (i = 0; i < cards[current_card]->channels_playback; ++i) { if ((vol = playbacks->strips[i]->fader->posToInt(playbacks->strips[i]->fader->pos[dest])) != 0) { setMixer(i+1, 1, dest); } diff --git a/hdspmixer/src/HDSPMixerWindow.h b/hdspmixer/src/HDSPMixerWindow.h index f10b729..134db3e 100644 --- a/hdspmixer/src/HDSPMixerWindow.h +++ b/hdspmixer/src/HDSPMixerWindow.h @@ -73,8 +73,8 @@ public: Fl_Scroll *scroll; HDSPMixerSetup *setup; HDSPMixerAbout *about; - HDSPMixerPresetData *data[3][3][8]; /* data[card number][mode(ss/ds/qs)][preset number] */ - HDSPMixerCard *cards[3]; + HDSPMixerPresetData *data[MAX_CARDS][3][NUM_PRESETS]; /* data[card number][mode(ss/ds/qs)][preset number] */ + HDSPMixerCard *cards[MAX_CARDS]; HDSPMixerInputs *inputs; HDSPMixerPlaybacks *playbacks; HDSPMixerOutputs *outputs; @@ -93,6 +93,10 @@ public: void refreshMixerStrip(int idx, int src); void save(); void load(); + void setTitle(std::string suffix); + void setTitleWithFilename(); + void stashPreset(); + void unstashPreset(); }; #endif diff --git a/hdspmixer/src/Makefile.am b/hdspmixer/src/Makefile.am index 9bb83af..ebc4c3c 100644 --- a/hdspmixer/src/Makefile.am +++ b/hdspmixer/src/Makefile.am @@ -15,6 +15,8 @@ hdspmixer_SOURCES = \ HDSPMixerEmpty.h \ HDSPMixerOutput.cxx \ HDSPMixerOutput.h \ + HDSPMixerLoopback.cxx \ + HDSPMixerLoopback.h \ HDSPMixerIOMixer.cxx \ HDSPMixerIOMixer.h \ HDSPMixerSelector.cxx \ @@ -55,4 +57,7 @@ hdspmixer_SOURCES = \ HDSPMixerMeter.h \ pixmaps.cxx \ pixmaps.h \ - defines.h + defines.h \ + channelmap.cxx \ + channelmap.h + diff --git a/hdspmixer/src/channelmap.cxx b/hdspmixer/src/channelmap.cxx new file mode 100644 index 0000000..bfb136d --- /dev/null +++ b/hdspmixer/src/channelmap.cxx @@ -0,0 +1,393 @@ +/* + * HDSPMixer + * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + */ + +#include "channelmap.h" + + +/*** + * + * hdsp cards + * + ***/ + +// Digiface + + +char dest_map_df_ss[14] = { + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26 +}; + +char channel_map_df_ss[26] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* ADAT 1 */ + 8, 9, 10, 11, 12, 13, 14, 15, /* ADAT 2 */ + 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT 3 */ + 24, 25 /* SPDIF */ +}; + +// Multiface + +char dest_map_mf_ss[10] = { + 0, 2, 4, 6, 16, 18, 20, 22, 24, 26 +}; + +char channel_map_mf_ss[26] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* Line in */ + 16, 17, 18, 19, 20, 21, 22, 23, /* ADAT */ + 24, 25, /* SPDIF */ + 26, 27, /* Phones L+R, only a destination channel */ + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 +}; + +// Digiface/Multiface + +char meter_map_ds[26] = { + 0, 1, 2, 3, 8, 9, 10, 11, /* analog 1-8 on Multiface, ADAT1+2 on Digiface*/ + 16, 17, 18, 19, /* ADAT on Multiface, ADAT3 on Digiface */ + 24, 25, /* SPDIF */ + 26, 27, /* Headphones */ + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 +}; + +char channel_map_ds[26] = { + 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, + 24, 25, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 +}; + +char dest_map_ds[8] = { + 0, 2, 8, 10, 16, 18, 24, 26 +}; + +/* RPM */ +char dest_map_rpm[3] = { + 0, 2, 4 +}; + +char channel_map_rpm[26] = { + 0, 1, 2, 3, 4, 5, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1 +}; + +// HDSP 9652 + +char dest_map_h9652_ss[13] = { + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 +}; + +char dest_map_h9652_ds[7] = { + 0, 2, 8, 10, 16, 18, 24 +}; + +// HDSP 9632 + +char dest_map_h9632_ss[8] = { + 0, 2, 4, 6, 8, 10, 12, 14 +}; + +char dest_map_h9632_ds[6] = { + 0, 2, 8, 10, 12, 14 +}; + +char dest_map_h9632_qs[4] = { + 8, 10, 12, 14 +}; + +char channel_map_h9632_ss[16] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 +}; + +char channel_map_h9632_ds[12] = { + 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 +}; + +char channel_map_h9632_qs[8] = { + 8, 9, 10, 11, 12, 13, 14, 15 +}; + + +/*** + * + * hdspm cards + * + ***/ + +// HDSPe MADI and MADIface + +char dest_map_unity[32] = { + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62 +}; + +char channel_map_unity_ss[HDSPM_MAX_CHANNELS] = { + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63 +}; + +char channel_map_unity_ds[HDSPM_MAX_CHANNELS] = { + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, +}; + +char channel_map_unity_qs[HDSPM_MAX_CHANNELS] = { + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, +}; + +// HDSPe RayDAT + +char dest_map_raydat_ss[18] = { + 4, 6, 8, 10, + 12, 14, 16, 18, + 20, 22, 24, 26, + 28, 30, 32, 34, + 0, 2 +}; + +char dest_map_raydat_ds[10] = { + 4, 6, + 8, 10, + 12, 14, + 16, 18, + 0, 2 +}; + +char dest_map_raydat_qs[6] = { + 4, + 6, + 8, + 10, + 0, 2 +}; + +char channel_map_raydat_ss[HDSPM_MAX_CHANNELS] = { + 4, 5, 6, 7, 8, 9, 10, 11, /* ADAT 1 */ + 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT 2 */ + 20, 21, 22, 23, 24, 25, 26, 27, /* ADAT 3 */ + 28, 29, 30, 31, 32, 33, 34, 35, /* ADAT 4 */ + 0, 1, /* AES */ + 2, 3, /* SPDIF */ + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, +}; + +char channel_map_raydat_ds[HDSPM_MAX_CHANNELS] = { + 4, 5, 6, 7, /* ADAT 1 */ + 8, 9, 10, 11, /* ADAT 2 */ + 12, 13, 14, 15, /* ADAT 3 */ + 16, 17, 18, 19, /* ADAT 4 */ + 0, 1, /* AES */ + 2, 3, /* SPDIF */ + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, +}; + +char channel_map_raydat_qs[HDSPM_MAX_CHANNELS] = { + 4, 5, /* ADAT 1 */ + 6, 7, /* ADAT 2 */ + 8, 9, /* ADAT 3 */ + 10, 11, /* ADAT 4 */ + 0, 1, /* AES */ + 2, 3, /* SPDIF */ + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, +}; + +// HDSPe AIO + +char dest_map_aio_ss[10] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, 14, 16, 18, // ADAT + 6, // Phones + 2, // AEB 1+2 + 4 // AEB 3+4 +}; + + +char dest_map_aio_ds[8] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, 16, // ADAT + 6, // Phones + 2, // AEB 1+2 + 4 // AEB 3+4 +}; + +char dest_map_aio_qs[7] = { + 0, // Analogue + 8, // AES + 10, // SPDIF + 12, // ADAT + 6, // Phone + 2, // AEB 1+2 + 4 // AEB 3+4 +}; + +char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line in */ + 8, 9, /* aes in, */ + 10, 11, /* spdif in */ + 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT in */ + 2, 3, 4, 5, /* AEB */ + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, +}; + +char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line out */ + 8, 9, /* aes out */ + 10, 11, /* spdif out */ + 12, 13, 14, 15, 16, 17, 18, 19, /* ADAT out */ + 6, 7, /* phone out */ + 2, 3, 4, 5, /* AEB */ + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, +}; + +char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line in */ + 8, 9, /* aes in */ + 10, 11, /* spdif in */ + 12, 14, 16, 18, /* adat in */ + 2, 3, 4, 5, /* AEB */ + (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 +}; + +char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line out */ + 8, 9, /* aes out */ + 10, 11, /* spdif out */ + 12, 14, 16, 18, /* adat out */ + 6, 7, /* phone out */ + 2, 3, 4, 5, /* AEB */ + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 +}; + +char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line in */ + 8, 9, /* aes in */ + 10, 11, /* spdif in */ + 12, 16, /* adat in */ + 2, 3, 4, 5, /* AEB */ + (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 +}; + +char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS] = { + 0, 1, /* line out */ + 8, 9, /* aes out */ + 10, 11, /* spdif out */ + 12, 16, /* adat out */ + 6, 7, /* phone out */ + 2, 3, 4, 5, /* AEB */ + (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 +}; + +// HDSP AES32 and HDSPe AES + +char dest_map_aes32[8] = { + 0, 2, 4, 6, 8, 10, 12, 14 +}; + +char channel_map_aes32[HDSPM_MAX_CHANNELS] = { + 0, 1, /* AES 1 */ + 2, 3, /* AES 2 */ + 4, 5, /* AES 3 */ + 6, 7, /* AES 4 */ + 8, 9, /* AES 5 */ + 10, 11, /* AES 6 */ + 12, 13, /* AES 7 */ + 14, 15, /* AES 8 */ + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, + (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1 +}; + diff --git a/hdspmixer/src/channelmap.h b/hdspmixer/src/channelmap.h new file mode 100644 index 0000000..854e5a1 --- /dev/null +++ b/hdspmixer/src/channelmap.h @@ -0,0 +1,140 @@ +/* + * HDSPMixer + * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + */ + + +#ifndef channelmap_H +#define channelmap_H + +#include +#include + +/*** + * + * hdsp cards + * + ***/ + +// Digiface + +extern char dest_map_df_ss[14]; + +extern char channel_map_df_ss[26]; + +// Multiface + +extern char dest_map_mf_ss[10]; + +extern char channel_map_mf_ss[26]; + +// Digiface/Multiface + +extern char meter_map_ds[26]; + +extern char channel_map_ds[26]; + +extern char dest_map_ds[8]; + +// RPM + +extern char dest_map_rpm[3]; +extern char channel_map_rpm[26]; + +// HDSP 9652 + +extern char dest_map_h9652_ss[13]; + +extern char dest_map_h9652_ds[7]; + +// HDSP 9632 + +extern char dest_map_h9632_ss[8]; + +extern char dest_map_h9632_ds[6]; + +extern char dest_map_h9632_qs[4]; + +extern char channel_map_h9632_ss[16]; + +extern char channel_map_h9632_ds[12]; + +extern char channel_map_h9632_qs[8]; + + +/*** + * + * hdspm cards + * + ***/ + +// HDSPe MADI and MADIface + +extern char dest_map_unity[32]; + +extern char channel_map_unity_ss[HDSPM_MAX_CHANNELS]; + +extern char channel_map_unity_ds[HDSPM_MAX_CHANNELS]; + +extern char channel_map_unity_qs[HDSPM_MAX_CHANNELS]; + +// HDSPe RayDAT + +extern char dest_map_raydat_ss[18]; + +extern char dest_map_raydat_ds[10]; + +extern char dest_map_raydat_qs[6]; + +extern char channel_map_raydat_ss[HDSPM_MAX_CHANNELS]; + +extern char channel_map_raydat_ds[HDSPM_MAX_CHANNELS]; + +extern char channel_map_raydat_qs[HDSPM_MAX_CHANNELS]; + +// HDSPe AIO + +extern char dest_map_aio_ss[10]; + + +extern char dest_map_aio_ds[8]; + +extern char dest_map_aio_qs[7]; + +extern char channel_map_aio_in_ss[HDSPM_MAX_CHANNELS]; + +extern char channel_map_aio_out_ss[HDSPM_MAX_CHANNELS]; + +extern char channel_map_aio_in_ds[HDSPM_MAX_CHANNELS]; + +extern char channel_map_aio_out_ds[HDSPM_MAX_CHANNELS]; + +extern char channel_map_aio_in_qs[HDSPM_MAX_CHANNELS]; + +extern char channel_map_aio_out_qs[HDSPM_MAX_CHANNELS]; + +// HDSP AES32 and HDSPe AES + +extern char dest_map_aes32[8]; + +extern char channel_map_aes32[HDSPM_MAX_CHANNELS]; + +#endif /* channelmap_H */ diff --git a/hdspmixer/src/defines.h b/hdspmixer/src/defines.h index 1aefb7a..e76141b 100644 --- a/hdspmixer/src/defines.h +++ b/hdspmixer/src/defines.h @@ -24,12 +24,17 @@ /* Uncomment this to make the setup window non-modal */ //#define NON_MODAL_SETUP 1 -#define HDSP_MAX_CHANNELS 26 -#define HDSP_MAX_DEST 14 +#define HDSPeMADI 10 +#define HDSPeRayDAT 11 +#define HDSPeAIO 12 +#define HDSP_AES 13 /* both HDSP AES32 and HDSPe AES */ + +#define HDSP_MAX_CHANNELS 64 +#define HDSP_MAX_DEST 32 #define STRIP_WIDTH 36 #define FULLSTRIP_HEIGHT 253 -#define SMALLSTRIP_HEIGHT 208 +#define SMALLSTRIP_HEIGHT 224 #define MENU_HEIGHT 20 #define MIN_WIDTH 2*STRIP_WIDTH @@ -42,6 +47,14 @@ #define PAN_WIDTH 28 +#define MAX_CARDS 3 + +/* Number of presets. 8 presets visible to the user, the 9th is used for + * holding temporary mixer data when switching cards, so it's not a real + * preset but more like a scratch pad. + */ +#define NUM_PRESETS 9 + typedef unsigned long long int int64; #endif diff --git a/hdspmixer/src/hdspmixer.cxx b/hdspmixer/src/hdspmixer.cxx index dfb13ea..a33a75e 100644 --- a/hdspmixer/src/hdspmixer.cxx +++ b/hdspmixer/src/hdspmixer.cxx @@ -3,6 +3,9 @@ * * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) * + * Copyright (C) 2011 Adrian Knoth (adi@drcomp.erfurt.thur.de) + * Fredrik Lingvall (fredrik.lingvall@gmail.com) + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -36,53 +39,85 @@ int main(int argc, char **argv) { HDSPMixerWindow *window; HDSPMixerCard *hdsp_cards[3]; - char *name; + char *name = NULL, *shortname; int card; int cards = 0; - + card = -1; printf("\nHDSPMixer %s - Copyright (C) 2003 Thomas Charbonnel \n", VERSION); printf("This program comes with ABSOLUTELY NO WARRANTY\n"); printf("HDSPMixer is free software, see the file COPYING for details\n\n"); - printf("Looking for HDSP cards :\n"); + printf("Looking for RME cards:\n"); + while (snd_card_next(&card) >= 0) { - if (card < 0) { - break; - } else { - snd_card_get_longname(card, &name); - printf("Card %d : %s\n", card, name); - if (!strncmp(name, "RME Hammerfall DSP + Multiface", 30)) { - printf("Multiface found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(Multiface, card); - cards++; - } else if (!strncmp(name, "RME Hammerfall DSP + Digiface", 29)) { - printf("Digiface found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(Digiface, card); - cards++; - } else if (!strncmp(name, "RME Hammerfall HDSP 9652", 24)) { - printf("HDSP 9652 found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(H9652, card); - cards++; - } else if (!strncmp(name, "RME Hammerfall HDSP 9632", 24)) { - printf("HDSP 9632 found !\n"); - hdsp_cards[cards] = new HDSPMixerCard(H9632, card); - cards++; - } else if (!strncmp(name, "RME Hammerfall DSP", 18)) { - printf("Uninitialized HDSP card found.\nUse hdsploader to upload configuration data to the card.\n"); - } - } + if (card < 0) { + break; + } + + snd_card_get_longname(card, &name); + snd_card_get_name(card, &shortname); + printf("Card %d: %s\n", card, name); + if (!strncmp(name, "RME Hammerfall DSP + Multiface", 30)) { + printf("Multiface found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(Multiface, card, shortname); + cards++; + } else if (!strncmp(name, "RME Hammerfall DSP + Digiface", 29)) { + printf("Digiface found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(Digiface, card, shortname); + cards++; + } else if (!strncmp(name, "RME Hammerfall DSP + RPM", 24)) { + printf("RPM found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(RPM, card, shortname); + cards++; + } else if (!strncmp(name, "RME Hammerfall HDSP 9652", 24)) { + printf("HDSP 9652 found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(H9652, card, shortname); + cards++; + } else if (!strncmp(name, "RME Hammerfall HDSP 9632", 24)) { + printf("HDSP 9632 found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(H9632, card, shortname); + cards++; + } else if (!strncmp(name, "RME MADIface", 12)) { + printf("RME MADIface found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card, shortname); + cards++; + } else if (!strncmp(name, "RME MADI", 8)) { + printf("RME MADI found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeMADI, card, shortname); + cards++; + } else if (!strncmp(name, "RME AES32", 8)) { + printf("RME AES32 or HDSPe AES found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSP_AES, card, shortname); + cards++; + } else if (!strncmp(name, "RME RayDAT", 10)) { + printf("RME RayDAT found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeRayDAT, card, shortname); + cards++; + } else if (!strncmp(name, "RME AIO", 7)) { + printf("RME AIO found!\n"); + hdsp_cards[cards] = new HDSPMixerCard(HDSPeAIO, card, shortname); + cards++; + } else if (!strncmp(name, "RME Hammerfall DSP", 18)) { + printf("Uninitialized HDSP card found.\nUse hdsploader to upload configuration data to the card.\n"); + } } + free(name); if (!cards) { - printf("No Hammerfall DSP card found.\n"); - exit(EXIT_FAILURE); + printf("No RME cards found.\n"); + exit(EXIT_FAILURE); } + for (int i = cards; i < 3; ++i) { - hdsp_cards[i] = NULL; + hdsp_cards[i] = NULL; } - printf("%d Hammerfall DSP %s found.\n", cards, (cards > 1) ? "cards" : "card"); - window = new HDSPMixerWindow(0, 0, hdsp_cards[0]->window_width, hdsp_cards[0]->window_height, "HDSPMixer", hdsp_cards[0], hdsp_cards[1], hdsp_cards[2]); + + printf("%d RME cards %s found.\n", cards, (cards > 1) ? "cards" : "card"); + window = new HDSPMixerWindow(0, 0, hdsp_cards[0]->window_width, + hdsp_cards[0]->window_height, "HDSPMixer", hdsp_cards[0], + hdsp_cards[1], hdsp_cards[2]); Fl::visual(FL_DOUBLE|FL_INDEX); window->show(argc, argv); + return Fl::run(); } diff --git a/hdspmixer/src/mappings.h b/hdspmixer/src/mappings.h deleted file mode 100644 index 9589a22..0000000 --- a/hdspmixer/src/mappings.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * HDSPMixer - * - * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef mappings_H -#define mappings_H - -static char channel_map_df_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25 -}; - -static char channel_map_mf_ss[26] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char meter_map_ds[26] = { - 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char channel_map_ds[26] = { - 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, - 24, 25, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -}; - -static char dest_map_mf_ss[10] = { - 0, 2, 4, 6, 16, 18, 20, 22, 24, 26 -}; - -static char dest_map_ds[8] = { - 0, 2, 8, 10, 16, 18, 24, 26 -}; - -static char dest_map_df_ss[14] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26 -}; - -static char dest_map_h9652_ss[13] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 -}; - -static char dest_map_h9652_ds[7] = { - 0, 2, 8, 10, 16, 18, 24 -}; - -static char dest_map_h9632_ss[8] = { - 0, 2, 4, 6, 8, 10, 12, 14 -}; - -static char dest_map_h9632_ds[6] = { - 0, 2, 8, 10, 12, 14 -}; - -static char dest_map_h9632_qs[4] = { - 8, 10, 12, 14 -}; - -static char channel_map_h9632_ss[16] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -static char channel_map_h9632_ds[12] = { - 0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -static char channel_map_h9632_qs[8] = { - 8, 9, 10, 11, 12, 13, 14, 15 -}; - -#endif - diff --git a/hdspmixer/src/pixmaps.cxx b/hdspmixer/src/pixmaps.cxx index 2f7c589..34f8834 100644 --- a/hdspmixer/src/pixmaps.cxx +++ b/hdspmixer/src/pixmaps.cxx @@ -47,6 +47,7 @@ #include "../pixmaps/over.xpm" #include "../pixmaps/peak.xpm" #include "../pixmaps/solo.xpm" +#include "../pixmaps/loopback.xpm" #include "../pixmaps/iomixer_r.xpm" #include "../pixmaps/output_r.xpm" #include "../pixmaps/matrix_black.xpm" diff --git a/hdspmixer/src/pixmaps.h b/hdspmixer/src/pixmaps.h index 624bd28..3548ba3 100644 --- a/hdspmixer/src/pixmaps.h +++ b/hdspmixer/src/pixmaps.h @@ -21,44 +21,45 @@ #ifndef pixmaps_H #define pixmaps_H -extern char * Slider1_xpm[]; -extern char * Slider2_xpm[]; -extern char * b_blank_xpm[]; -extern char * b_card1_xpm[]; -extern char * b_card2_xpm[]; -extern char * b_card3_xpm[]; -extern char * b_mute_xpm[]; -extern char * b_pre1_xpm[]; -extern char * b_pre2_xpm[]; -extern char * b_pre3_xpm[]; -extern char * b_pre4_xpm[]; -extern char * b_pre5_xpm[]; -extern char * b_pre6_xpm[]; -extern char * b_pre7_xpm[]; -extern char * b_pre8_xpm[]; -extern char * b_save_xpm[]; -extern char * b_solo_xpm[]; -extern char * buttons_xpm[]; -extern char * empty_xpm[]; -extern char * empty_linux_xpm[]; -extern char * iomixer_xpm[]; -extern char * level_xpm[]; -extern char * monitor_xpm[]; -extern char * mute_xpm[]; -extern char * output_xpm[]; -extern char * over_xpm[]; -extern char * peak_xpm[]; -extern char * solo_xpm[]; -extern char * iomixer_r_xpm[]; -extern char * output_r_xpm[]; -extern char * matrix_white_xpm[]; -extern char * matrix_black_xpm[]; -extern char * matrix_yellow_xpm[]; -extern char * matrix_mute_xpm[]; -extern char * matrix_grey_xpm[]; -extern char * matrix_grey_l_xpm[]; -extern char * matrix_grey_ol_xpm[]; -extern char * matrix_grey_o_xpm[]; +extern char const * Slider1_xpm[]; +extern char const * Slider2_xpm[]; +extern char const * b_blank_xpm[]; +extern char const * b_card1_xpm[]; +extern char const * b_card2_xpm[]; +extern char const * b_card3_xpm[]; +extern char const * b_mute_xpm[]; +extern char const * b_pre1_xpm[]; +extern char const * b_pre2_xpm[]; +extern char const * b_pre3_xpm[]; +extern char const * b_pre4_xpm[]; +extern char const * b_pre5_xpm[]; +extern char const * b_pre6_xpm[]; +extern char const * b_pre7_xpm[]; +extern char const * b_pre8_xpm[]; +extern char const * b_save_xpm[]; +extern char const * b_solo_xpm[]; +extern char const * buttons_xpm[]; +extern char const * empty_xpm[]; +extern char const * empty_linux_xpm[]; +extern char const * iomixer_xpm[]; +extern char const * level_xpm[]; +extern char const * monitor_xpm[]; +extern char const * mute_xpm[]; +extern char const * output_xpm[]; +extern char const * over_xpm[]; +extern char const * peak_xpm[]; +extern char const * solo_xpm[]; +extern char const * loopback_xpm[]; +extern char const * iomixer_r_xpm[]; +extern char const * output_r_xpm[]; +extern char const * matrix_white_xpm[]; +extern char const * matrix_black_xpm[]; +extern char const * matrix_yellow_xpm[]; +extern char const * matrix_mute_xpm[]; +extern char const * matrix_grey_xpm[]; +extern char const * matrix_grey_l_xpm[]; +extern char const * matrix_grey_ol_xpm[]; +extern char const * matrix_grey_o_xpm[]; #endif diff --git a/hwmixvolume/Makefile.am b/hwmixvolume/Makefile.am new file mode 100644 index 0000000..0437723 --- /dev/null +++ b/hwmixvolume/Makefile.am @@ -0,0 +1,12 @@ +# Process this file with automake to produce Makefile.in. +SUBDIRS = desktop +bin_SCRIPTS = hwmixvolume +#man_MANS = +EXTRA_DIST = gitcompile hwmixvolume +AUTOMAKE_OPTIONS = foreign + +alsa-dist: distdir + @rm -rf ../distdir/hwmixvolume + @mkdir -p ../distdir/hwmixvolume + @cp -RLpv $(distdir)/* ../distdir/hwmixvolume + @rm -rf $(distdir) diff --git a/hwmixvolume/README b/hwmixvolume/README new file mode 100644 index 0000000..56c7554 --- /dev/null +++ b/hwmixvolume/README @@ -0,0 +1,20 @@ +hwmixvolume +=========== + +This tool allows you to control the volume of individual streams on sound cards +that use hardware mixing, i.e., those based on the following chips: +* Creative Emu10k1 (SoundBlaster Live!) (driver: snd-emu10k1) +* VIA VT823x southbridge (driver: snd-via82xx) +* Yamaha DS-1 (YMF-724/740/744/754) (driver: snd-ymfpci) + + +This tool requires Python, PyGObject, GTK+ 3.0 or later, and alsa-python 1.0.22 +or later. + +It is recommended to use at least Linux kernel 2.6.32 or alsa-driver 1.0.22; +otherwise, the name of the program that is using a stream cannot be shown. + +Need to use alsa-driver kernel 3.4 for Aureal sound cards +* Aureal Vortex/Vortex2/Advantage (driver: snd-au8820, snd-au8830, snd-au8810) + +Author: Clemens Ladisch diff --git a/hwmixvolume/configure.ac b/hwmixvolume/configure.ac new file mode 100644 index 0000000..84f8473 --- /dev/null +++ b/hwmixvolume/configure.ac @@ -0,0 +1,7 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(hwmixvolume, 0.9) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) +AC_CONFIG_SRCDIR([hwmixvolume]) +AC_PROG_INSTALL +AC_OUTPUT([Makefile desktop/Makefile]) diff --git a/hwmixvolume/desktop/Makefile.am b/hwmixvolume/desktop/Makefile.am new file mode 100644 index 0000000..d15b5e5 --- /dev/null +++ b/hwmixvolume/desktop/Makefile.am @@ -0,0 +1,36 @@ +APPNAME = hwmixvolume + +desktopdir = $(datadir)/applications +desktop_DATA = $(APPNAME).desktop + +public_icons = \ + hicolor_apps_256x256_$(APPNAME).png \ + hicolor_apps_128x128_$(APPNAME).png \ + hicolor_apps_48x48_$(APPNAME).png + +EXTRA_DIST = \ + $(public_icons) \ + $(desktop_DATA) + +install-icons: + for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ + $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +uninstall-icons: + -for icon in $(public_icons); do \ + THEME=`echo $$icon | cut -d_ -f1`; \ + CONTEXT=`echo $$icon | cut -d_ -f2`; \ + SIZE=`echo $$icon | cut -d_ -f3`; \ + ICONFILE=`echo $$icon | cut -d_ -f4`; \ + rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ + done + +install-data-local: install-icons + +uninstall-local: uninstall-icons diff --git a/hwmixvolume/desktop/hicolor_apps_128x128_hwmixvolume.png b/hwmixvolume/desktop/hicolor_apps_128x128_hwmixvolume.png new file mode 100644 index 0000000..c131adc Binary files /dev/null and b/hwmixvolume/desktop/hicolor_apps_128x128_hwmixvolume.png differ diff --git a/hwmixvolume/desktop/hicolor_apps_256x256_hwmixvolume.png b/hwmixvolume/desktop/hicolor_apps_256x256_hwmixvolume.png new file mode 100644 index 0000000..57d6d0a Binary files /dev/null and b/hwmixvolume/desktop/hicolor_apps_256x256_hwmixvolume.png differ diff --git a/hwmixvolume/desktop/hicolor_apps_48x48_hwmixvolume.png b/hwmixvolume/desktop/hicolor_apps_48x48_hwmixvolume.png new file mode 100644 index 0000000..41c366d Binary files /dev/null and b/hwmixvolume/desktop/hicolor_apps_48x48_hwmixvolume.png differ diff --git a/hwmixvolume/desktop/hwmixvolume.desktop b/hwmixvolume/desktop/hwmixvolume.desktop new file mode 100644 index 0000000..70d03fb --- /dev/null +++ b/hwmixvolume/desktop/hwmixvolume.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Hwmixvolume +GenericName=Control the volume of individual streams on sound cards that use hardware mixing +Exec=hwmixvolume +Icon=hwmixvolume +Terminal=false +Type=Application +Categories=AudioVideo; +Version=0.9.4 diff --git a/hwmixvolume/gitcompile b/hwmixvolume/gitcompile new file mode 100755 index 0000000..a4d38f4 --- /dev/null +++ b/hwmixvolume/gitcompile @@ -0,0 +1,26 @@ +#!/bin/bash + +if test -z "$AUTOMAKE_DIR" ; then + if test -d /usr/local/share/automake; then + AUTOMAKE_DIR=/usr/local/share/automake + fi + if test -d /usr/share/automake; then + AUTOMAKE_DIR="/usr/share/automake" + fi + if test -z "$AUTOMAKE_DIR" ; then + AUTOMAKE_DIR=/usr/share/`ls /usr/share | grep automake | tail -n 1` + fi +fi + +for f in install-sh mkinstalldirs missing; do + cp -av $AUTOMAKE_DIR/$f . || exit 1 +done + +aclocal $ACLOCAL_FLAGS || exit 1 +automake --foreign --add-missing || exit 1 +autoconf || exit 1 +echo "./configure $@" +./configure $@ || exit 1 +if [ -z "$GITCOMPILE_NO_MAKE" ]; then + make || exit 1 +fi diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume new file mode 100755 index 0000000..871c2c5 --- /dev/null +++ b/hwmixvolume/hwmixvolume @@ -0,0 +1,312 @@ +#!/usr/bin/env python + +# hwmixvolume - ALSA hardware mixer volume control applet +# Copyright (c) 2009-2010 Clemens Ladisch +# Copyright (c) 2018 Emmanuel Gil Peyrot +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +import gi +gi.require_version('GLib', '2.0') +gi.require_version('Gtk', '3.0') +from gi.repository import GLib, Gtk +from pyalsa import alsacard, alsahcontrol + +INTF_PCM = alsahcontrol.interface_id['PCM'] +INTF_MIXER = alsahcontrol.interface_id['MIXER'] +TYPE_INTEGER = alsahcontrol.element_type['INTEGER'] +EVENT_VALUE = alsahcontrol.event_mask['VALUE'] +EVENT_INFO = alsahcontrol.event_mask['INFO'] +EVENT_REMOVE = alsahcontrol.event_mask_remove + +class Stream: + def __init__(self, element, parent): + self.element = element + self.element.set_callback(self) + self.parent = parent + self.label = None + self.scales = [] + self.adjustments = [] + self.callback(self.element, EVENT_INFO) + + def destroy(self): + self.deactivate() + + def callback(self, e, mask): + if mask == EVENT_REMOVE: + self.deactivate() + elif (mask & EVENT_INFO) != 0: + info = alsahcontrol.Info(self.element) + if info.is_inactive: + self.deactivate() + else: + self.activate() + elif (mask & EVENT_VALUE) != 0: + self.update_scales_from_ctl() + + def activate(self): + if self.label: + return + info = alsahcontrol.Info(self.element) + value = alsahcontrol.Value(self.element) + value.read() + values = value.get_tuple(TYPE_INTEGER, info.count) + self.label = Gtk.Label.new(self.get_label(info)) + self.label.set_single_line_mode(True) + self.parent.scales_vbox.add(self.label) + for i in range(info.count): + adj = Gtk.Adjustment(value=values[i], + lower=info.min, upper=info.max, + step_incr=1, + page_incr=(info.max-info.min+1)/8) + adj.connect('value-changed', self.update_ctl_from_scale, i) + scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, adjustment=adj) + scale.set_draw_value(False) + self.parent.scales_vbox.add(scale) + self.scales.append(scale) + self.adjustments.append(adj) + self.parent.scales_vbox.show_all() + self.parent.update_msg_label() + + def deactivate(self): + if not self.label: + return + self.label.destroy() + for s in self.scales: + s.destroy() + self.label = None + self.scales = [] + self.adjustments = [] + self.parent.update_msg_label() + + def update_scales_from_ctl(self): + if not self.label: + return + count = len(self.adjustments) + value = alsahcontrol.Value(self.element) + value.read() + values = value.get_tuple(TYPE_INTEGER, count) + for i in range(count): + self.adjustments[i].set_value(values[i]) + + def update_ctl_from_scale(self, adj, index): + scale_value = adj.get_value() + value_to_set = int(round(adj.get_value())) + count = len(self.adjustments) + value = alsahcontrol.Value(self.element) + if self.parent.lock_check.get_active(): + values = [value_to_set for i in range(count)] + else: + value.read() + values = value.get_array(TYPE_INTEGER, count) + values[index] = value_to_set + value.set_array(TYPE_INTEGER, values) + value.write() + if value_to_set != scale_value: + adj.set_value(value_to_set) + + def get_label(self, info): + pid = self.get_pid(info) + if pid: + cmdline = self.get_pid_cmdline(pid) + if cmdline: + return cmdline + else: + return "PID %d" % pid + else: + name = info.name + if name[-7:] == " Volume": + name = name[:-7] + if name[-9:] == " Playback": + name = name[:-9] + return name + + def get_pid(self, info): + card = self.parent.current_card + device = info.device + subdevice = info.subdevice + if subdevice == 0: + subdevice = info.index + filename = "/proc/asound/card%d/pcm%dp/sub%d/status" % (card, device, subdevice) + try: + with open(filename, "r") as f: + for line in f: + if line[:9] == "owner_pid": + return int(line.split(':')[1].strip()) + except IOError: + return None + return None + + def get_pid_cmdline(self, pid): + try: + with open("/proc/%d/cmdline" % pid, "r") as f: + cmdline = f.read() + except IOError: + return None + return cmdline.replace('\x00', ' ').strip() + +class MixerWindow(Gtk.Window): + card_numbers = alsacard.card_list() + current_card = -1 + hcontrol = None + scales_vbox = None + msg_label = None + streams = [] + hctl_sources = [] + + def __init__(self): + Gtk.Window.__init__(self) + self.connect('destroy', lambda w: Gtk.main_quit()) + self.set_title("Hardware Mixer Volumes") + + vbox = Gtk.Grid() + vbox.set_orientation(Gtk.Orientation.VERTICAL) + self.add(vbox) + + hbox = Gtk.Grid() + vbox.add(hbox) + + label = Gtk.Label.new_with_mnemonic("_Sound Card: ") + hbox.add(label) + + combo = Gtk.ComboBoxText() + combo.set_hexpand(True) + for i in self.card_numbers: + str = "%d: %s" % (i, alsacard.card_get_name(i)) + combo.append_text(str) + if len(self.card_numbers) > 0: + combo.set_active(0) + combo.connect('changed', lambda c: self.change_card(self.card_numbers[combo.get_active()])) + hbox.add(combo) + label.set_mnemonic_widget(combo) + + self.lock_check = Gtk.CheckButton.new_with_mnemonic(label="_Lock Channels") + self.lock_check.set_active(True) + vbox.add(self.lock_check) + + scrollwin = Gtk.ScrolledWindow() + scrollwin.set_policy(hscrollbar_policy=Gtk.PolicyType.NEVER, vscrollbar_policy=Gtk.PolicyType.AUTOMATIC) + scrollwin.set_shadow_type(Gtk.ShadowType.NONE) + scrollwin.set_vexpand(True) + vbox.add(scrollwin) + + self.scales_vbox = Gtk.Grid() + self.scales_vbox.set_orientation(Gtk.Orientation.VERTICAL) + scrollwin.add(self.scales_vbox) + + label = Gtk.Label() + label.set_single_line_mode(True) + line_height = max(label.get_size_request().height, 0) + label.destroy() + scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL) + scale.set_draw_value(False) + line_height += max(scale.get_size_request().height, 0) + scale.destroy() + # always have space for at least four sliders + scrollwin.set_size_request(width=-1, height=line_height*4+4) + + # TODO: select the default card or the first card with stream controls + if len(self.card_numbers) > 0: + self.change_card(self.card_numbers[0]) + self.update_msg_label() + + self.show_all() + + def change_card(self, cardnum): + for s in self.hctl_sources: + GLib.source_remove(s) + self.hctl_sources = [] + + self.hcontrol = self.open_hcontrol_for_card(cardnum) + + for s in self.streams: + s.destroy() + self.streams = [] + + self.current_card = cardnum + + if not self.hcontrol: + self.update_msg_label() + return + + for id in self.hcontrol.list(): + if not self.is_stream_elem(id): + continue + elem = alsahcontrol.Element(self.hcontrol, id[0]) + info = alsahcontrol.Info(elem) + if not self.is_stream_info(info): + continue + stream = Stream(elem, self) + self.streams.append(stream) + + for fd,condition in self.hcontrol.poll_fds: + self.hctl_sources.append(GLib.io_add_watch(fd, 0, GLib.IOCondition(condition), self.hctl_io_callback)) + + self.update_msg_label() + + self.scales_vbox.show_all() + + def update_msg_label(self): + needs_msg = len(self.scales_vbox.get_children()) < 2 + has_msg = self.msg_label + if has_msg and not needs_msg: + self.msg_label.destroy() + self.msg_label = None + elif needs_msg: + if len(self.streams) > 0: + msg = "There are no open streams." + else: + msg = "This card does not have stream controls." + if not has_msg: + self.msg_label = Gtk.Label.new(msg) + self.msg_label.set_vexpand(True) + self.scales_vbox.add(self.msg_label) + self.scales_vbox.show_all() + elif self.msg_label.get_text() != msg: + self.msg_label.set_text(msg) + + def open_hcontrol_for_card(self, cardnum): + devname = "hw:CARD=" + str(cardnum) + try: + hc = alsahcontrol.HControl(name=devname, + mode=alsahcontrol.open_mode['NONBLOCK']) + except: + # TODO: alsa error msg + dlg = Gtk.MessageDialog(self, + Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, + Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, + "Cannot open sound card control device.") + dlg.run() + dlg.destroy() + return None + return hc + + def is_stream_elem(self, id): + return ((id[1] == INTF_PCM and + id[4] in ("PCM Playback Volume", "EMU10K1 PCM Volume")) or + (id[1] == INTF_MIXER and + id[4] == "VIA DXS Playback Volume")) + + def is_stream_info(self, info): + return info.is_readable and info.is_writable and info.type == TYPE_INTEGER + + def hctl_io_callback(self, source, condition): + self.hcontrol.handle_events() + return True + +def main(): + MixerWindow() + Gtk.main() + +main() + diff --git a/ld10k1/COPYING b/ld10k1/COPYING index d60c31a..623b625 100644 --- a/ld10k1/COPYING +++ b/ld10k1/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/ld10k1/COPYING.LIB b/ld10k1/COPYING.LIB index b1e3f5a..ae23fcf 100644 --- a/ld10k1/COPYING.LIB +++ b/ld10k1/COPYING.LIB @@ -2,7 +2,7 @@ Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -485,7 +485,7 @@ convey the exclusion of warranty; and each file should have at least the You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/ld10k1/INSTALL b/ld10k1/INSTALL index 56b077d..007e939 100644 --- a/ld10k1/INSTALL +++ b/ld10k1/INSTALL @@ -1,16 +1,25 @@ Installation Instructions ************************* -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free -Software Foundation, Inc. +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, +Inc. -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. Basic Installation ================== -These are generic installation instructions. + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses @@ -23,9 +32,9 @@ debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is +the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale -cache files.) +cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail @@ -35,30 +44,37 @@ some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. -The simplest way to compile this package is: + The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. + `./configure' to configure the package for your system. - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with - the package. + the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and - documentation. + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. - 5. You can remove the program binaries and object files from the + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is @@ -67,65 +83,120 @@ The simplest way to compile this package is: all sorts of other programs in order to regenerate files that came with the distribution. + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + Compilers and Options ===================== -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== -You can compile the package for more than one kind of computer at the + You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the +own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. Installation Names ================== -By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PREFIX'. + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PREFIX', the package will -use PREFIX as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to + Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The @@ -137,14 +208,58 @@ find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + Specifying the System Type ========================== -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: @@ -152,14 +267,15 @@ type, such as `sun4', or a canonical name which has the form: where SYSTEM can have one of these forms: - OS KERNEL-OS + OS + KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will +use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a @@ -170,9 +286,9 @@ eventually be run) with `--host=TYPE'. Sharing Defaults ================ -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. @@ -181,7 +297,7 @@ A warning: not all `configure' scripts look for a site script. Defining Variables ================== -Variables not defined in a site shell script can be set in the + Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set @@ -190,21 +306,30 @@ them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). Here is a another example: +overridden in the site shell script). - /bin/bash ./configure CONFIG_SHELL=/bin/bash +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: -Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent -configuration-related scripts to be executed by `/bin/bash'. + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== -`configure' recognizes the following options to control how it operates. + `configure' recognizes the following options to control how it +operates. `--help' `-h' - Print a summary of the options to `configure', and exit. + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. `--version' `-V' @@ -231,6 +356,15 @@ configuration-related scripts to be executed by `/bin/bash'. Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. - diff --git a/ld10k1/configure.in b/ld10k1/configure.ac similarity index 92% rename from ld10k1/configure.in rename to ld10k1/configure.ac index f1fc8d0..f48ca31 100644 --- a/ld10k1/configure.in +++ b/ld10k1/configure.ac @@ -1,7 +1,10 @@ -AC_INIT(src/ld10k1.c) -AM_INIT_AUTOMAKE(ld10k1, 0.1.8p1) +AC_INIT(ld10k1, 0.1.8p1) +AM_INIT_AUTOMAKE +AC_CONFIG_MACRO_DIR([m4]) +AM_MAINTAINER_MODE([enable]) AC_CONFIG_HEADERS(config.h) +AC_USE_SYSTEM_EXTENSIONS AC_PROG_CC AC_PROG_LD AC_PROG_INSTALL diff --git a/ld10k1/contrib/emu10k1MIDIEffects/freberv.asm b/ld10k1/contrib/emu10k1MIDIEffects/freberv.asm index 3fe1b9e..a7f91b1 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/freberv.asm +++ b/ld10k1/contrib/emu10k1MIDIEffects/freberv.asm @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv10k1.m4,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-basstreble.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-basstreble.inc index e727673..d4d7216 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-basstreble.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-basstreble.inc @@ -16,7 +16,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-basstreble.inc,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-controls.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-controls.inc index d2ac8cb..749a4b1 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-controls.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-controls.inc @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-controls.inc,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-filters-reduced.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-filters-reduced.inc index e7357cd..bd50b2f 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-filters-reduced.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-filters-reduced.inc @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-filters.m4,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-filters.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-filters.inc index 12ee8a0..84c2b06 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-filters.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-filters.inc @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-filters.m4,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/contrib/emu10k1MIDIEffects/fv-routes.inc b/ld10k1/contrib/emu10k1MIDIEffects/fv-routes.inc index a45a9cb..a4ea931 100644 --- a/ld10k1/contrib/emu10k1MIDIEffects/fv-routes.inc +++ b/ld10k1/contrib/emu10k1MIDIEffects/fv-routes.inc @@ -15,7 +15,7 @@ ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software -;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;; ;; $Id: fv-routes.inc,v 1.1 2001/09/28 01:56:20 dbertrand Exp $ diff --git a/ld10k1/cvscompile b/ld10k1/cvscompile deleted file mode 100755 index 5ddd1ec..0000000 --- a/ld10k1/cvscompile +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -autoreconf -fi -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/ld10k1/include/Makefile.am b/ld10k1/include/Makefile.am index f9e8bc9..eba10f0 100644 --- a/ld10k1/include/Makefile.am +++ b/ld10k1/include/Makefile.am @@ -9,7 +9,7 @@ CLEANFILES = stamp-vh version.h lo10k1 version.h: stamp-vh @: -stamp-vh: $(top_builddir)/configure.in +stamp-vh: $(top_builddir)/configure.ac @echo "/*" > ver.tmp @echo " * version.h" >> ver.tmp @echo " */" >> ver.tmp diff --git a/ld10k1/include/comm.h b/ld10k1/include/comm.h index 2293aaa..e8f2458 100644 --- a/ld10k1/include/comm.h +++ b/ld10k1/include/comm.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/ld10k1_error.h b/ld10k1/include/ld10k1_error.h index a36ba78..9f7d455 100644 --- a/ld10k1/include/ld10k1_error.h +++ b/ld10k1/include/ld10k1_error.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/ld10k1_fnc.h b/ld10k1/include/ld10k1_fnc.h index b027336..c296ac6 100644 --- a/ld10k1/include/ld10k1_fnc.h +++ b/ld10k1/include/ld10k1_fnc.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/liblo10k1.h b/ld10k1/include/liblo10k1.h index 9f57850..2cc12c0 100644 --- a/ld10k1/include/liblo10k1.h +++ b/ld10k1/include/liblo10k1.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/liblo10k1ef.h b/ld10k1/include/liblo10k1ef.h index fb95025..8c233e3 100644 --- a/ld10k1/include/liblo10k1ef.h +++ b/ld10k1/include/liblo10k1ef.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/liblo10k1lf.h b/ld10k1/include/liblo10k1lf.h index c51bb44..3207321 100644 --- a/ld10k1/include/liblo10k1lf.h +++ b/ld10k1/include/liblo10k1lf.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/include/lo10k1.h b/ld10k1/include/lo10k1.h index 67a8af1..d3ab084 100644 --- a/ld10k1/include/lo10k1.h +++ b/ld10k1/include/lo10k1.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/setup/init_live.in b/ld10k1/setup/init_live.in index 70d30c8..7100061 100644 --- a/ld10k1/setup/init_live.in +++ b/ld10k1/setup/init_live.in @@ -46,7 +46,7 @@ std_playback=playback std_capture=capture #std_capture=capture_noswitch -function log +log () { local level=$1 @@ -57,7 +57,7 @@ function log fi } -function runlo10k1 +runlo10k1 () { log 2 $LO10K1 "$@" @@ -71,7 +71,7 @@ function runlo10k1 fi } -function rename +rename () { port=$1 name=$2 @@ -81,7 +81,7 @@ function rename runlo10k1 --renam "$port=$name" } -function connect +connect () { from=$1 op=$2 @@ -92,7 +92,7 @@ function connect runlo10k1 --conadd "$from$op$to" } -function copy +copy () { local name=$1 local port=$2 @@ -105,7 +105,7 @@ function copy connect "PIN($name Copy)" '=' "$port" } -function volume +volume () { local name=$1 local port=$2 @@ -120,7 +120,7 @@ function volume connect "PIN($name Volume)" '=' "$port" } -function master_volume +master_volume () { local name=$1 local port=$2 @@ -135,7 +135,7 @@ function master_volume connect "$port" '=' "PIN($name Volume)" } -function switch +switch () { local name=$1 local port=$2 @@ -150,7 +150,7 @@ function switch connect "PIN($name Switch)" '>' "$port" } -function switch_2x2 +switch_2x2 () { local name=$1 local port1=$2 @@ -166,7 +166,7 @@ function switch_2x2 connect "PIN($name Switch,2,3)" '>' "$port2" } -function switch_5x2 +switch_5x2 () { local name=$1 local port1=$2 @@ -182,7 +182,7 @@ function switch_5x2 connect "PIN($name Switch,5,6,7,8,9)" '>' "$port2" } -function master_switch +master_switch () { local name=$1 local port=$2 @@ -197,7 +197,7 @@ function master_switch connect "PIN($name Switch)" '=' "$port" } -function playback +playback () { name=$1 port=$2 @@ -211,7 +211,7 @@ function playback add_output "POUT($name Playback Volume)" } -function playback_noswitch +playback_noswitch () { name=$1 port=$2 @@ -224,7 +224,7 @@ function playback_noswitch add_output "POUT($name Playback Volume)" } -function capture +capture () { name=$1 port=$2 @@ -238,7 +238,7 @@ function capture connect "POUT($name Capture Volume)" '>' "OUT(OUT_PCM_Capture_Left,OUT_PCM_Capture_Right)" } -function capture_noswitch +capture_noswitch () { name=$1 port=$2 @@ -251,7 +251,7 @@ function capture_noswitch connect "POUT($name Capture Volume)" '>' "OUT(OUT_PCM_Capture_Left,OUT_PCM_Capture_Right)" } -function master +master () { local name=$1 local port=$2 @@ -264,48 +264,48 @@ function master master_switch "$name Playback" "POUT($name Playback Volume)" 1 $index } -function dump_patches +dump_patches () { - num=$1 + max=$(( ${1} - 1 )) + line=$(seq -s ' ' 0 $max) - for (( i=0; $i < $num; i=$i+1 )); do - p=$(( $i + 100)) - runlo10k1 --debug $p + for i in ${line}; do + p=$(( $i + 100)) + runlo10k1 --debug $p done - exit } -function add_output +add_output () { local port=$1 $add_output_func "$port" } -function add_output_tone_2 +add_output_tone_2 () { local port=$1 connect "$port" '>' "PIN(Tone Control,0,1)" } -function add_output_simple_2 +add_output_simple_2 () { local port=$1 connect "$port" '>' "PIN(Wave Simple Stereo To 51,0,1)" } -function add_output_prologic_2 +add_output_prologic_2 () { local port=$1 connect "$port" '>' "PIN(Wave Prologic,0,1)" } -function add_output_switched_2 +add_output_switched_2 () { local port=$1 @@ -314,7 +314,7 @@ function add_output_switched_2 } -function simple_stereo_to_51 +simple_stereo_to_51 () { local name=$1 local control=$2 @@ -330,7 +330,7 @@ function simple_stereo_to_51 fi } -function prologic +prologic () { local name=$1 local control=$2 @@ -351,7 +351,7 @@ function prologic connect "POUT($name Prologic)" '=' "PIN($name Multi Volume,0,1,2,3,4,5)" } -function tone +tone () { local name=$1 local port=$2 @@ -364,7 +364,7 @@ function tone runlo10k1 -n --ctrl "c-bass0,bass1,bass2,bass3,bass4:$name - Bass,t-$name - Bass:2,v-$name - Bass:1,c-treble0,treble1,treble2,treble3,treble4:$name - Treble,t-$name - Treble:3,v-$name - Treble:1,c-toneonoff:$name - Switch,t-$name - Switch:4" --patch_name "${name}" -a tone.emu10k1 } -function multi_playback +multi_playback () { local name=$1 local port=$2 @@ -383,7 +383,7 @@ function multi_playback connect "POUT($name Multi Volume)" '>' "PIN(Tone Control)" } -function fxbus +fxbus () { local name=$1 local enable_pcm_fx89=$2 diff --git a/ld10k1/src/comm.c b/ld10k1/src/comm.c index f010e20..a9d2965 100644 --- a/ld10k1/src/comm.c +++ b/ld10k1/src/comm.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/dl10k1.c b/ld10k1/src/dl10k1.c index 7ca3f43..b2f3a54 100644 --- a/ld10k1/src/dl10k1.c +++ b/ld10k1/src/dl10k1.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ @@ -354,7 +354,7 @@ int dump_load(int audigy, char *file_name) fctrl = (ld10k1_ctl_dump_t *)ptr; memset(ctrl, 0, sizeof(emu10k1_fx8010_control_gpr_t) * header->ctl_count); for (i = 0; i < header->ctl_count; i++) { - strcpy(ctrl[i].id.name, fctrl[i].name); + strcpy((char *)ctrl[i].id.name, fctrl[i].name); ctrl[i].id.iface = EMU10K1_CTL_ELEM_IFACE_MIXER; ctrl[i].id.index = fctrl[i].index; ctrl[i].vcount = fctrl[i].vcount; diff --git a/ld10k1/src/ld10k1.c b/ld10k1/src/ld10k1.c index 7359f13..97be2c0 100644 --- a/ld10k1/src/ld10k1.c +++ b/ld10k1/src/ld10k1.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ @@ -62,7 +62,7 @@ static void vlog(const char *label, const char *fmt, va_list va) localtime(&tp)); fprintf(out, "%s %s", timestr, label); } else - fprintf(out, label); + fprintf(out, "%s", label); vfprintf(out, fmt, va); fprintf(out, "\n"); fflush(out); @@ -77,7 +77,7 @@ void error(const char *fmt, ...) va_end(va); } -static void log(const char *fmt, ...) +static void alog(const char *fmt, ...) { va_list va; @@ -116,7 +116,7 @@ static void cleanup() { if (pidpath[0]) unlink(pidpath); - log("Exiting daemon"); + alog("Exiting daemon"); } static void term_handler(int i) @@ -247,7 +247,7 @@ int main(int argc, char *argv[]) pidfile = fopen(pidpath, "wt"); if (!pidfile) { - log("%s: pidfile (%s)\n", strerror(errno), pidpath); + alog("%s: pidfile (%s)\n", strerror(errno), pidpath); return 1; } @@ -263,7 +263,7 @@ int main(int argc, char *argv[]) dup2(fileno(logfile), fileno(stdout)); } - log("Starting daemon"); + alog("Starting daemon"); } params.type = uses_pipe ? COMM_TYPE_LOCAL : COMM_TYPE_IP; diff --git a/ld10k1/src/ld10k1.h b/ld10k1/src/ld10k1.h index aa10304..7654e82 100644 --- a/ld10k1/src/ld10k1.h +++ b/ld10k1/src/ld10k1.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_debug.c b/ld10k1/src/ld10k1_debug.c index 6ba0ec6..2b98160 100644 --- a/ld10k1/src/ld10k1_debug.c +++ b/ld10k1/src/ld10k1_debug.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_debug.h b/ld10k1/src/ld10k1_debug.h index 519eab3..aa015c1 100644 --- a/ld10k1/src/ld10k1_debug.h +++ b/ld10k1/src/ld10k1_debug.h @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_driver.c b/ld10k1/src/ld10k1_driver.c index c22418e..05b1415 100644 --- a/ld10k1/src/ld10k1_driver.c +++ b/ld10k1/src/ld10k1_driver.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ @@ -199,7 +199,7 @@ int ld10k1_update_driver(ld10k1_dsp_mgr_t *dsp_mgr) if (!add_ctrl) return LD10K1_ERR_NO_MEM; for (i = 0, item = dsp_mgr->add_ctl_list; item != NULL; item = item->next, i++) { - strcpy(add_ctrl[i].id.name, item->ctl.name); + strcpy((char *)add_ctrl[i].id.name, item->ctl.name); add_ctrl[i].id.iface = EMU10K1_CTL_ELEM_IFACE_MIXER; add_ctrl[i].id.index = item->ctl.index; add_ctrl[i].vcount = item->ctl.vcount; @@ -225,7 +225,7 @@ int ld10k1_update_driver(ld10k1_dsp_mgr_t *dsp_mgr) if (!del_ids) return LD10K1_ERR_NO_MEM; for (i = 0, item = dsp_mgr->del_ctl_list; item != NULL; item = item->next, i++) { - strcpy(del_ids[i].name, item->ctl.name); + strcpy((char *)del_ids[i].name, item->ctl.name); del_ids[i].iface = EMU10K1_CTL_ELEM_IFACE_MIXER; del_ids[i].index = item->ctl.index; } diff --git a/ld10k1/src/ld10k1_driver.h b/ld10k1/src/ld10k1_driver.h index 2a3bc4d..13b2840 100644 --- a/ld10k1/src/ld10k1_driver.h +++ b/ld10k1/src/ld10k1_driver.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_dump.c b/ld10k1/src/ld10k1_dump.c index f2167b0..f4cab49 100644 --- a/ld10k1/src/ld10k1_dump.c +++ b/ld10k1/src/ld10k1_dump.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_dump.h b/ld10k1/src/ld10k1_dump.h index f5e50ef..bf04c8c 100644 --- a/ld10k1/src/ld10k1_dump.h +++ b/ld10k1/src/ld10k1_dump.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_dump_file.h b/ld10k1/src/ld10k1_dump_file.h index 6a2a5fb..aa4a6be 100644 --- a/ld10k1/src/ld10k1_dump_file.h +++ b/ld10k1/src/ld10k1_dump_file.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_fnc.c b/ld10k1/src/ld10k1_fnc.c index bf4c28a..7e99d55 100644 --- a/ld10k1/src/ld10k1_fnc.c +++ b/ld10k1/src/ld10k1_fnc.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ @@ -2152,7 +2152,7 @@ int ld10k1_conn_point_add(ld10k1_dsp_mgr_t *dsp_mgr, ld10k1_conn_point_t *point, int allocgprcount = 0; int allocinstrcount = 0; unsigned int reserved[2]; - unsigned int res[2]; + int res[2]; int reservedcount = 0; int usedreserved = 0; diff --git a/ld10k1/src/ld10k1_fnc1.c b/ld10k1/src/ld10k1_fnc1.c index ff8010a..c3ea754 100644 --- a/ld10k1/src/ld10k1_fnc1.c +++ b/ld10k1/src/ld10k1_fnc1.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ @@ -179,7 +179,7 @@ int main_loop(comm_param *param, int audigy, const char *card_id, int tram_size, { fd_set active_fd_set/*, read_fd_set*/; int i, j, res = 0; - __sighandler_t old_sig_pipe; + sighandler_t old_sig_pipe; int main_sock = 0; int data_sock = 0; @@ -792,12 +792,9 @@ int ld10k1_fnc_name_find(int data_conn, int op, int size) int ld10k1_fnc_name_rename(int data_conn, int op, int size) { ld10k1_fnc_name_t name_info; - int ret; int err; ld10k1_patch_t *patch; - ret = -1; - if ((err = receive_msg_data(data_conn, &name_info, sizeof(ld10k1_fnc_name_t))) < 0) return err; diff --git a/ld10k1/src/ld10k1_fnc1.h b/ld10k1/src/ld10k1_fnc1.h index 696abc8..81e1714 100644 --- a/ld10k1/src/ld10k1_fnc1.h +++ b/ld10k1/src/ld10k1_fnc1.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_fnc_int.h b/ld10k1/src/ld10k1_fnc_int.h index b7e4af7..d5961d0 100644 --- a/ld10k1/src/ld10k1_fnc_int.h +++ b/ld10k1/src/ld10k1_fnc_int.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_mixer.c b/ld10k1/src/ld10k1_mixer.c index 772b98c..20db26e 100644 --- a/ld10k1/src/ld10k1_mixer.c +++ b/ld10k1/src/ld10k1_mixer.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_mixer.h b/ld10k1/src/ld10k1_mixer.h index e1251bc..50b86ce 100644 --- a/ld10k1/src/ld10k1_mixer.h +++ b/ld10k1/src/ld10k1_mixer.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_tram.c b/ld10k1/src/ld10k1_tram.c index 840f552..1272ca3 100644 --- a/ld10k1/src/ld10k1_tram.c +++ b/ld10k1/src/ld10k1_tram.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/ld10k1_tram.h b/ld10k1/src/ld10k1_tram.h index 380f8e0..871282a 100644 --- a/ld10k1/src/ld10k1_tram.h +++ b/ld10k1/src/ld10k1_tram.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/liblo10k1.c b/ld10k1/src/liblo10k1.c index 8861876..afe37a4 100644 --- a/ld10k1/src/liblo10k1.c +++ b/ld10k1/src/liblo10k1.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/liblo10k1ef.c b/ld10k1/src/liblo10k1ef.c index c01ac58..84fda78 100644 --- a/ld10k1/src/liblo10k1ef.c +++ b/ld10k1/src/liblo10k1ef.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/liblo10k1lf.c b/ld10k1/src/liblo10k1lf.c index 3cb1ffc..132d3fe 100644 --- a/ld10k1/src/liblo10k1lf.c +++ b/ld10k1/src/liblo10k1lf.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/ld10k1/src/lo10k1.c b/ld10k1/src/lo10k1.c index 3d04405..c1223cb 100644 --- a/ld10k1/src/lo10k1.c +++ b/ld10k1/src/lo10k1.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ @@ -473,8 +473,9 @@ static int transfer_patch(int udin, char *ctrl_opt, liblo10k1_emu_patch_t *ep, l if (*ctrl_opt != ',') { error("wrong ctrl option format - wrong separator beetwen subfunctions"); return 1; - } else - *ctrl_opt++; + } else { + ctrl_opt++; + } } } @@ -691,8 +692,9 @@ static int transfer_native_patch(liblo10k1_dsp_patch_t *p, char *ctrl_opt) if (*ctrl_opt != ',') { error("wrong ctrl option format - wrong separator beetwen subfunctions"); return 1; - } else - *ctrl_opt++; + } else { + ctrl_opt++; + } } } @@ -868,7 +870,7 @@ err: void debug_print(char *str) { - printf(str); + printf("%s", str); } static int debug(int deb) @@ -1466,7 +1468,6 @@ int main(int argc, char *argv[]) int opt_list; int opt_setup; - int opt_info; int opt_add; int opt_del; int opt_con_add; @@ -1526,7 +1527,6 @@ int main(int argc, char *argv[]) opt_add = 0; opt_del = 0; opt_list_patch = NULL; - opt_info = 0; opt_con_add = 0; opt_con_del = 0; opt_debug = 0; @@ -1618,7 +1618,7 @@ int main(int argc, char *argv[]) opt_list_patch = optarg; break; case 'i': - opt_info = 1; + /* nothing */ break; case 'q': opt_con_add = 1; diff --git a/sb16_csp/configure.in b/mixartloader/configure.ac similarity index 66% rename from sb16_csp/configure.in rename to mixartloader/configure.ac index d0b90ca..448b581 100644 --- a/sb16_csp/configure.in +++ b/mixartloader/configure.ac @@ -1,5 +1,6 @@ -AC_INIT(cspctl.c) -AM_INIT_AUTOMAKE(cspctl, 0.2.0) +AC_INIT(mixartloader, 1.0) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/mixartloader/cvscompile b/mixartloader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/mixartloader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/mixartloader/mixartloader.c b/mixartloader/mixartloader.c index 663ca32..19a1615 100644 --- a/mixartloader/mixartloader.c +++ b/mixartloader/mixartloader.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -89,7 +89,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname) for (p = buf + len; *p && isspace(*p); p++) ; if (*p == '/') { - strncpy(fname, p, MAX_PATH); + strncpy(fname, p, MAX_PATH - 1); + fname[MAX_PATH - 1] = '\0'; } else { snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p); } diff --git a/pcxhrloader/configure.in b/pcxhrloader/configure.ac similarity index 66% rename from pcxhrloader/configure.in rename to pcxhrloader/configure.ac index 0565dcf..c41c87d 100644 --- a/pcxhrloader/configure.in +++ b/pcxhrloader/configure.ac @@ -1,5 +1,6 @@ -AC_INIT(pcxhrloader.c) -AM_INIT_AUTOMAKE(pcxhrloader, 1.0) +AC_INIT(pcxhrloader, 1.0) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/pcxhrloader/cvscompile b/pcxhrloader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/pcxhrloader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/pcxhrloader/pcxhrloader.c b/pcxhrloader/pcxhrloader.c index a5ef079..5cd1845 100644 --- a/pcxhrloader/pcxhrloader.c +++ b/pcxhrloader/pcxhrloader.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -89,7 +89,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname) for (p = buf + len; *p && isspace(*p); p++) ; if (*p == '/') { - strncpy(fname, p, MAX_PATH); + strncpy(fname, p, MAX_PATH - 1); + fname[MAX_PATH - 1] = '\0'; } else { snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p); } diff --git a/qlo10k1/COPYING b/qlo10k1/COPYING index 5b6e7c6..c13faf0 100644 --- a/qlo10k1/COPYING +++ b/qlo10k1/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/qlo10k1/INSTALL b/qlo10k1/INSTALL index 56b077d..007e939 100644 --- a/qlo10k1/INSTALL +++ b/qlo10k1/INSTALL @@ -1,16 +1,25 @@ Installation Instructions ************************* -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free -Software Foundation, Inc. +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, +Inc. -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. Basic Installation ================== -These are generic installation instructions. + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses @@ -23,9 +32,9 @@ debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is +the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale -cache files.) +cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail @@ -35,30 +44,37 @@ some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. -The simplest way to compile this package is: + The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. + `./configure' to configure the package for your system. - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with - the package. + the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and - documentation. + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. - 5. You can remove the program binaries and object files from the + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is @@ -67,65 +83,120 @@ The simplest way to compile this package is: all sorts of other programs in order to regenerate files that came with the distribution. + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + Compilers and Options ===================== -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== -You can compile the package for more than one kind of computer at the + You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the +own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. Installation Names ================== -By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PREFIX'. + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PREFIX', the package will -use PREFIX as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to + Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The @@ -137,14 +208,58 @@ find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + Specifying the System Type ========================== -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: @@ -152,14 +267,15 @@ type, such as `sun4', or a canonical name which has the form: where SYSTEM can have one of these forms: - OS KERNEL-OS + OS + KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will +use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a @@ -170,9 +286,9 @@ eventually be run) with `--host=TYPE'. Sharing Defaults ================ -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. @@ -181,7 +297,7 @@ A warning: not all `configure' scripts look for a site script. Defining Variables ================== -Variables not defined in a site shell script can be set in the + Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set @@ -190,21 +306,30 @@ them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). Here is a another example: +overridden in the site shell script). - /bin/bash ./configure CONFIG_SHELL=/bin/bash +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: -Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent -configuration-related scripts to be executed by `/bin/bash'. + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== -`configure' recognizes the following options to control how it operates. + `configure' recognizes the following options to control how it +operates. `--help' `-h' - Print a summary of the options to `configure', and exit. + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. `--version' `-V' @@ -231,6 +356,15 @@ configuration-related scripts to be executed by `/bin/bash'. Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. - diff --git a/qlo10k1/Makefile.am b/qlo10k1/Makefile.am index ef522bf..b34b93a 100644 --- a/qlo10k1/Makefile.am +++ b/qlo10k1/Makefile.am @@ -1,6 +1,6 @@ SUBDIRS = src -EXTRA_DIST = gitcompile COPYING configure.in README NEWS AUTHORS TODO \ +EXTRA_DIST = gitcompile COPYING configure.ac README NEWS AUTHORS TODO \ INSTALL ChangeLog alsa-dist: distdir diff --git a/qlo10k1/config.h.in b/qlo10k1/config.h.in index 215c9bd..497de12 100644 --- a/qlo10k1/config.h.in +++ b/qlo10k1/config.h.in @@ -1,4 +1,7 @@ -/* config.h.in. Generated from configure.in by autoheader. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H @@ -33,6 +36,10 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + /* Name of package */ #undef PACKAGE @@ -48,6 +55,9 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION @@ -60,6 +70,14 @@ /* Defined if on Win32 platform */ #undef WIN32 -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif diff --git a/qlo10k1/configure.in b/qlo10k1/configure.ac similarity index 88% rename from qlo10k1/configure.in rename to qlo10k1/configure.ac index 86c32a0..6e698d4 100644 --- a/qlo10k1/configure.in +++ b/qlo10k1/configure.ac @@ -1,5 +1,7 @@ -AC_INIT(src/main.cpp) -AM_INIT_AUTOMAKE(qlo10k1, 0.1.2p1) +AC_INIT(qlo10k1, 0.1.2p1) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) +AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS(config.h) AC_PROG_CXX AC_PROG_LD diff --git a/qlo10k1/cvscompile b/qlo10k1/cvscompile deleted file mode 100755 index 5ddd1ec..0000000 --- a/qlo10k1/cvscompile +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -autoreconf -fi -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/qlo10k1/src/aboutdialog.cpp b/qlo10k1/src/aboutdialog.cpp index ab34666..a32b488 100644 --- a/qlo10k1/src/aboutdialog.cpp +++ b/qlo10k1/src/aboutdialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/aboutdialog.h b/qlo10k1/src/aboutdialog.h index b72ca18..3f29622 100644 --- a/qlo10k1/src/aboutdialog.h +++ b/qlo10k1/src/aboutdialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/connectionwizard.cpp b/qlo10k1/src/connectionwizard.cpp index 25aef79..6c3a8fd 100644 --- a/qlo10k1/src/connectionwizard.cpp +++ b/qlo10k1/src/connectionwizard.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/connectionwizard.h b/qlo10k1/src/connectionwizard.h index 0db31ec..d04fa38 100644 --- a/qlo10k1/src/connectionwizard.h +++ b/qlo10k1/src/connectionwizard.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/custom_colors.h b/qlo10k1/src/custom_colors.h index 6acef2f..62f8aaf 100644 --- a/qlo10k1/src/custom_colors.h +++ b/qlo10k1/src/custom_colors.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/filecontroldialog.cpp b/qlo10k1/src/filecontroldialog.cpp index 3776f6d..37fae6a 100644 --- a/qlo10k1/src/filecontroldialog.cpp +++ b/qlo10k1/src/filecontroldialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/filecontroldialog.h b/qlo10k1/src/filecontroldialog.h index 7a69230..c4591b6 100644 --- a/qlo10k1/src/filecontroldialog.h +++ b/qlo10k1/src/filecontroldialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_effect.xpm b/qlo10k1/src/icons/routing_effect.xpm index a83c5f1..e0f7961 100644 --- a/qlo10k1/src/icons/routing_effect.xpm +++ b/qlo10k1/src/icons/routing_effect.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_effect_stack.xpm b/qlo10k1/src/icons/routing_effect_stack.xpm index 0a1ed97..7a207e1 100644 --- a/qlo10k1/src/icons/routing_effect_stack.xpm +++ b/qlo10k1/src/icons/routing_effect_stack.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_fx.xpm b/qlo10k1/src/icons/routing_fx.xpm index a8becfa..958625f 100644 --- a/qlo10k1/src/icons/routing_fx.xpm +++ b/qlo10k1/src/icons/routing_fx.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_in.xpm b/qlo10k1/src/icons/routing_in.xpm index 7f0858a..7ba3940 100644 --- a/qlo10k1/src/icons/routing_in.xpm +++ b/qlo10k1/src/icons/routing_in.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_normal.xpm b/qlo10k1/src/icons/routing_normal.xpm index 2eaf424..3336ef1 100644 --- a/qlo10k1/src/icons/routing_normal.xpm +++ b/qlo10k1/src/icons/routing_normal.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_out.xpm b/qlo10k1/src/icons/routing_out.xpm index 8a9fb22..bde1fd0 100644 --- a/qlo10k1/src/icons/routing_out.xpm +++ b/qlo10k1/src/icons/routing_out.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_route.xpm b/qlo10k1/src/icons/routing_route.xpm index a771bbe..d7b6cfe 100644 --- a/qlo10k1/src/icons/routing_route.xpm +++ b/qlo10k1/src/icons/routing_route.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_zoom_minus.xpm b/qlo10k1/src/icons/routing_zoom_minus.xpm index 0fc331b..baa0ea3 100644 --- a/qlo10k1/src/icons/routing_zoom_minus.xpm +++ b/qlo10k1/src/icons/routing_zoom_minus.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/icons/routing_zoom_plus.xpm b/qlo10k1/src/icons/routing_zoom_plus.xpm index a694cde..f5aabc9 100644 --- a/qlo10k1/src/icons/routing_zoom_plus.xpm +++ b/qlo10k1/src/icons/routing_zoom_plus.xpm @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/ld10k1file.cpp b/qlo10k1/src/ld10k1file.cpp index c85e709..ecb4870 100644 --- a/qlo10k1/src/ld10k1file.cpp +++ b/qlo10k1/src/ld10k1file.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/ld10k1file.h b/qlo10k1/src/ld10k1file.h index c22f0bd..068b8d0 100644 --- a/qlo10k1/src/ld10k1file.h +++ b/qlo10k1/src/ld10k1file.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/loadpatchdialog.cpp b/qlo10k1/src/loadpatchdialog.cpp index 5cf6721..f3d9a8e 100644 --- a/qlo10k1/src/loadpatchdialog.cpp +++ b/qlo10k1/src/loadpatchdialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/loadpatchdialog.h b/qlo10k1/src/loadpatchdialog.h index 832a029..6522c55 100644 --- a/qlo10k1/src/loadpatchdialog.h +++ b/qlo10k1/src/loadpatchdialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/main.cpp b/qlo10k1/src/main.cpp index b156d57..61c0c5a 100644 --- a/qlo10k1/src/main.cpp +++ b/qlo10k1/src/main.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/mainwnd.cpp b/qlo10k1/src/mainwnd.cpp index c7372ba..0f6fd6e 100644 --- a/qlo10k1/src/mainwnd.cpp +++ b/qlo10k1/src/mainwnd.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/mainwnd.h b/qlo10k1/src/mainwnd.h index 50eec11..4b4aba7 100644 --- a/qlo10k1/src/mainwnd.h +++ b/qlo10k1/src/mainwnd.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/newiodialog.cpp b/qlo10k1/src/newiodialog.cpp index 81453a9..58cfcba 100644 --- a/qlo10k1/src/newiodialog.cpp +++ b/qlo10k1/src/newiodialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/newiodialog.h b/qlo10k1/src/newiodialog.h index 29df240..c33081b 100644 --- a/qlo10k1/src/newiodialog.h +++ b/qlo10k1/src/newiodialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/patchdialog.cpp b/qlo10k1/src/patchdialog.cpp index 035c763..81ea7d2 100644 --- a/qlo10k1/src/patchdialog.cpp +++ b/qlo10k1/src/patchdialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/patchdialog.h b/qlo10k1/src/patchdialog.h index adbf891..3aa82be 100644 --- a/qlo10k1/src/patchdialog.h +++ b/qlo10k1/src/patchdialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/preferences.cpp b/qlo10k1/src/preferences.cpp index 913a28b..d7a78e1 100644 --- a/qlo10k1/src/preferences.cpp +++ b/qlo10k1/src/preferences.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/preferences.h b/qlo10k1/src/preferences.h index 640672d..94dd6cd 100644 --- a/qlo10k1/src/preferences.h +++ b/qlo10k1/src/preferences.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/routingwidget.cpp b/qlo10k1/src/routingwidget.cpp index ef96cf9..9af85eb 100644 --- a/qlo10k1/src/routingwidget.cpp +++ b/qlo10k1/src/routingwidget.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/routingwidget.h b/qlo10k1/src/routingwidget.h index 9e4b6a8..c9bff50 100644 --- a/qlo10k1/src/routingwidget.h +++ b/qlo10k1/src/routingwidget.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/routingwidget_menu.cpp b/qlo10k1/src/routingwidget_menu.cpp index dc913ee..b2dd0e2 100644 --- a/qlo10k1/src/routingwidget_menu.cpp +++ b/qlo10k1/src/routingwidget_menu.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/routingwidget_new.cpp b/qlo10k1/src/routingwidget_new.cpp index 34d708b..ca7273f 100644 --- a/qlo10k1/src/routingwidget_new.cpp +++ b/qlo10k1/src/routingwidget_new.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/strglobal.cpp b/qlo10k1/src/strglobal.cpp index e5bc7d9..2682702 100644 --- a/qlo10k1/src/strglobal.cpp +++ b/qlo10k1/src/strglobal.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/strglobal.h b/qlo10k1/src/strglobal.h index d988de5..9a6b118 100644 --- a/qlo10k1/src/strglobal.h +++ b/qlo10k1/src/strglobal.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/strparam.cpp b/qlo10k1/src/strparam.cpp index b042d75..83066bc 100644 --- a/qlo10k1/src/strparam.cpp +++ b/qlo10k1/src/strparam.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/strparam.h b/qlo10k1/src/strparam.h index 7ceef2c..5c1678e 100644 --- a/qlo10k1/src/strparam.h +++ b/qlo10k1/src/strparam.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure.cpp b/qlo10k1/src/structure.cpp index 57d5c6e..034d707 100644 --- a/qlo10k1/src/structure.cpp +++ b/qlo10k1/src/structure.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure.h b/qlo10k1/src/structure.h index 3342fa0..380ee17 100644 --- a/qlo10k1/src/structure.h +++ b/qlo10k1/src/structure.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_aa.cpp b/qlo10k1/src/structure_aa.cpp index d0bddb9..277a089 100644 --- a/qlo10k1/src/structure_aa.cpp +++ b/qlo10k1/src/structure_aa.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_io.cpp b/qlo10k1/src/structure_io.cpp index 466b023..61df365 100644 --- a/qlo10k1/src/structure_io.cpp +++ b/qlo10k1/src/structure_io.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_io.h b/qlo10k1/src/structure_io.h index 728647c..c9fa5aa 100644 --- a/qlo10k1/src/structure_io.h +++ b/qlo10k1/src/structure_io.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_link.cpp b/qlo10k1/src/structure_link.cpp index bd7e7bb..381fff6 100644 --- a/qlo10k1/src/structure_link.cpp +++ b/qlo10k1/src/structure_link.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_link.h b/qlo10k1/src/structure_link.h index dc5c00f..d6f27ca 100644 --- a/qlo10k1/src/structure_link.h +++ b/qlo10k1/src/structure_link.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_patch.cpp b/qlo10k1/src/structure_patch.cpp index 0fa1871..7d1041a 100644 --- a/qlo10k1/src/structure_patch.cpp +++ b/qlo10k1/src/structure_patch.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/structure_patch.h b/qlo10k1/src/structure_patch.h index 1e66336..00efbe7 100644 --- a/qlo10k1/src/structure_patch.h +++ b/qlo10k1/src/structure_patch.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/transformpatchdialog.cpp b/qlo10k1/src/transformpatchdialog.cpp index 9313053..05c171a 100644 --- a/qlo10k1/src/transformpatchdialog.cpp +++ b/qlo10k1/src/transformpatchdialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/qlo10k1/src/transformpatchdialog.h b/qlo10k1/src/transformpatchdialog.h index 8962180..88a1603 100644 --- a/qlo10k1/src/transformpatchdialog.h +++ b/qlo10k1/src/transformpatchdialog.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/rmedigicontrol/COPYING b/rmedigicontrol/COPYING index 5b6e7c6..c13faf0 100644 --- a/rmedigicontrol/COPYING +++ b/rmedigicontrol/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/rmedigicontrol/Makefile.am b/rmedigicontrol/Makefile.am index bf24c5c..89d552e 100644 --- a/rmedigicontrol/Makefile.am +++ b/rmedigicontrol/Makefile.am @@ -4,7 +4,7 @@ rmedigicontrol_SOURCES = rmedigicontrol.c rmedigicontrol.h level.c loopback.c rmedigicontrol_LDADD = @RMEDIGICONTROL_LIBS@ -EXTRA_DIST = gitcompile depcomp configure.in-gtk1 configure.in-gtk2 +EXTRA_DIST = gitcompile depcomp configure.in-gtk1 AUTOMAKE_OPTIONS = foreign alsa-dist: distdir diff --git a/rmedigicontrol/configure.in-gtk2 b/rmedigicontrol/configure.ac similarity index 60% rename from rmedigicontrol/configure.in-gtk2 rename to rmedigicontrol/configure.ac index bc4c605..9c38754 100644 --- a/rmedigicontrol/configure.in-gtk2 +++ b/rmedigicontrol/configure.ac @@ -1,5 +1,6 @@ -AC_INIT(rmedigicontrol.c) -AM_INIT_AUTOMAKE(rmedigicontrol, 0.3.5a) +AC_INIT(rmedigicontrol, 0.3.5a) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/rmedigicontrol/configure.in b/rmedigicontrol/configure.in deleted file mode 100644 index 1bb1986..0000000 --- a/rmedigicontrol/configure.in +++ /dev/null @@ -1,26 +0,0 @@ -AC_INIT(rmedigicontrol.c) -AM_INIT_AUTOMAKE(rmedigicontrol, 0.3.5a) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC - -AC_ARG_WITH(gtk2, - [ --with-gtk2=yes,no Build with GTK+2 (default = yes)], - with_gtk2="$withval", with_gtk2="yes") - -if test "$with_gtk2" = "yes"; then - -PKG_CHECK_MODULES(RMEDIGICONTROL, gtk+-2.0 alsa >= 1.0.0) - -else - -AM_PATH_GTK(1.0.1) -AM_PATH_ALSA(1.0.0) -RMEDIGICONTROL_CFLAGS="$CFLAGS $ALSA_CFLAGS $GTK_CFLAGS" -RMEDIGICONTROL_LIBS="$LIBS $ALSA_LIBS $GTK_LIBS" -AC_SUBST(RMEDIGICONTROL_CFLAGS) -AC_SUBST(RMEDIGICONTROL_LIBS) - -fi - -AC_OUTPUT(Makefile) diff --git a/rmedigicontrol/cvscompile b/rmedigicontrol/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/rmedigicontrol/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/rmedigicontrol/rmedigicontrol.c b/rmedigicontrol/rmedigicontrol.c index 973299b..1119637 100644 --- a/rmedigicontrol/rmedigicontrol.c +++ b/rmedigicontrol/rmedigicontrol.c @@ -29,7 +29,7 @@ void destroy(GtkWidget *widget,gpointer data) int main(int argc, char *argv[]) { int card; - char name[8],*err; + char name[16],*err; snd_ctl_card_info_t *hw_info; card_type_t type; diff --git a/sb16_csp/COPYING b/sb16_csp/COPYING index 5b6e7c6..c13faf0 100644 --- a/sb16_csp/COPYING +++ b/sb16_csp/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/mixartloader/configure.in b/sb16_csp/configure.ac similarity index 67% rename from mixartloader/configure.in rename to sb16_csp/configure.ac index e5d14f8..76d035e 100644 --- a/mixartloader/configure.in +++ b/sb16_csp/configure.ac @@ -1,5 +1,6 @@ -AC_INIT(mixartloader.c) -AM_INIT_AUTOMAKE(mixartloader, 1.0) +AC_INIT(cspctl, 0.2.0) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/sb16_csp/cspctl.1 b/sb16_csp/cspctl.1 index 71c4b52..e9ccf6d 100644 --- a/sb16_csp/cspctl.1 +++ b/sb16_csp/cspctl.1 @@ -1,5 +1,4 @@ .TH cspctl 1 "April 27, 2000" -.LO 1 .SH NAME cspctl \- Sound Blaster 16 ASP/CSP control program @@ -9,11 +8,11 @@ command [\-options] .SH DESCRIPTION .B cspctl -is a simple CSP microcode loader for Crative Sound Blaster 16ASP and some Sound Blaster AWE32 sound cards with Creative Signal Processor (CSP) chip (CT1748A) installed. +is a simple CSP microcode loader for Creative Sound Blaster 16ASP and some Sound Blaster AWE32 sound cards with Creative Signal Processor (CSP) chip (CT1748A) installed. .B cspctl can also be used as a post-install function to .I snd\-sb16\-csp -module to load default codec at module installation. If CSP chip is succesfully detected and initialized, it will be installed as a hardware dependant device +module to load default codec at module installation. If CSP chip is successfully detected and initialized, it will be installed as a hardware dependent device .I hwC0D2 into /dev/snd directory. Currently, following codecs can be loaded to CSP device: .IP "" 4 diff --git a/sb16_csp/cspctl.c b/sb16_csp/cspctl.c index 3fd1d3f..d29fa12 100644 --- a/sb16_csp/cspctl.c +++ b/sb16_csp/cspctl.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/sb16_csp/cvscompile b/sb16_csp/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/sb16_csp/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/seq/cvscompile b/seq/cvscompile deleted file mode 100755 index 57bb7dc..0000000 --- a/seq/cvscompile +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -make CVSCOMPILE_ARGS="$*" diff --git a/seq/sbiload/COPYING b/seq/sbiload/COPYING index 5b6e7c6..c13faf0 100644 --- a/seq/sbiload/COPYING +++ b/seq/sbiload/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/seq/sbiload/configure.in b/seq/sbiload/configure.ac similarity index 73% rename from seq/sbiload/configure.in rename to seq/sbiload/configure.ac index fd01843..87b3449 100644 --- a/seq/sbiload/configure.in +++ b/seq/sbiload/configure.ac @@ -1,5 +1,5 @@ -AC_INIT(sbiload.c) -AM_INIT_AUTOMAKE(sbiload, 0.4.0) +AC_INIT(sbiload, 0.4.0) +AM_INIT_AUTOMAKE AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/seq/sbiload/cvscompile b/seq/sbiload/cvscompile deleted file mode 100755 index e8a1c45..0000000 --- a/seq/sbiload/cvscompile +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing --copy -touch depcomp -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/seq/sbiload/sbiload.c b/seq/sbiload/sbiload.c index 7465a82..2315974 100644 --- a/seq/sbiload/sbiload.c +++ b/seq/sbiload/sbiload.c @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * * Oct. 2007 - Takashi Iwai diff --git a/sscape_ctl/configure.ac b/sscape_ctl/configure.ac new file mode 100644 index 0000000..c1c048f --- /dev/null +++ b/sscape_ctl/configure.ac @@ -0,0 +1,12 @@ +AC_INIT(sscape_ctl, 0.1.0) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) +AC_PROG_CC +AC_PROG_INSTALL +AC_HEADER_STDC +AM_PATH_ALSA(1.0.0) + +CFLAGS="$CFLAGS $ALSA_CFLAGS" +LDFLAGS="$LDFLAGS $ALSA_LIBS" + +AC_OUTPUT(Makefile) diff --git a/sscape_ctl/cvscompile b/sscape_ctl/cvscompile deleted file mode 100755 index 01e8151..0000000 --- a/sscape_ctl/cvscompile +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -if test "x$AUTOMAKE_DIR" = "x"; then - if test -d /usr/local/share/automake; then - AUTOMAKE_DIR=/usr/local/share/automake - fi - if test -d /usr/share/automake; then - AUTOMAKE_DIR="/usr/share/automake" - fi -fi - -for f in install-sh mkinstalldirs missing; do - cp -av $AUTOMAKE_DIR/$f . -done - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/sscape_ctl/sscape_ctl.c b/sscape_ctl/sscape_ctl.c index 0bea604..4239757 100644 --- a/sscape_ctl/sscape_ctl.c +++ b/sscape_ctl/sscape_ctl.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/us428control/Cus428Midi.cc b/us428control/Cus428Midi.cc index b9e6783..455ee90 100644 --- a/us428control/Cus428Midi.cc +++ b/us428control/Cus428Midi.cc @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -32,22 +32,22 @@ char Cus428Midi::KnobParam[] = { 0x2A, 0x29, 0x28, - -1, + (char)-1, 0x10, 0x11, 0x18, 0x19, 0x1A, - -1, - -1, - -1, - -1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, 0x2C, 0x2D, 0x2E, 0x2F, - -1, - -1, + (char)-1, + (char)-1, 0x20, 0x21, 0x22, @@ -64,14 +64,14 @@ char Cus428Midi::KnobParam[] = { 5, 6, 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, + (char)-1, 0x30, 0x31, 0x32, diff --git a/us428control/Cus428Midi.h b/us428control/Cus428Midi.h index 63c91e7..1c1a220 100644 --- a/us428control/Cus428Midi.h +++ b/us428control/Cus428Midi.h @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "Cus428State.h" diff --git a/us428control/Cus428State.cc b/us428control/Cus428State.cc index 280c21d..70131bc 100644 --- a/us428control/Cus428State.cc +++ b/us428control/Cus428State.cc @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/us428control/Cus428State.h b/us428control/Cus428State.h index 657e656..af08096 100644 --- a/us428control/Cus428State.h +++ b/us428control/Cus428State.h @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef Cus428State_h diff --git a/us428control/Cus428_ctls.cc b/us428control/Cus428_ctls.cc index 3d59aba..bfac10f 100644 --- a/us428control/Cus428_ctls.cc +++ b/us428control/Cus428_ctls.cc @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/us428control/Cus428_ctls.h b/us428control/Cus428_ctls.h index 29da790..695f342 100644 --- a/us428control/Cus428_ctls.h +++ b/us428control/Cus428_ctls.h @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef Cus428_ctls_h diff --git a/us428control/configure.in b/us428control/configure.ac similarity index 65% rename from us428control/configure.in rename to us428control/configure.ac index 66aff9e..f3f5814 100644 --- a/us428control/configure.in +++ b/us428control/configure.ac @@ -1,5 +1,6 @@ -AC_INIT(us428control.cc) -AM_INIT_AUTOMAKE(us428control, 0.4.6) +AC_INIT(us428control, 0.4.6) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CXX AC_PROG_INSTALL AC_HEADER_STDC diff --git a/us428control/cvscompile b/us428control/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/us428control/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/us428control/us428control.cc b/us428control/us428control.cc index 3163402..8cb3c42 100644 --- a/us428control/us428control.cc +++ b/us428control/us428control.cc @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -63,7 +63,7 @@ static void usage(void) { printf("Tascam US-428 Control\n"); printf("version %s\n", VERSION); - printf("usage: "PROGNAME" [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device] [-m mode]\n"); + printf("usage: " PROGNAME " [-v verbosity_level 0..2] [-c card] [-D device] [-u usb-device] [-m mode]\n"); printf("mode is one of (us224, us428, mixxx)\n"); } /* diff --git a/us428control/usbus428ctldefs.h b/us428control/usbus428ctldefs.h index 1063bae..f698e38 100644 --- a/us428control/usbus428ctldefs.h +++ b/us428control/usbus428ctldefs.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef __cplusplus diff --git a/usx2yloader/configure.in b/usx2yloader/configure.ac similarity index 69% rename from usx2yloader/configure.in rename to usx2yloader/configure.ac index e91f28a..c789a4b 100644 --- a/usx2yloader/configure.in +++ b/usx2yloader/configure.ac @@ -1,5 +1,6 @@ -AC_INIT(usx2yloader.c) -AM_INIT_AUTOMAKE(usx2yloader, 0.3) +AC_INIT(usx2yloader, 0.3) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/usx2yloader/cvscompile b/usx2yloader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/usx2yloader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/usx2yloader/tascam_fw.in b/usx2yloader/tascam_fw.in index 14bbc6c..d3145e3 100644 --- a/usx2yloader/tascam_fw.in +++ b/usx2yloader/tascam_fw.in @@ -53,8 +53,8 @@ if [ ! -x $LOADER ]; then fi if [ -x /usr/bin/logger ]; then - /usr/bin/logger -t $0 "load $FIRMWARE for $PRODUCT to $DEVICE" + /usr/bin/logger -t $0 "load $FIRMWARE for $PRODUCT to $DEVNAME" fi -$LOADER $FLAGS -s $LOADERFIRMWARE -I $FIRMWARE +$LOADER $FLAGS -s $LOADERFIRMWARE -I $FIRMWARE -D $DEVNAME exit 0 diff --git a/usx2yloader/usx2yloader.c b/usx2yloader/usx2yloader.c index ab76acc..363cbdc 100644 --- a/usx2yloader/usx2yloader.c +++ b/usx2yloader/usx2yloader.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -225,7 +225,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname) for (p = buf + len; *p && isspace(*p); p++) ; if (*p == '/') { - strncpy(fname, p, MAX_PATH); + strncpy(fname, p, MAX_PATH - 1); + fname[MAX_PATH - 1] = '\0'; } else { snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p); } diff --git a/sscape_ctl/configure.in b/vxloader/configure.ac similarity index 67% rename from sscape_ctl/configure.in rename to vxloader/configure.ac index 282a56b..21e9c95 100644 --- a/sscape_ctl/configure.in +++ b/vxloader/configure.ac @@ -1,5 +1,6 @@ -AC_INIT(sscape_ctl.c) -AM_INIT_AUTOMAKE(sscape_ctl, 0.1.0) +AC_INIT(vxloader, 1.0) +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC diff --git a/vxloader/configure.in b/vxloader/configure.in deleted file mode 100644 index e3597ba..0000000 --- a/vxloader/configure.in +++ /dev/null @@ -1,11 +0,0 @@ -AC_INIT(vxloader.c) -AM_INIT_AUTOMAKE(vxloader, 1.0) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC -AM_PATH_ALSA(1.0.0) - -CFLAGS="$CFLAGS $ALSA_CFLAGS" -LDFLAGS="$LDFLAGS $ALSA_LIBS" - -AC_OUTPUT(Makefile) diff --git a/vxloader/cvscompile b/vxloader/cvscompile deleted file mode 100755 index 5daa701..0000000 --- a/vxloader/cvscompile +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -aclocal $ACLOCAL_FLAGS -automake --foreign --add-missing -autoconf -export CFLAGS='-O2 -Wall -pipe -g' -echo "CFLAGS=$CFLAGS" -echo "./configure $@" -./configure $@ -unset CFLAGS -make diff --git a/vxloader/vxloader.c b/vxloader/vxloader.c index 6539674..cc62e1e 100644 --- a/vxloader/vxloader.c +++ b/vxloader/vxloader.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -214,7 +214,8 @@ static int get_file_name(const char *key, unsigned int idx, char *fname) for (p = buf + len; *p && isspace(*p); p++) ; if (*p == '/') { - strncpy(fname, p, MAX_PATH); + strncpy(fname, p, MAX_PATH - 1); + fname[MAX_PATH - 1] = '\0'; } else { snprintf(fname, MAX_PATH, "%s/%s", DATAPATH, p); }