sinatra-1.0/0000777000175000017500000000000010755626123010027 500000000000000sinatra-1.0/COPYING.ARTWORK0000644000175000017500000000245310755612060012125 000000000000002008 Fredrik Portstrom I, the copyright holder of the files listed below, hereby release them as well as this file into the public domain. This applies worldwide. In case this is not legally possible: I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law. MD5 sum File name c65be95c313c626e2ffea5158b1df413 data/sinatra.xpm 48b63f1e0d4659a38eb66e8e6769e576 data/sinatra.desktop f1c317cd12a956b73d485dd9178f4a3e data/theme/corner.png 41054b0bc6cf165c9fe37250702c3225 data/theme/default_cover.png 06297b5e19e45dea29326e206b2bbf15 data/theme/eye.png 8e62c50738c86f6abeaf7e5646e824ba data/theme/fade_corner.png b325b03b10c9ace081f1d86c4b21f775 data/theme/note_glow.png 583c40ec143f62050eb70ac47da2c7ad data/theme/note_player_1.png 7b284596cf21c898c4947be3e8d87e5e data/theme/note_player_2.png deefe497f74e2cc471c626143cc5aa49 data/theme/note_player_3.png abd0a40a8725f9e8f5f7f016343800b7 data/theme/note_player_4.png 3bc5a19e13ceeefd250ab7b9b23a496c data/theme/note.png ab2495a7264ed51e161c3701ca063ff8 data/theme/perfect_note.png 0069c4df68a6ca10dc54dbdf6faaa0ad data/theme/select_box.png 9f992b51e25296cadb55df4c39cf4848 data/theme/sing_screen.png 7564fd7bfe39f02784d9dbe830bf4383 data/theme/title_screen.png sinatra-1.0/ChangeLog0000644000175000017500000000040410755625404011514 000000000000002007-02-16 Fredrik Portstrom * Initial version. Copyright 2008 Fredrik Portstrom 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. sinatra-1.0/missing0000755000175000017500000002557710751443022011351 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2006-05-10.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, 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., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case $1 in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $1 in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: sinatra-1.0/configure.ac0000644000175000017500000000341010753312032012214 00000000000000# This file is part of Sinatra. # Copyright 2008 Fredrik Portstrom # # Sinatra is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sinatra is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sinatra. If not, see . AC_PREREQ(2.61) AC_INIT([Sinatra], 1.0) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_SRCDIR([src/main.c]) AM_INIT_AUTOMAKE([-Wall -Werror]) AC_PROG_CC PKG_CHECK_MODULES([freetype2], [freetype2], , [AC_MSG_ERROR([cannot find required library])]) PKG_CHECK_MODULES([gstreamer], [gstreamer-plugins-base-0.10], , [AC_MSG_ERROR([cannot find required library (gstreamer-plugins-base-0.10)])]) PKG_CHECK_MODULES([sdl], [sdl], , [AC_MSG_ERROR([cannot find required library])]) AC_CHECK_LIB(SDL_image, IMG_Load, , [AC_MSG_ERROR([cannot find required library])]) AC_HEADER_DIRENT AC_HEADER_STDC AC_CHECK_HEADERS([stdlib.h string.h unistd.h], , [AC_MSG_ERROR([cannot find required headers])]) AC_C_CONST AC_TYPE_SIZE_T AC_FUNC_MEMCMP AC_CHECK_FUNCS([atexit bzero getcwd memmove memset strchr strerror strtol], , [AC_MSG_ERROR([cannot find required functions])]) LDADD=`pkg-config --libs freetype2 gstreamer-0.10 sdl` LDADD="$LDADD -lGL -lGLU -lSDL_image -lgstinterfaces-0.10" AC_SUBST(CPPFLAGS, [`pkg-config --cflags freetype2 gstreamer-plugins-base-0.10 sdl`]) AC_SUBST(LDADD) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT sinatra-1.0/install-sh0000755000175000017500000003160010751443022011736 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2006-10-14.15 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" posix_glob= posix_mkdir= # Desired mode of installed file. mode=0755 chmodcmd=$chmodprog chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) mode=$2 shift shift case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac done if test $# -ne 0 && test -z "$dir_arg$dstarg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix=/ ;; -*) prefix=./ ;; *) prefix= ;; esac case $posix_glob in '') if (set -f) 2>/dev/null; then posix_glob=true else posix_glob=false fi ;; esac oIFS=$IFS IFS=/ $posix_glob && set -f set fnord $dstdir shift $posix_glob && set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dst"; then $doit $rmcmd -f "$dst" 2>/dev/null \ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \ && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\ || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } } || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: sinatra-1.0/Makefile.in0000644000175000017500000005457710755626062012034 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of Sinatra. # Copyright 2008 Fredrik Portstrom # # Sinatra is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sinatra is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sinatra. If not, see . VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(pixmapdir)" \ "$(DESTDIR)$(themedir)" desktopDATA_INSTALL = $(INSTALL_DATA) pixmapDATA_INSTALL = $(INSTALL_DATA) themeDATA_INSTALL = $(INSTALL_DATA) DATA = $(desktop_DATA) $(pixmap_DATA) $(theme_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ freetype2_CFLAGS = @freetype2_CFLAGS@ freetype2_LIBS = @freetype2_LIBS@ gstreamer_CFLAGS = @gstreamer_CFLAGS@ gstreamer_LIBS = @gstreamer_LIBS@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl_CFLAGS = @sdl_CFLAGS@ sdl_LIBS = @sdl_LIBS@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src desktopdir = $(datadir)/applications desktop_DATA = data/sinatra.desktop pixmapdir = $(datadir)/pixmaps pixmap_DATA = data/sinatra.xpm themedir = $(datadir)/@PACKAGE@/theme theme_DATA = \ data/sinatra.desktop \ data/sinatra.xpm \ data/theme/corner.png \ data/theme/default_cover.png \ data/theme/eye.png \ data/theme/fade_corner.png \ data/theme/note_glow.png \ data/theme/note_player_1.png \ data/theme/note_player_2.png \ data/theme/note_player_3.png \ data/theme/note_player_4.png \ data/theme/note.png \ data/theme/perfect_note.png \ data/theme/select_box.png \ data/theme/sing_screen.png \ data/theme/title_screen.png EXTRA_DIST = COPYING.ARTWORK $(desktop_DATA) $(pixmap_DATA) $(theme_DATA) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) test -z "$(desktopdir)" || $(MKDIR_P) "$(DESTDIR)$(desktopdir)" @list='$(desktop_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(desktopDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(desktopdir)/$$f'"; \ $(desktopDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(desktopdir)/$$f"; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(desktopdir)/$$f'"; \ rm -f "$(DESTDIR)$(desktopdir)/$$f"; \ done install-pixmapDATA: $(pixmap_DATA) @$(NORMAL_INSTALL) test -z "$(pixmapdir)" || $(MKDIR_P) "$(DESTDIR)$(pixmapdir)" @list='$(pixmap_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pixmapDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pixmapdir)/$$f'"; \ $(pixmapDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pixmapdir)/$$f"; \ done uninstall-pixmapDATA: @$(NORMAL_UNINSTALL) @list='$(pixmap_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pixmapdir)/$$f'"; \ rm -f "$(DESTDIR)$(pixmapdir)/$$f"; \ done install-themeDATA: $(theme_DATA) @$(NORMAL_INSTALL) test -z "$(themedir)" || $(MKDIR_P) "$(DESTDIR)$(themedir)" @list='$(theme_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(themeDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(themedir)/$$f'"; \ $(themeDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(themedir)/$$f"; \ done uninstall-themeDATA: @$(NORMAL_UNINSTALL) @list='$(theme_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(themedir)/$$f'"; \ rm -f "$(DESTDIR)$(themedir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d $(distdir) || mkdir $(distdir) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(pixmapdir)" "$(DESTDIR)$(themedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-desktopDATA install-pixmapDATA \ install-themeDATA install-dvi: install-dvi-recursive install-exec-am: install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-desktopDATA uninstall-pixmapDATA \ uninstall-themeDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-desktopDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pixmapDATA install-ps install-ps-am install-strip \ install-themeDATA installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am uninstall-desktopDATA \ uninstall-pixmapDATA uninstall-themeDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: sinatra-1.0/README0000644000175000017500000000056610755625226010635 00000000000000This is the README file for Sinatra. Sinatra is a karaoke game. Copyright 2008 Fredrik Portstrom 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. See the file INSTALL for building and installation instructions. Website: http://sinatra.nusinatra-1.0/depcomp0000755000175000017500000004224610751443022011317 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2006-10-15.18 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software # Foundation, Inc. # 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, 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., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: sinatra-1.0/src/0000777000175000017500000000000010755626123010616 500000000000000sinatra-1.0/src/texture.h0000644000175000017500000000245210751347766012417 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __TEXTURE_H_ #define __TEXTURE_H_ struct texture { int size_x; int size_y; unsigned texture; }; // Loads an image from the given file name relative to the current working directory and puts in the given texture structure // Returns NULL on success // Returns an error message on failure, which must be freed using g_free char *texture_load(struct texture *texture, const char *file_name); // Same as texture_load, but takes a file name relative to the theme directory char *texture_load_theme(struct texture *texture, const char *file_name); unsigned texture_load_simple(const char *file_name); #endif sinatra-1.0/src/songselect.c0000644000175000017500000007661610755623120013056 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #include #include #include #include #include #include "SDL.h" #include "SDL_opengl.h" #include "draw.h" #include "font.h" #include "globals.h" #include "messagebox.h" #include "song.h" #include "songselect.h" #include "texture.h" #define DISPLAYED_SONG_HALF_COUNT 5 #define DISPLAYED_SONG_COUNT (2 * DISPLAYED_SONG_HALF_COUNT + 1) struct song { char *file_name; char *artist; char *title; char *audio_file_name; char *cover_file_name; }; struct displayed_song { int song_index; struct texture *cover_texture; }; static unsigned loading_progress_draw_time; // Used only when loading song list static int songs_allocated = 1; // Used only when loading song list static int song_count = 0; static struct song **songs = NULL; static int artist_text_pos_x; static int title_text_pos_x; static struct displayed_song displayed_songs[DISPLAYED_SONG_COUNT]; static int selected_index; static GString *filter_string; // The text currently entered in the filter box. Only valid after songselect_show() and before songselect_hide(). static int successful_filter_length; // The length the filter had last time the filtered list was changed. The list is not changed when it would mean it would be empty. static int animation_direction; // 1 when proceeding to the next song. -1 when returning to the previous song. static Uint32 animation_time; static unsigned eye_texture; static GstElement *audio_pipeline; // Only valid after songselect_show() and before songselect_hide(). static struct texture default_cover_texture; static void fix_line_end(char *line) { char *line_end = strchr(line, '\n'); if(line_end) { *line_end = 0; if(line_end[-1] == '\r') { line_end[-1] = 0; } } } static void display_loading_progress(void) { unsigned ticks = SDL_GetTicks(); if(ticks < loading_progress_draw_time) { return; } glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_BLEND); glPushMatrix(); glTranslated(window_size_x / 2, window_size_y / 2, 0); { char *text = g_strdup_printf("Loading songs... %d", song_count); font_draw_utf8(text); g_free(text); } glPopMatrix(); glDisable(GL_BLEND); SDL_GL_SwapBuffers(); loading_progress_draw_time = ticks + 150; } static void parse_file(char *file_name) { FILE *file = fopen(file_name, "r"); if(!file) { return; } if(getc(file) != '#') { fclose(file); return; } ungetc('#', file); char line[1024]; struct song *song = g_malloc(sizeof(struct song)); song->artist = NULL; song->title = NULL; song->audio_file_name = NULL; song->cover_file_name = NULL; while(fgets(line, 1024, file)) { if(*line != '#') { if(!song->title || !song->artist || !song->audio_file_name) { break; } fclose(file); song->file_name = g_strdup(file_name); if(song_count >= songs_allocated) { songs_allocated *= 2; songs = g_realloc(songs, songs_allocated * sizeof(NULL)); } songs[song_count] = song; song_count++; return; } if(!memcmp("ARTIST:", line + 1, 7)) { if(song->artist) { // Corrupt file: Specifies artist twice break; } fix_line_end(line + 8); song->artist = g_strdup(line + 8); } else if(!memcmp("TITLE:", line + 1, 6)) { if(song->title) { // Corrupt file: Specifies title twice break; } fix_line_end(line + 7); song->title = g_strdup(line + 7); } else if(!memcmp("COVER:", line + 1, 6)) { if(song->cover_file_name) { // Corrupt file: Specifies cover file twice break; } fix_line_end(line + 7); if(strchr(line + 7, '/') || strchr(line + 7, '\\')) { // Corrupt file: Cover file name contains directory separators break; } song->cover_file_name = g_strdup(line + 7); } else if(*(int *)"MP3:" == *(int *)(line + 1)) { if(song->audio_file_name) { // Corrupt file: Specifies audio file twice break; } fix_line_end(line + 5); if(strchr(line + 5, '/') || strchr(line + 5, '\\')) { // Corrupt file: Audio file name contains directory separators break; } song->audio_file_name = g_strdup(line + 5); } } g_free(song->artist); g_free(song->title); g_free(song->audio_file_name); g_free(song->cover_file_name); g_free(song); fclose(file); return; } static int scan_dir(char *dir_name) { DIR *dir = opendir(dir_name); if(!dir) { return 1; } size_t dir_name_length = strlen(dir_name) + 1; size_t entry_name_allocated = 64; char *entry_name = g_malloc(dir_name_length + entry_name_allocated + 1); strcpy(entry_name, dir_name); entry_name[dir_name_length - 1] = '/'; for(;;) { struct dirent *dirent = readdir(dir); if(!dirent) { break; } if(*dirent->d_name == '.' && (!dirent->d_name[1] || dirent->d_name[1] == '.' && !dirent->d_name[2])) { continue; } display_loading_progress(); int length = strlen(dirent->d_name); if(length > entry_name_allocated) { entry_name_allocated = length; g_free(entry_name); entry_name = g_malloc(dir_name_length + entry_name_allocated + 1); strcpy(entry_name, dir_name); entry_name[dir_name_length - 1] = '/'; } strcpy(entry_name + dir_name_length, dirent->d_name); if(scan_dir(entry_name)) { parse_file(entry_name); } } closedir(dir); g_free(entry_name); return 0; } // Used as argument for qsort to sort songs by artist and title static int compare_songs(struct song **song1, struct song **song2) { int result = g_utf8_collate(song1[0]->artist, song2[0]->artist); if(result) { return result; } return g_utf8_collate(song1[0]->title, song2[0]->title); } static void load_songs() { songs = g_malloc(songs_allocated * sizeof(NULL)); { char *home = getenv("HOME"); if(home) { home = g_strconcat(home, "/.sinatra/songs", NULL); scan_dir(home); g_free(home); } } char *dir = g_strconcat(data_dir, "/songs", NULL); scan_dir(dir); g_free(dir); qsort(songs, song_count, sizeof(NULL), (void *)compare_songs); } void songselect_list(void) { load_songs(); int i; for(i = 0; i < song_count; i++) { printf("%s - %s\n", songs[i]->artist, songs[i]->title); } exit(0); } static void init_displayed_song(int displayed_index, int song_index) { struct song *song = songs[song_index]; struct displayed_song *displayed = displayed_songs + displayed_index; displayed->song_index = song_index; if(!song->cover_file_name) { displayed->cover_texture = &default_cover_texture; return; } char *dir_name = g_strdup(song->file_name); dirname(dir_name); char *file_name = g_strconcat(dir_name, "/", song->cover_file_name, NULL); g_free(dir_name); displayed->cover_texture = g_malloc(sizeof(struct texture)); char *error = texture_load(displayed->cover_texture, file_name); g_free(file_name); if(error) { g_free(displayed->cover_texture); displayed->cover_texture = &default_cover_texture; g_free(song->cover_file_name); song->cover_file_name = NULL; printf("failed to load cover image: %s\n", error); g_free(error); } } static void delete_displayed_song(int index) { displayed_songs[index].song_index = -1; if(displayed_songs[index].cover_texture != &default_cover_texture) { glDeleteTextures(1, &displayed_songs[index].cover_texture->texture); g_free(displayed_songs[index].cover_texture); } } int songselect_show(void) { if(!songs) { loading_progress_draw_time = SDL_GetTicks() + 500; load_songs(); songs = g_realloc(songs, song_count * sizeof(NULL)); if(!song_count) { g_free(songs); songs = NULL; songs_allocated = 0; char *home = getenv("HOME"); if(home) { messagebox_display(g_strconcat("You have no songs. You can add songs in ", home, "/.sinatra/songs", NULL)); } else { messagebox_display(g_strdup("You have no songs.")); } return 1; } char *error = texture_load_theme(&default_cover_texture, "default_cover.png"); if(error) { puts(error); exit(0); } eye_texture = texture_load_simple("eye.png"); } int i; for(i = 0; i <= DISPLAYED_SONG_HALF_COUNT && i < song_count; i++) { init_displayed_song(i, i); } while(i < DISPLAYED_SONG_COUNT) { displayed_songs[i].song_index = -1; i++; } selected_index = 0; animation_direction = 0; audio_pipeline = NULL; successful_filter_length = 0; filter_string = g_string_new(NULL); songselect_resize(); return 0; } void songselect_hide(void) { int i; for(i = 0; i < DISPLAYED_SONG_COUNT; i++) { if(displayed_songs[i].song_index >= 0) { delete_displayed_song(i); } } if(audio_pipeline) { gst_element_set_state(audio_pipeline, GST_STATE_NULL); g_object_unref(audio_pipeline); } g_string_free(filter_string, TRUE); } void songselect_resize(void) { struct song *song = songs[displayed_songs[selected_index].song_index]; artist_text_pos_x = (window_size_x - font_get_utf8_width(song->artist)) / 2; title_text_pos_x = (window_size_x - font_get_utf8_width(song->title)) / 2; } static void selection_changed(void) { artist_text_pos_x = (window_size_x - font_get_utf8_width(songs[displayed_songs[selected_index].song_index]->artist)) / 2; title_text_pos_x = (window_size_x - font_get_utf8_width(songs[displayed_songs[selected_index].song_index]->title)) / 2; if(audio_pipeline) { gst_element_set_state(audio_pipeline, GST_STATE_READY); } else { audio_pipeline = gst_element_factory_make("playbin", NULL); if(!audio_pipeline) { puts("failed to create playbin"); exit(0); } GstElement *video_sink = gst_element_factory_make("fakesink", NULL); if(!video_sink) { puts("failed to create fakesink"); exit(0); } g_object_set(audio_pipeline, "video-sink", video_sink, NULL); g_object_set(audio_pipeline, "volume", .5, NULL); } { char *dir_name = g_strdup(songs[displayed_songs[selected_index].song_index]->file_name); dirname(dir_name); char *uri; if(*dir_name == '/') { uri = g_strconcat("file://", dir_name, "/", songs[displayed_songs[selected_index].song_index]->audio_file_name, NULL); } else { char *cwd = getcwd(NULL, 0); if(!cwd) { puts("failed to get current working directory"); exit(0); } uri = g_strconcat("file://", cwd, "/", dir_name, "/", songs[displayed_songs[selected_index].song_index]->audio_file_name, NULL); } g_object_set(audio_pipeline, "uri", uri, NULL); g_free(dir_name); g_free(uri); } // FIXME Seeking works bad. Gstreamer gives lots of warnings and occasionally playback stops with a warning. I don't know why. /*gst_element_set_state(audio_pipeline, GST_STATE_PAUSED); GstState state; gst_element_get_state(audio_pipeline, NULL, &state, GST_CLOCK_TIME_NONE); // This line seems useless but does help. Otherwise the first seek fails. gst_element_seek_simple(audio_pipeline, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, 60 * GST_SECOND);*/ /*GstController *controller = gst_object_control_properties(G_OBJECT(audio_pipeline), "volume", NULL); gst_controller_set_interpolation_mode(controller, "volume", GST_INTERPOLATE_LINEAR); GValue value = { 0 }; g_value_init(&value, G_TYPE_DOUBLE); g_value_set_double(&value, 0); gst_controller_set(controller, "volume", 0, &value); g_value_set_double(&value, 0); gst_controller_set(controller, "volume", 3 * GST_SECOND, &value);*/ gst_element_set_state(audio_pipeline, GST_STATE_PLAYING); } // filter_string must not be empty when calling this static int match_string(char *haystack) { char *needle = filter_string->str; int first_needle_char = g_unichar_tolower(font_read_utf8_char(&needle)); for(;;) { int haystack_char = font_read_utf8_char(&haystack); if(!haystack_char) { return 0; } if(first_needle_char == g_unichar_tolower(haystack_char)) { char *needle_iterator = needle; char *haystack_iterator = haystack; for(;;) { int needle_char = font_read_utf8_char(&needle_iterator); if(!needle_char) { return 1; } haystack_char = font_read_utf8_char(&haystack_iterator); if(!haystack_char) { return 0; } if(g_unichar_tolower(needle_char) != g_unichar_tolower(haystack_char)) { break; } } } } } // filter_string must not be empty when calling this static int match_song(int index) { return match_string(songs[index]->artist) || match_string(songs[index]->title); } static void clear_songs_forward(void) { int i = selected_index; int end = (selected_index + DISPLAYED_SONG_HALF_COUNT + 1) % DISPLAYED_SONG_COUNT; while(i != end) { if(displayed_songs[i].song_index < 0) { break; } delete_displayed_song(i); i = (i + 1) % DISPLAYED_SONG_COUNT; } } static void select_next_song_internal(int direction) { if(displayed_songs[(selected_index + DISPLAYED_SONG_COUNT + direction) % DISPLAYED_SONG_COUNT].song_index < 0) { int source_index = (selected_index + DISPLAYED_SONG_COUNT + direction * (DISPLAYED_SONG_HALF_COUNT + 1)) % DISPLAYED_SONG_COUNT; int first = displayed_songs[source_index].song_index; int song_index; if(first >= 0) { for(song_index = (direction > 0 ? 0 : song_count - 1); song_index != first; song_index += direction) { if(!successful_filter_length || match_song(song_index)) { if(direction > 0) { clear_songs_forward(); } else { int i = selected_index; int end = (selected_index + DISPLAYED_SONG_HALF_COUNT) % DISPLAYED_SONG_COUNT; while(i != end) { if(displayed_songs[i].song_index < 0) { break; } delete_displayed_song(i); i = (i + DISPLAYED_SONG_COUNT - 1) % DISPLAYED_SONG_COUNT; } } init_displayed_song(selected_index, song_index); int target_index = selected_index; int end_index = (selected_index + DISPLAYED_SONG_COUNT + direction * DISPLAYED_SONG_HALF_COUNT) % DISPLAYED_SONG_COUNT; for(;;) { song_index += direction; if(song_index == first) { break; } if(!successful_filter_length || match_song(song_index)) { target_index = (target_index + DISPLAYED_SONG_COUNT + direction) % DISPLAYED_SONG_COUNT; init_displayed_song(target_index, song_index); if(target_index == end_index) { break; } } } while(target_index != end_index) { target_index = (target_index + DISPLAYED_SONG_COUNT + direction) % DISPLAYED_SONG_COUNT; displayed_songs[target_index] = displayed_songs[source_index]; displayed_songs[source_index].song_index = -1; source_index = (source_index + DISPLAYED_SONG_COUNT + direction) % DISPLAYED_SONG_COUNT; } while(source_index != selected_index) { delete_displayed_song(source_index); source_index = (source_index + DISPLAYED_SONG_COUNT + direction) % DISPLAYED_SONG_COUNT; } animation_direction = direction; animation_time = SDL_GetTicks(); selection_changed(); return; } } } if(displayed_songs[(selected_index + DISPLAYED_SONG_COUNT - direction) % DISPLAYED_SONG_COUNT].song_index < 0) { return; } selected_index = (selected_index + DISPLAYED_SONG_COUNT - direction) % DISPLAYED_SONG_COUNT; while(displayed_songs[(selected_index + DISPLAYED_SONG_COUNT - direction) % DISPLAYED_SONG_COUNT].song_index >= 0) { selected_index = (selected_index + DISPLAYED_SONG_COUNT - direction) % DISPLAYED_SONG_COUNT; } animation_direction = direction; animation_time = SDL_GetTicks(); selection_changed(); return; } selected_index = (selected_index + DISPLAYED_SONG_COUNT + direction) % DISPLAYED_SONG_COUNT; animation_direction = direction; animation_time = SDL_GetTicks(); selection_changed(); int displayed_index = (selected_index + DISPLAYED_SONG_COUNT + direction * DISPLAYED_SONG_HALF_COUNT) % DISPLAYED_SONG_COUNT; if(displayed_songs[displayed_index].song_index >= 0) { delete_displayed_song(displayed_index); } struct displayed_song *prev = displayed_songs + (selected_index + DISPLAYED_SONG_COUNT + direction * (DISPLAYED_SONG_HALF_COUNT - 1)) % DISPLAYED_SONG_COUNT; if(prev->song_index < 0) { return; } int song_index = prev->song_index; for(;;) { song_index += direction; if(song_index < 0 || song_index >= song_count) { return; } if(!successful_filter_length || match_song(song_index)) { break; } } init_displayed_song(displayed_index, song_index); } static void select_next_song(int direction) { if(song_count < 2) { return; } char ch = filter_string->str[successful_filter_length]; filter_string->str[successful_filter_length] = 0; select_next_song_internal(direction); filter_string->str[successful_filter_length] = ch; } static void add_songs(int index, int end_index, int step) { int song_index = displayed_songs[index].song_index; while(index != end_index) { song_index += step; if(song_index < 0 || song_index >= song_count) { return; } if(match_song(song_index)) { index = (index + step + DISPLAYED_SONG_COUNT) % DISPLAYED_SONG_COUNT; init_displayed_song(index, song_index); } } } static void move_displayed_songs(int source_index, int target_index, int step) { int source_end_index = (selected_index + step * DISPLAYED_SONG_HALF_COUNT + DISPLAYED_SONG_COUNT) % DISPLAYED_SONG_COUNT; int target_end_index = (target_index + step * DISPLAYED_SONG_HALF_COUNT + DISPLAYED_SONG_COUNT) % DISPLAYED_SONG_COUNT; while(source_index != source_end_index) { source_index = (source_index + step + DISPLAYED_SONG_COUNT) % DISPLAYED_SONG_COUNT; struct displayed_song *source_song = displayed_songs + source_index; if(source_song->song_index < 0) { return; } if(match_song(source_song->song_index)) { target_index = (target_index + step + DISPLAYED_SONG_COUNT) % DISPLAYED_SONG_COUNT; displayed_songs[target_index].song_index = source_song->song_index; displayed_songs[target_index].cover_texture = source_song->cover_texture; if(source_index != target_index) { source_song->song_index = -1; } } else { delete_displayed_song(source_index); } } add_songs(target_index, target_end_index, step); } static void found_song_in_displayed(int new_selected_index) { successful_filter_length = filter_string->len; { int i = selected_index; while(i != new_selected_index) { delete_displayed_song(i); i = (i + 1) % DISPLAYED_SONG_COUNT; } } move_displayed_songs(selected_index, new_selected_index, -1); move_displayed_songs(new_selected_index, new_selected_index, 1); selected_index = new_selected_index; } static void found_song_after_displayed(int song_index) { successful_filter_length = filter_string->len; clear_songs_forward(); init_displayed_song(selected_index, song_index); move_displayed_songs(selected_index, selected_index, -1); add_songs(selected_index, (selected_index + DISPLAYED_SONG_HALF_COUNT) % DISPLAYED_SONG_COUNT, 1); selection_changed(); } static void found_song_before_displayed(int song_index) { successful_filter_length = filter_string->len; clear_songs_forward(); init_displayed_song(selected_index, song_index); int end = (selected_index + DISPLAYED_SONG_HALF_COUNT) % DISPLAYED_SONG_COUNT; int source_index = (end + 1) % DISPLAYED_SONG_COUNT; int target_index = selected_index; song_index++; while(song_index < displayed_songs[source_index].song_index) { if(match_song(song_index)) { target_index = (target_index + 1) % DISPLAYED_SONG_COUNT; init_displayed_song(target_index, song_index); if(target_index == end) { break; } } song_index++; } while(source_index != selected_index) { struct displayed_song *source_song = displayed_songs + source_index; if(target_index != end && match_song(source_song->song_index)) { target_index = (target_index + 1) % DISPLAYED_SONG_COUNT; displayed_songs[target_index].song_index = source_song->song_index; displayed_songs[target_index].cover_texture = source_song->cover_texture; } else { delete_displayed_song(source_index); } source_index = (source_index + 1) % DISPLAYED_SONG_COUNT; } selection_changed(); } static void append_to_filter(int character) { // Be careful to respect multibyte characters in filter int length = filter_string->len; g_string_append_unichar(filter_string, character); if(length != successful_filter_length) { return; } int i = 0; for(;;) { struct displayed_song *song = displayed_songs + (selected_index + i) % DISPLAYED_SONG_COUNT; if(song->song_index < 0) { break; } if(match_song(song->song_index)) { found_song_in_displayed((selected_index + i) % DISPLAYED_SONG_COUNT); if(i) { selection_changed(); } return; } if(i == DISPLAYED_SONG_HALF_COUNT) { for(i = displayed_songs[(selected_index + i) % DISPLAYED_SONG_COUNT].song_index + 1; i < song_count; i++) { if(match_song(i)) { found_song_after_displayed(i); return; } } break; } i++; } int first_song = DISPLAYED_SONG_COUNT - 1; while(first_song > DISPLAYED_SONG_HALF_COUNT && displayed_songs[(selected_index + first_song) % DISPLAYED_SONG_COUNT].song_index >= 0) { first_song--; } if(first_song <= DISPLAYED_SONG_HALF_COUNT) { first_song = (selected_index + first_song + 1) % DISPLAYED_SONG_COUNT; int end = displayed_songs[first_song].song_index; for(i = 0; i < end; i++) { if(match_song(i)) { found_song_before_displayed(i); return; } } } else { first_song = (selected_index + first_song + 1) % DISPLAYED_SONG_COUNT; } i = first_song; for(;;) { if(i == selected_index) { return; } if(match_song(displayed_songs[i].song_index)) { break; } i = (i + 1) % DISPLAYED_SONG_COUNT; } while(first_song != i) { delete_displayed_song(first_song); first_song = (first_song + 1) % DISPLAYED_SONG_COUNT; } successful_filter_length = filter_string->len; clear_songs_forward(); selected_index = i; move_displayed_songs(i, i, 1); selection_changed(); } static void shorten_filter(void) { if(!filter_string->len) { return; } g_string_set_size(filter_string, g_utf8_prev_char(filter_string->str + filter_string->len) - filter_string->str); if(filter_string->len >= successful_filter_length) { return; } successful_filter_length = filter_string->len; struct displayed_song old_displayed[DISPLAYED_SONG_COUNT]; memmove(old_displayed, displayed_songs, sizeof displayed_songs); displayed_songs[DISPLAYED_SONG_HALF_COUNT] = displayed_songs[selected_index]; int song_index = displayed_songs[DISPLAYED_SONG_HALF_COUNT].song_index; int source_index = (selected_index + DISPLAYED_SONG_COUNT - 1) % DISPLAYED_SONG_COUNT; int target_index = DISPLAYED_SONG_HALF_COUNT; while(target_index) { if(!song_index) { while(target_index) { target_index--; displayed_songs[target_index].song_index = -1; } break; } song_index--; if(old_displayed[source_index].song_index == song_index) { target_index--; displayed_songs[target_index] = old_displayed[source_index]; source_index = (source_index + DISPLAYED_SONG_COUNT - 1) % DISPLAYED_SONG_COUNT; } else if(!filter_string->len || match_song(song_index)) { target_index--; init_displayed_song(target_index, song_index); } } int end_index = (selected_index + DISPLAYED_SONG_HALF_COUNT) % DISPLAYED_SONG_COUNT; while(source_index != end_index && old_displayed[source_index].song_index >= 0) { if(old_displayed[source_index].cover_texture != &default_cover_texture) { glDeleteTextures(1, &old_displayed[source_index].cover_texture->texture); g_free(old_displayed[source_index].cover_texture); } source_index = (source_index + DISPLAYED_SONG_COUNT - 1) % DISPLAYED_SONG_COUNT; } song_index = displayed_songs[DISPLAYED_SONG_HALF_COUNT].song_index; source_index = (selected_index + 1) % DISPLAYED_SONG_COUNT; target_index = DISPLAYED_SONG_HALF_COUNT; while(target_index < DISPLAYED_SONG_COUNT - 1) { song_index++; if(song_index >= song_count) { while(target_index < DISPLAYED_SONG_COUNT - 1) { target_index++; displayed_songs[target_index].song_index = -1; } break; } if(old_displayed[source_index].song_index == song_index) { target_index++; displayed_songs[target_index] = old_displayed[source_index]; source_index = (source_index + 1) % DISPLAYED_SONG_COUNT; } else if(!filter_string->len || match_song(song_index)) { target_index++; init_displayed_song(target_index, song_index); } } end_index = (selected_index + DISPLAYED_SONG_HALF_COUNT + 1) % DISPLAYED_SONG_COUNT; while(source_index != end_index && old_displayed[source_index].song_index >= 0) { if(old_displayed[source_index].cover_texture != &default_cover_texture) { glDeleteTextures(1, &old_displayed[source_index].cover_texture->texture); g_free(old_displayed[source_index].cover_texture); } source_index = (source_index + 1) % DISPLAYED_SONG_COUNT; } selected_index = DISPLAYED_SONG_HALF_COUNT; } void songselect_handle_key_press(SDL_keysym *key) { if(key->sym == SDLK_RETURN) { char *error = song_load(songs[displayed_songs[selected_index].song_index]->file_name); if(error) { messagebox_display(error); } else { songselect_hide(); } } else if(key->sym == SDLK_RIGHT) { select_next_song(1); } else if(key->sym == SDLK_LEFT) { select_next_song(-1); } else if(key->sym == SDLK_BACKSPACE) { shorten_filter(); } else if(key->unicode) { append_to_filter(key->unicode); } } void songselect_draw(void) { glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluPerspective(45, (double)window_size_x / window_size_y, 1, 50); glMatrixMode(GL_MODELVIEW); glEnable(GL_BLEND); glPushMatrix(); int last_song = 0; double anim = 1 - (SDL_GetTicks() - animation_time) / 400.; if(anim < 0) { anim = 0; } else { if(anim > .5) { last_song = animation_direction > 0 ? -1 : 1; } glTranslated(animation_direction * anim, 0, 0); } int i = -DISPLAYED_SONG_HALF_COUNT; for(;;) { double alpha = 1; struct displayed_song *song = displayed_songs + (i + selected_index + DISPLAYED_SONG_COUNT) % DISPLAYED_SONG_COUNT; if(song->song_index >= 0) { glPushMatrix(); if(i < 0) { if(i == -1 && animation_direction > 0 && anim) { double cos_anim = cos(M_PI * anim / 2); glTranslated(-3 * cos_anim - 1, -2, -4 * cos_anim - 12); glRotated(60 * cos_anim, 0, 1, 0); } else { if(i == -DISPLAYED_SONG_HALF_COUNT) { alpha = animation_direction > 0 ? anim : 0; } else if(i == 1 - DISPLAYED_SONG_HALF_COUNT && animation_direction < 0) { alpha = 1 - anim; } glTranslated(i - 3, -2, -16); glRotated(60, 0, 1, 0); } } else if(i) { if(i == 1 && animation_direction < 0 && anim) { double cos_anim = cos(M_PI * anim / 2); glTranslated(3 * cos_anim + 1, -2, -4 * cos_anim - 12); glRotated(-60 * cos_anim, 0, 1, 0); } else { if(i == DISPLAYED_SONG_HALF_COUNT) { alpha = animation_direction > 0 ? 0 : anim; } else if(i == DISPLAYED_SONG_HALF_COUNT - 1 && animation_direction > 0) { alpha = 1 - anim; } glTranslated(i + 3, -2, -16); glRotated(-60, 0, 1, 0); } } else { double sin_anim = sin(M_PI * anim / 2); glTranslated(3 * animation_direction * anim, -2, -4 * anim - 12); if(anim) { glRotated(-60. * animation_direction * sin_anim, 0, 1, 0); } } if(alpha) { int texture_size_x = song->cover_texture->size_x; int texture_size_y = song->cover_texture->size_y; glBindTexture(GL_TEXTURE_RECTANGLE_ARB, song->cover_texture->texture); glBegin(GL_QUADS); glColor4d(1, 1, 1, alpha); glTexCoord2i(0, 0); glVertex2d(-2.5, 5); glTexCoord2i(texture_size_x, 0); glVertex2d(2.5, 5); glTexCoord2i(texture_size_x, texture_size_y); glVertex2d(2.5, 0); glTexCoord2i(0, texture_size_y); glVertex2d(-2.5, 0); glColor4d(.2, .2, .2, alpha); glVertex2d(-2.5, 0); glTexCoord2i(texture_size_x, texture_size_y); glVertex2d(2.5, 0); glTexCoord2i(texture_size_x, 0); glVertex2d(2.5, -5); glTexCoord2i(0, 0); glVertex2d(-2.5, -5); glEnd(); } glPopMatrix(); } if(i == last_song) { break; } else if(i < 0) { i++; if(!i || i == last_song) { i = DISPLAYED_SONG_HALF_COUNT; } } else if(i) { i--; if(i == last_song) { i = 0; } } else { i = last_song; } } glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glColor3d(.25, .25, .25); { int spacing1 = SCALE(.25); int spacing2 = SCALE(.5); int xy1 = SCALE(1); int x2 = xy1 + spacing2; int x4 = window_size_x - xy1; int eye_x2 = x4 - spacing2; int eye_x1 = eye_x2 - font_ascender + font_descender; int eye_y1 = xy1 + spacing1; int text_y = eye_y1 + font_ascender; int eye_y2 = text_y - font_descender; draw_rounded_rectangle(xy1, x4, xy1, eye_y2 + spacing1, spacing2); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, eye_texture); glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex2i(eye_x1, eye_y1); glTexCoord2i(64, 0); glVertex2i(eye_x2, eye_y1); glTexCoord2i(64, 64); glVertex2i(eye_x2, eye_y2); glTexCoord2i(0, 64); glVertex2i(eye_x1, eye_y2); glEnd(); glColor3d(1, 1, 1); glPushMatrix(); glTranslated(x2, text_y, 0); glScissor(0, 0, eye_x1 - spacing1, window_size_y); } glEnable(GL_SCISSOR_TEST); font_draw_utf8(filter_string->str); glDisable(GL_SCISSOR_TEST); glPopMatrix(); glPushMatrix(); glTranslated(artist_text_pos_x, .88 * window_size_y - font_height, 0); font_draw_utf8(songs[displayed_songs[selected_index].song_index]->artist); glPopMatrix(); glPushMatrix(); glTranslated(title_text_pos_x, .88 * window_size_y, 0); font_draw_utf8(songs[displayed_songs[selected_index].song_index]->title); glPopMatrix(); glDisable(GL_BLEND); } sinatra-1.0/src/main.c0000644000175000017500000002016510755621761011631 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #include #include #include "SDL.h" #include "SDL_image.h" #include "SDL_opengl.h" #include "font.h" #include "globals.h" #include "messagebox.h" #include "playerconfscreen.h" #include "song.h" #include "songselect.h" #include "texture.h" #include "titlescreen.h" #include "main.h" #define APPLICATION_NAME "Sinatra" enum screen current_screen = SCREEN_TITLE; int difficulty = 1; int record_sample_rate = 48000; int title_screen_text = 1; // 0 is for automatic detection of window size int window_size_x = 0; int window_size_y = 0; char *data_dir = "/usr/local/share/" PACKAGE; char *score_file_name = NULL; int player_count = 1; static int bpp = 0; static gboolean full_screen = 1; static void set_video_mode() { SDL_Surface *surface = IMG_Load("/usr/local/share/pixmaps/sinatra.xpm"); if(surface) { SDL_WM_SetIcon(surface, NULL); } else { printf("warning: failed to load icon: %s\n", IMG_GetError()); } SDL_Surface *frame_buffer = SDL_SetVideoMode(window_size_x, window_size_y, bpp, (full_screen ? SDL_FULLSCREEN : 0) | SDL_ANYFORMAT | SDL_OPENGL | SDL_RESIZABLE); if(!frame_buffer) { printf("failed to set SDL video mode: %s\n", SDL_GetError()); exit(0); } // In case zero values were passed to SDL, it chooses window size automaticly and we need to update window_size_* window_size_x = frame_buffer->w; window_size_y = frame_buffer->h; scale = .045 * (window_size_x > window_size_y ? window_size_y : window_size_x); font_size = SCALE(1.25); glViewport(0, 0, window_size_x, window_size_y); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, window_size_x, window_size_y, 0, -1, 1); glMatrixMode(GL_MODELVIEW); } static void init_graphics(int bpp, gboolean full_screen) { atexit(SDL_Quit); if(SDL_Init(SDL_INIT_VIDEO) < 0) { printf("failed to initialize SDL: %s\n", SDL_GetError()); exit(0); } if(full_screen) { SDL_ShowCursor(SDL_DISABLE); } SDL_WM_SetCaption(APPLICATION_NAME, NULL); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); set_video_mode(); } static void display_version(void) { puts(PACKAGE_STRING "\n" "Copyright 2008 Fredrik Portstrom\n" "License GPLv3+: GNU GPL version 3 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law."); exit(0); } int main(int argc, char **argv) { g_thread_init(NULL); // Required for gst_init_get_option_group { GOptionEntry entries[] = { { "bpp", 0, 0, G_OPTION_ARG_INT, &bpp, "Bits per pixel", "BITS" }, { "data-dir", 0, 0, G_OPTION_ARG_FILENAME, &data_dir, "Data directory", "DIRECTORY" }, { "difficulty", 0, 0, G_OPTION_ARG_INT, &difficulty, "Difference of tones to count as score", "HALFTONES" }, { "full-screen", 'F', 0, G_OPTION_ARG_NONE, &full_screen, "Enables full screen display", NULL }, { "list-songs", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, songselect_list, "Prints a list of songs and exit", NULL }, { "no-full-screen", 'f', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &full_screen, "Disables full screen display", NULL }, { "resolution-x", 'x', 0, G_OPTION_ARG_INT, &window_size_x, "Window width", "PIXELS" }, { "resolution-y", 'y', 0, G_OPTION_ARG_INT, &window_size_y, "Window height", "PIXELS" }, { "sample-rate", 0, 0, G_OPTION_ARG_INT, &record_sample_rate, "Record sample rate", "HZ" }, { "score-file", 0, 0, G_OPTION_ARG_FILENAME, &score_file_name, "File for tracking scores", "FILE" }, { "title-screen-text", 0, 0, G_OPTION_ARG_NONE, &title_screen_text, "Displays advice on title screen", NULL }, { "no-title-screen-text", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &title_screen_text, "Disables advice on title screen", NULL }, { "version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, display_version, NULL }, { NULL } }; GOptionContext *context = g_option_context_new(NULL); g_option_context_add_main_entries(context, entries, NULL); g_option_context_add_group(context, gst_init_get_option_group()); GError *error = NULL; if(!g_option_context_parse(context, &argc, &argv, &error)) { puts(error->message); return 0; } init_graphics(bpp, full_screen); } { char *error = texture_load_theme(&default_backdrop, "title_screen.png"); if(error) { puts(error); return 0; } } record_devices[0].code = NULL; corner_texture = texture_load_simple("corner.png"); SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); SDL_EnableUNICODE(1); font_init(); titlescreen_show(); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_RECTANGLE_ARB); for(;;) { SDL_Event event; while(SDL_PollEvent(&event)) { if(event.type == SDL_QUIT) { return 0; } if(event.type == SDL_KEYDOWN) { if(event.key.keysym.sym == SDLK_F11) { full_screen ^= 1; SDL_ShowCursor(full_screen ? SDL_DISABLE : SDL_ENABLE); set_video_mode(); } else if(messagebox_visible) { if(event.key.keysym.sym == SDLK_RETURN || event.key.keysym.sym == SDLK_ESCAPE) { messagebox_unload(); } } else if(current_screen == SCREEN_ABOUT) { if(event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_RETURN) { current_screen = SCREEN_TITLE; aboutscreen_hide(); } } else if(current_screen == SCREEN_PLAYERCONF) { playerconfscreen_handle_key_press(&event.key.keysym); } else if(current_screen == SCREEN_SONG) { if(event.key.keysym.sym == SDLK_ESCAPE) { song_unload(); songselect_show(); current_screen = SCREEN_SONGSELECT; } else if(event.key.keysym.sym == SDLK_p || event.key.keysym.sym == SDLK_PAUSE) { song_toggle_pause(); } } else if(current_screen == SCREEN_SONGSELECT) { if(event.key.keysym.sym == SDLK_ESCAPE) { current_screen = SCREEN_TITLE; songselect_hide(); titlescreen_show(); } else { songselect_handle_key_press(&event.key.keysym); } } else if(event.key.keysym.sym == SDLK_ESCAPE) { return 0; } else if(event.key.keysym.sym == SDLK_RETURN) { if(!songselect_show()) { current_screen = SCREEN_SONGSELECT; } } else if(event.key.keysym.sym == SDLK_a) { current_screen = SCREEN_ABOUT; aboutscreen_show(); } else if(event.key.keysym.sym == SDLK_p) { if(!playerconfscreen_show()) { current_screen = SCREEN_PLAYERCONF; } } } else if(event.type == SDL_VIDEORESIZE) { window_size_x = event.resize.w; window_size_y = event.resize.h; set_video_mode(); font_resize(); if(current_screen == SCREEN_SONG) { song_resize(); } else if(current_screen == SCREEN_SONGSELECT) { songselect_resize(); } else if(current_screen == SCREEN_TITLE) { titlescreen_resize(); } } } if(current_screen == SCREEN_PLAYERCONF) { playerconfscreen_draw(); } else if(current_screen == SCREEN_SONG) { song_draw(); } else if(current_screen == SCREEN_SONGSELECT) { songselect_draw(); } else { titlescreen_draw(); } if(messagebox_visible) { messagebox_draw(); } SDL_GL_SwapBuffers(); } return 0; } sinatra-1.0/src/main.h0000644000175000017500000000164710755620440011633 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __MAIN_H_ #define __MAIN_H_ #include "texture.h" enum screen { SCREEN_ABOUT, SCREEN_PLAYERCONF, SCREEN_SONG, SCREEN_SONGSELECT, SCREEN_TITLE }; enum screen current_screen; struct texture default_backdrop; #endif sinatra-1.0/src/song.c0000644000175000017500000011757310755605320011656 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #include #include #include #include #include #include #include #include #include #include #include "SDL_opengl.h" #include "draw.h" #include "font.h" #include "globals.h" #include "main.h" #include "messagebox.h" #include "record.h" #include "song.h" #include "texture.h" #define LOWEST_TONE -120 // CAPTURED_NOTE_* must be less than LOWEST_TONE - 6 #define CAPTURED_NOTE_EMPTY -127 #define CAPTURED_NOTE_END -128 #define NOTE_SUBDIVISION 2 // Multiplier for resolution of notes // NOTE_* must be less than any LOWEST_TONE // NOTE_* values must remain in this order #define NOTE_EMPTY -126 #define NOTE_LINE -127 #define NOTE_END -128 enum captured_note_status { CAPTURED_NOTE_INCORRECT, CAPTURED_NOTE_CORRECT, CAPTURED_NOTE_PERFECT }; struct note { int start; int lyrics_index; char tone; }; struct captured_note { int start; char tone; enum captured_note_status status; }; struct player { int score; struct recorder *recorder; int record_channel; int captured_notes_allocated; int captured_notes_offset; struct captured_note *captured_notes; }; static struct player *players; static struct recorder *recorders[MAX_PLAYER_COUNT]; static char *artist; static char *title; static double bpm; static int gap; static int max_score; // The sum of the duration of every note static GstElement *audio_pipeline = NULL; static struct texture backdrop; static struct note *notes; static struct note *current_note; static struct note *line_first_note; static int line_length; // Number of beats between the start of the first note and the end of the last note static int notes_pos_y; static struct font_character *lyrics; static struct font_character *line_lyrics_end; static struct font_character *next_line_lyrics_end; static int line_pos_x; static int next_line_pos_x; static int last_position; static const double player_colors[][3] = { { 1, 0, 0 }, { 0, 0, 1 }, { 0, 1, 0 }, { 1, .75, 0 }}; static int note_size; static int line_pos_y; static int next_line_pos_y; static int lyrics_box_pos_y; static unsigned note_texture; static unsigned note_glow_texture; static unsigned perfect_note_texture; static unsigned captured_note_textures[] = { 0, 0, 0, 0 }; static void prepare_line() { line_length = -line_first_note->start; { int max_tone = -128; int min_tone = 127; struct note *note = line_first_note; while(note->tone > NOTE_LINE) { if(note->tone > max_tone) { max_tone = note->tone; } if(note->tone < min_tone && note->tone > NOTE_EMPTY) { min_tone = note->tone; } note++; } line_length = note->start - line_first_note->start; notes_pos_y = max_tone + min_tone - 1; line_lyrics_end = lyrics + note->lyrics_index; if(note->tone > NOTE_END) { note++; } while(note->tone > NOTE_LINE) { note++; } next_line_lyrics_end = lyrics + note->lyrics_index; } next_line_pos_x = 0; struct font_character *character = line_lyrics_end; while(character < next_line_lyrics_end) { next_line_pos_x += character->advance; character++; } next_line_pos_x /= 2; } static void play_audio(const char *uri) { audio_pipeline = gst_element_factory_make("playbin", NULL); if(!audio_pipeline) { puts("failed to create playbin"); exit(0); } g_object_set(audio_pipeline, "uri", uri, NULL); { GstElement *sink = gst_element_factory_make("fakesink", NULL); if(!sink) { puts("failed to create fakesink"); exit(0); } g_object_set(audio_pipeline, "video-sink", sink, NULL); } gst_element_set_state(audio_pipeline, GST_STATE_PLAYING); } static char *parse_string(char **value, char **cursor, const char *label, int line_number) { if(*value) { return g_strdup_printf("failed to load song file: error at line %d: %s is set twice", line_number, label); } char *value_start = *cursor; *cursor = strchrnul(value_start, '\n'); if(**cursor) { if(cursor[0][-1] == '\r') { cursor[0][-1] = 0; } else { **cursor = 0; } (*cursor)++; } *value = g_strdup(value_start); return NULL; } static char *parse_double(double *value, char **cursor, int line_number) { *cursor += 5; if((**cursor < '0' || **cursor > '9') && **cursor != '-') { return g_strdup_printf("failed to load song file: error at line %d: expecting floating point number", line_number); } { char *cursor2 = *cursor; for(;;) { cursor2++; if(*cursor2 == ',') { *cursor2 = '.'; break; } if(*cursor2 < '0' || *cursor2 > '9') { break; } } } *value = g_ascii_strtod(*cursor, cursor); if(**cursor == '\n') { (*cursor)++; } else if(**cursor == '\r' && cursor[0][1] == '\n') { *cursor += 2; } else if(**cursor) { return g_strdup_printf("failed to load song file: error at line %d: expecting end of line", line_number); } return NULL; } char *song_load_internal(const char *file_name, const char *dir_name, char *cursor, char **audio_uri, char **backdrop_file_name) { int gap_set = 0; int line_number = 0; // Used for reporting syntax errors int notes_allocated = 128; int note_count = 0; notes = g_malloc(notes_allocated * sizeof(struct note)); int relative = -1; // I really hate this feature. The song format should be very strict and uniform. int previous_char = 0; int lyrics_used = 0; int lyrics_allocated = 256; lyrics = g_malloc(lyrics_allocated * sizeof(struct font_character)); while(*cursor == '#') { line_number++; if(!memcmp("ARTIST:", cursor + 1, 7)) { cursor += 8; char *error = parse_string(&artist, &cursor, "artist", line_number); if(error) { return error; } } else if(!memcmp("BACKGROUND:", cursor + 1, 11)) { cursor += 12; char *error = parse_string(backdrop_file_name, &cursor, "backdrop file", line_number); if(error) { return error; } if(strchr(*backdrop_file_name, '/') || strchr(*backdrop_file_name, '\\')) { return g_strdup_printf("failed to load song file: error at line %d: backdrop file name contains directory separator", line_number); } } else if(*(int *)"BPM:" == *(int *)(cursor + 1)) { if(bpm) { return g_strdup_printf("failed to load song file: error at line %d: BPM is set twice", line_number); } char *error = parse_double(&bpm, &cursor, line_number); if(error) { return error; } if(bpm <= 0) { return g_strdup_printf("failed to load song file: error at line %d: BPM is not positive", line_number); } bpm *= 4 * NOTE_SUBDIVISION; } else if(*(int *)"GAP:" == *(int *)(cursor + 1)) { if(gap_set) { return g_strdup_printf("failed to load song file: error at line %d: gap is set twice", line_number); } double double_gap; char *error = parse_double(&double_gap, &cursor, line_number); if(error) { return error; } gap = double_gap; gap_set = 1; } else if(*(int *)"MP3:" == *(int *)(cursor + 1)) { if(*audio_uri) { return g_strdup_printf("failed to load song file: error at line %d: audio file is set twice", line_number); } *audio_uri = cursor + 5; cursor = strchrnul(*audio_uri, '\n'); if(*cursor) { if(cursor[-1] == '\r') { cursor[-1] = 0; } else { *cursor = 0; } cursor++; } if(strchr(*audio_uri, '/') || strchr(*audio_uri, '\\')) { return g_strdup_printf("failed to load song file: error at line %d: audio file name contains directory separator", line_number); } if(*dir_name == '/') { *audio_uri = g_strconcat("file://", dir_name, "/", *audio_uri, NULL); } else { char *cwd = getcwd(NULL, 0); if(!cwd) { return g_strconcat("failed to get current working directory: ", strerror(errno), NULL); } *audio_uri = g_strconcat("file://", cwd, "/", dir_name, "/", *audio_uri, NULL); } } else if(!memcmp("RELATIVE:", cursor + 1, 8)) { if(*(int *)":YES" != *(int *)(cursor + 9)) { return g_strdup_printf("failed to load song file: error at line %d: invalid value of 'RELATIVE'", line_number); } cursor += 13; if(*cursor == '\n') { cursor++; } else if(*cursor == '\r' && cursor[1] == '\n') { cursor += 2; } else if(*cursor) { return g_strdup_printf("failed to load song file: error at line %d: invalid value of 'RELATIVE'", line_number); } relative = 0; } else if(!memcmp("TITLE:", cursor + 1, 6)) { cursor += 7; char *error = parse_string(&title, &cursor, "title", line_number); if(error) { return error; } } else { cursor = strchrnul(cursor + 1, '\n'); if(*cursor) { cursor++; } } } if(!artist) { return g_strdup("failed to load song file: song file does not specify artist"); } if(!title) { return g_strdup("failed to load song file: song file does not specify title"); } if(!*audio_uri) { return g_strdup("failed to load song file: song file does not specify audio file"); } if(!bpm) { return g_strdup("failed to load song file: song file does not specify BPM"); } if(!gap_set) { return g_strdup("failed to load song file: song file does not specify gap"); } int last_note_end = gap < 0 ? -bpm * gap / 60000 : 0; while(*cursor) { line_number++; if(*cursor == ':' || *cursor == '*') { int start = NOTE_SUBDIVISION * strtol(cursor + 1, &cursor, 10); int duration = NOTE_SUBDIVISION * strtol(cursor, &cursor, 10); if(relative >= 0) { start += relative; } if(start < last_note_end && (!note_count || start <= notes[note_count - 1].start)) { if(!note_count) { return g_strdup_printf("failed to load song file: error at line %d: note starts before the song starts", line_number); } if(start <= notes[note_count - 1].start) { int new_start = notes[note_count - 1].start + NOTE_SUBDIVISION; duration -= start - new_start; start = new_start; } } if(duration <= 0) { return g_strdup_printf("failed to load song file: error at line %d: note duration is not positive", line_number); } if(start > last_note_end && note_count && notes[note_count - 1].tone > NOTE_EMPTY) { note_count++; if(note_count >= notes_allocated) { notes_allocated *= 2; notes = g_realloc(notes, notes_allocated * sizeof(struct note)); } notes[note_count - 1].start = last_note_end; notes[note_count - 1].lyrics_index = lyrics_used; notes[note_count - 1].tone = NOTE_EMPTY; } else if(note_count >= notes_allocated) { notes_allocated *= 2; notes = g_realloc(notes, notes_allocated * sizeof(struct note)); } notes[note_count].start = start; notes[note_count].lyrics_index = lyrics_used; notes[note_count].tone = strtol(cursor, &cursor, 10); if(notes[note_count].tone < LOWEST_TONE) { return g_strdup_printf("failed to load song file: error at line %d: note tone is out of bounds", line_number); } if(*cursor != ' ') { return g_strdup_printf("failed to load song file: error at line %d: missing space after note tone", line_number); } cursor++; char *word = cursor; cursor = strchrnul(cursor, '\n'); if(*cursor && cursor[-1] == '\r') { cursor[-1] = 0; } else { *cursor = 0; } for(;;) { if(lyrics_used >= lyrics_allocated) { lyrics_allocated *= 2; lyrics = g_realloc(lyrics, lyrics_allocated * sizeof(struct font_character)); } int result = font_prepare_char(lyrics + lyrics_used, &word, previous_char); if(!result) { break; } previous_char = result; lyrics_used++; } cursor++; last_note_end = start + duration; max_score += duration; note_count++; } else if(*cursor == '-') { if(!note_count || notes[note_count - 1].tone <= NOTE_LINE) { return g_strdup_printf("failed to load song file: error at line %d: line break is not preceeded by any note", line_number); } if(note_count >= notes_allocated) { notes_allocated *= 2; notes = g_realloc(notes, notes_allocated * sizeof(struct note)); } notes[note_count].start = last_note_end; notes[note_count].lyrics_index = lyrics_used; notes[note_count].tone = NOTE_LINE; note_count++; int end = NOTE_SUBDIVISION * strtol(cursor + 1, &cursor, 10); // Some songs have a junkyard of spaces at the end of these lines. Ignore spaces. while(*cursor == ' ') { cursor++; } if(*cursor && *cursor != '\r' && *cursor != '\n') { end = NOTE_SUBDIVISION * strtol(cursor, &cursor, 10); } while(*cursor == ' ') { cursor++; } while(*cursor == '\r') { cursor++; } if(*cursor == '\n') { cursor++; } else if(*cursor) { return g_strdup_printf("failed to load song file: error at line %d: junk at end of line", line_number); } // Some program adds a junk page break and junk note at the end. Ignore that particular junk. if(!memcmp(": 1 0 0 ", cursor, 9)) { char *junk = cursor + 9; if(*junk == '\r') { junk++; } if(*junk == '\n' && junk[1] == 'E') { junk += 2; if(*junk == '\r') { junk++; } if(*junk == '\n') { note_count--; break; } } } if(relative >= 0) { relative += end; } previous_char = 0; } else if(*cursor == '#') { return g_strdup_printf("failed to load song file: error at line %d: hash mark at inappropriate location", line_number); } else { if(*cursor == 'E') { break; } cursor = strchrnul(cursor, '\n'); if(*cursor) { cursor++; } } } if(!note_count) { return g_strdup("failed to load song file: song file does not specify any note"); } if(notes[note_count - 1].tone <= NOTE_LINE) { return g_strdup("failed to load song file: line break is not followed by any note"); } notes = g_realloc(notes, (note_count + 1) * sizeof(struct note) + 1); notes[note_count].start = last_note_end; notes[note_count].lyrics_index = lyrics_used; notes[note_count].tone = NOTE_END; lyrics = g_realloc(lyrics, lyrics_used * sizeof(struct font_character)); return NULL; } char *song_load(const char *file_name) { if(!*captured_note_textures) { note_texture = texture_load_simple("note.png"); note_glow_texture = texture_load_simple("note_glow.png"); perfect_note_texture = texture_load_simple("perfect_note.png"); } song_resize(); { int i = player_count; while(i) { i--; if(captured_note_textures[i]) { break; } char file_name[] = "note_player_1.png"; file_name[12] += i; captured_note_textures[i] = texture_load_simple(file_name); } } FILE *fp = fopen(file_name, "r"); if(!fp) { return g_strconcat("failed to open song file: ", strerror(errno), NULL); } fseek(fp, 0, SEEK_END); int file_size = ftell(fp) + 1; fseek(fp, 0, SEEK_SET); char *buffer = g_malloc(file_size + 1); file_size = fread(buffer, 1, file_size, fp); if(!feof(fp)) { return g_strdup("failed to read song file"); } buffer[file_size] = 0; fclose(fp); char *audio_uri = NULL; char *backdrop_file_name = NULL; artist = NULL; title = NULL; bpm = 0; current_note = NULL; max_score = 0; song_paused = 0; char *dir_name = g_strdup(file_name); dirname(dir_name); char *error = song_load_internal(file_name, dir_name, buffer, &audio_uri, &backdrop_file_name); if(error) { g_free(audio_uri); g_free(backdrop_file_name); g_free(buffer); g_free(dir_name); g_free(lyrics); g_free(notes); return error; } if(backdrop_file_name) { char *file_name = g_strconcat(dir_name, "/", backdrop_file_name, NULL); g_free(backdrop_file_name); char *error = texture_load(&backdrop, file_name); g_free(file_name); if(error) { printf("warning: failed to load backdrop for song: %s\n", error); g_free(error); backdrop_file_name = NULL; } } if(!backdrop_file_name) { char *error = texture_load_theme(&backdrop, "sing_screen.png"); if(error) { puts(error); exit(0); } } g_free(buffer); g_free(dir_name); line_first_note = notes; prepare_line(); line_pos_x = 0; struct font_character *character = lyrics + line_first_note->lyrics_index; while(character < line_lyrics_end) { line_pos_x += character->advance; character++; } line_pos_x /= 2; players = g_malloc(player_count * sizeof(struct player)); int i; for(i = 0; i < player_count; i++) { struct player *player = players + i; player->score = 0; player->captured_notes_allocated = 16; player->captured_notes_offset = 0; player->captured_notes = g_malloc(player->captured_notes_allocated * sizeof(struct captured_note)); player->captured_notes->start = 0; player->captured_notes->tone = CAPTURED_NOTE_END; } if(record_devices[0].code) { int i; for(i = 0; i < MAX_PLAYER_COUNT && record_devices[i].code; i++) { recorders[i] = record_start((record_devices[i].channel1_player >= 0) + (record_devices[i].channel2_player >= 0), record_devices[i].code); if(record_devices[i].channel1_player >= 0) { players[record_devices[i].channel1_player].recorder = recorders[i]; players[record_devices[i].channel1_player].record_channel = 0; } if(record_devices[i].channel2_player >= 0) { players[record_devices[i].channel2_player].recorder = recorders[i]; players[record_devices[i].channel2_player].record_channel = 1; } } } else { *recorders = record_start(1, NULL); players->recorder = *recorders; players->record_channel = 0; } play_audio(audio_uri); g_free(audio_uri); last_position = notes->start; note_size = SCALE(3. / (player_count + 2)); current_screen = SCREEN_SONG; return NULL; } void song_unload(void) { gst_element_set_state(audio_pipeline, GST_STATE_NULL); g_object_unref(audio_pipeline); audio_pipeline = NULL; record_stop(*recorders); if(player_count > 2) { record_stop(recorders[1]); } g_free(artist); g_free(title); g_free(lyrics); g_free(notes); int i; for(i = 0; i < player_count; i++) { g_free(players[i].captured_notes); } g_free(players); glDeleteTextures(1, &backdrop.texture); } void song_toggle_pause(void) { song_paused ^= 1; gst_element_set_state(audio_pipeline, song_paused ? GST_STATE_PAUSED : GST_STATE_PLAYING); } void song_resize(void) { next_line_pos_y = window_size_y - SCALE(1.5) + font_descender; line_pos_y = next_line_pos_y - (int)(1.1 * font_height); lyrics_box_pos_y = line_pos_y - font_ascender - SCALE(1.5); if(!audio_pipeline) { return; } note_size = SCALE(3. / (player_count + 2)); int is_first = 1; struct note *note = line_first_note; while(note->tone > NOTE_END) { if(note->tone == NOTE_LINE) { is_first = 1; } else { int i = note->lyrics_index; while(i < note[1].lyrics_index) { font_update_char(lyrics + i, is_first); is_first = 0; i++; } } note++; } line_pos_x = 0; struct font_character *character = lyrics + line_first_note->lyrics_index; while(character < line_lyrics_end) { line_pos_x += character->advance; character++; } line_pos_x /= 2; next_line_pos_x = 0; while(character < next_line_lyrics_end) { next_line_pos_x += character->advance; character++; } next_line_pos_x /= 2; } static void print_quoted(FILE *file, char *string) { putc('"', file); while(*string) { if(*string == '\\' || *string == '"') { putc('\\', file); } putc(*string, file); string++; } putc('"', file); } static void save_scores(void) { FILE *file = fopen(score_file_name, "a"); if(!file) { messagebox_display(g_strdup("failed to save scores: failed to open score file")); return; } int score_time = time(NULL); int i; for(i = 0; i < player_count; i++) { fprintf(file, "%d,", score_time); print_quoted(file, artist); putc(',', file); print_quoted(file, title); putc(',', file); fprintf(file, "%d\n", (int)(1000. * players[i].score / max_score)); } fclose(file); } static void draw_note_glow(int player_index) { int margin = SCALE(1); int glow_size = 3 * note_size / 2; int glow_offset = (glow_size - note_size) / 2; int offset_y = (player_index + .5) * lyrics_box_pos_y / player_count + margin + .375 * note_size * notes_pos_y - glow_offset; int pos_x_min = -1; struct note *note = line_first_note; while(note->tone > NOTE_LINE) { if(note->tone <= NOTE_EMPTY) { note++; continue; } if(pos_x_min < 0) { pos_x_min = (window_size_x - 2 * margin) * (note->start - line_first_note->start) / line_length + margin - glow_offset; } if(note[1].tone != note->tone) { int pos_x_max = (window_size_x - 2 * margin) * (note[1].start - line_first_note->start) / line_length + margin + glow_offset; int pos_y_min = offset_y - .75 * note_size * note->tone; int pos_y_max = pos_y_min + glow_size; int size_x = pos_x_max - pos_x_min; int edge_size_x = size_x > note_size ? note_size / 2 : size_x / 2; int edge_texture_size = 64 * edge_size_x / note_size; glTexCoord2i(0, 0); glVertex2i(pos_x_min, pos_y_min); glTexCoord2i(edge_texture_size, 0); glVertex2i(pos_x_min + edge_size_x, pos_y_min); glTexCoord2i(edge_texture_size, 96); glVertex2i(pos_x_min + edge_size_x, pos_y_max); glTexCoord2i(0, 96); glVertex2i(pos_x_min, pos_y_max); if(size_x > note_size) { glTexCoord2i(32, 0); glVertex2i(pos_x_min + note_size / 2, pos_y_min); glVertex2i(pos_x_max - note_size / 2, pos_y_min); glTexCoord2i(32, 96); glVertex2i(pos_x_max - note_size / 2, pos_y_max); glVertex2i(pos_x_min + note_size / 2, pos_y_max); } else { edge_size_x = size_x - edge_size_x; } glTexCoord2i(64 - edge_texture_size, 0); glVertex2i(pos_x_max - edge_size_x, pos_y_min); glTexCoord2i(64, 0); glVertex2i(pos_x_max, pos_y_min); glTexCoord2i(64, 96); glVertex2i(pos_x_max, pos_y_max); glTexCoord2i(64 - edge_texture_size, 96); glVertex2i(pos_x_max - edge_size_x, pos_y_max); pos_x_min = -1; } note++; } } static void draw_note(int start, int tone, int offset_y, int pos_x_max) { int margin = SCALE(1); int pos_x_min = (window_size_x - 2 * margin) * start / line_length + margin; int pos_y_min = offset_y - .75 * note_size * tone; int pos_y_max = pos_y_min + note_size; int size_x = pos_x_max - pos_x_min; int edge_size_x = size_x < note_size ? size_x / 2 : note_size / 2; int edge_texture_size = 64 * edge_size_x / note_size; glTexCoord2i(0, 0); glVertex2i(pos_x_min, pos_y_min); glTexCoord2i(edge_texture_size, 0); glVertex2i(pos_x_min + edge_size_x, pos_y_min); glTexCoord2i(edge_texture_size, 64); glVertex2i(pos_x_min + edge_size_x, pos_y_max); glTexCoord2i(0, 64); glVertex2i(pos_x_min, pos_y_max); if(size_x > note_size) { glTexCoord2i(32, 0); glVertex2i(pos_x_min + note_size / 2, pos_y_min); glVertex2i(pos_x_max - note_size / 2, pos_y_min); glTexCoord2i(32, 64); glVertex2i(pos_x_max - note_size / 2, pos_y_max); glVertex2i(pos_x_min + note_size / 2, pos_y_max); } else { edge_size_x = size_x - edge_size_x; } glTexCoord2i(64 - edge_texture_size, 0); glVertex2i(pos_x_max - edge_size_x, pos_y_min); glTexCoord2i(64, 0); glVertex2i(pos_x_max, pos_y_min); glTexCoord2i(64, 64); glVertex2i(pos_x_max, pos_y_max); glTexCoord2i(64 - edge_texture_size, 64); glVertex2i(pos_x_max - edge_size_x, pos_y_max); } static void draw_notes(int player_index) { int margin = SCALE(1); int offset_y = (player_index + .5) * lyrics_box_pos_y / player_count + margin + .375 * note_size * notes_pos_y; struct note *note = line_first_note; while(note->tone > NOTE_LINE) { if(note->tone <= NOTE_EMPTY) { note++; continue; } draw_note(note->start - line_first_note->start, note->tone, offset_y, (window_size_x - 2 * margin) * (note[1].start - line_first_note->start) / line_length + margin); note++; } } static void draw_captured_notes(int player_index, int pos_x_max) { int margin = SCALE(1); int offset_y = (player_index + .5) * lyrics_box_pos_y / player_count + margin + .375 * note_size * notes_pos_y; struct captured_note *note = players[player_index].captured_notes; while(note->tone > CAPTURED_NOTE_END) { if(note->tone <= CAPTURED_NOTE_EMPTY) { note++; continue; } if(note->status == CAPTURED_NOTE_INCORRECT) { glColor4d(1, 1, 1, .75); } else { glColor3d(1, 1, 1); } int pos_x_max2 = (window_size_x - 2 * margin) * note[1].start / line_length + margin; if(pos_x_max < pos_x_max2) { pos_x_max2 = pos_x_max; } draw_note(note->start, note->tone, offset_y, pos_x_max2); note++; } } static void draw_perfect_notes(int player_index, int position) { int margin = SCALE(1); int offset_y = (player_index + .5) * lyrics_box_pos_y / player_count + margin + .375 * note_size * notes_pos_y; int size = .75 * note_size; struct captured_note *note = players[player_index].captured_notes; while(note->tone > CAPTURED_NOTE_END) { if(note->status == CAPTURED_NOTE_PERFECT) { int fade_time = position - 60000 * (note[1].start + line_first_note->start) / bpm - gap; if(fade_time < 500) { glColor4d(1, 1, 1, sin(M_PI * fade_time / 500.)); glPushMatrix(); glTranslated((window_size_x - 2 * margin) * note[1].start / line_length + margin - note_size / 10, offset_y - .75 * note_size * note->tone, 0); glPushMatrix(); glRotated(position / 5., 0, 0, 1); glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex2i(-size, -size); glTexCoord2i(64, 0); glVertex2i(size, -size); glTexCoord2i(64, 64); glVertex2i(size, note_size); glTexCoord2i(0, 64); glVertex2i(-size, size); glEnd(); glPopMatrix(); glTranslated(note_size / 10, note_size / 10, 0); glRotated(-position / 5., 0, 0, 1); glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex2i(-size, -size); glTexCoord2i(64, 0); glVertex2i(size, -size); glTexCoord2i(64, 64); glVertex2i(size, size); glTexCoord2i(0, 64); glVertex2i(-size, size); glEnd(); glPopMatrix(); } } note++; } } static void draw_score_box(int player_index, int y1) { // 1. Generate dimensions // 2. Draw white transparent left side // 3. Draw loudness bar // 4. Draw opaque right side in the player's own color // 5. Draw score text int corner_radius = font_score_text_size_y / 4; int x6 = window_size_x - SCALE(1); int x5 = x6 - corner_radius; int x4 = x5 - font_score_text_size_x; int x3 = x4 - corner_radius; int x2 = x3 - 2 * corner_radius; int x1 = x2 - corner_radius; int y2 = y1 + corner_radius; int y3 = y2 + font_score_text_size_y; int y4 = y3 + corner_radius; const double *color1 = player_colors[player_index]; double color2[] = { .9 * *color1, .9 * color1[1], .9 * color1[2] }; double color3[] = { .6 * *color1, .6 * color1[1], .6 * color1[2] }; double color4[] = { .5 * *color1, .5 * color1[1], .5 * color1[2] }; // 2. Draw white transparent left side glDisable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); glColor4d(1, 1, 1, .5); draw_rectangle(x2, x4, y1, y2); draw_rectangle(x1, x3, y2, y3); draw_rectangle(x2, x4, y3, y4); glEnd(); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, corner_texture); glEnable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex2i(x1, y1); glTexCoord2i(32, 0); glVertex2i(x2, y1); glTexCoord2i(32, 32); glVertex2i(x2, y2); glTexCoord2i(0, 32); glVertex2i(x1, y2); glTexCoord2i(0, 32); glVertex2i(x1, y3); glTexCoord2i(32, 32); glVertex2i(x2, y3); glTexCoord2i(32, 0); glVertex2i(x2, y4); glTexCoord2i(0, 0); glVertex2i(x1, y4); glEnd(); // 3. Draw loudness bar double loudness = record_get_loudness(players[player_index].recorder, players[player_index].record_channel); int loudness_height = (int)((y4 - y1) * loudness); if(loudness_height) { glEnable(GL_SCISSOR_TEST); glScissor(0, 0, window_size_x, window_size_y - y4 + loudness_height); glDisable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); glColor3d(1, 0, 0); glVertex2i(x2, y1); glVertex2i(x4, y1); glColor3d(1, 1, 0); glVertex2i(x4, y2); glVertex2i(x2, y2); glVertex2i(x1, y2); glVertex2i(x3, y2); glColor3d(0, 1, 0); glVertex2i(x3, y3); glVertex2i(x1, y3); draw_rectangle(x2, x4, y3, y4); glEnd(); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, corner_texture); glEnable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); glColor3d(1, 0, 0); glTexCoord2i(0, 0); glVertex2i(x1, y1); glTexCoord2i(32, 0); glVertex2i(x2, y1); glColor3d(1, 1, 0); glTexCoord2i(32, 32); glVertex2i(x2, y2); glTexCoord2i(0, 32); glVertex2i(x1, y2); glColor3d(0, 1, 0); glTexCoord2i(0, 32); glVertex2i(x1, y3); glTexCoord2i(32, 32); glVertex2i(x2, y3); glTexCoord2i(32, 0); glVertex2i(x2, y4); glTexCoord2i(0, 0); glVertex2i(x1, y4); glEnd(); glDisable(GL_SCISSOR_TEST); } // 4. Draw opaque right side in the player's own color glDisable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); glColor3dv(color1); glVertex2i(x4, y1); glVertex2i(x5, y1); glColor3dv(color2); glVertex2i(x5, y2); glVertex2i(x4, y2); glColor3dv(color2); glVertex2i(x3, y2); glVertex2i(x6, y2); glColor3dv(color3); glVertex2i(x6, y3); glVertex2i(x3, y3); glVertex2i(x4, y3); glVertex2i(x5, y3); glColor3dv(color4); glVertex2i(x5, y4); glVertex2i(x4, y4); glEnd(); glEnable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); glColor3dv(color1); glTexCoord2i(0, 0); glVertex2i(x3, y1); glTexCoord2i(32, 0); glVertex2i(x4, y1); glColor3dv(color2); glTexCoord2i(32, 32); glVertex2i(x4, y2); glTexCoord2i(0, 32); glVertex2i(x3, y2); glColor3dv(color1); glTexCoord2i(32, 0); glVertex2i(x5, y1); glTexCoord2i(0, 0); glVertex2i(x6, y1); glColor3dv(color2); glTexCoord2i(0, 32); glVertex2i(x6, y2); glTexCoord2i(32, 32); glVertex2i(x5, y2); glColor3dv(color3); glTexCoord2i(0, 32); glVertex2i(x3, y3); glTexCoord2i(32, 32); glVertex2i(x4, y3); glColor3dv(color4); glTexCoord2i(32, 0); glVertex2i(x4, y4); glTexCoord2i(0, 0); glVertex2i(x3, y4); glColor3dv(color3); glTexCoord2i(32, 32); glVertex2i(x5, y3); glTexCoord2i(0, 32); glVertex2i(x6, y3); glColor3dv(color4); glTexCoord2i(0, 0); glVertex2i(x6, y4); glTexCoord2i(32, 0); glVertex2i(x5, y4); glEnd(); // 5. Draw score text glPushMatrix(); glTranslated(x5, y3, 0); glColor3d(1, 1, 1); font_draw_number(1000. * players[player_index].score / max_score); glPopMatrix(); } void song_draw(void) { int position; { GstFormat format = GST_FORMAT_TIME; gint64 position64; gst_element_query_position(audio_pipeline, &format, &position64); position = position64 / 1000000; } while(bpm * (position - gap) / 60000 > last_position) { if(!current_note) { current_note = notes; } if(current_note->tone == NOTE_END) { break; } int i; for(i = 0; i < player_count; i++) { struct player *player = players + i; int tone = current_note->tone > NOTE_EMPTY ? record_get_tone(players[i].recorder, players[i].record_channel) : -1; if(tone >= 0) { tone = (tone - current_note->tone + 3078) % 12 - 6; if(abs(tone) <= difficulty) { player->score++; tone = 0; } tone += current_note->tone; } else { tone = CAPTURED_NOTE_EMPTY; } if(last_position > current_note->start && player->captured_notes[player->captured_notes_offset - 1].tone == tone) { player->captured_notes[player->captured_notes_offset].start++; struct captured_note *note = player->captured_notes + player->captured_notes_offset - 1; int length = note[1].start - note->start; if(length >= current_note[1].start - current_note->start && note->status == CAPTURED_NOTE_CORRECT) { note->status = CAPTURED_NOTE_PERFECT; } } else { if(player->captured_notes_offset >= player->captured_notes_allocated - 1) { player->captured_notes_allocated *= 2; player->captured_notes = g_realloc(player->captured_notes, player->captured_notes_allocated * sizeof(struct captured_note)); } struct captured_note *note = player->captured_notes + player->captured_notes_offset; note->tone = tone; note->status = tone == current_note->tone ? CAPTURED_NOTE_CORRECT : CAPTURED_NOTE_INCORRECT; player->captured_notes_offset++; note++; note->start = player->captured_notes[player->captured_notes_offset - 1].start + 1; note->tone = CAPTURED_NOTE_END; } } last_position++; if(last_position >= current_note[1].start) { current_note++; if(current_note->tone == NOTE_LINE) { int i; for(i = 0; i < player_count; i++) { struct player *player = players + i; player->captured_notes_offset = 0; player->captured_notes->start = 0; player->captured_notes->tone = CAPTURED_NOTE_END; } line_first_note = current_note + 1; line_pos_x = next_line_pos_x; prepare_line(); last_position = current_note[1].start; } else if(current_note->tone == NOTE_END && score_file_name) { save_scores(); } } } { int padding_x = 0; int padding_y = 0; if(backdrop.size_x * window_size_y > backdrop.size_y * window_size_x) { padding_x = (backdrop.size_x - backdrop.size_y * window_size_x / window_size_y) / 2; } else { padding_y = (backdrop.size_y - backdrop.size_x * window_size_y / window_size_x) / 2; } glBindTexture(GL_TEXTURE_RECTANGLE_ARB, backdrop.texture); glBegin(GL_QUADS); glTexCoord2i(padding_x, padding_y); glVertex2i(0, 0); glTexCoord2i(backdrop.size_x - padding_x, padding_y); glVertex2i(window_size_x, 0); glTexCoord2i(backdrop.size_x - padding_x, backdrop.size_y - padding_y); glVertex2i(window_size_x, window_size_y); glTexCoord2i(padding_x, backdrop.size_y - padding_y); glVertex2i(0, window_size_y); } glEnd(); glEnable(GL_BLEND); int i; int margin = SCALE(1); int pos_x_max = (window_size_x - 2 * margin) * (bpm * (position - gap) / 60000 - line_first_note->start) / line_length + margin; for(i = 0; i < player_count; i++) { int player_pos_y = i * lyrics_box_pos_y / player_count + margin; glColor3d(1, 1, 1); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, note_glow_texture); glBlendFunc(GL_ONE, GL_ONE); glBegin(GL_QUADS); draw_note_glow(i); glEnd(); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, note_texture); glBegin(GL_QUADS); draw_notes(i); glEnd(); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, captured_note_textures[i]); glBegin(GL_QUADS); draw_captured_notes(i, pos_x_max); glEnd(); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, perfect_note_texture); draw_perfect_notes(i, position); draw_score_box(i, player_pos_y); } if(current_note && current_note->tone == NOTE_END) { int fade_time = position - 60000 * current_note->start / bpm - gap; if(fade_time < 1500) { glColor4d(1, 1, 1, .75 - .75 * fade_time / 1500); draw_rounded_rectangle(margin, window_size_x - margin, lyrics_box_pos_y + margin, window_size_y - margin, SCALE(.75)); } glColor3d(1, 1, 1); glDisable(GL_BLEND); return; } glColor4d(1, 1, 1, .75); draw_rounded_rectangle(margin, window_size_x - margin, lyrics_box_pos_y + margin, window_size_y - margin, SCALE(.75)); glColor3d(0, 0, 0); glPushMatrix(); glTranslated(window_size_x / 2 - line_pos_x, line_pos_y, 0); { int colored = 0; int i = line_first_note->lyrics_index; struct font_character *character = lyrics + i; while(character < next_line_lyrics_end) { if(colored) { if(i >= current_note[1].lyrics_index) { colored = 0; glColor3i(0, 0, 0); } } else if(current_note && i == current_note->lyrics_index && current_note->tone > NOTE_EMPTY) { colored = 1; glColor3d(1, 0, 0); } if(character == line_lyrics_end) { glPopMatrix(); glPushMatrix(); glTranslated(window_size_x / 2 - next_line_pos_x, next_line_pos_y, 0); glColor4d(0, 0, 0, .5); } font_draw_char(character); i++; character++; } } glPopMatrix(); if(!current_note || current_note->tone == NOTE_LINE) { int end; int start; if(current_note) { end = 60000 * current_note->start / bpm + gap; start = current_note[1].start; } else { end = 0; start = notes->start; } start = 60000 * start / bpm + gap; if(start - 1000 > end) { if(position < start - 4000) { // Early, display square glDisable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); if(start - position < 4250) { glColor4d(1, 0, 0, (start - position - 4000) / 250.0); } else { glColor3d(1, 0, 0); } int pos_x = window_size_x / 2 - line_pos_x - font_size / 5; glVertex2i(pos_x - font_ascender, line_pos_y - font_ascender); glVertex2i(pos_x, line_pos_y - font_ascender); glVertex2i(pos_x, line_pos_y); glVertex2i(pos_x - font_ascender, line_pos_y); glEnd(); glEnable(GL_TEXTURE_RECTANGLE_ARB); } else { // Late, display progress bar if(end < start - 4000) { end = start - 4000; } // The time left to the next note relates to the distance between the left edge of the progress bar and the left of the first character of the text, not width of the progress bar. Therefore the distance between the right edge of the progress bar and the text, which is (font_size / 10), is substracted from the progress bar width. int width = window_size_x * (start - position) / 20000 - font_size / 10; if(width > 0) { int pos_x = window_size_x / 2 - line_pos_x - font_size / 10; glBindTexture(GL_TEXTURE_RECTANGLE_ARB, captured_note_textures[0]); glBegin(GL_QUADS); glColor4d(1, 1, 1, (position - end) / 1000.); glTexCoord2i(32, 0); glVertex2i(pos_x - width, line_pos_y - font_ascender); glVertex2i(pos_x, line_pos_y - font_ascender); glTexCoord2i(32, 64); glVertex2i(pos_x, line_pos_y); glVertex2i(pos_x - width, line_pos_y); glEnd(); } } } } glColor3d(1, 1, 1); glDisable(GL_BLEND); } sinatra-1.0/src/Makefile.in0000644000175000017500000003425210753313367012606 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of Sinatra. # Copyright 2008 Fredrik Portstrom # # Sinatra is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sinatra is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sinatra. If not, see . VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = sinatra$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_sinatra_OBJECTS = draw.$(OBJEXT) font.$(OBJEXT) main.$(OBJEXT) \ messagebox.$(OBJEXT) playerconfscreen.$(OBJEXT) \ record.$(OBJEXT) song.$(OBJEXT) songselect.$(OBJEXT) \ texture.$(OBJEXT) titlescreen.$(OBJEXT) sinatra_OBJECTS = $(am_sinatra_OBJECTS) sinatra_LDADD = $(LDADD) sinatra_DEPENDENCIES = DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(sinatra_SOURCES) DIST_SOURCES = $(sinatra_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ freetype2_CFLAGS = @freetype2_CFLAGS@ freetype2_LIBS = @freetype2_LIBS@ gstreamer_CFLAGS = @gstreamer_CFLAGS@ gstreamer_LIBS = @gstreamer_LIBS@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl_CFLAGS = @sdl_CFLAGS@ sdl_LIBS = @sdl_LIBS@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ sinatra_SOURCES = \ draw.c \ draw.h \ font.c \ font.h \ globals.h \ main.c \ main.h \ messagebox.c \ messagebox.h \ playerconfscreen.c \ playerconfscreen.h \ record.c \ record.h \ song.c \ song.h \ songselect.c \ songselect.h \ texture.c \ texture.h \ titlescreen.c \ titlescreen.h AM_CPPFLAGS = -Wall -Wno-parentheses @CPPFLAGS@ all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) sinatra$(EXEEXT): $(sinatra_OBJECTS) $(sinatra_DEPENDENCIES) @rm -f sinatra$(EXEEXT) $(LINK) $(sinatra_OBJECTS) $(sinatra_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/draw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/font.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/messagebox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/playerconfscreen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/record.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/song.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/songselect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texture.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/titlescreen.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-binPROGRAMS install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: sinatra-1.0/src/messagebox.c0000644000175000017500000000333710752645371013044 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #include #include "SDL.h" #include "SDL_opengl.h" #include "draw.h" #include "font.h" #include "globals.h" #include "messagebox.h" static char *message; static unsigned animation_time; void messagebox_display(char *message1) { if(messagebox_visible) { g_free(message); } animation_time = SDL_GetTicks(); message = message1; messagebox_visible = 1; } void messagebox_unload(void) { g_free(message); messagebox_visible = 0; } void messagebox_draw(void) { double margin = .02 * (window_size_x + window_size_y); int line_count = font_get_line_count(message, window_size_x / 2 - 2 * (int)margin); glEnable(GL_BLEND); glColor4d(1, 1, 1, .75); draw_popup_box(window_size_x / 2, line_count * font_height + 2 * (int)margin, animation_time); glColor3d(1, 1, 1); glPushMatrix(); glTranslated((int)(window_size_x / 4 + margin), (window_size_y - (line_count - 1) * font_height + font_ascender) / 2, 0); font_draw_utf8_wrap(message, window_size_x / 2 - 2 * (int)margin); glPopMatrix(); glDisable(GL_BLEND); } sinatra-1.0/src/playerconfscreen.c0000644000175000017500000004213410755617741014252 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #include #include #include #include "SDL.h" #include "SDL_opengl.h" #include "draw.h" #include "font.h" #include "main.h" #include "messagebox.h" #include "globals.h" #include "playerconfscreen.h" #include "record.h" #include "texture.h" #include "titlescreen.h" struct device { const char *code; char *name; int channel1_player; int channel2_player; }; static int device_count; static int selected_device_index; static struct device *devices; static int *players[4]; static int animation_direction; static unsigned animation_time; static GLuint select_box_texture = 0; static struct recorder *recorder = NULL; static unsigned popup_animation_time; static int popup_channel_animation_times[2]; static int popup_channel_animation_directions[2]; static int popup_channel_players[2]; static int popup_selected_channel; static int popup_selected_channel_animation_time; static const double player_colors[][3] = { { 1, 0, 0 }, { 0, 0, 1 }, { 0, 1, 0 }, { 1, .75, 0 }}; int playerconfscreen_show(void) { int i; for(i = 0; i < MAX_PLAYER_COUNT; i++) { players[i] = NULL; } devices = NULL; GstElement *element = gst_element_factory_make("alsasrc", NULL); if(!element) { messagebox_display(g_strdup("Failed to create alsa source element")); return 1; } GValueArray *values = gst_property_probe_probe_and_get_values_name(GST_PROPERTY_PROBE(element), "device"); if(!values) { g_object_unref(element); messagebox_display(g_strdup("Failed to get list of sound devices")); return 1; } device_count = values->n_values; if(!device_count) { g_object_unref(element); messagebox_display(g_strdup("No sound devices were found")); return 1; } devices = g_malloc(device_count * sizeof(struct device)); for(i = 0; i < device_count; i++) { devices[i].code = g_strdup(g_value_get_string(g_value_array_get_nth(values, i))); devices[i].channel1_player = -1; devices[i].channel2_player = -1; g_object_set(element, "device", devices[i].code, NULL); g_object_get(element, "device-name", &devices[i].name, NULL); int j; for(j = 0; j < MAX_PLAYER_COUNT && record_devices[j].code; j++) { if(!strcmp(record_devices[j].code, devices[i].code)) { if(record_devices[j].channel1_player >= 0) { devices[i].channel1_player = record_devices[j].channel1_player; players[devices[i].channel1_player] = &devices[i].channel1_player; } if(record_devices[j].channel2_player >= 0) { devices[i].channel2_player = record_devices[j].channel2_player; players[devices[i].channel2_player] = &devices[i].channel2_player; } break; } } } g_value_array_free(values); g_object_unref(element); selected_device_index = 0; if(!select_box_texture) { select_box_texture = texture_load_simple("select_box.png"); } return 0; } static void change_device_player(int *slot, int player) { player--; if(*slot >= 0) { players[*slot] = NULL; } *slot = player; if(player < 0) { return; } if(players[player]) { *players[player] = -1; } players[player] = slot; } void playerconfscreen_handle_key_press(SDL_keysym *key) { if(recorder) { if(key->sym == SDLK_LEFT || key->sym == SDLK_RIGHT) { popup_selected_channel ^= 1; popup_selected_channel_animation_time = SDL_GetTicks(); if(popup_channel_players[0] == popup_channel_players[1]) { popup_channel_animation_directions[popup_selected_channel] = -popup_channel_players[popup_selected_channel]; popup_channel_animation_times[popup_selected_channel] = SDL_GetTicks(); popup_channel_players[popup_selected_channel] = 0; } } else if(key->sym == SDLK_UP) { popup_channel_animation_times[popup_selected_channel] = SDL_GetTicks(); if(popup_channel_players[popup_selected_channel]) { popup_channel_animation_directions[popup_selected_channel] = -1; popup_channel_players[popup_selected_channel]--; } else { popup_channel_animation_directions[popup_selected_channel] = MAX_PLAYER_COUNT; popup_channel_players[popup_selected_channel] = MAX_PLAYER_COUNT; } } else if(key->sym == SDLK_DOWN) { popup_channel_animation_times[popup_selected_channel] = SDL_GetTicks(); if(popup_channel_players[popup_selected_channel] < MAX_PLAYER_COUNT) { popup_channel_animation_directions[popup_selected_channel] = 1; popup_channel_players[popup_selected_channel]++; } else { popup_channel_animation_directions[popup_selected_channel] = -MAX_PLAYER_COUNT; popup_channel_players[popup_selected_channel] = 0; } } else if(key->sym == SDLK_ESCAPE || key->sym == SDLK_RETURN) { record_stop(recorder); recorder = NULL; if(popup_channel_players[0] == popup_channel_players[1]) { popup_channel_players[!popup_selected_channel] = 0; } change_device_player(&devices[selected_device_index].channel1_player, popup_channel_players[0]); change_device_player(&devices[selected_device_index].channel2_player, popup_channel_players[1]); } } else if(key->sym == SDLK_ESCAPE) { player_count = 0; int i; for(i = 0; i < MAX_PLAYER_COUNT; i++) { record_devices[i].code = NULL; if(players[i]) { *players[i] = player_count; player_count++; } } for(i = 0; i < device_count; i++) { g_free(devices[i].name); if((devices[i].channel1_player >= 0) + (devices[i].channel2_player >= 0)) { record_devices[devices[i].channel1_player].code = devices[i].code; record_devices[devices[i].channel1_player].channel1_player = devices[i].channel1_player; record_devices[devices[i].channel1_player].channel2_player = devices[i].channel2_player; } } g_free(devices); if(player_count) { int j = 0; for(i = 0; i < MAX_PLAYER_COUNT; i++) { if(record_devices[i].code) { record_devices[j].code = record_devices[i].code; record_devices[j].channel1_player = record_devices[i].channel1_player; record_devices[j].channel2_player = record_devices[i].channel2_player; j++; } } record_devices[j].code = NULL; } else { player_count = 1; } current_screen = SCREEN_TITLE; titlescreen_show(); } else if(key->sym == SDLK_DOWN) { if(selected_device_index < device_count - 1) { animation_direction = 1; animation_time = SDL_GetTicks(); selected_device_index++; } } else if(key->sym == SDLK_UP) { if(selected_device_index) { animation_direction = -1; animation_time = SDL_GetTicks(); selected_device_index--; } } else if(key->sym == SDLK_HOME) { animation_direction = -selected_device_index; animation_time = SDL_GetTicks(); selected_device_index = 0; } else if(key->sym == SDLK_END) { animation_direction = device_count - selected_device_index - 1; animation_time = SDL_GetTicks(); selected_device_index = device_count - 1; } else if(key->sym == SDLK_RETURN) { recorder = record_start(2, devices[selected_device_index].code); popup_animation_time = SDL_GetTicks(); popup_channel_animation_times[0] = 0; popup_channel_animation_times[1] = 0; popup_channel_players[0] = devices[selected_device_index].channel1_player + 1; popup_channel_players[1] = devices[selected_device_index].channel2_player + 1; popup_selected_channel = 0; popup_selected_channel_animation_time = 0; } } static void draw_select_box(int x2, int x3, int y2, int y3, int border_width) { int x1 = x2 - border_width; int x4 = x3 + border_width; int y1 = y2 - border_width; int y4 = y3 + border_width; glBindTexture(GL_TEXTURE_RECTANGLE_ARB, select_box_texture); glBegin(GL_QUADS); // Draw top left corner glTexCoord2i(0, 0); glVertex2i(x1, y1); glTexCoord2i(32, 0); glVertex2i(x2, y1); glTexCoord2i(32, 32); glVertex2i(x2, y2); glTexCoord2i(0, 32); glVertex2i(x1, y2); // Draw top right corner glTexCoord2i(32, 0); glVertex2i(x3, y1); glTexCoord2i(0, 0); glVertex2i(x4, y1); glTexCoord2i(0, 32); glVertex2i(x4, y2); glTexCoord2i(32, 32); glVertex2i(x3, y2); // Draw bottom left corner glTexCoord2i(0, 32); glVertex2i(x1, y3); glTexCoord2i(32, 32); glVertex2i(x2, y3); glTexCoord2i(32, 0); glVertex2i(x2, y4); glTexCoord2i(0, 0); glVertex2i(x1, y4); // Draw bottom right corner glTexCoord2i(32, 32); glVertex2i(x3, y3); glTexCoord2i(0, 32); glVertex2i(x4, y3); glTexCoord2i(0, 0); glVertex2i(x4, y4); glTexCoord2i(32, 0); glVertex2i(x3, y4); // Draw top border glTexCoord2i(33, 0); glVertex2i(x2, y1); glVertex2i(x3, y1); glTexCoord2i(33, 32); glVertex2i(x3, y2); glVertex2i(x2, y2); // Draw left border glTexCoord2i(0, 32); glVertex2i(x1, y3); glVertex2i(x1, y2); glTexCoord2i(32, 32); glVertex2i(x2, y2); glVertex2i(x2, y3); // Draw center glTexCoord2i(33, 32); glVertex2i(x2, y2); glVertex2i(x3, y2); glTexCoord2i(33, 128); glVertex2i(x3, y3); glVertex2i(x2, y3); // Draw right border glTexCoord2i(32, 32); glVertex2i(x3, y3); glVertex2i(x3, y2); glTexCoord2i(0, 32); glVertex2i(x4, y2); glVertex2i(x4, y3); // Draw bottom border glTexCoord2i(33, 32); glVertex2i(x2, y3); glVertex2i(x3, y3); glTexCoord2i(33, 0); glVertex2i(x3, y4); glVertex2i(x2, y4); glEnd(); } static void draw_popup() { int spacing1 = SCALE(.25); int spacing2 = SCALE(.75); int spacing3 = SCALE(1); int button_size = SCALE(1.5); int border_width = SCALE(1. / 12); int separator_width = SCALE(1. / 20); if(border_width < 1) { border_width = 1; } if(separator_width < 1) { separator_width = 1; } int center_x = (window_size_x - separator_width) / 2; int select_x4 = center_x - spacing2; int select_x3 = select_x4 - spacing1; int select_x2 = select_x3 - button_size; int select_x1 = select_x2 - spacing1; int bar_x2 = select_x1 - spacing2; int bar_x1 = bar_x2 - button_size; int height = (MAX_PLAYER_COUNT + 1) * (button_size + spacing1) + spacing1; int y1 = (window_size_y - height) / 2; int y2 = y1 + height; int select_distance = center_x + separator_width + spacing2 - select_x1; int channel = 0; draw_popup_box(window_size_x - 2 * (bar_x1 - spacing3), window_size_y - 2 * (y1 - spacing3), popup_animation_time); for(;;) { glDisable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); glColor3d(.5, .5, .5); draw_rectangle(center_x, center_x + separator_width, y1, y2); glEnd(); glBegin(GL_QUADS); glColor3d(.2, .2, .2); draw_rectangle(select_x1, select_x4, y1, y2); { int bar_height = height * record_get_loudness(recorder, 0); int bar_y1 = y2 - bar_height; double color = (double)bar_height / height; if(bar_height > spacing3) { bar_height = spacing3; } int bar_y2 = y2 + bar_height; glColor3d(color, 1, 0); glVertex2i(bar_x1, bar_y1); glVertex2i(bar_x2, bar_y1); glColor3d(0, 1, 0); glVertex2i(bar_x2, y2); glVertex2i(bar_x1, y2); glColor3d(0, .2, 0); glVertex2i(bar_x1, y2); glVertex2i(bar_x2, y2); glColor3d(color / 5, color / 5, 0); glVertex2i(bar_x2, bar_y2); glVertex2i(bar_x1, bar_y2); } glEnd(); { int button_y1 = y1 + spacing1; int button_y2 = button_y1 + button_size; int i; glBegin(GL_TRIANGLE_STRIP); // The vertex ordering of quads differs on different machines. Use triangle strips. glColor3d(.5, .5, .5); glVertex2i(select_x2, button_y1); glColor3d(.25, .25, .25); glVertex2i(select_x3, button_y1); glVertex2i(select_x2, button_y2); glColor3d(.2, .2, .2); glVertex2i(select_x3, button_y2); glEnd(); for(i = 0; i < MAX_PLAYER_COUNT; i++) { const double *color = player_colors[i]; button_y1 = button_y2 + spacing1; button_y2 = button_y1 + button_size; glBegin(GL_TRIANGLE_STRIP); // The vertex ordering of quads differs on different machines. Use triangle strips. glColor3dv(color); glVertex2i(select_x2, button_y1); glColor3d(.7 * color[0], .7 * color[1], .7 * color[2]); glVertex2i(select_x3, button_y1); glVertex2i(select_x2, button_y2); glColor3d(.4 * color[0], .4 * color[1], .4 * color[2]); glVertex2i(select_x3, button_y2); glEnd(); } button_y1 = y1 + spacing1; const int max_ticks = 100; int ticks = popup_channel_animation_times[channel] ? SDL_GetTicks() - popup_channel_animation_times[channel] - max_ticks : 0; if(ticks < 0) { button_y1 += (popup_channel_players[channel] - popup_channel_animation_directions[channel] / (1 + exp(12. * ticks / max_ticks + 6))) * (button_size + spacing1); } else { button_y1 += popup_channel_players[channel] * (button_size + spacing1); } button_y2 = button_y1 + button_size; int border_x1 = select_x2 - border_width; int border_x2 = select_x3 + border_width; int border_y1 = button_y1 - border_width; int border_y2 = button_y2 + border_width; glBegin(GL_QUADS); glColor3d(1, 1, 1); draw_rectangle(border_x1, border_x2, border_y1, button_y1); // Draw top draw_rectangle(border_x1, select_x2, button_y1, button_y2); // Draw left draw_rectangle(select_x3, border_x2, button_y1, button_y2); // Draw right draw_rectangle(border_x1, border_x2, button_y2, border_y2); // Draw bottom glEnd(); } if(channel) { break; } channel++; select_x1 += select_distance; select_x2 += select_distance; select_x3 += select_distance; select_x4 += select_distance; bar_x1 = select_x4 + spacing2; bar_x2 = bar_x1 + button_size; } glColor3d(1, 1, 1); glEnable(GL_TEXTURE_RECTANGLE_ARB); const int max_ticks = 100; int ticks = popup_selected_channel_animation_time ? SDL_GetTicks() - popup_selected_channel_animation_time - max_ticks : 0; if(ticks < 0) { select_x1 += (popup_selected_channel - 1 + (popup_selected_channel ? -1 : 1) * 1 / (1 + exp(12. * ticks / max_ticks + 6))) * select_distance; } else { select_x1 += (popup_selected_channel - 1) * select_distance; } draw_select_box(select_x1, select_x1 + 2 * spacing1 + button_size, y1, y2, SCALE(.5)); } void playerconfscreen_draw(void) { glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_BLEND); int i; int padding = SCALE(1. / 3); int x1 = SCALE(1); int x2 = x1 + padding; int x3 = x2 + font_ascender; int x4 = x3 + padding; int x5 = x4 + font_ascender; int x6 = x5 + padding; int x7 = window_size_x - SCALE(1); for(i = 0; i < device_count; i++) { int y1 = i * (3 * padding + font_ascender) + x1; int y2 = y1 + padding; int y4 = y1 + 2 * padding + font_ascender; int y3 = y4 - padding; glDisable(GL_TEXTURE_RECTANGLE_ARB); glColor4d(.5, .5, .5, .2); glBegin(GL_QUADS); draw_rectangle(x1, x7, y1, y4); glEnd(); if(devices[i].channel1_player >= 0) { const double *color = player_colors[devices[i].channel1_player]; glBegin(GL_TRIANGLE_STRIP); // The vertex ordering of quads differs on different machines. Use triangle strips. glColor3dv(color); glVertex2i(x2, y2); glColor3d(.7 * color[0], .7 * color[1], .7 * color[2]); glVertex2i(x3, y2); glVertex2i(x2, y3); glColor3d(.4 * color[0], .4 * color[1], .4 * color[2]); glVertex2i(x3, y3); glEnd(); } if(devices[i].channel2_player >= 0) { const double *color = player_colors[devices[i].channel2_player]; glBegin(GL_TRIANGLE_STRIP); // The vertex ordering of quads differs on different machines. Use triangle strips. glColor3dv(color); glVertex2i(x4, y2); glColor3d(.7 * color[0], .7 * color[1], .7 * color[2]); glVertex2i(x5, y2); glVertex2i(x4, y3); glColor3d(.4 * color[0], .4 * color[1], .4 * color[2]); glVertex2i(x5, y3); glEnd(); } glEnable(GL_TEXTURE_RECTANGLE_ARB); glColor3d(1, 1, 1); glPushMatrix(); glTranslated(x6, y3, 0); font_draw_utf8(devices[i].name); glPopMatrix(); } const int max_ticks = 100; int ticks = SDL_GetTicks() - animation_time - max_ticks; int y; if(ticks < 0) { y = (selected_device_index - animation_direction / (1 + exp(12. * ticks / max_ticks + 6))) * (3 * padding + font_ascender) + x1; } else { y = selected_device_index * (3 * padding + font_ascender) + x1; } draw_select_box(x1, x7, y, y + 2 * padding + font_ascender, padding); if(recorder) { draw_popup(); } glDisable(GL_BLEND); } sinatra-1.0/src/titlescreen.c0000644000175000017500000001471010755620600013214 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #include #include #include "SDL.h" #include "SDL_opengl.h" #include "font.h" #include "globals.h" #include "main.h" #include "titlescreen.h" #define TEXT_SCALE .5 #define LARGE_TEXT_SCALE (2. / 3) #define FIRST_LINE_SCALE (2. / 3) #define SECOND_LINE_SCALE .5 static const char first_line_part1[] = "Press "; static const char first_line_part2[] = "return "; static const char first_line_part3[] = "to start"; static const char second_line_part1[] = "Press "; static const char second_line_part2[] = "P "; static const char second_line_part3[] = "for multiplayer configuration."; static const char third_line_part1[] = "Sinatra is free software. Press "; static const char third_line_part2[] = "A "; static const char third_line_part3[] = "for more information."; static int animation_time; static int first_line_pos_x; static int second_line_pos_x; static int third_line_pos_x; void aboutscreen_show(void) { int ticks = SDL_GetTicks() - animation_time; if(ticks > 0) { ticks = 0; } animation_time = SDL_GetTicks() + ticks; } void aboutscreen_hide(void) { int ticks = animation_time - SDL_GetTicks(); if(ticks < -1000) { ticks = -1000; } animation_time = SDL_GetTicks() - ticks; titlescreen_resize(); } void titlescreen_show(void) { animation_time = SDL_GetTicks(); titlescreen_resize(); } void titlescreen_resize(void) { first_line_pos_x = (window_size_x - FIRST_LINE_SCALE * (font_get_utf8_width(first_line_part1) + font_get_utf8_width(first_line_part2) + font_get_utf8_width(first_line_part3))) / 2; second_line_pos_x = (window_size_x - SECOND_LINE_SCALE * (font_get_utf8_width(second_line_part1) + font_get_utf8_width(second_line_part2) + font_get_utf8_width(second_line_part3))) / 2; third_line_pos_x = (window_size_x - SECOND_LINE_SCALE * (font_get_utf8_width(third_line_part1) + font_get_utf8_width(third_line_part2) + font_get_utf8_width(third_line_part3))) / 2; } void titlescreen_draw(void) { int ticks = SDL_GetTicks() - animation_time; if(current_screen == SCREEN_ABOUT) { ticks = -ticks; } int backdrop_offset = 0; if(ticks <= -1000) { backdrop_offset = window_size_y / 12;; ticks = -1000; } else if(ticks < 0) { backdrop_offset = window_size_y / (1 + exp(12 * ticks / 1000. + 6)) / 12; } glClear(GL_COLOR_BUFFER_BIT); { int padding_x = 0; int padding_y = 0; if(window_size_x * default_backdrop.size_y > window_size_y * default_backdrop.size_x) { padding_x = (window_size_x - window_size_y * default_backdrop.size_x / default_backdrop.size_y) / 2; } else { padding_y = (window_size_y - window_size_x * default_backdrop.size_y / default_backdrop.size_x) / 2; } glBindTexture(GL_TEXTURE_RECTANGLE_ARB, default_backdrop.texture); glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex2i(padding_x, padding_y - backdrop_offset); glTexCoord2i(default_backdrop.size_x, 0); glVertex2i(window_size_x - padding_x, padding_y - backdrop_offset); glTexCoord2i(default_backdrop.size_x, default_backdrop.size_y); glVertex2i(window_size_x - padding_x, window_size_y - padding_y - backdrop_offset); glTexCoord2i(0, default_backdrop.size_y); glVertex2i(padding_x, window_size_y - padding_y - backdrop_offset); glEnd(); } if(ticks < 0) { glColor4d(1, 1, 1, -ticks / 1000.); glEnable(GL_BLEND); glPushMatrix(); glTranslated(.2 * window_size_x, .6 * window_size_y, 0); glScaled(TEXT_SCALE, TEXT_SCALE, 0); glPushMatrix(); font_draw_utf8(PACKAGE_STRING); glPopMatrix(); glTranslated(0, 1.5 * font_height, 0); font_draw_utf8_wrap(PACKAGE_NAME " is free software distributed under the GNU General Public License, version 3 or later. You are welcome to use " PACKAGE_NAME " for any purpose, modify it, distribute it in it's original form, and distribute your modified versions.", .6 * window_size_x / TEXT_SCALE); glTranslated(0, 1.5 * font_height, 0); font_draw_utf8_wrap("You can read more about " PACKAGE_NAME " at our website:", .6 * window_size_x / TEXT_SCALE); glTranslated(0, LARGE_TEXT_SCALE / TEXT_SCALE * font_height, 0); glScaled(LARGE_TEXT_SCALE / TEXT_SCALE, LARGE_TEXT_SCALE / TEXT_SCALE, 0); glColor4d(.6, .75, 1, -ticks / 1000.); font_draw_utf8("http://sinatra.nu"); glPopMatrix(); glDisable(GL_BLEND); glColor3d(1, 1, 1); } else if(title_screen_text) { double alpha; if(ticks < 2000) { alpha = ticks / 2000.; } else { alpha = .15 * cos(M_PI * (ticks - 2000) / 1500) + .85; } glEnable(GL_BLEND); glPushMatrix(); glTranslated(first_line_pos_x, .8 * window_size_y, 0); glScaled(FIRST_LINE_SCALE, FIRST_LINE_SCALE, 1); glColor4d(1, 1, 1, .5 * alpha); font_draw_utf8(first_line_part1); glColor4d(1, 1, 1, alpha); font_draw_utf8(first_line_part2); glColor4d(1, 1, 1, .5 * alpha); font_draw_utf8(first_line_part3); glPopMatrix(); glPushMatrix(); glTranslated(second_line_pos_x, .85 * window_size_y, 0); glScaled(SECOND_LINE_SCALE, SECOND_LINE_SCALE, 1); font_draw_utf8(second_line_part1); glColor4d(1, 1, 1, alpha); font_draw_utf8(second_line_part2); glColor4d(1, 1, 1, .5 * alpha); font_draw_utf8(second_line_part3); glPopMatrix(); glPushMatrix(); glTranslated(third_line_pos_x, .85 * window_size_y + SECOND_LINE_SCALE * font_height, 0); glScaled(SECOND_LINE_SCALE, SECOND_LINE_SCALE, 1); font_draw_utf8(third_line_part1); glColor4d(1, 1, 1, alpha); font_draw_utf8(third_line_part2); glColor4d(1, 1, 1, .5 * alpha); font_draw_utf8(third_line_part3); glPopMatrix(); glDisable(GL_BLEND); glColor3d(1, 1, 1); } } sinatra-1.0/src/font.h0000644000175000017500000000335410752623103011646 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __FONT_H_ #define __FONT_H_ struct font_character { int advance; struct cached_glyph *glyph; }; // These metrics change whenever the window is resized int font_ascender; // Offset in pixels from the base line to the top of the highest character (Positive) int font_descender; // Offset in pixels from the base line to the the bottom of the bottom of the lowest character (Negative) int font_height; // Distance in pixels between lines (Positive) int font_score_text_size_x; int font_score_text_size_y; void font_init(void); void font_resize(void); void font_draw_number(unsigned int number); int font_read_utf8_char(char **text); int font_prepare_char(struct font_character *character, char **text, int previous); void font_update_char(struct font_character *character, int is_first); void font_draw_char(struct font_character *character); int font_get_utf8_width(const char *string); void font_draw_utf8(const char *string); int font_get_line_count(const char *string, int max_width); void font_draw_utf8_wrap(const char *string, int max_width); #endif sinatra-1.0/src/messagebox.h0000644000175000017500000000163010751350024013026 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __MESSAGEBOX_H_ #define __MESSAGEBOX_H_ int messagebox_visible; // g_free will be called on message1 void messagebox_display(char *message1); void messagebox_unload(void); void messagebox_draw(void); #endif sinatra-1.0/src/record.h0000644000175000017500000000176510752657661012202 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __RECORD_H_ #define __RECORD_H_ struct recorder; struct recorder *record_start(int channel_count, const char *device); void record_stop(struct recorder *recorder); double record_get_loudness(struct recorder *recorder, int channel); int record_get_tone(struct recorder *recorder, int channel); #endif sinatra-1.0/src/playerconfscreen.h0000644000175000017500000000157710753135417014256 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __PLAYERCONFSCREEN_H_ #define __PLAYERCONFSCREEN_H_ int playerconfscreen_show(void); void playerconfscreen_handle_key_press(SDL_keysym *key); void playerconfscreen_draw(void); #endif sinatra-1.0/src/draw.c0000644000175000017500000001211310755620353011630 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #include "SDL.h" #include "SDL_opengl.h" #include "draw.h" #include "globals.h" #include "texture.h" static GLuint fade_corner_texture = 0; void draw_rounded_rectangle(int x1, int x4, int y1, int y4, int corner_radius) { int x2 = x1 + corner_radius; int x3 = x4 - corner_radius; int y2 = y1 + corner_radius; int y3 = y4 - corner_radius; glBindTexture(GL_TEXTURE_RECTANGLE_ARB, corner_texture); glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex2i(x1, y1); glTexCoord2i(32, 0); glVertex2i(x2, y1); glTexCoord2i(32, 32); glVertex2i(x2, y2); glTexCoord2i(0, 32); glVertex2i(x1, y2); glTexCoord2i(32, 0); glVertex2i(x3, y1); glTexCoord2i(0, 0); glVertex2i(x4, y1); glTexCoord2i(0, 32); glVertex2i(x4, y2); glTexCoord2i(32, 32); glVertex2i(x3, y2); glTexCoord2i(0, 32); glVertex2i(x1, y3); glTexCoord2i(32, 32); glVertex2i(x2, y3); glTexCoord2i(32, 0); glVertex2i(x2, y4); glTexCoord2i(0, 0); glVertex2i(x1, y4); glTexCoord2i(32, 32); glVertex2i(x3, y3); glTexCoord2i(0, 32); glVertex2i(x4, y3); glTexCoord2i(0, 0); glVertex2i(x4, y4); glTexCoord2i(32, 0); glVertex2i(x3, y4); glDisable(GL_TEXTURE_RECTANGLE_ARB); draw_rectangle(x2, x3, y1, y2); draw_rectangle(x1, x4, y2, y3); draw_rectangle(x2, x3, y3, y4); glEnable(GL_TEXTURE_RECTANGLE_ARB); glEnd(); } void draw_popup_box(int size_x, int size_y, unsigned animation_time) { if(!fade_corner_texture) { fade_corner_texture = texture_load_simple("fade_corner.png"); } double margin = .02 * (window_size_x + window_size_y); int border_width = margin / 20; int shadow_width = margin / 2; if(border_width < 1) { border_width = 1; } int x3 = (window_size_x - size_x) / 2; int x2 = x3 - border_width; int x1 = x2 - shadow_width; int x4 = x3 + size_y; int x5 = window_size_x - x3; int x6 = x5 + border_width; int x7 = x6 + shadow_width; int y3 = (window_size_y - size_y) / 2; int y2 = y3 - border_width; int y1 = y2 - shadow_width; int y4 = window_size_y - y3; int y5 = y4 + border_width; int y6 = y5 + shadow_width; if(x4 > x5) { x4 = x5; } glDisable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); // Make the entire window darker { int ticks = SDL_GetTicks() - animation_time; if(ticks > 500) { ticks = 500; } glColor4d(0, 0, 0, ticks / 1000.); } draw_rectangle(0, window_size_x, 0, window_size_y); glColor3d(.5, .5, .5); draw_rectangle(x2, x6, y2, y3); // Draw top border draw_rectangle(x2, x3, y3, y4); // Draw left border draw_rectangle(x5, x6, y3, y4); // Draw right border draw_rectangle(x2, x6, y4, y5); // Draw bottom border // Draw top border glColor4i(0, 0, 0, 0); glTexCoord2i(33, 0); glVertex2i(x2, y1); glVertex2i(x6, y1); glColor3i(0, 0, 0); glVertex2i(x6, y2); glVertex2i(x2, y2); // Draw center draw_rectangle(x3, x5, y3, y4); // Draw bottom border glVertex2i(x2, y5); glVertex2i(x6, y5); glColor4d(0, 0, 0, 0); glVertex2i(x6, y6); glVertex2i(x2, y6); // Draw left border glVertex2i(x1, y5); glVertex2i(x1, y2); glColor3i(0, 0, 0); glVertex2i(x2, y2); glVertex2i(x2, y5); // Draw right border glVertex2i(x6, y5); glVertex2i(x6, y2); glColor4d(0, 0, 0, 0); glVertex2i(x7, y2); glVertex2i(x7, y5); glEnd(); // Draw fade glBegin(GL_TRIANGLES); glColor3d(.2, .2, .2); glVertex2i(x3, y3); glColor3i(0, 0, 0); glVertex2i(x4, y3); glVertex2i(x3, y4); glEnd(); glEnable(GL_TEXTURE_RECTANGLE_ARB); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, fade_corner_texture); glBegin(GL_QUADS); // Draw top left corner glTexCoord2i(0, 0); glVertex2i(x1, y1); glTexCoord2i(32, 0); glVertex2i(x2, y1); glTexCoord2i(32, 32); glVertex2i(x2, y2); glTexCoord2i(0, 32); glVertex2i(x1, y2); // Draw top right corner glTexCoord2i(32, 0); glVertex2i(x6, y1); glTexCoord2i(0, 0); glVertex2i(x7, y1); glTexCoord2i(0, 32); glVertex2i(x7, y2); glTexCoord2i(32, 32); glVertex2i(x6, y2); // Draw bottom left corner glTexCoord2i(0, 32); glVertex2i(x1, y5); glTexCoord2i(32, 32); glVertex2i(x2, y5); glTexCoord2i(32, 0); glVertex2i(x2, y6); glTexCoord2i(0, 0); glVertex2i(x1, y6); // Draw bottom right corner glTexCoord2i(32, 32); glVertex2i(x6, y5); glTexCoord2i(0, 32); glVertex2i(x7, y5); glTexCoord2i(0, 0); glVertex2i(x7, y6); glTexCoord2i(32, 0); glVertex2i(x6, y6); glEnd(); } sinatra-1.0/src/record.c0000644000175000017500000001325310754106077012160 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #include #include #include "globals.h" #include "record.h" #define DEFAULT_BUFFER_SIZE 4096 #define MIN_VOLUME 6554 struct recorder { int channel_count; int buffer_size; int buffer_offset; short *buffer; GstElement *pipeline; }; static void handoff_callback(GstElement *element, GstBuffer *buffer, GstPad *pad, struct recorder *recorder) { int size = GST_BUFFER_SIZE(buffer); if(size >= recorder->buffer_size) { memmove(recorder->buffer, GST_BUFFER_DATA(buffer) + size - recorder->buffer_size, recorder->buffer_size); } else { int buffer_remaining = 2 * (recorder->buffer_size - recorder->buffer_offset); if(size > buffer_remaining) { memmove(recorder->buffer + recorder->buffer_offset, GST_BUFFER_DATA(buffer), buffer_remaining); memmove(recorder->buffer, GST_BUFFER_DATA(buffer) + buffer_remaining, size - buffer_remaining); recorder->buffer_offset = (size - buffer_remaining) / 2; } else { memmove(recorder->buffer + recorder->buffer_offset, GST_BUFFER_DATA(buffer), size); recorder->buffer_offset = (recorder->buffer_offset + size / 2) % recorder->buffer_size; } } } struct recorder *record_start(int channel_count, const char *device) { struct recorder *recorder = g_malloc(sizeof(struct recorder)); recorder->pipeline = gst_pipeline_new(NULL); /*GstElement *source = gst_element_factory_make("gconfaudiosrc", NULL); if(!source) { source = gst_element_factory_make("alsasrc", NULL); if(!source) { source = gst_element_factory_make("osssrc", NULL); if(!source) { puts("failed to create source element"); exit(0); } } }*/ GstElement *source = gst_element_factory_make("alsasrc", NULL); if(!source) { puts("failed to create source element"); exit(0); } if(device) { g_object_set(source, "device", device, NULL); } GstElement *sink = gst_element_factory_make("fakesink", NULL); if(!sink) { puts("failed to create sink element"); exit(0); } gst_bin_add_many(GST_BIN(recorder->pipeline), source, sink, NULL); g_object_set(G_OBJECT(sink), "signal-handoffs", TRUE, NULL); g_signal_connect(G_OBJECT(sink), "handoff", G_CALLBACK(handoff_callback), recorder); GstCaps *caps = gst_caps_new_simple( "audio/x-raw-int", "channels", G_TYPE_INT, channel_count, "depth", G_TYPE_INT, 16, "rate", G_TYPE_INT, record_sample_rate, "width", G_TYPE_INT, 16, NULL); if(!gst_element_link_filtered(source, sink, caps)) { puts("failed to link source and sink elements together"); exit(0); } gst_caps_unref(caps); gst_element_set_state(recorder->pipeline, GST_STATE_PLAYING); recorder->channel_count = channel_count; recorder->buffer_size = channel_count * DEFAULT_BUFFER_SIZE; recorder->buffer_offset = 0; recorder->buffer = g_malloc0(recorder->buffer_size * sizeof(short)); return recorder; } void record_stop(struct recorder *recorder) { g_free(recorder->buffer); gst_element_set_state(recorder->pipeline, GST_STATE_NULL); g_object_unref(recorder->pipeline); g_free(recorder); } double record_get_loudness(struct recorder *recorder, int channel) { int loudness = 0; while(channel < recorder->buffer_size) { int value = recorder->buffer[channel]; loudness += value < 0 ? -value : value; channel += recorder->channel_count; } return loudness / 32768. / DEFAULT_BUFFER_SIZE; } static double analyze_frequency(struct recorder *recorder, int channel, double frequency) { int value = 0; int period = record_sample_rate / frequency + .5; while(channel + period < recorder->buffer_size) { int local_value = recorder->buffer[(channel + recorder->buffer_offset) % recorder->buffer_size] - recorder->buffer[(channel + period + recorder->buffer_offset) % recorder->buffer_size]; value += local_value < 0 ? -local_value : local_value; channel += recorder->channel_count; } return (double)value / (recorder->buffer_size - period); } static int get_tone_internal(struct recorder *recorder, int channel) { double best_tone_value = 99999999; double frequency = 65.4063913251; // Initialize with the frequency of C2. See http://en.wikipedia.org/wiki/Piano_key_frequencies int best_tone = 0; int tone; // Analyze each halftone // 36 is three octaves for(tone = 0; tone < 36; tone++) { double tone_value = analyze_frequency(recorder, channel, frequency); if(tone_value < best_tone_value) { best_tone = tone; best_tone_value = tone_value; } // Multiply with the twelth root of two, to get the frequency of the next halftone frequency *= 1.05946309436; } return best_tone; } int record_get_tone(struct recorder *recorder, int channel) { int i; for(i = channel; i < recorder->buffer_size; i += recorder->channel_count) { if(recorder->buffer[i] >= MIN_VOLUME) { return get_tone_internal(recorder, channel); } } return -1; } sinatra-1.0/src/font.c0000644000175000017500000003254610753022714011650 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #include #include #include "SDL_opengl.h" #include "font.h" #include "globals.h" #include FT_FREETYPE_H #define CACHED_GLYPHS_BASE_START ' ' #define CACHED_GLYPHS_BASE_COUNT ('~' - CACHED_GLYPHS_BASE_START + 1) struct cached_glyph { FT_UInt index; FT_Int advance; GLuint display_list; GLuint texture; }; struct cached_glyph_extra { int character; struct cached_glyph *cached; }; static FT_Library library; static FT_Face face; static struct cached_glyph cached_glyphs_base[CACHED_GLYPHS_BASE_COUNT]; static struct cached_glyph_extra *cached_glyphs_extra; static void reload_glyph(struct cached_glyph *cached) { if(FT_Load_Glyph(face, cached->index, FT_LOAD_RENDER)) { puts("failed to load glyph"); exit(0); } cached->advance = face->glyph->advance.x >> 6; FT_Bitmap *bitmap = &face->glyph->bitmap; int overflow = bitmap->width % 4; int tex_size_x; unsigned char *pixels; if(overflow) { overflow = 4 - overflow; tex_size_x = bitmap->width + overflow; pixels = g_malloc(tex_size_x * bitmap->rows); unsigned char *dest = pixels + tex_size_x * bitmap->rows; unsigned char *source = bitmap->buffer + bitmap->width * bitmap->rows; while(dest > pixels) { dest -= tex_size_x; source -= bitmap->width; memset(dest, 0, overflow); memmove(dest + overflow, source, bitmap->width); } } else { pixels = bitmap->buffer; tex_size_x = bitmap->width; } glGenTextures(1, &cached->texture); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, cached->texture); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_ALPHA, tex_size_x, bitmap->rows, 0, GL_ALPHA, GL_UNSIGNED_BYTE, pixels); if(overflow) { g_free(pixels); } cached->display_list = glGenLists(1); glNewList(cached->display_list, GL_COMPILE); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, cached->texture); glBegin(GL_QUADS); int pos_x = face->glyph->bitmap_left; int pos_y = -face->glyph->bitmap_top; glTexCoord2i(overflow, 0); glVertex2i(pos_x, pos_y); glTexCoord2i(tex_size_x, 0); glVertex2i(pos_x + bitmap->width, pos_y); glTexCoord2i(tex_size_x, bitmap->rows); glVertex2i(pos_x + bitmap->width, pos_y + bitmap->rows); glTexCoord2i(overflow, bitmap->rows); glVertex2i(pos_x, pos_y + bitmap->rows); glEnd(); glEndList(); } static void load_glyph(struct cached_glyph *cached, FT_UInt character) { cached->index = FT_Get_Char_Index(face, character); reload_glyph(cached); } void font_init(void) { if(FT_Init_FreeType(&library)) { puts("failed to initialize Freetype"); exit(0); } if(FT_New_Face(library, "/usr/share/fonts/truetype/freefont/FreeSans.ttf", 0, &face)) { puts("failed to load font face"); exit(0); } if(!FT_IS_SCALABLE(face)) { // Non scalable fonts require other operations. There's no // reason to use them anyway. puts("font face is not scalable"); exit(0); } if(FT_Set_Pixel_Sizes(face, 0, font_size)) { puts("failed to set font size"); exit(0); } bzero(cached_glyphs_base, sizeof(cached_glyphs_base)); cached_glyphs_extra = g_malloc(sizeof(struct cached_glyph_extra)); cached_glyphs_extra->character = 0; int i; for(i = '0'; i <= '9'; i++) { load_glyph(cached_glyphs_base + i - CACHED_GLYPHS_BASE_START, i); } font_ascender = face->glyph->metrics.horiBearingY >> 6; font_descender = face->size->metrics.descender >> 6; font_height = face->size->metrics.height >> 6; font_score_text_size_x = 4 * cached_glyphs_base['9' - CACHED_GLYPHS_BASE_START].advance - face->glyph->bitmap.width; font_score_text_size_y = face->glyph->bitmap.rows; } void font_resize(void) { if(FT_Set_Pixel_Sizes(face, 0, font_size)) { puts("failed to set font size"); exit(0); } struct cached_glyph *cached = cached_glyphs_base + CACHED_GLYPHS_BASE_COUNT; while(cached > cached_glyphs_base) { cached--; if(cached->display_list) { glDeleteLists(cached->display_list, 1); glDeleteTextures(1, &cached->texture); cached->display_list = 0; } } struct cached_glyph_extra *extra = cached_glyphs_extra; while(extra->character) { if(extra->cached->display_list) { glDeleteLists(extra->cached->display_list, 1); glDeleteTextures(1, &extra->cached->texture); extra->cached->display_list = 0; } extra++; } int i; for(i = '0'; i <= '9'; i++) { load_glyph(cached_glyphs_base + i - CACHED_GLYPHS_BASE_START, i); } font_ascender = face->size->metrics.ascender >> 6; font_descender = face->size->metrics.descender >> 6; font_height = face->size->metrics.height >> 6; font_score_text_size_x = 4 * cached_glyphs_base['9' - CACHED_GLYPHS_BASE_START].advance - face->glyph->bitmap.width; font_score_text_size_y = face->glyph->bitmap.rows; } void font_draw_number(unsigned int number) { for(;;) { struct cached_glyph *cached = cached_glyphs_base + number % 10 + '0' - CACHED_GLYPHS_BASE_START; glTranslated(-cached->advance, 0, 0); glCallList(cached->display_list); number /= 10; if(!number) { break; } } } // Decodes a UTF-8 encoded character from the given string. Modifies // argument to point to the next character. Returns the decoded // character on success. Returns 0 on end of string or error. int font_read_utf8_char(char **text) { if((unsigned char)**text < 0xC0) { return *(*text)++; } if((unsigned char)**text < 0xE0) { if(text[0][1] & 0x80) { *text += 2; return (text[0][-2] & 0x1F) << 6 | text[0][-1] & 0x3F; } return (unsigned char)*(*text)++; } if((unsigned char)**text < 0xF0) { if(text[0][1] & 0x80 && text[0][2] & 0x80) { *text += 3; return (text[0][-3] & 0xF) << 12 | (text[0][-2] & 0x3F) << 6 | text[0][-1] & 0x3F; } return (unsigned char)*(*text)++; } if(text[0][1] & 0x80 && text[0][2] & 0x80 && text[0][3] & 0x80) { *text += 4; return (text[0][-4] & 0xF7) << 18 | (text[0][-3] & 0x3F) << 6 | (text[0][-2] & 0x3F) << 6 | text[0][-1] & 0x3F; } return (unsigned char)*(*text)++; } struct cached_glyph *get_cached(int char_code) { if(char_code - CACHED_GLYPHS_BASE_START < CACHED_GLYPHS_BASE_COUNT && char_code >= CACHED_GLYPHS_BASE_START) { struct cached_glyph *cached = cached_glyphs_base + char_code - CACHED_GLYPHS_BASE_START; if(!cached->display_list) { if(cached->index) { reload_glyph(cached); } else { load_glyph(cached, char_code); } } return cached; } struct cached_glyph_extra *cached_extra = cached_glyphs_extra; while(cached_extra->character != char_code) { if(!cached_extra->character) { int extra_offset = (int)cached_extra - (int)cached_glyphs_extra; cached_glyphs_extra = g_realloc(cached_glyphs_extra, extra_offset + sizeof(struct cached_glyph_extra)); cached_extra = (struct cached_glyph_extra *)(extra_offset + (int)cached_glyphs_extra); cached_extra->character = char_code; cached_extra->cached = g_malloc(sizeof(struct cached_glyph)); cached_extra[1].character = 0; load_glyph(cached_extra->cached, char_code); break; } cached_extra++; } if(!cached_extra->cached->display_list) { reload_glyph(cached_extra->cached); } return cached_extra->cached; } int font_prepare_char(struct font_character *character, char **text, int previous) { int char_code = font_read_utf8_char(text); if(!char_code) { return 0; } struct cached_glyph *cached = get_cached(char_code); character->advance = cached->advance; character->glyph = cached; if(previous) { FT_Vector delta; FT_Get_Kerning(face, previous, cached->index, ft_kerning_default, &delta); character[-1].advance += delta.x >> 6; } return cached->index; } void font_update_char(struct font_character *character, int is_first) { if(!is_first) { FT_Vector delta; FT_Get_Kerning(face, character[-1].glyph->index, character->glyph->index, ft_kerning_default, &delta); character[-1].advance += delta.x >> 6; } if(!character->glyph->display_list) { reload_glyph(character->glyph); } character->advance = character->glyph->advance; } void font_draw_char(struct font_character *character) { glCallList(character->glyph->display_list); glTranslated(character->advance, 0, 0); } int font_get_utf8_width(const char *string) { int width = 0; struct cached_glyph *previous_cached = NULL; for(;;) { int char_code = font_read_utf8_char((char **)&string); if(!char_code) { break; } struct cached_glyph *cached = get_cached(char_code); if(previous_cached) { FT_Vector delta; FT_Get_Kerning(face, previous_cached->index, cached->index, ft_kerning_default, &delta); width += previous_cached->advance + (delta.x >> 6); } previous_cached = cached; } return width + previous_cached->advance; } void font_draw_utf8(const char *string) { struct cached_glyph *previous_cached = NULL; for(;;) { int char_code = font_read_utf8_char((char **)&string); if(!char_code) { break; } struct cached_glyph *cached = get_cached(char_code); if(previous_cached) { FT_Vector delta; FT_Get_Kerning(face, previous_cached->index, cached->index, ft_kerning_default, &delta); glTranslated(previous_cached->advance + (delta.x >> 6), 0, 0); } glCallList(cached->display_list); previous_cached = cached; } if(previous_cached) { glTranslated(previous_cached->advance, 0, 0); } } int font_get_line_count(const char *string, int max_width) { int line_count = 1; int line_width = 0; int word_width = 0; struct cached_glyph *previous_cached = NULL; for(;;) { int char_code = font_read_utf8_char((char **)&string); if(!char_code) { return line_count; } struct cached_glyph *cached = get_cached(char_code); if(previous_cached) { FT_Vector delta; FT_Get_Kerning(face, previous_cached->index, cached->index, ft_kerning_default, &delta); if(word_width < 0) { line_width += delta.x >> 6; word_width = 0; } else { word_width += delta.x >> 6; } } word_width += cached->advance; previous_cached = cached; if(char_code <= ' ') { line_width += word_width; word_width = 0; } else if(line_width + word_width > max_width) { line_count++; line_width = 0; } } } void font_draw_utf8_wrap(const char *string, int max_width) { glPushMatrix(); const char *word = NULL; int width = 0; int word_width = 0; struct cached_glyph *previous_cached = NULL; struct cached_glyph *word_cached = NULL; for(;;) { int char_code = font_read_utf8_char((char **)&string); if(!char_code) { if(word) { string = word; previous_cached = word_cached; width = word_width; word = NULL; continue; } break; } if(char_code <= ' ') { if(word && word < string - 1) { string = word; previous_cached = word_cached; width = word_width; word = NULL; continue; } struct cached_glyph *cached = get_cached(char_code); width += cached->advance; if(previous_cached) { FT_Vector delta; FT_Get_Kerning(face, previous_cached->index, cached->index, ft_kerning_default, &delta); glTranslated(previous_cached->advance + (delta.x >> 6), 0, 0); width += delta.x >> 6; } previous_cached = cached; word_cached = cached; word_width = width; word = string; } else if(word) { struct cached_glyph *cached = get_cached(char_code); width += cached->advance; if(previous_cached) { FT_Vector delta; FT_Get_Kerning(face, previous_cached->index, cached->index, ft_kerning_default, &delta); width += delta.x >> 6; } previous_cached = cached; if(width > max_width) { glPopMatrix(); glTranslated(0, font_height, 0); glPushMatrix(); string = word; previous_cached = NULL; width = 0; word = NULL; } } else { struct cached_glyph *cached = get_cached(char_code); width += cached->advance; if(previous_cached) { FT_Vector delta; FT_Get_Kerning(face, previous_cached->index, cached->index, ft_kerning_default, &delta); glTranslated(previous_cached->advance + (delta.x >> 6), 0, 0); width += delta.x >> 6; } glCallList(cached->display_list); previous_cached = cached; } } glPopMatrix(); } sinatra-1.0/src/songselect.h0000644000175000017500000000175210751350024013044 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __SONGSELECT_H_ #define __SONGSELECT_H_ void songselect_list(void); // Returns zero on success and non-zero on failure int songselect_show(void); void songselect_hide(void); void songselect_resize(void); void songselect_handle_key_press(SDL_keysym *key); void songselect_draw(void); #endif sinatra-1.0/src/globals.h0000644000175000017500000000271510755602071012327 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __DATA_DIR_H_ #define __DATA_DIR_H_ #define MAX_PLAYER_COUNT 4 #define SCALE(x) (int)((x) * scale) // Error margin in halftones to be accepted as correct. Zero means // only singing exactly the correct tone is enough. One is a good // value. int difficulty; int record_sample_rate; // Wether to display text on the title screen. Useful to disable at parties when // displaying a custom backdrop. int title_screen_text; // Current pixel size of the drawable area. int window_size_x; int window_size_y; double scale; int font_size; char *data_dir; char *score_file_name; unsigned corner_texture; struct record_device { const char *code; int channel1_player; int channel2_player; }; int player_count; struct record_device record_devices[MAX_PLAYER_COUNT]; #endif sinatra-1.0/src/texture.c0000644000175000017500000000360010751472531012373 00000000000000#include #include "SDL.h" #include "SDL_image.h" #include "SDL_opengl.h" #include "globals.h" #include "texture.h" char *texture_load(struct texture *texture, const char *file_name) { SDL_Surface *surface = IMG_Load(file_name); if(!surface) { return g_strconcat("failed to load image: ", IMG_GetError(), NULL); } glGenTextures(1, &texture->texture); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture->texture); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); if(surface->format->BytesPerPixel == 4) { glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, 4, surface->w, surface->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels); } else if(surface->format->BytesPerPixel == 3) { glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, 3, surface->w, surface->h, 0, GL_RGB, GL_UNSIGNED_BYTE, surface->pixels); } else if(surface->format->BytesPerPixel == 1) { glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, 1, surface->w, surface->h, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, surface->pixels); } else { return g_strdup_printf("image has an unsupported number of bytes per pixel (file name: \"%s\", bytes per pixel: %d)", file_name, surface->format->BytesPerPixel); } texture->size_x = surface->w; texture->size_y = surface->h; SDL_FreeSurface(surface); return 0; } char *texture_load_theme(struct texture *texture, const char *file_name) { char *real_file_name = g_strconcat(data_dir, "/theme/", file_name, NULL); char *result = texture_load(texture, real_file_name); g_free(real_file_name); return result; } unsigned texture_load_simple(const char *file_name) { struct texture texture; char *error = texture_load_theme(&texture, file_name); if(error) { puts(error); exit(1); } return texture.texture; } sinatra-1.0/src/Makefile.am0000644000175000017500000000206710753311713012565 00000000000000# This file is part of Sinatra. # Copyright 2008 Fredrik Portstrom # # Sinatra is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sinatra is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sinatra. If not, see . bin_PROGRAMS = sinatra sinatra_SOURCES = \ draw.c \ draw.h \ font.c \ font.h \ globals.h \ main.c \ main.h \ messagebox.c \ messagebox.h \ playerconfscreen.c \ playerconfscreen.h \ record.c \ record.h \ song.c \ song.h \ songselect.c \ songselect.h \ texture.c \ texture.h \ titlescreen.c \ titlescreen.h AM_CPPFLAGS = -Wall -Wno-parentheses @CPPFLAGS@ LDADD = @LDADD@ sinatra-1.0/src/draw.h0000644000175000017500000000207310755620367011646 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __DRAW_H_ #define __DRAW_H_ #define draw_rectangle(x1, x2, y1, y2) \ (glVertex2i((x1), (y1)), \ glVertex2i((x2), (y1)), \ glVertex2i((x2), (y2)), \ glVertex2i((x1), (y2))) \ void draw_rounded_rectangle(int x1, int x4, int y1, int y4, int corner_radius); void draw_popup_box(int size_x, int size_y, unsigned animation_time); #endif sinatra-1.0/src/song.h0000644000175000017500000000161210752176235011652 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __SONG_H_ #define __SONG_H_ char song_paused; char *song_load(const char *file_name); void song_unload(void); void song_toggle_pause(void); void song_resize(void); void song_draw(void); #endif sinatra-1.0/src/titlescreen.h0000644000175000017500000000161410751350024013214 00000000000000// This file is part of Sinatra. // Copyright 2008 Fredrik Portstrom // // Sinatra is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Sinatra is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Sinatra. If not, see . #ifndef __TITLESCREEN_H_ #define __TITLESCREEN_H_ void aboutscreen_show(void); void aboutscreen_hide(void); void titlescreen_show(void); void titlescreen_resize(void); void titlescreen_draw(void); #endif sinatra-1.0/AUTHORS0000644000175000017500000000040310755624512011010 00000000000000Authors of Sinatra. Copyright (C) 2008 Fredrik Portstrom 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. Fredrik Portstromsinatra-1.0/config.h.in0000644000175000017500000000510210753313377011766 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT /* Define to 1 if you have the `bzero' function. */ #undef HAVE_BZERO /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `SDL_image' library (-lSDL_image). */ #undef HAVE_LIBSDL_IMAGE /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `unsigned int' if does not define. */ #undef size_t sinatra-1.0/configure0000755000175000017500000054647210753313370011667 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for Sinatra 1.0. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='Sinatra' PACKAGE_TARNAME='sinatra' PACKAGE_VERSION='1.0' PACKAGE_STRING='Sinatra 1.0' PACKAGE_BUGREPORT='' ac_unique_file="src/main.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA am__isrc CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE PKG_CONFIG freetype2_CFLAGS freetype2_LIBS gstreamer_CFLAGS gstreamer_LIBS sdl_CFLAGS sdl_LIBS CPP GREP EGREP LIBOBJS LDADD LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG freetype2_CFLAGS freetype2_LIBS gstreamer_CFLAGS gstreamer_LIBS sdl_CFLAGS sdl_LIBS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Sinatra 1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/sinatra] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Sinatra 1.0:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility freetype2_CFLAGS C compiler flags for freetype2, overriding pkg-config freetype2_LIBS linker flags for freetype2, overriding pkg-config gstreamer_CFLAGS C compiler flags for gstreamer, overriding pkg-config gstreamer_LIBS linker flags for gstreamer, overriding pkg-config sdl_CFLAGS C compiler flags for sdl, overriding pkg-config sdl_LIBS linker flags for sdl, overriding pkg-config CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Sinatra configure 1.0 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Sinatra $as_me 1.0, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" am__api_version='1.10' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi { echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { echo "$as_me:$LINENO: result: $MKDIR_P" >&5 echo "${ECHO_T}$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='sinatra' VERSION='1.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { echo "$as_me:$LINENO: checking for freetype2" >&5 echo $ECHO_N "checking for freetype2... $ECHO_C" >&6; } if test -n "$PKG_CONFIG"; then if test -n "$freetype2_CFLAGS"; then pkg_cv_freetype2_CFLAGS="$freetype2_CFLAGS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"freetype2\"") >&5 ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_freetype2_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$freetype2_LIBS"; then pkg_cv_freetype2_LIBS="$freetype2_LIBS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"freetype2\"") >&5 ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_freetype2_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then freetype2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "freetype2"` else freetype2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "freetype2"` fi # Put the nasty error message in config.log where it belongs echo "$freetype2_PKG_ERRORS" >&5 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } { { echo "$as_me:$LINENO: error: cannot find required library" >&5 echo "$as_me: error: cannot find required library" >&2;} { (exit 1); exit 1; }; } elif test $pkg_failed = untried; then { { echo "$as_me:$LINENO: error: cannot find required library" >&5 echo "$as_me: error: cannot find required library" >&2;} { (exit 1); exit 1; }; } else freetype2_CFLAGS=$pkg_cv_freetype2_CFLAGS freetype2_LIBS=$pkg_cv_freetype2_LIBS { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } : fi pkg_failed=no { echo "$as_me:$LINENO: checking for gstreamer" >&5 echo $ECHO_N "checking for gstreamer... $ECHO_C" >&6; } if test -n "$PKG_CONFIG"; then if test -n "$gstreamer_CFLAGS"; then pkg_cv_gstreamer_CFLAGS="$gstreamer_CFLAGS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gstreamer-plugins-base-0.10\"") >&5 ($PKG_CONFIG --exists --print-errors "gstreamer-plugins-base-0.10") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_gstreamer_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-plugins-base-0.10" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$gstreamer_LIBS"; then pkg_cv_gstreamer_LIBS="$gstreamer_LIBS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gstreamer-plugins-base-0.10\"") >&5 ($PKG_CONFIG --exists --print-errors "gstreamer-plugins-base-0.10") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_gstreamer_LIBS=`$PKG_CONFIG --libs "gstreamer-plugins-base-0.10" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then gstreamer_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-plugins-base-0.10"` else gstreamer_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-plugins-base-0.10"` fi # Put the nasty error message in config.log where it belongs echo "$gstreamer_PKG_ERRORS" >&5 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } { { echo "$as_me:$LINENO: error: cannot find required library (gstreamer-plugins-base-0.10)" >&5 echo "$as_me: error: cannot find required library (gstreamer-plugins-base-0.10)" >&2;} { (exit 1); exit 1; }; } elif test $pkg_failed = untried; then { { echo "$as_me:$LINENO: error: cannot find required library (gstreamer-plugins-base-0.10)" >&5 echo "$as_me: error: cannot find required library (gstreamer-plugins-base-0.10)" >&2;} { (exit 1); exit 1; }; } else gstreamer_CFLAGS=$pkg_cv_gstreamer_CFLAGS gstreamer_LIBS=$pkg_cv_gstreamer_LIBS { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } : fi pkg_failed=no { echo "$as_me:$LINENO: checking for sdl" >&5 echo $ECHO_N "checking for sdl... $ECHO_C" >&6; } if test -n "$PKG_CONFIG"; then if test -n "$sdl_CFLAGS"; then pkg_cv_sdl_CFLAGS="$sdl_CFLAGS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sdl\"") >&5 ($PKG_CONFIG --exists --print-errors "sdl") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_sdl_CFLAGS=`$PKG_CONFIG --cflags "sdl" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$sdl_LIBS"; then pkg_cv_sdl_LIBS="$sdl_LIBS" else if test -n "$PKG_CONFIG" && \ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sdl\"") >&5 ($PKG_CONFIG --exists --print-errors "sdl") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then pkg_cv_sdl_LIBS=`$PKG_CONFIG --libs "sdl" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sdl_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sdl"` else sdl_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sdl"` fi # Put the nasty error message in config.log where it belongs echo "$sdl_PKG_ERRORS" >&5 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } { { echo "$as_me:$LINENO: error: cannot find required library" >&5 echo "$as_me: error: cannot find required library" >&2;} { (exit 1); exit 1; }; } elif test $pkg_failed = untried; then { { echo "$as_me:$LINENO: error: cannot find required library" >&5 echo "$as_me: error: cannot find required library" >&2;} { (exit 1); exit 1; }; } else sdl_CFLAGS=$pkg_cv_sdl_CFLAGS sdl_LIBS=$pkg_cv_sdl_LIBS { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } : fi { echo "$as_me:$LINENO: checking for IMG_Load in -lSDL_image" >&5 echo $ECHO_N "checking for IMG_Load in -lSDL_image... $ECHO_C" >&6; } if test "${ac_cv_lib_SDL_image_IMG_Load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSDL_image $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char IMG_Load (); int main () { return IMG_Load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_SDL_image_IMG_Load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_SDL_image_IMG_Load=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_SDL_image_IMG_Load" >&5 echo "${ECHO_T}$ac_cv_lib_SDL_image_IMG_Load" >&6; } if test $ac_cv_lib_SDL_image_IMG_Load = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSDL_IMAGE 1 _ACEOF LIBS="-lSDL_image $LIBS" else { { echo "$as_me:$LINENO: error: cannot find required library" >&5 echo "$as_me: error: cannot find required library" >&2;} { (exit 1); exit 1; }; } fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_search_opendir=$ac_res else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_search_opendir=$ac_res else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stdlib.h string.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { echo "$as_me:$LINENO: error: cannot find required headers" >&5 echo "$as_me: error: cannot find required headers" >&2;} { (exit 1); exit 1; }; } fi done { echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi { echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef size_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6; } if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { echo "$as_me:$LINENO: checking for working memcmp" >&5 echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6; } if test "${ac_cv_func_memcmp_working+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_memcmp_working=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* Some versions of memcmp are not 8-bit clean. */ char c0 = '\100', c1 = '\200', c2 = '\201'; if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) return 1; /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); if (memcmp (a, b, 16) >= 0) return 1; } return 0; } ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_memcmp_working=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_memcmp_working=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5 echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6; } test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in *" memcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; esac for ac_func in atexit bzero getcwd memmove memset strchr strerror strtol do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else { { echo "$as_me:$LINENO: error: cannot find required functions" >&5 echo "$as_me: error: cannot find required functions" >&2;} { (exit 1); exit 1; }; } fi done LDADD=`pkg-config --libs freetype2 gstreamer-0.10 sdl` LDADD="$LDADD -lGL -lGLU -lSDL_image -lgstinterfaces-0.10" CPPFLAGS=`pkg-config --cflags freetype2 gstreamer-plugins-base-0.10 sdl` ac_config_files="$ac_config_files Makefile src/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Sinatra $as_me 1.0, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ Sinatra config.status 1.0 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim am__isrc!$am__isrc$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CCDEPMODE!$CCDEPMODE$ac_delim am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim PKG_CONFIG!$PKG_CONFIG$ac_delim freetype2_CFLAGS!$freetype2_CFLAGS$ac_delim freetype2_LIBS!$freetype2_LIBS$ac_delim gstreamer_CFLAGS!$gstreamer_CFLAGS$ac_delim gstreamer_LIBS!$gstreamer_LIBS$ac_delim sdl_CFLAGS!$sdl_CFLAGS$ac_delim sdl_LIBS!$sdl_LIBS$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim LIBOBJS!$LIBOBJS$ac_delim LDADD!$LDADD$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 88; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :H) # # CONFIG_HEADER # _ACEOF # Transform confdefs.h into a sed script `conftest.defines', that # substitutes the proper values into config.h.in to produce config.h. rm -f conftest.defines conftest.tail # First, append a space to every undef/define line, to ease matching. echo 's/$/ /' >conftest.defines # Then, protect against being on the right side of a sed subst, or in # an unquoted here document, in config.status. If some macros were # called several times there might be several #defines for the same # symbol, which is useless. But do not sort them, since the last # AC_DEFINE must be honored. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* # These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where # NAME is the cpp macro being defined, VALUE is the value it is being given. # PARAMS is the parameter list in the macro definition--in most cases, it's # just an empty string. ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ac_dB='\\)[ (].*,\\1define\\2' ac_dC=' ' ac_dD=' ,' uniq confdefs.h | sed -n ' t rset :rset s/^[ ]*#[ ]*define[ ][ ]*// t ok d :ok s/[\\&,]/\\&/g s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ' >>conftest.defines # Remove the space that was appended to ease matching. # Then replace #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. # (The regexp can be short, since the line contains either #define or #undef.) echo 's/ $// s,^[ #]*u.*,/* & */,' >>conftest.defines # Break up conftest.defines: ac_max_sed_lines=50 # First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" # Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" # Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" # et cetera. ac_in='$ac_file_inputs' ac_out='"$tmp/out1"' ac_nxt='"$tmp/out2"' while : do # Write a here document: cat >>$CONFIG_STATUS <<_ACEOF # First, check the format of the line: cat >"\$tmp/defines.sed" <<\\CEOF /^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def /^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def b :def _ACEOF sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail grep . conftest.tail >/dev/null || break rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines conftest.tail echo "ac_result=$ac_in" >>$CONFIG_STATUS cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then echo "/* $configure_input */" >"$tmp/config.h" cat "$ac_result" >>"$tmp/config.h" if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else rm -f $ac_file mv "$tmp/config.h" $ac_file fi else echo "/* $configure_input */" cat "$ac_result" fi rm -f "$tmp/out12" # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| . 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi sinatra-1.0/Makefile.am0000644000175000017500000000260610755626034012004 00000000000000# This file is part of Sinatra. # Copyright 2008 Fredrik Portstrom # # Sinatra is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sinatra is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sinatra. If not, see . SUBDIRS = src desktopdir = $(datadir)/applications desktop_DATA = data/sinatra.desktop pixmapdir = $(datadir)/pixmaps pixmap_DATA = data/sinatra.xpm themedir = $(datadir)/@PACKAGE@/theme theme_DATA = \ data/sinatra.desktop \ data/sinatra.xpm \ data/theme/corner.png \ data/theme/default_cover.png \ data/theme/eye.png \ data/theme/fade_corner.png \ data/theme/note_glow.png \ data/theme/note_player_1.png \ data/theme/note_player_2.png \ data/theme/note_player_3.png \ data/theme/note_player_4.png \ data/theme/note.png \ data/theme/perfect_note.png \ data/theme/select_box.png \ data/theme/sing_screen.png \ data/theme/title_screen.png EXTRA_DIST = COPYING.ARTWORK $(desktop_DATA) $(pixmap_DATA) $(theme_DATA) sinatra-1.0/INSTALL0000644000175000017500000002231010751443022010761 00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== 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. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for 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 disabled by default to prevent problems with accidental use of stale 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 diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at 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 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: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. 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. 4. Type `make install' to install the programs and any data files and documentation. 5. 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 also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 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. 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=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 same time, by placing the object files for each architecture in their 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 `..'. 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. Installation Names ================== 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'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you 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. 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 `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 `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually 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. 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 `--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: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: 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 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 platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will 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'. `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. 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 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 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). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. sinatra-1.0/aclocal.m40000644000175000017500000011031610753313366011605 00000000000000# generated automatically by aclocal 1.10 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_if(m4_PACKAGE_VERSION, [2.61],, [m4_fatal([this file was generated for autoconf 2.61. You have another version of autoconf. If you want to use that, you should regenerate the build system entirely.], [63])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$PKG_CONFIG"; then if test -n "$$1"; then pkg_cv_[]$1="$$1" else PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) fi else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` else $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.10' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.10], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.10])dnl _AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 3 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.60])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR sinatra-1.0/data/0000777000175000017500000000000010755626123010740 500000000000000sinatra-1.0/data/sinatra.xpm0000644000175000017500000004270410751503707013050 00000000000000/* XPM */ static char * icon_xpm[] = { "64 64 585 2", " c None", ". c #000000", "+ c #1B1600", "@ c #9B7C00", "# c #030200", "$ c #372C02", "% c #EDBF06", "& c #FFCD05", "* c #443601", "= c #3F3304", "- c #F4C60E", "; c #FFCE0D", "> c #FFCE0B", ", c #9B7D06", "' c #3C3106", ") c #F4C716", "! c #FFD016", "~ c #FFD015", "{ c #FFCF13", "] c #D9B00E", "^ c #A7A7A7", "/ c #372D07", "( c #F1C61D", "_ c #FFD21E", ": c #FFD21D", "< c #FFD11C", "[ c #FFD11A", "} c #FDCE18", "| c #0E0B01", "1 c #727272", "2 c #C4C2BC", "3 c #EAC325", "4 c #FFD327", "5 c #FFD326", "6 c #FFD324", "7 c #FFD323", "8 c #FFD222", "9 c #FFD21F", "0 c #3E3307", "a c #88867F", "b c #F7EFD1", "c c #FFD52E", "d c #FFD52D", "e c #FFD42C", "f c #FFD42A", "g c #FFD428", "h c #5E4E0D", "i c #0A0802", "j c #E6D89F", "k c #FFFAE7", "l c #FFD736", "m c #FFD635", "n c #FFD634", "o c #FFD633", "p c #FFD531", "q c #FFD52F", "r c #7B6614", "s c #030301", "t c #B1962A", "u c #FFF0B3", "v c #FFFCF2", "w c #FFD83D", "x c #FFD83B", "y c #FFD73A", "z c #FFD739", "A c #99801D", "B c #818181", "C c #7D7D7C", "D c #D0C69D", "E c #FFF0B6", "F c #FFFAE6", "G c #FFFEF8", "H c #FFF1BA", "I c #FFEDAA", "J c #FFEC9F", "K c #FFE990", "L c #FFE788", "M c #FFE47B", "N c #FFE375", "O c #C8B15A", "P c #363636", "Q c #ABABAB", "R c #A9A9A8", "S c #E5E0CA", "T c #FFF9DF", "U c #FFFBED", "V c #FFFEFC", "W c #FFFFFE", "X c #FFFDF5", "Y c #FFFCEE", "Z c #FFF8DE", "` c #FFF6D4", " . c #FFF3C3", ".. c #FFEFB2", "+. c #FFEDA5", "@. c #E8D792", "#. c #696969", "$. c #767676", "%. c #423500", "&. c #4D3E00", "*. c #544300", "=. c #3C3000", "-. c #221B00", ";. c #040300", ">. c #A79240", ",. c #FFE26C", "'. c #FFE57B", "). c #FFE789", "!. c #FFF8DC", "~. c #FFFEFA", "{. c #FFEA98", "]. c #FFE994", "^. c #FFE88C", "/. c #FFE680", "(. c #FFE271", "_. c #FFDF5F", ":. c #FFDA4B", "<. c #F3D042", "[. c #C19A00", "}. c #FFCC00", "|. c #F6C501", "1. c #C7A005", "2. c #947808", "3. c #614F07", "4. c #2E2605", "5. c #686766", "6. c #2F2F2F", "7. c #151207", "8. c #BDA647", "9. c #FFE372", "0. c #FFE685", "a. c #FFEA96", "b. c #FFEDA4", "c. c #FFF8DF", "d. c #FFFDF4", "e. c #FFF1B8", "f. c #FFEDA9", "g. c #FFEB9C", "h. c #FFE88A", "i. c #FFE477", "j. c #FFE063", "k. c #FFDB4C", "l. c #161306", "m. c #695400", "n. c #FFCF11", "o. c #FFD018", "p. c #FCE486", "q. c #DBC053", "r. c #A4891E", "s. c #6F5D17", "t. c #3B320D", "u. c #120F04", "v. c #050402", "w. c #5D511F", "x. c #E7C850", "y. c #FFE26F", "z. c #FFE684", "A. c #FFEEAB", "B. c #FFF1BB", "C. c #FFFDF6", "D. c #FFF6D5", "E. c #FFF5CE", "F. c #FFF3C1", "G. c #FFEFB1", "H. c #FFEB9E", "I. c #FFE374", "J. c #FFDE5C", "K. c #393112", "L. c #100D00", "M. c #F3C200", "N. c #FFCC03", "O. c #FFCE0A", "P. c #FFCF10", "Q. c #FFD322", "R. c #FFE169", "S. c #FFD83F", "T. c #FFD944", "U. c #F4D147", "V. c #DDBE44", "W. c #DEC047", "X. c #FAD954", "Y. c #FFDE5B", "Z. c #FFE47A", "`. c #FFF0B7", " + c #FFF5CA", ".+ c #FFFEF9", "++ c #FFFCF0", "@+ c #FFF9E3", "#+ c #FFF6D2", "$+ c #FFF2BF", "%+ c #FFE57F", "&+ c #5A4E1E", "*+ c #8F7200", "=+ c #FFCD06", "-+ c #FFD014", ";+ c #FFD221", ">+ c #FFDA4A", ",+ c #FFDB4F", "'+ c #FFDD54", ")+ c #FFDD58", "!+ c #FFDF61", "~+ c #FFE580", "{+ c #FFEA95", "]+ c #FFEEA9", "^+ c #FFF2BC", "/+ c #FFF7D5", "(+ c #FFF3C2", "_+ c #FFEFB0", ":+ c #FFEB9B", "<+ c #FFE785", "[+ c #7C6C2C", "}+ c #121212", "|+ c #35311E", "1+ c #F7CF2F", "2+ c #FFD941", "3+ c #FFE88E", "4+ c #FFECA1", "5+ c #FFFCEF", "6+ c #FFF9E2", "7+ c #FFF4CA", "8+ c #FFF1B9", "9+ c #FFEEAE", "0+ c #FFECA2", "a+ c #FFEC9E", "b+ c #FFE98D", "c+ c #FFE888", "d+ c #FFE683", "e+ c #FFE88D", "f+ c #FFF4C8", "g+ c #FFFAE5", "h+ c #FFFCF1", "i+ c #FFF7D9", "j+ c #FFF5CD", "k+ c #FFF2BD", "l+ c #FFEEAD", "m+ c #FFEB9A", "n+ c #FFE786", "o+ c #FFE270", "p+ c #A89340", "q+ c #7F6600", "r+ c #FFDA47", "s+ c #FFDF60", "t+ c #FFE167", "u+ c #FFE26E", "v+ c #FFE681", "w+ c #FFE889", "x+ c #FFF4CB", "y+ c #FFF4C7", "z+ c #FFE682", "A+ c #FFE16D", "B+ c #E4C85C", "C+ c #010100", "D+ c #0A0800", "E+ c #E4B809", "F+ c #FFD017", "G+ c #FFD325", "H+ c #FFEDA8", "I+ c #FFE57A", "J+ c #FFDE5A", "K+ c #FFE068", "L+ c #FFE373", "M+ c #FFE57E", "N+ c #FFE98F", "O+ c #FFEB99", "P+ c #FFEDA7", "Q+ c #FFEFAE", "R+ c #FFF0B5", "S+ c #FFF6CF", "T+ c #FFF8DB", "U+ c #FFEEA7", "V+ c #FFE26D", "W+ c #40381A", "X+ c #5E4C04", "Y+ c #FFD11B", "Z+ c #FFD738", "`+ c #FFE16B", " @ c #FFE479", ".@ c #FFE686", "+@ c #FFE890", "@@ c #FFEEAC", "#@ c #FFF0B4", "$@ c #FFF4C9", "%@ c #FFF6D3", "&@ c #FFEEA8", "*@ c #FFEDA3", "=@ c #FFE57D", "-@ c #FFE478", ";@ c #C3AD53", ">@ c #020200", ",@ c #CBA612", "'@ c #FFF0B2", ")@ c #FFF2BE", "!@ c #FFF2BA", "~@ c #FFF1B7", "{@ c #FFEFB5", "]@ c #FFF5CC", "^@ c #FFEEAA", "/@ c #FFE88F", "(@ c #FFE88B", "_@ c #FFE787", ":@ c #90803E", "<@ c #040402", "[@ c #382E05", "}@ c #FED120", "|@ c #FFD840", "1@ c #FFDD55", "2@ c #FFF4C6", "3@ c #FFE991", "4@ c #CCB455", "5@ c #2D2812", "6@ c #A08415", "7@ c #FFD429", "8@ c #FFDB4B", "9@ c #FFDE5F", "0@ c #FFEA94", "a@ c #FFECA3", "b@ c #FFF6D1", "c@ c #FFF7D7", "d@ c #FFF7D6", "e@ c #FFF1B6", "f@ c #FFEA97", "g@ c #FFE992", "h@ c #FBDC65", "i@ c #9A873B", "j@ c #191609", "k@ c #1A1604", "l@ c #F3CA2A", "m@ c #FFDC52", "n@ c #FFE067", "o@ c #FFEA9A", "p@ c #FFEFAD", "q@ c #FFF8DD", "r@ c #FFFAE4", "s@ c #FFFAE8", "t@ c #FFFAE9", "u@ c #FFF8DA", "v@ c #FFF6D0", "w@ c #FFEB9D", "x@ c #FFE064", "y@ c #F6D659", "z@ c #988433", "A@ c #27210C", "B@ c #7C6816", "C@ c #FFD942", "D@ c #FFE16C", "E@ c #FFF5CF", "F@ c #FFFBEA", "G@ c #FFF9E0", "H@ c #FFF3C5", "I@ c #FFE57C", "J@ c #FDDA4F", "K@ c #B19733", "L@ c #413711", "M@ c #0E0C03", "N@ c #EECC41", "O@ c #FFDE59", "P@ c #FFEB98", "Q@ c #FFFBE9", "R@ c #FFFDF3", "S@ c #FFFCF3", "T@ c #FFFBEC", "U@ c #FFF9DE", "V@ c #FFF8D9", "W@ c #FFF3C4", "X@ c #FFF2BB", "Y@ c #FFF0B0", "Z@ c #FFE168", "`@ c #FFDB4A", " # c #CCAD30", ".# c #584A12", "+# c #040301", "@# c #867329", "## c #FFDD59", "$# c #FFE78D", "%# c #FFF5D0", "&# c #FFEFB3", "*# c #FFE16A", "=# c #E0BB28", "-# c #705D11", ";# c #0D0B02", "># c #242010", ",# c #FBDB55", "'# c #FFECA0", ")# c #FFEFAF", "!# c #FFF9E1", "~# c #FFF7D4", "{# c #FFEA99", "]# c #FFDB4D", "^# c #FFDA45", "/# c #FFD83E", "(# c #EBC21D", "_# c #725D0A", ":# c #060500", "<# c #020202", "[# c #BBA23F", "}# c #FFE065", "|# c #FFF8E0", "1# c #FFE784", "2# c #FFE371", "3# c #FFE066", "4# c #FFDE5D", "5# c #FFDD56", "6# c #FFDB4E", "7# c #FFDA46", "8# c #FFD737", "9# c #FFD220", "0# c #DAB10F", "a# c #3C3002", "b# c #927E2D", "c# c #FFE581", "d# c #FFF2C0", "e# c #FFF7D8", "f# c #FFF7DA", "g# c #FFE993", "h# c #FFE272", "i# c #FDCB09", "j# c #564500", "k# c #8D7824", "l# c #FFDC54", "m# c #FFE376", "n# c #FFF4CC", "o# c #FFF5CB", "p# c #FFE16E", "q# c #FBCC11", "r# c #776004", "s# c #B3982E", "t# c #FFDA49", "u# c #FFF2C1", "v# c #FFEA93", "w# c #FFDD5A", "x# c #C7A213", "y# c #342A03", "z# c #090802", "A# c #F3CF3D", "B# c #FFDA48", "C# c #FFDC50", "D# c #FFF3C6", "E# c #FFDF62", "F# c #D7B221", "G# c #56470A", "H# c #645416", "I# c #FFE78C", "J# c #FFF1BD", "K# c #FFF0B1", "L# c #FFEDA6", "M# c #C5A529", "N# c #4E410E", "O# c #060501", "P# c #DCB92F", "Q# c #FFF3C7", "R# c #FDDC57", "S# c #AD932D", "T# c #3A310D", "U# c #6E5C13", "V# c #FFD83C", "W# c #FFD943", "X# c #FCE68C", "Y# c #A6913F", "Z# c #27210B", "`# c #0E0C02", " $ c #EBC328", ".$ c #FFDF5E", "+$ c #FCEDB4", "@$ c #B2A264", "#$ c #25200E", "$$ c #836C11", "%$ c #FFD530", "&$ c #CABE8F", "*$ c #292516", "=$ c #181402", "-$ c #F4C91E", ";$ c #FFDD57", ">$ c #FFE995", ",$ c #FDF7E0", "'$ c #857E5F", ")$ c #9A7E0D", "!$ c #FFD42B", "~$ c #FFD632", "{$ c #FFF9E4", "]$ c #7C7456", "^$ c #2D2402", "/$ c #FCCD12", "($ c #FFEC9C", "_$ c #FFFBEB", ":$ c #DBD2AE", "<$ c #B99507", "[$ c #FFDC51", "}$ c #FFEB9F", "|$ c #FFF3C0", "1$ c #716A4D", "2$ c #483A00", "3$ c #FFCE0C", "4$ c #FFD940", "5$ c #FFF0B8", "6$ c #FEF4CD", "7$ c #121007", "8$ c #D2A800", "9$ c #FFCC02", "0$ c #FFCD09", "a$ c #FFE78A", "b$ c #FFEFAC", "c$ c #E8DAA0", "d$ c #4E3E00", "e$ c #FFCF12", "f$ c #FFD119", "g$ c #C5B677", "h$ c #C09A00", "i$ c #FFCC01", "j$ c #FFCD08", "k$ c #FFCE0E", "l$ c #FED842", "m$ c #E4C33F", "n$ c #CCAF3D", "o$ c #C1A73D", "p$ c #C7AC42", "q$ c #FBDA57", "r$ c #FFE78B", "s$ c #97884D", "t$ c #231C00", "u$ c #FFCC04", "v$ c #FACF21", "w$ c #CAA820", "x$ c #967D1A", "y$ c #605113", "z$ c #2E270A", "A$ c #080702", "B$ c #131006", "C$ c #83722C", "D$ c #F9D855", "E$ c #695A22", "F$ c #6E5800", "G$ c #FCCA00", "H$ c #D4AA04", "I$ c #9F8007", "J$ c #6B5707", "K$ c #362C05", "L$ c #070601", "M$ c #322B10", "N$ c #E4C54A", "O$ c #FFE476", "P$ c #FFDC53", "Q$ c #4D4215", "R$ c #524200", "S$ c #775F00", "T$ c #6D5700", "U$ c #514100", "V$ c #312700", "W$ c #0C0A00", "X$ c #201B0A", "Y$ c #E3C345", "Z$ c #FFDE58", "`$ c #FFDC4E", " % c #332B0D", ".% c #EAC842", "+% c #FFDB50", "@% c #171305", "#% c #2F280C", "$% c #F0CC3E", "%% c #FAD335", "&% c #382F0D", "*% c #F5D039", "=% c #DEB929", "-% c #44390E", ";% c #F9D132", ">% c #C0A01E", ",% c #54460E", "'% c #FCD22B", ")% c #A28516", "!% c #65540F", "~% c #FED224", "{% c #846C0D", "]% c #78620D", "^% c #5C4B07", "/% c #745F0A", "(% c #FECF14", "_% c #FFCF0F", ":% c #282002", "<% c #624F05", "[% c #FBCB0B", "}% c #EDBF07", "|% c #3A2E01", "1% c #DEB202", "2% c #A58400", "3% c #0E0B00", "4% c #2E2500", " ", " . . . ", " . + @ # . ", " . $ % & * . ", " . = - ; > , . ", " . ' ) ! ~ { ] . ", " ^ / ( _ : < [ } | . ", " 1 2 3 4 5 6 7 8 9 0 . ", " . a b c d d e f g 5 h . ", " . i j k l m n o p q d r . ", " . s t u v w w x y z l n 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 ` ...+.@.#.$. ", " . . %.&.*.=.-.;.. . . . s >.,.'.).!.~.{.].^./.(._.:.<.. . ", " . . [.}.}.}.}.|.1.2.3.4.5.6.. . . . 7.8.9.0.a.b.c.d.e.u f.g.h.i.j.k.l.. ", " . m.}.}.}.}.& > n.o._ p.q.r.s.t.u.. . . v.w.x.y.z.{.A.B.k C.D.E.F.G.H.h.I.J.K.. ", " . L.M.}.}.N.O.P.! < Q.g.R.n z S.T.U.V.W.X.Y.j.Z.K b.`. +U .+++@+#+$+A.a.%+R.&+. ", " . *+}.}.=+; -+[ ;+4 A.N z S.T.>+,+'+)+J.!+R.~+{+]+^+E.Y ~.d.F /+(+_+:+<+y.[+. ", " }+|+1+2+J.I.3+4+B.E.5+6+7+8+9+0+a+].b+c+d+~+e+:+]+e.f+g+h+T i+j+k+l+m+n+o+p+. ", " . q+=+; -+< e n r+f+K Y.s+t+u+I.'.v+n+w+^.{+4+l+E $+i+F x+y+$+u b.].z+A+B+C+ ", " . D+E+n.F+_ G+e o H+I+J+K+L+M+L N+{+O+g.J J P+Q+R+8+S+T+H `._+U+:+^.Z.9.V+W+. ", " . X+-+Y+8 g q Z++.z+`+ @.@+@O+4+P+@@Q+_+_+9+G.#@`.$@%@_+&@*@:++@z+=@-@9.;@s ", " . >@,@: 6 e n r+J 0.M h.a.4+A.'@8+^+)@$+$+k+!@~@{@ .]@^@4+a./@(@_@z+=@-@9.:@<@. ", " . [@}@g c |@1@H.^.L {.+._+B.(+f+]@E.E.j+7+y+ .$+2@]@@@b.:+{+3@e+L d+=@i.(.4@5@. . ", " . . 6@7@n 8@9@:++@0@a@G.k+f+b@c@T+!.T+i+d@#+j+$@j+E.e@Q++.:+f@g@e+_@v+M N u+h@i@j@. . ", " . k@l@w m@n@o@{+g.p@B.f+%@q@r@s@t@k @+T u@/+v@#+%@$+e.Q+0+w@{.g@^.0.%+-@9.`+x@y@z@A@. . ", " . . B@C@)+D@f@f@0+..F.E@T+F 5+X d.5+F@g+G@T+c@d@d@H@$+R+^@0+g.a.K ).d+I@N V+n@_.)+J@K@L@. . ", " . M@N@O@u+g@P@+.#@ .b@q@Q@R@V ~.S@T@k @+U@T+V@i+]@W@X@Y@P+4+m+].e+0.M+-@o+Z@!+J+m@`@T. #.#+#. ", " . @###V+$#].b.#@(+E@T+g+U v v 5+F@F @+G@q@!.T+%#$@$+&#@@+.H.a.N+L v+ @9.*#j.Y.'+k.T.w m =#-#;#. ", " . >#,#*#0.+@'#)#^+$@` q@@+s@Q@s@F @+!#G@Z Z !.~#j+ .`.)#P+'#{#3@h.d+M L+D@x@J.1@]#^#/#l c 4 (#_#:#. ", " <#[#}#I+).O+P+R+F.7+%@i+q@T G@G@T Z U@Z |#c.c@E.H@X@`.'@A.b.g.0@^.1#Z.2#3#4#5#6#7#S.8#q g 9#o.0#a#. ", " . b#4#y.c#K H.A.e@d#f+E@%@d@e#V@f#T+T+q@T !#e#v@f+(+)@H R+)#^@*@:+g#).M+h#x@5#,+7#S.8#q g 9#o.n.i#j#. ", " . k#l#}#m#<+g#'#A.#@^+ .y+n#E.%#%@D.d@V@!.!.d@%#o#f+W@d#^+e.&#p@+.a+].w+=@p#s+,+7#S.8#q g 9#o.q#r#>@. ", " . s#t#J+*#Z._@].J H+_+`.^+u#H@f+ +j+v@#+%@#+E@E@E. +$@2@ .$+B.E )#U+H.v#_@ @`+w#r+S.8#q g 9#x#y#. . ", " . z#A#B#C#J.,. @<+3@:+a@^@_+R+H )@F.H@y+$@$@y+D#E@E@E.j+x+7+y+ .)@e._+U+w@K z+L+E#C#/#l c F#G#C+. . ", " . H#S.7#6#5#4#*#-@z+I#{+g.b.]+Q+u E 8+^+J#)@$+(+E@%#v@b@b@%#E.n#y+u#H K#L#{#(@M *#6#w M#N#>@. . ", " . O#P#/#^#k.'+Y.j.*#L+I@.@3+a.g.4++.H+@@G.R+~@~@Q#E.b@%@` d@d@d@` %#7+ .8+l+4+g@~+R#S#T#. . . ", " . U#n V#W#`@m@O@!+n@y.m#=@d+h.K f@w@0+P+A.Q+u d#7+E.b@D.e#u@!.Z !.i+` o#F.R+P+X#Y#Z#. . . ", " . `# $o z 2+B#C#5#.$}#D@9. @~+n+^.g@f@g.'#]+..X@(+y+j+#+d@T+T @+F F 6+!.#+y++$@$#$. . . ", " . $$g %$8#S.^#]#'+Y.!+Z@y.N I@z+L e+g@a.m+L#)#`.)@H@]@b@c@q@@+Q@Y ++T@@+e#&$*$. . . ", " . =$-$4 d n V#W#>+C#;$.$}#`+(.i.=@d+L ^.K >$J ^@u H (+f+v@d@Z g+U X ~.S@,$'$. . . ", " . )$< 7 !$~$z S.7#]#'+J+!+n@V+9.-@=@z+n+).3+O+*@l+R+k+H@]@` T+{$T@d..+h+]$. . ", " . ^$/$[ ;+g c m V#W#t#C#5#Y.!+n@V+9.i.I@%+d+n+g#($L#_+e.$+y+E@c@Z g+_$U :$. . ", " . <$P.! : 6 !$~$z S.^#8@[$;$4#E#n@V+(.N @=@%+h.{+}$P+_+e.|$y+S+d@!.T G@1$. ", " . 2$& 3${ [ ;+g d n y 4$r+k.m@)+4#E#n@`+y.9.m#-@%+(@{+J &@_+5$)@H@o#E@#+6$7$. ", " C+8$9$0$P.! < 7 f %$l V#C@B#]#m@;$J.!+}#Z@D@y.9.I.~+a$].w@+.b$u 8+)@u# .c$. ", " . d$}.}.& 3$e$f$9 G+e ~$Z+w W#B#]#m@5#Y._.E#}#Z@*#D@9.M+L 3@O+'#L#A.)#..u g$. ", " . h$}.}.i$j$k$~ Y+;+4 d o Z+w l$m$n$o$p$q$Y..$!+j.}#3#(.Z.d+r$3@f@g.}$0+0+s$. ", " . t$}.}.}.}.u$O.n.! < v$w$x$y$z$A$. . . . B$C$D$J+J..$_.!+`+L+I+c#_@(@3+K z.E$. ", " . F$}.}.}.}.G$H$I$J$K$L$. . . . . . . . . . . M$N$1@5#;$)+w#E#R.o+O$ @I@M P$Q$. ", " . R$S$T$U$V$W$. . . . . . . . . X$Y$C#C#C#[$C#Z$4#E#}#3#`$T. %. ", " . . . . . . . . . . . Z#.%t#>+>+>+t#t#]#+%7#S.w @%. ", " . . #%$%C@C@C@2+4$S.w x z %%>@. ", " . . &%*%x y y z Z+l n ~$=%. ", " . . -%;%o o ~$p q d !$>%. ", " . . ,%'%e f 7@g 5 7 )%. ", " . . !%~%7 Q.;+9 < {%. ", " . . ]%< Y+f$F+! ^%. ", " . . /%(%e$n._%:%. ", " . . <%[%O.}%>@. ", " . . |%1%2%. ", " . . 3%4%. ", " . . . . ", " "}; sinatra-1.0/data/sinatra.desktop0000644000175000017500000000044410751502653013707 00000000000000[Desktop Entry] Encoding=UTF-8 Name=Sinatra Comment=A karaoke game Comment[de]=Ein Karaoke Spiel Comment[ro]=Un joc de tip karaoke Comment[fr]=Un jeu de Karaoké Comment[sv]=Ett karaokespel Exec=sinatra Icon=sinatra.xpm Terminal=false Type=Application Categories=Application;Game;ArcadeGame; sinatra-1.0/data/theme/0000777000175000017500000000000010755626123012042 500000000000000sinatra-1.0/data/theme/note_player_4.png0000644000175000017500000000642210743670532015234 00000000000000PNG  IHDR@@iqsRGB IDATx[]l\GIeҸ)!U14&iR硕J!<<"j !6$meQMpkWJN밾=sf:`;s=s~ ?oifLh` *K'_fO7Ygf[P}!)ڄ@,:{΀jZ¢ ?~B,BpoZ O4Gߣw|8th?&&h6{hϗ>wlc}} kk\~sݮݞiGw%n܇!o')7' euu.^Ƈ șS/>P ` D :i̝} `_C:Kշ}hw͘c}w,/_) t/$Wfh&>ژ:|KB+-f'SڹYJEm,E^}7(#]sKo曛5n2K&]jC߻1u8@w=ĕ_wEȋqr'Upy}n݇F@ ~Fxookf$IO#m6 f5}?^LMywGr%N93w 'T` kcs;xb8Սx$&61wZ=SP{hLTr<]iO^Wa̋yw˷b`T ?gd"׿a5ƻ1܂݄A}WV~W@dD4l4Iׇe8dBc}7WjiCkM5% oF23p=P٠JRqxy S%)1*að PYiH]_{=@BGm)ur*fN >W6=Srp W@/c8}d?^{cf3 qhro_%i8jvF,qzBTq2ݟ#846Y_b$b8 -5 mAj<$hP&%aRzcOE^.(…S,WGT:B]BRT1X񮂬`R6gzqnJpbB0N011uŻU &LLHcVC)fDV R"\`&1a6sHٵHV# gV 1X!@@oJ.”ѼZ5fOݳ|goZ@N.{"qI;*#aML,P%5 ³Q1āfBmYR92:ТLWӰR E Ch^XJCg΄C53:%\ -`Y:*H*Gxܚ3E}%_z0HTfAIWG =-YDcQ }n0^+9/ 8RX0&~$Z=ZB<+,I$0֤X!pyP[k}D(6T'ei38KU90]3l j(2Fǵfq4AwګX=$BZ0D a|"4!a wVHhtdbϦNF}$\ xk<S08L`1:QA 6˖a>)3 #&D2\GH+fsgh,3QyH? Qq(q~ϣ#v(p*ޕ&ki1anW071OJkN5wII*ҧSj-ohUA#@/>6 6E[y3Ls S+q3r*&X1'~~Nks%S syQLOlD#`a Bbx< Emqh >ۅmQ|@m)¬?z LwO imMO2^pf+I*>Œ*!*ev =6 # _ͫƜ3Ueй !8C8+5鰥u=i5XEД @Vp ub:ha!VEYSO(ȪxvRɰJvs4$ Þ92! @U[)"qɀqƍ燩R؀9VxE8rY1iԓ1vWDMu7fhxv^NV-0mp)=bj}1YvȠ@5֍2v2k Z8LcUa%%2^y:M4ѡ2؏hw>*ZpkƱ/م6$ۗ~e 9@bm}l[@x_G>94D3!AeT7h>GN9d tVxǾx8BF瀽0 d3d! m 1 2Ot9;l{©E@t*TBk` T5ȎZKQ.b{p[NvMl7M!p*6*sE.<04s" cRD#C U.p.<~h@[.<[cCߘn°llEuz5[eB}I]h.-;_*gาֳ?x՘j]o S>$mn7?6l8՞ߘH N5$Il0 #hևXSuwlwZWGf wp(fol7\ ƈTJ,hlT|XKWتδ1/裙AbzBp0$ƈ$FO D`} X7ng+nwGgf3RAQssH ip n'0if!N($E1p3BU+15j8LNIENDB`sinatra-1.0/data/theme/note_player_1.png0000644000175000017500000000633710743667527015250 00000000000000PNG  IHDR@@iqsRGB IDATx[Ml\̳3dI1 .6Uj)ToXV Rw5,/Dn*IHJ+K6,;w.7{qy;|; &[}X`o`& \]~}oe싿"\X o!@Q#pjg:i R7y$FR ?~h^OuN ;yzp|?`ww.nmo0{HX}E'N3g47^턿_xs _(wݫC@.c \ч/?#,9;ipZ۾Za4>ḟ^_۷k7X}E@3W~r;􅴝76ZDOs=e0Yn@+QG|x瓿;w&tʮOW~;r`3OY}2c8e]rAA6s f'O՟J}_&b$Ijh1ر`\1t0TX9{w^ X?N$yq;T Eѵ@ ]z)1Zbw}=܂q=}|5駀l"bJKP1,s 9ho҆<j6X>a87;n ԥ 僆*LՀ~nƨp &|ByxӭDpȦ"SP1vbPݴq4G-hsEP x3^ąS'ѷ;TXGiG~1NBg)$kQY';'k Y-Htb[ mAf"$hP&%cⳆcN"0uUvxqtA)%N-$5縵y:ջ ZR>s+ :r8F O6T甆vx8&L̄S'g~ʮQ4$'K"flfn@I"V}d?RHrfMC jb-eB#$#_ l.*.L ͋kU]oԽhEԺ:vbTv!tA' TkÖX]&w@kgbŇĉfz6,fhQfhiXѨl23Y0P  ")PCo eXgN }I`[ 7Q°O`D^;K5#f#a- =(|XcCkbܘ@㨂ÕvxL:&G-ʦA * FEt 'jLC,_`|iDrIIiWǨH=-Yl8J^xCЫ~EBJcCd1Zk'}J\ZHd U8LƖW+D.Kq[wORl *@*AubQ 6TU`j I.CoYU>vZ+ lo(AҸW| !Z|Se %,4ء I.1'lbx@j4B!po,'⹘sOIζh}a"OPl)gMfq\};cMdZ_U%9mupdCC᪵ƪJح>2.3N¸0)cW$ގTGrA?=N$ͤ"Z GK0%D[˲6Apn3ӽ4ĵmՏp9 =bj},;dP: 6Aǎz=dd1R7JgED*vwxs~6 ټsǎ{ {_9aI,߯6 vk{~zZ"0Oq %[֜õUC{ u焽4{gD&`2F$϶&g6 k{뀼vsk |2]!9l0?UMc!,c;=8+Wﻸq,G6CHL '[޻[gW"\-ބuOaxZ$]ݓB$ܢ8{Ӄc~p2C |yoۭo$jQgg3Edc-r0 #1.x $7?/w<pm0eݞk;?]w;Zo S> _㝝o˝.r:ԂnwU@ gNI v1X0L#jqkN͕VjuÃ]8 W'H~KŁV@RSF9\Z aH"S"8Gb9fA*mdFtZ'HK$vEp&[ю!, ȥgJ .99$4#A3\` :>_4q!)l90l0gsc7;kJIENDB`sinatra-1.0/data/theme/default_cover.png0000644000175000017500000043723210750753211015313 00000000000000PNG  IHDRxsRGB IDATx]uۖԞ>xwsvD !^XoW0HDo\(:1x#bXJȅS`}1'ԁ:w޼ZO룏{#{9{k9}>A&Tyyi)y|7_|}7_?ίm%?bL8ZDo7_|}7_| 'G"~7;[_{b}GY"ڧ`5#Y^Kߛߪ va} {k䚄\[[&5@:];qt>m-Gy8f?\ºicGxtu  >)]X?ۓto"e|o}KHz=P{OLw/fEع1>{=Os}+ {C&[RFFޱu3[_BPsUȚ'B]o:8rS?)?g/?)?A./|*X!"?+"-UFH<)&<w:Ls8Y_ə{g{/#"kK"SK%ӮisU+qmPly:s ,'KA@aI Upn4؏:89װ3bصg?m'2h7&}.XS]Rzkpi !%gRjFDCjAAC=r7l]!iنx &&RW 5=wΖ>Oi5+I:ȶl}~t}=Sϲefk β; Y]qXb_j2A!A=)!(wWsFb "!ػ8{X|.*E.MOT$'Xg E"3y[*%J_MAUifnBTE֌_* *Zo"P,AC@2xt,[7hIheqZHcs$zl)^|Mʮvѵѽ{J?Vztth(MČ0]g{Z*cO&"m~D~Is%egn;zH+plD@Cug yNly]laAȕ48LO]"k=mOطhSE5; `-l-,NXjQpQ-e J)kZ M /ww,ߵ+T V+j=E w&$p>ne$߸'p"c+uzӌ0H#FfNu;vSЁc tPa#γ=C7AB#ܐeY`fxZo^g.gNR'!Q"ѓPvu ٰ=QĆw @c<{ڜ4"!Tr-,8,@S :]rEQ ."庠媊"@Yݒ|)YĂ"_ܾXE[揺8p]~ GH}ԏz֏@}*/kR`P.? =?;u^ 9 ϼfk^gfM6xsgtԤ:ꚏ~lL7=Pٳg[?3k*g^tuf5gx<V~@P-e V_*ArQA\U*hU<"E_*׮h+[+/7G~\kG@ nzC+@TVJel a$~yB'PL`ND 21)ɎWB<Ըf/LIA(p `"^gX^x V4'E1fX_9!SLpcb49'v>u [',1чCfqmin߲玸vș9~ϥ b%k94 Q)EyP\U.RT/K UJh܏*!Wa,}K ȷ ՗׏yaAn?*rz  To|VTQfnxFSd^6].V;#Bw$$v!}ڶ|{j=Bto|JsX gmmuDL~8xm &~eҋ됤$#Jr&S&#uSs`SJE :^_!PCYo9ϐطRƵ^3qjz}-sKKXŞTy*"5r{NwnD1v^C݉=>.i6̞P|l k&LAܧ 4ݑ怐t!eqק*g:.m@EkQUD _ /~|AѯWË|a"h-* 6+>b J;x*ܸ rB`|Icnd >wVrh g:qtD8dfoQWCPa} ]=f={3T(uny-7LG?;\G™kqx߁?3JY{>D'sʱ}fΩP͛O%k.l[Q*e/C{E.#O)8a^._G]{)U)p.~UyxWpQY Dn\؅"˛A?Cj}n/5Wu/UnRR%m%W]UFfR@t&TdMO3FMgD6^J00 `" g\Y.0b6 J d 'P&efRL`JiE<-{ծ ɯdXiBe?o8Bwfbⅵeƹpch_TnY$).߇[_,9(KhGX޻+e麓Crt[k0p՗Ug/V٫uZX%_x(if4kZ<^ExpG`Qĝ \Mozqt[7Zuͦľ[33zU5nKF_[󿅒%֥ k{l`ghw`4꧜g}e7-[wG7o{9y!c<)OO\%[R_ie2o *f{EZZe tAۿVˎl傺[ܱem}x2{Metq'ɐG֕dB ?=5zMh'˾1}1\R(?#;&|p0h|{,V߫_v*fi !NqU{e!AÔO%@YҺ٫,a@+G`!Ջ@&7X2s{/r%m"!v@hc2PWg^Ue4':p[ ]r3?Y7<ȅCdpݕ 0FM=g塥f2h E!n\vv#o.tDuLZHY $zDKb^ز°Wfb [:떅Q7$f2cgGs7C{q3*l/~g`bJGę;o\ktk>_M|ST݅n"CGE %btܵE})Uu߮de/Hf EUEg9}Wx:l6^^XwTmuWm|xBAM@*AF]]9F囷6^==)}M-dqE`s[v8ȜH==A@CAF_5٠"3OPX#{5-g 1i?4S!. QHz.}%UQ\Yx_ h݃<<^`Wg y7+@NuogW^Ykgϣ=7%)9Mh}sԕ|_J5W,z[ߧ[BD7?0M[dAZh ,_#m}% p[_w큭Od7UMx :,Y%d̐qս/`{,)^Bfx0t$KjXPEiQֺRVi㠛9Ls[5ZD@&K!ȑcA&2ver'9 Þ=&œ?no[F֧hmb]30.R%AtIdaB*vʃRV3VGԃʇ, H1b#yJ␶oTuTpp³7&€HuELʒW@[ #!ёsrN#U^2 `2K i܉JiֶJX$Ha1ks*!lpN~El `luY) ]wۏ1u^Pv͠WeHNU ;k}ӴaFwȭ% >#=ܢ9&^u/:f<_J)̛2d9W{nP@䪱_VwkÃ<^/r)MR6qJܙ-%|?ƺ%rdgbz =S>ž@Ep[^Wd v=UHm ճol$u>{=WvS͢Ew oH_5Wٲ~و+o`umH>40>8]E˶vgUT>ƷsݭFN۰ja&=Rtz(̨%iΐʱr<%j~++L9YNĐ9kWhk׫}n&ڡ&7(uuVsbmCݣl]XEH< ]jG9׽ӗ]{ȴōGl#GgR,sz1hBrP@1l8 27l"+X y IDATjTU:  :6VuOPY6\)eRۘ͸lrEFsP-anb`3H42XS'<G=cԷаĵhO쿅n׿fuC0bV#5@A&ȡ? >@lCnA{Z|эgWi\jxeAZ"KE)govP쨃):ɽֵ"ϞeMq,Nm@WomE6tƭ%9nIR1b)̞&Mx jdbc'Ֆ(Q>PGS`'! 6D?55uljT1p6H1>c).X\A:"V ZC[ \=Nv=%GY@f݉`S|x /Lpl?&8  o%YTA۟Qu@U%%d t SV hH_37-o&5l%F:N31}e)K:UwxU5[;E;EʇGy,Fkvf:J.>uRKGcQrGlH^jrY-11ZE.k`_U磧t|xwY{xV=oοVQ0ңwbpXTJg28V7#3( i3RSJZPw(tsr󚯋2\LͩC rwEeu]IB&@pmftֲռ t.X[-Eyqw{y;*bےYIF{g@oQ?^<r}KĔը %7zh!&:Jx gTKU>YD{t3Uhv=`t9ww.CRzf6SoFױu!:!o(:mc,WX{&hKkL ‰Z1kZv5@D^towi7AX/m?f껵zb#+2;Q@flތFD$TS<*$^_ayE;n--i1K`ZzA#@]ZH u_׽p;ptYr Oe,16=᪄ncyV3;˺4mc"}=v(fd ZUKz# YHv#ɼ +FG`eB{Sk3Yv?Hvdef!5÷,# ntlRT5KMXY{Wi6Ǖktq=Ԯzf.ZXp#3>{XcÇGy|\8qm#$"VnNFFVHt>gtT f # Cw)sB5ɒ $=#.84#j4CaG)+QٿDk2V=٬5_e!%XIic3Pç tuP̓h/ ;H[C55xӉz8Vo8ehA)fE|&a߆h;2E ȇ ەΎG֖25ö^MpSnu#9(UAclW+o{^#rTLFfxx(ۏXTn^-Z_'[u6 `s׮N}|P wbYy !Q/d?p Ac665nd3L8}Ϙ$ԠGAeFL{b9~ ӑg ?inzw0I ՈUu8&e?cУRĮggMib\H#Z=PNDy4[>Gۿuo~V椐ZL:^ߠ@^zY.}6n++èQ YBR^zO`vQ?kWZU~Pez#bDc歑i RLATZsKI N6@N2VsmH`@ 4`Zeit%I{z^•qAsnՌt D"o?ˣ"**#&$ V PCA$SkIڐOUBΠ\Nu}e%qY.I@SE!:,Ш Ig7W u*7 {Xd<#ׇVzVï.;N78ÖZS9[ SdG캚qiErv(ZQ |} T0"h@B+mP ]uc] NF:2ژ!8O:ld,+:H%p E|p&61GчIxʂ/g߿d*$@`)~H"AP==ǥ'*;fӁcjPkgt}MaR6.Cciqơ%SWuNVT58{%{gAkͫKAcUD.vriѬ\4@ 5D>Nٝ&) |[7 g #(kI.9’A`v,UݑXT8)rI_gW|uH4upbn蝖1#oG*ekK3f(EM&u>éG裵!f }'A$3ݑH\xRr . h F g?ǫ\>{鲏)W/hk o )Uo=o*;,]2S`Hd N'O=G.]1d?tnՂ8(~(5%khH2c  %1wqE1RԣZftsąt<2ۥ3* 9%6ۥ_ :M P6*>Gl{kBȑ~1D:覉@xi OŴb[hP2#9${]$Fy^mܔW"'GR]e d|1>EP~OF朼vԪo ]DY4*8%NIuNTͲ#1I5rFJ=g`<%e46Q(#`[?ts@)'qA2ex`{S)ll_k˫Kd4[f(gC֌H2KA*H20P:ە}h]FKeÛNKlQ߱&_O"bDeENmXibD9Zb)Gnj(V䈒gj[ Fң+l*k8Yց[Zvu0G󃤣x&'ϜA^\UkYgqز6#eʄʽlQjĆNh |gZ}?-k !X< 1-8ueӶ^\uVi-h݇z1[_,9cCKךEm 5(WThPu'R$66C pdMf h&\`~O]@dݕDd,[oc=#Bj=G fR#FL-uzYEl*"#sv2N$w AKv&:a~ t}PJf4˦ ;7Gح ĵ1dLQߑsA5-'N^ހ>Lfx b=J"$M!J_64**~V|aw125em¦P !60W13;3D@!yT;1{,!4ɏ:okaUن2%5i{1s2DƠ9s/GUQZ  q`E5f+%]= Pv側]/ã<>/wҳTwTC7Y9 ̇5f葆 BƉ A:ǽ ^y/;Hs :F k CǀsN;gH۴7v|:P"T5$끙v' w$NXRI7G?QrpW6_1Uvk5nfVNA3d!{5n~_kp[YZ&xձRgBLu]mo q=8 Ug{B_[h:2/m{s@T'oۮi(Ȥ 1lœaQgLUsK`xnkA-b[+TC`)lkQj/aA;( Iu2ֽTCFV!+3 vH+A[Гxd/0x^U-a} ]_~47㮣윈Bd'5t|6j&"8WCm$0 zOQY tS֐OBғ"g3!i+8h ng+ ɉaa|=G$Q;cY}LY{DE"^}UAfۺCAH Ж2G1P8ΠyiN$#n5 UQд'4g Ir60HG51MXHF;,b2l-IuTijN_z2Mq}3@&4Y!!|e>_1*sPqꚡ['Y]UÔ1V:HdܵCْ2£}䌱ѽBS,aϸXcIʒ wߨudՔ{BȒKZ q Fofg[y ^ RP ZzWe CgUA_{cyNCYr$6x#@V4=qm9+;Q{Vp,-!Nd'H:V'k52vTCx,g#}p4Љ3}FܖsAIDb`iN,1R[X =)_"W'r[pٳϪԹm [,Ìi=?h ?9*NSfi6+G V+$%G2]l nkK0oL +ٹJԢ"\=uE>c5AC};B CPzw)p>%LtATՓX 跉EwB0\3AeO!DFM+ۭ~iM  ab[\9 ~`TAJ"AKdUO$LԽоwk5UݥI%FCdӭ`jBq;_,Ϣ$ ϡȇ+CEm B@Dx N_Ld#p4C" [# lmaKShf0M4m ϭ\.XA:#&)iI-DF;*쓵{ߠƈx[bYD4'  谸m(=l$ @V|~8x!҆H~Θg2)AܡU؈dLn*`6)><×E.f65^Saׁy>̃zx/{ IDAT lxȉ |ZW3ؠuH%=>JZ:ΤyF6Ɏ6攇#x1347:{cQ]u'$Nִ'gKnip1,?J@sd\4&]nm{irXZƍLA;cTVop5}[A5t HTr u!B${Iwe7-q${}2I49dfw =Et;NBDQzW 5N G{.x9gkQ IkFi`9-fޣ:gQ uI,@-"30633ql-N0:|ꨣ*ow2A,sx%Z_>  Fx|: ك8VG{Ft4E2бߗ"A>UU^.iz16wbJKW~裎J5&Z'UWct{V 薔4%!S%(/ luk}K՝^V^[mN&%eߢbaD]w,Ck| ѽ^b0`lA"&iJ;j{L1S+h=m|o}wv+L}E0YAu(N&R>{o?/P afP?fۉձ7Ӫ\J aj0~F=˪qv]UO8j G_#tP!:),=Ng41H~ѕoN5d+!D(.\ BLWMN#ܼ -fS #8P ^=w U"?YGI^z$mRDZL}VxѦ\0ujwfNMI;ʌwɐ!*([dW&gNOt0UxvJPsRj}ĉidSm n Kh]Vx(nqbu+dn$aƆoI9 5{ȷ ƪٛ/fx%:~E Dư#ti,GCvlU*'ìStkS5p=qK)wا?1H |ԩwU i϶d`(G$?VwA[G v^ ey'ƷN FeV^ާ% mvfY}s5iV=WqX;(C)mj-S ]Qnb:.>C:)hvW,A{Haa= ̸dd.ùo>GdUm+J "[YcmW$:[r [W磊;5&`k#g.2;LT8Do\%D,L 3!#g;v1|R}sB&)@sdWSBf D.ΝZ sF\` ٷY>W81QCB"Y#^8uT3I&t= pVvg{9ڍ͐%[33-cFa JȘ(¡2 B۬#XhΒ-5eӄ ' D(뮅 #^.$c m"Hg~x|'@"'N8[P׺ 16K0j= S uRbmR<@2!`vիpj?O9p*AHy4 VJh|A˴-iȨ ġMݺ'?{ӘZ;հ6+t:kJk:JI8sdxpȎҏʼn}AHC;S]\-vi wv͜ޏzYYe9ɉYĭ9{gb$Gy\UHttf,gӌe|'p׌XyW5+g2QɆ|,?*f.ޕ4L_t\jk9$$v*k2AIZx \s56*."R_KԚ,D euy@%`lB׌m r F$c'P݁ n i9A8g Nd#EùfNP72]5P N:?j-+D 8m+ Q|wOW0ٚ Ɖj8D׎8zjB{w׶9ړUSoK~ӟ:#j8"f -e, q>!C";\4w&[rc[GMT[P4̺ >yv#OT-7PJ`fc2cM710mc"a ڟgmpؠ;^ ubhD'n$ƣf,f `Wa1n&RUVgy~g[汣Yms@\wkue)?Xp4z7ˆ۽A@>"N~ôd[Igk$N^AP2_;!SC LfFI/B  hmmВ Dnuv:\*, )Lzaœ+͐ N":k<8M a#~ۤYFa .@ T Lٳd[1fJ[mR1C3dը߁kuV/b>:8$ce<蓅JJedl I :F゠ijrI! FЊ >fC7Ŗ655"QWroD@ \@ҽ&$MKm):{^!& L ԻD}!^|(iÓA:jگS\SXc^|P<_GC̞u1QqM;98_`ރj[!5g=ƒ-1Q(ʤv5yK'y#$Dp-/ི @⹋hiT6q( } s[m>2R7 ưbb-P!KuZ/3q2_V> m%7F}[sG.WNlp|D<P= dW(.c:zP# PSq6-7ngLEeGii7/Het߶iaɋڱL?jp[lN=teTխóy[6r,!UƦb1;a*n:ȮH/ wOg$zd]89Rׄqb+ TW ! EVlQB7Nnd!ΦN =VgCGmE'ڹ= qBNĒRPCd~Թ Zbm@X6@h Y! }SnTVz->HG/j/!r3U;%tsrF$%#6q๵ђ'B sldB5dGG) ;^r%Qٚr$0}q!vOGV֖vPo?ӷv^AKvA3'-I3 ¼klʖKʝ7NKe6]y Ϙn΄"n*c?&6seG2W[h+#k(⃌^^x!F%LJ 8`Eɂn@B8 P%=*ZUr%7q.<#u4u&9OMDhGArx٣<|N=_A}"{s4"[8AJ>:(1@Et.a {2]+p- xXݭ$j&ka#Icrl w0u"ڕh#] T_=ba!%fӵ @Frd8/\ !N 8{ Pv)/;A<@@}mu,r'؏{c.A:HryŔZ[>\" X턋wczx&q=J-H@]D>JGJ"ͮ I[s"ڀ>GI}LC=&.,J/ S%S#q3DmB`qFoZmr}h|DV9{!`$EvtȆ|Z2j؎< s%ԃd0#{8"Q0̸[;A~;BѺ긆9nXdEGp9W{y;yQm&5jrJH&vypS{IaJQ&C~PnFk41 $>Ï~ r/Ȧ=fZb#|W'$&k#OedR:a|Ίs5c1J2}AiM|[{b(ll [m{'VFD) `ED0Nl9 JAږAJCQEM[SmUۿECKȳFe75vFYi+>J z `h.RX}W16W^Ӵj&g4Z yoG2# G\+JDCL'I'R%(A@YO0aVtDQ>zW۴IN垏&^G7۵1 & r@Lb"6HfǾF~ %$?lPA ^&Z'03j7vq@]v'`멬  xdtr8hmo{i#<}ߥl4DVOrftAn'I<& 0eR㿾ʃ1U!+;(>%d.g ̥3^;98NbetWR V`9;~ZUt6+~gH?d1ek{Ӑo*%T}HY@XKlh8t;<0v9]VOQv p(9 `Z&.*пؐg#.:Y;L13|!*ʌY0 XULXIرji>ku+o :DI6ZpI^kAX( ki aA>T;<<66]z\mOxH =?  7!{Y+}UkJV!s1{8׬{=6@Xid.%%*7f]pJ',q-P-1:^2雧LSo[?Ț1ܩ!:y茰3M! 6Է;œh;XBi2s r5C۸G(.q<^~x/ohp퐎>;V]吚B$bU,DMy-e: :vG.u⏥^=ɨA@ZaYF46kBYD38L-IZVgFA@9uHXrY#RUTB\a;<ԫAL# l3Ur‟Hx$N0 `@=$ak!d3b Sf  nŔ ^f!g&\ߕiUejx;Oo5\?<ij((dA¼0|M &#ۧzs.Nl4ݶQrE3Ar0{B&Y12ԃ&ꈊ&fxG?~l惏1AZqgmz: pFQay$ r?fi/첃8mb͚36EC k 6iS 4Q }*J^1Kd$\*p"!am!k\8ބ,u/yxnB>=f`axi*+QlV 2,h {;PDO:Z{MR8MrhKAk SW=Sc_8)Gt# bv\8{ X?XDҜDyB]ot_9`XRg9'g}%MKU>rYDݫ]k8d2]c;O^[ ~._t(>9 Ve %3aGoߕcD= bCȔћN n*b7F"ۑϑ9`6(dS[X1dJP7tȓ!N9Ĭ6mCHv  Y]CyV8*%/7yv$DGPF|ׇGyY޽{eGk>C'{J]5>7%gLX̞#T2^|]DjPA<ʣ\Q@p|*TmFh  9{53jGH=Ƒo[2JY-4fy W9&5 з\(EIW8FƩhB0UC_#uza|I?ȡӗKY0zݧfWѰ`ni!Rjj1umN+DYA CpAڧ>v̆mC?]峼I߫z(dsEH+e"!9|υ2:T>:$: ʳח=)/$j#^͹qd5BGÒ^Č:څKˊYA,we U &t1Wi`<##vX͔.YnAC},L6h )gFwi>B7 [bLo֝]zߑ'Q-Nݎ8X Wutb?!C`/欭r#'b72."XiKCx!;[$/r)R|'yhY&Fl:YS IDATBVӄթqWO 1p-HNٶvE@V0oՒ´,ZOK,v_d s2\(٠毐:{?7Gc%O M `rc AWMR<"&AU1.TTkl覂'fɜЯ Y+l7mpk"!Xcvդ %pgtE| -dK>1 aplI`n.*a:"LPi ])"LO^٣<~ni ao;Ii/+7YO 64:yzT?\.=AD̃!vcIʜ6ժʣ^W = 0!j>U3LLt b̨ 'NUzH:Xۂ*^}G}^E IRg2zBThץssh;4v>k{,˖>FQ·Yn8 q*lR!X;"FY.2'=7ۛIaґCZu?oqugl^ba#>?Sx9RV!w;ߓ_2Ԭ䱵WjLĮޙ9"$Fvemh:yYMd^ǁ&ֺϲ&vpsp6)7jPAH 4%6M_; @gE"ӈue@EDn4oSSSN@l«U}ݱI>RE 8̊ѯ;z3rm$@Z.h߰F޽a3Uz-KGT"CDK|GϏ~ã<|Nޯ_t6ߞOWW;oM ,c*'Aq{0cP9eC*{Y?~dk9p!OlT2^dī[C0_9M.5@HVٺ ^5m冣&ֽ4Ht̬5pUH|oτ 6p/mz4KE D8D‹F9BP`J-AW Cr(ZWZǜVDz'y~ 1]q3Lxfg0 Dh =4y((=k Om;F OXZV9m5 T4Jls#o4aų<$O͛WJ~R;C-p%h׻BKW)FzN{@*9{(%=VuzPbg( 4>Y˾x>&z*i(𲶲ec0 kSSt V;]@$No .ɽ6W &0j6a#7+\n;{ز(wQۘ&hD8{U SOq*ׯVnj2 YJn[{)A*,d1pJ(Q:eopxwaD´nճ8]'wn|-w6{Sa5间Rn@ 4 *s^3=|h{'FKȜߤË<8Hf*:}\⌘R2BrR!3㪏"R)`5-nAtD|=z@0%PĴ/tee?a t\]o(r7]Jn:x +eoqlE3R}QT.5Sx蚵r13r0MLs8a:Ì$* ~:p)r͠`2LqVD VT5d5$icXg| X[AC'1p] :Azq7dEvu ) i6O #GV_#oLf)o4ѺGBJ (dMBWA- ~PIbdQbc&Z6Z ޱIV[CnO4ޮLjH'(4sԹ_t*NmfSF zchP"Ǯ};9 jYvʁc};\d-ulPԹnmL~9Mr]9ћ&oG `X_'"ǃ䯛Z몹b2ܙY9$töBXDXxz*A`Zi Μb++t`,U  D?Ͼ|'W%?<[vgAka:YSZ33>C:jwdN>3^ku֗?뻁kt^ Fv5j-SˏHi)o'j C&slMȺ: V&Vk"= Ǽ2g0ІC3 rg,@3 A* 'T[#b3 (!Uq.LIwd=ۏS6߾oY<4~@ID5,x^3V=kϸ:A3$yWLȒ%)Z!pjD9a@dž.ݜB8ػ.]Ctv[+t|iR0]!P#Ubꤡ ؊Η P3cA $9ozk2N&d1C?I* /(cKƲȣ'7%sS)"ӗÔeri[pϱ#qz[UR^|랈BK M$(BҠd1s\ >|e[&ni^:dJ޲s1Ƃ(uYC 5[-׍6p5Q`fg.+oJU:o]8/ I CaX#9e:@1\AG g ͢')1R/ VN`|%(UB:(AuY]M^o"EkO}Lhx&߂{`3O5nR\7#(at]#>De>`?LDrq-aw~.;y|Y:S/Yqzx' Yo7#OV=Bx=B{7GQ}k]4dȮW0H URIhO$$֏m1b11 paݝƒe=Yٸh/lm Jx .CmYq,6Ge&ئ_ZK/կ;Q 2`p*nU7чGyG%i UagB0ABYs2/?H} 6)%L?zWe`h; ì a%Д}^'?[قȵ3UkʏZ嘝pF]!w´3ٙ/0dͮE26:XAQn_mh|NUb #jMg`V)t4?p'JhyLMINea8C-8}qL7SekEjzO1Etਸ਼AsݘF]HncQ =e[~<8?zUdf5G' \. peM3rbt}%:'WZ.A${b"z 0VDvaH1VYNo>фr \JQ() J  ^1YXF,!6y"~́S4_u~Վ#{ὢ޲9 -JL)i3xoh:}9l3*ؑŰXjC5}V33Cƒcuu8cHlqcL#{KFa70/q|9Bx ~j$NNֹlhxn?_}S)Y ~.7Y89PʠEiiB 8( uq.>HK!LߟŚS!g^OyQ~H <~0F(Ljfyib}5&ArPcIs v'03?PQ8^& ~NkVmhcb㔎UJ|Z갖=ETB284#RjHTú+T/5WXXDF_5 Ib/)|;,G.R 䴺ܙaߒGA#ýCSKa7=Zj͞ {)ǵ nZ!qWgŋP[MqBZ`\*A(PLFRcZhG0haG7ŴuQqӪU95P$C)U(jvTb|+șV{`ն93՜)dn7?;}~}+'[ (JBD)X+vlG2BnŷF'ax~ 㰹kf߷۲j4(Hd d'iB(_?QK4%i J WP=f/c^k vjQݵ :/w ڀ+fD6U 1MTSD"Lyh\'dx$kEhТ'I.o6^{o=4W#" `s^yl ݦ{=#]nҲͲRREs,iӀIJ-з`9 活 םgq]F7Jv /Ptվվ~앝4ܽR?k{oւ*z[U:gl ;uv*5Bt6;^$5Ir}ZIIkcG*16g>mns>ʓW3jE̟lqWt^V,^2[WK#|Vw!9múxѽo)NB1[':+MnB$\ wn l$"2a}O 1]!5B~Q#Vm K8u| 8"! $1)rZF,E&Iv޹J:.+X!'jgWX?M),\CH hæTIyf.D</Ȏb@ {wŒ1Fyf=B/9nB5WH (l~MUG"VUW?e~cNCX;B FWϲ_HA]8r+ͪgFNX&> ^/X c Ðϱy)ѳ4#{5L8XaqHJE?I:e+ǁ Й]A}LVBQ &IW[)Kx[ҵU"] q4pMtp{D^~ʲ7mCt ёW bo/RwbF*&I3* r ʭdO6K' k -M񰵹l94"޹! EpMjrKFE6džtXvB8iޘ;,1ܵ wA_^]w"x.6[ G^`'gdE9fHuO-\m24r7A8g*$p! - -X ap>'qxV,97 *Z!`X"s? OOd6veq,t3ڤ<#sKD4QUW&(PVG FL8FQ0^}x_bkm>E)M%ƻBjPMދI:oiUS"-Me7m)v^#&E[ MNSV_'Wu~Mv~ThJvkM(.0U<׾&p$!Z@x՜G! \f_Xo PpU} z4/vG\+&7WH)S%^q'$> -_4fTʐ)Мc;(R °s)pgzV1Z7~$ͮF8fêecoo_kC9KfDZWg`Ú]IGj Zx3;t],PGBy 1}wsd_г.E@{Mˮ~$Q)]FFX+ $^<0 \T>?A A+z:;R%D |we .Kv V&oZY$*2ze Vrf~ \AAVpNHTl8M Z`{%kO$XV]iz8˰_U!lamF>QDQ"3K.R3$}X7Uׯ2H\ >c%9?C;JU 8yMlj+ZOJpSp XLh9g\I}4kE/=̍F~W-tn5FD[DѐٸgdV`'GU Ч@1uvb_U5蠜K=_Nz u'ן`'_aoOI٢iUe+:+Ѓas'VD`z r7+aUو@ k@f+|P\wg! N($:bٴfg H0T >zR_^ j[cbGYdkOEtt}(Ȑ7BP3P}zVy&TydcΨT/8#̯ vkYY[UT-ӕ/PO`s.e;D'ȏFv6nJZSu>ݾ*yMQQ[$[A&{%V$6rmNuX!8 Pc`'fG*2Px,Ui̮'RCNmBtwWY z$=Nz=Sxn)x ~jm2yɥ-N),ք#'p&Uml D!BӁִak.1xi S'! bX@QD̸Q!6y,}]y Z90=GO5)1@~ Wiڢ%}oIp9*8 f4oÄ!eZ3h*]T(:ؾҚȝ AEAE3J=k Aٙ4q T7&ɯepsI`:H49AZhssz_dEvǞE+{JFK;EB/qZ / h1,BA@f@r)~fM?kk鿂G,O1p{ E!E^P|r~˳Jc{?ayix {ل t-c;b~5+Zs4^b+OZur++@I{(6Ω.NxԨ{t61sjIɮHGsxW%(mef{WCWy< 3mCý3F2wݬ7G0ˆӎ BZ.F'(K Ixi>okQqkDrewg *uw168GTU߫͜FaX f,J,fQJ`Փ[N+n ( $X@;G@Gh_B$ڜ{0qA N wgս+$sWSL(S V*&3w"Q2`Hy@Ra9t3se`a)kS?U,™& 乭#xH_m &ٟ6<`U0 xjb8>^$w[3C3?LX. 6O O[j!]ԤEc&<-hx lU$>THĭn ֛ X5$'rU;8.j Qyk6#kus[*kJ/biA,kgܩ|>ڇۙwuUɾ& ?&Ke" k|B&#B&Nj]TiiG ?'+#'DrgQ\0rd 8:?qt3Wo{1т$&I¥F&KB!lg]P2N>*)1 >MVZra-ERY|YBYF]%U2  ,/B 'D徠pXܓGrG{W$L>LEOAͻJqDG1W <620&=7D!B>s[qU)1z]s6w* BS^gAz*>l#TY& N“ sJT\6gK-;Ga]ɫBGS h_h{Q#T"MϸV|JȺǴ :M>%ݳRʜ#B2[Wek+N8#=v DA׊i5< qFL'3yP臾&W]Poiϛ#M6x^s1W }N?F}#YX i\Xýx 6F;dV{x ÷;V׏w{/=$Y+Hdf/.MxWDe#&Bپ|.*A=Y:NV?o| C}nj^0?fu_  /XF:@D5(It6z`$IѵzF!x}Lg7L ?Bp^L"Ð)W{ń\[.(`(*Ϲn;Iɹ6k13693Kh?Ly}VAǻ$}#} E6Le='4MX/x70IZL! D`MDN뢩J b8~QލfJkd! cx7{K'qP= ΢h 7{mY{žR >]"i5K!UD#$:}A[ݮ1OᩃbCX`|Ƞc" 9I I6C Nmi(>i*-\|N5^қlT{AB("]0ɏw/4烝6ܟH[ؤԕ$ȠtB2NW>YОwexIx2;_?~_W/ ~z>>lՇ@L?Dˍ{3(3?N<9簜/_.AxD,}n<|{veI,XFf^9*f[c+3N#s Nn5g偝o,y:HٯC)R@)~}3vaC@tR^z|g jp7/-d|N߼0[}wD(D6|{LNu|/_51 [R(~wPY=Vy N)L`l*]:&sIOWE PH 3 Ol)qgm X#b2_N#j"&Z dB;USe<@?s?cw:O2'K翨5Q .B&O̕&P}hG(-%awӔw~Jk|-t72-R)'#BiF^[@-FɉtBt?~گNrДp˃ΪY&O=ȕ #eGQEo=zDv 5&OS.y}lUx$tuJ8\ƨYpw3&jςX4$z ]/L~g ,cq\tg a%l&==q{M *85pd2LԱfK`/}{H`Qw;}S sg7>)9Seú w6W4VJ`ji:*:6 #QE>x6US8F>N߷7{*r4^^<8Z{Zd/B3Uh 9&*84IGMZ!Ky7uC${)WLI{} FAـ4B&0h aTG{ZH(Es  Ә]! RJ^b @z&V*DH!@cJ Z|. ; } Mog<,̢w^C2-`t~h&[#qWܳu_#9\MGM~(HS~fڅ4Fykg*|A9na?O'?2du`Jij!ۊYBUdSp6(t,^E&L~/xaAz!ZO+!yhA~pJ>] 3;%ΎPByrq֏$FáWYAUݸk613II u.e3w7?5ᙂa+ά0jn"7jXFJľ׹y6Is]`Ϫ{I,Ϛ*ٺx._{7 "?+mlcw0[|שCb-J\1Tv[y|3lB&|*Ψe+Cnf!S\e[j95~֤/1_qIf^˯y?&/yJxܻa=]$xUNׂC;S{1%1=b]}i1=Bc7}C/ ϡZʕ$N&YC'J"ӡXp7OzPi 2m>L%ꁌyRD@% +eA?*|;4iN=dݑtGV,&q\`ߛ: g<(lF!Fhzfʷa _Ҝ@#acu3 ؿ%U=~@Jgiˉ ZE?Xiɋse@9?WJhwVW$&F lt2^TEaD-ɞrOԖZ̤:Sf: 2͂Q-yr)!u"6͉z>N00f|Oe;gT+b["`5<?rcX lmNj~ŽJ</?}R{E&4%l!M;vXA*. =o?ڟ_6^i;C9R5V3\2A$`!\Oodq ~ HS1$b?S9A?hb#,T'G8ٸ/YVL y*~Szb*\DFxN\*~N܊YDc{MTYg+xNs%lGNprkWHZ$YΖ\mr@ o#T=e|fubfUBC(dg0| "?PzrWU |LiA{9/ A/]~eeL߰.Zh'i :{ վh\yc(u?&\#`UF" Cz@IQfuL*:aɆ{}wRk>Rk LԍZN=_sm=zU zP<oYh١'r䞯 o4iULKQcw}V~})&퀭eI?4_dekvjܘe:Zu. }ĮBV21y47xe_}G qWILP|P5gWQg Y>q0Uc!حuGwJr>2fRX&$ťA v'c)h&rڒI'kzDAN!lEI){y|wR04]uEЁyz 5[s$ Mb.R! Y Hv̝kT~o3 '1;m 0zINsQ:d)Tpע+F#/L GIO:di$(`Fko_?fߌ YHLޛ$AgwH .y؇ӣ&N'h_ Q&k J*/STINjdH0 0@T \b2UhVjptA_h|x@3.:j Yw5b !K8Xpr!gA=\1jZWXL|X+~31tHɳ?;B ;dX@xATARX%Qiߨ2P$QH((:zghfn]`.p֫s%+6G.|&\j7$f.|m(aAo+gYјd42(A;!`@uGQB4]&h&c{I Ê8 ?f~}{I3փk°T."d[x~ 2,q"9y"H2Cȕsuot1) mHYq 1>{p"d-H1Ϸ[Nka5J6zQEQIuShWFCXNvO4uA *Թϲ:cl9VTuB` *h ̬%K^ǩ/ȵ8{L G>SÓB u4,2c?aj^UPW՚QEYqx */"i:b_?( :V,mwoj@l_#'1۬kC4 A,wŲ_XiMPUUE(ex 6OxCD0b3jC,qC,I$\0?AmxQ@)BL#% ln&U=]Ϡ_\;U)V"Dpܷ|"Iv6 Wdg4l)=E03i8X;"A'*z_HȦAp[N"z//z;pLs6k è,f*&֝;G%@VL1 ,Ȅ#!F8[1tS'ⓧ6g¡) P3Lж' MV8&y9ZrJ9MuuBQDs킡EuJ=_<nA. ]ݟ o.:1Ox3;ٲJ3aM>x~<PKT5Z榄dH*6jS4܉/niDx& n'f[FXj,ۧ(mh.tɻfDq`9#@]+^ Dܻ`9+f:$s}滖U wʧjWy%޹ҝGjqA chEı!4#f!lX; N].?1]%:rnrz 3-t oVp ^_asoX9 5RrF@NIYITEAuDz һD<#.y5{ l5sd{bI1 3:KsGS uLޜQt#i&᮱^^ -i[w8c]+O{[>6  gD:tv~qoy; m=V=^%k xg6 O2U=)c˾)k<C"ɲ1ßgQn&a IhVBz cIE8u*}�몞\&#`y;sQ)Ҋ1?CTI0X/ht]L|jx0)$yB{æ9y1{=GREkFh`J߫I^iPc aT)}< P" Uap5^'L o2(__̓"ێ:ǰ֮ک]?BAަg1oiD66TpzDZ‡J8c6eWJX6~"czhqKD~D@o FHg=|^5FLyi,ĤB`0G$a\v Դx}plg}Q49^`]i㋞{@tś5~c6*\Wrkp=Bo .ʇ.zeIx/7RPD"/O a'T/-g.f&ט& La߭<%p/ Qf I8"эm*Ɠ C{ɾl /'IK̎{+]]Eܮ`ʃZUNĖTϮZc0j /=Z7 _DdZy*uJhY(D*KQlO$ciԬ;H`|Kˢǚ s)eS^+1xŔ*^$'./-l_KV&~ ^G⏋ ~ +&v6~G5B2ȝt8xvχ rB΄L~ȕڎ/QޜFLCbp;ucCY̭cJbE-AN 6*/ͳw[{)ZW&urOÅ"ʏ'e _s\Z/{г%^Q2ֱ}yk %m{`2'KAc/;,a<ۊsYW V PH\ Hyl=`k+zOrG  4Zy{J;)! d~)a.@4Ά&chw~E'c7wN[>Q*ctSREzek\Ѯ^RB?H ?Cױ{8%vţ$],U; ¨tk>wa>IpL:fvǦ.*Zs-c ,>c/蠮 ҙh?CE26p*PrkWrњS~}+F*BAQc_)B잽UOj Lb (e T #tm/:K(yAPb]6Q`?aM*% xҧl=z'*1Ѻ\_!xTnB¯òB?rŞIZ4G c3T$TÊaAgїy6wX"F-iA;*ٴ .-OO &$ 0աɛI!pZ2l+M霡N2ЙOV8 ӨIkvz4<'sTXH@/{O΃墮֐:jk Z׷dNzZV t=ձLa' u̟T*|X XN{-][:b}ۜ3h,~'j~Ļ{fu.@d2"KEʫK+G0gہX_Nv4ہ )( lٺF~/9oQ޷1kAq}g_!(PJr#sG8(v(w{"tyELxV啂A: +p)k Qi%GnώfDS+qvΒ Fp|ʈ'5db/6Au5~Acy)$0mH?:7s[mUJ|rrų# (JC^Ḻ_]޼ 6GzQ ujjY_hΫI`Bn&܈{FmY{BIM0==E|)?XYpؔưy,AlbCRkjNwZk 2[L(<+WrX\^:q\wq y{:B=} U,2>4_ZՃ8l\%xz:VzWJs+P-7ݳL;\oxGI@>,+M b(o-#nν]RW8%S+~DGa;eׁ|"9Aj,XwN81:x=(xИ{d(%~?˳%PB[hJln;g'HF3a\Y2GLT{O\Εg$BTVF݀L09ўu,äC/=7kJR2-lw0e|kDղA_' iӽH+e&B*K4{|vbFwBD=Ȧ4,Xћ>C o+RPQWٱU2D7C?$CF"!+gKf爹 T.]TGĢEr؛`K;_A1: N*@B=HYIXȊ."x^wLD)-ΐn-dz8?cuq{bt>+SN|qp|~ ;'_ Y5nypw i]3 4}1>0O2<#ꛇخE󮟡cٵ=suVL+i6սqtB5`pD@{֜T&sM \x!&(LP[}-<.O2UFsr ^.hhItT)fe@X'[hj\ r9`TթPn=96kU5<~n!i)Gksʲi> 6/z / Z_æ2 9zrljKC|y'8e;ut$V-l^^[)5/Y(GgFAa]n v3AMe}?W=SIvd%;c>XH GN'BqNBRSfr׹xZZf= ^C? #~3&Mz66F3޴_Ku ӷNj$g嘗z<)Ie?%Mҭɑ+bE>3zWEg5 gu'T %#!,41x4ȀIz*XϜf}g=BD:ʌn\OB !{Nhz߮~TGZMpok,Q&y;ڋmKX9uX^ }0ֳ5CIBv!b3ɓCpK]|L{D84*T +:Fwӆ:9؂lKV{a5tV^f/ JOqjic#>.ԠLuYwE R{œz(}(EXkxPXm^4iU* Rƒ2^^ P6ڨ:/WٻRhZICEqhw|whJK፨uu9GV^E-?ݴ,D9V:j>>&5~H*-X]|"0I"FA;eI*RV=L L(Ed^ >W5 Ojbo|N3ݗc .cGb8X5B{zP[|"$ |b_~|}^]qH %+}< ޞ ,%ީ?Tr j3#N#b(~-j Ubb3ybNb\XXe=Gli17Dt&AE,/ʑG!wrϨ~`}Mhnc|A a^sl$]'@$S򪖸Jwelmb|>STih56 3!̒,\x>Y|"}E_-HqR IDAT>c |a"@7" s3(S}Wi=cCvH4/ƻhWD#on렴\03S!)pZ=g%0uR]@N%vM͇#Clo؇[YR5~'b9,M;)rT]ͮ?Os iv8mO ^ͪzw:AD<ÅPf6+3[`h@diՇ|Rq6SFOwF7~LdDP % 3~4":qqBvbddc鹸$bWq%~ixh? D8Q,G*Y➍L o{ [c}16lb:yGp51+VH.1L !3 ?6#*g8'Mjug_wFoS"*hz7r7%{MD"mih{]yx Y=Botjk^IǻU7W5m ^l9õ"c5] y> Xu9}`$oU7A!b;MEAƴiܙ=tϊT;S$v)a`I|b 0vx:-$F@=onn7[A!!$TP|j"!Im7]) {}fFG=Xn$dq"?$(nmۦ#Ė.=3kzA= u?|fyFJYȽXPYPFϳ?HIІ}+xux>(ݵus0U9_M'jaÛ&4r9bZ 'fU5irZgv(Y@BzH>BZ?8V??ڷ?[(Ŝ?.a@Mv U T|FvSL#ݦҎW׆EVN(Q t%ߍ2(^jDgG..lxҲPks 9]=F4,j,8as\ Um@ktdHcD]E /ڗTMڡ"XW[Y` {p`?/<|v^{AM½_a*;(2hnpD8sPɅѵqߐ>t?Qԇ)ZUg {uI:zn]@J*Q0\f Q K@ZOgKrC(%nB? <zdr@c')!.99IBRXQJbMt8/JS@191'H%`oFiMsm kB@!X햫w噹Y >#sN^CHhR?1c6Vʍ8i(}uR{wf/^.0H ԏ[^o ߀o[W4I'PЋ,)*%T$w9.`U͛$B8J.%kLzJ(TABV0,ZRHgU / {*=b9'" h4y_r s9)܁gi/{7+b´QQDt j]ȆuόsKiB⤈ ON`(}vp?s蠝QUϝY>6l#Jf?ƒ AJB@^5H/ XRb7$%p6 *Ebz{L&ysdbrE*uN"63 YAL|;s`Uw7iDV@DtP@H |Q]%t5[fIISۜսCРmrQr?!m]՚`[Zl9z'CM"7P3̣YYWsKn,0Tm%Qv$XϷhGpz~$=1_bn Fn/q:Y(2Ѩ+@0!=<$$z>1{>||6{.{vK=#"mF2fRMnPv7v{\m]:?`)E˸H ĘoYN#j}'=R k4 4ؤxシ"-- ZS0%P0bgcwYѪKuarN$ިz_%|7˂S٨`N57%geZ մêl*k0?؛tY}GIOa}'aӄbm\~#'{x궜 SjS)KQ!Y:N14G{] I=MJuR=ixY+,Eq}SkᘢJqzGI֑ѭ ƒ `L]-VQ5l "{dsz8JJp(j`YGC*i{dޡ*cA~xPGza-6+s]^UdQzZom˻=_~''2[u+В_=a.TZjRpYC iTo63 5R V~ԳܬHcٳv^m,,Ǣ}ϳziX5Z K b6WҝyX=)6fwQMN"GUǾgN["! +Q]/gHR˷_LOm@s.4E[FݲiC1 ~~ YykY3o 5x"T_wq⌉> x"d8UrI/i^eu=#TEimg?㏗Џg2^i^0`e9!ΎoьZ}?ϕҬ*csG`^uTW9 $Z\G& .gI獶mТ'j]TDCR]*FAʕSD0g7D{TUh1# L*cLD̽r bc~"J0+uf6'9Z +2Wy% (rg+>0O[GlH^N\h}W^ HVH=qC90WSm!;aiJzIͱ"&MlMzN ^ \#UgvLr)¥v-ioTɜ'p |YA;߰}̩U„'OW:Z- ̶¿v 47={ea$y*bFab"2@iq1VPP-*/Pc Z5N@@AaP!L7f>BnRAPvI 4z~pN}j5rP~w{}*o r5*xΈTdD T~w;yZ\3EaV |QETZ,q6I/ >N !hmCu}Y涪=X>@I-z W凇J0bbG;B-C;wrj1CJڦ[侈Ƕ'۳ `U[mt!x|VU%@WX}y|y꘴-7 ?^~*v4+FܔC\$ <%.z&򶎍\ꀾ'}v-2/5X_AL3SVWUi2> '7ٹPVjH`.:2Y_W[ aVok9=NH!1lu2w|s"PC=>PLFC F㳻ʬ=?UQӆav>8nBpW06 >O on3Ÿ5 t(dL7}{s!ֳOH" PqAMs|ޘH@o+Z\^#yuDG*irNHwawӺ׹d}3@@PLf-0д0zkq-rniHP4rd#!(*̿bdGu^Uid{= LXU_/___@j|8YX`v=8)/kSV#dR^O$& f֦Q4"j°JF1-dVt%MkuU̙*RR8q R^574Rdb!Cj?˘[5u;/'S!'Fbkg:FqwO~IHڬNb&hg Fܑ"nj <.BH\[ (D=}) 8}eX[%>HtWDlTy%J,yH@3Tۘ퐍a?__O* ">1c"dYAϼ+Hx]7L6/ yH\]xoM=I?E~V钩B c0Ɍ/oWKEI҂mN~TR"H Ym60J( q~Uӧ1a޹{!lB)QNV~fLyՏo?DH3)i*a7bt}dJfv=qk2v3jιM33AmǗWC GDHdVNrIMpz[2g+CnMB>6ȩ]֔ ]f%u7(]yS-16H3= y=f(ҹ$/bO ί3*9T='\VetںV콬l>\夀  ܛX>ȟDU};Mhk«7Dg^1L=6UA5ٯxT3vw{{ہ=ԅkr2!\EsIG;PPJƿ~QKI +ADc85|n$ H)RΒ+9F6N^H4 [襡'a^7z;(ojj- L<Ȗ7-LΟz=Tm'4ê k'֝"sQ%c V( AL*&M.S fmoxwoKfža{4hKX߾o_޻]Q#Y&*(E+ Koow'㳇jSk}V4[P?qT*|gk9Yrc14o{!X=^p.Mn<'Ѣ \ST!i+2u&$Z8prj3yY~cC羽-Wbbc\v^gy)O2:03+.tAg=%>9t)]nah\W~Ͱ.cPlc;E-\B:1MؽvoKðx6yoq m5wDxB->!c,k%=`۬5Z xǣ$ +'-]B x$P+ͱ4#Z‹%^Sri/o2drF#1+4胂5^b6@Y RfL,DѲwVtc'9A D^p~~wB8 j"EhN]M ܹnJ(1ɜa{A%Yy@-~kc߽W>\XCc=2{}WSezB[Üq:(Tqd8#/T@$B аU+G26cJ،ZG\a$ I T!2&rwb7U1?˳- Tªj_/ձO&;f-aV뗶O[!u~<)6I{ ~>;68?R5Qk4 ψ+j#*r槑Kkƨ]B)th~M<"GTR|S^z~C] 8ô5 hT&i:WW.d>ArhBFzvWF,',42jI -B=o )` =n:w/7fK1lpw!ړ&[}na:-XzS)b}.mL2<'fmHO,o py)NcDidՇITZ`.WaaFH9`ݸI8n$K9G}^ "%BW4秒hD:| (&{@s lR5܁J eDae6& !i;^.4ڛL\H3\!l/crLEr#ZtLyue)5ec$%Z [xh0 E^uԥ*%|"S*6W[/f)ʾD6 W:,:r#>Wցt(oŇ5 IDAT)(ȂV%د fb@VΛsxe6q<2~=خ}Z}ѰNjJ)8@> Gi fW@?n9^躈qn^2ERP8g 2NXXD}ΗFAD]PZ!% (se&@WG2,I{&$qǻb> ő39[*a^L,MT yfjqE<<<;%KVGe.EYq,e*#/3csSd/5GF,SlX\W^ QXJ87\@Bcsthk|\"A`Ed@hpsGQ]"tȍ'FEVVmǙ\P0GaMB0ᅻl4p;Üty@4LNIRxw6f?eal7e7J;i-->NC^c]HJfe|ĄDڊǪr :&lirO0T*ȌЭ6=(ydG91ع7AWHj6 g*H.r׶,Nh!A']}x-:šNO}D ڦ8$ڳ ox$ϻ=WՊQ ;-4 %lJ2 *0ˤF1wz<Ԝ >B}0jY~$n~oF5dAXƼ7U&cg16_m>粀e/ěX0%7 (8#WeinflMp\R,d(/z N |RS|sqx6Z >Z%.E 1(PU!TFx5%D܅P͕SKͅוFMdxDbOǴ\Q>OD<\}^䡓1& uUF5۱XXh*$Ri&}N+[i\Mcgֹ yb5>Bp $/A"U8hw đS'@[O~xFJ]TB.o H׌[4E&'o]LNpjh/*/Wɦ@PebabTdw22#PDvM8 M28TsYq=T7<J}1ncm(3s$DgGvhy :Ԇδ$0Щswo]db2s#䡮]o0 3fm'R ֹ!ݳif$}JY(n۵dS?ڷ_W,9V{˳_WjHA8tŬ+DWo=k8xk0;b^W-c$b,Vz RoeHq%Պbk(ʧr[qvީّ?DqX=R5B-B+ kî\  gV08Fp#}# }BSS+At]0*15jJ:3+=C:iYXn|ј̮9d HӋE])r11߃;M99x)OfWEq[;Қ,4L]E$8ƞ|/3+W$05`r>:)0]1>y|xګjrpTŶ}f3d{>7LIo,aں*wx$ԋMT+bo&L+ΕL]*C\1w3&B+W5>:ЏkI~t^SdgwAjmB<~7 Ng(b5rяvO9-56>tftX <|rPɭbB $Mav/~iznljeݯ6!Yk֜fm޺U;ZT,RkFμr'A,%!$դ};tu{14gE. e* D*|FQGEQ.93 "z gݶVreQ-}YAE2cږT"3@ OOt6ETBǔD 6KRAv*[}*#W~q6 '>sՋ6z'] c12٥K|JJfCNbp}fBhM4Bg+Zob @8#r VXТVK@Cq}Ү>{hB_ j3 2mib=q_!C%vKŨd'Jŧ~} v(Ji 6^B~NLQ%; Dܱ!v.1>x3.`7JZgcXz=h0_}~CX((eRpx,ۆ^9 nTT!ήi4qC xKi"&\ @"Bʘ%f^͓l ]1wibq!f'Sʷ~T=`tUBU;q0J!Ьdi 4lN|-F .zTԽQc$iMA՛ aw~, CĐMF$~@ZF%Mɪ eY3ߟ/DpF l8P.Ք.3$h9 Zzw^%) %"Č ߁10QkZ_e~Bď;nf$g}FDVێ&9wCvo3zh=$)Ɏ( 4Y2(*(8kd"")9O?61>sV&?3]|]-K(]{&t`c=n)%ь]Me,?dKHcҁ'a*PUx}qNF2H3̝zWf(>H84wfJkMՅVhTA7T+6rD]du$4$L=p&#:`eI/(כ\+g tdpQ)r?=H IAX>Š:^Op8T囶Jg~*)?߬R̽PR=VS0:ڠ9Chϓ_?*1mV4[T`\TIXMÉY`pe5zODr^+b9m4Pk!SvKAŚygsw⭛O'c`7x۝xP#0zdʼo5^R |xK bC`(*M飄kaM/n PKu595aIEK쪔qoh 8H;^QXB@:|'_SA<ds?GZ]v`y)}iLc FdFhJU@O֋@ Q%LFƈ F7`U:/.ץM+t>{ʢo̕RG:ijNv ۞I^iP_gEv@8ş}QLZxrnT `3c/F<[ =LAqqVKL~KHi  R$W^şb=/IG=pv3&oyR PvBgXs>UhIϒl'&t9 7Rb#VMTE<$(_ygeSN$l8IVb F %-u@9"+|kIU0'ptmMkdZ ;ρ|1GO{/pjHur%ϵf&AdVCxqR SL2{*]8da21TDxhqV:_81~u'Ur!$ytQ`dXyُU#!+.rT{ӫ.4 exC%.vP]z߱u ]o~z1h>Fc=y9@q$uupۯ<\]5˱5 ~v%sl-'4-3jj~Q ՆJcDW6~|’[ ҄Jd`Yqg4% $PcmCy93tZ;52} &B,hfFfZqKI^)?;c פF?f# $+#/)ær]ABgRs/6RօB +/1Z>ê_dGs&ifq؏"=쐂ԡtcƌTa/>X)M`=t*_ LrG6ҙPl$*)y$+) .Hcv|ʃ5'βiK-߰+tL85:w%wtLQlU 8< ķb~ Ag)Yg*UލH81dkL(Nvj Z1 UlJ%VO$>0.W[6OKzY|jRCԴ'p#j5`+I20a A@4goY +ӊphqU\+Tr >xOVw|CYS1u(+ z>^Y.RªiL#w{C Ĵ$UFx^?WRNF:ga9Kt 9JL10@rF:'c kR׍ʶ &탔ȅi>qӣ*S_,4 ,M|.J!ҵ e58ƨxB!tt"0Ynj'_=zȴL9! ?q)Y;Z))A)+3trzC|ePs7{ٔUߡkDt|>fKשTo dcR'mA76.Չ:6rգu"vc !}`P9X~G"Iv|PW,svu=ڱEc҂pZm[~J- ;^/աUezUX)"=tܮH_oPЍ g9F 3`'C wl^v"VN(-n+wYaW>LT^U C޲nz˯,v+m/PЦk,ʼnƛ_? #2_XB&C|޼N*NDmIkȡ_DGR =>vj9$R;?64*XxrYCP"[}kjFZ9*żW ܢohz?{R,]q4eK7oyB瘌ʔۅ@/g@q>xM+¦1`s4;47pM22V8@ qLHeUA'$?J?WMr,!cqkIqDIdlp\.wh%<=e+C!:kt>ۀ jwX ;>v8WR{uڅEbtl!w m$ d][9.E^ Uu%>Yjƈ/2dz8pR y6ەHLתD<7!aT2lOq7SS](Ljip#ţ}1_J~0z ]qpN|[KxkRϾ`;l]4qZA&&GJvmEyHD<€~PXu2TvIz~W,N;_ٞYeA<n8rR0?}=(0Wzl "gf+ IDAT"dmUyO>(ֱHj)&栽q?`4SN,X\_gq[L*bG"q l2tv{4\SS ;߻IEKBqzo(>Q5.YBwL{/ȕ -B^"Tn4 _M#[dDQǣ*V54]d+ύ8=Gy$CkD&Ɓߤطi}ϻf?K @tsՓ9J-ZB=`ukw ќr0TL} |BZF̉MF.*A?9gč<۶Qs*ϐ V:$Lrp> xX'X7L\@qq̵T\-|@OfKF?}ژF8QUZXpܹX']/+f}"ߛɾ: V̝eI;\H]Cc˶ϰI yrpnn5䊉ͣPN}>[Oϼ:,&,[x߸Q4}t+2uc?qdDȮS[(ߏ^}pŲXIќ9_b>ab.,U"ZSC;g?1<3 cmP*;`licvP~71s\f h蛐Ur*8w$-gMTX0'899g;Ź u C6 \q9U.[HI5)K$3nmPl_#a3DDudDdHP,l^kh4~j73"w> T'7f^9?bQ|эgS,⥗/榰똕#j'fi̭5r2{cڤ>eZ'UwV3.њhm ߕ-PB0e}~ <>V7Ce/x9)afT._, aJleާuaDs9G #G^ 1$#aƙ~7[;O]5Pyh&3"7lKVe7uGuo 9bص"e%9+}dc[' :_RMBߟ/!q>ϳMTunhF= Y>sL@Vn P3w cP;|< ӐiQѮl4g4}Za77+B/I-0J&6{ϔ%|]g^m?5ՁzFu"f> NXᭀx`D\gvgVAT.9ez)C7y,:{-Sh>b:Qt$#&G\CE."]3xYÆ,Vj,*O fjCN{ۭ)^g7h]x}R&}A k4EڒpE?o%mxl=dL^@}:0 (0~D_ Q|d EGYj#Bdua֠/&t ̄ ~9!jWs nQU'e=fkv{\DEGZ9L~Op|fK02ļb\sp?IuƄ~_vJ6LjgUhen3.{q*ytzzЪ?S'6]) YRJaH0Tx fBJ*% [r$W`PUhѵ-'(;}~P܄3Y6BV`*bܧJ3h/s1ZvPk34Gۛ7 ,ͤO4!}|Xg{D]޹J:)& `$/䜝uR M+ Lɡ8Uh7g<(L\Հ`JkЉ$pr0;ѽIS{Z%"NwJ A^Q&`KVS@T;o[ _fL#GMTqH3iwSN@^>`+~aWFzc|!dT ËMmr-V_%י^^[rHgKXčn Q xC2tT7uuy ;DN:>0g<٨E x'fT(dlĤ)p#'x@7vk,!w[L^N,^Cov'aXwvA{s =$tnQS@ivG<%j .O3-J!$Hdzl?WpaxKnWAp>śCaFĥZIS`>^bC3&`ɑ.+ĸ? Wz*`y+ԉʑP vA$Gf/EtF;j<]8_)Q=sq]UjyđC4[qدJO>Oshg tQ&1.)sDs[y } ^ :V&c%Ja5dE?!Mv#!p2ȵ2Ub*Igާr(^\Fh׻+̗*D?Ғ&+fMIڀ sy>^wC{^q;3YP&&U*GWVhE0r3Ou)؂ SGހV_YfUX<2O -ɨ,'d6*[v7FJ)I'B0 m/nEOԛ?̏ZأD(`%)/N08<%3>ѕeb*nmrϟQG1(}#b5=' 'Z:zR d(0, ;p@n#n\!.:t}-NAߣ$I6 >31й"294(쾠*&ΛD:t5s؞̙nQ[N/ v\/Jg+) =roڍmH*%YuR ۥ |]9Txg#zBearr .dռfnxž']\{O/lj'p3㎕2$"ք5c@ܩN,D9p]ɝR)a70A'@a?~pF?X ޟ) DD)3*=/0ǥ.XZ|69?ypƂ+.Ώ<-"-{SAz\N2sknw5'D=UJ(T ɤ|~qu CnBUF.I4FvaQAhu~ %ڧ(y^7-zO'k?IN% F~J⟉:En RuZAh!jÚ'O0BzBaf63`soX$NG6͇|M&L-`ڒi(rRR6|P%0ARF;Xe“ڐ~p6$eV uNRnӃzw3EU"@(q,м(ZӚ4k븽d 4 r}9sOa:D2-^9۽t3ћo0tWrrH! azpJh>̄ z_oF)MBZG ܤj}r8 dH4ΉW&!^rI*\D c)Z!LB]MQĉI Kܓ[Ӏ}lRKUwHV3MSH? cl~uĜ&kӎ/"|?`?osLIY^ 7%YxYIEP9ac%{Cwﲁe.f^gjM/P+Na3u`*^6Gj4RPOdxxmzcqu|!NnVJ/(&뭈mP3z6c!0G*jH1%MZ;H^woƤ DZY06 1֝HaZ2fE a{V흺D Xb/HUrGH3~Uv/O+rRt4Lj(l= C5˨0Z*q}纾'!sܝ7`ˤ)]0 XA-ߐUie4qyOk+ˌ #H]\1gqL=6MHizS80=FaxgӉ\ NŎ#\b΍)ƀ$<uyF>ZėCsS&4l<=FǚVY `|I?K.]SJ|%  E4mZ?ЗH哋S[J/{ueBJ)r" )Jaþj+R=v| , lzm{ӧ`<HTbK>8vcu<®mLh (/l~ 0t$_ (eEzKK&KƔU|dp64Wwd63[kSv&+CJU;)؟'^m#åA^d5W6:Cq%티nzks*ttCr^`HdK`~E'tPBtb~D굜7u+"Џ+قTi9$Y7#T"QgZHpsgCٌ[T9n=rE= 0iFRsج^Vi R|}ܻ%3u IDAT WR]p` lRubc15g>-YeaJDD AGsXH^(oqgD6@Uߢ{U$vHҪ!8G~ar1 p4nx}']s(?]/ߗ!F&hq^%?Bn*D"TzMw#G)3+ӄKl"gJJ.q*k ݐ" C gnW?`Y+wF KkErx'H$-2Tg@)7&Qݱ>. 5r!HOes Ǭs,`; 걯eYRKRO,ҡ u3+$H5S`[fT7ᩈ(\hfzp؉j>)>Wΐқӡz=\s =|>V! o&hi }%Q&8 ܯa~upEwX]rH$$LtDlOн=R!Y٦ќ6bWU޺ֱb[k?s_]uAѯODHUru$}(BhG"L%˘oIA֍/NAش<ɇi\ 蚪t.3HA~c1*fy}o9Jk#|P\#Sng/u<'(X㹵WFH,1.' ñJ٥ mdD\?+>e]Q&9y)[y:@5M Cg}ӥ:tי֏7br%VD1jdk ( v@>m$ǓWIMN)8On$GМ;}>YE$,|\=PGv5J` gj ч5&*zs= XtYeŌdB-F+&Wjw-* qAev!ISv-;apbEy/(C9`đ aZ~Oym׽>@(gו ,qwXWL#5`VZUDT(Q#')aXD,F9g@D5hYْ29x 2-YSwDa$جЭ˝ 4\d:X146ډJB,=UwãdiBBcZO*j&DQʂ"csQKjިE=9c/jEB f?d[\XV[aByXg|e@Ƃcc+j?9HM#3! 9j.J9ݳV|lG-BT˦2jpBn%YHҔ *O_[I+ڀI>](6tD2'7.,MaD;QF=tS5 4/8U.@5L==;3GMQ<ᘂ+]| j%(onrq';Ybɦ-7jœ9tg]f|f'9 íl3B;#*O%8_R"Syy҈/cjP|bɽ[jUi1ﱜ^ɘsښ_"Ymaޝq,eڹ̬P>TG H']*k6p 8"+-X$ZK%{ 7k s*p)qT1ȩfX r"jcWY2ѷ}{4W_$Ij7YT-1hu}Qs~k9b{5Ęg4<]3qIqcxNIDCdE]t>:$T-?r+ ߫ oʥsya:/a[N GBP8ѐ3; tscMĔwXV}^."\^ w&2zg+.k$.?Qnl` m1^[dCX1$nSH))DȬ&Vx>'=y]xU~qb+h$Sk_>D-8C% VkGqKr|z63H3UC+'˛!=0xwkhB!c0y0{ 3\sɧ5JgqQܨΕd($b9/ ܾQJ=tMBJ:OբJ$2 {*ٯO_>X &_~ vЄ4 *8yx>xfADfhd3v-d瞘HrJ3 ޷k A]@]0 '-tAX)^x/Jel9q2v@&8ќpnAU)R?[ްMĸ j© fdF,ssWʗsB"`à Д8&%7A(>:̴HVBij&ŁJ2HΈiPα+f?te,$#J9T^"Rȓ .*2DYǁCdL.M79 kG0N ['Lޠ71 E*7%rnR)[.aLVK).d߷K,, ;0ʑP`ߟEvK~7mS K kb}ֱ0 X/ 1*p n V0a t,0<#CYR[!q$ܾtXp3RQiR I/}SOu){vS-2wX_iRJH?~YMRth *+b![Y'{v+ anvwt\ }.~XՔ&!hjj*ˌsEUE~0CB).WRŰ-< _c%N,MSN+tJTA1gM$Edo=N0*={nNT^fطh^nݘP1GçVr… bL.*ƒCuW\%qNH$hU|IJ2rhNtDƓ3nɕ\)0:Cjo)HR4T=]pUCqG's˼V ?"h vSAΦ5_a\)kNޣr Y@Xc7;{]ٍΖ,.2pG?O3BGk/_izMVxM26NA35iFd~t(P9Mu֌ 9 a-Ad+I/O Dœ d'O+,rC*Źoj&;7eЂ*]n[ho(Y|\s0mbG U'ϝο"oy5tsJ; !"u~nЭa[\ `>1p\ 6*O9)Ǹ0w!PҶwĦ>]d96"&hA'fؖ+xԄo/(? >iL#ܸ[BP)6H[KVܢՉgq–?jhyّVFIL3VzhoEޞ[l+-7HA8䕨+{Pdxk )j:OXk=_+Zs]/K"VI,L"BKY,M["2\<,A#%t'Ǎq<-vg鄟B;DnꅮX+έ{yl_%@B ]/pVN`퍎(] {%A?IJBa#AyG֖mtu Urj)[L7w/߆Ccq(ͮFM xשjϾa{mރW`-$gNam}F٘xe=8*k^N&^{xIw]Ԓga6W[6*g׬ᤆr0֨f?ם(V{wrҶ r])ؒU K?j|i0r[WμI}OxN*Lhѐ͈} `J(+Kr#=2so"Q~\#s'79$6 VevihD/RT![8= UP p>}0I1 ~EH 6t-7B;E$=iOIښu+*Ѹ5!ӆpVڻ875D%55+8TΰFK!XܣBOgGBt:bp}U=?wBޢKv5DJEZU d:Bl=wsE(I}>:d@(<6{L]Mے`#&[9E[e/~.X!LēwPqح,|#[-R);P?B{A,>NDĠD&;v 5wY)^5Ll3Qmb WN oj$uL't8Lj3-rep2O֧wV.dEj2zV;9:bS(m=&O&'wQ!sf9"bGb sAaP,ZX)~s~O$YwY]; WUA@[4:UWBv :Meʸ)lӟD뒁???X ")b Ց˜=;1βh:/EjTMu*)fC`iԔ*waXaEU!E5S|AO-&,1_6Uzq |yqh-zf@LR.loapAµ^<}SUƱ3ɩiiz"9PVt YqSHgٌ%>8փo"pc_g'=3)ǹԓC['B׶z5!NCD5Sitm&k*ⓒEsv 6CT`v# [VlU;ٟ(LaDog5:7p\VC5Bha ̣ wC:~/V ˶JCDIc*& PmҺQ+,uHdn=gu/aR25*𬇑;VLG,jSR+f84hg/2"IнzYT#"q!9m>!HgtHꞵ*Y'<b!$zhʤs4l3 @Ku!>)Ъv8gxEk~t,kleZ3A!{GB*{ PQb˔h/!N"`QPT; RTP4]e'!G!]H}+LFہ|_J8Y3FE* Z z}IQVJOojD*0+ݳM ÆRwEoUD]t1ev4 }Fp)'KkFW462VX{X-b΂kCИOe Az3x_7L a),"3M(KݵܲƈCm1%y܏SA9eˢ})x7h(e9ù 9ZYATN޼fu+b_Q!A? IDAT=Y+ӣ>ZyU*` BwCh0'u5$F? wP²LlSф,zb}E۷Wvadm$X!EL4V/ur)ɾsP@ar^p'YtKT8M9ziopu4o%2= Od\ہxԻ]?w׋WgfgH&|Gc؊)8yZ߃&&괏2x"6Z ͞7%5kæ H{عlRg A.~.@ Kgf·B+|-o*A,H3ϸTFӬ.mFUi]nXQbTȑD^:nWAS)d RG۳?qZt,' ыبN6oE`v>p[gN5!WVT{ϸP*zјv@@!XGlw,Y[M5Z!+7I,85-"x9?M3 hN֎ק}}~koBlJ|5˜;5=I|wmhA?e*wL֍vk.DOB=K'&zZk߷ xWSZx5}p[2yT^k+aUhfa~I=4x*':eKBR߈h; %nd=9Mh/mLdDɅ\5ݸ+FDd| `^! aM&BqjbfENnR @;E*[״nuZ~nWE&Zךw_,YJ DX㺸q57\9 dUCʖR>sD x.x)gʗ(d0@HnЬƒK >.*OL}Ӫ aWp5Ljq%` rt4|{ۗb`mkP 4n"[um~_Xdl<, B>dڤkpa\-g,)7rOSTeAtYM6>Sa[+jmG0A 7%ٳzU>iF_w&5ړ/K#CEE]޾%AsܪJyX͸ rЇ|Y#Hr籌S@z ϯU1fųn7YP H3tLgsP{ ZloݿHq-nVtpJp@8/!|\ÿݽ\m2;g[5].Mj`w52h&utLpOJV}ѹ'N 2?CruzZaWYLJ(+Ov û) nـ =ds^$$stuI8$9W8fqW"dj_4`B&{%>J# dݯV*MQ8(e)C 0~3o@\U!A{5SoO&kX`B:V_?KHr;ئM9.JFgZYQ, 2KyC"7D!9CezRf)#3ֿrg{(QFh^D W4zRe ÃĢiwanjHܤ:JR[P2V6h!2i@Ԟ!k;`n Ȱ2C;*ja}Ntdnv:||Į땊u=[jd SM5:[,Bi1~Z?}t b5<=P[A2)2G^%RCX\t\3)y@V,qpL;.vhm d mfZn@'=`N*qxSԶc/}>~}'4[RiFPkR4CwpY;x4en<6D{ViA+偸E.n4bBb >peoQkEePYmPzfMXz"rW)>{Hޔ QbÔ6c`T}Q#3&ŲO>O[Lzܼ̏_S!Tz9x@8=N A(RhO ġq3"y+g~wQRHR B ߒ*776-YT42*v'2-I9 (f^u=qw3$9N|&zڜ"U@Ȣ@H!$J8 xi=jη:7bnWwF\@_ ZBmKD%!bIg3%r~L9"*彜[2Wb9ʄDK|':ѐ 9h'znZ%M1ѵRi<ˀkI( ݀a2[^"{Ǘ|eݐEKC "ν.ӣy^}I*CwE6LR4+I>Į~jjȁtv n/ .{Gܯ<tm16axZ/lfP 3!̦vkP,Ϭhbm5H5%ڛ '1U>i2E%^vm|2=1cP ;9G kBS SI}o#!j+ ¹3.X7ھ'Nf(.دKZo7~ AR E#2.S{e/_0I#-z67 \gӵkR'l*12HdC"`={Z <:.ϷZ}qU(O?4AU/|H_:k[kb)֟ez ¿ l4zeIv*W1j \,VE\/2NL^!S/t X]@*MT#Tџ3)06P~ "H-J9+fTth Nez;ƞ4܈ZPPRw&0eOojw8s 殉N75A2pRե0#:R&2'%1NwV "'N?wFkv\xyo2όx] *3;[%6rUl޸lqZlô5dH&DH$Tbچ.sH: *0E4S,rW"Tĭ=gm",\lŸP3P;!{P+VHW虩O&yI%4ϟ G ³"S\ 'd+8<}Ȇ[k\A* sdE%(y f@*2$ ꕉ 96Pc|_ ~Lȓl8q@jһw8qsNg,c! dt쵆|Bs}i}*@:UE *NJL|8з"uqɯH_rD3'{sե/}}~ȱR;&:(m#uJP#dWlA'A.( .gA K ͹  /SR[,d\d*,{A+'z~ߟE,m[*ƽax^Ax *'6\z6fJ._ϩ A(L@g@Ĩ}*Q:>:bP02ճvҧ1nalH v«W7v\>4bE*03)3R[DefOVcdӝEcá0~bu3X}O& ̟KK!&֊@&j=wX%CLU#㛣${#@`W/u%IAӉ+/auDL DZoAVb!AY\EDe,dNV*n/ 'dnGY.kW1Rc[6dbcnmPŬY Ճ7^1M΄4Xǒ_$bS IuPuQXyPހB*AO>,oN;%7|}t~ dل`NKQ)69XN+[!Y@;zB}0Z>C^C#Tw#qZod c]70طSYXە#](Y C0%Sl--% u ? TYM7܂8Gq0 FHγuO[js@0;p΀NqFO3Ycy,h!$*y*n0ǚ:1@JxerJ/4o6#L L߱y( O:*DXJT0Ѻik;g"#Rl|b|F@? .iQfػ)zZpS\}@ΚH(=t6JuRšʒ$7[y=q*gJqA ʧx"B`a!q|QӾ~~+ o&4o ƪєiʽFKPԋHD ][_9=wDD߽y}iť\1P!ZxDYT&%R1eE=ȎZ꙱dC1FlMC'`R\ S?:FՎpLY=xffhZzhr( 1fh- %iNPxLТ2\0SzEZ@j[֠-C͸Py|eK[9h]9i;QFtU&NsI1P7CP\G=sՈ}MnS\3yDJ&AJrSRBB ȁks&YWs| PqV%V*% A?x,u>f ay$^rdqG!G.~KӜ@{H # Jd4=Efmy_A$!ђEdr3I* "N呁$\ blt/51^=ۈX1a7k&uw_dIJӵ16o^t1EI ϊ_}ַB y ] Y5f>2Q?'.[>|.oGw:QAː '%vFrT2ӍI&]^OZ6e?8߳GwJ=l`P)ڪwY t=X>/Z_>^B6vU =>T2ۂPBAD&@(#[W;Xxx徎(ض^JglcY}$g/_ ~NNzЊٟ,;Eu@JB Wp\ό{Ս,H.?is(`HZxֵ٠Hpb'$4{I⬾ ֛%spqyVD>ߑhv'eCǼ$'00_ 33i_?ș@n]o-tNλ* @ah<Njb@1QRvz̉MpƵ%H*Q^X{eɑW\? I\@Gd[YUG! p?Uhp?4Oba Lr}+g˷`F(jXQ[_"QzwB# l5xdxԥ?41޲'$llHKulaOYw0uxWQwʹRNzm_w8@q~DAhsqܑ}GXG?`*u ;.d [>و"A(',uY3G8(]X=orK&`pQGPi|`Q[PnԤ0gҸ+6.M]ъZ|A=J%m d{)Zxِj<Icb"Djz=uX?P9bལz(] @?M$Zt;=H=!|@LvOfL.أ/&jrJ*@^s"|\W~|俗m]rlֺKB[0`9%$o-sqSYZVaK2-yy+(be $5ճHoK roP.(4 i<洝r^ ZJ5H3t7lĈCDoARȭ~ YD0M.*sY PWKcX $̘@!&߆?9 hrORh>[M L9V&}ۖQ:;iT/|S.L1y$>CrPq-seLM.7{̣e##z&r" 翿Tgv7l>Pv/8d]~ v0䁟Yw0`dxQQ^Wn6ޙ꟭*do}7A"n.2 3T]f๫pF-3EIߪWޱ)bdV+dٽI}^S}a RKz KՒJ qY 뺊T. 筕YJ#'w=7ƒ+`,}Nwi+;^o!֙|$R{m3 AIΎ[bx"QK2L]iBvf5~-[_5 e|I ao7FM(g >F.#UžAn?R)U@[xRґM"a- (Gr3}u2? d$eqRssCv 0zh5)*Pu \-%,<9_0eLUkgZ]5 0J޹a4\;ob,VE )Iy=y\ȁN#dJa}4[TQC3(Wug2Z\np 71CPN߂Q7Arg-DFm"ޤP ԥ5ϥaaQwԊ3hz&bLi4SWٹ`@ n F7%Q$F[9hۿ-0܏^LU"WLb7 4439ʁt~]2P&#a3&1|zV 'ys3+54ҚðdZE_HNp3r]]d!&g阖PWo%]2 Am)a(F,2!Ĝ"`E4P;Rhr`! h%aӅ*Ӊ)$XgfM"n5ga f,-\QF^GR5I3!P(0|\Cu|G2WBdڨU"ĺ'I^+5ouj\V]5q^mʰI-tt|y)Q:6ۏ/.N"uh?-Ih,n~ n:e V[h|Ww\.^t٫byRr^L*'LxCXtVRU[/kM+eÎ?ne+ ,@BVܫU C0A>o =&hRTKp#$%e߉WL#R hϣhSXAUa(>O] ` r>R^ Ipm/Oaf$Yk@+Ď53IE!{/q>.u|EۿjJ@$bPy%,Wc>E`Ht7:up*te-yK5I2ɔO;Rmdl@!m"#jck>< !9>uWT2Dq)D;nAI|EIV&5O:a5WᙪՈpWI|9ggjdx!'.+ 1"%L9hF ^RyYSΛYt#Of}CW3{Xwa 3# 'wxl%|VSP@ؗ{~tT`4eJr 5 Dl;_jv^ T}gl<"?R)oyfEl}[l/4G`vtn- ԭ!n=3r+9wHJYxd<"(o]TMP ]}>@0) d--3mjO1;/#-fwZ OQ5j9;vEqM,oMVq}8B{??[K ◿  D>&v#zzʸUc=y,]4zg0by K|9o98=ea-! O1c*nP+{J~dAq;@|"Wwß<:w &ܗz݄I~b4Am܄}.r7—TM*[DZkMGp(ma@G|2셝V:еW[24m"ڏEEMDY ;$fuM@fbiB%IWԾXEWHk Z*[9IG_v;VJ覥ly6+T/@_AhJ,%!4aLƺF .|!9uJ~Dy_ R=E%Uk@l;H_<| gMPu.=wכ ZWDXt[)" vKqb_D߰_&.Q] 2ᨡy5&8êX`<+٬!}\_]sy#bYcR fw^_C\zyӲaŠGu q!UvK⭙;94?xGx/u،:E^8e򺥝o1pI窎*T8Y g\_M[kr~ !N媚_ƞ@d\`lNMi! h5$XZU7[@g_wn4!S z YhaUS?MEbЁ(TTeg d}jO(}V "9ws -?4"߮0^i-FPk:Q0?#5EBqb<ٞMқ~ h0ha$aꊘ:SZ>'u @f{$=uRjء>Vgrk|Z3 s%EVxޱD{#-KFYgTሲ@4႞9m^@Î0faOz@&x.UnQ_)3{ ?#n!tNn4gæ: fNwye HS& Rsr /4_zSAde. fk,A xpNp:J:{q,Sx9O $DM8;-$-U_֓QbJF&HNg5sRr٘f~>e)hM?RpI)? at`a.2Ϸ2*R>nt_a4X+L/ϦT>˔UFD(WHh N RZ )KƒӚa`傤'wq)$&x-sQR,jBn&J5 w $NeXG*,K y0z/>X?{JJpN tD3C:Z -'?P\%34:T:1q9 Id%^;&){P[ZI/NSt5U0 lKfm%B!?C$6Pۼcr̨}i+J,CA־u78}xĮDjdFaKkRCa)dstUCoi \${BXMv@L֬ƭ0YmpR-Yw4De1i!)R _Pe<>"Tm sE&w |dOmBqJєV)𡠠R^k$izn ^P'N*nԣHlTFCkJζMJlf ߏP?_S9r/4%}Ơyɐm'睺#~d٠<}!鷾Y N⳻vCMP qlx g7/Ů,$Dm%Gǂ6V"{WӻǓ`7΢/ʅf9/"N1$b"Q0*ЛllaV͏6 }{T$(= DA 4h4Q#%yH)z]lvZSuMt'ÒhO㎄fPZ~L៻? +P5X(p3= UC賭O鵠_I:4Qo-Pt2)NrJ@DCOpf"]6e7*<4qDs0Z2Z9%|qi|J֚q0f/+1m8PlMtr{he!ZzEA;yD=M3'Kt<:լ|Vr9޽o .;˽I؃ʹq_t.\sŘ6g(qbg?"11F_ʎؽ_|Pv P1cKWlA/?$: (͂rOd98\d|Vx >Y%Vxݵ)E@dq b&>"F!t!$S4ϖm(`~DxT~w4A) AeԦ^#,.9* 0%X=2BfgnoKA w+MnG/cnâ=7*Pt3;\-AiGtE=bWU g2CwFvROE*xAZ POpE#%FdBZ߼?$" U.D97tS|2Yߺ_ #>t̶HR%JM[)YTnGl45=f3~HJY-;-f3nA Ң/jA36ƦP+8ô^·o8de0s#-QBXva}?.>bӁM> TFF(<4i{5nzx;%l!d5J+ x WE@DƘQtߛ,SK` Z_ hB~̐#/N!z@< FNnn`hku@Qs<$x³B(~Ehϥས?q}~bDWKL|G3Gz. X)ҽh~  T LisBDت 5N<䷛XśfindA>9 EStz8r\A#3yO2ry֯p oQ ,ڌZ5~~|ay3d~?,|b?p?n^ o'Vxp )kUy% $ AtHeן(|(v ͅ-b͜8>jFKZ:;~IArPC: 䆤OJLLM :7;%|BJWh֯iMfBu& !p14z] >. K؞6a:^!T3Hk˄>粭MӠZV|Xpp v#3 R͘.m:lø%7l}YҿemfD[hv^5I:"P7 ]10j͆WkIєOi#' >nLZ hW6kPK k'B?j=W09L4-*5<{l(yI[ƹn?$](M9zb:h^0c$?fJ>M!%rݎrq¹76GJ(& }(|F ?i{phJ~|NwNI&oeaK@* VĩuYu,bAs"D'B6qY)_Cl}~ m+0SQz4%4ۢ Rź$$=[>_aaMl  $`h-eP6D |PԋʤyܽQ?*GΔXh xXԤȋu|'lFeB)).qDY^bNq&s x&#|I|bGٯ& ;(ۈs0I^A\fxzyxޛۢb?iŷYC.b7v<7DDH\c$uU%Ʉ|x(u@pF 8Ad/rt"Y1kI4_ } Ģ519-H  ;lHۿBa»eg[dg)w *X|g-LCEr [!Bpew3龘͛cvwB >YzP"Ûƽ/9J=k:'U0S ݼM.\}譆X~H3T ESZN>@BR /40A6RMpZY#jPզ)1O,ϲ۟G|!`[{0t"02DwER'piav.G} ?dM7d!T 'އ} ,r@%B{RXQ&xR{߂9Nlq\-b>ߵ=|~`ՑXBnb/(}  <x.V!jE^~H?cp:&lz=>>\{|$e c`r[Φo IDwUMr0 vNtjtњ;x0)ԭ3,RR~mlr>TBpD(|q6D!}*eй uJA]h;NiQL=fCA h@?r/J2) nJJN^ܡ;N.W\ d(_O<묙_AsXEtg\7OkNWYvQk. I:pNҍ&1tzcq>cwNwCFӴ/5?I;~t߬>p/lYѕpJxgYz-``Q|1G&7e@W"̄̕SLݾGZP7 ( _>*IQ, xE?H]>nvݰD9}9uA ky :!tqupbW=SDL(й <07HE凤`Wmn 悔UIBg&Z3 -'1'('M:nWʕ- &Yx[+sBU{> !zN`F>$65I\ jnŋy$Zs y%Ph4F .`Q4 (s3iy+Ѧ8rcQ}: z3˺'ÈEvX:7r3BO < Em"ChJ ҆#h fnE<^FTewM@iuc9b@H]hFH^I R(S}7C\Vg5(  LFnnkI!5S^rȠIy`?;2%:w05CnsZg3 ɣz#SƤ'09r g}u'RdT@'k`޳{Pvd<8 !8%ƁGmU֟VJDH^k~e+竲/t%~=gYǑV$@]{HU 腔߿bX|$:dn&4Z98aLLݽziwܛ%|ή7A`}rѯf˳Nlm2ww ɒ͋;P?+2d5M4?4v7~ q#.𩇂tפ߱(9%p&r#<븿oqL#?:% Yg+ H]7=>!ݛBL+:"JĠ>11l^#$%0u)bhB3y{N9~2P)I×ǀDbJyOr\eF,7L\DJ):q*h]n̊yDg?7ЪA0EUsрSآBaĭD Wr*H{\I`|QdF(fRT12]N[gEUl&!˪alGW  H[,ZPg#%MϜH*2@0ۗ eu^ꎭ&d퍥F-幍PqӬK?\ _Z_M (N`zg>ϫI >3uqoTNY`0@E12=Wb5/VޱQh9woLu-"ХɺHXr#.X.'bE-+ƙ_o~yxn(Tw^0\{fՇm:F-ņ OX? vTI:VLm.g$5"x}6YMV.AVk}iFLB!5'^qw]/tL#%TǦPK+y(6fco5 |tz\x{TJ9CwxsAPazI'ʧ/DU'EYX}S z)w@v7*!͘)xd>VYacX>|npwgbu3^I6w3ja1& xXvq;¬N7cbG1vwY+IrWe$=6-{V܎li߃ŗTR _߈DZsyju46"?tk ܣ3J8\$PGB,Nl s"=#$'҃$,{K#Y?jD,uԢ!vuG]Li>`\B5>z9eK>?8!zVXڡ"TgI;넍/DE},]s.o^xDT"IͿm^<,*>왠z7ƴr:&wJPbq?LhxCHJXbuQs$6y[A^%1{&$d?Iy0}I1)~ϻ_ّ,ln- {Fꊉ͆S3|VvЖ%5㙐yfݚ3KϙS1jiw'KߦFL]f)gi\M?0/.VW#K{H﯏PQʗT0F:d5XB,q5w+bP,mІӏ[z@h3%w&C#B&iQueRUjj nvX+~ (Z_T6={eS$q\q@PK|a}d;?T"kxNjd\hL2l[\eLYt@GZ;8B4U]4DT2ڑ=}Cjx `}džGl/^ 2~rm@m;h?@,^ $X@ zMq%W+ |̣871A-d3sDE7GE Þ(i캴LEH`lR %4Hwѻ0|EpZv)fCJy8mfMa}f/y,!yxdQ*A<Kxge^[`ُ:ꗫ8Rx9ڠށh1 tp9Q,\tYMWHT*54P䤉_\Dj H)L 1(lVDwcX8o#up숖sM PXbEz0Fc]hQsB HZg8!ܯBugjTjd3<Ϟ1X:']ze+@I=%}ѻh_qʊA.w#tuPd2r?@ cm;ݾGQg #\SnKUtؒ#k|w񎘻sM? §#BY[.\Yc8 McZF٦ܺt˼Y:.g2Kx뽻=恻ϕp|Y*>\H3^lz]ˏ*믵iQFkwhV dq$ SIk8&}!̞^m+̃ɘ@we;5BV'G䉘Au]q,/Z*kzrvF)֍Jr;A̿.mk:AH+i Ԣ43πu3'DLN$守ۚDWG&dsUbj: AC\w: $P\Hk 1 9n+;C1C"a !vnvukWɬĀbb \QVMS"ܬ;WFZ/ t耭ƫ~|puPD6@2t ?bV3bnW6%e7N-JquyʍN kƪ@fIGRUsOj_{v $9,q<ĘZ Co]̇ <^Fnְ[1zGcbi{ IDAT3%S*{\酯OH/TQX9e`MQR!m.06Tϕ|ь4KP30E%tzm 2) 2ēE%_Mֲ1^ x"R]z{4zJ/[M{~3V]^O0 cBuUvI1DJ;n =c5i^y$!CLwxb 1]ϸHj84\dZ+Xk 8%("UYĠmlf9/ii?x`BxRwVbzJz.],& ƃGضvv߅ν!?@B/2g,B6שp6 6bt1+_΋=Ҡ^qkQYnEfS|#@MХ'fFv+FgbVl C7<ؑLš~-1%m# GJ噢Ggs 3“wϧDJs_ZI)R *V#rC_9|:tJBiq.^H:cT^`KLܙw yC"v-Ie9#qvP'gjF:Ro@xS| ,eYK-'[S \qN8RP;Z(qBE j'0BҽH E;[WdY @w UWp8Y[0.Ift`n@ fWڏt;=Y>cr7甎8[$+ygUq=/ϔ䪝c e\? *_&֨YVFlH zkcbΟ(DjEt;3eHUO_+¼/mY>dST4E\/0yY,uA` O}Jw p/UUrQPCTη9sh$<|7RLդTA _zըmu.fZOsÛqM|cXȦ C-KEO뵷5d?+>DCr1loE I*QVWsR}1u,=`%asY%>6gΜ6F|^!wܬƈΤnʵaBцxJjltϲ[ɑ81ªC"4  *pLs` הi{C%}l .^ܭ).赱VGb.[׏KsI=5} ĬG@n%i7y<݇fA| ؃_$!B B䱺 |ҙ3#R0qǔRtR'R"\%--]]] շ78m6b7%U!.| P`AhvɅJ֨#@:ocW i \p2_A(m-%o h\^#LI|Dj9t!֯,; ދR#X'M@!1/EF$&+ iXzV|:Ou^tz +- [|6qA!6:kKI-db6"P[7$y_Y`Jbgh-}2_Pe}\\u& s#t'UKAǢ9C*-06F]$ z^ȋJ :^$- (5Ešije̿0[iv8C7j`[Nfby~B kh*SF8;("[8(߹g?G&ed)S0R0gV^]/dh;Q5nj?p*1] PAU%A..Υ͍FMjBM"qbH&B!i8896֓JEA>ٗ׿/MW\F߾avTWS "툁1[= ܾnk`?{[swLy"F^:GZUvkg ~r)k4NhnG3*XFw~# ߍU1Tv?A9_Y 5DQ)|%w6{f| 1QLb5 鞗{¦aл xztT n2x)80[7j4eE86 ?Al]]͔ *l7TݥKMׯe&ݰҔ-4YRg_5<Ato E jdt}bq\|ḏy;U;^ ndЪ}ݳ/BY`*1dLXN'QL6U)]m]lW;+5>{ G'c8R@%Vs*wG77/ĜjŤAeȉnzkeM02AUL 92K(K~1P\ ߒ/K}G (r UN S LҐH @ P7n˽2*{FLTCBGzO(vV-o@!ʎXmC]ªϸR_KKkx51fԅQ܊N }!F拲Yb"P,1C'N 0] IME ^/W*X(`D̵; y &B;9Kֵl CQyY݅>(}&؎BʒZJA !"dBC^-Ujjy%8M=۔8! q%N3;rd,AoHNIH񒍫lkGnB14EF}֎0TWP^_s@*rsbsּ7?^\;nr֟eUsr񔇌:NEQg9MpЬ4+o 2R>wBxz TJNbWf򱶅ׁ֚ ^S?,}L=+|V3N~-6C1Ep-yno?OI L-ߩ3L LH*Vݽ͈!aZ5z4(6r`0e粩_;..&}֜&v!-E%1o5{fڝfa+ 6nbsǠd4S/9k]64eK7a-p2"5|!hԼcL9x;N|PD5[U=gÁn5b%2<|tV=l˖ė#iESa0BȽZ^(K%aځGMӫ B6I~t4Ǭ^7kĆ^1c a"Mq\IC\cMKTGk*`xH `lHOaw^SUp?_],^$jiD䭑yo_4޲p$Ji5Kk]s_hA=\e<%m"uVDB J1^mjKgMFS:PopЩ* xu[i@vgC c[.*j/?ɊH(( wuM,m%{, {&j-A:BCb/r2kjȧ+|Y*7A /qB$5<\a@Ӥօ3M r6Zξ<F&2jO\xk:rrGI N|af_Nqǝ诫ڄgI7Wzrev~ E4/# zT PE6TԘ/=00۱/@;&!2?X6pD^Ӕ|y\M8Frk֬"ѱ.uVR|.򾱩<q6S˿ O"J^flv ߈ӡK0qU hW9X*z]f\Yp P\ܜ$*| :s+.fN.[tA u䥚Ct1Jz LkԼ lJiv3+P@; "ΦyŢH{נD# < iشncR76EfoARp/称O/\(&Ƅdȉ;Gƚut &͖5]o:_^AaN[D(ۄ.ʯbbp BF6t۹ܨ?UW~b"8B}iduPQ4[,U|ꖋ\'Pog5 dG^nt(Pqwwiug6h3i0$eMZT|69(XZo, Y5#F|U"'6߉d\a`VTsuw~I XxN_,}|ZP@6yo<%O2R#/h*u gvlp r)hqL.FàP>lgu-dɊ&rHLrvmG@_ւ ]k. Bٞ (2B8mp9|ilp5a:PJK HLLeMf]Ĕc|^_>g8VS(a}7M-Dߒ߭)*ƭ9u]wf;WE2~$y1h\5~jzX,HYW!J$ZdC? y*hsdʳ@Si & z?'V`L+Ja2ʱ&lNݸ[zG"QmNs1C, vWSً/^SJ>b] nD$c"!`{)p VCnȆ3fy ]dwT`&)LJ5d; 35TH L]%F:2{1-+.]N E%2y-h0N? E;^` #;.֙LEDvqtG ѩ RVUүw|耮a$w~q7WπDG {KZ;a;!UȆh[=ŽA2EmXX[ř=PlYmT eY^њ<6JkM[&¨zN*+meYEkZݰΘ Y =(HD "vF أlx"tly"<=UVܥGJFLٔ)\-h\0r'^HyϩsJ[7lJ)N)m]ׯ"]u.; IݫjsSas "5.L{veE prdܐo4ft͐FY>*K^a(yŘ 5X{N0hwͶpDP7ҩ~f鼴y4@/t! CtZ*P7պj pVHa4{+!rԴfU4ϧl6RjVdseײ_: ]'۰/oS}0Ann$TWvck,Y:mVw(32svLѝ7Z&ryGU\AI Bf \(.2^RbE<]) H~.'T){4oRc⚖l9)y)3M=9~%omTSq"9ԭWBVg!Ar;lq]@ʠ9VxE1$:\J߭AVu31ӷQ$]{4sK6`E/g7ǴǯBOn Y{@\x {d|t@8E/~eePbݍ/yzD"Ց W9/FȜrKso,症65ZmSҩ`Hl)@kE=lK}NWmhuDq`KAAbCQ ue++ގӠޱC5:!P脧A_L FУt{t@6 iw½{V |Gb=@]6ƒ˓}.tRHb{ guv}jA<+w}f!zl~QxJ± c0(B]FAbom[Le#|z\ .,/B˄$Y'IK_VU/ 0ZsǍ dejٌ=DQAePT.Ae8w0zd>2sh=/:"eE4v †Ibӫρ&9$pӾ$l3j6IP4" ,UAgH|+V4$ #np9DfiC$LKZ"jPGo1̙J"£IY3|7 uS>R%4Ĭ+~袀aÑ >үXQGzd-)j<$W!#'ss7z0~t v!1`k_hP/Q)|c qǫ/l9nXW2[I]iaJDZ)+-&?CrGySǽ1/VF{l5̪@OҽlU~d\8'j.i&ybS2e%<0_8i+kٯ?$:^\ƣqe:J3W_ y"LoוWDly[o NXol7iz`CRyZ,(x(` CB>TmI?l.uë&#F4؍7[W8f4Bc7:l1i)_g[ GU E:6&<1L3akLjK>!u Og/[8poⰳ!+>^U\y+ϼ E͏H>12@b}=xU67Y1 rMfw㔕!Nsy`vEk94ƱR HH7=?gbƽ3.$F(No\HRVW oQM»\Oì 1 |X_ µ, 8u&bNFLhSkd~W#t0y\2_0\bGFj$}pLꀰ[:+~ vbHYcwVt/|ynՏ(.ϫk@1FODڌ,UI{7EZ31Vbp3.p1(IkCgu~3&r>XF^s@%X3Uk΢^z re4-Te#GpPrUV"Y)+0?p2E\w [TM 2͏%td}EukO]] !Y+nڒ9CCϲ+uxFbrPY50c$]ߤ<|JE@-4i9|d=Q& uF@ g| 2BnπJN1w9ܛ)ƴ|Hri>] h}YOd W@WCsfL +KK"4 0 'NC`sgBx9YS;ܑo>|R,xEXl L9P\oX*F1p/:(-jLEdHUc-XܔGSuyRN%L9.6]WkѾU]iCyȘ=rA WbFH^zy覉&p(dv #e^f$ٺ[V|%!>t6I')ZXCLbDqcV7Ĭ%,5[g_idYitMhNx4<,#-/'aIc$w;i'(Bk tӗ=wDPW7JlZIhq|9 9]C&;)`&\֐#q u*k;$#G Q.vY]6+ߑZUA.g$ UtX80۵BNvJ:a) -6bIkRL{A0Qĵy'!+z06)=%=F"c!]27{!5HK͌Qk$ R;phC8y/PvLED$]&hPW4~~8xԍ]Wۍ .VmSA;08|>#Kp6;ɑD{rSݵ,dmˀd/G+/hNqxIoZЉ͈U>h腂BLA+!(07yMI $絈)Ae: wUydyal3=_/U)Q(v`zw/0mGf-#YF=&$xIYcru% ' Z O@泻[MhƴB@:'3^,<+TRxР 0S(ƨUDOa O9a5' BiNu AljMΘ#B 0i&4T \]d /K=#K_nlp^j;&DѹAsO,"lpXiG/WfrK-O6"+qtyU_Fq$ex=ϕ Q/,`rܦϥ7#)Oi' Sc 5II z㾶F?N6k:DJɪj@E.mu֧BPhK+V |PkV\w ej $\/`B*6 V7Sܶ%Ya19 EÖpYEFFH4p Jn@6cdUHt)-!HHd޳{ψ>q)|gΘ#F|bUiixfc@Ѫ񹛟|@SȬW1<͊kyXwYFEBxW`ՌyPUS4͇ͻ_E1)M;=4#Vlu2kC#M  1N/ aOEs#<`H&^B#Azoа-++8\˽QU$oХiMreRް3TI6{%;d>Պ72yg- op(?kAϮlAgQsՂZǛ uugMjD|kբ 6 7M%VK3&IRA8K)%E5Uyx 0M7 gȬblB@۽eyN W3e6o C3p4f3F+JjV%߫b$Zn9#.Jsω_A_<O%t?87D6ed뽏/TzgZI4yodU7nj f%u?ZG"oPnTVD,6;@ۮޢ11vT7MxWn懽R AHLc3xEjRT'}"-i5[{˓Q31NAYa?XUǯm c0_qR# Gr]ÀmLWArJ#;5#TC2Q~1Kh,f4SѦ*E=.7j͌6̬D299 #({]ʳHZ4$g|g;#KEhxjCp 7=ĸ1𗉠^B2E3™Ew= aն]lH IDAT##f[A@IUޒ9h-l;N}ԕ{Ca{zŠM,,*EPc|[*/xƛڙdB2!Rd,wRBtqq9a̠jjSSU6 f{ b/w>1h٘y "܈&u& 齅B6j~4YŇ^c+7l}*pB+_ a=ܮNʭ.WJXde{_ڋI[=ƟxNN5 FhF l^ uDE6\@E; B!:gE/E0-Ozx >M(8Ř0j)O*uX)}nW ސvy8K%ݳ,fN gJ>@Jpv`t]G^qgA;n$+Ϥ! g vˡP\AOs i;ut(]gYq~څ?OjZ袥5z 'BPqTPR2 S -73K)b<7+a)gi4I{m Ϧ 4}Z)LB k?/jTfvL3]8;IZ5ΫhZ O.nǐt״SD[< VРLh D#&4=yWZMFzs3K;6U⹢d~.MLf6+-XSY^k);!1?yT{iygHCr#,ba&!zkrTʻY'3ioo*S03\"˱&̜yZ0gI+dsh3@ҵBe{L5߻$V'eVZ]s7f73.o`QJS^̊YmUo͗gt79kQТWҎ>_*& &jF<+a\1SLlk^ߓHQSbΓ9A:k5DKG^2,<)iIsg&+!Cg 3?׬e'-ЇMT:jre 6㓘c ('xwu"6ub:aBWEclt~u#Z!'Eo -*=s=}'Px7̻@i0MTJQ&E =}Ӕ23)qsdg2ohEUj !2n6ϋy7ĭrW6$2LI0V4 G: j=j0׍[ x"#B>u`5.#L75jAbYX!Q9Gd/kk!67I|(Qv1)=fgqVX:US3z=NU:pKF^g9~"f~CmqHDRN(ո6k(16 1/?'4ҡxAΉ-{6kid2[FA)A8ω/?(\>GceBTG%CDlP9UŮ {)"3 C?g{ps:O]dEOtzZ Eq^h~bgq *E&,AU뒄T@KcSE#h<"ěL%ͬ0Qat|TpvƴIcw*5{.IJ,"5pE.0m&`IN^pP'$N#VeD`ry1^_[^ďYDbpWy wmZJDӬ=h;µۤ:l $<ћVQ"ҟn-q2ϕ<9)@1Xs8 ,B:W͠1DvKX`P+=?'Pf I;V-B}^G)uV GE籣&ZzV>R,mBP}_\U '0tx@"\Cbw =s &*.2u2;I*3B.:%PȐZ#v-Jr|^we7,sRHz>TͮI}–wu${=Z,*%52zW {Y&JU%+a ^D<ȝb$0/5RNx9lD9aW}j5"n8rB#k;Aل2wIW4>+nn{Pʜ$nf' jq|jvJc9٥sԍR9ZN[&VU >V7N욛x3_&celLz7UP;IJ뇘==ó9Up:5joHw`{Xї fjmr0͠inxi7{'{k6aoih q)cea5paမ%YhE mF G^vE,Ne!Ǫ|Zݳ=8aٍ&GINnq:5"-k AeyX➤rJ³E'>)p'mgh6WI]|nK!~oo(Ҿqd2_JOpAkƅ:2 Dz'n Y )Bvu-+"FH3;淪EUeT`EyYh.v)閭T@׎}h)hLc ͙& C>Y5zXFzwt2Oi َ3ox O>]t_v b-iLrAȅp_QE;6ڨo>s@UĄnL4!!p3yoMѓ̇"^[b3SH.u!ZQ}W88WCOxmXm9f𱠈t(~1t{_%X"zAGK(,1 ? uwkD"f;{FFLeFP=g(K$骡ר_daԤLzf6VQ"ɟpvΥ&Dqϔ֮P~Xc4cأ O)1W~Eyׂ=-Į 8zsFNXdw}w"rfF>'xk"͛'sb_sg.Ö>s=.h+ ;^GL1Kr3n!9$Wʱ7(0M0nL̙6 )x,O؝ނ6in8yySz؀$I ڷF엩W#m žXv3y~4SJIWTB%;DYLABzHHBUa|1N"_1 \4s̫&}VNƥ nzcIMV4V>}F}Q T:@,u+%Ke'\8g3T "¦glC;_n/[ﲿdLBv$D4Sen%'0nx|Yle$O B JvX#iLc?o"9t6o+,F%!ݣg\ M:Hjy7B|?Yٖ)e~cL_\zpDkgYbΓf~l d[b}[p37Qm̲dIg鴢㚴 Yw~9H@gf5ڥ&Qeu I)H8|]F׉$jq^7?n\׭/;ط 饾BJ2(X*[&(=uQtkqd:y^I^$u.Q= x(!&A3R6=\I7arwLPwS~Nka^u{ ;F9fٖʐ8DktkZax>h&EŹђAM}Ǩ 5D@j(,q@Hr|Tî;4ֈ꼗CEMHyzPf2ΠMY6[ fm&z1 vhx,nN'VuLg'/ ę'X,b5O/UVf)ovA|D)ڂZ kق)ѿiK2he0{=GY("%4ѝgBFkG'}&2j-kp Ԫ6 !ʞ TCUQΌ܄$4tB}}۫yWz5'5L&qW9TFp @~L67#laIKkEN:qO&M|.q!湪(ƻ+,j`AHMM'k<=RuUhxi62Iy3PṷȒ)snOl)WKl׭5oM,! ;4U EÌゔ0bZ"~M) ZRAX6` ݊˒4zlʳŁBbmcI)m1x,l<+>gY M5gIrÓ!Tg,V]e㯋_S*2ᬊkZ9$[9 *”sxb >"PA3dX;z eڜ"9-xUT{wQAB]&o(Al>;2Ų@ئ55p=[В ;żZV|9Uh腣yTįHRsm$%f[Y; ZM >1'|$@#(20VjrǾQy ":ԥVL74~MH\@ X:%. pS)6cZ̈7n5}ldJ:""ڙwy&vRXqTEmL w=>ʾd h@{qJ $̄z{HhsEp, IDAT7ÃK.0DV)֟!sJ԰O7|Ř"I>ϕ/ilj ("'4sXU!i:LſLx3$uADԿ`G#fiq{Es!iYs"G9މlyar_툡ΑQk:)<i_6mn{2=((>- Ge Jo(>ś^aӮ`TD.45Eh0ngGTᣞ#4v#]| /QwfjƲ\Wcbt%m"r1Ѷx޵ d5F|3}VZQZcWUNT@aU.g&-j> $:⭡y0)`25*"zV@̾2Ȉ`7KwCRڬ?c:q5yKUhQɐK8/&I{ؿ&t<_FC5r7/O?.rr?EӔcoa+aE4K!LZgN Y1DdB34,y/ BeHn{Osjm#C:?x&oQZ F_s1 [ 9QL@)B}4Y]ܬHO& џͅD#VCP+?W+B"2(E"Jr9 #^ /?L0}q٥YLDf+"|`* @B}? 5y&|f/ΐ+J\բm!)jH-tUHBP|<#sJsښEzi.D%oTMdϫ>Nj\ϪAKj%mtXS}Sֱf%mTqY<䦡+ :fF-ʺeHZy|n>8 TT̳BnNv`lWd-C 8Џ֑ Jd:޴&@F0qCZboށ?Tn{,8K%?ŚQz7ɔ5GLpUaCF5ƮxQ̯pShR_{ofcg`QG @JvI{'߅iV~* i޸-꽹 u[FMX Ym>^oy+f##QBXI΋(,Xm9TԠ39Ls)R'g2>BjfL#&)\ B?"dK205( Ynnd%iENV=ٙܮ7Vկ[0t>pq=P$)!2R׊c"@&Fgдy;~!S \#=&w2S BsN/%zr4EЭaU,'NWek3xMwQ״&SQ7ȼ W74B|1y9 eJ5z} ?/,}n4-'j]35k7@ZGN]w[=y ðWYL@RdiV$kRR QA- vΉ9"g԰1l9mb%WJ9gP&dG;h3Sp>Vٶ4!ܡ}j)?g2IaZ Yjhh:=).o>jc#E+6}Rv;rbNe0lђzB7'Rԝnjd"w'(sMlѿ7G{'Z]H[W+ Jh}.͈q_.NӸ:*< -#HbH|c!AwXg~?l*afĜaF~c`KE@Iԧ6%ov5s7Y۬Ub['OU=,eKjB;N\ۄ,5DDq#N"`hx{(Gd醛[:QH]&.^mxYLF 4Csn/3KGM/zB $>W0y!): dX⿛)U5#I{h忳 ,$s)E\KϭF,^}~Yg,:KݪV1# Z./ͶLz~1zI3Xb,aB9ڦ׾2%lQpVtZۂd4T{?Nǁ|`JFojZU Q *#RL[-h""קyPk鯑ryz/ {~nSw0oYZ6 2ل*$ޟG~H Ry:T&w"ZL/T^&؏80\C nC?zN#cPygy$@ kü|aM2ޥ 7A>$FSTƒٛl;iP#Jf9 |5Lghò;i3.UEqb%ki+ֱ/L =r?h> ǪώU|a37hDg54=t3hg\Ł N^(KP wFv]x; ~gav^-3<.4lE獶C"qH'#D@i"*y?%`66 .(n6fh`  jIk#KG:lĂb5;kC2Fi})p(=.#\gV}$`pDn,T(2!&<=J#SzZME1c l{0W1 f2PObm[Ƥ=F9Oh@^9nƝy2vB8@L=b/ﵨQz! =U(//(!0kW p(GGǐ}dB~[CEjYIq$Ɍm4|͠'}h~%wbr̊=7?NK/IxMr*`(h Y=BeF&.N`$ѧ H?bEg >c6@> mժ1>dx_۵mjwde(Z#E&2AѢՈd\8b;B$$lg*ס|fǀR N8LE۫:CDm31W z%sહftC|瑫|m[${͝l)!>0N{ܯW#Za/֕[v 2C>fcui|*ܚ?G5嘇]3&Fr).OE;[_ 1n社'XwcYI0lkJ #29-(CC$xvp|ctuu^8Ziia`$olM rU9= |m(KHZ&"b*986 YЯi V\!0 tR`\Ź٥yv>)h,VKI2Nfc-4(:7O .BC|x36_5+u06'>r-/yK`! QHa < f]UDw0zZYP;K%Wjvn_ĹԳ km̋n7}*"D&NYJWz `^+-$Pv9[PӔxz[LЗ[ej lQ5 | O8' l4[I> [O6H>JDSe"^QPD摩V%JZ} Xkh"‚oylɤ,j*,cKJ ' li^, R LhXͱg}ցx ge ]CVd`Q;C&o?D=/9A 0#qxJS Bj E~Z8nqU`ι+ 3ItMfn+Wpْi&)m%DZ|2'sߝy7GW(Օc{;qV{t>qtf!IH7WGY \]cN>$F*4 crD:Yҝ(>}`!f .D܏k A;?y  vg#K%5juZH93t O!?W06#"&^Nj-Lw%h Rȯ!7Q0-C? !y-phL0KsI7v4D\">*zإCn>tt 1!GŲQƸ1;W*&H>/`&~&~4DVɿ(-.n8#1lW0΄x? T l%g"f)[~QI^$/g3PP䔉:?8jWDnb =G$k(rvG0(48F'";$%׶3k٢)Gxug^0) #nqD)~gD<'lyVBg&b:"Ú5ēA4)cE'2}`U:}f9kTLlڮۻiKj,(D􂼑`9P @l+ЬsR3 Ѯ!#QJ:%m=Xk7JNnۙ $.Bۉǰ[Oxsq+2 ]NE ϤѰi,06߬:f7j9Kw孄$a9$(, Q ZW; 8e{J%&rqj Dz >sa'#:S{#1፜$28^pبGLN-+?эΖw1{/k^v1YӒ 9Zqs`׻H=cZHqBrU)#/zbVMChݛ )U #f܌}8' .IDAT1 {c\B81?2xlYOcVN(^^v؎y{ƵHQ,?8QW]SDðVnD)kᵪZi^;ΠbrXV%3= yH((FNoydϵlĖ6 emX6VD0 ً` 7}Weg^7!qp^J~`K1!4 't0'uMw劬k A7Q~fG x<=ư9pVQq|; 0upNU ȗ]Z{"@ve0Z Q =Y2KxU ci?;4U7SƸ.,yk.$( W2p6CV16%T˥[O LDpLӋ0}w R9J_w̅gZ=z=?SdtfMkY]\dOSwwo$F!~8ax"8O>^%Zp ݃} l|+KT'-a5[$5k`sz-,XC5U9Lּ#"`@DNdy/pP%7|mI"NLvױ jy 9AT0:mw+qZ␟h*<2qO[@WJw -ԂuPKQ :-Jcz'H86#IYp/gpߛTs^$pGvv&3r(GLO< N!n >]s0i߈2'_02űCj+AdAf$qwyw /y0H j)@gyIH#ڍ=8H$F&ŗ$R7{|sCqvbb&-q~ ^{6(QQ xyDp$yWTeєsM\,NF= (_t<^L' t{Hx%V_AS|H&Lvsq8,jFބؿnI>ކ&PW]{v6M}a)/)nįa[|K-z_7(ߏ#8m||ϏB0Ieq&/@K/?'n_ٶö}NK`sr0&{ډUVԬ K߅ _3?M[΍ZuN;][eplr I|gu9R8!w]z~q+_ 0IHh~ꎏ$rE"qEp ~E`||Wo^\$ƃ=nGq$ߙ|aWH1l|le#W?_~ww/ؾ|13.H%j7Xgr]o$zv_[^w߅GL.l=wty|s]>Y/w?V;ì睵 Ob쳻qvi{{XLxf3bܰ>޳W5al>?}'ۧo~e 9|GuY4O_o/엻 /a=Ͷ/fOu||w_| l}r $/7-jx!3kPmfS>D(oo2Q"}/CD.3YͲtLl {7;睿W{u5kguY⾿fse~sJkǓ'>>}ޞle{~W|rw%l{/߽\ҊJ&Y4 %olj"H^sx>w.mb!156s',irػki]n6ݲMZ~f7uYbhL{@y~IӾImOawSp/}||C1bϥCf}wLVdX0|{Y*ٵ߽Zۛ\ěg(JGgۑXʮC0]"ii!P=wz|^<>%|<>q|i|So__ݿwfOw"Rzpf 1c/_#g0nYo?oY% %LKUl@)Bie ?3#~=%sV bV C,sR&ϯDK BW~?cx0mc>P6Eg d[|G {4㝱(Riw׹BkiȂhbzńb[aBoO.-Me$S(.'u(żX@$Z9!3{ֿ< iA\ k~̾x?S?{A a{iǃ=}o/A]z1_arVw.Vwەhg|}+y+\;gZJykgi{w߽VkZ=}徘r~3s^|_smo@^jf4`~ɗ5."I 3kOد뛇mZcl{<8f4ܶ/f硿B {ʎY &8TU߮Y Dlv4K^Ğ}(zx/~\ȸ/gK,Coy϶jkٷsY35%yٚ{$e]SsLf4ϱAhM_pFO/!+1Y&m?5x뾌 xKO~Oد7|w3=?yn3rg{@CϏ~??Ώ~^Wm> 7O?mv{_Ha?G?1a}4/~пSDh*!\UFmy1.b|'.mm~V i(Sɂi}z'[A8F$D2!\ab+l8޼_+oOsqأ0 /k5?Wuik׊ ӛMc]©Ք1,sGgt|>=5ԚkG^o96!6#VיVϾbECp_?*:E/f[j_t{ph8F)Ȃ:/*clm0KfW??Ϗ~nG;UD_1lf~^<~L ~??r^~k// ! IENDB`sinatra-1.0/data/theme/fade_corner.png0000644000175000017500000000103310752637420014727 00000000000000PNG  IHDR szzsRGBIDATXWю Is/2iUBm*OHDsDN@KHkةO@KW`{:K "zux2 {f x-1+'ADD w`nH~~}?! IENDB`sinatra-1.0/data/theme/title_screen.png0000644000175000017500000032372110750150566015152 00000000000000PNG  IHDR@sRGB IDATxmrȖ&%uRzыEoizۘ]Vb~2 *;y", W."hH9뺋 "ݵ@k@] :~ Z!F[Bl5|/ L`c=ysbm"=% F[KրAcp߶" % e5`<7X{sG-踾0Ä~`NFkΫzl guuoe|{mT^Q,Fzd B [VRZ?W{.$XU@ڜ6/#?my|P;ۯ?5*f{UJ˱4*KAn{^@=c{BEkǭǖ[/C\ >J1ݻ8y8r|!~t-onN_Bvo3Cwq({"/){/~ࣶ]p|l8Rݐ?ǦZ[.WW~t7}Nƪzm;`!ȻuqwﻼP>zsÏc  h81>|pu^CU:$X|{^.sK堣Y)_㖪[!\{o@^X :Fiqy~D^۟M-}닷׼tև_X >mǺ[-GmǏ??󋮳eǰoԇwg3@"o kW\߿| Bo fc_k\YpmdW{\>~_|d۪Cʯ)?3|)}tGHjk3*NǥJc5uHz}yu|yKaȖAȥ B9}r*Rk QT,ժ ǿDZefs1XĚ$H0]p>/b8U|y ]tC 0d<]G7>OC"k՟o͖Az8+y U~Uzׯ5:Owc9zgnw3nؼey_^0}:cYѭ q_ ʊzG\ZgEwsHUkSnd\Y{d\-2\e`E+1dk.-Œ`e[_p+F Y @?U <vjbKWPCE \琴Zj~>c-TU,o|͛xx8/z,. :?s`Q{K#2/ir鶹>!,–$Xʀjǰ27dT|+D~KP{*ѐ/Ӭ1bѼ+!yL?U}~-X~.>t6@#[/+0Ys7 8A_;Hft>+Nڼ>0XmŊ0dnK*=XA`;ݻ>kU[>PcV+y!6{X>c~a-6y!j<Y[e.HZQqVs)(>n2e?O?,t?Ɓ|7vWCEQ:&$aӃeuC:Ce|Zaq馪!RoV{y`^ǵ!XתA 0ߥ =nkQ%Vh<_z)} `}9<]hM/x<^}X ֎yN7-,2žyu(í!;׏!yW~DD-E1U|<iؓsM8!:,K[>> }Q{2` DP!9 &k*xqz6}BD w9ǵEkG}RYj56$!š5#+s?2ȇ d e Z]8/<vWc_x2+d?C}tn3ςY 9Dۧ"tA= >c~xi{! Y2غ-.`c5HZŰ~,+2m^+R ?ft$[AS߼?:,g}3 @RQY{ow]߮,@SIjH[%M'AHmg…! _ڲk: ZP5?Gr{A|-^w|?W .p8Ox._qN!Kfuя)?3FƐ4p-4EX_ .H0\c}6ȵj[炔UkM j =?k-!˪>(}mE}vk.& arGu: {N:&i֮6/iM_+%P+]CeNvxzzn A\1]>yPXQ,OE8U)̟<\Q֟GieQ>CU~TKd|&eƒX!XתHs IDATAzG-$Gs_?_6!q!ǥZ>o Qڝ)}Z~j#ѥ.ײn5Y,_yJ%G]yqdaH\n^_>QVNpxzzLJǷk:+??y^x[xitT3p!}Gtj2(8]|(n峜}wϮ~_|/_Tfj"X94xDԪBd.Iԏ|k / Ah5ru Tڶim_#_!QeKyDϕ=GT{W:qCm?cj R}^x톬Zd?@E@yE߼~~;q8UCL!Euz^nlT;_e%HY=p 1{HBr~J"yߝ+9jq9]_<\< A;õ~ܩg.30`^OAJxԞVi&<=C2-{T惌_Wn9(7n R\ Ahp)ĸ%aHt_ׂttt-4^Fk9ꪫTI,]_m]흺ou]ӛ)rVJQ!CgC2$o1-[Wx|JwIȵJ4c!|>}xJkcm&ˢ-Yr=ϱj!⇷n ,J8u`~h67*BnΓ`O̰ժ]eA~/s=(Zj-y"gL_wâ<]tUxvhe(3COpxCqƀbq Gap̮%t>/䧭 q9-qZ φWC^MӲ`:6q!yA5p>}H+TƷ3zLgAZQVD֦lң[UV=Kq[xo^V=bq. $,.ZS܎rǼm qࣜG*@p7o 'dh;7ow,,gP}^p_^0~yNbǏ*$H牌:|\ d~Lz?.Ap<ȼ8ϩ8e$t/ٱ!9W暌t5 +gf!Q&tQkuK2\7 CcE[J#|У ҹ+y%n/!1OU惬ĊJ/!xlx?ZUy_(9W.0mGv,X+?VYGU %ۖ-j}Mw0UԎϋYKzʎ x[auԲV-𪝳2X:pSz4 I^+f8XseC!}W ԩrCqGr>" 0"G6ȼ^%1c)y?O6\u4`_9VCШ\5}pEX?_OȖ0dl-a%J WAk\} Ah`[kĵnU>,x,gԪEWZqq^H2(K_yrHzl- JO߮b޽[Jk-m4"o qnm5m֐9U|yFN9+C^WqQ?yJ*g|zo/[pEh^K6}q8<۷oCOwbOs< ]-]8_~\6qKBn)?{Н!gS-ȫJ3@n}qG_>}&AHg% Ck= *HAHlI*2yYr 2ͦjso٦>>Uc-o˅~.a=h5.P+q.I>NEKH>:S<==8cE>:|JAγ2N,@j0]e8R;kv]c3C&iKVCLժSIEx׿C<==%q^?Wt}>ct\}7ϳ>>v]C|*<$pweI>>.L>/v>$--u9.luUݻw0׬'iNv|n.n!x||~o߾xM~m}6/9_OOob??Ç->1>Ư#޿>|ӧ/o|?O>OTҝs9?%>}E |k>a篻Z2JAΟŮl!lum8-!HY=W*[ať}<<<ć^^Brs>Rc.fl_ i]_=/<|Q_:J|!>Hg}OOYJz>y۰r18B_Bskg;TOA䒵k9c?񻻻ŵ'C|,SK?Www}GS`6\)XHn7on>~]ůGub"vww믿DcD|11?wg$iu^?xïO|DV-M1 ]>.B{~\aǵ-?]>dzMFʐS&lnou)Uzkƅj<^fK~^і\kom~EsBBK-.oWo|\Tg)\z"ty]?â-V~ҋ2)+?8 ]7f8|1aWkxHpg|.ҥ*.|/1γJʝOcrFiZMW8x___"~<͕4RT},GRMiq8NUc8yT5,!H*$m/׊xxz|w^CP:c:!0 !}:4Q79Q ǥbFOOop8B>yK7\2,UplU6.zi~mϕ&%~?{v']69S`w:B =Cě7]tEγl9a*e*Η-ʟSE Wk?7S]vՆ筭۶!= $*UZY5}h Pop6[Bge-iSma*?^">^C쎵1e>#$ُb]֒io-VTNdl5?駟X9ӡ8YIQV_.pv>|yAǐ/_L4c~1޾aIDyW0.mKvULww?CuxM }qH'uIН+:0Ļ;f)L^Zc4Og- #LWln>rJ$\>DJ"W{ԃ1X^7+D[%+.B_^ w %l¯) @` AIJI!O84Dk!#8LsT؜A 9GdHVô@թAܙU^nGnHHmqRVO`{THOpqILHhO$ypvjу' bw{qn.8*2}ryrWƉF!b>!a"I"sC ]\<}8m;by&R@DYAϣjCH8~R#j!7r'w^kd8 Hg.HAAAAAB="=d]X.XV^jmGsN-rRzGytF&]v6Vq2 3?$W> IL4WWX(M Fj#w> $*P'})$["' ҇`W#QhGzwX9c<1@kGG-c}?b=\B10 !^߫/P: όaB뻸آL2Vva]>ݞ4AzP#2fm+@L j{ 8:]b懨0A7IPJ F $ss6$~_O S(HAAAAAAAAAAZU{Q"e}m;ϱl$!SEќȷH\{hdӌڇպܦ)%21w"yo2hUUcz1u]8֫5>/_:`Fu82&(+N0edSiuǴ?9 " E\}!iZAGQw(}LtT>LrkzD`bp8}"sU@TUƿde ڒ ٵUB G;s)ȅ6a|kc|cGhm;lOd#XyTyTdzb*"$c'BK'P>Lv< !V.y = RPPPPPPPPP=^5qZ5...&lc"[SDv.Ψ4rA#Bě?.Kg $DӹSWl6c Vk+,KNlYX./\.X^b\T=v[bv~-#v->!r^mxYw=`B9eP!Q V%EAcJ3 9/:7&ɵ1>1>Gq<q<6beR{.k9E#t CIves|U-Ϯ .]aJߊUI:Bz,i;_XDRcֶ a [P{`JڿDHJ$aoo5A\k( qu_ɗ.(HAAAAAAAAkEI K?^>Պ`^yu)&t ΪCrL^M!ڢ.z:1etNa2?@2Aa7 61B6yX. M~g.O~7)nnnp#ሾ?p8bN]C?cVX"f i=6SJ3fx.7g8C>#ͺHBTc`&dMTo@Iw?2递@qPւI98rBˇ[V!*8\=CFlbk*Ǡ0rd9#/JS۶hEI1!)b-F1[cH鑩A!b炈'łyad*C Eߕ RPPPPPPPP!>^D*HBϝ?! ?FUU0~+-t9qN-ε eb$S3f|wsh9GG*Ov-?#?On}H QT0.d"U٬399& "$]Lb2Gl?ZX,R&/Ih#ʾJy48%|9I#G-XAqžψpDw<`E$Uu]}NW#BΈLp3} )_if$pa^;s LԜ#=T!S}=E>ghC6w"SdR#=mJ$wXb%y b=6&6A_VAAAABtajz?FrlL]OZ!U\N;s**nh2lA2桠?(au( Kk<'<)8#IĄ_4˥ɮc2 q]n4 F4hM`kl6TUf7l6k|SE C鈮;{N,'O6IxĦץe#9vq SN'tC#F."ePۜ*bSTj  X,x |j~g 7[;{;gv<PaՖq!$ȹw] uȸ_`LVҊ IDATrȕmbQ=Uhǹ"c*GgG& -Crh!7cyEE @H*6TĨx)|TOu37Tq%EBnGӸY+/ \^^b>_ѣKuZa9_b\%%VKZ\j c >OױT&l]6~n[^?`aۡ;p:u!$CWYrVN' LT0Y.MTr]Ztx@{hm1Ξa^%ͯ| nk[tCu=a"O8F_S ̇ӴLB9QR Qd^!.tENiSXh%ODй"As1>\=H<] 1+!ˁB~^(HAAAAAAAAi*Hv@SݣӠ)%+krjCBQ2=2F ϭ*RdHB R@ﮇCE]רUeBK!F)4)X-qGpb%\L4DT܈1fDLHTz}{|P(HAAAAAAAAIG|W}~a1ؖgz7|MgSrX`U% Ms%tG fτ SJo{+mwCB^ld]t^  Ƀщx+3xH(9Q ^7>h㽐@pۜSTj hD/c,W87W NT)Yq|p^H"1Z'dV~LÜh;@VX(l3K΍ku Sz{MhS;A\،rz SӾt>XOBIJƶ x1?THF;%Tט]+H2~61ƦP9;CS99O:ه3cyˌ'A|ƅqGCL!)&V N)b`D{67n3OPY7{1DФ[i,4M ^w ?,Q#7N [I!bZMq$JMe|L&ȭ^U{Fw'd}y YC)((((N N/Bz/+y.'rc>i[g3f3, slml٬qqqKl6\% .7ߘ*]1}nϨ#~Ȼ驢F(£GYtD1'-|g8Kԁv^y 2U ^SA|o"JlRuA^WxRdyl}w~w 9y3 Ybm^flɓ'_Ek.={~1p<p:m10x0CcbP usCwy!hgK52"X"\\ j/$* '\N+c| !UXȭj}·(~)5MjecَQסdpUput6kqqq2E]5K=R>Gv[N$#yn; bog}BʃI=s5HP}xKD!Y&Q`[NȻF[bK~g(HAAAAAAAAwː2#zpӟ (+c9 Aqyx 4 ~$Hqn$$ ;>+Q ^mns:LY%#$ҳir[ǿzk\]]lYjK-ŌGm-YKyԸ}A 2w6TGjo%g _]:b$Әh @SŨbeI < VHcJDے3}vrǏUxUc3#PPmyH2qH(K`m̤|D$ߝ`UUx;13x"" @5Qf@bT@~"'6ne)@!l\EYO V$'waF @?-hW,K\;/~z !T Q$8"B+J !0^ H!Ad y28^27a.' RPPPPPPPP9/BvL}^2"(#Rr$nejx:_Mbd+bir haN ֻ#8€GJy=bnK0F$&\0$C?*RMlĶ"D c St5D/1|zvۤmhrdQ-iyrbzrx㍧XVx뭷X.+<{ 77~WxvCߝp<p<0 CA#]/nq8< Uze ˸Ֆ`OAU#$~:c*ޡ0Xۃ"?=PDg W@)-Lla@` yS3·wX+hY($ۖ7kNJI2x%v_UJ~L8(7O|`1?pA}%$fN5ͬO-۹wi BXqל D<MC_$ K8?Զ)((((QzCyBj{Dκ>HÙ"lonoqu<_$v ^E@ɶ=1uQjdW#.7cDҞDē}Ȫ3}U:Di\EeNQbRa8Mс:X#á6lc %ڶrl6j~ϾG\_ߠ{\]_}?t:{z۶A=7nԬ`Eb#JvMU$_SU$ᙊg291ǩigxՆk3& boϭ/ZfGmv_ș8:a٢2&q."})v xkei+H)5˄R,W~b_y.gCoK*ΆO灜{VX uC!@ ^;L/csf8jX}фC?-N%Ag'~v{fO'Hq7-dIxj/bUft=<)GxB@{q8XEsH3GeƸ+ؚؿ1DX̰n3NPT0mm} j))uf,cm 8^t: ܦ$ OmX@D:&>5 مg.!J|Ϻ.Qlʪ1rlge!}BJ@ Z ŅgEX)9N, S-!JH={ƐI@0` pĄD8C;˳D.hXj|;.11Včㇼs,^51XB5!B? Y'Z"!T6bi5~'%)qMѭz{ER)n#D~0z VXS$YCm[PPPPPA ^e3>B|Gzt> q0mp퇇p{{; JS!m% 0<{^ zBўvg,sev|3>~YjJ Mf3v@)ug򻠠@!@ ^ *WM|b^T(*L<ܜ#)PJ$q ~OfUAϑ)@D5-(Xe (m?"~EGILgdm&S}%H,?ڄ{>gf,W+\]]@l|f!&~)'b?$E 6˂*1r%W&y =+Gl[5)JA|cgg3=~3^CK@PBբSkI8!6R N74tݔ|Qm!ȇ0|mVYku% lW2. s'S۶>}sbtg3 w|X.7kW>?"t!G> R}j|ndֺw Vѻ9ã@<}ERPPPP qU}ö}8! l#R{C&+ N'ם̆]#[GV[Z5L h YQU>ORtUUA!Y |²ww1fdZ-cѥgOVΓuZ΍!"BQ Q}(W燸cW XNvIQU<"{*o-ReS(u^T,*ڢl?ϧQ@4^A⭆P9qQH]bp8_:@s#\H\u++UTǶqj[Y?t^c w!>" IDATED8 VNp%*{6#Cg>S@k' 0.S JNV EUuK2KArVFq=#-,FK "BH*'&q a"٧@rϒ NG=f9!lFq=~4mGݏqϼŭ7Ʒ$#X^YFdGO@xH!94 ]Iq^HqfȊ;+6$]GUT (HAAAAAAAAWx9/B|@pϨEM%9buːp|6O8gU E,fԌ@z|؇VȹӠs6vc % adYd*gk%e_f1CPK?{ ڕ9(!!So8JI,']rbu _lbvSaߚ{j&%C\H6K_p<r M0t`HՑF.w_|Hr@|tW"2ݻ>ksXug .K΢6DXr?"'f- oc6[j;͜}Mw}fEXcc2`\.C9&A> 1nCz@D5QͬTy.DN=*.GAAAAB|`xY@l6pHcd)?bQr >pJj恌1:C~}:! Z gK|*8[Y+(v3a)\`t< !(CFjF۴8z;x劓("B6GWAVL@˛``\e6xn0 qVYOHK;?px<ڟce:, 3d0ZIZ+J)XVYk8˻߾==qb 0} XYBϪHnGA-BRL Xo]%mI)ʃ 6ZƘJf15 :oM1ln2\O"Ad|G *Z8—<&?H/숐jT&y$Cbi5,aDc{TtQ0l8i*=J߯E RPPPP ;^x8 m+XV!dZd'R~b\C$J0lYۘ &V7lFu3dy9֞S}ueJ'A,: 陣3:%*{_joģd$T9]wp܇=gJqZ:h .n3ah4e|t)0ϙZ%6o7%I1c6x<`N :pX @q:bf|*2v!#tRy.Ϋ 9&,HZÇ#Mic꾼$Jsy Ѥkӏ^ P,ً))",G-9@gWg|E#< bh+wZ):C[ƪ +W*3RZy ~O߯޿@ >8}wB*ZٳI0C:„ΊTש eؚ\[LTap"`i볮1EpPmbi%Z"DX ҝ'v;6 ǹhӮ1J%ZLZ&NH Ѿ,>@|op>E5 @jlh0έ/H Gs9vg9T˷XLa0+`H2<闓!ܑ?FDfh&Rq]8n*3^̟Cg9@Jbfiz8|* CW /7z'ZU[, ֺ+}L D*LrDCѧ@j%O|jeCfM~u QPPPP~ /k[*ϋI۫Z!M=V6Ubr_X9 VhpEaG=&IrV ?S^6;m̌$:3嗫rxUJ՞F[Bvrl({'9^P(0Bvhbg%bSRE)Gw?Xb0j_!B~L|H[m9>W"$N^F)M2CuJ 8B:gsm킌0X2Ee ##Y[İ#610qfU ;G{Tf(\TI$&d)lal](+9HH$liiZSTuѶ3Si.i1CO]x5۷_@#'vG`*ǣ  6WjZ1IyH6[Y&C ,D+ YY_Q|:H;6%O)DHAAAABR*G avW/5_+<螦<]qF D-l )BdX_UըsG%RLf+mgu=)B!ʝ-YR ?L ^H(ȌB{N$j,3f-ѵ!'狵x]B8H<$(4؊e7_~Qg:O ,tl60 IyJX 1dC^#&3R6f(70fgm[SⳄe`=6F-}d`D v[I@2U #WiwW~Q@T2.w2LUayGOT5vEUu4MuviжsTUPU #MSa6kY > os1 {}^^9SסO'8O=?tПN88uÀk-0=0AH0SxN M|P@-SDƋ*C ^5 RPPPPPPPP~Z^ !>dǏM zȭ(L @`HKm뺏dPJ8 *謷)f@ץ.?Y)t@-jqFR~d222SzEr}jC[aIкY;r|>%A߱6EU 9x>PX^$R)?t|>LJN֡ޒɓPHb>SR2 !"Q$c^m!-NU)ri}س]vjQiX_&,EG 1ˀFBb|QgHNB)o"74E~}*cP5B4VKwج.ܲ v nPU $Uݠ$(PS9?{lV)a>^B>ݕ&pڦ0Th(UUch{9|B#@t:aO#N}ԡ;gw Iw8С [M[amk5S DOY^0􂂂)((((((((xϸx6E)ҥi<}u抏N (ehd Zo}R^9q¡8|mkƊmh2IHd `u2%Bcx f;a%텄a0!L?&QT/hKV=b3GN}O8l{[H cPU3U MUna*v>E)R7m RH;_26 .WR?CЩB dC'G-۫?;8n; G߻Wz.nJ/ ` 4d Kg&F*Ejqu>]VW=uR}T@X|1cJm)*=#:Y )$jjkdT&Qd袘 .G:ث1}aqR4ዐ|ї .Qψ#.RCeg f6Wʜ@xc8mB,QU!S4pA}?g8FBGuXG, mN2ރä JD~3?(xinxXs!B>XfFU^RMw,"oFe%aB'\z%T%7"ްdXcQrcS8v(*Ѵ34LZ <N]$5YrA9c4~G|#k? ;"{gݕ 9LS6o֫%M2taBl'3m\ Გ c 2RqjӸ2ƑF[N#Bxhc~t)*wUUԔ<`2g;2 H]E2׍i+,Nsƒ^X䄰&4}S}aJ2${J}f3<~8,ϭIA UzM~mm*l'6HDvḎL%4#-cIƄ_3=C#LVmL6=UK1B/_CJRbc3aMPld%5b)>J_ D{HhH:!)$dLfއUebv-*ZVލ G(VϝdG<zR#څ{"w: េz⃽?>(4!@]C"ߐtO/ھl?o?76o_6;D= d1uӢmg# Ϫ(4!H|g_KoԌITnTf0σ36>l Ue\Z bc " *D)@ b gaHR@w˨< VAAAAB0/> RCsd#eAFg+1 SYZ/X0wG(#"UHеV+DվRnt@4dwGMefaZc-DEPl;H?DrJAm**5 b1<BX5 w0)Fa௑<1J2@*x8zda+ܗWB Fk Laӗ>!_' \-ko_&UjfW0N IJ~L;m*?C F ~Q %:\yGۊԃɣ10FlgU8` P^njU4 ,KC\,ж3| j§?i|xxDu8u#zlF}!dLH{sVUUrZ8 $')B IG`%\'P 6 }2WS+$=B #4%אSŞGȢo7Z4 Yr'V6Kl6^[\]`a;z + sm,>|xq]j,`)c[{h>ˋ'?hZ!BNG`9GP.˂P 0,,0.6X!Ǔ! 6%AUP`@r+,M@ߓqCT B }O+:AWD!@ 2e-^Tq6 .//1ϱA|ba, ?ϳC{!$2!JX.2gRhnP̘,2{X.uݠ;aufPD0&Qkwl1 $EHmMb\b6s  b>|=~'~qp8pq8?pq<qssnn擲 " :w- ~qH"zX&**y IDATS*Sm4Ѷ ڦG3|?0k$ZXA3 r NGםp<``7j,f 4Mf Sո\`63,?~nnp~[; { ֩HD!CjuG8!u< ~_^G>3B|/gac2>CO P/7ȓ'o[2vo3Oߵx~cGiF˚ }~(hU3g0s^AJa|4NVՂ6NUİ$à2) 2@o3 3GgI-%edy n*((((xP{ɏ«'Z}\\\c='? ɟ v L?xSΠLX_,/|0DߙW-KbGEPr4|[s&@X"Im_,49Ǡd<_)&VFJ+\և<?77Y4E޶-A4hYm45%z>?w{v= }?`̌1C?9@UVMjڰoaeW#jGНEl6s$bz|frf .O "Z^cPNc_"$܃EE5Y8F B^V4=w20OQUUv_ɕÑqS*Cج]ȸ׀qZՁ-aIʨ` >1 .7-nNaF$)w(Y DU CTy V f K vW3aљEiT]qCg>Gt,^^>^Jw:p:psssW1/k__ヒ;L0 8Nr{~ӖUr+ګ9fq#LWQuw`fT&iXbƓ7ϱ6ܣ4,0-< hA.ӆ|G oQ8!ߞ *J!_f qs7 =E% |@C_Wg$^wUܩc'W]oAD*|qA-LOVX>=@u2C҃aK_sQyGAAAABLu"?frߏGWU<{ MFrnHfg~牲" 5bᢑ PO``me0>;ddz,A~滿^WY6Φ m; 7 I_$+ m&l(4 2sz@'R4i ؝ = LEB >Ψ>rge1!/љ'o $Dm!*'`j2x]po`QUb_e2T %yShD"# V[N1 ;1 ; q6Dv2ƑJ3`V$2{ [K˟Sx#C!rzrjjZ:+!<0 (yl l95'rⶤH6"u,< o%1Dȭx&@UL^Iy|7v6X ~OG!D ^%LiwewJ#-M~/zΟ'˺5NӝסۆT=-(!-c1 mgdֻV&㬠@zf 5F ?9)A}dV6=@T09Jguju3}z{-Ģ!g#-i^$ `&'}p8?G5>~Ww8pW@AFGb׋ %2&X6 ! = B&H`"7EnH$D*SXoCC'AHYE#K܂[$Հ ! ˖v ",,kذ" 9fyXckϯTc,@ ؅@v䷱KMYV0ܯip8Q s=B!VXa9SN,ZZ|x9R0A!d P #H"Atxc9spւ.qd*iMBT7@8WʳaHKnk"W{ ZP( ŹB BP( Ew:q+L&! (ERh# \>Lv @ߎL̳ID1p |] [r---bmm-SܷTp|nBx(f)7{$m׍1iŲhb`0`0ءZv^@ $C'+1RPŒEYJ۹ϓ awT@Xc! {!gS$-ȗMlB~GPX6@s1@dUx/@+&3DHAdB8aÀuv 8SS9P([+v& m$+zpzxbb[ayy=n^]̚Yv%f9X\-m{AKK?ȅW[N h OXL[ֹXΤEOȠPos>48##p$;#g e,,TNAêq-YX[a{+XQگ)LYz $ wIn4><%qte? BqPDP( B&?f!cYeF#>}*K"y" ,Rވl 3)XŪP,5/uI 'Ȑd%#}.`& &d*zKX[[,2Y?͟g 0,Lg;[Eb=DUR0" Y(cZO0 0N LV8򠸽 aS%w1\[G2"\DQcYu"P'uۙ[ eh(B}_dU0Bo @lw֊o ܆\@VȟǓƓr:" c Gt@!ܦ j7J2OwmP_k-phPxkO$KpYB&?',>^;[]D=a)Rcͯ®߫@f#_4ra~LP0t'ra~j*( ^sA B}#z (T-k8`4]RI_K#yA' Iꠔq0EFf ƄfDpI=b~h$ $Qaeac \,Ln+:*s'<jUPP0 pөV&+] J &l$LKՕϚsk j87db0 PUӇ RX笲X?g$*T" MPrd{~5L"oy5M 0II:3T#"1Q)|eĩa|xAY8y <Ә^ZaElb,` tTU2*S*W86XXeo! B8PDP( UY$n|Yӧ! ҪMɐ+ LeV6Da,< μ"ȏk>ZX"_"Ɔ:wM3.yIh v 085~Cf w mg`|;\~0裞;YTVY:FmEF: #3>di{_jW{hzBB* rEh `^ NJ:mCNl/T$&7\w _xxiHD6Xr"U s` bl(A(bF}Usyђ%R~<9 {_P(s BP(B|i?s$DdJ}p9aƷ/:`m,pOXkDM0YCE)]@--U󢘋\ab\٢&SMxu |Gl#'P熄j/d{Zr*f#L ba#fs.Iu&1FQ$'(Y7`o gU+#8DW%8m2]ڸ X"cX4u|k,já'L^Aù8WMHrTC$ݨ hpJ)&1M챬 _"I[Z7)$bAAVY#lV8~o䘴H'*@^SՄ+Bb qJ>C(<@@eQ#Py!!? f39T 7^{4GYs=R@jܤ?(б/,#K[YhX\ͥ\P(@ BP(Wf~{j<4,OJFn%FKޅ!P̎NT '!Dp``l)B8,kQC^ B.998ݦ#Dxmm9C?S5SVdt"):*(" 2$ZkUY:!4*" 3'D\]!;Vp\SXm5Woŗxk2+Ҿ*1U 2#N8ٲ2+?¶D"ǣ]Mn4]P(J( BP0y``$~yۖgAw^?PUͪDd0`dE1)eȰIJ.Q1'IdD g{{0 iL\RlgPuD$(w.>9&T$^ח@i#rWI:9xcQS 3|]\Pȣ2( ՊY$+"ml`5*I6E>Cdc>(KMhdwոj`aOr?xV{6ART bNaŊqQs#lcV}KaƅlpOy$;rwx[[BZU 5U6e.5J\gx>3A]٪P(  BP(̣w&?71# J)L<_ M,dW[A*r1r1%RO:i @1+G SY<`BB1><Q;8uFhUbPE0k AX&X*ae{c 1JrU#.*3c PY:%&JU / qDa$xɗ/јMUx"%eocS9qr@ȏvƹ6( B(P( B*Agk}L$K>(HrH"?6;t:EUUwΰ֦_.9TB*iV8:qLAqJK.R7W\,YT(™oiYs#.3xyU!OR_MA2X+>p?kyUe6I<"F agge}0 >,mvX>8)7YE(W(;|y r~(nr#@}MFvpG ~@jg:yGh'gAґ@(I 9e,a*Vub}VWWqh0pX]]VWְ9E} ;w03:pF>&>&11q35/N7nBr E5g[LRXآ G 爡--OlqeCB!rD<.3qdY ۻ6r&?+/[ŧ{Ͽ72+*c"g{4 ]mB蔇;uhŲ ڧP( ~BP( ūrywg#.8Yr92-\?s.1Qa"Q!=EUsm,eA[ƺ|aOTHT(rXnC4Oe]Q3}j0w w,f- ];0^u"LH Vh@D<ʂcpx#T \^^]5x}n:t:]RjwR0xBe-BRİKg;?~L`ETR`# C.2 0[^eDPs1A8'~΃pِg#I/CK=Gz=/S0w#'VV/Zn_h¢9 R4;3ȏ2X9;"DP( J( BP|c? c>JIvTdWbpja"5A *<|GmS e BFKZ ?^(&%XXL8r5*ކBBA^İYLDƊ$s=.)MA͏6cĊ7^ ?/=|_~%8g2Gީl9aE=$ƺ˘DvY@ BPPDP( |c}EPCȦY7{pOF6 &ScB];aAuMI>ֈb$=DzcN X7f'b<ӝPw@Z1j_ԅPK!^a!#1`0assSrXVavVumX%Bla/"\K ܆bJQ42v CLiNZ% + @vW)a5 IBu.Yk8th#;Q ³NX >DPf5W31&9B 9*˿!QZ-lr``a;&s<"&8Fg2""Q8'2A30 3("'\SfEt?;]"dG(!aP#I"V$( Kb$"Z1%1uTżxGqxۥ#蓧Ř˜IDGs@v)}]D^3E B Q( B.9^F]z%+W\PXfÇ"q(r95)#[HpH#\V"ic NV$g(#l=`cc{{'S-gLľL.,?W'l|h:`mV#Ν#|8!TדHD8)y'6:M@s%-VVWp葬x{T&4g LbA|)I7pP5CK U!5Yru5;mآ [RwK[vB- lno̙S R*V{؉Lb+ mEv/|bNx쎸ΊR"FBNZڃZ!U~mH4DV\o ,& #J)`}mջ.[x=tm Ͱ*}k ?2":ܬl7crBP('Q( Bx|Xgsb7BΓeT!+J4m*gs+aE! hdᄺD e.Ij'W8Ԯ*WJXLE )+=P@Im$r|YN*ޔ|C=ŅkΊAy fsAݥMwRuZVXI`2C*:ZY!.#P԰sÇرcߥ^.b}OX2KSȭ,vj{ι0p,kP*LmBg󰽕16(M|_]JPzWRX ańH׀1{|KU,/#'1F/j O$Lb,ؐnMA\M%BvUU"n(KG$RLgDƈ$=ċ 9zx q[_B]Cd” "ܨ5Mjm_ѻ)8J=d`s+Q( A@ BP( UU+__K/GE]c_U,..[BoN8{4NxN/o|1LbAjY!/UHrv-T)h52(Z B&UNCvM,a_7?/"vBs G&i7.>l3_As./~)]hW*;TxĉsY{}GHK ~AYUmE6$UJ k}72F"a!#g%1*15Fgy1hυxp4C_Ξ96O[[i>6c0xW/YIE"DaI :Lr.gۚtl j"dBZ*"@~ X y:BCsL0űȰxO|D /o=>/>r[["RYg[BĢ5FNE8W? BJA BP(WKKKxo[~+F\k؛{rpu]g'{/aLl$+&;o|cP5lT|e^RB2z Fh8HXع \ KK=c_ j nc FHM2""W(D(w]7P|7mVK$] o7N1 nbu4F"|\ N=aΩ\Y`* D{!jXH%K,aEU(>P %b "IF^o kkX__!;v Gűcac.R9r_~9;.=2b$Jd){6#?Dk~1 L$q^ĹM X.ɓddoc_=³/ ?{2Bkz~D% B8H(P( B wyqoiEй>>|b8_~/C,2\!,nre+?dVު&Ȃ1eH3h7h3ÏGT7@"@ciy[;۞0 Vp>D(ULdJn.>d"`y ;", ~hoEp-g{RqG]A3a<X̀\ ;RQ l[Aq"Ąm݁BABigooh'O'Zz=ck->mݎd2&& d2ʰ $BI|uKo! Ue"W1ls;"K@̍7j'c}{aD6 BL X3`kl |d F=|z~Y$&rH҃G ET!,Q!5p*, XIi&`4L@򘔟ˈm VvHHe nn~|{{ ~b;]߃mҦ(޸<}u B8PDP( eUWkqYXZZ;nN<"'p ;.\$?GUuQ-͈|&y^`X lY&N͟oj%,T !A 8Ǚm67Y~EFJ{PiiO2Ÿ}cq?WWB da$B|e92\hu]Y A#v`\TĀxaA2p(ڊqHi5N1L@Dgc=U"|L$0'2{w*2&;+$ &F&H-"<{TkTT8nUV!~Ys퓤 Z>Kơơ|{G6qGYYb7Cһb洳_Ѣ:) B8_PDP( c$DIpJ Yx̀@RަZR64kqQq)QCq" MgΜ'~Bw )iYD0s((8l|1Ã*e46k{JuT4.NT"N6nF D6q,k( @&D ɍ0%)#!3@ڲ@L6@'r?dDώ#ps*caL"a n:n{ }rx򛣖wPP:dʯj.ҢIP+ Bq!A BP(c oc@wBa`m~C;x7~/|1^׌l3~Yeɋ-V2C*?l< y1ZP@PfU6If$uI>WV[d13Ƣpse$B"ۙbT5<`XlrDR Av2RtS0LK*"i'ִ’DUWHy$"loocss]1l8n־ZuI BY$(=B4IX)?[[1E_}ƒㆵ>(lݱB  D? ?=G".'K"Bh;|idɾ+,J JfKZ֙@HM2#ވvby @+)#52ӄLvc[.ɧϟC_<߹g}w*%W B_(P( BqX_?m.m?_~cmeRѶ-[_QeTZLL_csDI&CI"2 VVְ#7_#1㜊X!KL6H;8 ~/|v{mSኬRm#s~ue[5dr#)`]CaӦH'^\v\̕)-~ƩSkwPƃ8NPg,~&faLf9&Pgkm &[H:OLS1#wA͚4PmQ>g/n}.$1uTۿ媋` HPQM|xeu% Q2D g;߭=ۏoѯ;q}n$ P( b~(P( Bqu//?Ny4iaii {=}ǯt2v/,X#-d ^+ mh%FUɎI %1?hfuCaye]0)7ϴ>ȋ ǧQ" EI\,RFp47=m:423]?c<90>Y!aEhZH忧)IMo*e0zmoTDцtnN EVң z|y2C8 ! ܖ<`=1TZkIe`"q" b a<c4m͖2E|ʺ݊9SDHm Ll%|P{qZ *Ͼk3hO_3r@HWnkW,Cx!~?o*ϴRAP(ߥPDP( pw({s7U[Idm+w~pu \&D%lZd6$_:BRFu%,m6$fs .sIVVHJI2|T|&!bZ<*ncJ*Du"Rx*@R4KА2L=JLlikq̙v74҆t/Ɏ6$١8H/~;hE^bV&3pBy5*k k!HD7µ{/+Ie?zK#4J}ii 8qwܘ;nԴxYa;ϒ!U*X`ZSM3;o(#Xfd2i V]b?gӲiR6 ϕeX$`B",71Q; # U}@tj IF;+VItc)OgZ޲ΔuHf0R1x]~$ BBP( 9oGL~ ɿkx쑇0un~g{ = Xp|6n}N eV_jnbpI3GP=)Rj"e<zXZ^*ZGqcxͥK.qW뮹 8G豣X_!`yy}.j|e˭2lHs&]SfH E}.bs.m{ٗZ,ΐ-UvOFJ&Oʟьm-\E>};~-!MHWirIX5&ڣ~92ş# d߈0 M͂>w$?L, c6KWQ!2¦h{|fB"˨Dj=Zw94ɗցx>F>c#BJ#d76R'Y]v'䘥BP(^P ,BP(}⊫Ƈ>QF;w~gN:"fsi|w}/c?tޫ~=~|weuUKV?dCYXDJ:U*j$_/mƓmh/Xu +?Wvg;=&l y|9r;=Sv |G4wa:owym+ٵVbF惔}.RQ4l#>ʟ!?v[]?޵)>0}z9ڿ$AZ$Bp`2eoDq:G,!^IA0N Wx_Xe;nT^6{r9k ڹ`%iSieDY  Sub5Tc/bssuZCD)N=עx j)p JW QD>Aʣ0LD^JITr$hgCGQ,nɕr=CׇL+;`U!}әVr.=o` C (X", Cb&ȹ/ ^)BA\ [7pS7aUB+>g⃗n? :}JD5YHHO' C¾̥c6%kImGPwDr myվh3?ԨK[Q(  BP({ 7݌;=z*N:yt5~S8 ,-̵O[o_=%_8sә*$0Ì[LTGp׻|!үft*:pt''+EgE䰵`YL%uCjG3B!2, W^`L'q Әvt$|MRѾ ش9vujۦ5gpI6q{ۊ>G`;<+H-s<[?wG#ȶ.z ):Yxrȉ"!Tk>KJa ʶZ]5Kufƺr#j '@@1UÚz1dqQ 鱈@Zp!RM "%ɏ"(<#BT+-Dlk&(dBđP:dRɒ㑯M0ķOV\wFﻏ WW( b~(P( BcC?s[=3Ծm?K<#O&A<~ ~>,y\ań/xz㟮X_䌾6KD@DaJξwk.3dNɓ'ddEdG%Tv܂*U@ʈd_ tF{G"ySCJǬEi>CoYXPc M ϲ$dz5|R>SC(ʳUЁ02+ ZXǿ cvl <5%M#uy"YLp,$'u `yPBJde}KB9m~25Yvc䎑mY6YcsPF&Iƽf&}|K |eӹݤ BPBP( ߆+:>W3+N~v۶m3oQ-W}`:0S{ŇJVQ6;WX C鋞rdEoP)V}FTzlo`8ey#YdCwS;e~P#M_n/ŬӰ֒0W}3$.Eڏt" TuJo:7%T]ߓd=PHM&?IDF|H/ "XkP;>8ݓβ-UaMv\H"ð--󶅗9Q>R!I6Ǭݦz$?h.uSٰ~(0W_6s@?*.WcDVMXYA $^8T3Lyz߷L)x X U "Ȝ NbBl*IJ,,w IDAT. *lřl%ȇr,!Ajű63)@II!K)3bP#'쮜GJ$(jRNⓟ?~iQyf['2*YAK:) BP(  ozmP;]<{漴cvӸOwowu A"`{ܔ-נ|,ͲN?e])oטhۿkY*x7*͂X??-m2 ݦ1o*ιh iU%@gl>H~^9)@Pƒ@D^ KI&;NȾxHDx\gMY}?*x,y[oiaG [nZENzdA$BX0̓)`#a"D@d8s-9F+P'2?HnI* C6Y ~`4hcxǷ&ӸL5Z >2klvoY BxBP( 5XZZ~ޞ>V| k]nڡoo}R2Q63h Ե {Y2r^4 #ҵϬ WS-":vTrM-VM+<T*)+.zG*5O?7]?w DonVhz砹mMїoPS̠] +Nڱ~%\r4('ԅxg .'^W%D%HI|TX"CLjhWSk[Ąⲉ FXQpi6~>8ǖiMKe՝R>{iki}o긥P( BP(sԘM߆<闭]{';xGpM̵뮽;W<ϱbƶ:6+ȷ0>/fv`fXgG2YK#?w6"2>G~& QtmC<V3J~rK~Q$CfI犑,5[b[DBޟ2V1);߶f+BdHyXeIBG'` {qHMǍć$KFPhR~7^#c뫷H'Nu8PƄL5zb)|(]I>NQ]c~ܛ*Yv &( BqBP( 8~s'`Iyʙ&- eyItJ&Ͳ$6 H9 ifYcI3yL2$'q%"$/AynQa2qa[.)2a`ݏd$LxTT'cezgHb$z!sL߼B)ѩ4^'H\ =$X LmliqvnIw|_* B(P( B1.䲹!ԓO|]WU_~ s)>ڬ^,t)c_f[^*fTV}h#>f4oy6X%*'AȚY'u>Ҳ۵m6YEO-Db1V>y᝭k'.䱚fNj70ȶM,X{o]K{3q!r1=@i !Yx:% &C²8h*Z ei0'';J #g8⾇NO?(͓J|FTϒ -DZY^.kC۸T"ߗ BP(P( B_q\Ǔ/~X01i\un:{HXkkq.",yFFFޑn,"#:Y)ya>fy]Fht Do.+_O1f2=vV1k,x޵A@fHF KH3myx;߶ЂHX)eFRA >Aa]6@:g),m "Q.X59 `W`/|$iP|Lrk3C<6Hi}.2s}wBP({BP(8rX@ /xO}W\}\^t:{f>0pgG͢=Mz=X^ݣ۫\Y" tdHVmvMm!M˫fax|M!E~mN0N.vGх/~kExmll1lnnfŮtײcd yIlw5dHrbˮʓ@$A"W_yC|tܳ5m0\ 5XZ-0q@i'>p**#ȇ3aeHp (/75 b] a{WLdxy-SJ~k>|r"\WH>"y%LkB]9qJrζThW{sܝw^U( \BP( .X U| s8|Ͷ!cuuB"pn<s%IB+$'ˢ fHEZg^&#ڈ lK4}}Q}kn. ہfd`wHɏ gܓmso7rAʒfH 1v:'c:\}ϔwRy!Asߐ\3IsED'OY,,!b9TmdCs'v0u!R 2)Q&/ODGvHa~]Y"I~&=e&LݦY_v+J!<#oؔws$}A|BA&hwJ_ d3 󱤤,z^UUJeh0of%[wj\J[J:mSƔ:AjymG}1N_;.& vsD՗| ) L\49 CDW{!nJY3`-!M{$Ntdػ2)?DCA1t9R\r+(5b9#  "GXlÄ\.g0M';os{xi.]gw8x 3$zw? Rzh-_L߭A@  b,.qP\\u}Tbuya嬘N٫ t|XVy$`.9t]YeLXyiڟ'1B ~kw:/9 erV"m}6 p"o:[so9 @ 8`lĐ<LR(2%\nKl%bxڥ^9 3Yoo&^{?OHVSl1O.(#smK> b   " pƖU@d mg,W%0PZZ2TUUuuu@SS܌͛7'mׇ)`bbfggAĿ^:[YՇ\KOvH8r}膞αj>uAл*+`8bJ3ר2XlY0,>RGԀ ) [p\rC >|BL1\oG@e߾@uqΥ-䦀̠t\R+nW{&C]O?7yLV4(aJgnGtA   &GfaRm;1 s诜}cD_\ӘА//">#0K%w>/|5R)TT֠`F y,..`fzL&6,=W\I{.]йWoD]c+jQ^Y UT(,*4f&0=5 LOM`zr cS0|BC\Qd>ZyUhlnGSKjPQYjU JScĘ81>FfqArtpCdzxs@ {܏^,) "pgy=B]$V87db&?%en8KWs'F:.(\:&zn Ȏ9# ='rWBйPaLWJ@x~:I<A AA1Q5Ķڱ*c7#I[ $l?]wK]XIR)*@˦-h؂674"YLbd߻/md[ͭ>~X$UbqEr ,9GCs:vus7!#*rQZVҲr4l 0oUF1dN }=M-FYy%KJ,ݽo`νزm6o݁:}kP]۠L`8݋t/F1><p`,x!r,7p[ u0`@].9. O]"v6Jb IM_ ,HH0g?7(~y?NF"D#/sJ] `N뽙+xKy@·$ ~xPE†* U0bN@_%߾AH!  {5jѺi3]q&)Y.i= ###((Įǽ1Y+<}c #UP94M̳}ch܎m{a](((-ζ ܽu/_Dn|t#D8Q;K]*,*F˦.lW_mwDkf3@1&p}ۂLPI`˶]ز}76o݁&0P?[v1;bϡؾk? zTc뮃3`/ҽG^GTCvМ9ڹ@:`ex~>dȽCa/3 U P!0CXR{,0o(:gr0>9/{eS ?ܿ^Œqjҹ"<)}Nn壶sp ArAAAwo}8zz|s<"X7h۲ Mmcp(!OeM; kR)ls=*I([*>x.}..2[^r%<?r9+?NyV=;-;0eھ9lf?ǧP:0W ]|4?lۅNŶKù߾v:~;BIi<囀T*}GӏiY?Q0@CKZ:#k}c~(2?,%Ms&}/C?9!8}ăa` ؂IyN;\5X)Dq@`G [37bsu5M 3j)9KXr#~X妲!rEg/|}k4U"-/ Sp{?Z9 @  4}S~?9tz+:|Hb b@ kcYP\/Uyn?%T)_N*kpgp g/+;2<8& ~>U58v thsBt9qUW[;W~&<,?t6}sݾm9ځS~ lOtk/oîGϢvMAi΃qw}cao^Be0tW  dXY(A9<')$"HAI 5rRއ-agL~=&@Z 6=(v&0ԖA0'J^9@8-ie:.T\Dv}!(|'~/txP7\X+w_ni AJ@AA#@]Csl[ <'XswۇObCjirr%u&# &[QRV~[wk(**G'~ʹ <ʋ^me)<0>0R#ձuZ7oŇo0M8\>gB8s+谳%^3u MxkF[Gת.(,*žO}^\|%M`Yb\0tO@>.tド~M!uw\))¥SA B;B.D 2^9 :7 )@n NTֶl.ЬG:8A':\]*h YJC]/_T /W) ɾA|BAO>ǟj۹c?OοHX~ B` f.ڪ,- ~Ss;|()-[_W+c\xMUp@<~Uy+&GtkS@]c}*GACK~_fcrq78 YܕQ?2R9IuN'|a"$k?%J\A1oECpHGL_Zr6 s8~7dxtV/œ!Α%Xs9oYs }'CT+3W;=n#   UT*(37Wd)."_Kl !6ZUU (VhT = tlۭG.pC0><Lcqa -#UPJWu hnD]c3uhnی_6~z~+?q8"C9OFر(N}aNt1G1f03=),9_PTTTסuonCyeuމS?_|Ja_-'6h&NC'JG=xt_ϲ%Jp,]$}x?^1dqq)yf>|AKpp0f_C{s,zn]E뾁l6+˅gH̷-G.[}stcfj"c YG6I;틊޵ EKVm܅ak32?qpXBI1 Br+D!=y!`|"w7 ׅ_.$V-%s).D Y?VdS +g_9;#!~J_97auE:]mlV#c$z? X $AA$ܛ/k^TV&گ_?˟ۯb|txET Bm:۹V$` AvH?غ'tlf/L/U>fq|}vt؃gвI8x z½׽x3yt+΁&yH˸v<z珅ϗ/wC}Å^G%̜|+w5@\.Y0 CY.Ug:d-sCO@9=9LMajbӓ0M sǿ2;=K>ܬR9TP0;W/%TVǰi.$qqWsI-s³@Wsk!rPY{y@diaHy!YW,aSV&,vxAÄKN 9agq8rߔR)-Cs+|x'&,;!ΏU*P >Wrx+o9#$<滌_A@  ,_~x{k~ܼ)>]=|uEn6ѮXl7cVBT?}}]w'kVS6D{ }woaS8v ̓_ <yE+yP{,(,OFA\ ҽw;`|dG"/\.>cI휜b=z Z@s:_Uls?Ďoܛ^{<͎;qwo\F+H`vzrI޲c=h,L>=rl=)pbkU%m Sx694뚴ؼe?zo^1m3p7s. Q ea.=<ݧ]JE+CD`!2LCeO-H\ 712?ܒUPްt-}%"Wr/C&nvyT XBA}ݷkĩǟɳm`O\+sB!6vus,|6oǁ+YPj=w04Ѓ_JJ8xa|^MuDC'CUmg|_K&hd;uvMLON,yEj {AyMcA4\Hye5N=5~:=9OU<#GqIXn_G93-yK@*>ws3w_v:5ކM;qw͌{.9rF Q1qMĔG"H"HNAr&110EPC9 e3} 9DFaN EF֡̽R,~,^\`Eb^ ghP SpAIJ5=WB`{#.uUl֚ /($AA,7cR)tڿ3ilڲ6{nfgBM&X^$ !k}~FرF=O-N}EŁScx?Lƍ-_ FϟS>2 |T’9r E^cbt(Rt2n&Ɔ/_}޺ >^`Q[]|Wp+^]׀݇N>k?{6oF"ꅷQZVMŎ0 Pڅk޼1Ƥk&CaH"?!Dr7s3BX)X݁z&#ma0%lXs! ۙSKa߷MN wVS().b[pH尘B )<!7%\ιs?b=F~ fWAjCAAk?9]Z_G0p6}=Iar|$ST$9-!N}ȘRI9ϿV\`kj ?GU-iٹ..T֣sfoϘҸ6x_Iso鳱7cÁ~"~=i_UޘtīIx}@o7^mCOTqj#LwȁfwN9" @  &xG3g Fסu uW#Iad>L&63;t̓f}7UEK8Wyu 3_vLnsuU}7wbblx1 XyZEA_~jqI)>5arדJ`Fyqp|ћ8bSQ x"\r~8 p]q+|((E6[ޡ,z=YesXլ or9aWt!ȥ=uX'3䃍ػʙpaWL0HBUŐEG%zx;?~<2#_pthJ~ywAA$AA, ο{8Q^Y*,BS{';m `Fz14Ћg\Bv Ln@0s#gڦ.Y\g}"_a6F*ndW.l +m$XsÉGoSf\t~9Xeoj|߭[wKhY2dx;ҁyf00x&&FP^U9&*DYU#f&Ғ^GQr);A}[10414abhA47 #M[wi5ۍ;>>a"r}}R#[aǡbVV tv {`1ap(0oxXX3@.14,dLRH00 9 aKQv ̢v?a=3m@zoc3c*.Rrn ,o),9 a0` :r9K1sR&`Z QJ 3u7 ٮ$p3>L']8B0f$3wPXU,JW"@ngMn$N]@t] $WV^HH++e9=' XH! X!F8pa4vqUTc۞#ضsst_ !6y=.XG$QsŶkj  ^C-4ujՋw #~*k1n/:vuRIŕ ֪rŇ }Nk*J \ntLba~E**wB[ 9y vm 1C"hg8J\\=ܒX1)%g{!37 w3^z#=*;MI]pwKaq 7CML.ZA@y<8yM8Dx1PBtY4W=? Յ  fzn DǶ֯`E%ض(=Q\t^B. !@sqmtK]<ɧO΅.G Zm4׭OmC3ORT\g&1 >Weˁ9c hjݹX|ozr{}XТ5[/,q.Kۚ0j7EߛK+1E<%RX)<+Zgp\$L[l1o:$ yd!Ěs8bc9I$7ii;;|&UgsI &&TAGBtO+?HC]|@WHrw6  V @  V>Qf ڻvb=hԵnĐZ9%=n]ca~ֳP oVR#bo.Aϗo|F5vUusk]{}tϱn0C~mnfJ_:urf26&t^ :.0?=}~ٮ5,9Bfq!}ᦩulEEZ`g# bQS5Dݩ[/K*i>Kk~7, {#P,%ppXƒ,D9DťY8"[*,DF\Wb '8Äa0 +7,J1͜z.} "nj&MmBueJ9lRXv,n؄- X+~C_a/< $~C|AAl(H! ؀Lcfjܩ_T\v4tuMm+J#onǹ~¼v·ΚCl57v{džBN.@ $u@_йz|s64+tC>{\Y\ުWRH|G5 $ĕr?] D,x[ۢd.! c\7ur?|Bz.1MN9grE iwkDI!pn.~95щ,rRK^qD1Wh|p >qrA@  }buqiZ7oC[tt-{A[v: #}3dK v:BGq+R. C}saJ⅜D~HTJ`A?  AA9CGoچft؇{Q^Y+y1Ȃ_PTʷtW|x:{zblCr|"çJhJz量P] @m ѹk+wCR{q%FX D r}Xnθ-2awbY}Bv.-}΍ #z [Z^ k 1]tD Gi>Uv i!ѥdB-t蔒$   /ci qߠ;CǶ=/uRV^GܬMآUpA;\°R/q}@fq 2ƴmYB9r {^<] XZh51H s7s'ªmBIiYqb!A`&Eskpyf$xAS˒2Bļb{PC=݋3(._#n01GʱC*ŁH6s) 6_ U3ĹעhAZCAAto7ҽ(-C' 2U5uxo^3@[D;"LpmhF]uJJ˓J%sE/5D4oTA!6c}hܑ3ޒNI,Y @9!_NS.rʥs!b{ rY,B\qVr9!i?xYqb A;"%3D̟>W:DUjy!9=J_% >^  $AA*?~==OHѺy+>?~o #@Y[$؈BosPUۀ64v}WV-z:G ι2~&BvEEmhA}S+;ҡ]v-V$9W}eo :D" )町˂B`xW k1<#s=?}}%&|z09 NfW r+SJ??<"y 5_**<(|@َ  V@  Y|+<,Z;u Sy΂lNFl|uoDu]#ZQ܆¢:O273".v0UTɾPԆeubq֨-'ȹ bbZ"8 >w _ AADLcje44c8ݛ/җBـ1jm7uUîU[/ mkjECXUSf-9-,(;smr+09T@8!"AݲXri*Y+D+ H%\/2L&'OIK!bĭެT~J_]!uh޲W s? ^ b-   7ztnۭÑӏ [^&  6 7h8~EhjߌMhԅƖv V 04sΑ浵yoC˦-h؂M[PY]*˹ v5su0y-Lq\U?$ "b !¹!8eω:]1W'Ջs](sycS n(,LtD ѯJ.x#_p?L-ezp'>?ws b#@AA &^  Fyef& A@љ71kAQqܺi ۴ddo3W a% -/ၒWB N?!}cu_t羲Y"~HBۇRX9rf>'@Xc /y?!(c:( XBAAĒY\o"Cg=Ja$zXJ`)m[waSv4nJ0>2 a/H [g.r-EEغ[w}vWT8LDObr|N=5bz/Xɕ"'/2z$:v#Xr, " {Ğ_~̝w??~?b.i?XRv}D#~E`,Wχ;o܏$I  $AAZvĝѵsV'@J >tBv}S+v?]QYUf󱸰7勸{g!nyoBt܇m{bSvRk?yGqܼ|3Sg@_3=#Ϲ%VE9eBrC\ϋ \$r޼s7O??!Stɣу\N+.GhyP$?ts?s b!MAA^]ԊLOkX|ǒ2@456hF0}!?zmkr\CHŽ;7}\6b le1Keu ?lM0;={Huk3 \>"_C ~LJ$j79Rs[`qm/~(3EI =W͟_(BA @  Dt߼ @ouSu~_߷z㮨sS7,k"{qM.Ta ,K` Zkߑ3߀a,cjb̺z{@C#h)?#PJ)p9DpYP8>| j)roxB<%C8ey-T k.kLqύZp_s`J>?z~r b=AAAD_$]6 57c`VXJJ;f,_ /cƆ;Lcg֎-uĹ7_AͫkaLX) ڽwUS5FJf3|ޛx-LMظ""H =USA\ Ng Qn:Wd!+|@*oC8duE]<|D+U;?NlCP/Uyj' 9y*'| `) XBABfq J8sq,%u` vбZs3xW?>^\C5,eX3WeZmo^?}ë2܏q"&rS?Ó =†SJ^%DHWQ}>n/a\˯D@+S y>T A) Xuv$ AA!,.k/\s=7%d4]r) sW?lBGV5pxvrcAl߽?].?}>zoARU~84C9" K aу%q nW„C !Pl']o/-|A{~B 88崀ΗCsxAz  / 6A}%, SYq8zuͱ>^1_aJ'{ﰷZ!1<Ŏ3Y ssMIa"a!b7]v.J`{+p'=}1Ě`+&#\ϓuDp.!]yaGTû#  AA!LOMh/*7fnK&/@ 1 ?+nC e7c3s!44Dᦉ_##<1F=jbexXm n6"sC}BYde41ľ$!ɗga/]q!#A>Ǘ_,+?  AA!Lh׾DII,.kS?<vg0 s!7FFGam. IDAT>;߾+ܺoGTa wĕŒ^B *{r><'b>A?ma  ~ۇ%5@4ׇl?OWXAAlH! ad$ f-Rm:d:@beF~cf֘uk=3obtwDlGX0TYU7Ol2@u`pL5u 7~0DeIYּˋa"HX8 "ax !ŊB@,&/_ , DjD(-["x΂AC%žO8A} AA! kJs+al_/Vp2,e1u,︋KJc>GqO6<7a9@غL9px~ofݵ ?uס:pň XN~ Ų/!"_^у_<,ǚ{VPQ΃a^,wŕuď?sCA @  BH7MTlےRwl[_ijn"fgïd3@v[wAaaQdK[UeYi%NA_wcصPiⳋ-̽QЬ}Q s~TG_;E6,beklGl]!1$$ݝ9{[ Oއs@ObZ%H?mA!  "Lf=٥~c_-Z xcÉf l  yh[}چ&Ჟ"o5/$H 9AjPUSHf8-]!CPX(;_<:YWI"=DS! /{xC? @  "s[=>}XuǞز4{vkGr豩skl}l6wm_SFug}S ix0!.=YԹ=|r[7[K<DuHB8ArW A$&DFճF]),zJ^'>3P-*ӎ   AAt߼Vۚ:wW>p_Ɂ#'3o^O71\ f`ؘ!ZǦ_k{Gdib~nvCQGVTVViJޮhm; s=k?ϩXV*$? e\vXk}.י?Dui~N+|g_3$C}G-U\?$~A3$AADpe,,̡LGFH{Aέde1w)l]^Q⒒6LvMǵhJ`cnLرql"{@:pqX!zO"%! CD5snuMZs:=s/oaF[5ƥ:A AAdY\#;Vm;vk;o߸/O Yj(=D8kc:@ M.eJaa8+a~|.Wںرoc'Q\lQ#AI,g+~I !DC5|!̂:Խy> %?H  H! Gp#r-"46gC/~^ɲXt y~+ZZLn9v!WT&V9ZDyEe*k6'NtB_{d@]+J +%\+ !9x/ΓJwxt^xr]7CGʲ\qO[ͼI  GH! +JE.=y}31<@?9pݼ'^pk/ddzWcsˆ@ ȓ$:+}ذ^?l.}Z6gȉC(e% 8T3BN"1Eq%9cS AC9ՙ6% T ~  8x_w'|ík16:r_Ǿ{jq28vK,DZ-۸3 Z}weYY/ʱs 3C *^|1`BQԋ{E}y1kxEE*r5:H8äC媓9k|ta:UֳyN?um~B$nLYbͲM@u8m0#~S]}Z>Z}u#.ÚX1XX5cXAճKUydĂՂr>:Ru+Y7S=~PhYDDDD|QFcx~nmݱ =ovI}s]_֫^5q] sBڼmG˦-oPmWܹ{Le饅Ru};Ln*Z~]/louM~{~K:-۬}k-__خ1Vۯ^5ZS׮a_+޽qֶr>`yɫJvm;iY.? DDDD<ŗS>;ގ}SX^-xO s >|}'%HrE:Դr yDcmپČDPmm@m"Tٙ)mٶNvx//zi]ʲRqY ʥV'\dլUB YV);XFoNt*WM}r{zf|bGmdBDDD$o|Ϟ,I¯xK_ٓ;>?" _೟d^[֫}{% ֛h35500صAMػ14<^%Ɏ# i'.?+T;ソk宽p]mB dY9a{7Yo6B +gUY+gTeޫü*kr}vɵﯝRqMY7f|ܸ7{fG6!}""""""AAkj7|Wu]7H$C]듏} gN"K`K`Uoa̩Bx;߅ݷ~kT@kM3ΆӵK`MO]A.Y;`bӖk[;~4vHx4`M T{+ʃ+ ZjQ#?n\OW=5p-ՃDN=B\Ֆ>c`(/⋏|* (x[ކ7|ۻ>'$IxހwDB]g.>-sWmMyZx bDC$Ï/;{Y$ 7le ;刵Ç]^{~hv884n~_5_ vB*CV~uΐA3DnY;[RC|Go_c JATe&Hc >lJyBnBDDDu.;pw^bf>G~ o#( \s/7en#IrS=}2._8[WM o;^;v14/txڍpL/}U|/W.]hTT}╯}}Sv74*XVCVnwE8ƍ,Uڶ -˂J9@Vq1o\ʼkTzu=Fjy>n޿Z ""wYVQ8Ao?'t-ik/x+^YVz/eKAٷ?5IG> }`3 #t:-vL"vmaƱGK_< hox3}Gjk_"& {px}_Ot(r1\pfUF[x4}?dYQ}FuXYX,{]jjƌU ׍}WX;c%*@ O<*7`(86+ODDt+bb/2K51wqwl%I_m|(!}\|1|O5L[Jb703u1eY~䧰c޶^jx+^ YT,5{k_Զ`[rlODpOAGB܌@Qۻ~?Ħ-ۄȡI :r+Bnަ`& Rm?j-U+Zy*XYaՖZ7@VQfǿ~d-56>wx+_H=k_r}O/c붝u_$} i,E#K`]W>񿾶LRF{__k4ǫ^]ox[DR9{n۾xjj禯N_ş1u2>ze8XmPf$  ǿg=%T+/`knx== ` tO~߿Ohf̮ϟ8Ħ-}]xod] cfJ͟>9Ξ>l& D40rr\/zAU_[kWy@m޼YPVX>n2 ]yJ9@* ߎ""!"""jU?bێ]u0Ms߃KLӸp4f0Ņysu'G_&&7cblٶ㓛:@o| 6/1R-+?|#ؾkF&q}S¡'#mY'm.w;[?FX;}R^oڲ l[gN.ǩe|m܃7_jnkl۹;v1D>0??sBI~}_3O=φ:(a{~ɺ,|?'sڳ}t>|xmV&^${'@_,] oTvWm~uzT߯qv+=nf$B'""!"""jLz i{CP066 wW-9w*Ip^^K*?}2m>>03'13u33SXU*u$ O`||F'&h`y%T§̪|>wx݇Ǟ\{%׿'>C"$'1>3O.P.׽Ax1߄}07 bvf 3WQP(G$&&7ct|cڤ|"Ξ|ÕKV7iu6qiY{fH*v W;M2ZAhVv |"""&ql5x[4[vH<Kv}SW I$ YBX"R]tA-ۏN>->?}k#Df3i=r~?0P l{O'?!<◆wpd##m-o?k_\+/ԉ} Zc} ԶW,U+rne^h}8~_A,ں8s8>Oݡljc5GC׾yy}-?aK}"|/R/k ZV _/ IW(~~4\7<+/vpX9/2+d׶H TG5_Q}.wEDD(@Z`nv; z oD]C8ږs,Sl%- ~䦮##?8s|Ouz8s8v%}IW}_`ano|[4S!×> si|~43{BYr-6+dm0dQ;a+ڿzk+;*_yJ7Q+0BDDD"A[*7_׿r?I\xI`M.Im+˗_ށ5bǾU|募B^Z/]elݾ_~aM?a.H>;w,ΟW9<@T _6(t]ogzz!k+^J"53VMIҫ_ե|Ԫ3""""""=_~ Utѓ0?7o~KWٙAd ,p rۖ}Cxk_퇱s޶^/}O< XVc-~| ;^1ZB y!~g~5ܡ'x&D*7~s8ۄH_sfE/B.WT nT *y.R m!91??W0urOi:n߁;wclb#1`r,KX\\@zi3SWq 9}^D1y '6!L!@$E89,-.`fz ؽ[G704YYn XZZ,+6@Y=-]+v"[=pQ,@p}N.X?DDD- uYO$DaF"D"04Me.yy.<׃eP,`eu%%jD<, Dc1D1 UӠ*l^nUB!"Lh"""7}y6On^XC"ɾ~$smfҸx._۲:RAͺ}{qp*kky$#c-m˲`t|ƅg1=}AfLlڂ;wr{$Db1Db1 b}(8|)L>{EPiuFkD/ I6oݎ={-[yDZ=wmYt.?|.۔bӖmfO+>M[ܞشA`qa~?y~}R+0Ҏ0k4 : DDDDm06>]{oGr]6 O$qwbq9>uBeI1 .$سwvSu`UFF142 *҅x, ' CףaDp}B]CA 'I}H4]`,.^8+^m|bur#̵ sV0B?o-Uohut"""@Zhxdo ՛6oq%P nH4{{+ڴرk܍qqd3x/C,ou?pUm98POl޲ t a`p{oߏsO…\Wx[q/e Gyle*dknSױы,|kkd ?bu44<\x'=gу׶kl޲e 中r;ynb=ܲǏ>+vw\%?+DZ/(zֶ;IOA"""݌U@DDD$;`rV@~qz͔H‡^>[s YoԫȾo֖ͯ;"r, <"FPBeDc1 bqDcqȲp'&7cxd'ŕKnۛRgaD5M/];?7s$B7 br}0ȪBeAm;vcmu7DZdP,Q(aY%ލu:隁w݋M[pȡr*Ecq gN֒WN|SDDD=!"""jMp008ԴA۶IͤQ(P*Q*:6\׽ pH}B ?z-?08{]NV-¹38q칚J+}bhx,maLOaiq>Ծ"O`C(uz)>GoAj@: ""!"""jiFp}4H9,-cvfs3(w]1D1 ahxC ٴe4MslQ ^ %s;≄puLLH$!M`0tD,OT,""{X4|σ$gbH$ 3BǴJ%LO]ԕ:\/ 0m\9u.[z.KH/-ܙSe~ clb2tPYQUy}8w$Μ:H g^Z*B4D"u+d ""!"""jiFp}"=bJ|<\j05b!˅<._<]1:>M[d=#@jހ o a~Ln*tlqsj |._ӌ`blڼ #O/|>-bsgNMksgO :'v 5ȡP,Z0Ņy9uؼu;Bgێuǟ?hv;tlr g4u  DDDDu2LwH~2VsgN`ض҅s:8.})eԬK$"`^3ǑCOba~Z*qq\8{[a˶Ki{LusY9ue7 si7A vѹ>701rpf0?7D2``pXx͐daԼS'1ADDD@p=/iFB/|DžqYױkSW033Ma]uq?6 l/oB R]1b3=w-\3pEصBi~\=Νig5[(:N[ێHm;v-UVCO.?ٙHBcǮېe`au\kДmM PoaMn&t̙+'Dؖcm? lqTM>|`{P$C2WA<u;gc_]{11Imp=5Hfi6 .?u/z|+Ez1\p.5d0 Mt%H$D2Ux5}z-"Ink_BlTM:O }N]A6x<űafi?p=U@DDD$.b˶BNCptӗi p1iڻ,nضc7N}A㔊͟(Pz/':l/83}]¾wCn (DDDDD"@Bر6@Ϟ z:gX,`߁2NL`f _n}(' ߠz^">]|<} y/d](J-)H:n;gto0#V|l+/-.{ǝ$cv DDDD.EDDD$hxt T_e\l&!ؼuG .s/%(Hvx 8GQ """"㓛C=~i6P#C"'}onN-P#"7jI, mGiz mm :vԭ}BV- <۠:x,DDDDU@DDDT]JDDDIFO? ҷpB^N #eگz ˞5'z`]u>uc@}DbPڠm""""B #@?ziFzQT%1k}]t~W=VPSTh}"^^& H vXؐCDDDD݈K`C7 Jr-ub@l{M7 Bۊ,1v <U릉D2l&3dJbP /S ruO,-cd|6#XRHΠ""""E CMT+dT8%\7bqy$6~I}]on2<'";{\nz=u5^&t_V"UQLLwu7?gz""""Z@eY[n<PK`:fDk4K m4]mUW]C'TM"M!"""Zke}@|I+1ݠgk/7-Gh ``x4"#C"շܦbbRV 3ʁ!"""E Q(@7 AQT wI[ymm ϝm4H3.nyX(GJE- }ЊԹsWn+V5br}8RT8p ,"""vaBDIh[T uS5i`ܰz]vΞ$bdӎ++*{còJK%XVUjxH'WUzu%9XV #㛠(VtT `[%V VFr=9CDDDԋ!"""P>᧗&y"%9| H?8*/H!j"畃"+jrh}Թ7b(st4Ggqn d{mö7t"|spQ0BDDDD4MG$-N) A>.ty}qrE$RHF/SeD"QDV,{rR!RXh]ttU zOx"?x"IZ~^MӠiڪYPm-/VynwC"""[ DDDD$o`XeǶ8v2HsrhũdYZ"H!K@V]$ˈDciRI5dJl,N#H"O1Ӗ?5qMG< 3 ,`gw4V0T|&9kڦA>u-~mU*P* IS$"84]ok}ȪxTRy9ۊ6 Ҷ '|C6lz"Ì`FbeH}Ce,.u@DDDDcj$ #cZeBGFް3@tU @G"f*H@ c,tmաzuM/!^$ aˆDaf db s=9CDDD{!"""ǠJ8B>PJ 7j?[y|6|<+HQ v(F&v tcۨ}EX, ü )/&!umA?ڃ""""*7H,|}'Rl AT=('6tnB75hA2N|-m`[%dӋ?5ua@͖E8=c IDAT!"""u%L -󫞲G`*C) |߿|IFy0KqHpPOyul堜n@ DDDD=""""H #Jq_V&A߈ ^[/es` mSthU˃M-r$A(\ $Iziz-jEDDDD݆2IKHA˴d:vI\1F^Kt)os]XŠv+-?& 3جVSW#ic4m-oE(Yn,"""c 2$>򵧽CuV Rc 4x|t M-ϦH f$X< [p Iմs\ef$H,Ì:"""[Ɠ␤ q=3 u܍'MQB NUU oeu@nC704ƺ>m>y2\F,6"%Ϥƅ(H s3E|C! 5$It#ÌB+ʍo6i<,O7wYn@Q 4nT¶,ٙͷO H@[B8 DDDD ITMfuaBZ{GrҋsMYjV.%L@-#֭>x84VݥΜ I4Ä]*6hUDDDD:  IKZ5]e,؁H2v,i"lk& ±J=QKmutKT0H $jng {$oc["$"""aIEՠj4MP -~sdӋplg j_G@HSZGaf7 Ƕ#@{'`È ~Hkn}XkGDDD(@RVU3jZ'[-rvF@7LX=܏$B1gm}X;3"Q m\.~6jz$vHDDDF uMסtì8ܱYAb1b.۶ }A?JDN/Tgu?i|Z޻mFQPGHA3 U%눈*"""$ a0#ЍH% V1B>ۂ$0gzb,Y`Wǽ Y` P:@j 35g©IC/֑"3|?+=UE$v](?^P,9rJ7#.oWP{g+aFQeʊ"}Ux Uj[pul)#mRWhlDDDDQtDIv UU,,0jX Ku@߇y52X m.% ޙXo@< ZCQUDIf;\|mJK.[)eYU&.ήupHvX٥ Օj>_4cحzٶXpV4hq^[9{"""$ XX肥 pl eDnKY] DehF sVm@ 3u$IBe|뉼/]PH `i~߇cXE 8][k3[#"""0BDDD_4T?Sfpkõm8'(*"8 lו'S~>s='L!0וQ7#B0@(L$YAU ճD&"""j"""0#1 k[ .\ǁpr^Ec=#I"ф5bUEf0/C$+`Qmݪ2URѐDziA VX,)4.Ò3LXn@Uuk"""f` HW}mqlvTԥT?&9q4,K5}vcO× 9жD<ph @Z2!d^j*0kdEF<ՏL7-%I'Rc\)dVQcɾ}V\6,N#^DS"Al(H @:+B6c6:ItdzV!O mn7:EQ70,S=yɾX<)4U*A5  DDDD 'RBKrlKXZxpPdӋLZ~]VNQT$Į$P*4g9|6#G,#50X^( }B?T*7@$$}H޻RQhWA""јpeyQHF$L ` b,)P>оAP ,!QaTV,ۛDU5$!Iе Ap]B^8'I2 ו,˂=U,tm_oq"erlBŞS5!ضR!~RepP0#eRGrDc Dbq-T>"""f]* """(M^Vg=mXȷ8.QTԊKMɲd J< A,}|e(2t]xy+IHöJ2 I"ѸPbfw4P]7R ]4}P3;4@0 l$PTD گ}۝U@DDD$I'SWWrl |DSe|0+'71fBVВ'UMC4gM/Oȥ uÄ(([aFC.Q\}4]G,sCl;3nD~׶˦[RUB^i%YV`Fc0\ׅy|]!(THX"3Cݢ ׵4bXw$"""jS"""p"EB.UytۗM-@ ?6l,A_'!b8RUjK0ahKB˖r]l uQD86l˂cYƂ!B7MbfJ6ϥC AQ䦷?I(W=Eni(2% F$=SurYs( UBDA<۲ж%I4]/ }C!DDDDQ9_*Pg{-"FvkI`QfAq uy|߫x%IPBth@/ c#m@U*'_SuhuxϿ> dȊUՠ*4U_=^G۱bu}"Mpf Q+0BDDD$He r.nRDSP~E]r.$44)X6r2*<D% I^OyLz ZPf-븎cciaxiv AT<9}b߅|mىnɿYDDDDbt 1ktwX@6ԑ2V ٥ŞJ2K |.9Ԉ Ϧ^hn M/ 馺e(Pzg 2Ɏcs`ݗ"*uIޱ}|mu<"8HXo@y 'j#d֚ W3A>C3_ۂ?2 Ġߟc3 p5Letb仅_g§ Mc{Xv ȮM>vvݵ7wÇ#||j=ZmG( p-mO۠:6s[?@e9c_~َCel}sGVeZ oOv>'y#@[+Sfy}^&] H! pc&7zQ^7%ںYY`R1ρ䰔>8b]ϟzsCCn\ FG6:ZsihȺ6; wm[á^^"xZ+o{ QukM0Q r %nr8\0|p7t><>r:=(r?^i`;y@k0hkmlpZ4^-2{J1;< ƝΧr<> =x|*/_иr8> {9  uk hZi^MTOO咫tysB#X:Ͽ]S-OO?=Ģ赾2 me]뽈煇d2B̃k|LuTnoRe0Χ޷Ҷ yH#-{7\\TGvLe*OO?TZku@ʲ,_y]S'&Sk-Z+?|44MeYgEݶ&VN8=k;ZkY]エF2<]@>i2Y^dZiJ]ݮePJ)۶me2{/m]p%OGw MhEG^Ϻ~< WTenkŎ=d.9z@n$niSr- @mGˋ]]s-[ضM :z[^@yx@n{vD  ?`s"aM@8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @txIDAT#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8G @#q @8youIENDB`sinatra-1.0/data/theme/corner.png0000644000175000017500000000052010742255525013751 00000000000000PNG  IHDR szzsRGB IDATX嗡NAEP D3%$ 0$HHfW)vf&ϝ}(,us`ٜ90JAՕ&4|;B;h,@7 @ X2^DHz܂J=j^4ץ˛s3g քxk&Wߊm)=8 ̧v>" Uߑ L ԤyX{%EHWc~c_%IENDB`sinatra-1.0/data/theme/note_glow.png0000644000175000017500000000226410744141261014456 00000000000000PNG  IHDR@`̼csRGBnIDAThג0Em}P$9v׼X`siPa?FW64 4@@G> fywߐ.S}p=X:׫ܿ @hێ+AA@@ )` Ad2E^؆)iGk( pQ蝀g0X9iGðRMDIاl,$h*! Ch6'F- @'ʓ0X + fӆM^Vn:vha['=<6`ֽ?:''n>ݜ0'Ilț ,3Yth`.5 AS e`p\?Ry'l'@=Wpg,,XT;v AI"4g*zcs题=/% -V@U s[zSIzO.Kj(ēi_1x/ / / / P>2m} scd5H8 ;H(?}l=rk Uz!؊ Q T*@/M|iF'N݅n>#ij:T7Zyi+.r‹ r\6˗Im}m.Ez i x$| p"HQI6*,!W;l` eҡY'Ia( `6⫛[s0ܰ!;3Bh=CG529:7'mzc ZV.&d %6Qh*l3|<k|)ppd[:ީR6nտ ^ufunuv\{"IENDB`sinatra-1.0/data/theme/select_box.png0000644000175000017500000000317510752576227014627 00000000000000PNG  IHDR>asRGB7IDATx[r6Ed'R,!ۚ#3D~) /вϭbIHD4+b?}@i!qU c z_+0|Nw@`guw %H5:Ǟn=٠W@`gL6Ff. N癌)zfE2LT"  |JW*̦"rAc ҿsg.@wfsz{qi@A`4㠐< o~_q` ?XVCu!< yv`e"l@.CD%Fw*S}߿_^^׮8  0Bp+Kdgb]=n/"K ]8HgoZx0g# \@T~2@?pf4 JѬ`jlOA`jL!5|~`8@Z 0Htk#"_;x.ۚ0N?E 2J"WY@OŲ:3vF]gK2$Uue/h|똍0 W|X<d}}; =PD@@ﰟ1Oޢu&{i,]׭_V7+D]@3m8'F2qf|vLu[P^ձ_W8mkRʖ\9@-̀3P׮$iQV&IS3M 1|y"8V$i2K2Yr*QV+\}U2qMjT*^lR7"& ߵ1@3eʜ~lloƳyΨ'RwP9TFs󌐬<0iAd6#[bxWР\V`t6 mP,!Vlcu_iǶү-;%IVk*oD3`?Y@+VTt|*mkgS>;>> [L?ΌIt@K>Y_n7[h~dJ9dMV^eaSVgfUy_E˭23DseتI%]UA^}ErKZjWm;{kfm$L@[]1cx'-2XYJp f13TtKf-pmw-3\?qLt=Z6pPխ8yweg,9~qfv3ñ'- @ @ @ @ @ @GZ Y @ @~ri{o8ǎnj[eQV3ʮݣUf^HLY]bXĦ4IENDB`sinatra-1.0/data/theme/note.png0000644000175000017500000001020510743754526013435 00000000000000PNG  IHDR@@iqsRGB?IDATx[ߏ]u֝3w<CmfA6jP1IV"}ՔƲ<%< x;}01D j*HiR C2F*ak޳חk{x4Mz%{f=g^{o}k?O?cp~KZ ~{pW^yV-,|sCB P2SPF8ycː$ Xy@-'W;V'^`\<>ýދ۷fffϷ>7nK?b4N:R' 0)?؇/}1?LS-o61];d#{iJw7|S~o?g̩WORǏ"A,AhT"GԠA®;G2{yyeeR-=]F/Zb8Kw Svzf[S bgVVWhC@߿-h;Qf< jC`eRҧ''QbJ leuC A}B u[}Z# *vū! dqR{:|L$'u0K/'wqr "'QsFdqq*U`g!mۮ v A2kq"X"4 &['fqbi7ҖSVGFɼJ?E۶m3^nD6B$#Yc1rP m'w7/R qQq)5̑"i9tC9 dE֋Ȝ2"B}+{ $~@N1t% Y\BT S4L'0.. Q'; Hٜ]if.V=LQ`9!6F9aN"(P@C1ʃ EKIznj 9G@dg@j]lYmGGYܲwORx\F}z?S1E߫CQS2'HjeHB̘ġbT}c)9 ^}lml64}jЩH KL)vugDMY0i(lFD)fRϜنU*I#,vtG(1YGM|-dHӣa.{U}[ӪZ&@t-VgLѓbL1.$cVA45%A!BeUbtp0D9duTT)R1hꏨ3$Be#BYV$sgROVXe_{ iO\lc4:YĚL#ߨPIɐhCXgN!5 BGp[ Up8$nXDN 3ԩ,È:fRvn4C\6Hk9 4(5T tSV:Yiuēj(9S#87 h{k<)P=hɇ[\$$Tv9ݾF"Yցhq`Ų1I r9KLp^mk*!X|OgCtC4$\tDćde<oBB!r(1l*p`&ƭ{ Mo'DPM>1E몾,ּa޻~RbqTZQڝ uz31␜>2Q((URh0eD$`0&25TmZ7aUA$S^hÌIx 4ﷸL%S!%@ECe+@37mpvvToZ!Jsz)ÑFV8({y&=M; + ff XUenK1<-^)Î^/Nwh׎ 7-:.!_ vg ̲K YXz|)W"" qVAke|.R!9~ruqaǎĕ~sO6uw=#Zo PU̴'^{tr6:O^]L~\ g/]}~`0Љh.ÃN}uJEV*V*O'U4@)lj|EP\xq1Limۆ{СZPD6Cf݌{.RyaE$"I;m8ܸqIϮ~ᇯq|f9U*2*dp%WB|?"Ӗdeeew4yuAl[.?4ŕ_')3ZkyYUް*t>aN$y移K)H\___m`}}}unn%ϟ}]w5^\\vr* ެ{z^ГME}gҥ666V'"px~~~ȑ#WfC :̬{|q$;H)MMtFFIE3iˡr*ʗO1 ξΛ7o8;pKsss\XFКK1;X~v""򲈌E@2 nqyy+DV?^4QIENDB`sinatra-1.0/data/theme/note_player_2.png0000644000175000017500000000447510743667662015252 00000000000000PNG  IHDR@@iqsRGBIDATx[MlE<gl4Ҷ+Rv丒%=8|N%.HKȮ,E@b4 c=Lj\SS -z|UyF "drݓh`.\ژ\7'|wiZuJaY][[ zq;I0>~4FG'P!eyY—, >m[h6QG&ٝ/X(Ә 293011KNZM!Nv˲ki)z̕+y!2! ajj50-OUlQ7qgGi/ r1`U)dZV{$99ںXRPƥ$濾Q@ i6]FMIxpK]17߮HIK^ثDž.2ŠPf-R>qc$$~Ь@i[A?lR*G>I`=;;$q :Vp7DDžTpFǤDe)Dy mbM鐽2. v'\Sn|D/p\zpt2TZ}I+#p ! ᰝ>wr=>cGE> ٝPjCZ~8mQ*⃼cJ/@y 3/Tٞ*_tcPN P9戡߇)xv Fbbp~~Ѯh]S#ASg1b\T%96JSu}cq. r[4[LhNez 6r'EkRϨCM=ǤEz1ފ"+A|):Nv5jyއBIRn/ LK Q">1(hoRWr1!ug9H2%f<rt>)K_<$$ Ũw_;܃S؟$iѥJ!RGԂ/"k['+}]'e,MۨTjI>1Cn%>tx6-–RȊbÓAP( mrS ۦ^Ja@ԑ|tg^bFTFɧל;8?VnXp|/iq'>9l>}..X.iDlu`ʌBCW_Hx9,{{O7wsGl|%.W*Yq܍TZ0:9#Ý<_z;gka%VvǏ?.txx/_ `g{izNҴ1`kծV? ıЖcoow,ڜ~1#\LqHpO*P8<|ZaG'{;:+`BLC2C'>}{z (>hF&#RWg-&_s0aDstU{B`Zy!s}SsIENDB`sinatra-1.0/data/theme/eye.png0000644000175000017500000000243310755030516013243 00000000000000PNG  IHDR@@% sRGBIDAThKHj]54 Mm!H"4 &H mbD ,"D=@PzzU62?k笽su(YzH].@@g6ڪT*wwwt:!R("Dht:bl@z{{;P(D"p8c]\nتb\.% N~hNFR?B*hNg.F0.4GGG5{b 6bt:F#HbP( t*BϯNOOT*RP|L&5#dD `DDN&| gV*&k Fj5.σpB~ B no0 uFfhiYk'lV`u:]Rz<OSQRt d4o^H.HTgFLpNNN( |WWWM*:PBp8\@Ql6l67t EQ@RbAfpR^Rٌ_Ab1lR$x^O>WU np fi :{:@XV{rsy[RY4(M`!?Q9jyB.bc0 ug Ҹr x? E>]gtbj$|in.nJ{&݃n'O>(ŀwES㧘zk D]BVMlnzbgs'σ ܸ>Q1U)zjlxtQF\߼d$ޫsr6-tR&/}gtgk'O$!*"JNo^3]oJ+Ϸb0Go~/RRF'Gyq5@r4gn)_^Qվeoa_Y~!Л/OTw:3fܺcƥg%I F~& PLQGf7 xɹIxD1i&Y[.qwMOϝ:^xu@xf0mrW.r"fP=_+Ե\R$ ]]^:Vh}uLd6=j6y:&6"wVmiLub_6q:ۏ`f鱞NՇhF6| e6akqccُ6F&FzqI*$>bHim0u]}7MnJtLCw]P1JE1.`6}b- mjU~kB.hGB"m<ݞ+%+ ѐ=H PV|eݞM Bty7+ i]t{^\@۴iӅ$Ht60sCm \Bb]e&~yu%/'6钊A̒k<:O"sK7V\5v|h@]3W` >hR9W.ε [ $]Tƀp7D'F n%6rK.BEv鐽qemHݟ4rs., Gĕf=/ N!Viߡz:_eI܇cwp>wr=>c}z3dwBjqzM FA/R$v py AfW`~Ct!A[>,*c9F7r%b!c*1]ck4zNeb ~~Ѷhօ5z 7 :+\ c+TP\6JmPїmIle\YyS pEmRϨvASeRԮFE.\6cVf{Lbėd|[u-O|zCf$o Q+3 Bٗ!7qmMg]92!( )KaD}Ӆ|髲 4cHP(NDL}HNb'Imi(Vjxefm 4@K71ZEt8'fyȍ$]og6 f`t#exrX:mIGIRz,^^3l&NdA&"}ln pf8~ݡP({JNMji=m0K@t)/ܐFO%w$[qEmv,vQYn8{lʞtS~v n k+k+2' irRo&7l }K7^kdEBEwcde_㋬vGLB]$3`G\pmv?:ڏfϽ9fK^i^O[?eB'{l}ldVxF<,qx-ډT%. m]}}wv 6/F4Ps oiFʋB$B§&5)1 f7|qΪ!9o`Ԅ:@JVH6:R0V5࠯ۦi]-0a F [e``u8{4}j`PZ#Bjy{Vs\-IENDB`sinatra-1.0/data/theme/perfect_note.png0000644000175000017500000000433010751151553015135 00000000000000PNG  IHDR@@`UsRGBIDAThov_U_}@7s0)QHk)RexئݗF ˦P"D(kSNSuMٕ'E*`Ⱦ(țyϤX!;wKm(@+yxs#}Ŝmć,Z/8m5JJJYyoV86?~»&~j;:wi?Łi- x+TCDLTNm(|f_3rh[7{Q&fTI/oUnyHLjT/E2{0-O?AXpTUuϕr3';]s/վ~ R.8_+5D!}D'X|ɪu|A[G|gÊJ< (17l?( 1lƗߺ807j0z?.xoY M!,Ѕ/ůtÒuH*QtGݪ!| (2$qO)5Cm{mIWUѰᖻK!<}uX5}*HRqֶa;"lشk|M9_ Y3f"6-/lU coZa~кkt&ް![]qǟERӮڱf4?͠&̙TIJURaˊ_tYj[eUFcuo7L8劯͙ecO a9Qpyo /ZU5dĨQ͙Ў11fZ'?[V"4<)DȲ6Y5I2n]b 93Zkda9X WfG?[{w|v$Ƶ$&iUם5as,筣q_CpzUÆ8v95+Z^i*2Ȫe?ŁC444f"q͚-cƌ-ڦڳĜ93u?Ünms- =ªb|eخ iس;[p9x|$5L/~jȐP8kز_^;qO:^ݑW.y?{dO"ͨb^#nՁfƒmc,6zf=̫ TLqѤwk/MBھs?&LZR=tySKb83&(X mVܘ}opoG9ҖXԨi1nnD11m D$Ζ]'͛Z*fhh_;[oLU5dW]G UW"x> Eor]KWfHhZV+k 4r~j5A[- aoe蚋k1 "qOG lƿZvA:sìPzq[<trfŏ`ϾvpqȆiֱ>'.031gV=|P6v 5^Z{լԝdcO>LB@,0/Ɖ{D?j.+=ly6"\D}2Lmy.XϬ Ӿܖ527sGKKce'x?-5mi_Y+9T̈́c4-vhWϜq.WaF=*WvHUN3ٮb{/ÖSz"R^3n4aI!k6sn׺W6 [MLm#J/@AlmXrRuY r7A~ww)_^Ga t.Ͽ=`IENDB`sinatra-1.0/data/theme/sing_screen.png0000644000175000017500000055635610740301660014775 00000000000000PNG  IHDR@,csRGB IDATxϮ-˚5s}k ##"Р]<=$^@ Ѐ $K z Dad[ u+cЈ"sε>͐:s37%jWծv?'^Ի7G7 }޴ޮg3/~xE餃pzQAC{}ŸvUg1nHޙ6Խ"gծ2'\@}429}S ,o~ Ǟfzːͻ^> O:F5;[dz`mom;?HCw}; =C˻7jZ# {;uCC96g=K`rl_b~o?4m>m6&OwN.7:_4u<=mʕ2Yso3oXL#3miQ:9 X2G9=1NG}r~-ė>ףXg&?L}s>z}XWծv c}C3g>QO0/a}C%)x*=dXJoG 5+끻4sݸð"^Yiq+W:0J~Vwsx1k\)%B[$:1"O =ëQwJ \ VdXqeLqp;5r>iq 05꜃E||ԶմDh&^i~_速za㝧b.w/v q1G>hRxv:a}#˼toMT$6c{êX]gI~OpB~ ԓ zȰc XWծva}cKuIfC R,r;cGixF-5=(aaXp,Q(G%"@M,|F E|?+ӄ{/:<.@˓.hb)pI1w˺zw)VdXD}V}yy"ʣ {4ƬHBۉȸ͛-XZì"WzW GO_#,[p* 9*' l1ʚCńA%Te@koe8{3k ttW `Cq`@jHHw'0֯F0۵rծvA7էy"W`zЍi}`+O0C{#8xy/NΆӋ1?g`7\;^0uqCF9@QcQ+pu82\Q _nG= }<(QaIq}odh&RT4V#cL#J$!EUWB*2٭d4`hgAV|oYut΁qT$_<.a?LP!L9[ǰNaSoiwO4.t =.c8FzXʟR=|pO\Z7TV<_VS? .x:&àalt<{HPDE nx ǝ;Ú~F;OC4v]jW{4F݇JwIJUTqP΋y64ќu GOR;IOP;(-nxFևEEF[s{+ˋ >J[7 N): 9LHPPepuPn (ʋ M4+Gd"?(1 BXn_0Vaa;N c+" -:bX7(c-~#Sjʰƺ:Ei>%9OK20'e%Xȳ{tYFPhofF1z0ww2= ju]jWw]Pb]R;)xrY<(; nbE<2WpO͂Eft*'YתP>Zr ,SJAmTbvB$\+Su37g}5Q1īj !qX uO)ꉛ QIva7 @xZs%$k*u-)[iNp9KS XqK>GZo]k<Ӵld6rgCճ<ߌ 3IbviM<bT{) k} uG5X#~zu]jW՞bC{ϓPb]Rf()&T9m fR,p3rp0ksf8 [sfyܬ ui%[*H[읂WˮEV2XգܽR*b*<UHIt`ىXېMOk&P."ceX5U]k(Y m[j%X(4j8yJ TƤ5C4_FU\lԥX5)XC 5c]PҚސ<7q7- [bWw yZk | SG>a}F!f[Ag@Ȝ5-yUcz:[j8܆[#H-ʸ8AEU ZRiU @7V℆=̫MQenÞb'2G2>/,`\j| WxE)XLVT|1~8ŮJpxkut${@p l\A߂w(ޚ6j֝7.[=Њ;⏐L$y^ҟ"->YM.uG5cBp>Lп0 `]jWծv.)%R~˔b(-vcq~67﩮e':mR&;cp-*E8tϤ8zm%U>] C2Pw]2uDsP;yƄȊ"wB1֡s3Z|y8.$"*SPfʾrJ%b9eUtXeeTVX4hd!j]+Wг8]X2nMŪgA :t+Ղ` /݆fkHn,c.]B>&cY-D@r=˸)(3 T_{I|Ba5ͼϹN.RfPWp, >@B>ߞ j!Reͳjk#6wԑ *tonVrRtĶ3[5!;0+d!ZdYbgC'p>NXoΰ.u]jW9%ŚƦKۏX+T,gƕYXPq9r3~t:g('Jdg hsk8kV0gArTm=<uhkh 최ZOȡiJag/g)mcUpF'A0)!Hk?GU A{u%X+J}a 6C>Nq9oVbTl9ILw>}̶EZ <͐T!' ]YXj O`,N0bv]jW{.)%FR))'Ш_ ˔6r'S*p jˏQn8\qH7R;XS RmOa]=y3e]yFHɠsby/DgDLXEzcdS Fe57ed?m]GJObIbR @Ĩ~|M %Ob=X3E˷%] 1xKJ;Jb~T͸*R[Qno2µT U [UrJ^]G5/ b!qЫ۰wPetS TK2J2` `뵶bI+\si_9R '#fc"cEtE m6ڙ`؉NzX"Vek}WQL㶟;509W g*0VcJc; KIvpOɰ.u]jW kKۏÖb&/@p֣+ 郞/ƀa2 @audZѲ<4ctB"s'n#dn@dvZN"!%6SW]y>qdXNpܠB58ĨcⲊJ]WYѣTy7Arn"كbA`N3YOv_ [^ygǑHj^f-!lÄ5 VE-+v4*9|`BMueTH4SVF*?>AF"`MV 鰞^ZəPo)2x^Yω?G,ϭz10mQQc%#P};{0ɚ݅Yw5V*06pgݟZbJu]jW՞Xb@%gb>LFcp,PX…sqxhxpi_gTjp#YX'kw%n%YkI"mh3%rTmz!5\#6󗡄|cj c2YZe*c҈PNsuXa)A}ra깚)M!s #PI%[Bt];p qC( >==&)|6X|r~+|a_H7Í 4Fʆ /2רBXrQGbXծv]TFuVw򆐅DQX|>#5##Ӱ󳢆KYRvWŬ-‹OIȭq^LΊ3eG6El"# ' uIRAå/r1\ 4N#ɤo ѠmVFyh-Wc·RX?M5Ȉ,%1` hcB\uLV4Y}[Ql@jC9G=Mو& *YydTCjC/?ekbBJpGJ`&Z)Uʱ^H 8ܮ-U3Xn,?5XK~T,'/s>Ei#zQxr~1z]DEUV0ߍұ^Kت< RҨTے hRP5`=*Q[a4Q@J5HWV!L3 L׳ًRɕ ՃÕGVHH4C :r dHr QTfKF\ -17n 7͆9Yqͥ᝱<,v;i&!Y\Qu6W W8"WS83בףlAtLj`TՌ 8hPe82nk*{8SYyx?Í[E0]KBY׍8Eq.ꅏCRxrRZH)U$|Dޝ,-?$K_+'LX |wQxW3* }s0 `]jWծbXpo RdP)'K㋜Tz*dB ՚]5wT|8Z7 Y}WRX |dXӆ? Zv]jW:K5v{ۥGLRM 6J=w|X?L)}aChuQKbs*ڎvZPRObﲸ(j{S-(>BFDjEh[ba0Ҧa`W4n xBCIXBɘ*0z,Mx{9êȰ;?ChJ]BA0R ESZNYlamXi\-(8I 8 (BqS.gs]إb yx>%$ǫpW7e!Ȋ>+-q@K|q:4~M+ZPW-{ rTU=9+GX@GH5Jw0V?,Ǚ5t. IDATcrh%j 1_2:#U_CϡU@U&WbN;)ZYjBvxzJ5a@ w_a@D.4aXv]jWbXϼg&V*P}@şGUÔ*-wBZa2%Y35P.[GaǤXO ź, XWծv}#K5v{ۥGR2i.xFإ _ зbI[K?Kĺ[ Xme,M:=K*R2-D̩hZUED諦ԉOO@͉Hz%G"$樬 iՁe؊Xt#^cOŢg]iQkxVv5䊜 5or)BE2ϥZ~۽b瞞{wxKu6:뀷XXeBh\RaK P)|G#={R6KPWM)`x*T},>lm35!Y;Aֻ0dQkHvh$֖a}$ XWծv}SuI~1R3t183M @83IyR,?" uf ,!jҚ!XX*.T, ,Z$1OKǰb$,g|zŮ# %?YyXK+3$ʦ2)EjZ`|斨[Q{*$AqoጸK a m;a̴{,_F@XSXXĜap)H9k%^Yڠ3p1qY6:̣[ VH62J:p-`bVQk9=Gw h5 ѯ :iQ׵W%=K7Ò]B*->*& dr$j5 {^_a7u~wf(hx+8{Zgd6,kH\}Yh wTW+5*b0aW 1V:7 -,/EvC.l%B6{ei&E8|{KH[8d)WcAV tߚdAQVɦ a)Uqnm3WC pt5䢒b'Ŋd a9eoX]{5ܩ*ߋ)[$2WKFWCՀv,bV"s*()KF0[i$ n /RW1SQ ыH~-^R='/M o[ΰ> pPCDAA$ao 6Qxr9j‘ ЧC9^{}(~;,t`p4+&}h%Vy'oƘx-ϐ̳fqTCJ}Cqu\[082 `]jWծ`'){~Rc zv_E׍;(b{ubL_fmp۴hʄyH?Ƙ> Ŕ5&2a),b|,9!Aڽŵm u˒h'4֘Atc] #DUY]ӌ0)2h=t;^G*(\h q)PZzWTUzq7w5bby:T2ۂ>KmɘY]']gX=cKӡn)(:L$d! %fKM7Vy3Y Õ~ʑiĜÅ?HU߫-7‘qXdY/v8*‘&*2$e|d`VE*f[uBވR:3ėQ|=>/DY1-'WvHpɢIQ[E-򛄞gUKZjUxH/J=C:C0vdi~-k>! 9GG\I;crn#ծv]GXGbZ­X=*Jj?@!ך>t@Fܣf OXEx>EUuWOa` i Il ;!>u7@5/l!M%!Dr\Z- i1*#Q50'Y#Dd n;kGƟr%ޚ+,fȋ$EauhPTTT))XJj4=W+ѲԾex}!Fђ_^nY-'s. jUּHӲsgD`T&n f*1^oI7 MuI kѯ=$;ƈOda&/dҗo̷C`QRp{ٵ7s/ %kr `T- ҙa~E\z ݆62.S6F>tg݇Yf%YcI-RjeOBg~N8Fbv]jW.)m`:f+%04N|]*/f7}MHl9:fv cl'o,O${ctPf d!mWT+JCDiLAB暏ФJk-<@ܸe(7!L4?Fٺ& !2ī<ȓ_W]H"4(= UēYL6JOJ8E>෻JJYUh^ =ˬj\K .M+.N0iL+~<2rhR9BYNYũL}dS`čpc6-ho^`o^HO7${Mdů?s_s_[7I M8C|䷃YCd A5 )s'Ŀ 嘘R_ _©y +¨KZkL/^¼cϭB~- ,Xa<6$kL|c5\8qJCfYto!#uv]jW0%:)QwXzWR_'ŚЏF%OGo{X+@5UKz'l42kLy_Zy 婒r1\ݗ̘yۃsSMWV4eq ,^R̗X6`uMKp3|IC"ˈBFV.\ե *I%\9T"mlevXf\c3bd`'Xǐ\gn=\b*<| q>,5Mf당z}l^tޭ󮩮 D' u9 >+(>t+8¨8rܨ°d!`yJ Qc}4BT2!Dڂ>]͜|qG{S^0Wl >kwQ g~ ijݼxWS-BsR7< hNhٳ9(6^>sW1\UY *@o(95 RգnPʾ/s+Y#54K9G3Gi1k{{[9GL>]uTqf̘f6в&w5Ab$hu*y_ s1,:feT8v-_/g}hf?TެsAOL&3_O, +N T$n7ojvo}b\]jW~juII=Sh}@B<[RkR$ոQR(ɸ>FuEiK-P #cbE8%M1~ aA{8;jkQΉ: %PdOTn W)^[{ YO5,'XϱSJ)ܨ槒MR L袤͜&iTjqc*]몒}h@ ؘ?bU-TB^K;]5wM2ZVFLDMKN'cNsʄ;g$Kr$ `[D,5;GdO>I A7+Ugńtxo[RmK`=ln,f9UTMOc3s$`:U)ZuSSB"u]wƺ7f a]]jWծvabݎK_oDJ/P|}^[,P(RΐQgL>B{C|K Η.ka4&6nXH"O Mm:5-4*xwB{3yeu M0 %mΣn'u"]4")q(7 M0!bw)'BP]L0*YXT0㋵K.?8EgjH(pE\+݃IG3{ٱ6b i3 ;xl|ĥY"CYo% x%OFQD]c1BPMq\>6H͒3,)UC턠D;+]9 ș^X6\ d~ …Y1f& 64i|eL!FWS6OCP;JrSyA-#V(@[@=:ǟgZNKȳ4cdd2 XK0NϒFb=*MMTIu]jW~>uI} X_[R(|+/R, "zm}0#ɱHHi,H7p4IA-ݮŲњn>ZN_̈A݂SM5ya2ι9mM}a̾v7cqǮ;݇)LS=C 8[14*Fy5Y̧Y=|r "VQDL);#:XW9d% jyaT{Lk'EpS6zꕀ\/̡0/~3Hk˚Ί=PBCO$b5!s(Sȷ̷_2'xl !]dpxK `kWawֺF&~j@a✙3Ϊ+uTݱհP@2# xR~,ߣGJ~9Yϐ, 7c勵[7q/TZQ5迃,ɚw|w0VzG^x2=a %7ɰv]jW~ R,Evm`n0\~Ơu[vHp*Tujrb  Xwb\uK}u]jW~a R,'h(/=XO58}:Xo:jg{[X}Q4Ɉz dBx9fS?GmF(#4)XyU 7GFYQ(LlfpKA5  O0&H]U 5yFQ`V >9GaT9l:R:[Z=9fvÅVd\X|Mb[gj(4(nAb(\pYgRU[E$Ss𕚀joEa㘨*YsaW)[jU\" .ۑ VSu܈dKK#B?VXOQIv'q+ d9H"t& 򀧺ZC//1˽J KlRG* &)(T@9in[*@[T/#KR2~5AY*GJHl;+̍}4po/u!K|Y'߱L7`v^}Msi2'gm^.]4W2-u/ICͮ {HYP R+e{UhHŃ\EClƈ#VNlnR^;T>OyÕ/܅cȞvkX?'T'ƺbYv]jWec_KSMANXy^R, bms6,A[Пv#n@?; @<ɒ/ #Z8zx&⒊C~VSTgnQۊ !uܹm!Y۪z R]WH40jbɲa/T7q|;p[7dȔ𖩌#+r[,, G\q2̃t\#W{jN昪VZzۡ5}jM5!L0(0%NMcYeԽҥeD&'M^zZ(XY^-MŨF<عg Ʊ>T4xWxEUE\X3unfc~)>I)FL< f"%SH=1ܝd=gi1 WP=5] Z+A(%ưU&LpW(*%+KdbRrZ`TK%EWZ* SDu.SO>H9kĊڤgm`"ڒ{,NK`Qx_5 Ocݧ҄ 2að.u]jWگc"Xm]uKDnd6IR,F[̈~VUa pM'Ԭ0t;,ZȚ ?47m]Q۴5dsLuYY[TզQu5 W՚9]$lPZ&)A%TL&D,F%BEPAlej8'()g YG. sV 8oCYxMABʨ™T%r=s/WFL?(g"=\xN_*xzQV uz>q eeZZ*Kdݚ  ZYƺ`#×VS׍~5'yNnJ>MBjW*|QB|L7KXySGNxhJ5Y= GQG _Ǎ*^ "1{Gk`|UpT=FB~{7{tnr=JUgMx16 ͈5?hapJ_xud' YkSpX{RN8U'Xwbݿ!ÊEaXXWծv ~.)|BZY{ZM`3yH0< wBep99J mv!훧GTũ*b{E ^QX1dsgMr4* +2g7_PBy<!ʎAPHfʐl[/-\=[r^,Cx# ,^Ҭpx̓a5,(9CDWfb)\2rPNu/ZXҦegR%=~kj=)S&ɋWe%ͽ(qPcHJX`g.ڡ6\í"X,V bŊRZ3jX)'+]E%JFފ$|s5 -P-*$ݳ[MIlB@$! YŢɪ5zI01kZ ǒg{^4]V>T7%LnFN˃HkYw`}8d=랝PHjm @ `]jWծkX?K n+=,PxO'lq1>f3 9jmcW5rV(.`HA3d!g )&z0xMewRhFimURRw}2Xz- g,:k,g_dXem3xJtVxvۛ0toVUY@qhŘCBf?g~Ɵ|œqdd@82rR)9FOl/Z qԂ[BznSVTQ[ ] [BK,VfmBm"H.o;^q9a>5,Q4VcjKb#^gCR^JꚰWj"2X+'g+b5R"j>/3ZDU8 } ̹AuZʑi!ekG 9GRbji=.ԴRO R^A1SjV?T\Cdwt#^/Ezl=T|ts&tAcLw/U]*Bgv}_0/fͷ>!6nɊBd c탱fG#){턏JOdXwa?~]jW~ ?KO/jVu̚&M\F}V׷?%G3ɊAkw©FV.;ᓱn!< t>,a]jWծv_-QXF jDc C(sm{N^dXYڳ 0UXQRVvlex԰?biNa{kTaCۢlߏ9/C>6B0ʆa mewhg`m.7Z˔?"T#48vUNB X}c:}_c:mڲR9e7 3q5*c(/vaZ7eUQY>+0`XWee{ȹxiPKf:UQ5Jy޼_$TlrTdM9k3/SEJ7 MZj)WG2,OD꒍f .f'MNՀ:r8!ٴ|6L*keMis2n6/KVͣ mUnҌD@ƘVjZ'b0¬:("+I*thfblT A)v/GҐ,V4duu;WZ%>L>BE%kw{y Z;{1ְ TVD$z<*DN*qIկ2L{)%#R)9AHVw.TU=ġNG|Ğe}o WcI8 i(=i'Fb҄?úc<< úծv]j~UR,BJ,GW83Gi)V_!*_ڏwV<8ޤXP0sn:FvC~*UӐ@),a^@mbPjjPfCCFU 9/uFRHPJ} LC(2ڴ( )8=g7؍e h٣'0;Tw0ẘ18YjIIJtR_EV._b׹ZҚ6GPe rsYQX~f1SiʠԾ%?bƼ/ T"+$~zGYe>v(d(y=In I $RDKja!]t3WQ! !dPL1\e%cH5veo2%`ƪʮs|"!^ ҷ(PHQ O[u?2[[=YpC՞1VRgsz&i@+5\1!wrfGM IDATfR,*sU0@N[_(3' fbֹ9bUXM/!AqJ@+Xb-^OKƑd7o:#-K[F>%CC9 U%jvT@u M,X>%0TճmlA\O7rʞJ%ұKwD'_z(kvcFx9FwH/HK‹f{O7ވ!^Y%+gM/dxIbxInd|J+ݾrK{_}1׮mC`r%P8H@H1!t;.w}vWwUWx.9\kWU;I$']k8 fUW{vx6ޯ7Sr6y*l]r6?Jf#:"ftS.zjwW?_2TE`BxI[z_ oou(?z&>??Go'Kniw-fA֣1VOc wVKh$/{fX!Ͱv+_s1`81 +#X{VS3 6,,  wʇM^ K*"luO&XS''Mt.s{}Q_J6TnAiH@ nu;ݵ3>zT킮ViL9)vk]M`RĜB]kU-3w%L:ʯrvڞt͟`td}xe$~TKWJ ha i*7dDz"Vq?cG5!4[lQ92sѱhޓE *@,\TYtР<&y^!E,|"8-84/7]yƕΙ&=Wʳ:Lfg3V P%^iǏsvCW%zڅV*•['Tp;EN WY!"rga\:& W>SwsL-q[ cl,bTݎBinNĺ~MAqɰ1?1qca"M|cnBbagfr =VJ!{_pܽ-LG 8- Yh7-p[Pd>i^.<kݟ8ڠэ|lƑs:^<]ڠ\4v]X_glu 5XX* Β&)YKaZ׶l.b\m#q?\i5|AgC,L )(/$VΘꪾM&BeXJ(=|xhdQB 8r%GTDNxOi^@@ "vҦV#3EWd&+i71򼊀U&5pzհXb|ZD +kpdhlSqg_P΀#}R)r6KޢB򴵱IU9O#]iOgedt_:( >kHl]Ay:n.%'Փ/;MYCJiV4(Ta Fڥ$@_Ir>k*Jb}252e?ˤ}g~s_o\7_|C4{0l}j w{Xv½HG1nH K*zoaXCd:1qccbB>uq74cnH^%/^ W0Y*wmD/6=pGiXv[Q_<#VU](ܗI%#źL?Xlh>rr.ͫiI֭H{M'RHifWg&Oo ׍v],|tQF;x;H@#n6q<d\*2 yXj3Q Q傌zB=2Lq"(lKAM< rjAj&sDFF*[;BYrYDU#?gowϤ$Wp>(}fr`29LK94LVΔy(T!rqGT:FJd$/WkT֯*џgVC19HF{Rkq5Bg9;Z\D+ۨav/0rl( 00b!=FUnp*w5 PaG!b]cXgԥp/ X2,%HC] KZ8@~ɰn uc87(Ò {/(J_ݠfs56:;p*탹,o((J:5u^h|\ӂ:OFLkBmzӎ} \l2#4.Tbϲ.#h20r\0,h+GŁf&4P0znaw,ڤ\]3~ŵh0%[\bF z%-қYF>mg \Jf+w!*қQ'0CDPHY>Vl]}arR!KUWI|ʽhBpDYn'\8uBWQrr~o_"^hLS3n,ED 1Rƾ0JX\%"] CUM(BSѴ g{Cadȅ0%jѩ_i`Jl'~:1qcߨﻠpM).CJh).QgXW f39 h̥pm"*U$8 73on,f0?J͆ ] ^f|bՙ\ׁe356^ MnJlo *Gk70WR }P!]TH妛?vn;TmS`H EVlZlP IT]domh-BJ4P֕/zT'Nd41[]KX0$#n8+TqoO9C B}U.WW OTшeUjA2*mZeEQ,(uoơ2`DAkTZp@ 8 P%$r81qoDt \le1~Aߦ Z=XPbNJa+7*#[^VCpeډI`BٌcУցB[.k@:+?|7#lXWX-92)붺!y8`JXeQ*|/0+V8H90 N3+ [ҫqNF5WKfu](:`+'O-iS0D w9&.oo!|Oη+YN_U`˪X(q+঄|S_s sAl&A㫹4Z-E1 @VCRqWVJ4B B]p@Лm??h#* UOKnKHePC;8b~Z3K0OsO-Ń {L 'LSjGZ2yt.<[7`mWް(*1!IǬ*_ Iuݽv)M V{f <DN;źο^m}+yY|wAǝdwl$͟+EJZa,)1o`^wA)փX @Njuc87(ƆK-}|z@u?aD{Z5ym?喱+5N!{W.ƚ>df_ Gd( l47SJŴQ\#6|Acjvs=@q*_f״)إUNhݦWD͌ԓ:{F\HPGS.]~ةQ8%c Ƽ]ubMMO|uw,h3PttH&QT-\:r웋dO򰈩jy5ǚyH#PL.)b6v/Zԕ "]^nb $NJO46H"AƱEi~JDt3DR7֔I'{&Џ9U5@ ǁXj/Th=IQj 0&M\XF˖G>^Mjeqnk`h|sP) arsBF4TFW1NX+zWע#%. o,69w1Vfc GXy7Z$n%Ê = uc874+4 y1GNźʰqRH :gDJ:v?R9itM+9V-mrNkѴ=Iyv ֨B焕׀0bM*w92O[e.(Wz/Kh3c עXyD\.dbXm@%Pb3Yu{JƆ%ShP#v>Nqn"`x) 6{wErCI6_[:ܲ2jFU>a%K kNZRB\@zqc@W o{]ŏ|h*L&t* |-ZA!Yh(˞Q2KR !Z9:* 8wCnrLYs6nkKS3ډV55,֠ . Q2K<߆&r:ɢXttN*0)`Cf b`ZOpiD""Z3P,dC@/fuh0p)B5|=SFg EHK$lDƺV2"ih4 . !YTE) t W(F;亚ӐO_" !])5 jt&|YGT C%`sLr0]4o "|Xitv[@븺fzJTKu^!ܕBmB\;֕33[=̭Вk Wf)) =ӷO軾 oh-d|jVۯ,{,w9XT ƺtސb]^ڍuO 2T%X81qc|Ӡ z)ȡz.)Vcv0Z7O>wxNI,3d F*O[ Ǒ=/Zf1*C5;VRN"ftaHE@ܯD-a YbmMsz0b-h?M{d]bWvan#`kh,uPǚh,,1G(v/+ T]fC!#GTǪսFe:V WR.4 %Ǧ[Wf,z7,զmp*ƶJA\3vd@&44;ir9i2XRӚQQap.I]O/T5Q2hL19YY\\q-#=A$H̡%ynhT-~E¡fT %l!աqqV[ͷMBǷT (hۮFUl4BNӖT71C5! ߒ HuyuHV(_ {vvtðl%لT-u{Orϭڵ7HVn+o /ǪTw_`}VP-cw IDATY;/?'d<_;*k+ #߰p7RHM°\ K7% X81qc|+ٰ{.(.-!3yvL\ o6QnDBQ0BRgJt6G9 `ch95Aj\HȺiKu4KZlk " 2:g痵9+UF~Ɩ('a'2xPhUÿX= *i7HUQGq_!)fޯe eЬ Bl}㊿VF<w%rB˻og~ڳi,K:BXlHpȇۿu+|SߕR+ : XvۑXaIY]gXu?+yt0X81qc|󡫇AVt ~?+︥fM[T,+dOXA yDcPU%vTXib [=whRJ{5Q'Eď?M #*rn˨&gxuXrSau̒=t&^Y|U_*a$d3/-Aev`]O uh*Z~+<'9.x5Ƣʰ͉# %sMxbq^!QԨO5ZBww@!F5eQB.&v[I}:r&WQתY?)66m:L҃ʂa YgZ<ޠ%RX~S@I\!DE7ߠKb"DOf:,ȃiqA1 ze)(P8,c+?k1R4AhSB+)*!;+{y ؾR2T^FـɫV9)B'iۥXhlTB΁gk?kF꿌76K VxLFsdM_O]ݯy6 w!x˕R d>9χP1V#GJan#.c դ`X;K "baX7DX:1qc]C%bڝwݏ#&|$5k9+1Tzaf&N<>/K h@&xenxWڲ,qM Ԅ8SN"RƱvUlrIp}uRD`+׸(5nBwW[6#*%r`Nnhgj"#rMh!6r yTUJF{ؔqoEPu1%z6̀Id[P=MQXji4R/ [^y6]ᕓՌǨ| ZLɧWhsBO262,P]E +D[Uz|,tF,jڹe s3bII7p#'Y5fs6Ms&z{=R`$S^JX DyHMufҾֵ#lx`TU8+bӝ, /ݏ"+μї&%ilZNYsLJCfdX!?3ql.t;lMɥ+%?8;$!EA ħCnK rU( "')=EƏDf#t ڤQᛔMΏ(\t5m2#]qAGg! +_OJIgc8t/&R;@a.t3d Ѡ/>1|I*z[݀VϋŔ[/ ?Wgv~bw~ŗ^d%T@~w~}Lei>/l+񬲫KtJk'܏ګ&| +}-J ^+81qc*{bwuօMyEuj6zh̻Ӳ鼻QPXmKĔ(UNu3r>sM"DͥXg=F!'boKQ.+]bM؋qkNVy2ThiܱKƌ4ۑGÌwO- ETDP0\2b~k[ Caj&~ $׺_1<'4Xyuv ZVp-s+K!&hcY䴰c?t'YJ0d,Lx1\(DH+0R9փhgIIr*bRYROglu2"cu+0fP\s$7؃VVYjzZDĸre 0rBEdR9%q_eaOu&|bD9;L~3\+rb'f^Pq4j~8d LHJYPJl"jfD韋j(­ZM\i{s9UtNa_?qyT@o{M~嗰ǭd򬫈[ -;#ʦu)VXra'4.#^3[°j/:1qcdCR~-ƅҩ.TW(1:YjvJA Ra7,ѹbq63:o9J{d iNXIGLv'M{R,1F#\IƸnnkN5_ޖIb|C~!zLat v<c9Өə!Tw b)s6 6 =3XP3ZP+c۲b)f$.Sΐi%dwsW(1#I56ȇpqN0߆)Aq[8CBUZ _/KsPij%,+/⏨Ƌ ʰrP8}R\b"<#QLD|~MהPU9=)Vg#v+t\=[Bzxg=PCx_ {~O/rha *HKCEH{_~_EY]bF:$.mwBK>U|Q$`CΰT8V%Ni\L3t VV„@T~6+@w8!>½ߓWbU:R8jQhD@qO{G{ sZ9nLMo&WB_8aQ{ܝສaҩP8 &f/Tr?X-O[TRFxnl˺OWTejLRK`4b߆<`JҐBr֭uu"j,"\X5qhza$'@erUwAdQ2JI1dCnI#,]*DO$e `ᢲܝDUTTt2ī-Q4g\Wܯ4.g;&|JYWy'"8Vb+,2vK"IvADx""0gܯNt,^fZ(Ie$ChoNm"L\+K S( fìG@e4zyE0a,Z j$-i .ԣP--?ŵ!dѠvC? 9 ɘWE'Ҫr%?( }&P=6Y$CÆm͡%b_qrIR ZI&V׸.$VAsųgA_^yYW7Nb5{?嗖ky~'rcI V2ܾ]')֥ 7"a s{cX^c,uX^^t  Q;"`81q K!lv1.ps0VV9 ~Lӧ#+nH4qW\n./pI} !r޼Ü)59_kyʋ9_0z*5c+zy1մvIK&]@Ew&$N4nCǦH_@?ZjsLwVs3U Y+Ќ؜BZE FQ[m@(m4*NLp9P}9-&!ul+V8<^b{["zEzS!NU=' |1XR,"kR,FRJ u{;$!:a\䩖ǿn,PUnXO^;BKi  IQn'µ4tj,qx /cOj0jج1f% u d"⑔K?gk{asUЋc?eyh?yK+~!ݧ~dͧ_}O X=K.: wXs ź>Vk~Eb}_aMh}aM;X81qcq K-oO\XYA<ʓŒMv._HDe"Ŗn| _5c̤5 ɔȺaRc*hr$ @wѨЂ1CÊX ,q$Se4AQ*&ܿyld. 껩jh0Z`RHBPnTH*`JDy:.{_< E@9-bO!gox<~Y-ӱ,Fj1a x^)!ь 3'QzFY= k51@6 Ún_#a`81 F}]҄G?ffv3J6%jeQl m鏉MVPA\MȻ`[3>"^# '?n7rcKu˰oh?&VU,9].6[]?0DMGKՃDdE(`O.,E!fP 6k,XXȧqeZ3VE^2 cfC͟I*dv%,jIDȴ8`0,ؼn4ʏӢM+ZkDg(,a)NX.A^r^ӇVg>a'S+jQPpax`u`WnvDz`y W$l5'\K inWA<#}el砬yiXcpuq]#Eޢ]Sݥ7Va]ˊ V7BVa(9P@WV5GaI?^ao}n=sб4x}Eǖ)lyLL+_!TDLeF3 E MoȆIFY@pud`>uUȈ7/u~arFM$VaOYY] )Mk=mҭh,3Ie )S@6\m~DV7յG~o'RV+d8m6ea݋mֺ~"cǂ ~+"+ |"]o^%Jk҇-$)TIZzX׫AC*5Dx7?SO=AX|o7y494 =Ov{~snA_GB~uNuaX{Zy'0vkHݬqc8{EWh]ݹj N2θ8\!6;>.F݂LJ (Ŋڤ;np0֨Dϱ$#giHiTy<;m(\I{~ft/ ̝1T(ҷW+W)s!l2i󺂮tulTa a iu("&m ~r-tZ-o],ՓiQ ֖3]њhsfSۯR)-{Z`,^:bedjmFZ%) oׄ~}7,qmkW1q2>eX[i'ȅ]z[bsP 38^4n)}Xrlic\A71YdIz"⅕Ү0[nWNU^f3E#3Cf&rh6TGNxBe+!DeK,HRAl>8E 5,Ι͏B:Zy˗4.WDd}t$1VdސbeAH&0,˰Nġ8#a>qcWz W^@+RPy=ZN.9UŚrb DLjփ/sZwbRl((+1X2U_3Zqe[;8c7!֤S<|kQq6@!Ș?h gU"j$NjBJ  P 0H<Ԩotѓh& 0Xo.:_VĄ_3؞- gfr~.>l 〴JW%eR#*k=Ni]Hc):m 8y!N7+-Kȯ2A*İLBhyjP0d.Fֲ{0A'UԢ\-غWPը^ Sd;sBt᡹E&ĢX:$޴x0c)έnA+j^:z^)ֶp/}ð:b3OUx(Vȯð68m$6:1qcwӶR^WC_Ol鞓B'LU`[BIk?VkBէYݩkX*|lxbsy5gmz\.?^MTPZkyǘi$),h#݊81q??XJN*hr5L!bI4%m^Mpq6^28ik2+p p -u8s»P'f|4jyztӅ3nr*uVŁp(V@il#K%7@|x4ڠ/r iNeCc6wWkG5I,7:ҡc;Jj/ՇVASbXCG/yqXlz95k!f(X⫃_&%6˶n\t)&ܖO (6cu <[ \^VN:FMyqetC?3ȋS+FnkgCթKx}a@Y1·ы YAVHR\jC%@ 2* u\̾ J Ėv[H%"o~oV6--)^#ĸ}b:yXn33O(_J8&V1>:ͽ`81qh>̊0\Աg^|rN98ݪ&^ҫ`3a!S$jAbS]#)tή%Œ f韥KlkX3s )#<]`4FNx^d?BDXtD<285y|زLu]̄PlF+oe‘GK7WyXscKcPR/͛6,iY?0PtU˕&wZhB5#-eOoz"BiQqfҺ;[Ѕ1&kIklh/S4_fC"%K-zէ6va 󷈚j#c\p;3H= Iv*gla~nY67.14{[)6z-Yrb2h2B^XHM>NηG!֛O+';d6LHȵD6e1\ jƵ2Hߠ+^GWeq Tgm^k/ߍz^y, <îêC+}ie}#mn~9EW)֞p ӁzQMVzo0yPaXٍ Òe 7s IDATLj"`81K~3 ѫ>GTh6^y"d$m_МXT1WJ07W@!ªpUe[- Ű_FIFz2Kl*]+oLn1U6)FUҥj%ҞM5w!QgCpZCaZXkfTvymY +ש70ӳ'RbZRs0S 1B6hB jZln(C!Ä];}&sG+Ԡ%*nt:jsj+`lWuP0Jȩ:`]b!ȭ؛n*&ɳa9j˩gwƯuHpb%ө wrvu֋2;&wn:[M 0%нau~ðh$vߜ>xkX>} W}UnϓfDKƧTM'BC`[p=mRTvm-QUBXk_OFlfڼM-RCW'8m@ 2\ /fk%Vڤ*sh[Ќw5?$Ѧs)UNTWCXxpDpGE[2wd8[e1#:"Fp)fC[ܑİBy+~\ǛHEJՌj܃ V¦LhtlX0wE6uZwN$Qc7 ̠#kкJje}\JN wg;seM소V:By4#eA3GyhO 꽱Vb&+(>4 N%p-B]tGK<5O\" ͍FNUv_=،pYLU,1LIH`ּefXv8QwO "WN"qXӌcnT̝,EP5[Truj aUC.ϴ5vyƿҷ*(g..QjzV'64ed-/߹ O2p佭suq6' 7źkʯʰ|0,B=@a; /)0o$9IXz;>}'N_6,><˶)TqPvzZ:2E"7݂xuuEhJƻ9bYNŸZy6aǚW.mkua,WSdi2i6/{m-!l{E.6 qH1b~m֊Y)1A)|:"r_"Jnj܄TE@ 4@̔(ɍ5M}rbm=Ѯ ٲdJ#g2Мd gQ | pata|Hv>5zI=jSں,gAXA2]u~DnLwJPpc{Kę\AWߵAWO\M<:CJև;=_@^8wZ}[{M6FA,rkZǶ"Қs$묝Pu{&gXofXyJ>saXH!P-ja G܁Ms⩑w}cO^,zoX̳ګ%IS O_NXgԲKD5=gXlHϦM*V{Br\h, 3 e.[\P9煩FNqGbcb#s.O9b}:? rֶ6&ʆaGP\. "Y2^С¤Xo, X"k.d&U,ާYBaƒ2n E=aPC&XaaVm~ %@}/":qIYE0cѩ"OzS-B)Tf:-W6Ӳ *): N;c!}rז0/7X/2{{nWd6?%ܗ,ת[5O*߿Xv<ƺSV2/`+[ k6'b q{ \|㲥sޜ~^}c>~ _~g ^dOx=iܬ\\gNmi&ly:䷪"ki`]Z6SeoZ-yi NT󵃵"eef4UMh9-7& xiYt#6`f1v[I7h&D%۩YaM#$sVckyHkZ,O5],#mϫU8`>F SMay`Vd2,.:iH҆TZd]v*d:-m:3xRYmb:HTVQdOz1J10$-cReCU/[NaC* 8ƊIN$V:F5Nm<, BS5ՁU5Sx^n(P[ k6xEcb34PC')Ma7*HZYNZ#ǽ{kdI9I#yR&[#\:wg]uU@ q[h3s$"z(L Rȷo$Vl=^;r.[_gB ur8ǷoUcOneU+,gVi핻?x,0 B]wy2YU{N' Oc{Vc?cdH' m°HEZ~F5?kX>}՟te^ڞmoDQs?R=6byk*na8l{xYs xr}*UuQ62N5 -⼋,sAo˖H;q3sHbw * `V])O5hh>4 $/ٶ}SȈ*gڲqzf$LQS$(V&FcFu[#*[*{ MD73$AhՌNUIY9K5PwM͉섡j->UpH$A,_e@MKQiܙ[-cURw1ٓP7S^ؚR$|}-tO&YGڙ=DB,L3_r맠hWB "IRIjQ-(ڐ0Ҧ >o9 "snn[Vʁ'}f(0DK>QIaf*D$iE,,h[O,8_{~,_l I݉0=ٍd7+ps6w "#5e}QSf;&]s1Mp̶υaiFBFϑ^zF}cqb T]+W'%o|yp*PQ\> Sy;bMRfEڽ-lΓc4Ch1aV8QnX/a]gx/^XjY0)kJG+;s9ɹZVNTHmfۜB܂4u=§"i:!>pM)G~eeU"eaBbVt: bNCADfk|v5I >UuetEop [l? 8٬Lucfh`,sTźy|YU| {rif^V: ^EU%\ &r]!kRؖeM%!4.tYZF9( \%Ia Rj|1%{m#ToB[d0uǫ݅tRssR$)mDZmBqm:%}P%N͋n +bF~Y@"E {2D"eE:ɳlWX Trn5'p`?_GgSI~kRrkkJ0׈n\ȓƪȉDa|fKKPP+ޯ\f'ĺcXeQ tǹ0, FB}Ы gZ3J7`ɆVܴ<ndiݞ&seoJjM8Wkҫ8:Oj'eNrPd` _>gs:n [}fsY08]k\X90Bda$6MJtʶIU|mVD,sCM%'s‡is$Qѥ1^wi w]EeLs"_?p'jU\'s4RM1Dyb1X5뤵Œf--1(%QC+6FA)r[  CIt$*i{ 3c`@8Nؗn /'0S);!ibX5ՄgKXΰҖ~RJ0vIH[Ή&"`c>϶'So"aZpga-ڭ851y.du48НQWĊYb_$gmXTLR< z&Dl"(Nf eF3bm\( =E+=cʓױ@j_sϲGz 'a%e]it9Gت0w;1Q~lCɉ ˄5WFT~'gD M{WRy̼-l_NZ*V%Υbu`v\Dl!i˗,/Zhn!['2s**VanZ"6 $lhv0ks)qEتg~K6/uIP ^n`, e|8+HPrIZ&nQsՊ}cBREGW͕YyV QaNÚ't h{%,"H'z[P=^ad*{o [@I!`" !B  $PN("Ƀ6؅HOW2\("RH޺ux<%~V|[cuLf`(Îk5G0= (8W<`}+Zx׏ܺxօ 5[54ٔ=Nj)G'pK1plFqRyZuaaS->}c;< krN uL k?yF{FMε32aXtpS849[?}cet+Ʌgy6_>g_lTQG]m"]2ΜUdsG𚮢SSJzj_&zږO6EUWZQ ݋9h{f,ƛ^.7Wl!c"77T]-f.8o(AC<CpTxɎ/I o~寮ĴP~j #֦ FHP͠*(aIhn[rѭ6~N6?`;扺8gYcz6;x3IKN;p9*s1xE:֑GJ+v :y iau_ų,wm "őU2/3i˥̢4OH\p]G D:fl2ȬR XQoA3P2:JX:z#fgZc2m]u}rq˅Lr>&W}y d#;;awd" mP ޺R.,(BHw'Uf}y+m?{>9~^Z|r֫ y5:IYÑ.$cqgKYI[>RFU݄‹_)0wvrdkf?.jdA͵ZfW7X.2¼MU {j Wִx3:a ?pS4?kX>]+ԝ6fiAF5Nnw aL g4]L /Fe[u4$ir.ym6)'tH,շ ZJ zX%?|?m} y+=NN//ܻ}p{ۗ_ׯ.T@?bjHƛe:g0*M*Z]gF1#l\e77^}yu~FSnqVPR+ڜm3l:W-W5(sz}9\J<Ȍ٥b u"d];3XJ #Iֳ iEX;>}]}ʞ1G~uxqS*V~Dn&vhb.gC8ܻԮ!v*N aF\Yݢ!}Uj-)ž3lJ*ͪ|6 XD9ǜv2$@L2׆1<ΟtՄpm$[?>a ZUfF[34kĬXn],LTwzUb*(Ku2')ddaSuSyr*e LeFANP3[H. fT`P dUJ3Q6lk9VD1ݶ.e`b+4_&]ӫeT]_Ft6ǝ[aq@~ 3oE𩺆)k 0KMpjd4>K!楘۹4OuiKՊU8>-H6(4F>.oE̴ETכplEe ZW2#sp|Pw"# dl3U>}3M`推!8f V{Lb(>~k^Hls4oQQ?f(m=NIn˨׀؂8gsYhF8pklIi1ؑ$26ɕosVxh뻜H)3Tx0H"b.9Dj$fB+>o%Lֽ7.~+_WnՋۯ$x0(hF `xtf_SLHvzT8`Tg- ;"rr'zV;9rŠW+`,9牋x`4DVeAo4LB^?>~?~tuiVj̎P#ʼCh ^M֑i#ˆ#ݻ{)M0#ǍFBܘ澹z ]}c;YOGts>+lbueg\=kB)X9qs>g3NJa[J6 $1m &j=[aW= t[wC)jۉ$WcߪD:ڏ$8.jiмvֱZ4ؔgsX'{Hd,RWܘӺWQ F<37ebNۻCD_ѣ+>DMvX! Ne3ğ9hq0س[-E|6joRSוyCK)r:'lu9%fl1\noƌ l? i2`U R]!:āL2dW'$fp gȋ+Lj2+DvJX#ko3MD!@{{AHDNzn;W$և?{ϨrW^ _|r* Ŗ8vtV#v^ޥıvmo^$NԈӍG?,re9.RD.^|~/Ox R^b yᆫ##l5Pcϫ Fc "Br7oVGK_z՞@g3I wAꔕMwR>8\y#b֜}k`òf!; \\iՎ:E+f,VP>XbUhal! I  d'o'z2z'd dft^P=&m3~&O2+,o{_.XɀY d1j*L\a  [ c~ܻ/JC]}?fz߭jf՘$ $}Ԟj$d-=EX]uganl`c>vz]^}%o;_˞9ڬM`JAgj:aJ3ۆzjbh'zP4!<8a@(mO"ơD3 wz|")(IWh|բSmKl˟ru\= KR4j&Z1f4CEU#HZk2EstQ1qB=K!Us7ES}c; -gLxy^Ϸ s,ɶGu3iقeJѱre7IcZCa6af}xulOnyJB֨&ҞS9ꁹ<ET<hZ !fU9fn'Yc uyV\8D(ް6 6'Bmd{N}d,H@| Z{B'9p SMR,/(L2u){o36%K㟽@!Reˌ}bvH⪠HӺWux5S..>X~?zq{_{_ŗR=g4{~AeY~_ЪUerm6 a{,t Z@+=ak:jsc)Ų#p}OvŠ!x5 aXO5>K{fY֙(w_`c>vz^v~.z7O-1<#┊զ?(7W2ųtۄfL;6Kj۵涄i4\o%BI-$@ǡяDsYK*x}e<(kWe Eq,]JVba?&lTt(*8d1ely+kp=M"'R,28* Y1gHZho kF6 MhlkBFRN|k~Ƭ zo8%IX$uV1mjg†ĭbâGw$pv$"3VURᱻN;YChVpr]B:'x#]eC{Ѕp]C̈́ՠXHZXGiBd5OA 7\Y((O2n^Ơ,ilx"+kī,K8gfT܏as0`W+wN_Qw'ߴ?~W~}񨤜Y'6 &E>|w\޺/_}/_z ]|.ʟ֭7W_jJ ` δX `E^?8.CFsQ+1R W_:nx{_`u {aտJU9]4+p4>9ͽDX kSEX8{n#&Y}k>ӫ,(CdW|ĞBWja3[)0yշ8i`SM=\Tlc1dcXgp,;g-l&-:Ck4Fm4nD#t̃G|w|7"8$_h@0n8;n5mڠ_"b0m6iRT,t7F,j*I% ͲB% #F?$%NkNZh) $r4|.UmDwJ.7̛{MӨm rS~&UO"nw_7݂<3eQa#k&H0B䟇J(1,84$42Jsm2_%݀d8u )D P{[Iw ^/Q'e^. =K )y%s/'fʓkF<,1Vvp28ݯqh`XP ˡoCQY46vkW ?߱o7u}g"rOooo{oǟ}42c]]Zw˫[8=zﻏާ!o;_ս7.qyí4tuO?[Јߗǂ IDAT~+/{ 4&Og.aiZ90˿2׌|i"^ޟ|KYw:= !f Ղ aM"_ qOlx*iHI" ʁg1MGdıS)tOic R9D&Da m?̂1 1$k$(#X12$`Dys#\U)ƃۃfE|92F٬N]N.#f|Cx B}zIla[ϰWqYLh lը{x;`9plԔfB) uj]I˰,SǮ+&in+l٪~*(ً/ ɒ4(M (ZyE֟bߴP}M{%92I;nYz\ Vz{wrqu+_+_>pg| >OϠ$ 乹;_<0ӫeXWm0 IӐNBzEZ%Yqh -~ /_~v-np0>2N0kb[@saXO0ͥgMsQqr_ [>}cGW?e ~˷/YgljD=1O@R,nX|&PuSv=9(] 6-eQ3"rʰX#OTv'P:'VML]-e[D\0Ɩb+1 +bƜҦ. ".>$V1H)fXpT #N'U,86xN4yw9E-re;%1$h*l' MIL2S i$]W'c%Z%(P/5B ԍvSTʱQ r:v?xbG:þOhopN"+Zh0[]{l^Gf钅v)8_y쀻^[܅TIU3\UJo%ZUuS!O_Y-}^e9\ar[ 0ֻ7ӴTkVWت.RˡLr6˷щs'qR/ֆ^EaW%*duK F>~pXTSEkKW(I{5DU%j1X) t JMt P˕ھ} x3a:e=K6u2HlϕL":3l/.&ξB}cO^+)6)S7x*$ok8kR,N¥P;;Enāox.):J+d6K?yf1el3L7w^.厐3@lNS>Wz*g@?L=J5 *+:S"x{l-P+^ħ+霫TpJ]Xfa DTgzIfc{-C3&PBB,B!eI`^HՅ, _$ͮ.ʅ*XWVWpxϢWڍ']?XO=y䴨 }~^( 2,'`=P ˭aXO7SH1B=Gɵ@1;i@.}cNiWx}m0Þ>h2vfaXW Iw,RaRYO"KӢT6 [M[HidT1y7ۃ~.k6+h,%5St&-6Oign'H,y[B&fX A%f&b_^ @]M-fUbZ&GkUqT]*U效E4fP%Z}&y)nl4}/|: , 1PkAd2yZyL3WaK? ?E䫯-q^2h/;v9d!SUP4]MNj[x/+%}0 aLgaXibXa7aXO5%@adۈf֍u'۸a(roX>^}a 1hte?>[nI)sέi-d^fmZ D7^w`6>]mrtGa#aC_[F`E5`᭴հ!|՜* 3K5x0U ĆHS>5 qEE1o è-b]Pt5P!%A%=MT '.Daq@CLϩj%liiCg`0f2U[Up_MGGs(yV,bX\3Q4h5xr}^0,ځ0A 0w_r`c[jT}Z)r9gXў̗}5Oqt:ԖL<^33Ui1.jvqa0h_;`+W xmGLW(\գY20 i SBS1;+as۠Ajo7̆ح1ǟZ'/Ÿ׵Wl{(I?_6oFib Na:N(0AZK e$MUP=kW_+1=7߾÷|w}H^=]J:zo^YKujWۿva=;PDWVth 8:^7|h3Mˋ/p+::>(;As%30^8Nmݻosํ?~taS| <'-1X>^տI«r|%{3O7֏yz+@F{2*$:7C53 .ن.j+3">)U9=,eCvohym=xJWꊒB0rxfDh4!̎kY̌%̵ Iaiۤe\k+u;\C6U8 k%uK2}i'X1hSuT?:]Q<r@[MVELW MgE=-ftJUҗ~?v H߳o|t!A _Rp+ī,f>`W$pYI*//ķY|Ƿ;W{2ߜGWzr ߺ_aY9d Dek!,#F{<~X+[Q8%͇`0ݗ.1Is w˸T5gSVy~o43al$\3 OOsoaOqV~'gV?pX>^ҫ/.UJ9?hw7ì͕v#횼=iFç'a3-S*XuvYU=*)f K,5+eM1噏w4B)ߋTHvz:4I0dUZosZH'E% tqC⎻ ~iXO1 Q#~-mNlEpTUwx.)W!?{֨JlFCӞe;$a /T;אDQ;BŜmF4{':<'8pObӂf>8 5֣`U, ^33PEb2P pC8jl{S{ MUaZy0zj`1VIʳʺR*Rm _h`sJE=Jё^EHGIBm*qtfT#(BE)a4[]+9@~Hjf/DFat;P$(ԕC&5>˯}7`Q&! ʫ&p6}h!yڈ(%څHu%-"0r {w_ p}[yGvNx5 EW/o|u7"@I 0)sCS^J:"UM\OO'U|q K\@s}bS}⃏| w!aS?`1E@waXO5F5$lxs+/:mOz/rCw}cՏ|i? ~Wj +x}4v. |6_"!6Bk,9)dʶð5ɒ/ Rx &tQm7 GP ZKk4IȆ0zA" _J޺+:ʠR ٦|B,k) 咳~شMRJg <zq tţCD)G IQa2CK8u=fCٴX _Tt5B0FVZb'JN,z]h4q=G3lH)ZH~ܗIsUCfGEVtF]##i &od+e~o#Y/M0Շ*c-Eѷd@9\HWZX %+ 13RղF 7QII*d\y)n%8H0K7ZPha$[޿~hhͿ؋>x[qeUA8$C>W2̍In] \dE<<)շ'y뇟ڲyuptp廗z廗$I@6Hwn<,WYWhyqI]UqWXY 2ҥCU ȗу13yX8h$̯i_wn6؏YLtKw'BAh>}o|=U62?g[=D&huêzE4Nf Iݺ:%0,Zb\L-f+-xb4KAq~Iy9juRM *JG:VUhmT듃D6o◒nRxd,9A6o\ 1rXyOZ%hu6pd晽~kۂ'65^OJNDZ>;vO*P"~L8%X8:l>oA&>Iu~9xzgriu8Æ- t£z!> z!j::8:ǧsˠ0]4SXiV8i.%mZExZ@0E`pȎ*kys>m&ҶAȬHȒtŠ\1L8W5T]%4ֵXyfTݾ0j,"8Y/ Up2 3Iح;ooAL1VoSAC*&yfo(]?H^n9F&[ }y&P$ "r8lO(1U[1|V=oϸy |HzՔfͬ 1xBY/8|TwnfXx.es6f#!ZHxS]"Rz<>})4bP9Ӡݵ9t)9КTh (>: ]k_+uεz3ci(,&A3ԣBc>Mk{ֽ9$ 1MU혃Jajk>o5k)w?ʹoyi8Db. 돴Io.2}yO>t!UP#y\\C|a \~lV8Zб<4$}oi,4WrI,0ȩ*(UuVgYz_~9HGS,j]|!g]mٲ\[Jz"a&0p8q=в;n9v@l@X $$ޒeRUIUu=;x1gܪ[PqgV\3s faKXnj\F*LIۦ*fݛ^BX9B4t?&¡k~ꗎ_p#b+}ڔLpJka~ /W3Z۶=v{vN W5}"Zל,;=& ̃…$iY&BClk*a DM{r'/[=!*fbF=A3VјnX潝|eKLЏ] 8Fݑ'\jWծv+z)[F/"N2_1t VhM1`Ó2&H l-f{3sI(Yd &MD ` 1E ۳fd˩ ="z&𗲦lDD5֋!x]‰2N֐KI43M UiOhlmɲ)߮pGPWn9IP3֤#uc3~gaX~.z{7|ϟ5f9$D~OLj!Em:cINs-[$&^RAjdzdExI{}3fR/'VpV0J>S XmQM3%3w;ȋZg/D ywXC3ԺEV+J3tsdv{O/E8zV#rv%hФj/q?Ft}7ZD-5wV@HNS Ka`ǐz1 ;٤,j}£*b FH{Te PaLAA ~I :-+<ո8Hq'fsBᘅbM_Bp2Utۼe(!i + n,|\^*b&F*JAQOilMEU;EKzᕦ|)45)qx8KFf‚,ҵ *AaF9rTv A7WHs1f9]j`q+#图OAol Ih$;f ^'C%iRSTk3zUX8prieXV͡_[SxiT-lH>_K(8,l$ cc?F\=77? y9*mT|4V0b:O ̹FR` 'š,8/#,@{MhkV5v]jWt_"_"}|)j= p33Hh6Ќ`'rJ&T[E&.*a1(6V/Qc>aηd@q R>ˉIF彜p`GYV6:b0I"0zXVuRncM[Y='[]P#:Cxj%IG񒚖 <4骗#k+t޴' a ]7O[gl935kԨuuy9WU\SȾ>Ţh̛+T1rB Za .\H ~2X|)Lb ߔUE ѐ1¼T1+CDQ͓,}wAzwR~?+tKļ(`J5gi9n==[+y5C%p ](dj|!_B;]}C"Y`+&;8ʦbԱ# lNcarܴ: (Lt=w|n⦲iں{͉}}(:xa3NpUUñ* _Hm߿'`ͥh )`Y8}J|$xY1P= z1\oQ7\Fo9 4wtVүIDX[4ଜrfQy^/u]jWʤW$B>m^6~RKi_' ;-O϶-CQ2SLQ~#!aC+1ż?q$}yIE!\r4iʻ,T~tt-imcuZЭ(G8a>L+Ȝ"edZ 1M ǧ{\=. A(Y~nX|8NRUsa}zv>l\u(y5狒[dk7_H8N3zTnaV{22~)',r5q,I"$dN!N&`҃g{uVTD<{OΞ 0L B pEmU" .t y܍&fA43!ʝbFnsƩwZ iqS%+0o~ wDƻt .U~0F/Qmp[$*PڪGo̧>wxs~IJ$K!Z.f%2Rh_mK$2v5CA{hdBiYМ Af9m6I\i `ɒX̜l ۤÊ@ #}Ny^:Jq jH4嫊aAc|Lg"xb7̉@OSn3zZ띠L[f3ςApF13IԄWJ {Rʆ[w#T 4E832h& ũL^r4A( vjhxz]w߸xMp}.xM \(J[?"Ľve"%Gڅ/o __bo0(1"RJNFڷڌְ\kWmtʥXWܶfM`ɺiYFIcCq3W?𚪚&=Nɴ6x~oz,7ø ee؁yt_Vg|YD9+ ` \F_|2c>=XWծv^}+{=5 9Zb[|aq  -;[HΧ4kCBx wY,c[Qe0@qP@òDU"#\Rk'b*b 2X ޘJBc ؇]5ilJ-/̩urfjp01RzW 9Á|ݷ?zfvĉ|>ri=r.f崦bGZ-`K85[gHƩkQ :&{bMN: 0֊lmYQMzy"k}1f/ }PKX>EM#rKLjs2;dx8R~Ⱦ@D|~>ʊls'Ev} *D ۊ#RK@cL7壕<|\˕+DMlMY^)fD] @0Yަ' A7 {Sy|۶v{xxvmStCAD"T'DDo"["-–Z(PuS㸣t]&Y)(IGŒɕdx 䯁*>~ʕkΖ/齽WX5նFaEҡ/5z͵WŰbۻj孼U^G/Ƅ6ȸ5d6BBEߠm=sP{L')>YG$gAhuVY?.jWծvѫ/z//zxICwͶx|5qnQh}^CVݲ6"+ Ȑ/Ѷ̴j'^D3=Ӊ Ph4w\wY#irлJE[9IZbXgKq+_9.l7"Md!!RZ(b*[ T%^p, iOXIo$R;GvCq>κ(nJg2h{e挃$KHiY-V'r5BkCΓ'ZEW0sgQ;s{]% ,5rʃ&!m3a&?0A*#Wބ0U*ؽI6-U>Ǐ ԌMn"{8cQ:U $eU lXB-}NƟdAIAY LHn Mɭtm^q<IE @ 4w9Ms$,~R$J>͓ExoEx:>Ku]jW"?6{ ՝-'v?|/jgc.᲋S>p2 9V[*~u#G|KQң 3ȡ ہ={xm$0;0a{B2Rfc @:xfc s,# )lM VN!:O5HFsNe{y0fq?2$$jrf`%$.ueY| i na4Aa(S-ʀ)ʈ7sZM㣿kO_5v?D @6aEB?#n>o96HbSyr~+1Q,߇=J9:;{"P`l~<|ɜq0+]Vpgp|GC43^?G>ޒl)eel X'i%2O. ,M\duy;ooD |VnkߢǨT\~" O_S ƴR8J` FUv*c}Xbk6%v±V Q>ZSʋߙp #!rI^< K +f[JR6HVڈ!C|q~WAY *.u]jWEP\tUxú7E'lz|xY>:j-⽅G%Bz4 L xMty1>F|G?9K9de.iA;?8^f Z_EO9zU㘊fB (i}J`c&洳*1Qًo% xp$Jb$Tt-v4X^#CG !ͷ-ߗb3'!:n1`SV9wAm (Ya*L4iMi$ȍcnCEEEhvBVЌK_khBjvEmH$ӵlbu >&@6P7,E-$47ch,6+6޲̨%SIm IDAT0kw7]âB a?~O]Xq#o3'l.ua moſ MxMwyx={ߛXVJjT*\Pfux0vEz(c$R>&KV+EXKĕӗNlTz\yگ~7p#|oGcFMaX sxzG"J4KEX_GIȤj%O?u]jWW_) 륯XcN~i/1>KƽKbZw(=?nS9VnQOTz<ˍdWF9EEZj .$}yy9Gd-6JP~Ini1 {/h*DIQLAaY:.ahASj *>y.jr2?*Mlr7jųRjTG{4:,9믤au>̩.Ke@qqZ ; 39K9E`9xpޓ!1|l`$̘x^όqaDj4LF ]޽b*a2z򣅙qmBT:M[-/BCb8HAdrUR!UiƮlSl~"" b."dtԛ"-#V|GSH$ ?/}ЄYƚZtT3y7n/g7z~׺>dBw5Vr|>(D7-D{FuňR-R Ye#!=yS꼘1*UqZe)F2[%5j-/y=OJzIV[)z &R> cVr Wӏ ,pbYi;J;vl `]jW.z* W/͕; !'= ޤSu#;& $wf Azs2Ij<қBF1nYU*t;>"jRȲ\jH*5\ׄp9>9`NFV7E MbdE rȦmB1= 8ܖ(}?n:H9W!9Z3<% D{?%kI*xМic>qdls]<GZZh],kɍѢdΑBUԋ0 |RPB̸{F#hKPPT? 5S?VD3php;_Ydd&CpS5&c~QP=6V<4o?$yI2_{MVa^l2aN8 E37houp-m 9Ƀ`XC+'VL6D^I5q[$yf*TPmuW`!G8-֐b; .3>>rE>>׊[ o}򣳄97\kug˸@vEEx:<gƟnLWծv^;C_vW2y煇E>n1PΓ|N!FS2p{xjzIL0ʬ0 G-"l#J6B23<ƎeVyOK7OӌRfڢ34X^4+ Ւ>&0+^1oHv}i rlݠ7kѿJt<*c@ܡ[I)B2f#t_q&0Cl[RjDn/$rGI\%wXb #V~F&KW0!S6 XvX3vpMSo9h[RCDMT *TDŖyfQK!tC?]6AU2\Q'fshsӵ\/NPu,1_MT͏5Mmi<6& PRRZ,$#{?OLZHqOut z5yxqQN= U1*X+ pn-ߪѫ fBV,j,@wEF?"0'߳&> >BĆ0MfYU3lHȁa۾g\U2񶌄ZDXj/bdZ}KtV493#ծv]W6H@$xx شK1h\lͻ#pj5%89Z>9Ћ|Sh3qVZz |Z1Yyl8*@WtuVz(oZ%y [9kR~i({0 p,cLKKK&V lI_kRc,gOкcU#S䳚M}~T2ܝӪhjV/(Fa0212A%+T:/3Y9TY挭&/(\'9`˦ʃY PPm&(DFGfBbMD izӸPFjR3p竛ewo`H6Td1(b[MH_3E M*zJasc Y4 DRI2DbWH]MűDHSgjs<͘e3^{0q~>مtGW{ɯڲ4y1{0l 6\dOZIX:ӎ,>!m>$k4 ]˵~AIcX7tU{M YKs3a Z eMl~N.“=xv]jW/sz ]ÜB]? ~͕zhamJ:+Jp"s!P1¹Dk$ӦrW|.pPLS>5c"msBY&7֡14\ȐQ8XG &Nr(#|*#2U[1?H,sH^DCڷV{ѷ\'ܓ"u֣v٤R :2$Y30JDgUT"G#tp֯(:ie4?1srp"v=)(Hz@I컘iqQRyճgC}.x@11&ܴ BEA'kȲg!ar[+7OUS=J 6:"tH  ao@֠##3 ni-UMٚ0b!pLٚJE?F1+ $o?[Wo#Z_eF.:˯0 iUmSL;TUѬ*X̬Zh_mγtl~u2NKZb]Z/%^"98G_h -ZBj<~@n;KO@yeUA_ d3|"]\ӏx«V1Xծv}//c>mpQW]a*[xd-(g _,:&xggvWӮuQ>۠_hŞTܱ.?dSXW W4 ij粆me$Daw a` ڲ,5i!j$?qRv1OeFHk ^i:{GZ[=LiNr\ 0)*b1{3e庠}Hp0D*GR} RM_4s?.`N9J: NXmQ`*+ '*$eTl պ&<֝o=#]Pz&M=]2= \r{e0h3F0)t֪ Ug^_j:bJ'L)`G$zKʃnT;lKh }t&(ES'{U? tL]r`AZkj# z6V"pJ[DL6mNJ«|ґ54Y ʃҾwDқd[-}/%mRQNʑaS]מJ"}_}%#4EXjτϞ.B{Ӭ^>L—/u]jWW2zG*o9B-Rf,sRm 4O({d=dX$C,!4 ]TfY iі>i\ XZ&9R)ggBu҆߈i9;(Z<2m1ڤ:3tD̋@ffY~^/)t 6A&PA>C}}1e\Z}]E"ۄ)A@td“+D{c >-lL`jX:(կʂ`v?N%='taYy^ 0F7B=1RuZb3h'MxI+L P oBRNŔG ȎVy($|ܡQf, 's90! 4ܝڨaSPq"Ώbd9TATHBdE:yz V~537u8fLCqEB txV$h EU7H !FS 9Q$ƣBEvz7;oBH#pcm)S㢊RnMTNDA} A-;$8j/GEPU?*ҘE~7zUE9q4{+dNR[*REm’Sf$܄ ä|62$+._&-ׄZ,,AV4/ݛNa}O{ȉa}7Շ#֧~}H9p& ur3f\' 7]cO/ZXWծv^]6gd+sz%s- W vڙgge7 8Yk1l.uqs[1Lv^E=I\ [|ohPvaNL %S@j7|*yS٨AE~mݠϠ"7rD*ML[Enj>R [yvbHY9[b=zU(hE,}'rtĩ%;7ׁ_ iN%dM1j4e4 )<y&xDM-)N*(|.=ЦD;Uӏ]Xg[R-E 'Z |08:'–ǚ)\5n ^# bM6H>PDzQS'$6>ϼq%` 3a, Ϡf,9ZL'op=kD˦-솚 F OPU u54A!M3!oϾ3sE˯O&&)] 66GKz6d\Xo#KM y7V5c5F8\goMbY]=poX]aIcXs>wnEoOWE4wPG2)h<4ti'⬓/ծv]Wz6ҠqO&g܋S f ^NFRg'A>5>:*uW[$tBsJ}gf򘴡edz |$ )w/L^:fBۛ7oyG#e'vGB c&fؕRJ"D[hMNVސeGA}ZH`VVg: pdVdJd@Wn@Щ8ZVKf3_WO~%\<X7ڒƠB21- J1IP0I] ԉeCy54U D)dG nCu9jr>nuaStMZ@11 ,T(o""d\i>()!\HCFz띌ͅxdRxWy|ŵ>Κ asm<;eU~Ͼ)' 9lQR V5gƅóһJ+Jc?w&ݘ=M{Z*>PsWk.,jʽY9Y44bϱ0'J(:0 }~a$N_q+\rϫ|oڭ+ÂL!e0D-&L$یrP\1 k;G:}XWծvHN䟧ձu_|1BdH$Ҫ8c,ڥ$= k]ӣ4gP!i Vc(-j4ТTBUJa.{?9YFYJ-dTG;-[U@6Ym)}q\cʷvJ%Mb9(Fʥ"5ȡp֑X9LrÆ6Tg٭`gn'f'c| ;Dŏyӊy:Hq'kJ/l޼+¸DzqHN::KWD:Ѧqs~* XTFkN$Pj';2#i~']%+,"T T"c*`@,R 8Kf13T,ʨ>Bz',6\%LLꔭ4/tOnO3gOy)SZtVH*RxO`1uX\~hD/J+l-mc.ΒX|a\L\jC鶒?͜}o 3#OO>˧"YysDQ-wWqT_Y]XٴxF^J=\jWծdvckKF5߹}́50&8ٍ1d9ϾANUhp 3 N\I͒譖k1B WZ=!zo fRMM zv1]iW+V^ӊIV 5>s @!t2OHL`;t 9a?EHSU6,IecR!% ?`4)rᜊ@d=h8EVt+6J3vaӦ@aͺF3S6/吏 g멭e80/N;E©շ: 4%̓tS(kb}&^҆IRŒpX;i*݋[rQx@PBhv⬛FFY˂2S"\ʃw B( SyưTC (,mʝljge+KJR=ABȲ:B-ʯyտ^̫;TN"mD޾0!8$өOpδi :mV`ϋ8kN /iyvXxLM˛DW]M_#q÷/XO7_O~ qeSSQr"GN]h\'<$bN^B5ծv}A"~~L5^1@fv;nww9,NW8vxiX +5$ [*I"Bo!tDS!r0FmƼ2T(^o':EOTHC}IX8G:IFT3Y1ЅrKdmY?> fpqƅE16F"4m(=^R(Zy""EҴM 4"zH⬫XrϳoDkUf*ձ[&Bt6|׷}'~x>Z H~뙿ܲRQˁO g'a]=; J%๫ ϫ3^2( "!OKO^jWծKhW|Gɷ)sV"ߧWNM|DQ)w^r~'q~a͜,TtdAvy wqEt=sFx(U笨Jl,eH) 0#r$l.KUK9_RIk\Qqp, bMm ө"Bn y&<o[mK`7>fh&F1[=>q7eGvFID̽Ƭ(Gfozq^kf:\ s7o"'γn_+_l䍟7N]tBWn2طq~|.m9I0&'Myڛb =C\WraL[ 25nﻅlp]߯+Dڵny7vgt/Xʳh_`b|`nU(/] c2;Dkq jKbndTn%2>w]jWEd?)$kx1xfo6 RYK%;gr/}*g fD8Q/CHs@ B>J1Z6<* Ś*֢s1d3V+'GZzZgX~b{́4K5-sQcv-smJ/c) %7ESIE Dy<& Y/ÿ?W5FUDTշ։_ ۏ\KU&r KsbzU Y XtHkewVՕD<<8*.p?+tij>TDa}`a~GLFH>G?$hh5{>?bIeK!ma*X.bljP~:V/T8 x`T|ɴ `]jWվ4E+B.ڛ 4A2ƑK2 [z2o=P R䉼knXjMI8-lQ8ܬ>@dGV + KqphUi jr9:ۇ&}TɣJ8e?SE#ilBF +4KG_ p~c I G޽p.HhC: blRiuK.g'wOd/y~Z7~啥Xyݏd혴=[3`X[o 3r#h"f;4ʌ м*HX\~(Zug?TIFa}o^ *z}_g]mMuE]bUj }V0a?Q/RuXfWُ>8^hOfRdI#|:^abk˽fOo<>"=mz_Wda@Ko_ `ɪު7|Ʈ8g56;g~*ۺ^ `5\ݕu]jWRW_9Ojx i˹&ӀѤx%zNj0:z۬"ؽzRyv,>MiHMYKB8 C5Wp=]hAOlyMDPϹDG𖳠շZgC\ 5Dnz$ws*e4KOFۚ\q/ +&ΰ̐&2KV1)]zIMuBDO ɲ^!. $N+2(Yu1` ;DyM!JX)#[D;!KITO^/uLdpzӳmNo Bx]jW2:ëJ"vsx,u?==Ϋ{lh_T98?38\Ww|K}pbӦ&L;V![QOq9NŔq0 ,y_*EeeKE#+EM)E?'[>b_fH,DxT ܐ(0D:Q*k zh.c`$2ӣ2Q+>G9É>([UOZmʡj(Y&An<}~j%~ S]4C??!r6Y˔95Xr HF( b5@f8qy2SCvZNXY7 'gVUQš#*t EDvED_Nja#(EBdqh̅;&*.S/(Yjp9гUQDoVD<"a"?-t*OL_`]jW.zEIO'{<43|yǏ^q_t/U>9"C!yG3ZhT,qcyr 1q4QJu渷U: 6;2G.[hGŵ=QJ}@<3LyRqHdeZ*s~RH87<4MYgȺvhJl\5af%}}ιcfw(Rl,[8vA$gx!q 5؁?e]~_B^*DK9m{(&Gࠎ3Y\!Tu&3"HW=j@ coaD@dn$zIyP=*P)܉'AVԐ/#]56A^yׯՓ ((ixPn{l$@{7Ƿu1[#ç H-*`qpC9|6MA¦*jh3+b>T^ 4{_s0m߉^=\{ŭ;a(EtoRY Ƹ8d~:/?qo89AT?O{ߺW OFj95󹮌.alC9)J]gpa(<)2no{+?J8Ue-k^#iղJiens$UCsp7$Ge߮d:# g Nhtj7ٺ zDzH^e[ie,BMHЕ?|a;H;H6Z`gAtD P)Y1B*F4 ZB'\k3ܺҜ*Ȃ-:hY{)fkCBn';P$L?3,) dD352BL!5Yq G6j8=T,( #T@]JԠzak*R[)RD Cc%C(ڋܦ(1{ ?2$V(SP(jA)L? "  AVeE ePs&wLHVACfcʆD]Q,$kO#ҽQjny;gj mscs#7\yJ) !OL\~ zwF7˪&}%wR7U{G J5J(B *O\εDUYoBdxvѿj+U\/m[D?5.`J> !'wc6-k!_~ÿzcqR\ GLt Ǚ=WYWCdLz|ɪZZֲ<h0m8eaD}{Q#k)YRf5 C>h7ݑzԱ'i1YGpcZ IDAT)CS%:i ;afkzq!wC8i^+2hz+u@cPY} PC~(VbD!^r'Y2iZb[8<vY4d9$qv\ mR?lvvjٶPeOJvrc>h0lN^c7 efmW1""*dZѬXp*kvJ !N%D%D'"Y{U*D>x"|뢴gLM JCͬXE$}j4W7ntj@~^*?3"(P`ʁ:_ؾ@ƁY2 v[~_a",mߞN$8R'wyM$18X tOWvw Kboߌɥ\YƓ[_<'=6G>,Tz+~^ڊ, THFyTWC/J{}B. mU`e-kYZ#c}(6ڹc(%*U~]ܚB΁/1iC/7Yq?<7&y$`wٙ1BVYNnGi1z4\^w 9h8}V^jb([rt%zN`CP!5+QE)ՠDa*{ tη[fSt4a"Xd!tjT+z4_)T",PE%<9}"N!n$auZxLj_o$ @s".!pt≄ITif!K|?]_;X=X\1T3}VKY7ZkCi2š)cbvl ?u )]"ϡ)PM3'*E&q֚ИyITZYe$lJ:O\ڄ^x|/{_[Wcm܅zoztU`e-kYZ{Yأ<`w &PEgوʀ0hPC )zD+=4ܕ &J e~CThT5k#3-ݜ`^M8ߍ D=SnMHPTom4TX2LEi=He|4 H#b [!VA)].6M-jұΔ }N`٪I(NFcg.bT8TШ .XZ1]3UO8XOPNqbb/C*'Վ^[rrݗ7g.Ҽ`y^\4).d62xhx!`xok-kYZP!Ӥ-N |t8w3jjzyz0Gwpw_(Tkkuw,tˆMlj8F+=soqJuYFbDBh_eZκed('>..Kvf.'xt)xA찿^[˃gM)YpKr1 Y2\pXEQ)%Q ޕm|꼟" u8{AFNv[ F5Gӣ}_ Ų.7Y^RZ542~S pj3e7*J>W>͢0i̶Q9Ϊ *_3?,J(% h4 h$T$(EU]l*&΂q0hP8=9 oķ޽ e2w^`0v(]43/{ߞ5b x|bxWPM% `5O`}*JG6mԦ%n& -e䅎"لĒv|5cQu܊w[ '…퓓(ߝ-oC5W޼_H$Tܢ8cЧ;ГlԳ(- Ѧ3Phg>-R%FomfعwI;@=ˆHY$1 *2|`i<+V6€ٛUP0TL@u!J?tT^%a'!gS2@V?sƿ曇TdÿhI$$u{R9ML&y붩ÔPYhhO92͏ ܼu{Z(  ѢwH#hBmS o6Ggz;`N[F Bhګ,:Ҫܯ҇J~MfdTkUF`7NM--3LZo e;aй֑.,P|6EG.)\zN=}\nl߹r[w \]KIAHلE4T1y `V(ExϽ/ߺ|<ފ>QiXϸ=IA>l/^X^@!~~{84&U{u ,{gwT=?s7&=EI@6t;}^zr O3ک* |e?w:}lXbɦ$؛,k-kYZpbJCx}ޛí5fc ꡧYxP)2xIATHmܟ .*|FAQCp.""afADZJ;P94gsj#5O ]4c5BFE-PrLEM=2bN T}u8%H3:˙ҡ%W{F^ڶ&@$VMYsQ#6ɣFIF'U=~]!JMSUex~oi/_ˁAĜmB;O01R}W:qv-:S:L/bw-pcY;΀~X1?Y.FL:]"<`^A?ߺ+oJ"Ɗwt/y>G\EbZp=-<yQVGky1e-kYZ]qz:MqέYtʐ0MH= QJ/: !|{9Nsvx+wFfYLEb,}NF@âԇ 8gDf ϡ`Aga$L].)k_Q-Mׅ'Kea[.n|=1FnQ"Y^g ?I{O͸;uc1_{]zR8FH }9O>qpNG4 VA"1&XwȜY0gO-@s2ļ)-/AHH =*RTjN!kYZֲnz0W \Ua@.bv]h@ew;T̥;mЧ/!0l掴90&\ݽ^ILqB -x8tS+pNh]@_byQZXC 6C*(i6f_O *t\p/I7bZA+! y-j$߼~h{φs*ήDmID=ZGQyiL}7=5p-kYZ=ANթLd {MOv:G͙H/`E#[+׎ >)2sVhҤ]rXHL1,Pr$YEaeeS~yhLŘe(k.$CG ^kzK/T/Z'k;JNd7ED =a.kB"*ܕkH R1J<:N-|2={rr!ġЗ!gS޲-v u;V]F(%tLe^cQk=* 4`ZLYXK)*t.CV+!仏Ȇ5$dL|D~Mz%shpTGXV䉔`63d]VhIT1JXY(7gm2qC#ߏ7;A}BJKlSFai/lOnffBGo~³"G~ UoM"!LXt)`09)9)[ 6I&9`,)p$Q=Jo߆ >ϼt7nү^\99% řQ|/Ë'>|0֨^穖yOx=nM?ҰªZZֲ>Ut.q༏Ee>طlzXnJGLxGFC1W2+NF,n'n#m5j8$p4iMgu![!z.4USFFZZatɠ dQo* +ƕ L~GNo`>% $C61Y8]-x ¸)x #/_Zֲ.qCG@~5eSzYLw1NvXw/FsH{ l[%zɯ;Rfꚩyv  mxQܪh"wO,q17@ѽ^h?_8^lLIB6P.S$T*NZBbVD愞=S{kvy䜝|j$/] oā>?spsS$(ɚc+{ A8cqוoj7m_#4BIr]KYڿrXBCK15Bm`} ̸rnܼ}6y~0pƚ1**5g{ׯ{'޽|u[ٴdfӷ+_gzr Wo ã=u@W$\Cײe-kye~Jd Ba1̋{A({8i+BbzqƘSpr0NћD{%c"M)!1b&)8 'wNѣ;+6hB0;IEpV~]{ 95rS0='ǑY}*ah^J}k@P?*bIQ`bgGEJ:ikV1aJ0)}=~>L36dOŽ 89%dCk$81,Z5h=@Z^ ƚʑc'W^s}2VӜ!|i#ٙ=K~96}?3]o_{Kg?Ss{^Y,9$eXkYZֲ;.Y^[z 2":!@^ZjOUݠN ~uh{&(3fs1"?e5H;Y'^B\iiTۻbJ_7Rs#ȯJ;" LdEliעxz 'AƦ5:-c@SvŊ=J5B+<ńq[,\XMgt{Ry2AUlmG/GuXua6O4Wݣ=ku`3QZ00,TKea(|d-/  nXUWȚ)Zͻ&AR4%X2 kt+tMnS/5ȴv)q!(i59PcT\,JL̷]yC;y;o|C:]8Ha퍮t.}:KEk `/ɦ~Fӱ蝰8P?Niexg|Z[|ų{ү_vcҫo޵|s:׼KP9R #e !\Zֲxӫq_Iv>;m^3-7sU#m\0e..tI-kk:bo~ײ>P>8p};;q4mtNX V+G)NtͦBOܔCY}pJ~3&A[,/Ê#A{ glj܉l!YL[\fS>]nJ/ky AnߔxܷL]XY7Loװ kXӖ(ˮX<]mT5rP3.ki~&;sq=ӓ,:e>CDMSP!g泍͐馝4ˤ"R&ɜ29 ^1HtNHKtGL@3Wv(l:}lK&r}wMP딆:.]z;_u0oܖO~|ܴlLpV<~B([wO]>PndN^T^XL4h&%(5|:#p8i:{j q$HPlґMuɏ=ڛ7nF튥 O_tvx?+-27lPNC{|U%m ֲe-wCd_ս*{hz%Ы xNv)lo0Aݢ*`q4tIGj ']q# "\Zo|Q5һ Q& ZJ*60j'֕ 4'j=djq/olH>6?+$:e K.]P &:̧3M'S%W8͐Y.N,ƅmNW\&,_BFC)ҌÔU5S/5` kW^gCKS,YXpz\-yk⁵*ֲe-??ٽW"PwqvXaJ`',***riTrkV_$wQLs m56V6 _^+-߆@;6Q:o}t8K 3VqSOBk}:tL5ܩDFNN1`">t5G泍T˞ Ƿ۽L<()֜B՝p.}g8:JcXq~X((Lf>HeAݘٜ[N?R1|dt ؞ Oi_ّ{+FL2m_I'+4 ƭ0؆'] 23,4'0 xV`5VIϩ̃[N&YpFp(cfAC|ϵ/^ՎP '?w[ ]n_y/^<RQ&$5Ԏ~LFOk-kYZGL~5;Ή Ԗ{;[0aC -pv^x2+q`>0$ ܁ß=G޻}Jc }J?g^ pNXXZֲaMߣ']KࢷFcz3l/MNRkϦ7Xz~ɰ2pa˜V/_tFZ*^Oѣ&ںqMŢ:4ҼYX:s+{'v17#ZVFx~]cj8Ѐ 5V( ukD35~p$rr9 vj)qƏ@9]=bnN-37ԟ-GqQH D1+8#Hp)PFC9>+*ahKJU[(9"6(0ܸu1,`C=Nvy&zM5R0" Y/3ÿF.>w~דp.HB - `܇5nգ G0lU gQ",J:1}h'"V:LvؑBh:Bښj"\h #h+O\9O3ڕ?$~KGWzg>^&jIM(K ,`-e-kY#M'=$ۅZrSZ(F9`ZYaNrx:c; XZSfX q" tvs./ 7K]jYx-\Ԟ},8TRej]Ef7ީʥBػ "zyYZ<uB:lG54T,G6rxgk -~X.zV`ݲˮX2dT YaM[O0>:&HhdO%UAKCWwS F0 @6qdnn{(a$%ÊS mB?*bl֟h4,%*wwJ%[DaxzkӾrҿO>~~SGo}r_֯|p3O>oz $Na\GWe-kyxh~^wQգgnu@3,u?ϖkn`qaUoK)޴ < MX2-o5uzyi62ܯU ^I K4q`E7.]H[;eTӓf\5FB5qMR`1=b^b3sXP NAKV}^<;FUBXdGbBT *_@ TYZCap! '#ȡOI)3-@+w`pIRftRTNꙝu+W'pC#1p\:|QW*vbOz+ii5)s2,#z}2nn؊֨3!fXÒ?ȐP,t Qj y1~^{s{ɰoo^}+pW/ukAQKk[Zֲeai]åaz9IkPֺaD+]eiOü^I66OٕPs&L)^i)n]F2;+ ֲ_KSo>/60U.mHnX/`7qj31/HKA5$Kf&mLEf牑 g%ȃC ANnBIC"pktJթJӝ*6̂{ŝ-ۮ5|;(L?8z'VXOkYZֲG7=^O4 Fa$Lasu:|sy>(mr Ȯűr^GA9ZndK~RxxngpG.̬X?eNF s @s*MG&*!"qJ\ *K.Aб$K0sVҁIC~aby;bu˝[<`8iֆ1+31?O*Qt*< dUB 6 ! 1./ QX(7\ K BWĺT`3 O!(#}wATI)(U 0X O^ Nr\Oj<-+׎;I5 b9:cZo<%NFnli G,ÏfJ'Ptpw?"OŸ3Br|goݿo_x:+ZZֲ8={Y]$ƐU3+$T)rj\xi$TĂ`}@͞P0|đ{b?YS߀`˹:Viz2ZFG L8/PkqNX]0҂5b, 1)"[$YJ=jx>R,7A!v%(_l0v=Y}[e1Bb~T^WdYՎK-lRx%i@A$,X^dϹv5.@0?YbXUM炊kҾ, I Ɗ,NDq*[_}*Zg3dDmσ_=v<83W~<d Uo*c$ͪjfcXc XuT=r"҂K۪8>[T y}GQy_oSM?G??Işne-kYZ7y(LQ$szke`6͐9h°ȹ{@Sjtn:\uω_}sƻ4O`{ܜL1Y#+ (el̪qwqtB>\Q9FU\{ M.)ɶBZdE'7GN@E-@%5^JB5ԥAw&P/9R=10_Yks$`MG"0TER;ualP8;}[~r@d+IWVJDy̱>Ifߓrz eETJw2J !c*) 2k6'0I8mMK?,7xhPR/*:" JI$hxY/+U7RHk!$W׋DkBiVr}ǣ߷>ᾯpB?ؓo[׫ ~B _|܅ǽbM{6D!O'%&ݐ[w8͵E!a`ILTQN<gjCT̼D.ݏ n,a ?2]q~98Xkq =ֳ"ܞ_8zCg?qz`m2__k-kYZֲGa2kw_BwSPR>wͩ]Ii)ꈖ\xw= /9g{r:l Cv4.+LȻ:M=!:k>avZ}|F77cR˱e- 0^9;s :?_Ll^P !rEY)u.)~`X]nfu:YGNթA2c2vI Cͦ9Ֆ %GI)Ǣt \ŖU!f_7$0CqU#+*ME[l\ ,yߜ˶FׁR0C!ߖt^Pu+b IDATsJ%wnLWRͷ*1 shuUWc9WjxC7@.gJ%yF]/f0Oz#a/!NM?/mҟ?q|`e-kYZW'[łMMzn.p ޜRAl8ڳk 1/yc+u͠/Fd#'`St/byi$ƢN BX {cQ?" /JPNed  \DbK}ԈrotP)/ ݃uŢuzGvjmaH4,h(Vk'Ӏ d큨1Rbg݀ .h)(DYz4hű$p"79&-] l7HBQ%icRZvJhZl/x8xMt\iw3&Bz仗,Q(1)V%$qKh˦z98Foz$g >YD wL8fH -7]#!aVQbHQbT!b앁@il/O=B@:*d5YIܙ^mp oJ*^/3(,潧'Ohn5`0*1hVQH6@XOMh];N_ɝ֘gPvt.Ϝ횑.ny4btRʵb6ժH+!ZT[6[=Uܛ^qpܬߏ2cB:51&9QfA-{ӳȿs?89xq{kXkYZֲ^޴MLf|Tk'Gt57ӱY@`&cL$FY]蹶ck$KFB/b^u>[3vAiu2cCZdבqpyk'k)N:>; !vS@~(1"^LTVXcK銔;M*PD[>E~\(*Bed" G|7[䕫'S[/`TB-X!iDX2ȩF_)70NTWoq~BU?@] ؎yCؠ}Ƌ5 gslG¿"η N;rk-kYZֲJ˱'aAMt4l:e;0cxI G QOS*wյ:lתh{*73C1NRw"V;w¼Fi݌UÚGOGͶ!S}HݞF$lD<~T GJ8PwPR;DSe EܕbRؠ@8EaMwHJU6.͟?1Iy,#ެj-Vnex`- %Qbb3Xhob4E=:4vle`-b=FzooM@iH`jYo$A z{ :,W'HCpY *0oQN5֙C?>ovu e-ky'bq#:ԞrWǯ:y;;'O-ayZsqxj< yk3۶^V;gy&Z{Nܫ.(Li߭3E;3#]t]~Z<#N5$]t, =^vʀ> U2;4|Y+8u׍ۃLFk%R9w1JZH|e lyM)Qj>m9\ d7wF|=%@6SvꭉO1UD4]aTwlyvHM B4uwAiMh2C[C"ۅɓ}ߠ~oLtxtܸvb'[l* ˜=IATf1 QQJ@w(kBɢN6riMmV~KZ ;wLJݪd 2Ыakt8dcRqb؎xo:b7*rGKg/W>/z 7 O9|`e-kYZu\ć{]gG`QsZ\`tճ 6܃,#nIN|89X C 4<}cG5Q :ImdPߤx3XaT0 CeҿclZuf`f}v,=J؃ 56=L.Q3wk:g+a]@=ITt5h6G kgk3̂eTWlR雒z*{mۅ'Q.Cg^-*S$ c$#$H뢁 >s<0*řO2pȅKOw ((4* +{%5S&5,=!L19YNwX`,菮6h.%BħderHtw4IخL0osv<+(q4Hf\$gsw< &r)Ex_Zֲe-,L܊&f~*u*>2a+p{HauK* s;dhFS1bjlaXbm:wW;,H0mfpG.I9ˤ~1 *I؊BB }R]6ZGv*~̌Օ%`ڎ{BO`Xukw'd b#Bu.R  &ULmiTIӊ(׍dV2d.@!)E!FD hƧE6( WɅ{QU֤t)RtU GC݊ASDZ-pwkB Z_ԸPpU7d[}kl3#v n8#YbGE=Nݠq #6®Saֶ^'֠]/뻜m;.q(|ppHIaXkYZֲWoIx}4Ќɰ_}HQJfa㦰2㮯 B w aB@&to:8ݺX*|XfXʶ $`.;6w1 <dSTtP_H?2T?qFݽkͲ,'V")N UJɔ"-R ]P9HU}1I Wvfג H$pB# 1L)[54xSpʤDڡO*ڪvQ ȱlʒʨ EūMtaD4Lc* J0PgL-+i^ E)Dk2LG@$#; ݡac0 ",,;~eP]_ Tvco"M瘧k-kYZֲ/XR]uT{)kC Mo2,/]zGq7'ղ?ӳҏ=GoPA&`p{=(՞xJyZǦvʦ J%9ȗ;Ntug3@#\x"?5[XX˪#zX;XTq-bq` < B1)m8hA9ܮJJU`Dif(@4 !(%N Hu*Us2U f_zD̅5=T8T,`X*$zx k|/Vr:ן ۖaZAaOtI\Zֲe-~H(*)LewΖWYk>խƅ΢H6{m>OmgׁNH1(6Kg³y:i`37QGR~Y/'( XHY$<~4('$Ob8. ,Rq"&6x+Ie5!J0)LOGf4')$BbY4ZL"J[`#S8Z聓6AVzO|Tg G 9E3`І:TOhTI46{X^`!Usp/DQ*oTpS_7׏d?z?݊_MeXkYZֲ=eSŰ XXfMa*쇮dząw_2{yP(^6̺rTxMeh|\^0%JR!ߩAϝӅC K(/~ 0vaIuÏNpb}bI$Z/ovh EUQAa] G%TZPRԘ NH"".,cKU}%g( :*]mB֌P8="]o#{hRWU5"[a(M66I_VBh$ VۨJD ַ"l<)˻  K"MQ8Xظh(XLfh4@MM>A훨_P21m^AmF](|g᭛B>˼8l~OpG4_wXkYZֲ< K4 ȵY"PqcOporj\2JN˷]s2rKؗ^xMhB?.!F &4X:OTu fͣzΘjALRQ]at1!*6;V] W)S)VsU׵ +%kpsrfk&xڷ1$Bf]iq[ <EY<` Ȗѯ.HfnՉ2)pWy|P="Ż9^~3eI+O=qxlpz%-` XڡMD6C6K[ا%Wmpmf5P8[negR,?R<3%Q,88^x8W9KĊлr:2rA-5WG Qȥ V'ןt!N&ɸ}k9+]|(BԜ,ʬPW-O[¦jpJGыo)^Lv0Ò!YxW&:L3`z\B=&lQTZDߕ(f) *Iй̰("~m7vkc9ԏ;)3uYVe-kYΰdljf]ۡK<[ţZ&YrJ)2=!G[;j 譛 R,,{?-'d-a 0`֠<&LNϏNpbbA}yJ ʭQJbO%MҒeʼnz]mҭŔCdHs4ͲEM.kY&ϠRiQJo 0$8m>890VEDy_}8]8y#Μo`YlUBV-%ԔYTт"e1-I pҪ!AW,{Νw'T(.m; vzR,kGQ-> {ָR) 6hWW)N_?װ&"G2qw0"K]|IiPA4%i*zUt5oJ3W8>;/Mמaj^0C^^:aa3qM_+{s1AhrZgj~rJF؟o_Ovc䰖ӟgП(r[dUs2F`e-kYZ `#]zx IDATN2ꚼҡzp}AWwIg8ɫsv}ᾜMz7<;) C"#r7b"l2ibC,ŪЄ*[%.R, &B_tL(6.A1 1X$(`mwT@bUBPfq,]û4- Viꊥ%oX(ww_^]D~ֱz;dҪ Ŕ+P ­̃Mx{ ZP1&^j詨 q]hj+ZIx!^*gBCmWM6ViISXY]:Ȗl{2|\G:A^g=xJM얯k-kYZֲt>k-(q=gN ]wz1uL.yj2~X:c W\ïE)vG vC|W:^Wui1! nE6%`%FU3,Yy<:s IOi7wiD2\zY`lQ*I+KId]iڄ0sN 6xDUN߼~z3HN)ŏ!rpSw~\Zֲe-w8f ]|AZwc|<->>p5{pO)O-h`qzR\kVHz@OuzJbii%hAb֠HT4HюQ%d@4s)ӝ~UR`q[ njr>,ͪA gHpCMJDԄyojA{jth?DFPBDNŘx](msb ?{o&qy7@a_@qEQ-$k=nmJ\wg؆k"bq\ޫמ{ z: }Q:xSm}>&T e MAVO^zщo#Zɺ772k]ڪygWǰhXֹJqQZ@eZ=Ocv56GѺh.ڬ ܋>9Ǘ+U`0J$Z ~Ee߳ e{Ƞ [V^z5lN;ߵOVVwsCYXv'«+8;x*¤}?\4dxos? Js>?A '6(LNIY]EZUH"+STN(X1bL,5#7֔yT1^/[ B?u6@Z602I|{$LMY3 @X~o{%Gإ` 6uKЕ8]<#og]:yNaZM`֔a-3z^+[s[ z,@pr8N@j9Z1xU DdJ0Ј|( RlP 5+ کXbj|bmd)&JmEKyc5URN=ڢ FjDMfW ;IeeO NQ9/e1035̤|M i?=P+'J7 1X_ƛw4IKEH]ἎM8t<2K^E qr8&L1MSV'>cj*7^SK(T/dMhE~|vVHߎ(ZNSpUL ZG_gΞS os/]ٯn]W;x'|5Vw%`F3 FXzի׊@ҽ')B jNZ˸|2[xr78LWbT,ؔ(ȊЫ(e9`NoP-*cLیfPt)mL)V=ŚXo- QpW`{-ڮq`eㄳIYf*[M@4jgaM0}N)l`0ћ?|.C+u8rhӏ/4a?0/8 |I~8ȏSֻ#p ar6H涃\6 Rfb.s; t5FEYwaR*VDkp+.M.#"5Gmo-RX:pyCb{W?\ 3'[5*4U{ >ȥmys^3+VdwYEXנw0 ͛@ܻ!#M no~4T>}|95*1i|MnX}殂; 7ow^|U=0kױ||)pvIU ~m_kYCwիW^6୲Ձxȭ+C%};{:VBa֋-)fYиl 2(MJO!SYVAI7 MAR,$R,A^Ѓ RڮjM4o\R{zVCnICjDQp0B ƫց='%*Bf8Џ_j":vdۓ,Z$vfP7FH` bP / )e`廭nW# ـOvHLrSB^kRpa8띭1DZ cC?l|?r{q}#zeaދb,V-Wi{ ]l̿{pXzի3 Ȱ64–ܟ;3'8.EBX ^ 53X5mWSS>xkSK2fb!WX;9Di f]QUeRk?;exCuȨq6pBZM}_gjX{{o!r7Q/}joW4Q"*DXzrE&RP:@z !lu*2_xGB5tu;Iv;TǴ|hpd,_Z_eSxXT5|hG=C[^/MVφ<zիW ǰ6uV0~Agmk5 T, AgsmD%L,l7!kRRYh]LʡQR,*:Ѐ3ڊ*aP@4ru) ՈPt7 Qk"(d$2Dd#+жݑz4Sؠ4W_$J#=c+[X()!̜Vh *JԝPbͺVj| &C vkCmTx-pzEJn:=D|7w^YsXp}GpǡYZ[ݦ'-;iA8NtիW^zm6#ؚjJO&⪵^M%4p8gq NeSP=i&PD~hpl֡~:+gY:7:qZS.Z 5hԚKag6!urRK.T 73S TDQ՚.ԚW |!Na)K.?؋*i|3͙$#k.f8{bF 9EU$97dfq_`P0^DŽ'v ƨ&brbtٛPNJD b/Yb+Wb i5/]YƥʓEm?g>< spښ% a;N^zQq ף56qozn\P;n@3W~F$>QDTAU+7|BP5jmKRLg;V][u.l(`|tsulc;ЪEZԭ$rE|c+.nY^o ~)7c˶I[QPYD.*%r-W}hȥuRz.ik~{b@#Fgi $3>fXčq2 AxxP#qpJQ>w?<ϯx*CAWy{֔F\)m6|1}}iƶqբ`UdRx^L C}5zիW>[X:;ۺ ߰" ^_ 3¯ 'ZDYZՒbGXWQ$yr&Ì 7(R,jX&p/£,0A="Fj *}/j/ȴ;ˣN/|PZ3H.OG \yApAB?~D:=;w<2-T]{PѾs)%",+Ҡ4â2ʰ-o>e!Sl>+ -nn8WOJ+`Zdrf5W S gN$O>=}1Jo[X+Kpwm`իWMCCugX[ t5^Zi;: D~ "@.*_tn@:gOu)bͶ`aM9HV$Tj{f0 (I".CX6]R"\Ȟ|52nJuÂ^4nn^w!7038<̍ кOqdI\aRܣB[ KEȗY(y7u$-%m}o+j(ɠ+74W\τ^Ɍc/o-OP޼'<>DPtXWygMpo d+JXzիWgX[Fq]o(L"`v)X2X^lU{28ޠKh3J"&aj'7(rcg^Lp6xL1+IG@cz(1w5͜dyeyQ~h5@)Mo0; zc´[41J%'EɽBI-t&ϲx__=w`T㙭Ѝ*'K,8`Aʳ[ʙח=G_Q+m?}^}2dyǴ:[֠nK db5բ]`իW:jyͧ`,D i&b " )Vȇjj!ļKVIdyޭARTIfy?6 lIwb;*A ={2xNC\9|9>旾Y,z#ۏO",&el޶~qDҚٟZ)VȴlaЂz "GdMyҠۅӐ e 5*; bf}%x*b0"Zb̓-UW nvUT='>-xȳ漁J/Z?M p2WR`/2m'D/^za)|Qn'j{9z -yʟ٥XꡨR* KPX1k/$ԥX[ILd9*Jk_2ݚ 4U8bfυ%E/{~'06hHŨcԌD42*t)VOŒxVZ%B~.4\5(s ;q5@؄ C/3TXy]k([ f#p/SyZ}ᙅ/3)6EX_>é! S19.]#dVJSbBVZ\~5l^Q6}_E,H򥰋 [Qc2-d}_X^ Ͽބvf^G>vzbA: L:G҉ +H# ZH=Uж^-b5x, ^ziHd dޙj[XzMJ42jӟ}lf̂ykkJ@hjT=KT[m +AL6(<,d*:¥,x5Iv$-y&m:>`` 4eP% hEtڕ|_9ʰ̎];`4&U]0WHE9+KJ',S`T]ps|-?T>Dk KB2b5V ̍i=7mJ܎8LW;HFW`WAm߻`q[S7FV6;uիW^6 wI6.a]g)z95(,^VB+@U3ᄠk%/ne)V c1kB1e2Y0.Ao@ULd,[Ҥ)KymBR^WS\}g1r29rnkH^E$Z'"CG_mYwtdO%lJp8LV{z#剜kgJ#Kﳌx6GMN2.2Jݪ[Z|ShRZ7y𻯜~O kg^w臿'9ƻ9$z>sUN,.knǩ;J/yAf4;ɪ0VC*":իW^u5ؤ]8 +mPhFrRSlUd)ݠQbQbE8AKAԠf1=i5FA-aΦirAe؋f;pb *V8Xg 4OJMܙ?w U?c;۰vX[|N9=6(ʗ 9|'NJaLw6ɺX%.A%\i`5HY**n7iG1Ok_3jG_ma`&j>mh slioeb,N-U+,?1[Yw;իW^[y?NU]ݻMl2?UVV 0#5xb&Xbu) 7(4N7)~hAa)aR0i} |.9*\:&g*u`Efaj*_N~P\d# z7hUXϟ}yBR Ws誊~ Jhj3,("31=26C؆ x(ʙ htZE]̃֠+R+j{Z:Kk߅)Oh>H ybM8H8Ț)%ʦЫoժF4p65ⅣU~tW^zˣ]fXɳ=> ܣ0$X wzh0 @%А.Ţ.ŪRᛃfѰO',Y\ nwEs"3>40E.V'cMVds6>캀Mi -&_~Kȅa=ǒ.( ",$,R7RaX#a>|k2#b+jhH⪇`xXηJlaVUԾD)zT|fWI~5Ҹ:x]lp cyD< ٦B̰qmٓ8kHZ0ﲭ - zիoWc2[ϖS ]83AWӡR+jP < kXPiK6 -)V 5*[J2EPUAAD5C$jL+艟*)RG[)ccPgȚ^8=\EX۷џ|a[CUTQANAeQi4cK*QߣU`XRA`X$uHqêĢ*4*J*$Ǵ|RW*ʏ^r{B38F9Idv1ALԢNg !sr +ݑocˆFH?XІ>W^zg k­%T0|VowpQ<.fJYt)u)i\T] bEKHEc)TZ _e2jV BlOԀGvcUWf7dT`Vȴ*7<../.L֗u 8%^yU*=m1qaPaer(MEj%=`ʤwdCb_ƚuK}FxLKۧҫ̺|e񇯟 H0~9Dh,pQqc$͍A6-W5ե 7ͭdg?>#իW-E3:ٌgqݸ۽7G^:}mW2 h}+\P0A.={DkfgyN{92~vxqmXdkA ,kgv<ь+QuxRqu:Zs&d0\z\{َzGC9\l-cD0uSo\E0Cۣ;ΙCqqib"'.kwk \ WCP̽x54b9y&n#㦹ΓJGCVo.~W3OoNGa ^`Վ=< J3*Pēk5J}p涎lns߮iQ;[}ATߢZjzիzR1V]LIwR+]+vBC<3Tj.8L bPIPi'*׊T4y?' ;f\d1PcA/և!(N|L+`^ŋ@ht`H{dйYkASD_?GL4􋣅P(_ h$hf)J1v$ޅ1вWV/l芙hl1VXX=GǕXh5F/Bcyl+gff^]v뭷콯}/:#FZ#h_l@:VRC,>34H(; n%bJY&#J7"oe#!,'4İeX4*RQLֲ JUdcɪeY $+#mފtTօͺlTA%IPEn\pv^m߹>j*3gSŖD9 A։Բqj|䫄e`իW˺kql °ӌG g'A%ʹXp%R,R,imhPj,P K)(t3nnva?`LoA{s7#Λ?R2ڶh-uRJ[؊4ʊn2)oyXz"XCEV"ˤ( P>tZEv4\oY7}C_"Z^@#;D|:ԑG?8nB'*QV }}SȺRךS0f nX6 =@