lbreakout2-2.6.5/0000777000175000017500000000000012610471366010611 500000000000000lbreakout2-2.6.5/client/0000777000175000017500000000000012610471366012067 500000000000000lbreakout2-2.6.5/client/display.h0000664000175000017500000000546712140767214013635 00000000000000/*************************************************************************** display.h - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __DISPLAY_H #define __DISPLAY_H typedef struct { SDL_Surface *surf; int x, y, w, h; char text[32]; int digits; int value; float cur_value; /* smoothly approximates destination 'value' */ int use_alpha; /* if true we darken the background a bit. this is true by default */ int is_highlighted; /* use highlight font */ } Display; /* ==================================================================== Add a display. The display is cleared by displays_clear() so the returned display is just a pointer. The contents of the display is 'text'+'value'. Both may be changed with the display_set_text/value() functions. 'digits' is the maxium size of 'value' ==================================================================== */ Display* displays_add( int x, int y, int w, int h, char *text, int value, int digits ); /* ==================================================================== Remove all displays ==================================================================== */ void displays_clear(); /* ==================================================================== Draw displays ==================================================================== */ void displays_hide(); void displays_show(); /* ==================================================================== Update displays ==================================================================== */ void displays_update( int ms ); /* ==================================================================== Modify display ==================================================================== */ void display_set_text( Display *display, char *text ); void display_set_value( Display *display, int value ); void display_set_value_directly( Display *display, int value ); void display_set_highlight( Display *display, int on ); #endif lbreakout2-2.6.5/client/client.c0000664000175000017500000004327012140767214013433 00000000000000/*************************************************************************** client.c - description ------------------- begin : Sun Oct 20 12:02:57 CEST 2002 copyright : (C) 2002 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "config.h" #include "event.h" #include "../gui/gui.h" #include "client_data.h" #include "client_handlers.h" #include "client.h" /* ==================================================================== Externals ==================================================================== */ extern SDL_Surface *cr_wallpaper; extern Config config; extern SDL_Surface **bkgnds; extern StkFont *chat_font_error; extern StkFont *chat_font_name; extern StkFont *chat_font_normal; extern char chatter[CHAT_LINE_COUNT][CHAT_LINE_WIDTH]; extern char pause_chatter[CHAT_LINE_COUNT][CHAT_LINE_WIDTH]; extern List *client_levelsets; extern List *client_users; extern List *client_games; extern List *client_channels; extern void client_recv_packet( GuiWidget *widget, GuiEvent *event ); extern int client_id; extern int client_topic_count; extern char *client_topics[]; extern Text *client_help_text; extern NetSocket client; extern int client_is_connected; extern int client_state; extern int client_recv_limit; extern int (*sys_printf)(const char *format, ...); /* ==================================================================== Client GUI ==================================================================== */ GuiWidget *dlg_connect = 0; GuiWidget *dlg_info = 0; GuiWidget *dlg_confirm = 0; GuiWidget *dlg_chatroom = 0; GuiWidget *dlg_channels = 0; GuiWidget *dlg_stats = 0; GuiWidget *dlg_pauseroom = 0; GuiWidget *dlg_help = 0; /* important children */ GuiWidget *label_channel; GuiWidget *label_info; GuiWidget *label_confirm; GuiWidget *label_winner; GuiWidget *label_stats; GuiWidget *edit_server; GuiWidget *edit_username; GuiWidget *list_chatter; GuiWidget *edit_chatter; GuiWidget *list_levels; GuiWidget *list_users; GuiWidget *list_channels; GuiWidget *edit_channel; GuiWidget *list_pausechatter; GuiWidget *edit_pausechatter; GuiWidget *list_topic; GuiWidget *list_help; #define HINT_CONNECT _("Specify the game server as address:port where "\ "the address can be a name or a dotted IP.#If the connection fails have a look "\ "at the messages in the chat window to see the reason.") /* ==================================================================== LOCALS ==================================================================== */ #ifdef NETWORK_ENABLED /* ==================================================================== Render help topic. ==================================================================== */ static int client_render_help( int x, int y, SDL_Surface *buffer ) { if ( !client_help_text ) return 0; if ( y >= client_help_text->count ) return 0; chat_font_normal->align = STK_FONT_ALIGN_LEFT; stk_font_write( chat_font_normal, buffer, 2,0, STK_OPAQUE, client_help_text->lines[y] ); return 1; } /* ==================================================================== Render help topic. ==================================================================== */ static int client_render_topic( int x, int y, SDL_Surface *buffer ) { if ( y >= client_topic_count ) return 0; chat_font_normal->align = STK_FONT_ALIGN_LEFT; stk_font_write( chat_font_normal, buffer, 2,0, STK_OPAQUE, client_topics[y] ); return 1; } /* ==================================================================== Render chat line. ==================================================================== */ static int client_render_chatter( int x, int y, SDL_Surface *buffer ) { char *ptr = 0, *name_end = 0; StkFont *font = 0; if ( y < 0 || y >= CHAT_LINE_COUNT ) return 0; if ( chatter[y][0] == '!' ) { font = chat_font_error; ptr = chatter[y] + 1; } else { ptr = chatter[y]; font = chat_font_normal; } font->align = STK_FONT_ALIGN_LEFT; stk_font_write( font, buffer, 2,0, STK_OPAQUE, ptr ); if ( chatter[y][0] == '<' ) if ( ( name_end = strchr( chatter[y], '>' ) ) ) { name_end[1] = 0; stk_font_write( chat_font_name, buffer, 2,0, STK_OPAQUE, chatter[y] ); name_end[1] = ' '; } return 1; } static int client_render_pause_chatter( int x, int y, SDL_Surface *buffer ) { char *ptr = 0, *name_end = 0; StkFont *font = 0; if ( y < 0 || y >= CHAT_LINE_COUNT ) return 0; if ( pause_chatter[y][0] == '!' ) { font = chat_font_error; ptr = pause_chatter[y] + 1; } else { ptr = pause_chatter[y]; font = chat_font_normal; } font->align = STK_FONT_ALIGN_LEFT; stk_font_write( font, buffer, 2,0, STK_OPAQUE, ptr ); if ( pause_chatter[y][0] == '<' ) if ( ( name_end = strchr( pause_chatter[y], '>' ) ) ) { name_end[1] = 0; stk_font_write( chat_font_name, buffer, 2,0, STK_OPAQUE, pause_chatter[y] ); name_end[1] = ' '; } return 1; } /* ==================================================================== Render levelsets. ==================================================================== */ static int client_render_levelset( int x, int y, SDL_Surface *buffer ) { if ( y >= client_levelsets->count ) return 0; chat_font_normal->align = STK_FONT_ALIGN_LEFT; stk_font_write( chat_font_normal, buffer, 2,0, STK_OPAQUE, list_get( client_levelsets, y ) ); return 1; } /* ==================================================================== Render user ==================================================================== */ static int client_render_user( int x, int y, SDL_Surface *buffer ) { ClientUser *user; StkFont *font; if ( y >= client_users->count ) return 0; if ( ( user = list_get( client_users, y ) ) == 0 ) return 0; if ( user->id == client_id ) font = chat_font_name; else font = chat_font_normal; font->align = STK_FONT_ALIGN_LEFT; stk_font_write( font, buffer, 2,0, STK_OPAQUE, user->name ); return 1; } /* ==================================================================== Render channel. ==================================================================== */ static int client_render_channel( int x, int y, SDL_Surface *buffer ) { if ( y >= client_channels->count ) return 0; chat_font_normal->align = STK_FONT_ALIGN_LEFT; stk_font_write( chat_font_normal, buffer, 2,0, STK_OPAQUE, (char*)list_get( client_channels, y ) ); return 1; } #endif /* ==================================================================== PUBLICS ==================================================================== */ /* ==================================================================== Build the GUI and everything nescessary for the client chatroom. client_create() installs client_delete() as exit function. ==================================================================== */ void client_create( void ) { #ifdef NETWORK_ENABLED GuiWidget *parent; SDL_Surface *surface; /* users, channels, games */ client_data_create(); /* CONNECT WINDOW */ dlg_connect = gui_box_create( 0, -1,-1, 400, 224, 0, 0 ); parent = dlg_connect; /* hint label */ gui_label_create( parent, 10, 10, parent->width - 20, 100, 1, 0, 4, 0, STK_FONT_ALIGN_LEFT, HINT_CONNECT ); /* server edit */ gui_label_create( parent, 10, 120, 180, 20, 0, 0, 2, 0, STK_FONT_ALIGN_RIGHT, _("Server:") ); edit_server = gui_edit_create( parent, parent->width - 190, 120, 180, 20, 0, 2, 0, 22, config.server ); /* user name */ gui_label_create( parent, 10, 150, 180, 20, 0, 0, 2, 0, STK_FONT_ALIGN_RIGHT, _("Username:") ); edit_username = gui_edit_create( parent, parent->width - 190, 150, 180, 20, 0, 2, 0, 13, config.username ); /* cancel, connect buttons */ gui_button_create( parent, parent->width/2 -160, 180, 140, 24, client_connect, 0,0,0,0,0, _("Connect") ); gui_button_create( parent, parent->width/2 +20, 180, 140, 24, client_close_connect_window, 0,0,0,0,0, _("Cancel") ); /* INFO */ dlg_info = gui_box_create( 0, -1,-1, 300, 114, 0, 1 ); label_info = gui_label_create( dlg_info, -1,10,276,60,0, 0, 2, 0, STK_FONT_ALIGN_LEFT, _("no info") ); gui_button_create( dlg_info, -1, dlg_info->height - 34, 100, 24, client_close_info, 0,0,0,0,0, _("Close") ); /* CONFIRM */ dlg_confirm = gui_box_create( 0, -1,-1, 300, 160, 0, 1 ); label_confirm = gui_label_create( dlg_confirm, -1,10,276,110,0, 0, 2, 0, STK_FONT_ALIGN_LEFT, _("no info") ); gui_button_create( dlg_confirm, dlg_confirm->width/2-110, dlg_confirm->height - 30, 100, 20, client_confirm, 0,0,0,0,0, _("OK") ); gui_button_create( dlg_confirm, dlg_confirm->width/2+10, dlg_confirm->height - 30, 100, 20, client_cancel, 0,0,0,0,0, _("Cancel") ); /* CHATROOM */ dlg_chatroom = gui_box_create( 0, 0,0,640,480, client_recv_packet, 1 ); gui_widget_enable_event( dlg_chatroom, GUI_TIME_PASSED ); surface = gui_widget_get_surface( dlg_chatroom ); stk_surface_apply_wallpaper( surface, 0,0,-1,-1, cr_wallpaper, STK_OPAQUE ); /* chat window */ list_chatter = gui_list_create( dlg_chatroom, 0,0,470,444, NULL, 0, 1, 14, 20, client_render_chatter, GUI_LIST_NO_SELECT ); /* edit + send/whisper buttons */ gui_button_create( dlg_chatroom, 330,448,60,24, client_send_chatter, 0,0,0,0,0, _("Send") ); gui_button_create( dlg_chatroom, 390,448,80,24, client_whisper_chatter, 0,0,0,0,0, _("Whisper") ); edit_chatter = gui_edit_create( dlg_chatroom, 0,448,327,24, client_send_chatter, 2, 0, MAX_CHATTER_SIZE, "" ); gui_widget_enable_event( edit_chatter, GUI_KEY_RELEASED ); gui_widget_set_default_key_widget( dlg_chatroom, edit_chatter ); /* channel button + users in channel */ label_channel = gui_label_create( dlg_chatroom, 474,0,142,18,1, NULL, 2, 0, STK_FONT_ALIGN_CENTER_X, _("MAIN") ); gui_button_create( dlg_chatroom, 616,0,18,18, client_select_channel, 0,0,0,0,0, _("C") ); list_users = gui_list_create( dlg_chatroom, 474,20,160,142, client_handle_user_list, 1, 1, 14, 20, client_render_user, GUI_LIST_SINGLE_SELECT ); /* levels label, levels, transfer button */ gui_label_create( dlg_chatroom, 474,164,160,18,1, NULL, 2, 0, STK_FONT_ALIGN_CENTER_X, _("Levelsets") ); list_levels = gui_list_create( dlg_chatroom, 474,184,160,120, client_handle_levelset_list, 1, 1, 14, 20, client_render_levelset, GUI_LIST_SINGLE_SELECT ); /* box with level settings */ parent = gui_box_create( dlg_chatroom, 474,306,160,94, NULL, 0 ); gui_label_create( parent, 2,2,102,20,0, NULL, 2, NULL, STK_FONT_ALIGN_LEFT, _("Difficulty:") ); gui_spinbutton_create( parent, 102,2,50,20, client_update_difficulty, 1, 3, 1, config.mp_diff+1 ); gui_label_create( parent, 2,2+22,102,20,0, NULL, 2, NULL, STK_FONT_ALIGN_LEFT, _("Rounds:") ); gui_spinbutton_create( parent, 102,2+22,50,20, client_update_rounds, 1, 3, 1, config.mp_rounds ); gui_label_create( parent, 2,2+44,102,20,0, NULL, 2, NULL, STK_FONT_ALIGN_LEFT, _("Frags:") ); gui_spinbutton_create( parent, 102,2+44,50,20, client_update_frags, 5, 30, 5, config.mp_frags ); gui_label_create( parent, 2,2+66,102,20,0, NULL, 2, NULL, STK_FONT_ALIGN_LEFT, _("Balls:") ); gui_spinbutton_create( parent, 102,2+66,50,20, client_update_balls, 1, 6, 1, config.mp_balls ); /* challenge & disconnect */ gui_button_create( dlg_chatroom, 474,402,160,20, client_challenge, 0,0,0,0,0, _("Challenge") ); gui_button_create( dlg_chatroom, 474,dlg_chatroom->height-44,160,20, client_open_connect_window, 0,0,0,0,0, _("Connect") ); gui_button_create( dlg_chatroom, 534,dlg_chatroom->height-20,100,20, client_quit, 0,0,0,0,0, _("Quit") ); gui_button_create( dlg_chatroom, 474,dlg_chatroom->height-20,50,20, client_popup_help, 0,0,0,0,0, _("Help") ); /* CHANNELS selector */ dlg_channels = gui_box_create( 0, -1,-1, 200, 244, NULL, 1 ); list_channels = gui_list_create( dlg_channels, -1,10, 176,150, client_handle_channel_list, 0, 1, 14, 20, client_render_channel, GUI_LIST_SINGLE_SELECT ); gui_label_create( dlg_channels, -1,160, 176,20,0, NULL, 2, 0, STK_FONT_ALIGN_LEFT, _("Channel:") ); edit_channel = gui_edit_create( dlg_channels, -1,180, 176,20, NULL, 2, 0, 12, "" ); gui_widget_set_default_key_widget( dlg_channels, edit_channel ); gui_edit_set_filter( edit_channel, GUI_EDIT_ALPHANUMERICAL2 ); gui_button_create( dlg_channels, dlg_channels->width/2-90,210,80,20, client_enter_channel, 0,0,0,0,0, _("Enter") ); gui_button_create( dlg_channels, dlg_channels->width/2+10,210,80,20, client_cancel_channel, 0,0,0,0,0, _("Cancel") ); /* STATISTICS */ dlg_stats = gui_box_create( 0, -1,-1,386,260, NULL, 1 ); gui_label_create( dlg_stats, -1,10,360,20,1, NULL, 0, 0, STK_FONT_ALIGN_CENTER_X, _("Statistics") ); label_winner = gui_label_create( dlg_stats, -1,40,360,16,0, NULL, 0, 0, STK_FONT_ALIGN_CENTER_X, "..." ); label_stats = gui_label_create( dlg_stats, -1,62,360,150,0, NULL, 0, 0, STK_FONT_ALIGN_LEFT, _("Awaiting stats...") ); gui_button_create( dlg_stats, -1,220,160,20, client_close_stats, 0,0,0,0,0, _("Close") ); /* PAUSEROOM */ dlg_pauseroom = gui_box_create( 0, -1,-1,480,366, NULL, 1 ); list_pausechatter = gui_list_create( dlg_pauseroom, 0,0,470,300, NULL, 0, 1, 14, 20, client_render_pause_chatter, GUI_LIST_NO_SELECT ); edit_pausechatter = gui_edit_create( dlg_pauseroom, 0,303,470,24, client_send_pausechatter, 2, 0, MAX_CHATTER_SIZE, "" ); gui_widget_enable_event( edit_pausechatter, GUI_KEY_RELEASED ); gui_widget_set_default_key_widget( dlg_pauseroom, edit_pausechatter ); gui_button_create( dlg_pauseroom, -1,334,100,20, client_close_pauseroom, 0,0,0,0,0, _("Close") ); /* HELP */ dlg_help = gui_box_create( 0, -1,-1,548,358, NULL, 1 ); gui_label_create( dlg_help, -1,10,470,20,1, NULL, 0, 0, STK_FONT_ALIGN_CENTER_X, _("Network Quick Help") ); list_topic = gui_list_create( dlg_help, 10,40,160,270, client_handle_topic_list, 0, 1, 14, 20, client_render_topic, GUI_LIST_SINGLE_SELECT ); list_help = gui_list_create( dlg_help, 180,40,350,300, NULL, 0, 1, 14, 20, client_render_help, GUI_LIST_NO_SELECT ); gui_button_create( dlg_help, 10,320,160,20, client_close_help, 0,0,0,0,0, _("Close") ); /* INITS */ /* empty chatter */ memset( chatter, 0, sizeof( chatter ) ); /* update chatboxes */ gui_list_update( list_chatter, CHAT_LINE_COUNT ); gui_list_update( list_pausechatter, CHAT_LINE_COUNT ); gui_list_goto( list_chatter, -1 ); gui_list_goto( list_pausechatter, -1 ); /* set help topics */ gui_list_update( list_topic, client_topic_count ); /* call client_delete at exit */ atexit( client_delete ); #endif } /* ==================================================================== Free memory allocated by client_create( void ) ==================================================================== */ void client_delete( void ) { #ifdef NETWORK_ENABLED client_data_delete(); printf( _("Client finalized\n") ); #endif } /* ==================================================================== Run the connect dialogue & chatroom until user closes the connect dialogue. ==================================================================== */ #ifdef NETWORK_ENABLED static int client_printf_info( const char *format, ... ) { va_list args; char string[MAX_CHATTER_SIZE]; va_start( args, format ); vsnprintf( string, MAX_CHATTER_SIZE, format, args ); va_end( args ); client_add_chatter( string, 1 ); return strlen(string); } #endif void client_run( void ) { #ifdef NETWORK_ENABLED /* init UDP socket */ sys_printf = client_printf_info; net_init( atoi(config.local_port) ); sys_printf = printf; client_add_chatter( _("Press 'Connect' to connect to a game server."), 1 ); client_state = CLIENT_NONE; client_recv_limit = config.recv_limit; gui_enable_event_filter(); gui_widget_show( dlg_chatroom ); stk_display_fade( STK_FADE_IN, STK_FADE_DEFAULT_TIME ); gui_run( dlg_chatroom ); stk_display_fade( STK_FADE_OUT, STK_FADE_DEFAULT_TIME ); gui_disable_event_filter(); if ( client_is_connected ) { /* tell server we are off */ client_disconnect(); /* finalize UDP socket */ socket_print_stats( &client ); } net_shutdown(); #endif } lbreakout2-2.6.5/client/frame.h0000664000175000017500000000645712140767214013262 00000000000000/*************************************************************************** frame.h - description ------------------- begin : Fri Sep 7 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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 file handles all the graphical stuff concering the frame including drawing of score, lifes and bonus info. ==================================================================== */ /* ==================================================================== Create frame by loading and assembling all graphics and loading additional graphics. ==================================================================== */ void frame_create(); /* ==================================================================== Inititate the frame to the according game type. Set the position of the extras displayed, enable life lamps etc. ==================================================================== */ void frame_init(); /* ==================================================================== Free all resources created by frame_create() ==================================================================== */ void frame_delete(); /* ==================================================================== Draw frame to offscreen. ==================================================================== */ void frame_draw(); /* ==================================================================== Add life lamps at left side of frame in offscreen ==================================================================== */ void frame_draw_lives( int lives, int max_lives ); /* ==================================================================== Add one new life at offscreen and screen (as this will happen in game ) ==================================================================== */ void frame_add_life(); /* ==================================================================== Switch of a life lamp ==================================================================== */ void frame_remove_life(); /* ==================================================================== Display extra information on right side of screen. ==================================================================== */ void frame_info_hide(); void frame_info_show(); /* ==================================================================== Blink the warp icon. ==================================================================== */ void frame_warp_icon_hide(); void frame_warp_icon_show(); void frame_warp_icon_update( int ms ); lbreakout2-2.6.5/client/sounds/0000777000175000017500000000000012610471365013401 500000000000000lbreakout2-2.6.5/client/sounds/chaos.wav0000664000175000017500000001232412140767214015134 00000000000000RIFFWAVEfmt "VDdata$<N EF `5$LZ mb (d ]y$ *zynF _8\$ q   $ C#.^ f1Q  )Q*)'   5- * ! %   $ 7B$G L  Y$U r Qj~Koc 0+ [^"#yqYi;"K$!߽qg|Ru!3 <®Nlv)/)9Uc^SG?7"/ I] 5sլ~$i֡я͸ B#'+PH N3<(DHzMw#F\3;  q ;E ?Jnhv| N Y%:4dmmjT{ l 3 A L$H M,p%lSh09  % C 67k iw&SW $HT ~*zNKEsVZ?^hD%7 *uE iUvCsJ>'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/damn.wav0000664000175000017500000004112612140767214014760 00000000000000RIFFNBWAVEfmt "VDdata*B((P(((((P((((P((((((((P(((((((P((((P((((P((((PP(PP(((xP((((((((((P((((xP((PP((PPP(PxP(xxP((PPxx(` 8(xxP` ` ` 8` PP(` ` PxP(PPxP((P(` 8(((PxxP(((PxP(PxxxPPP((P(((PxP` P(` 8xP(xx(` ` ` 88` PxxP((PxxxPPPx((P(` 88` ` ` 888` (xxxPPxxP((Px((` ` ` ` ` ` 88` (PP((xPPPPxxPP(P(((P((PPP88(P(((PP(((PxxxPxPP!"*'I` ` ` ` ` ` 8Pg` 8(` 8(PPPPP((((PxxPPP(` 888` 8` PxP((PxxPPxxxP(` ` 8` ` ` ` ` (PP` (PP((xxPPPPxxPPP((((((P((888?P(P?xPxxxPP(` 8PPPPg8$-I?g($-$` ` 88II8x(?Vg(P??P` ` xxP` 8` xxxx((PPPxP(x(?g??(` I'$?` ' 623$` (P` ` (xx(PgxPIqxP(xxPP(((((PP(PP(x?xx(` ` ` 8IIq(((((PxxPP(PxP(PxP(Pxx(888Pg?P(xgݏ?(88` I''I8(((((Px((PPxxP` ` (((Pxxx((((((` ` ` (xxxPP((?g?!"--Iq23>> 6$PP` P(x((Pxx8xx(PxPP((xx(` 88(PxPxP8gP8I!"P(` 8` (xx` qPg(8gP(xx(8` ((((xxP((xg?P-; 6Vզ>TULZ0` ?gx8Pgݷ?88(` q'-$(g(ۏx(Pxg!">GZ0.ئgG],X;x?gx!"!"8~~ۏx8gg!"23>>*xgx$*Ig~ҦV?x(P??P(PxP(` 888(P(` ?g8` Pg8((` ` PP(8` (P` 8(P((PxPP((x((P(~.P!"G[>ԧPCDtvwOgVշx` 8!"I8x~V?P` ` Pgݷ$'$q('23-((?ݏ???P8PI;LCD$(~g` *8-.طPxPPPP8` ((88((PxxP((Pxx(PxxP(xP((Pq**qgx'-!"` ??8xxPP?(` ?P` ` 888` (xxPPx(((P?g.V.(*Oc;mVI`NzefZ0xqݏ(.؏PI$I` PxI**I8(xP` 88xPxgV~.ط(` 8P(!"-23-?(g.؏xP??` ` ` ` ((` xP88` ` 8` (((Pxxxxx??gݷ'|Rc>EĄ[t23EĕqIxg.~?x88` Pg'*!"8(PI--I.g` gۏPx?P(x(88Px(8q?gP` 8P?x8P(` ((((((PxxxPPPPxxxxPxPxxP$ITU23PE4OvwnZ0E-*(?g(` P?g$*!"` 8qq8(gg?P((x??P(x?g?x888` ` 8x?P8.VՏ(''(g!"!"Px(` ` Px(x` 88` 88(xx(P??P(xP(PxxP(P($'PgP 6kA8I?xI(P((` 8PP((PPPPxx(PxxPPxxP` ((xP88PPP888` ` ` ` (PxxxP(PxxPxxPP((P(PP(((PPPP(PP(((P(PP((PPP((PP((Pxg'>8qǏkATUCD~.ؠ!"!"(xxxx8` (` Igx` gP(x((Px(((PxxP(((P(('-!"g(-Z0I?x8(xP(8PxP88?8xxPxxPP((((PPxPPPxxPPxP(($*q` x$$xxxxP88(xxPxP(((((((((((((xP(((PPPP(P(((((((((Pxggq'$` *8Z08!"'q(xx(((` ` ` ` ` ` (((PxxxxxPPPPP(` 88` PxPP((xxxxxP(` PPPx?(` 8(?'$8q(PP(P((x(` Pxx(xxxx(PPPP((((P((((PxxxPPPPPx?` !"Z0*(I8>*` ?88` (??x(Px!"$qP(` Ig` 8xgPxP(PxxxP((((xP` 8((` PP(` ((((((((((((` 8` (` (xxP((xxP(PxxP((PxPPxP((((((((((((((PP((((PPxxxg?8'23-VV8CDZ0~x!"I8(P(PP(((((88` ` (xP(PxP(((((((PP(P(PPPPPPxxxxxxx!"'P$*'P(8` P(((((((((` 88` xP((xxP(((PxxxxxxxP(Px((8` 8(((((((((PP` (xxP` 8` PP((((((((((((((((PxxxP((PP((((P((PPP((PP(` ` (PP(xx(PxxP((PPxPPxx(` PPqqPx(88` (xx(PP(` ` ` ` ` (P((PxxxPP(((((((((((PPxxP((((P((((((((((((P((((((((((((((((PPP((PPPP((((PP((PPP(((((PP((((((` ` (` (PPP((xxxP((P(((((PP((PPP((((((((PP(((Px` qI!"!"(` ` xP(((` ` (PP((((PPxxxPP(((((((((PPxPP((PPPP((((((((PP((((PP(((((((((((((((((PPxP((((((((((((((((((PPP((((((((((((((((((PP((((PPP(P((((Pxx` q` P(8q!"x` (xxP((P((PxxP(((PPP(((((((PPPPPPxxPP((((((((((((((((((((((((((((((((((((((((PP(((((((((((((((((((P(((((((((((((((((PPPPPPPxxxxP` ` Px(8` x((xxxxP(PP(PPP((PPP(((((((((((((((((PPPPP((((((((((((((((((PPPP(((((((((((((((((((PPP((((((PPPP(((((PP((((((P(((((((PPPPxx!"!"g?x` qPxP((xxxP((((PxxPP((((((((((PP((((PPxxxP(((((((((((((PPx` (P` 88Pxx((((((P((((PPPP(((((((((PPP(((((((((((((((PxP$$g?8(PPx88` 8` (xxP((((((((((((((((((((((((((((((((((((((((((((Px8Iq8PP(` ` ` (((((PPPPxxP(((((P(((((((((((((((((((PPP(((((((((((((PxxP` 8PPP(((((PxxP(((((PP((((((((((((((((PPxxxxP((PPxxPP((((((((((((((PPxxPP` 8` PPxxPP(((PP((((PPP((((((((((((((PxxxxPP(((((((((((((((((((((PPxxPP` ` (PPxxxxP((((((PPPP(((((((((((P((((((((((((((PPPPP(` 8` (PPPxxPP((((PPP(((((((((((((((((((((((((((((((((((((((PPPP(((((((((((((((((((((((((((((((((((((((((((((((((((((PPP((((((((((((((((((((((((((((((lbreakout2-2.6.5/client/sounds/dammit.wav0000664000175000017500000004125012140767214015312 00000000000000RIFFBWAVEfmt "VDdata|Bdddddddddddd,8d,dddddd8dp8d8888888dd8d,d8dd,dddd,,ddd,ddddd88dd88888ddd88ddddddddddddd88ddddddd888888 pp8Cp {CC{C{O{ 8 {Cp8,,ddd,,X! d! X,d,,dd8p pd,dd,XXXXXX XXXX,88d8 p { OOOO""CC"{ ! X, ! X z! p8, Cp ppppCC ! X, MB ! X,,dC 8p{{CO, O c!c!7BM! zBzMzzMpX,pOe pO d zz ! ! Mc!%+$7 ! ! dC{O{{O"ZZ{"On00z9.%6=?2  nz! X CeD֝,! ,C D{d{pX X B7c!c!z ! n%)+$B {p"OOOC{O88OOOc!42ZODp%+DI7n{ , zXd88pOe.  .qچ  { d! zBnMX7+$"B{ZdC.e"CCCCCC{OOCd8d8.BEX(K,dAV&{Ԩ&+${{,p" e,M{D־+$7 8{{!  Bzzz d! zB,, X{"pdCpp 8 OOqOq8y3[T" 9 +lcac!") ddpOeD, ̞#ˆ)-c! { B7 ! dn! . M peZ{XpCC8 {"p, Z9.z 9I?7ƒ KcaLO+$Zn7"Zp "qX9e{ +$0,n,{OCMBBXp XXX,C8 !  {pd{OC {{pd L^Mne%_MoTnf.e,! O8e ۆ+$"89.pM/7-B8"O8 MM ,C8 M ,C! BM"Z8,,O{pCCC pp8dXX8{Zpz4E;ƞD6=WLOX([D{ BX C8pZZd"% "9ݝ޳! +$0 +Bp.{,MzMpO8,X! M pM dC"ZZpdd {8 p8,,888p.Cz0>0! e.Ē.BbAxSE7|͝ 7n {{p,MBB Z 7%c!8"C, M  8d,!  { d ! dCZpd, CCC pdd8p "Z"p A6BA6MeŒnEAVBB[ȝz7XpCppC{z7zdO. ")c! {e! d,,! B d 8Z.Z {8 ,XCp 9ݝ"%n: 9p#9ݐy3PRy3X ٳ nM CZ{X(X(Z{   C8MBp MXOZ{ppC{Cp,d C,d CZ. ,> 9 [eBWH_P+$Ϳednc!d{ Oz78.Zp+$ +" ZO! X p,d, zMp{p,! 8Z"pppp,d8C  ! 8{{8.. 2M/n8D֒ +BB, Zqڝ޳BM{{C{C zM,OOBz,CX ! dddd X{ XO{ 8 C pp 8d C{C ,d OZ! +$A6y3n Ғ! y3WHbA"p9e MnBX  8 {{X7&c! Z."pMMX{C ! ! M pdX 8{"d8CO{p8d88p 8888888p !  +X(Ze""A67% O.{ M! dp{CXzMpz77z,CCX! C{{p ! X8C p88pp p8pp 8 Z" X( +7A6 9X( {Z, pp88pOXBX{M nX{8pC! MM ! XX ! ! dpC{ pp C{{ ppp p p pp88888 C n + +  ْd+$;6=X(! ezM,p p O{8XBp"c! XC8X ! 8{8! z Xdd z CdpO 8ddp p88pC{ p8pCO""dX(y3 +ިn7By3CO 8p8p",MMCO8 nc!7M dX, {{Cp  ! z ,{8pOC p88p C 88p8 {{dz"&7 p-A6 +z Z.!  8 C{{  {CdM nzO! XC{{Cp X,X MM dppC{p8dd8 pd CC CC+$248.qچ M/B6=+$,OZO! d88ZpXz pO,c!X{{C8pC{{ z! d!  BM8C8p{p C,d8pppd,88p88 O,7Cz"X(c!Xd888 OOCX M ,p{  zM8C 8dd8p pd ! X, MM Cp88p{{{C 8ddd, {{{{"{ X(,X{ X(n: 9){C8X, OX dC{ B 8 dX d{ Mp,n,pCCp,,pCOOO pd 8,,d8 ppp "8!  C Bc!n p 888 CX! ! 8pdXM ,pp8dd8p Cp! ! X,d zzMX8d8p{{C 8XX 8 C{OOZ{ c!M/ +B8p,A6-7 p dXd{pX dC n7 M C ,,p{{C Xd MnMpp8d,d8 C{8 C{ ,XXd8d8p p888 C{Cp MM! dd,XMz p p8pCCCC ,d ! d8888p ,X XX M ! X,d88p Cpdd,,d8pppppp CCppp C{ d BnB d C zzM! d8 p,,d8pdddXXX,d88d,,dddd,dddddp pp888p888888X X8,XX,d88d,dddd888dd8dddddd8ddd,,ddddddddddd8888888888888888d,d888d,,,dddddd,d88d,dd,dddddddddd88888888888888888d,,d88X,888,,dddd,d88,,88ddd88ddddddddddddddddddd888d,,d8,d,dddddddd8dddddddddddddddddddddddddd8888888d,8Xp,ddddd,,d8dddddddd888dd,,,ddddddddd8888888dddddddddp p8 C 8 dC ,X 8ppd,,8pp8d,,d88888d888,,d88,,,,,8888888dddddddddd8pCdX XdpCpd ! , XX8ppp88,dpp8d,,,,d88d8ppp8ddd8p8ddd,,dd,,,,d888888888ddddddd88p  ! XCCpd! d8p8d,,8p 8dd8pp8,8d,,,8888dd8p8,d88ddddddddddddddddd8888888ddddddddddddd8888d,d 88d,,d8ppp8d888ddd,,d888888dddd,,ddddd888ddd888888ddddddddddd888d! X{z CdXXd8p p8ddd8XXd8pp8d,d8ppp8dd888888ddd,,d88ddd8888ddddddd8888ddddddddddddd888888dd8 8, ! ,8dd8888,,,d,,88888dddddddddddddddddddddddddd888888dddd,,888,,dppp8dddd,,d888888dddddddddddddddddddddddddddddddddddddd888d,88dd88dd88888d,d,dddddddddddddddddddddddddddddddddddd8dddddddd888888d,,p p8d,88888d88d,,dddd88ddddddddddddddddddddddddddddddddddddddd88888d,8d88d,,d8ddddddddddddddddddddlbreakout2-2.6.5/client/sounds/wontgiveup.wav0000664000175000017500000007475612140767214016267 00000000000000RIFFyWAVEfmt "VDdatay..................................., , , ........................, ; JYYJ; , , , , , , , , , , , , , , ............................, , , , ..., ; JYYhhhYYYYJJJJJYYYJJJJJ; ; , ........, , ; ; JJJ; ; ; , , , , , ........., ; YhwwwwwwwhYY; , ., ; ; JJYYJJJJ; JJYYhhhhYYYJ; ; , .............ܷ., JYwg"g"v%v%v%g"g"g"v%v%v%v%v%v%g"wYJ; , .., JYhhwwwwwwwhhhhhhhYJ, ...ٷַ֩өӷ٨, Jhg"v%((((+.....+v%hJ, .٨.; Ywg"hYJ; ; , ..., ; J; ; .ٷ֩ӚККЊ͚КЩ; JYwv%(++..114411.(g"h; .ٷַַܷ., JYhg"g"v%g"g"g"g"g"whJ, .., , ; ; ; , , .ٷ֩өӚКЊ͚зַ, , ; hg"(+.....1111.(h, ٷַٷܷ.; JYhhwg"v%v%v%v%g"g"g"whJ, ., , ܷ֩өөөөөӷ, , ; Jhg"(+...11.+(v%h, ٷܷ; JYYhwg"g"g"g"g"g"g"whJ; , ...٩ӚКЩөӷ; J; ; Jhg"(+...111.+g"hJַַܷٷ٨, Yhhhhwg"v%v%v%v%g"wY; , .٩ӚЩөӷַַ٨, JJ; ; Jwg"(+.1111.(v%wJ.ٷַַܨ., Yhhhhhv%v%v%g"g"hJ, .......ܷ֩ӊ{ʊ͚зܷ; YJ; ; Ywg"(+.11141.(g"wJ, ܷ֩өӷַܷ, Jhwwhhwg"(((v%g"wY, ......ܷ֩ӚЊ͚͊Щӷ٨JJJ; JYg"(1441111.v%Y; ٷ֩өӷܷ., Jhwhhhwg"v%((v%g"whJ; , ..٩ӚЊ{ʊ͊ͩӷ֨; YYYYhwg"v%+1111111(; ٷַܷ, Jhwwwg"g"g"hJ; , , ....٩ӚКЊ͚͊͊зַ, YYYYwg"v%(..+(+11.g"Y.ܷܨ, Jhg"g"g"g"wwwwwwhJ...ٷ֩ӚКККЩөٷJJJYhg"((+11.((+++g"hٷַ٨; Yhwg"g"g"g"g"g"g"g"whYYYYJ; .ٷ֩өӚКЊ͚͊͊з֨JhYYYwg"(+.1.+(+..(; ܨ; hg"g"g"g"g"g"g"wYJJYYY; , ...ܷ֚{llllNJ͚; hhhhwg"g"(.11.+.1.v%hܨܷ.; hv%(+(v%v%g"hYJ; ; JJJ; , , ܷ֊]N|N]{ʩӨhg"v%v%g"g"v%++++.14+g"Y٩ӚКЩܨ.; hg"(.11.+(g"wY, , ; JJJ; , .ܚlNm^mNͨ, wg"(.1.+v%g"g"g"g"+11.v%J֊{{{ʊ͚з֨; w(.1441+v%wJ, ; ; , .٩ӊll]]lǚ., h(144444.(g"g"hJܩӊ{ll{ʚз֨., JYwg"v%(+..+(v%wJ, .....ٷ֚{lN|NN]{ʷYg"(++++.1.+(v%((v%v%g"h; ֚Њ{{ʊ͚Щ..; Jhv%(+..++v%g"wY; ....ܷ֩Ӛ{]m^O^m]ķ, h(..114441.((v%v%g"g"g"g"Y֊{lll{{ʚз., , ; Jhg"(..1...+(v%wJ, ٩Ӛ{]NmO@1@mͨ; +477444411.++(v%g"g"g"g"g"h, .܊]|m|NlNJܷͩ., ; ; ; ; ; JYg"+17:::71+v%h; .ܷ֚lN^@"ONhv%4ADGDD=71.+((v%v%v%v%v%v%g"h; l|^OOmNͷ֨, , , , ; ; JYwv%+7=DJJGA4(w; ٩ӊlNm@""^lJ(:GM Q QJA7.(v%v%v%v%v%((((v%g"h; l|O11Om]ĚШ; Yv%.:DMTTTMA4v%Yٷܨܷ֚l|O""^l, 1AJTT QJA71(v%g"v%(+++(h, .]mO@@Om]Ě, , Jwv%4AJ)W8ZG])W QD4g"Yٷ٩ӊlN^@"1m{.=J QTTMG=4+v%g"g"v%(+++(g"Yܚl|^OO^|]Ċٷ.; Y+7D Q)W8Z8Z)WJ=., ַܷ֩ӷַַַ֩өӊlNmO1"1^Nз, +7DJMMJD=71+v%g"g"g"g"v%v%v%v%g"hJ{Nm^^^|N{ʚٷ.; JYv%.7DMTT)W QG:+w, ٷ֩өөӷַַ֩ӚЊlNmO1"""1^]ĩӷw(4AGJJJDA:4.+v%v%g"g"g"g"v%g"hJ.ܚlNm^^mN]Ċͷ., ; JYhv%.7AGM QT QG=1v%hٷ֩өөөөөөӚЊ{]|^@1"1@mlǩӷ, +7DJMMJGA:41+(v%v%g"g"g"g"g"whJ.ӊ]|mmm|N{ʚٷ., ; ; JYYw(17AJ Q Q QMG:.g"Yַַܷ֩ӷַַ֩өӚЊl]|^O111@m]ĩӷ; 1=J QTT QJA:1+(g"g"g"g"wY; .ܩӊ]|mmmmNlNJٷ; JYYYYYhhv%.7AJT)W)W QJ=., ܷ֚КККЩөӷַַַ֩ӚЊlN|^@111@m{w.=M)WG]G]8ZTJA4+v%wwwwwwhJ, ٚlNm^OO^|lǚ; YwwwhYJJYw(4=GMTT QG:+, ܩӚЊ͚͊͊Щӷٷ֩Ӛ{]mO1"1@|{ʨ; g"7GTG]aG])WMD7.v%whhhhhhhhhY; , .{NmOOO^|{ʷַ., YwwhhYhw(.7AGJJGA7+Jٷ֩өөӷַܷ֩{]m@""1ON.Y(:G Q)W)W QJD=4.(v%g"wwhhhhYYJ; {N^O^mN{ʩӨ, JYYYYYYhhwg"(.4:ADGDA:1v%w, .ٷַܨ٩ӊ]|O1""@^lh+:DM Q QMGA71+v%g"wwY; .ي]|^^mNlǚ, ; JJJJJJJJJYhg"+4=DJMMGA4v%hܨ٩{]mO1""@m{ʨ; 1=GJJD=4.(v%g"g"g"g"g"g"g"g"g"h; ܚ]|^^m]Ċͷ֨, , ; Jhw(.7=GJJG=4v%hٷ֩ӊlNmO@@OmlǷ; v%.141.++(((++++++(((v%v%g"wJ{]]]lNJͩ٨.; Jhv%+14441.(g"wYJ; , .ٷַ֩ӚЊ{{l]NN]]{ʩ, Yv%++..++((((+++++(v%v%g"wY; ٷ֩ӚЩӷܷ., ; Yhg"v%((+((v%v%g"g"g"g"g"g"whJ, ٷ֚{lN||NlǩӷYv%+++(v%g"g"g"v%(+..11...(v%h; ٩өӷܷܨ., Yhg"v%v%g"g"whhwv%+..+(w; .٩ӚЊ͊{ʊ͚͊Щӷַ٨Jhg"v%v%(.1444.(g"hYJ; , .ܨ., ; ; JJYhwwg"v%(++(g"hJ, ....ٷ֩ӚКЊ͚͊͊Щ, hwhYJhwv%+47:::4+g"wYJ; ܷ֩өөӷܷ...; JhwwY, .ܨٷַ֩өөӚККЩӷٷJhwhYJ; ; Jwg"+4:=:71(g"whhhhYY; , .ܨ, ; YYYYJYYYhhwwg"v%(((g"whYJ; ; ; ; ; ; , ٷַַַ٨JYJ, ; wv%.1441.+v%g"g"g"g"wY, .ܨ...; YhhhhwwwwhJ; .ٷַٷַַַ; Y, ..; v%..+v%v%v%g"v%v%g"g"(+(g"hYJJ; .ܷ., JJJJ; JYwg"g"g"g"wYYYwwY; .ܨٷJ; wg"v%g"g"g"g"v%(v%v%v%v%v%g"g"h; , JY, ....; YhhJ; ; YwwwwhY; ; JYYJ.ܨܨ, , hwhYwwwv%g"wv%.(whhJ; ; hJ....., , ; YhhJ; Jhg"wYJJJJJJ; , ..; J; , ; J; JJYJ; ; YwJ, , JYYhhYJ, ; , ......, , , , , , JJJ; , , , JYYJ, , ..; , .., , ; ; , ; JYY; ; JYYYJ; ; JJ, , .........., ; , , ; , , , , , ......., , , , , ; ; ; , ; JYJJ; , , ; JJ, , , .........., , , , , , , , , .........., .., , , , , , ; ; ; ; ; , , J; , , , ........................................, , ...................................................................................., ; ; ........., ..., ......................., ; JJJ; , , ; JYJJ; , , ; ; , ........., ; ; JJ; ; , , , , ; ; ; J; , ......JYYYJ, , ; Ywg"w; , , YwhJ; , ; , , ; JJJJ; ; J; JYYYYYYYJ; , ; ; , ......JhwwhJ; ; JYg"((g"wJ, ; JhwwhYJ; ......, JJYYYYJ; , ; JJYhhYJ; JJJ; , ; ; , ..............Ywv%v%g"hYYhv%+1+v%YYYYYJ; ; ; ; ܨ.; JYJ; , ; JYYYhwwwhYYJ; ; ; ; ; , , ; ; ; .......; , , hv%(+v%g"g"(.1+v%YYhhY; .ܨܨ......, JhhYJYhwwwwhYYYYhYYJ; ; ......, , , , , , ..., JY, Jg"(..((g"g"g"v%(+(g"wJJJJ; .ܷ., , ; JYwwhhhwwhJ; ; ; JJ; , .., , ; ; JJ; ; , , .; hwY, ; wg"(+..+(v%g"g"v%wYJJJ, ٷַ., ; JJJYYhhwhYYwwhJ; , .., ; JJ; , , ; ; JJYYJJ; ; , , .YwwJ, ; Jg"v%(+++(g"wwhY; , ; , .ܨ.., JJYYhhwwwhYJYhwwhY; , ......., ; JYhhYJJJJJJJ; ; ; ; ; , ....; hJ; , ; hg"v%v%v%g"g"wwhhhJ; , , ; , ., ; JYhhhhhYJ; ; JYYJ; , , , ; JYYhhhhhhYYJ; ; , , , , , .JhwJ, , ; hg"g"g"g"wwhYYYJ, , , ., , ; JYYhhhhYJ; ; ; ; JJ; , .., , ; JJYhhhwwhhhYYJ; ; , , , .., YhwJ, , ; hwwhhYJYJ, , , , ., ; JJYhhhY; ; , , ; ; ; ; , ..., , ; JJJJYhwwwwwhhYJ; ; , , , , .JhhJ, ; YhwhhYYYJ, , , , , , ; JYhhYYJ; , , ; ; ; , ...., ; ; JJJJYhwwwwwhJJ; ; ; ; , , ..., JhY, ; YwwwwhYYJ; , , ; J; ., ; JYYYYYJ; ; ; ; ; ; , ., ; ; ; ; ; ; JYhhwhwhYYJJJ; , , .; J, JYwwwhYhYJ; ; JJJ; ., JJYYYYYJJ; ; ; ; ; , .., , ; YhwwhhYYYYYYYJ; , , ....., ; , .; YwwwwwwwhhYJ; ; JYJ; .; JYYYYYYYYJJJ; , , , .., ; JJYYYhhhhYYYYJJ; ; , , ................, ; , JhwwhhYJ; ; JJJ, ., JYYhhYYYYYYJ; , , .., ; JYhhhYYYYYYJJ; , , , , , .......; , Jhwg"g"g"g"whYJ; ; JJJ; .., ; JYhhhhhhhhhY; , .., , , , , , ; ; JJYYYYYYYYJJ; , ....; JJ, , Ywg"g"g"g"g"v%v%g"whYJ; ; ; ; ; ; .., ; ; , , , ; JYwwwwhhhhhY; , ., ; ; ; ; ; ; ; ; JJYYYJJJJ; ; ..........; YYJ; ; Jhg"g"g"g"wYJ; , , ; JJ; ; ; JYhhhhYYYYYY; , ......, ; ; ; J; ; JJJJJJJ; ; ; ; ; , .........., , ; ; ; , , , ...Jhwh; , ; JhwwwwhJ, .., ; JJJ; ; ; ; JYYJJ; ; JJJ; ......, ; ; ; ; ; ; ; ; ; ; ; , , , , ......, , , , , ; ; ; , , , , , ........JYhJ, ; YhwwwhwwwhYJ, ., ; ; ; , , , ; ; J; ; ; ; ; JJ; , .........., , ; ; ; ; ; , , , , , , , .........., , , , , , , ; ; ; , , , ....., ; ; , , ; hwwhYYYhwhhJ; , , ., , , , ; JJJ; ; ; ; ; J; ; ........., , , , , , ; ; ; , , , , ......., , ; ; ; ; , , , , , ; , , ..., ; ; , , ; YhhhYYhwwhY; , , .., , , , , ; ; JJJ; ; ; ; JJJ; ........, , , , ; ; ; ; ; , , , , , , , .., , , ; JJ; ; ; ; ; ; ; ; , ............, ; ; YhhhhhwwhYJ; , , , , , , .., , ; , , , , ; JJJJJJJYYJ; ....., , ; ; ; ; J; ; ; ; , , , , , , , , .., , , ; ; JJJJYJJJ; , ......, , ; YhwwwwwwhJJ; , , ., , ; ; ; ; JYYYYJJJYYYJ, ....., , ; ; ; ; JJJJJ; ; ; ; , , , , ., , ; ; JJJJJJJJJ; ; , , ....., ; ; , , JhwwwwYJ; , , , , ., , ; ; ; ; ; JYYYYYYYYYJ; ...., ; ; ; ; ; ; ; JJJ; ; ; ; ; ; , , .., ; JJJYJJJJJJ; ; , , , , , ....., ; , , , ; YwwwhYJ; , , , .., , , ; ; JJYhhhYYYYYJ; , .., , ; ; ; ; ; JJJJJJJJ; ; , , ........, , ; ; ; ; JJJJJJJ; ; ; ; , , , ..........., , , JhwwwwwwwhYJJ; ; ; , , .., ; JYYYYYYYJJ; ; , , ., ; ; JJJJJJ; ; ; , , ..., , , , ; JJJJJJ; ; ; ; , , ......, JYhhhhwwwwwhYJJJ; ; ; , ..., ; ; JJJJYYYJJ; ; ; ; ; , , ...., , ; ; ; ; ; ; ; ; ; ; ; ; ; , , ....., , ; ; ; ; ; ; ; ; ; ; ; ; , , ........., JJYYYYYYYYYJJJJJJJ; , ......., , ; ; ; ; ; ; JJJ; ; , ...., , , , , , , , , .........................................., , , , , , , , , , , , , , , , ............lbreakout2-2.6.5/client/sounds/freeze.wav0000664000175000017500000003261012140767214015317 00000000000000RIFF5WAVEfmt "VDdata\5Gl) 8^7 e <8V " X4"   ' o pU|>"r)\EKk E JX;_TJzr&oV==5=)ǭǾ M11BncΟ7! QMIJR4F"i.3w& $vC wb b* !aA|,a [y]I_OApf !2WG !"_bT {- $ C " +pYybu"k}$\|e hG8 uIBb)]; y k >h 6Q*n !ױ CKmѩ#^G..X ND'u s  x f =?#[7:l1DR'/uU,  V  r ` .MY|ZM-O_ }+ی]̿F@TQgQdR$[8&E{ZQFן zU$ $oXt%6'+{G D+, `p_NilO2c/ 1+qDCW3H C3~)qD?Pf]*{[ l' ]&m \OY[,}ڲ) Iئ 88S"4ϧ܃ A'_چJA)u?G}!*YHݻˢZ"iܮ D G 8r,0R ,  X'A!x %7 n"xW  x5: & ]  H P =1 Oծx(62E$N?HjL e ) \|@B<X QU^y7 'u |#;淲l)n.bM;."t}lASG 1(=ڮEk #E ^! t} 3"5 `L9#1ҩ %C{ ukYZc  ' b$+vR j$pURNPc 8jnhbJ1Oy י|*1:m`P-dly2۬$<1wTAMW{%p hni~) #  ^ OXU-N5*:\o,=(f[e  w H >v (#xA zsO!b. y+I}wd7c 5!ʼ #  b dA'{  ^ u~OZd _+:,o &;EF(qm/e8h 2*`b!9Vꅟ[^Sˆ07knmS2& +&|-)22 >h \  Q-pdjzee.Qi:P{ea:I[*$ _g$ e HS x xZ5 ?2hJBjPuu %~* NȽD/4:x-3:q[xoD82$ F >B kAvJ seB(big I#i w|1I'*ceWQD98%Y2?V fm){a xj  Qx EdJ%^2hl#aTHRm XS5E-͛y! #ng(8. %<!MIBavL  st#b_lXq n-]"h[Yq_g7G% G   d +5gr z5 jo@qJ- G-v8 ԜBWv2Ch =DU   h\s \Jn w^$`H2 8 -+1 Ru4WoGte h  dB _%[*'nY,@òCuJAL+=QK 5 %5g4\ש }FP"~ %lY4Nj5_}Mf_ E tHl ըh̭&@1 j =+ c)F=p * (H@BN,pK =Lqr@s "t+^8D XO[ Q z 8GFP [x^{|.<}R0', Bj#P'V F2ťƼya?   3 77iӖ\0EA ~uM,%Ԇ!)C{p5DVb!du   ^ /* G/ 4#JFI&f HW<r^&zF3W- pyP7M$" ~y*Nd x;" ۼ )P% : y+ ? B % ~+  ;$ }  vI .%6̶6MwQKFq?bAP 5! n#3t  NHP `1sAS-nf&lUe_BhP x4o8&% fA֧!*42 5$H 3,%33#1JD7"Xۗ%  @ Y  E K z"6Wc6М8n"ka]r l`z' = N pX W<K@)(k $~ ] OH 7L ٹ¾['y-x=m"ε:I(gc} 1GwP1vh_SxV?c B| 8XLvP\R5LzfzPIS l>w+| 3\9KDJ4 J~oV`f1%C׬GBR$pYU-bg3ymM= +!2.dRe T( 3% 9 Z \ | FE ?T6\P4BYyT[S;}'Vy!" l9 +  ' ]3 HY+n.lPDI[hR Ey}g2# f~LF@4Z9#H, u6W 5'6s Mo,v v@1 bW\~`q nuOT.aENs] * x3=  :\=L(1;ͷ% \6,%{0gpLCaT ~s Z k| Vjb/y!= :h}.K°L:/58P"]'31 o? >q"`y .'6utys:Q~`  P o9h.LVtMLnh Tr[~pr %[)Fe8PMC9%lOK x4{]V  ^XP/ ) I G6BP3 "9 K b8 (8YJ ;WL  pr -dw qW' z.&O 5jg#RwT qTEI5C`$Bw Yc~ yg~L ׶t @ $5?AJ I>:g9 v _  S) "Z0 1Ae * , Rs^ O|HKx!'0tLH-OK$KI mޜ(2]'J >wbrU"  K 2cFd]J99y=g!bk1d+\f< 1 Amj@Q 24u6   j.nmg@kmzTb{ fƮP&)"\"mX [ kgX# e E xc0Vc{&12SPW77t*> 2DTl=\r!k=C7rbEn5"=+5Q%ϲ~ zl S 5Xm@n&y1AV^"3d THPN,{[AY.2_SjqII3[1K  MH)F#־%+ eQԹd 7%FZCHH;՟6'# NL"$"o & !k+ps`[9cgq\k NBc5|,c!N#0 a^CBL#AΡIe T &Wf Mq7hc1g6T;9 wdH< Ib \ ,f T~\*T `", ˢ&.d+." Un29q j;_" wR`QC ok>eL 2!yq]C#vOT]7-3a4YuZBxRM 6־ 3ȣCD-n7a0*܅چ5'?m$%r DQn&M6~( V$(<FNK8` TAZ8!=@!G(_2m#" Uq ˥: B& !$4P ֩9 DRD ^FD<*x4+Iv0< jy5 w10"vFjdyL"\j03$" GJ}or0 RXo+ RMA%yB<;ڙx =h(]j7!]$x ` &  2=6' AM Hyq#!B޶;W< (."ڏް3%ٗ/>=&,̠ ;  ^;XC% bxC] WHIɷM;B5  n4Bdê  j"Ng9^?3G5"!+ *GX"#Ef{ o  J oN2 r;~F j i#nܽŗKE=+³%, $w gN%U KC,@j24H[t l^,*) [FWuUQ+En~6Ga@G5Yc[y+!$Q O VHdJ(Md*FQs% Yf W 2 T u7,X?Pg['Brq<FcxT'!_o Dh<94H-g4gϑ̇o'F OTSny 9_ u'4/vEjnpVr) bU7+0ӹ@$0.Gm2H< S$^!*:*cƔrg_ﴒ-{K϶HY+ nK *r fmS OBKU]I))GpV=RK]T s \`tm 7]V>s>IwYL*w2z+ U # 7 jJ)R5xɕ k C =1# S=tGj geOvr-.kRN  *2iUO]'vfi -3ϥ#`WR堝x<Z d &# 5 QgQyV,&]?pߢV#r.OR ? hh\ TJBQ&<g$~k+: X Xfɜ <)L(QAZwOkIJ2I'9Z㰛e ; J!m g  } woP\~h2'TBx Q{%f+ m98W b ]r BRK3  Tva, O ~qM|ԕV &>5L&0BKrڜ= ; ? oh8)Z m5cBd%V?|P;n,i12D2 J0 ]K/0F'Ql%l"/+>{Ik+`u-j`HzaXDj0rB kx~"_'IH[qs@GbK@G lt1X&"$ L66mNb[zqc,p&:<[?!zv=ӽ%};ƭ &g7lbreakout2-2.6.5/client/sounds/extraball.wav0000664000175000017500000000110612140767214016011 00000000000000RIFF>WAVEfmt "VDdataՈgMA;=OoǴ 8X,t:EOW]]UGj5B! זʄkYE9=GWu˼(T*v;L`q{|n]F`06 yS1 #A_ D"l6I\hnndPt:F#ݘy[E;7=W{$D"d2@P\ff]Mp8D" چS#~~~ 3[ B!p8N`lpj_Nz=V+2 ޜ}gckϼ&@ f3DU^_^SB^/4}[C75C[{ :h4LdxzdJZ-yS911;Kc}˼(D"f3~?A@r9R)0 ۘ˄wsu˰$B!b1|>EKLDv;`0< gYUWc{ɴlbreakout2-2.6.5/client/sounds/speeddown.wav0000664000175000017500000006305012140767214016031 00000000000000RIFF fWAVEfmt "VDdatae &14E*a[U#.0  2+ r E:b6qt!@ !-"$"2 ~ Y HY-VMIn.WfaѱѽѢh,B d Jyd [0z$ [>` B l*wZl  4 ^Hm,16=3.v1He~h\>PPvaU^JBA(#3$-+(+*'0&+54(-!#* %/y,#($,m# "&^ /^; 3P4PfS"T\R),oKp#2WeH6,HO=OBJCN>\h=847: Y5!0K>N? |kBaVaF|(x'Z;B(EM < )+-N}U'uQ3N31Wj}tK  M ( R Mb>Te<g H?JjD0 U^n`/DtZ-RuM D^a = LP#eg&$'/\Re~-O S O 8  z  wq:OKM^jd4  ?%&$ %}%#Z"7J= C] O"Y6TKG-WET4/$!nIْaW݅ݥ6߂<4YLhFl!:<)}gB[ -A;X !#D': !9 ^X8R<Vj & - !  S g  t /4p&]PSJY'RO:}.o6iS2pbGt$pq&+p lb }5 x)\ml(:cud ,53B%}lhstb$, jk=8 qqsWr]Yb_PK:   8 p7 )r%@(>X2+oP W  a \ y c {RgUW9 U[RV?DEnt:2dy|?;G[oG2t"][>0  M Q}!z.= ? L<^_alMC<p- 6A|s[6aW(Z44=p%~A#} X \ % `-O*}e!~"#&'% s bV7A Fa>0+M4@|J4G0bgki-#h ?SY syF {JyX[=vp 0Lnzzp#[%)jPm$ Y, q ` d g ^ m V s J | q MJ\LO]EZRZ * 2 iqN^e C u 0l x)"w@b.%GM 3$86 ,R9k_'bI9f*LN4R\wgvlorlqri}aucfv&s[74~#i0^7LJR ?  T H ' fyx83i aBL>[ \Lc#aztg3g] j Zp=xk^  Cx 4""#P$$$v$;!Pw<! 'e\ D 2$jrS@LX q iT0se D:'uv(^3p ,v"w}|zkW^Wdi>c` * 0 U2h 3n&&hg2^?;w$*@ lQnp)}{H%Yphn#}:"f;ee<_SfBwG0GhhpG%e6Llzj my`\Fna4;q- h @~DM! a   @  T O  mtAb@H&23KF-1619$KB&Q+a4o?wzkz"1?{^'"}m R|^q E;A*bs$V};\ Ci(xi[a<mrt:s]) !R`B  ud`&3CX vXB/' R U H   j b 96'&ShNB9T+! 5?<K> vY'*N!0]9W\na'IlX3. )xh8vMMhAC/5iknhlvS:D(O7$Bh;7S$kTW-' .bvSP[; 40 :'8 taPVC*\ }q6 R*(SND  9,`KCm 8=v]90 82M`[Zp1YVFDJO5&6x%( V{cE"JG W C } Q ! P  6 -zc[GA)N >c<5v ZI?tD PGfg0{1X   v _ z^~08ru6xu*<@+SR?*D079*.C-Qa.377;vGPf_!4&uNS) Xs b;;$OaBt]heK#%-$%}G - ]< W lG~F3 lQ=QjF]  n$YfJiotoqtpp.WK4HYbE&iRRv9F}"eE EI<C=2>>.\0}ThqH Oy 0 "(!%'"&*;pvZUwJ'd=Nai0+H8\K"7 vfQb} Vj 3g\ 689m\ 8.Yzga  N/h~ d n][  d_KP%WCPqz/[FH=p _?jATn[I`PuX{n - >9n%P2yPK  Z 7 #& [ . P sBn&PhLffpekmdpfbZ13qG:!|phzkJ):2J 3w T_>u  4kD71TD+a+/V5Ou[12PilJ?A^?mk p3>-$_ fe Oq[aa_`gTvG'Q3^orp]sT*Nog4`Xp|QmS{Y0# dW$_|VD~<iDH|H =r& / ( e M ~ % & D C a 15U&K?DL B  0 ( W njkvGg|dT7d} L(rV  pj}0E07Dk'O] n fUP|e<-(-aZ' uiY(OP3~mzzP,Y3P |'M}w9nuk9cw  C K   o  B        J P I I Q @ T C  Iop\]@'.8i-/ZPd=9f f!ji|5;\ouK`i$  E  < Z J b z*%GSdL5)f/>i|OINkwAHV;[N:)B@Y}/S:Qkx-Yi,)Q;p @;{Q:YOAEj"G3@ ( \ @ } + !Bn +NI[| K.o ?AN=;a.a68p x a }  Q4 i+oB  |  4 N  p]yM0 mHA%JB-/[m (7{.4[,-g rA3r27 8Z*#4vF:M o @ J `   } 1" j"[Lg  M+[ }xoAie8{" kJ= Rr8F+aB w H%F.<# )  AKd9_UrPk;T&|4<[-<)a6 OErccmbijcodh|! M ;}p 5h!8o1#hIlG"oWH\=wU3mz];rLoY 7!VNWbPby0aPE:ks c X  $Ud`lA/vE>G& B#0G?QS?@&D}d<AWZt^eKR;#c&f%? '"k< \"m+?(v qq,Y< i u,>?9tV1)I/JB~?etE8;-mIoDoW4DT0k T , ^.Nt? , z c)N7DEy^(U4r1*g^FPjW ?0l+% D$|S$F/<99B*-H!qtLe d{b>zVit'HcvPXboc,.Z-]:OGIKIWd]]PZWThwa* 7 > ld|0 V  XVYNex9k;"!/[n HWcwq(u Y*gDo;flo4wW-I9.>eJ80i[|B07C|\ZkhjY&tj}Q0 Lxhi}2%b2r.3|rC._k& ]3Sr 5$kJgFm~fc7x)~@wOg5/&#!!!!4 K ? + 9  { # % a h 1^z+iXt;9B`s) sQn`vna ew|~zyt qf[)9Y({k v}o o{vzt%xH]6wB!5 @ 7 ] GR  T + + FA;6xosgI4zuL czu9FDOp _ ]O Q  = K f X\dJd ,$'q{)d0iHw~Qi' Vf &Fa3.]'C.G%90Cy !8MaKAiTM&PS9h-:,*2k ^1VF@@1;?<7H:H&f ;A)0DU2'  B xo.i~  \L7,9T_&;;# "eI"y"W ;+UyWEL4tU3np)nU=&u9G~ 0]a9T_D?#+>83^ /  _ ' $uG9Hi'389   N 7 W ,  ?8H  ^@$`<l$F jPL2~n&X m5iEwyz$C4C8<@3J#VX`V`Z]^XdPqI6M"$% #)&?>KAD89J=BD@AIreVHP&G0A4=!$Jx~}st7G7.0 u3>A[ * . &z  7 = njIuGvd"-od*'LsJ C'tl ?Gut7RAt hdP]0KH IjOnh p3Y9/  B i F ? I B A M ' :  p @%6l$qV)8kh?9   6^E|U;_3_ yg}L=D0j3c}Qy\mI0R 3)} -E%PL"C*n! Zxenoftj   P"C:Ym)7z @i[Bf/ bGr8TDFfx0I7W}OG~HY J"aTJ@ne*>> y8ROlEYd*MuSwo 9t>e)L[m- < 9 - G  @DKE@c &o!UC[, ?]?z8,o@DbA$v]Mh@p3S>^nab-&0)}<{mJa|a]& t!iWs-ho?,O ( p % <z"C  u /^=mt.g)7Js4nS;/MEFVJO=KlwoWi{hQaT_ NeZ`]bXjW"D- Ok`]Fny"HrSmOb4SL Q`&oZ~2= 8TB">jK/:F*&B~K\IVx|f1OE^]!< g9S>2 G*FZ.F ^,>h-! baw@8F:B>?@;H%|hSB`6B"]FHO` w%qEg+,&|fn{[heL5.e$bf'  4 W #4AjD1 p86# K`F< *7uj v"@B)%#p$ auk.N !3glB?D=2C1|_!%P Ebc,G|qa-d$YDz gmusD_G^@l \8_%v-&]WEyC)?\EvG1[ 45< wU'iM\2>FVs#&m:( SLziwt"rX9; .o_Zya] ?TSj rG7IIbn[r<D+AhAhBgl`\v]VM<y XK >B$6m2I i ZH^kgSph=$W="{cE Z ~ [ < +jk g%b%4>> 5 ? Q 6Z= AX:bQQx- Y5:N>,$/ [t;4;zDh/7LT MX 8Nu}{l;H7)(lDOILLLNMNNOOOPOSOSTJk'T\h!O['N2TVlciR,_!;>S6FZ K0|!>Lo* Q/c  0>5h1@>xYJ#] 9M/HZlt@?Me;[hj=HFE8vr'Q;7,*e@ObSv||{w_OBp :.Cd|vb;b9p xs!u{ w|z{|{~}|{|MLK$OJUa(={6H!5+U3$+NcYY{e&L7>m` ^QUT.\sii 6/2-<B< /3jg:Ey,C8E&&am&r[c_``bZr 4PV1'9a ?gH=GGQ2PtFbFJtL2`7^ ?`gYr+ @ @M,!?7el[=>D tU4yfSs;M,\I>KmCoA!=N +GT ^sO#ug  758[h3 3 a}@+.0P_zY1P6d 5!0LD\u^uqCNI,944Q "5100LaY\[[\Y`@$g@%)Xjx"4Cn(1durY|t fbE9 ?>&*wX;v&3()D:Kj_nxnOWG7}%,@W *#&"{w3|j @K[j|pGQB+13!ER[ 5_ <ZizqVZe<+- 'Djvxm ^nAIGFIGHIGJIFR6(jOY"41_@STXrsoulVS]LDO?8?;==<@`$@!X5uP!-\Yt'*e;R0W`@Px|E0a1:/ 6LQNPONQ61 bhP +^'\D^n%U8=6IWOQvAn}dgB o}YUXWWXWUgsoppoqpppqrdT\YJNP@287)+,*,+-,,-*:HAS^ZjthsjKNSE:9<9:=0.4'&2=D]ip~srZET8  =[\t|t~T$'* )0=cqyzr^|YG{*>9 q+nc17>\ rmN}2o ^{tyth_G:sN;*(9<9Z6RZtZF9lTaidgsxxxxxwzjYeQ4B? %&3FI] hD;4+//-6`!O(/4SaG0M!pOE>4?SU^z{X@GH36B=FY^c|yxvXTVUVS^bo  rnwgbmYEJF=====AJNXint #*,7@BKKKW``SLTJ??)<\gxfX>& !ASUey{zzyyyzh\dWHRKAGB=GPQQXabitssz}{z|zrxtbdeO?B8$&(lbreakout2-2.6.5/client/sounds/verygood.wav0000664000175000017500000007475612140767214015716 00000000000000RIFFyWAVEfmt "VDdatay..................................., , , ........................, ; JYYJ; , , , , , , , , , , , , , , ............................, , , , ..., ; JYYhhhYYYYJJJJJYYYJJJJJ; ; , ........, , ; ; JJJ; ; ; , , , , , ........., ; YhwwwwwwwhYY; , ., ; ; JJYYJJJJ; JJYYhhhhYYYJ; ; , .............ܷ., JYwg"g"v%v%v%g"g"g"v%v%v%v%v%v%g"wYJ; , .., JYhhwwwwwwwhhhhhhhYJ, ...ٷַ֩өӷ٨, Jhg"v%((((+.....+v%hJ, .٨.; Ywg"hYJ; ; , ..., ; J; ; .ٷ֩ӚККЊ͚КЩ; JYwv%(++..114411.(g"h; .ٷַַܷ., JYhg"g"v%g"g"g"g"g"whJ, .., , ; ; ; , , .ٷ֩өӚКЊ͚зַ, , ; hg"(+.....1111.(h, ٷַٷܷ.; JYhhwg"v%v%v%v%g"g"g"whJ, ., , ܷ֩өөөөөӷ, , ; Jhg"(+...11.+(v%h, ٷܷ; JYYhwg"g"g"g"g"g"g"whJ; , ...٩ӚКЩөӷ; J; ; Jhg"(+...111.+g"hJַַܷٷ٨, Yhhhhwg"v%v%v%v%g"wY; , .٩ӚЩөӷַַ٨, JJ; ; Jwg"(+.1111.(v%wJ.ٷַַܨ., Yhhhhhv%v%v%g"g"hJ, .......ܷ֩ӊ{ʊ͚зܷ; YJ; ; Ywg"(+.11141.(g"wJ, ܷ֩өӷַܷ, Jhwwhhwg"(((v%g"wY, ......ܷ֩ӚЊ͚͊Щӷ٨JJJ; JYg"(1441111.v%Y; ٷ֩өӷܷ., Jhwhhhwg"v%((v%g"whJ; , ..٩ӚЊ{ʊ͊ͩӷ֨; YYYYhwg"v%+1111111(; ٷַܷ, Jhwwwg"g"g"hJ; , , ....٩ӚКЊ͚͊͊зַ, YYYYwg"v%(..+(+11.g"Y.ܷܨ, Jhg"g"g"g"wwwwwwhJ...ٷ֩ӚКККЩөٷJJJYhg"((+11.((+++g"hٷַ٨; Yhwg"g"g"g"g"g"g"g"whYYYYJ; .ٷ֩өӚКЊ͚͊͊з֨JhYYYwg"(+.1.+(+..(; ܨ; hg"g"g"g"g"g"g"wYJJYYY; , ...ܷ֚{llllNJ͚; hhhhwg"g"(.11.+.1.v%hܨܷ.; hv%(+(v%v%g"hYJ; ; JJJ; , , ܷ֊]N|N]{ʩӨhg"v%v%g"g"v%++++.14+g"Y٩ӚКЩܨ.; hg"(.11.+(g"wY, , ; JJJ; , .ܚlNm^mNͨ, wg"(.1.+v%g"g"g"g"+11.v%J֊{{{ʊ͚з֨; w(.1441+v%wJ, ; ; , .٩ӊll]]lǚ., h(144444.(g"g"hJܩӊ{ll{ʚз֨., JYwg"v%(+..+(v%wJ, .....ٷ֚{lN|NN]{ʷYg"(++++.1.+(v%((v%v%g"h; ֚Њ{{ʊ͚Щ..; Jhv%(+..++v%g"wY; ....ܷ֩Ӛ{]m^O^m]ķ, h(..114441.((v%v%g"g"g"g"Y֊{lll{{ʚз., , ; Jhg"(..1...+(v%wJ, ٩Ӛ{]NmO@1@mͨ; +477444411.++(v%g"g"g"g"g"h, .܊]|m|NlNJܷͩ., ; ; ; ; ; JYg"+17:::71+v%h; .ܷ֚lN^@"ONhv%4ADGDD=71.+((v%v%v%v%v%v%g"h; l|^OOmNͷ֨, , , , ; ; JYwv%+7=DJJGA4(w; ٩ӊlNm@""^lJ(:GM Q QJA7.(v%v%v%v%v%((((v%g"h; l|O11Om]ĚШ; Yv%.:DMTTTMA4v%Yٷܨܷ֚l|O""^l, 1AJTT QJA71(v%g"v%(+++(h, .]mO@@Om]Ě, , Jwv%4AJ)W8ZG])W QD4g"Yٷ٩ӊlN^@"1m{.=J QTTMG=4+v%g"g"v%(+++(g"Yܚl|^OO^|]Ċٷ.; Y+7D Q)W8Z8Z)WJ=., ַܷ֩ӷַַַ֩өӊlNmO1"1^Nз, +7DJMMJD=71+v%g"g"g"g"v%v%v%v%g"hJ{Nm^^^|N{ʚٷ.; JYv%.7DMTT)W QG:+w, ٷ֩өөӷַַ֩ӚЊlNmO1"""1^]ĩӷw(4AGJJJDA:4.+v%v%g"g"g"g"v%g"hJ.ܚlNm^^mN]Ċͷ., ; JYhv%.7AGM QT QG=1v%hٷ֩өөөөөөӚЊ{]|^@1"1@mlǩӷ, +7DJMMJGA:41+(v%v%g"g"g"g"g"whJ.ӊ]|mmm|N{ʚٷ., ; ; JYYw(17AJ Q Q QMG:.g"Yַַܷ֩ӷַַ֩өӚЊl]|^O111@m]ĩӷ; 1=J QTT QJA:1+(g"g"g"g"wY; .ܩӊ]|mmmmNlNJٷ; JYYYYYhhv%.7AJT)W)W QJ=., ܷ֚КККЩөӷַַַ֩ӚЊlN|^@111@m{w.=M)WG]G]8ZTJA4+v%wwwwwwhJ, ٚlNm^OO^|lǚ; YwwwhYJJYw(4=GMTT QG:+, ܩӚЊ͚͊͊Щӷٷ֩Ӛ{]mO1"1@|{ʨ; g"7GTG]aG])WMD7.v%whhhhhhhhhY; , .{NmOOO^|{ʷַ., YwwhhYhw(.7AGJJGA7+Jٷ֩өөӷַܷ֩{]m@""1ON.Y(:G Q)W)W QJD=4.(v%g"wwhhhhYYJ; {N^O^mN{ʩӨ, JYYYYYYhhwg"(.4:ADGDA:1v%w, .ٷַܨ٩ӊ]|O1""@^lh+:DM Q QMGA71+v%g"wwY; .ي]|^^mNlǚ, ; JJJJJJJJJYhg"+4=DJMMGA4v%hܨ٩{]mO1""@m{ʨ; 1=GJJD=4.(v%g"g"g"g"g"g"g"g"g"h; ܚ]|^^m]Ċͷ֨, , ; Jhw(.7=GJJG=4v%hٷ֩ӊlNmO@@OmlǷ; v%.141.++(((++++++(((v%v%g"wJ{]]]lNJͩ٨.; Jhv%+14441.(g"wYJ; , .ٷַ֩ӚЊ{{l]NN]]{ʩ, Yv%++..++((((+++++(v%v%g"wY; ٷ֩ӚЩӷܷ., ; Yhg"v%((+((v%v%g"g"g"g"g"g"whJ, ٷ֚{lN||NlǩӷYv%+++(v%g"g"g"v%(+..11...(v%h; ٩өӷܷܨ., Yhg"v%v%g"g"whhwv%+..+(w; .٩ӚЊ͊{ʊ͚͊Щӷַ٨Jhg"v%v%(.1444.(g"hYJ; , .ܨ., ; ; JJYhwwg"v%(++(g"hJ, ....ٷ֩ӚКЊ͚͊͊Щ, hwhYJhwv%+47:::4+g"wYJ; ܷ֩өөӷܷ...; JhwwY, .ܨٷַ֩өөӚККЩӷٷJhwhYJ; ; Jwg"+4:=:71(g"whhhhYY; , .ܨ, ; YYYYJYYYhhwwg"v%(((g"whYJ; ; ; ; ; ; , ٷַַַ٨JYJ, ; wv%.1441.+v%g"g"g"g"wY, .ܨ...; YhhhhwwwwhJ; .ٷַٷַַַ; Y, ..; v%..+v%v%v%g"v%v%g"g"(+(g"hYJJ; .ܷ., JJJJ; JYwg"g"g"g"wYYYwwY; .ܨٷJ; wg"v%g"g"g"g"v%(v%v%v%v%v%g"g"h; , JY, ....; YhhJ; ; YwwwwhY; ; JYYJ.ܨܨ, , hwhYwwwv%g"wv%.(whhJ; ; hJ....., , ; YhhJ; Jhg"wYJJJJJJ; , ..; J; , ; J; JJYJ; ; YwJ, , JYYhhYJ, ; , ......, , , , , , JJJ; , , , JYYJ, , ..; , .., , ; ; , ; JYY; ; JYYYJ; ; JJ, , .........., ; , , ; , , , , , ......., , , , , ; ; ; , ; JYJJ; , , ; JJ, , , .........., , , , , , , , , .........., .., , , , , , ; ; ; ; ; , , J; , , , ........................................, , ...................................................................................., ; ; ........., ..., ......................., ; JJJ; , , ; JYJJ; , , ; ; , ........., ; ; JJ; ; , , , , ; ; ; J; , ......JYYYJ, , ; Ywg"w; , , YwhJ; , ; , , ; JJJJ; ; J; JYYYYYYYJ; , ; ; , ......JhwwhJ; ; JYg"((g"wJ, ; JhwwhYJ; ......, JJYYYYJ; , ; JJYhhYJ; JJJ; , ; ; , ..............Ywv%v%g"hYYhv%+1+v%YYYYYJ; ; ; ; ܨ.; JYJ; , ; JYYYhwwwhYYJ; ; ; ; ; , , ; ; ; .......; , , hv%(+v%g"g"(.1+v%YYhhY; .ܨܨ......, JhhYJYhwwwwhYYYYhYYJ; ; ......, , , , , , ..., JY, Jg"(..((g"g"g"v%(+(g"wJJJJ; .ܷ., , ; JYwwhhhwwhJ; ; ; JJ; , .., , ; ; JJ; ; , , .; hwY, ; wg"(+..+(v%g"g"v%wYJJJ, ٷַ., ; JJJYYhhwhYYwwhJ; , .., ; JJ; , , ; ; JJYYJJ; ; , , .YwwJ, ; Jg"v%(+++(g"wwhY; , ; , .ܨ.., JJYYhhwwwhYJYhwwhY; , ......., ; JYhhYJJJJJJJ; ; ; ; ; , ....; hJ; , ; hg"v%v%v%g"g"wwhhhJ; , , ; , ., ; JYhhhhhYJ; ; JYYJ; , , , ; JYYhhhhhhYYJ; ; , , , , , .JhwJ, , ; hg"g"g"g"wwhYYYJ, , , ., , ; JYYhhhhYJ; ; ; ; JJ; , .., , ; JJYhhhwwhhhYYJ; ; , , , .., YhwJ, , ; hwwhhYJYJ, , , , ., ; JJYhhhY; ; , , ; ; ; ; , ..., , ; JJJJYhwwwwwhhYJ; ; , , , , .JhhJ, ; YhwhhYYYJ, , , , , , ; JYhhYYJ; , , ; ; ; , ...., ; ; JJJJYhwwwwwhJJ; ; ; ; , , ..., JhY, ; YwwwwhYYJ; , , ; J; ., ; JYYYYYJ; ; ; ; ; ; , ., ; ; ; ; ; ; JYhhwhwhYYJJJ; , , .; J, JYwwwhYhYJ; ; JJJ; ., JJYYYYYJJ; ; ; ; ; , .., , ; YhwwhhYYYYYYYJ; , , ....., ; , .; YwwwwwwwhhYJ; ; JYJ; .; JYYYYYYYYJJJ; , , , .., ; JJYYYhhhhYYYYJJ; ; , , ................, ; , JhwwhhYJ; ; JJJ, ., JYYhhYYYYYYJ; , , .., ; JYhhhYYYYYYJJ; , , , , , .......; , Jhwg"g"g"g"whYJ; ; JJJ; .., ; JYhhhhhhhhhY; , .., , , , , , ; ; JJYYYYYYYYJJ; , ....; JJ, , Ywg"g"g"g"g"v%v%g"whYJ; ; ; ; ; ; .., ; ; , , , ; JYwwwwhhhhhY; , ., ; ; ; ; ; ; ; ; JJYYYJJJJ; ; ..........; YYJ; ; Jhg"g"g"g"wYJ; , , ; JJ; ; ; JYhhhhYYYYYY; , ......, ; ; ; J; ; JJJJJJJ; ; ; ; ; , .........., , ; ; ; , , , ...Jhwh; , ; JhwwwwhJ, .., ; JJJ; ; ; ; JYYJJ; ; JJJ; ......, ; ; ; ; ; ; ; ; ; ; ; , , , , ......, , , , , ; ; ; , , , , , ........JYhJ, ; YhwwwhwwwhYJ, ., ; ; ; , , , ; ; J; ; ; ; ; JJ; , .........., , ; ; ; ; ; , , , , , , , .........., , , , , , , ; ; ; , , , ....., ; ; , , ; hwwhYYYhwhhJ; , , ., , , , ; JJJ; ; ; ; ; J; ; ........., , , , , , ; ; ; , , , , ......., , ; ; ; ; , , , , , ; , , ..., ; ; , , ; YhhhYYhwwhY; , , .., , , , , ; ; JJJ; ; ; ; JJJ; ........, , , , ; ; ; ; ; , , , , , , , .., , , ; JJ; ; ; ; ; ; ; ; , ............, ; ; YhhhhhwwhYJ; , , , , , , .., , ; , , , , ; JJJJJJJYYJ; ....., , ; ; ; ; J; ; ; ; , , , , , , , , .., , , ; ; JJJJYJJJ; , ......, , ; YhwwwwwwhJJ; , , ., , ; ; ; ; JYYYYJJJYYYJ, ....., , ; ; ; ; JJJJJ; ; ; ; , , , , ., , ; ; JJJJJJJJJ; ; , , ....., ; ; , , JhwwwwYJ; , , , , ., , ; ; ; ; ; JYYYYYYYYYJ; ...., ; ; ; ; ; ; ; JJJ; ; ; ; ; ; , , .., ; JJJYJJJJJJ; ; , , , , , ....., ; , , , ; YwwwhYJ; , , , .., , , ; ; JJYhhhYYYYYJ; , .., , ; ; ; ; ; JJJJJJJJ; ; , , ........, , ; ; ; ; JJJJJJJ; ; ; ; , , , ..........., , , JhwwwwwwwhYJJ; ; ; , , .., ; JYYYYYYYJJ; ; , , ., ; ; JJJJJJ; ; ; , , ..., , , , ; JJJJJJ; ; ; ; , , ......, JYhhhhwwwwwhYJJJ; ; ; , ..., ; ; JJJJYYYJJ; ; ; ; ; , , ...., , ; ; ; ; ; ; ; ; ; ; ; ; ; , , ....., , ; ; ; ; ; ; ; ; ; ; ; ; , , ........., JJYYYYYYYYYJJJJJJJ; , ......., , ; ; ; ; ; ; JJJ; ; , ...., , , , , , , , , .........................................., , , , , , , , , , , , , , , , ............lbreakout2-2.6.5/client/sounds/weak_ball.wav0000664000175000017500000001232412140767214015760 00000000000000RIFFWAVEfmt "VDdata$<N EF `5$LZ mb (d ]y$ *zynF _8\$ q   $ C#.^ f1Q  )Q*)'   5- * ! %   $ 7B$G L  Y$U r Qj~Koc 0+ [^"#yqYi;"K$!߽qg|Ru!3 <®Nlv)/)9Uc^SG?7"/ I] 5sլ~$i֡я͸ B#'+PH N3<(DHzMw#F\3;  q ;E ?Jnhv| N Y%:4dmmjT{ l 3 A L$H M,p%lSh09  % C 67k iw&SW $HT ~*zNKEsVZ?^hD%7 *uE iUvCsJ>'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/standard.wav0000664000175000017500000001232412140767214015637 00000000000000RIFFWAVEfmt "VDdata$<N EF `5$LZ mb (d ]y$ *zynF _8\$ q   $ C#.^ f1Q  )Q*)'   5- * ! %   $ 7B$G L  Y$U r Qj~Koc 0+ [^"#yqYi;"K$!߽qg|Ru!3 <®Nlv)/)9Uc^SG?7"/ I] 5sլ~$i֡я͸ B#'+PH N3<(DHzMw#F\3;  q ;E ?Jnhv| N Y%:4dmmjT{ l 3 A L$H M,p%lSh09  % C 67k iw&SW $HT ~*zNKEsVZ?^hD%7 *uE iUvCsJ>'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/shrink.wav0000664000175000017500000001055612140767214015342 00000000000000RIFFfWAVEfmt "VDdataB3Q19=d6 ~L*J^o. uNBz&0 +j zc@ v(nj- a3D& 48 :^9s|d31M%8q],Rq {:,s/"m,QU!K787hN)A53 b #V+hwk5Mw u Gw J zAaf  i_*>IJY>p+C .6>K j;4Ojfa2eZ? ](sDqzB"(#y u4c-7|  5"   i ^  c DTcX#;e#{QHNRP?.3N 0#i\XR(69rl 74OVY9S2ZP9 , ! - p 63 M  e   ! # O z Y m"7, W-eZhc{jRee|KF%g=N5C%<N; cM62h9mGP.@'k^B 0 G (Pv'|l H [ -LU$ ($ -|sJsu8Yqg<@[!c.$# ^4Z/#vO?42_MI);)   iYlTY\m.)C c F `%BFO`.Y'9eM= 4lX_ N]%x?|! Ph7Aij & #Yf$nI a [#Rrq 'bD  !8;4Ji7SjCnVb\.5H6 `2b! !  ( $ c w _<)F[` + >' 5$h-u 2 VP 6  VI0sXX?c[ a g K U  l u ?> JLC025[22_DJJWQGDA3\O1K l E,XT 9 [WX*E-*fp`zIU  + '>e!>-:QyjNq%|+82KIbD9{ G Z 8K$v  #  > 4 6R- W ~ "X G|Y*;&W V%YX*xN6q8K-f/*'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/Makefile.in0000664000175000017500000002553112610471343015366 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = client/sounds DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ EXTRA_DIST = attach.wav click.wav exp.wav expand.wav extraball.wav \ freeze.wav gainlife.wav goldshower.wav joker.wav looselife.wav metal.wav \ menu_motion.wav reflect_paddle.wav reflect_brick.wav score.wav shot.wav shrink.wav speeddown.wav \ speedup.wav standard.wav wall.wav menu_click.wav \ dammit.wav damn.wav excellent.wav verygood.wav wontgiveup.wav \ chaos.wav darkness.wav ghost.wav timeadd.wav expl_ball.wav weak_ball.wav \ bonus_magnet.wav malus_magnet.wav disable.wav all: all-am .SUFFIXES: $(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) --foreign client/sounds/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign client/sounds/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 uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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 installdirs: 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-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-data-local install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-local install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-info-am install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/sounds @for file in *.wav; do\ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/sounds/$$file;\ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\sounds\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done # 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: lbreakout2-2.6.5/client/sounds/score.wav0000664000175000017500000000552212140767214015154 00000000000000RIFFJ WAVEfmt "VDdata& "!P !FNf6 tCm :b  Altue! -#P F&0(9w  -w&x'Sҵ$ x9(*8J jR& A 1m.-(̼RpD/8mG~' ;2T a1X& ξ6'XAt40#oˆ۵+ 00j[ќ=31Y+h",bq7I qܝ `,1bS )ˣa $/-a5#cBW~ ߬\'7Ux7Ch T w E+ '"L (R } I.R!jK?#  Wo%!31HYz̀-{8h\!Mtf#'aAܡ #$F^Ώo [ Dk7ֺ8 O=2a1qNee2cakI=#F|՛I6+u'l ݎٝ4CWZHSy9.39&HI;GqڼSy#AJڳӌ H%TK *u3&2 d7-/l Kr|>SK8 )m֜G%'t.D8!e*t )U(9E.َ RDZ(% O(/"$ 4 j1!EFy+w Sk%)0 F"i)17 ǴDW"MMc$ |$6 s:j+  ~:? *]#NhNG!!.{1(w-ѥLg"E2Hn!@HZӊ. ݧ@}z)D3 $$c-!0"u \kW-'  $2 P%d N t Z -NM _mN(X HY\]  xnt p L #| HZB %W&#nN+5&{K(|S!)0$ۺzL*.//h(xP 3 [',m2xb#0j1Ʊƕ<5l2 -R7Oϰ5@0|\кSEA>(9qG+$ȣ ;]zC.QiB1;3 O #;\!(חU7) $y55GEھ#>5b>)!`% yw6+!c h "G GH\ru {6}\cz D=IzZ73݅_ X#yR*DVn( Qi1)/9\(8K,B)|# e*.GZ %nQD0!'#Ra)Y( ?LM0ם6A_8X#> # "  !$gT'!iA#*^LO%j!!#Rv>(-gg'!',(n ~ ";& [n d+X- HP_""T#2L\) k-ZW6 Rvm!x!>q\|,(D"<]:A" j]% \eZd(݄  36IL : $z1h- # |R t!T^ }= sE_KgMe 2_WUUY_[ 1% F  4t [@GJ1 5 zJ?`} #e9x1  $ albreakout2-2.6.5/client/sounds/exp.wav0000664000175000017500000013040012140767214014627 00000000000000RIFFWAVEfmt "VDdataҰccccbcYDh4L&8$֤ј{ic]YQMMSYW[msuê $*$ ӌq[KIIIIKKKKKMMMMMMOOOOScq{Ğζ .>L&\.j5r9r9l6d2\.T*F#0 ڦҚ̎ƄˆÈÈÊĒȖʚ̜͢Ьո"08@ H$L&J%F#B!B!@ @ @ B!@ <4*"   ",4>F#L&P(V+Z-`0f3n7r9p8f3\.X,T*N'H$D"B!B!B!><860,($         "$&$"       ޶ڮ֦ҠϞΞΜ͜͜͞ΠϢТФѨӲغ    $&(***(($"               &*,***,.0222200.*&$"                                 "$&(*....,,(&&$"                 "$&&&$$"""                                    ""$$""$&$$$""                                     "$(,,,..*$                                          "$$$&*,.00.**(&&"              "&(((&$"             "&(,,,****,,($       $&$"    "$&$"       $(**(&"       ",6>F#L&L&H$B!>80&                 (,026688888862*"                     ""         $&$     "$(*,04:@ D"F#D">6.&  &,.0222.*&$                   "&***(&$                                                                                                         "$&&(&&&&"                          """""                       $(********,*($"                                                             "$&(((($          (28>B!D"D"B!@ <62*&"      &,4:@ D"H$J%J%J%J%J%J%H$F#@ >80$ ߺܶڰ׬ժԤѢФѦҪ԰׸        $*.246:>><82,&                                    &.6<B!F#H$H$D"@ <620*$                                $(.2688:::8640,&"      "$$"             $(,00.,,,,..00.*&                     $(,,..,,*&$"      $,268::864.*&"                         ""                "&(,,*($"                        "$&((***(&&$"          $*.2444200.,**&                                                                      "&(*,,,,*($"                                       """""                           ""                     """         ""&(*,,*($""                  ""$&(((&"                                             $&((((***($""                                                                                                $$&(**,02466420,&                                                           $&&&$"           "$$&&&&&$$                                                                                        ""$$$"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      """                         "$&(*,,,,*(&"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       lbreakout2-2.6.5/client/sounds/darkness.wav0000664000175000017500000001232412140767214015651 00000000000000RIFFWAVEfmt "VDdata$<N EF `5$LZ mb (d ]y$ *zynF _8\$ q   $ C#.^ f1Q  )Q*)'   5- * ! %   $ 7B$G L  Y$U r Qj~Koc 0+ [^"#yqYi;"K$!߽qg|Ru!3 <®Nlv)/)9Uc^SG?7"/ I] 5sլ~$i֡я͸ B#'+PH N3<(DHzMw#F\3;  q ;E ?Jnhv| N Y%:4dmmjT{ l 3 A L$H M,p%lSh09  % C 67k iw&SW $HT ~*zNKEsVZ?^hD%7 *uE iUvCsJ>'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/Makefile.am0000664000175000017500000000147112140767214015355 00000000000000EXTRA_DIST = attach.wav click.wav exp.wav expand.wav extraball.wav \ freeze.wav gainlife.wav goldshower.wav joker.wav looselife.wav metal.wav \ menu_motion.wav reflect_paddle.wav reflect_brick.wav score.wav shot.wav shrink.wav speeddown.wav \ speedup.wav standard.wav wall.wav menu_click.wav \ dammit.wav damn.wav excellent.wav verygood.wav wontgiveup.wav \ chaos.wav darkness.wav ghost.wav timeadd.wav expl_ball.wav weak_ball.wav \ bonus_magnet.wav malus_magnet.wav disable.wav install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/sounds @for file in *.wav; do\ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/sounds/$$file;\ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\sounds\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done lbreakout2-2.6.5/client/sounds/attach.wav0000664000175000017500000000123212140767214015277 00000000000000RIFFWAVEfmt "V"Vfactbdatabyvtx{{{xusqpopqtx{~ytokifffeeddddbbdfjnoqqssttttttuuvvxvvtspokgggjloqsuvyz}~~}{{{}}}{{yxusqqpoooljgfb_\ZWURQPPNNMLLLKIIKLNQSVX[_bfilptvz}~}{{{}~}zytojebaabbb`][ZWVUUUVWZ[\]`adbb_[WURPPQSVX[\_aeinsy~}xtpljiijllnlkigd`][ZXVSQNLKHGFFGHILNRVZ\`adegjloqqsstssqqqqqqqsuxz}{vspnllllnppppqstvz~~{vsolgb_\ZWVUUUVX_ejosxz}~¿~{xtplifflbreakout2-2.6.5/client/sounds/click.wav0000664000175000017500000000576012140767214015132 00000000000000RIFF WAVEfmt "VDdata  ,  "       &  :"" &,,                          պ (:8:4 $*      lbreakout2-2.6.5/client/sounds/timeadd.wav0000664000175000017500000001232412140767214015446 00000000000000RIFFWAVEfmt "VDdata$<N EF `5$LZ mb (d ]y$ *zynF _8\$ q   $ C#.^ f1Q  )Q*)'   5- * ! %   $ 7B$G L  Y$U r Qj~Koc 0+ [^"#yqYi;"K$!߽qg|Ru!3 <®Nlv)/)9Uc^SG?7"/ I] 5sլ~$i֡я͸ B#'+PH N3<(DHzMw#F\3;  q ;E ?Jnhv| N Y%:4dmmjT{ l 3 A L$H M,p%lSh09  % C 67k iw&SW $HT ~*zNKEsVZ?^hD%7 *uE iUvCsJ>'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/wall.wav0000664000175000017500000003710212140767214014777 00000000000000RIFF:>WAVEfmt "VDdata>    '+,*)'#&)$  $,0*! !   ,72:R\ceVF6# !31+2FH5+5CGGVdflncJ, 5a}{_?743J_p|x~_,}yibRL[]X]dx#\v\F+n3-R}%9xzdQNQPA64hYK1-@G?Gh~+TtwsjV=:ujhgghWc$PZ]!Ol;|I>AeJhIY(*OevbG;ud_$K h)[#y k~tF4Of Gu'mRli2MoHdG70@D4b6f+q2dF^&' T=d,l_skF# ocx7 D  ?fh6<'x\=[g}KF1 :"(d4_|l &RB5RBtCwi^p 5Y}FXkSkgL0xW$ }IQcMJj\?o= w91S!-ZQ[/xJ]W=j!a*t~p&_/slt}AN-teocl~]AS]=8Im+mjT|I0>=1eL;V`h|/iU@2T86u1?~`+-}]jVDt2tLMJ -!f{ a7m,2X n!TNg"O!j0$C^@0^NN]f` hCNG;gteD={-%uK7)Uj|J5!DK^$#-tj>c Kt'{9NO[_ E\eDj8sYLoyb!D^q(G; #=ja<5,v"? RY+uZIBE!cW#y@:U(c+o]-p%aq.9pK.U X\[Q`_P-k6*6`<&5{&N4$ P9'9[ uT|hNGu\RP7Gs{xVeo>"`s8la>5*Z5sSC*P4GTS CI:YG(GX o4f( j}{{w"g/x{i\\ 4K'Y aOh+^Vbii{RGw I,}4C Yze70s <a)/@pgzpIas{_ {i ?D^SB wTm:c)9t`(zWEyM!{>n.#=6p2_yI+SKk]2m`D8Zsd{qit4R~#aS Ve]\H ;'"?- lqc`".' 439r6 ;<'UBq(  G 7pfc:5uU_R,QHw2VGl.lyLt]_AXuF'EI%tha% N X ( P[O&g/ V?C inXK)}fN. )!ff7{miX'>rUHd*!O I'S<g6{3;ER1   k " P J%L =`Jko-brZ  O {  X`R6DaiJe{l|o oVfL|}u/L$j {[gCn~?lQ#,hg 6 k ? 0M`5! z/EY21cDJ  a <GyOZk2Sr8^;w2:SO>Qb[s2:dd00e2}O . ) u Y[|}$?@@'n:MY *KJ< "yN5ao71F N{>j(t L gw2 B:\ ~3;N | VP F MBoK& X[Rnel_0@: U 6 w r  3 eT[ E&h&Y _Vb <%M_UA;\-g  L  OaG8k lbeVzcUJ2Wxi+ o(V'/) 9 M v<< Os2ZqYkU^4`   } r 8 1~n=G2No %Xz  B c0 ! @  xUYyPj0E+ G5RX 6gF$x ,Hd?(MP.EkH6 q uGs<2 jYUb A TcHbmgb ]  |H'.(IU{2]Z$+Hdc  $=-J{ I @ UN5{!h l+,i\Ca4  L O , 2 ' hoNyJU`V[l/E'VR%,I9X n f+&L G!O ?W!n  t3;fJ1Q`bi 6}Q,s? !"!f]6Gvp zO{pcY0fj 8"E!6#4#" a |WP$qsz_ / ] ?%ny 0+@!FO|tX94;=` (0+k5]  _ a   ~B xvil() @ A " %h^5EWB8d;r3y $ X z (>H-W3EUqfd Ie G  ULb$QRM$  > , R&y!.\lf;fVS2H<ET-R8cid{1GR)y>0 5 ?R-$f2dji8@ tL,b69m{M F~-6A8 QBg/wC  f ` x a  l dQ*`(?XigJq(D X   ]*`8N ! 2UG1?o(* YuQ-L$|]TJ( NM  PTPlC@  )"N)^;Q6+Z  Ept^n K  I+<x]t9)4 .R%~<A_\*}LquTm+?\pI?_Nd3 3<9J)|'W4qB+v"D> !  U q R k@RE > }'\5`Ny{  N S : $  vWyWOOb*?Q}*-9m2Bp|UX5`_^d&kwEp[kcZ  x Nv!T k 6\U ^D-2 :dE5y9V@:+l6^=f^2*eu`R2\ s A v*Q3XWDCC->s  mmVtn.| s ypC'S u?r:v p"}R0K "L!Lwjleq8 "&z$"),+)=&"g2y ]q&gڰՊηΌ +ݑ,Lw <1 #&()**(C$?4f i%uQۅޝ| @9!#?%$.# mE EGJ CW_Q!i     U<BGZ)C {^V$ x_1n jtA=t0Qm#NU %2F%jD 8G/^U ;# Ar$L!|}28G Z , HcWs(j'S Ss4 N"YJ\ $ t 803Ph-WX,l9!.b7M v c 8 u $cP =qc1 j"Zb;H6J B~Y &8 !##"/ +KG۷wy0EqzgK P!$'('%#!j -@"h 8,JۯuM j88 + CL/n)   j!/c4h igy O(OP  dwHi|0]hon3*(Lk/]*(ZIxccuLc,8mug|ahP%XDB[$)M.] B U < Av^? C 3,jz V &d\6|0gTe# Y M" V C m (`y =6. >bLt h{?3\?9 \!! -?75 i;m]ލeTݛߋI}sd#0'A*,0-H-D,'"3gQ  jگCי@eך١?ntTlVma d(ܛ۟ܜޖ$Y \ #%$ @ { D-  I#$&j)0)%(&P!kr -!|BUg _Gֺiڄ0R6 [`UG MnWG EVR9\VD!XQ *M_H {qW) /KtjrT7 Puvd M g 74Q7Z{4$b; a } Z ) ! AS=fNj|Yh/" +@!K6aAtz 8_~ ! #kv~UnWPr^a8V sn]xTF) _  w`6Brf =MirnK-C{$ -nڗ%i6Պۦ5;$ )+s,,8-),)o&D G <@b6&"{   4\ 8 Euy { l (x hme7Takr>oQs 7C4UK & vdQHNrk } IN ^A `}F'I7F9o , ARZ  64}cc  R ; UF6b -]OV/OmXt,"cn bPa]9 OdܣMڤ\ !}#&|*+)%7 52f8j|RkzEߋ $% %^&&#f"J"2 s 'cW'">FCQ&@mG"3 #GT e . Y , } )  ;.eW`Y =,] f[V391 yNO : wVD H!  { c%:.8UuNs ! !ksM ! ` nyI&8 mhHO9&_0%,* G zHy)Hx"W2 rq smtk 14.3(LVjq1yqF 0 8 3 N 4Uvo-\ nZp55Je}blu@* r8^ m#P&(H*r*& R&i ZnG0Ng1zC|OI? J x%z), . /-V(#D -qZ^^؜RW 2?g׸p6e<G#*.1>34n541',$K 0cf8ۀҗU̦ϴչ4@zo@W[ dWe!r!J%&$$$ *[ E!@!χoAÒ*& $9*Q./@/.-*%@ Be3c0%@'; .$&J(H+i,+s*!(# c0ܪi.ߗAo .~K5k.APmP9FGy@ A OlT! ? {&{\'ӀՔ w\] -nx#B(+0]5777U4/&WnӍE-Ưu۔{O !c#$$%#' ;2{_dD{@AߦP> j$vI~B A G35Q& ""> =pAM mO0eOi`"!^yW:L "B')9){'B$q0|hz`r@?^ӹ?V\ R"$^%$$"my%5[`Ds:d  r 1E,.  + # D\7]xfn! qo;vT$)+-<-* &  tKN-iԒѣtlbreakout2-2.6.5/client/sounds/malus_magnet.wav0000664000175000017500000001232412140767214016513 00000000000000RIFFWAVEfmt "VDdata$<N EF `5$LZ mb (d ]y$ *zynF _8\$ q   $ C#.^ f1Q  )Q*)'   5- * ! %   $ 7B$G L  Y$U r Qj~Koc 0+ [^"#yqYi;"K$!߽qg|Ru!3 <®Nlv)/)9Uc^SG?7"/ I] 5sլ~$i֡я͸ B#'+PH N3<(DHzMw#F\3;  q ;E ?Jnhv| N Y%:4dmmjT{ l 3 A L$H M,p%lSh09  % C 67k iw&SW $HT ~*zNKEsVZ?^hD%7 *uE iUvCsJ>'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/disable.wav0000664000175000017500000001232412140767214015442 00000000000000RIFFWAVEfmt "VDdata$<N EF `5$LZ mb (d ]y$ *zynF _8\$ q   $ C#.^ f1Q  )Q*)'   5- * ! %   $ 7B$G L  Y$U r Qj~Koc 0+ [^"#yqYi;"K$!߽qg|Ru!3 <®Nlv)/)9Uc^SG?7"/ I] 5sլ~$i֡я͸ B#'+PH N3<(DHzMw#F\3;  q ;E ?Jnhv| N Y%:4dmmjT{ l 3 A L$H M,p%lSh09  % C 67k iw&SW $HT ~*zNKEsVZ?^hD%7 *uE iUvCsJ>'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/expand.wav0000664000175000017500000001055612140767214015323 00000000000000RIFFfWAVEfmt "VDdataB3Q19=d6 ~L*J^o. uNBz&0 +j zc@ v(nj- a3D& 48 :^9s|d31M%8q],Rq {:,s/"m,QU!K787hN)A53 b #V+hwk5Mw u Gw J zAaf  i_*>IJY>p+C .6>K j;4Ojfa2eZ? ](sDqzB"(#y u4c-7|  5"   i ^  c DTcX#;e#{QHNRP?.3N 0#i\XR(69rl 74OVY9S2ZP9 , ! - p 63 M  e   ! # O z Y m"7, W-eZhc{jRee|KF%g=N5C%<N; cM62h9mGP.@'k^B 0 G (Pv'|l H [ -LU$ ($ -|sJsu8Yqg<@[!c.$# ^4Z/#vO?42_MI);)   iYlTY\m.)C c F `%BFO`.Y'9eM= 4lX_ N]%x?|! Ph7Aij & #Yf$nI a [#Rrq 'bD  !8;4Ji7SjCnVb\.5H6 `2b! !  ( $ c w _<)F[` + >' 5$h-u 2 VP 6  VI0sXX?c[ a g K U  l u ?> JLC025[22_DJJWQGDA3\O1K l E,XT 9 [WX*E-*fp`zIU  + '>e!>-:QyjNq%|+82KIbD9{ G Z 8K$v  #  > 4 6R- W ~ "X G|Y*;&W V%YX*xN6q8K-f/*'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/speedup.wav0000664000175000017500000004373412140767214015515 00000000000000RIFFGWAVEfmt "VDdataGHX6XG ^ LN?z)E   oISr.8 A z @ Bt g y w,Vzyiܻ+ϔ֔1mwi87LzD A _ + a (0x Gz- ^k   _ c*6E>".x"G)IN:N^ %-1O*Ti2`D,B ! } 5 &=Z; ) Z T $Rd Vu{+b@?go\ q&YY^" 7 ;6# V z5 ^kJy[B&]K :L@AAsT%  E kb#   4 `X/     oI6R#J]4ZY&} K LBY X 8~$:AyV]nd pٰpK܊7'pF ZG "HDN  F9~G*6eOޥݞݽ]Kv v"l"{!3 m; "Ea?ۼ]ԥ^+՞ِݒ:V~ ^d# +H03u4431/*#" `@+8= -ƴ©ƛ|XT3w$% ~ "$'T(}('%#!DxY- }}49Ke0) >F"%(*m, ,7*d'2$t!/{M ;yעTz#+ ֵ8M_1&= Z'+.0/_,'($ 4Ox(+_ӝ۶Cf{")W0^4?40 ,M%' [ ؈оtnjW.QYL,%)-.,):#Z*] (9ݍW gπ"ڇVߕ*j(-00/+%jQ v\T&.*N 4L .N uW X  52R  q  X96U |h;fsr mUy{ݰٵڊw{w!W 4',x->&c @5ˡ(J~) J)3:; 6 ,2 oUMfڜϹGgŷ qnk =!%[(p$Y QP[_?:ܻ7 H 2b% 0.x~d sS~Yn{q@ Qyj - ~& c ; Q_A߫ۋܝPq9DpjSd? < ) i gZ,p.yjm_)+ (&`ri K>'*;#~5s )D0 }hGΨ((շ' $! &Z&\&$!P im9Wz}IG* R Z  o=BQj/a zi +~TbY #*:^7R} )+oJ6aߖ-zY : > \߷ޠpzߟfo  h iR k6vffό< .P $;',)*@)# <@"`ڶr ݬPOpw- %;)*)'"| V1ۈ&cw(  '*, ,`)#%oݟ֔TN:U}4" )S--)q%_!JenCܱ֚ЧM4Iڜ G# +..- *"V O:(6g zc|Lw~]-$K uC5^@f $%; CB"  (-8o/CQ]g N 1 91B`I> vzD9 9grm[[J?m g&s5=vArFQ7.1UTKI*G{m~i? Bqs[#(BT=~^r[@>o <h[h_%uh3EEj@AG`/Z8^y!0g[k  MA:MJ I)"($  %%Q%8  J )+LRT ?qZ'5:&>>$qR38`9EDM"K*;UQZ |; A*`HgEqBf2huKph26 '1 2&.$P6(Nitd/;.lSYNx88 j.iA Jm#-E0/,E- +0(= )'20. # - g@* 7i8"'\ DFK4/ZIA8  ;xxQs "c /&L0Gk BO~* 1 $40$ 3=(()\ 'F[1bi5N.%!6 q/=^0  +* 6 j '4,ST4 # 3I ,Jy{+LhuCyZ7M,x&. dCz,*3<:x~d +vsPI@]J)++)/P0 1F4/iR<s! "  7 cdd*TK_- t3#;b2s5_6u1F32R4Q G{Gb p%dozS(=S @Fm{ G HcFY"  /{z۷dۓG *N!8#$}#O!{cc >$!H)VOtS<+ڑٚ^8a\Wtk._>, P,Aoggo r Q7rd-}|]H l(P91+ L + pK@=J_ os~-g@;"ds ^ k{OuQQ z 9&wߤ߉1 'E vu,&{ f  ; bI9~m;fߢ߮߅t'=)gOB< = 6F;pK0ۏi9&[W c+a63 ) Bz~$ ?cw1`ua*I }|]{Mfy7E~2!~ho* ("\I@ xG oj:.0c<Zh ,|/OKpCi>8&a[(ܯiJ"oRqSp u8 , 2z?יAsY 1Zl N ] (+^VO%QD j  '  (  = hgRgI B# *WOinPj5 l <  [7Ch+>;,]S E G ^Q/g?  # :!]  a\7!sIco8q _P }N?t%Tc~083`nkhfI@xt[w,WN\Y:HuR4Xe C . s _qucKG9{9{&qi @ f92 V == s$J.j WW{s| dG@P "ZN;O_SoV= 5U=_ sxkxs@nt # NKi{u QB# 2_c+^*!  @>HkMr fZd r c7s~nh i"BM 1߽  9 [8YW' g {߻VI|l 4EfeLG.x.>vr1EC'#- Fz: TM"[R~vHz 6 ~9n~ =zB P%7T<,q J x Pg1^MlL + i G J -j #j @ +$3 <5 L5#' % 9WQT h,;B &rIJ$P=q r033_tk )&1Zb7 6iwP&>0A5E <B_9EQ6BF 8p^GPHYY)p^'XA HI-+*3GD\# ;'* 2 '+?%""'F;%1NDDK#< 1 >f  =zo =yDZQc kUb Z}]n]{5U{vy+h^%  TfJ ?jpA= O ("`8 * JOw -! F8;76#2 $ 9 9 5j -l+94 8G !& <i1"7 F,}8O#@FbWc/ c~/ +38'[ f= A !^'[< 2-2C: ) PW1/!6 e, ', 3$ !    G[(f[ {3$ p!8}>X_;`Vfx% V#Cx)N9 ;$ ## Hj|IQ|uHVa2Q^# sr 7knSvhP"a)^Xi19V'2h _>V \L5[gs@0  s YY-7 7I$A4{= f 772J   G,l   [ ?"Cj G `P>)9!giR@.W a~6u1p (Lj.f'5+V,?A+@< w3e j<`Bu   ~UvV)0=`W%-G;7L 8 7XA4??4u`lR2 1u5%;Ey d/a8 7>>sKhlXLv,! _;  &9H90 8.-S < !* j T >a%wA q  R?<?!JNy=3`[$4BF/ct$FW-M)i+l6=H >u8a9xS [ @w, >4 E2O>qo7+7XSIE" OoNRttx~Y+"6sF/P<\Xj  L,fMcB|A  +,i eLaO 57B%2Ef|! %$%%HNL %2 )$ U!/M# JI< K`&EdU[}5tvtH f97P44i5BkpJ+ oOSDx>.spM$q{$/k/;A"# >$ "-  E1 &Y.78 ,9 0=% (?A  ?] =x` 4D(2#.2 /=2!S;"o}=  b2F= ' *>/  +)4;  *;9   <Z>k~ <a 8 I'31.-52 lbreakout2-2.6.5/client/sounds/gainlife.wav0000664000175000017500000001506412140767214015621 00000000000000RIFF,WAVEfmt "VDdata $[;IXl @)[:$b?uMHN:u 0$2|BLK-K4Qfx52SSQF70 0{N  E_=?,BrwXP#ycla Q KcF?%R 6<|  aJ7.dnI 1x 1^q~3MJ^ wH | n2/dv ~v '6vyg~'x j c {S_16vqkkS B R 0 067/=ReMT 3+id"_" 7h4Rn+6l6I l1O]:GOZZ+-4]6f <0Dvt XU]  K :39Wy_!852Tt*M2o}; F{p$dZ hH(Kb 9'}9($.[7;Z-޵xʢ!†܊W !J'\?JHUH- Cb + H3  5{r9}`R ' R*8=02" h b߬%{پ1D (J=D+DDC4eyDŽj`Ezڜ ( #.2/T ] $ 1KX3U)C7<:=%t[=}*J$;l  -})W,9X@J '!]b+z j W&/& %0580n4ث$Ty m ݘt"-$~!G.(PBMӌ 6&1 $| M Zݫp,0]" }$&!3I5j.CG"9/ LfߘΦ̔"L"2GBgF@442Fk*<5rP=9x#Ҳۯ .(o599737#f5ױ΋q'CHK#'[4 ~/81sGdr8ܺ͊(FI/;m><)K2 %]&L `i;U  6])W  h! D#193#d u *=#9Z({O",OŭAV I %U݋>j!q{  "rxjbw$36@@@;'=Lxc F'  Af _d O j TS S  i6 y%E TӧΜy?)B+:/ #%Nb HmUVAKH{ c-1"G S% [aW I& )$iI h6}A1  :>i/ wt}`"  *  w&xEQ ` xIl?.LuY1iVJ"!$ lHNMA,߯8%#&p g6  ^GJMyK^+ tVS,O)&uCPY ^roEޅQr@q@ >tQ-0W@3nbET ]Ya$?\,e8C&g Y.#2Uy{.n\B V h 2 Y " 0 N_kL #f~E_] B9 = .eO rN/J\H suVdK  DT&V J{r%E|z05 6ip/B1*ImPy%j?it.[T"qe c|dx;k|U D~v:6wQ`"v<0  L:gk].p/X  [hFo;[ Jo/ Qz_8v& jPk(*s $ < N#O;2FZ M D  }| |w94\)>,]BPIU7KvvIe>>MrSu!3 9:ruCaLl!UsqBV ,cH#D/m]V.Nc*3Sk$_Qrp*<"\0m:Ab'mZ>q  o1XzVeC.bnO1,y#S-+y38;`Gxr;V?MJ3{4FYT=_VI,ZD1AwtRqt}Rzkqdm1o4u%HrAv=,pOIytp_QnF= V>zNLUP Zzs! C2+4Rp_6;Hz%$kEl-A~l``a l8+ - ]xHTJs)Sp`R;[J:Xl&y:<ygn9sO%^ jsPfJi3kx+@pEcrw2HWgI</~XG&v f!"S '2>qXU&r  v EP"d Ir5p|oKgY+ owW"9kO^2 Q8 (eH`|K-Cp'ztookViQJX6, q)1G|dSaXYYlbreakout2-2.6.5/client/sounds/goldshower.wav0000664000175000017500000005614412140767214016224 00000000000000RIFF\\WAVEfmt "VDdata8\DA M#$Hv GSS{ zv. .TSi"'N XF j݀|"[{b{,% ##Y{5?zD٫Vށx4- MFg= vhf >;7)(?*6Nr8F@n}H$)˱)NJ68t36r+BB!!"`dоxU؆ qܘ(ZWֻ;:4˷g冗H@ hiDb^=erJW{y[024?XFUI Uy(/][O^5<&lD읮)>wXv- 0[W^l@.G@!B%9hzn$ _S@ dQ9zܳF[*-(#/?UBg +ZtkН/fYx'@~d=K#+ɭIRN\]#opҁvK``^]'aCy''U2Ayf ^Dt̿CHN/Z*VT\Rޣ h)/TUFS_'IQ=j*2V4ݰvFU6#eMEUT,k;e<9}M%Oe26KkE{,$.p"%B#8vQ[C$)ha (^*Cot  .X:t/4%VE Xn_9ދ# '"̴̕>>' &ڏPho ]M R;MmU"nU?Ww:+Eb'=>]+>oŊ k3;%mkCESceD014)^h^Tr/!lg2Y2c/{D?+i 4z>orJȮ : |,WT'qF! t :Ap̚v>ӾVCܒSoͶX+[k#3pAU4>?Fe5˂ -6g ,7C;821dw L&ۆ%:CP^)Ν 'U$41w_C74WL6$ +2֕y#ʳoT&,3XΤZ#w7;'@Y 4<Ұ~ jb;\g87=;D "K_CJ/!7f6ᶏA %Iz=*g>ηJgS[v/O7RWm7J^ A lfG0(\y?P%"j*z'|69qb`63>)kLТݚ7C53ݶ6]P>:ӻ*&-׾2 [..7|{46K$C]n90OOvb& s?I*vʟyu3*TR%?GlVo8)] ߫Cc"NK 5< ,f8 Nza/Y#8^ 2xrAY#ko$$.ǬK]$!>i78$" U4 ?h2/2(Y= JvdA*qA?W4lGg$zԠȞ)71CF7) 22'R3>Eca:l>L'Y?+n.(p+';Wß+&IXah'-xI-M+Ԧ10֚O.3q~ZV:Lf )EwE}M"*a<|(K$H S~_=X ^?PXQ%OC &D } { rSI QhseiY"5( `P&f2)'@ڄK-e+$ /Յj)fH T.ޤ%M3F) "Jh(Rz, ۡ K.5{ Γ +6 .' ;Rλ&n&+[`۷6& K2v()!Mez0+u56 y%eߝcl gty $!_ *Z\#߆g?r~`**e+  (N&:Sc B 3)Tܢx]g/ < Bs8WX#f3Dˀ(>h^;[ .- /,(M֍HK wqE *=C#Do,B.I'*%5H#٨6"b/t5>*wBaǂ 'b:R*jD<aK.d7 + )i 9buNO6 )'A=:=)3?biؙܑk q0 gsW ?4pۑg!Y` f/Y!c!'"D 1A'FP"!-  $V|{+s&%<|@0 DOe &=t& (/+7,@LrS$"=c=IF<5]\tΧ݌ uxv+ t ~^  !N { 3<@_63 q'39<+ק(;/GD# 7! r'^L&; &HudF!% 8 X=o $7 `,3RN ` Sj,M9 9o;* ]~-~_w/u\>"Y^M e0p#!"g! mp:L>%),ь>F!63`"̻Y6m֣A+B\o (8݋.l&su؇6,'KR4 ( B&$7'D 8FOE/hr \=h+GNQ  G <d[Y ~)L,\ &%g &K? TGm*#@+k2!U? A^#jm Eކ"ZtYLP+V iGn@rl|=|4!pQ~ da hQaiW~ PV56 " Ico5KL_56}\#u R; t Pw~YMb #IT ` r"QO 8 ml ;l, {s-B E lN$t~ wxU9 P4 Kh(/  o!PKk w*Sus&HNp=C!O`D'd " YQ  {4  Uy%q4nv @.s~& o-YIeKgT`f 0 doGl&rN5h*iekm2!/hhPq8 ygz h]0t<[j m ,,kkf 7 p I.b"=  vYN Q#DTe k :~DK  oK Yq ,xo e1 @h{# 3T m F I2 XQr1E}gc 8 "0^y#\":P ! _1! "^ k^![>,0]&D-=ԥ- rU{~.0 K1jhs9;SUݒ D5 =h*l m#kt i  /h-H Y*<3'2%ufb4.IǸ,33ܨՅn$I4&C`j.,: ۴ϟ =Yΐȯ>j+J"G5X()M!+؜N{=#('D$7*\ t0DZ$0L-ՃG$l^+Cң1tW!ݽ.iX5` <#DG3bjo3%6hDE*WF띾xZ 25>ܹƹL> Sr/ܙE3-G#"Ӳĝ)(C`& xԬ*d@E,1q' A644 E00]n.:d1{#qa@J =QDO-H6:x@ّ MʴFC>6ѤwEV7Y22R7DMʼ7%Gːn0nI EiQG%J f:2ַKJvL_:;UOHe6ѻ6BKŶSv(еUͿh-?c:,:$68$=Ԧ 9e V"XT MR#G  $ [{ Ss 1&VR Gy{E* (6}%L G%C/^&(>6կM5 ˴2@pL'EmNp䫾ޟ9@ \ICP =Gl)YQ/ś??1(0p?'PRާ2AB桝%KCi4(DU)ϟ%Vn$#5T*(8=T+0))T(PQH15NͶP76E@FD;ťq44⽾ Cb%M6 $CفV=׏ߛ./`I<F%&*O-t1 wP < qZ D[#d*}b $C!I9Gm,Y/YQ&;3zؖg]Z6f ||> PsV D)Յ(8œ B"7A&1{6$ O ".U\\Gm*.+f㓵-="iٛb&MMh#>BG.'R:!i1mA- *b}`G kP4;&w85/^=7z)0[%GzW5˙`3s ?GB.Ϸ*a/<,߅ $.\TYM!N [6tGE*'Z]ٟ ! ~>;_s=ZO r|[ mL8d G\ m dV^^}'z~Q~) ai :9 &5[ !ֺ5bG' Y U/b0V/(Iu3f׋(6 *^#^3hP=lW8t CS)7()\5Haww !4 ().9 K-CD3e<# Gw1 4h 7  9pY9* ( K5? ++ K  )2Fn 9 MnV ~ q%li|k{H U V B< 0 TP uWy N q0d ]S J/M"#V:qo}@vؖt CTM(  y! ~`2 /PB py!<q] ]m*/ 8 9!@ wqY f ,4S'  "^ڐ l >J E xbs 6A ~q @)Џ:# K?- _'Y !5׺>AuCBnv92߇8{ zߊZ M9>K^]' +>О1 c(m.ΫU ?"bגl-':?|22ZR8 & W )+(3sw~CU F!pLJDEo"Lu\ -? *\]  $8"( 5Cld eB[ύu=e z['w1 7Pfpx 3P%^!ΎP.^T)/ ~ * .jEK ?0&GD}H "U~  <4AbJ"F gR @ +0 ! L #!TQ U ]fseM .sO 8 )C   tr\ ri  % Ds %@s c S|i r P\ok `F  8rMO _ y!qg } 4;f c Y@UH. /VU-N0dYA  g `s@ 85 h!߉-&d!&$$T$q܇&C ($D/  ' Q/M""Q3}!d) 5ވN#9#Q- 1) 'D 8ym&ZnT z-Qr9{ + i +*6B=1 O e UJZ;(U & s ? ]r{*J W] ,qs .fN[]Nx>/ E}QJ5 c J>V Gl O!TS!   { oDC`ySxvlH]Z ZN xJI! <&) 5 7 s4R7 lJ M)' `B"  <O~j 3XAO:SJ0])CDmuN O N 3MO } F7m^P n gR\cF y9: E W:< m)J]:` x "g TJ K # u^ [ fe &> l/ O| N.(9l r1I( }N  C6gMg#9 C o=cT+G&]&#]'<3/)sh4q4Yfp4'}  * \(p)q%jeh;x`M_1!yyjw-G,p$G-V M0KG)=0/G{ h|6| C` a(Ȋ$/|5"n۴ 3(SA) #BfO"v}zA2u  O9ޚ-A8%**k/z7ȉ2^ !DJ+ 7%72% \l f:u&\\2Bw)1S rLd2N/׋# /02.">rW%4QwUhLV* Lgі>pGq) 1 2[KςKXR4hɣ&{^z_=x*ч)9n`&OC#' e"/ , 6]B( ,|ا=FZx ' LV@-h(%0)ߖ' Ԕ?*/!Ex*[w F. (Nko 0/|Π 7m֚MU: 2/Iؙ`#v! .ǽE&ϓU7Lϥ\'*1! O7#n%Y#> Y2G ֭d m58R٬*.x b"w^/!W )W[[qZ =m E @i]5'_|h P8܄ n$]G Pha$wh $c)Q޻`3]`O0 w' ~Ϛ )}+uh. sփ"6J Ċ3#&ș*S+Y$1:5\? )!+667/P8 l%#66A8Ȣ($9r)-H,1ֽ%+ԆjI3*eZ $-ג("Ku8E^f  -$MDZf Hz!Ym~9V a D AhsB{!J/ 10>!9m:l  Bف s,,k t"(-C|"8."J^$11.P13a/I^$p,KK& -H|W .!M- T+9@q,%l*T&Ӎ6(!(z$7 ڼD z*}|op'!$3w5_ &/mW (Tove j M }.KbvT l1`N 4g.b2  Xv# <["Ar=.~$ K fr i6\\<# !msgO%6  9 E=jsdO )u/#i=> Ae 4zF3_SV "" z tLwm P T\C n2 [1h 4e %a p{_ PXS,L  QUYu0 CFJ 5580 @ >r*6e + O, Y W obI) $oB,U1 Q S/p'<t j*>.] w Z -i6 ]>(  } ?cs" 7/ AH  ,T  t~RC YGt - = ] bPx`  s# 0L gK%X -d5_ @23 \; 8VH +Ji< ; ?17]h * rL}}`,Odc ANVnZـ (FR%".O&'3 P)+? Ra @)ORg) `Wd  &  R EC<Oq be FJAigHpIO1r zE I Jz} /n-_ , n zF\T ^aJ\IjK Xq$ H>_H7   H  'Tn=L@oT 1 j 0eou Z .rj-r I [ak) 2[ 3v~` H 6  >EZ uh o'G [;YNh ?  #N,kJ,jy  eN GLVlH e@TQaM9l#3dN=Z?{ C [ LQ x i X^  u] : LTYBsY 9!. 3.{@ P t7 .g.:TFa[P /@ % |lcuY5sZ 2 F !  , A !02)O [-{|z}}d{h T+?E)p ~B@ | h b7 "8jv Te;h uXA o 1t U4` *K' g =$U (u[ lUq_ 'cT 6 |xh> TG/K: : b UV Q |f) U *v]  z=VHX  e6Lj2 /fV\nvm x<2 v(> -o f[0; ZWjY nCn ]kuI.8IQEQZZ,dr graFO/ZmT[u*u) a"l,y=k5uvI3QE@1}s csaiy9HQyV;Ev,w5lj v>0s4YHle<=:%bw[w?G`FUQ!SP('bA#=UN']f)nB&x29N|NN<#,$wtTTALg@PLk&}uR[\?E#x5Wj o%M dYR7f>e@FxD9F,jG8 \ 9Xa fKQ  k _(ES D$^:P g8j2cEn- !l  N22 *  +I  rW ;jS4Go[PpS< \ ' xmj/} 'P2 /+a r6 0 \&& lj6H9 ` r \Y aA JzW QN}K  k p  JRQ1RMxo; Na6)P4UM GV n]\ks Jkq )M U\OJ Q{#y XMcT  W Iy* YzCxuo(h  \Gp[! sO+w` : 5 [`59Jl   `03* PaI jX >wLF56G?@`,B HW^/gsg/_ &5kf5?N-p od~ ` blP *cwKs_h o5{ "+tnwU  [S `#s R'*3e bxRF9L Lvg Z\ZDyR CM +lq ,*YaHqr , 2 _ 2@ 4w]o 'k wS : PI<I|4 2k   /fCb 3\ gOLqD SM=AH CYr p* CP ' n c|  K(k hWjn  MLw o| :wc >pTL1 kc 6* /U Xq" a- y5 a@  DL p A yRly #r~ mA g Q %3 `.n}hob>t#_$cMvZH[Q_ /%H[~73S\R >t7e |\J n! Yi4? ] #f+#i C  m0m o x*B,@  eDGNEm} *6~ FH/5b~ (P   s^=1 y2W\eSJ8/IkSX 6`bSD]Xr?[WWZxY~*Aqs:sH1XZ'8/G'1FQ[fM;;+Etkf~~jc ZWv'6spkA%XY{8+ ?WJu luOi%|W]uMyT(=+R\^j;z%* 7Oi C33B:wBqv~lC':v)qFL"z|WUJ .jJ!8|\H 7% !#M+0yr0 EqH}HZ 7 UROq v&IM-pw  i~F  KX\ X}ebu[cPoR k Yk|nC,!u/-"?'`i<1<9&nXG Z7?HH<Ec,(WjbA5A"{:(~ STxa0Ai-4"-PR]fR9|B9$)y:_?":_q'CdLpA[|EX7b{^g?fVz)'YDgU/DwzV,JBjboEe SSd lk& >GlXW-8N9;7uyvWm=b]AJk\vF0QI9 _J"0_A{21?c$dflGh'qso*!$6Xam)}i,:f7^3UJ. M _I@gV yrA5H&v%8ee.#F3KYVj<L D3M_& C )xK<uc\X' #Bt|QS jy$5-PW}o:)n >{t.v-q51~b3IL:h| wOLwW4vv8_liIaQ}[1N(D %,B7bAGJ3M N2H9'C l8s |;0Y6z X'..'1B4/62,'$ N=]P$G  L!'/0,'&$ 'sV"\ KV  \ tc`{(unA(y,V tt  k]>o C qIAdD ^X0l?CL.  & e&-.*w'g%| , qcX6D /gp4 J ? gq<r j  doPK ybnx)anUHD?rW{:oq wwGQT"PH^U,* f44lhiZ!s~ N ] p`]3;Z*ke G)6F~0Q$uWh}?URVbvA}DcsMD 3 s @   `m^ p  8b9pRz+^5J{5Ttw UH&]D# Q B}* ],h~~v hA\w{k (7F!?oE:z?W{enfRfd9W7i1f!B ?\cT_ #)ySX3*T\(&D7uwg @"=)s}qG1@W a R  C#D0'1*JP+> c%O>}g ;'; 3d2' m  ;zBc>h  \ 0")P@Gy y '"Y)|B/MFSZN!_Kc,~=P*P-1OG,c@B]mm@-^FXOO ?@ Z3ec 7 S  ,gO! Gsh HasӷSԘԉՏֹص [ݐ9(fF?^ ' J3/lp7i  < [ | -tU:S_;vS6H}? 1:Ge3( FCd*'W80j<?H  /  ESUZ /Lt$C\ki_UKC7& F"8w!|/s ox5 i o   O w Y^;G~M4;j =4AhaUmU.%--(/><`HFB,X!h; vO;1#}H!xS3(/77681oS@DXjx)$"!%8T`QADT[b*S*}G !4b -9D^uoP:72!(EK7!vii^4eIGH0y3|pU[2t<s]OB>Mm'Lv 4Me*Rv3a+?Tgy$,(   tc[O>,|^>" hB)%'# .F]aTKSbit/?[uylfo| &/!uLv^/{qm_G0G}kT.b$uwwnjiijq}=h2|!wA/i2eERT~-+R&u9$uv2u*sL'//:_|"!-KgD$} +_*<C C i ! ^ p |  s - o  I | ( _WRn,<PNh. ]#:w% CwN7<(X>;D_L , M l N4#;4===  0 B  29HTXug<`-+Kw( x 1Z v r  u#sOz "4H[_Q9 Sn<% +   r M ?,CKPOVt)lu ZJ}U>(^f2Y9y~-3<sG M : g wPS oYNq`1]3eyHp 7 Q V<`E0H("I0?oJ "c2hW~%Q_)OIhPN$W(xAF1  i;^Uo2\G>!VGH>(.;1$0M]WWk}u\MG/aKB.  Dg+{aFmykU8s_OIF>+gR=(Z5iO0zc[glaQKG2 (::)#$<HC;;9' ')*4<;9Gd~+Lr  #'DYbl{wfahmij{vsjUEHV[VV]]K608==F^tvmimj]Xgzs}~zrvqeYC%iN:!qS,|_9}+Vy 2e -DTl&Qmz" !mJ#qI_;#kG&  &@Uk*Mh4K`x #%!  ylYG9*V, jJ. ->Pd} 7V}Jm!P<_~#Q|'2@LSWZYJ- jBzQ|@ x>9Z JX#-]+@Pcv"CWYRI?31Gn#E\y :A12A?:<DJIGL[ku6r'?Mc{D`X^*T k ; f s  '   z M4]6hL0j8Ib5Nm60:h{[r9xCbxE 6 F x  ~ h (   Y x # CNf\{p#f2Pj56RW/B8 PV$)9x ( 7TBX!#! q G}gwmK: O p & R E  t  W3%[WdRQi #AhC;~|2!`)GG" \!s#$%&& &$2#|!y(V * g ]~`vrgm?v!L#U_r[3cj. SX "%'y* -P/01w2133t32332 20/."-+(&$"pCs/)^ g dI^H[r+` @  4pC@n?d9:_ n 1 kFldzn-Y0)QfC)h|"]gP l }  jg%vw.P&n3qWh   \b7J6^)6_ g'!`I   0<S=l`%>|*j fCc@z)5<   nZY7\v;g^m;_)HVW"3 =E?|p }-5;Y(0t^Gk0&Ka5z!^`#K1U6])U[#:'#M1] hJ|}aBbs~9h"xNV0y;v{5+-_#@9)` 0Z#`; GB+ gl ?7+~PQ1GDq5b\|)to_rC6| #nnP/uY]emJT5N3P-dc!O`v>.2LcO@e=%C LD8k+Y X :J+5z$e1!saV nG<yP )!?n&O^`]aBJxUpH6Rfkw}F0,)'[m< T},<#~ ^.O9 ^J 5#V'uiJY;=@7 F|*Ot}/%Z"T&0  bas( a  | [](n\Q=k(uLW tZU>  ) +5}Y p : t @c |z\#wSpwt|zsc 0W E rI8W07GU^&Q P  ?v#L>U x "*$$$%%$#9#?" !0[u , */AH}H|e nZx"o)# U  P   T  k  F  YV E:j?x ""a _ A"rEՖ{W]!9j (d53 =F 8XGWK 5H  V\cM@v5  `RD.".N1Y_TScYE26hGzs@:~.`7JFTYuA >)$&dBk$5$/xR(Ct'qe{%:%-t,"(.u.nBO IuUAt.B$YB72U#3=7.)l/ efO_?VL!iNctB@18LwGnM*_>|,@DZ(s%;e,^.`hS$Ey~(LN{Wv:.rVuBT9-b'wM/_f/]+6gK# +,p92*a|U:  i 6(GxgtRdAgGX#U+|QV-4i+tNi2h'_U3f3b" b&BAIR\7U:NHLh/"<I0ewuP]nu=PB/][EdK0G' - ) q:=&>Q`ZDu[ &\G)aC.V jEkIb8%21~\ eZ e T/y v \pV?$Ƈs HHv v H*|5N9/y 1Bp++\*3e7|5-K$HEB(?V?מ݇߇ߡ*W'g;P/y  sp?Ԅ;YEv HHv v Hy -e7N9-H.pp++\ /N97;N9/K$_ sBߵ(V΄m(מ݇BJila!=4&y y 1mVΛ R ס1_ v _ *e7!=e7( Y(ԞB++\(|57;7;|5*1s+Bp(V΄mV׵+;Pi_7;(1b"b"mVβ$iيH1_ _ _ *e7!=e7( Y?Ԟ+++.K$|5 ? ?|5*HsY(m̄ʄm?ٵ Tj[N9(14&4&H.+Մm;iĞs 11_ _ Hy -N9 ?|54&.p?ԞB++._ -N9 ?!=1K$_ \BV΄ʛțȄ?ٵ([nYe74&(4&v \Y(҄ʄRipEv 1_ _ 1K$/7; ?3K$E(?ԞB++BK$1N97;N91(1s+BY?ЛȲƲƄ?ٞݡ-_p[7;*14&K$ p?ЛȲ$iipE_ 11y (17;!=1b"Hs(?ԵY+BB+4&e7 ?@7;1K$_ sBY?Єʛțm?յۇY iLrrRN1y H1b"4&_ .+՛ȲRi ո4&/e7!=|5(\V?ՇB+._ y 1 ?D@e7*HEBpVmmV?ٞ݇+_ $RXxXx$R/H _ b"v \YԛȲRiيv 4&/N97;3K$s(m?p+._ K$|5 ?@@N9+_ E+Ypߵ?VV(յۇpB ?tlae7v b"H.+Մʲ$R b"-e7!=e7(\V?ׇ+\1 ?BD!=-H.+pVV?ٞ݇߇p[CzpFK$1K$K$VΛȄʄʇ\v 114&1N9e7+v \pמY+14&|57;7;e7-b"HsY(??(׵۵۵۵ٵۊN9p~la3 (b"V΄Vβ$ V1H_ 14&e7!=e7( sٞYBBBB+._ b"37;N9|5-4&1 \B((ٞݞݵ۵YWovpH(1K$4&y _ .B??m ;Ğs_ _ v v b"3 ?!=1b" ppYBBBYppB4&3|53/(b"1v \+ٞݞݵp_ ;Pli@b"v H(4&b"1V $ȇ߸ 11!=7;1(.+Yٵ+s(--*4&K$1_ .p(յpY՞ݍ J'gUcN9_ 1/-(ߞݞ՛„ʞs\ssE14&|57;|5*y 1_ .s+pמ+ 1y ((4&y 1v pهYYߞ?Vm(ҡ-U_Db"_ +|5e7+.YVΛVεYs1y -31+b"1v \BמYs.v 4&(K$y _ s+p߇߇ߞ??(E*@@4&_ HK$e7 ?@-E+Y׵pBpppY߇BH(+*K$y K$b"HE+ߞݵ۞݇Bs._ *+4&HBݵ۞݇߇ߞ(?V?N9 ?*H+BF ?4&v \s+Yٞp߇Ys1y b"*(b"1 EBYpYYB+HHE+BBBpߵ(YH/N9(_ HK$7;B!=+EE\\+pp߇߇߇pB.H1111K$4&K$H.\++++E11_ sBp*-1y 1N9e7(...\+YYBB++E _ y _ \\E\\E_ v  v EYBb"+sH4&|5e71E\. v sBB+sssEv 11v v H_ \\EE\sE H1Hv v _ v spյۡ1+e77;/sEBBs..\+E  _ HHH_ ...EE.Es\EE\v \HK$b"\. \\ _ ss.ss ..EEEE...E.E\\E.Es\.\\E _ v EEv _ _ .\E.\s\.EEEEE..E..EEE...E................................................E........E...E...............E.E. .......E..E..EE.....................E\......E.EE...........E............................E........EEE.........E...E\EEE\\ss\E EEEE...E.........EE\\\\\\ssssssE v _ _ v v v v v .Esss\\\\\E.....................EE\\\\\sssssss\. v H_ _ v v v v  .E\sss\E\\\E..E....EEE.....EEE.EE\\\\ssssss\E. _ _ _ v v v v  .E\s\\\\\s\.........EEEEEE\E\\ss\E  .EEE...EEE....EE...EE\\\\\\ss\\.  v v  E\\E..E\\E..........EE..E\\\\\sssss\.v v v _  ...Ess\EE\ssE..............E..E\\\\\\ssssEv _  _ v  v  ..E\ssE.E\s\......E..EEEEEE\ss\\ss\._ _ v _ v   .EEEssE.Es\..............EEE\\\\ssssssE.v v v _   E\EEs\..\\....E.......EE\\\\ssssss\Ev _ v v  v .\\.\sE.\E.EE.EE.......E\\\\\sss\\s\E _  v   EE.EssE.E..E......EEEE\\ssssssE  HHv v v v v  E\..ssE..\\E.E.. .....E.EEE .....EEE.....E\\sssss\\._ _  H_ v _  _ ..\ssE..EE.  v v EEEssE..E\E..E\\.  v ....EEEEEEE...E\\sssEv H_ H1v v v v  v ssE.\\v  H1H_ v v v EE.E\\\\\\E..v v  ...EEE\\s\_ H1v v  v v \s\E _ _  11_ .EE.EssE.\s\E. _ H_ ..E\ss\. ..EEEEE\\\\EE...E\\\sss\\.1v 11_ _ _ v  v E\EE.. 1Hv v H11_ E\..ssssE. v v v Esss\E\\s\E. v _ _ _ v v .EE\\\\\\\\\EE........E\ss\\s\\.H_ 11HHH_ v ssss\\...v 1Hv v v v ...sss\EEEE v v v .\\E...EE\ss\E.v _ _ _ _ ..E\ss\E.........EEE\ssssss\H1 _ H_ v _ _ v  v v Es\\sss\\E...EEH11_ v ss\E.EEE v _ v .\ss\E v v v v _ _ _ .E\ssss\\\\\\E..E\\sss\\ss_ Hv _ _ _ _ _ v v _ v s.Ess\\EE.EE._ 11_  \s\E..E\\E v _ v ..\ssE...v H11H_ .EE\\ss\..E\ssssssH  _ _ _ HHv v v .sE.\s\E..v H_  _ _ .\ss\E.EssE EE\EEE\\EE......E. .E\ss\\EEEEE......EEEE\\\s\ v v v _ v \s\ss\._ 1_  v E..EssE.\s\.E\s\E........E.......EE..........E\\\v H...\EE\\E.. v ..E\\E..EEE.....E\\E...EE...E...E\\ssE_ H. E\ssE\ssE...EEE...EEE.EEE....................E\\Ev 1H. E\s\.\s\..E\E.......EEE.....................E.v _ .EE..\E...EE...................v .EE.EEE...E.......... ....E.........lbreakout2-2.6.5/client/sounds/menu_click.wav0000664000175000017500000000576012140767214016156 00000000000000RIFF WAVEfmt "VDdata  ,  "       &  :"" &,,                          պ (:8:4 $*      lbreakout2-2.6.5/client/sounds/bonus_magnet.wav0000664000175000017500000001232412140767214016520 00000000000000RIFFWAVEfmt "VDdata$<N EF `5$LZ mb (d ]y$ *zynF _8\$ q   $ C#.^ f1Q  )Q*)'   5- * ! %   $ 7B$G L  Y$U r Qj~Koc 0+ [^"#yqYi;"K$!߽qg|Ru!3 <®Nlv)/)9Uc^SG?7"/ I] 5sլ~$i֡я͸ B#'+PH N3<(DHzMw#F\3;  q ;E ?Jnhv| N Y%:4dmmjT{ l 3 A L$H M,p%lSh09  % C 67k iw&SW $HT ~*zNKEsVZ?^hD%7 *uE iUvCsJ>'n*k:r [F@GI+R* ]fj`*q/=6  qHS_,])P!k0hQZP|<{|<NZ4Ie$}753c=}0? J@n7qFiOj%n!#9 .5K N%-U1suQ__q>- 9 |N rUsbbD/< XJ.=9&G 0 2  %++00) @5(G/)w>%:!:(2[;B!>0 2Fzh]{G\:A0dhGQ{%'O*|-\<"[Ap#P9wr&G:^VMuIK$ZgisS1<K)Qu/x`AR^&7bi~ow Hv $6T ,3ye|F 3n/CWIQXp/B/bzE]Ow" !D( P/E)aPL! a&*=## =CB *D%6=0<$ !) $ $(; 5- 8+0e= ">yKP ^DU%b` P*4U-G #Vq =B'%]`S^E{d6c lMnrw'f:l@Br ` -|g%~d(BA6 T&O<C." 'O8  + ) <9 ,   + ."1  7 4:A?Z Z')G_"Q" oM79  h v \y `i" ""i` s\#^ P0@7% 0 (  -) :&lbreakout2-2.6.5/client/sounds/looselife.wav0000664000175000017500000001506412140767214016024 00000000000000RIFF,WAVEfmt "VDdata $[;IXl @)[:$b?uMHN:u 0$2|BLK-K4Qfx52SSQF70 0{N  E_=?,BrwXP#ycla Q KcF?%R 6<|  aJ7.dnI 1x 1^q~3MJ^ wH | n2/dv ~v '6vyg~'x j c {S_16vqkkS B R 0 067/=ReMT 3+id"_" 7h4Rn+6l6I l1O]:GOZZ+-4]6f <0Dvt XU]  K :39Wy_!852Tt*M2o}; F{p$dZ hH(Kb 9'}9($.[7;Z-޵xʢ!†܊W !J'\?JHUH- Cb + H3  5{r9}`R ' R*8=02" h b߬%{پ1D (J=D+DDC4eyDŽj`Ezڜ ( #.2/T ] $ 1KX3U)C7<:=%t[=}*J$;l  -})W,9X@J '!]b+z j W&/& %0580n4ث$Ty m ݘt"-$~!G.(PBMӌ 6&1 $| M Zݫp,0]" }$&!3I5j.CG"9/ LfߘΦ̔"L"2GBgF@442Fk*<5rP=9x#Ҳۯ .(o599737#f5ױ΋q'CHK#'[4 ~/81sGdr8ܺ͊(FI/;m><)K2 %]&L `i;U  6])W  h! D#193#d u *=#9Z({O",OŭAV I %U݋>j!q{  "rxjbw$36@@@;'=Lxc F'  Af _d O j TS S  i6 y%E TӧΜy?)B+:/ #%Nb HmUVAKH{ c-1"G S% [aW I& )$iI h6}A1  :>i/ wt}`"  *  w&xEQ ` xIl?.LuY1iVJ"!$ lHNMA,߯8%#&p g6  ^GJMyK^+ tVS,O)&uCPY ^roEޅQr@q@ >tQ-0W@3nbET ]Ya$?\,e8C&g Y.#2Uy{.n\B V h 2 Y " 0 N_kL #f~E_] B9 = .eO rN/J\H suVdK  DT&V J{r%E|z05 6ip/B1*ImPy%j?it.[T"qe c|dx;k|U D~v:6wQ`"v<0  L:gk].p/X  [hFo;[ Jo/ Qz_8v& jPk(*s $ < N#O;2FZ M D  }| |w94\)>,]BPIU7KvvIe>>MrSu!3 9:ruCaLl!UsqBV ,cH#D/m]V.Nc*3Sk$_Qrp*<"\0m:Ab'mZ>q  o1XzVeC.bnO1,y#S-+y38;`Gxr;V?MJ3{4FYT=_VI,ZD1AwtRqt}Rzkqdm1o4u%HrAv=,pOIytp_QnF= V>zNLUP Zzs! C2+4Rp_6;Hz%$kEl-A~l``a l8+ - ]xHTJs)Sp`R;[J:Xl&y:<ygn9sO%^ jsPfJi3kx+@pEcrw2HWgI</~XG&v f!"S '2>qXU&r  v EP"d Ir5p|oKgY+ owW"9kO^2 Q8 (eH`|K-Cp'ztookViQJX6, q)1G|dSaXYYlbreakout2-2.6.5/client/sounds/reflect_paddle.wav0000664000175000017500000000045212140767214016773 00000000000000RIFF"WAVEfmt "VDdata),)Z<Ӹ XP^d<ʘ7{ԮY\<[w" #  a Ck)V.R=/8{6#,6q> ?D?L^g[cI%/B-753^+*3.sЭ N:1Vy3ڀ:1L ;8 93#10)f$""!t lbreakout2-2.6.5/client/sounds/reflect_brick.wav0000664000175000017500000000045212140767214016634 00000000000000RIFF"WAVEfmt "VDdatac[*lCwMJ p<?J8 p؝k(>5 lA dS $* Ru/ $_tψ2<X \ ;,=4Q9Pl39U%?s !Ж8} oTҌ[9Or@ i֎ 6:8b *U~~r  lbreakout2-2.6.5/client/sounds/shot.wav0000664000175000017500000003164612140767214015024 00000000000000RIFF3WAVEfmt "VDdatax3 %/5X' J!ZU3;j9g^&*Y/jF}On+'{Nn)o|)F${jh}gd',H8&<~! =Lwhv=<^9gl]Cwbs2s>mA{V  Wc up] 2  T zZ %*1J5Y#p8xfb,+r?x:' /u  c|S wpD5*$/4s';iD;9h d4  q@ jZ{\ PZBI=8L Ov37Z s J    s Uw`Y Nl@-O)%sr)o $ L%v'~.H 3~u ! N`% 5 }["cGA v+(%c#//.1@8D^ :*3!m dGTm.DpiUNBb"նtn![ F 4--noI%+)(:)&5f{ v` u O!j$"b1s, $ ;Cej2p& xK$_A7"s sh!14E<1!a CM]8zZ6Կhh gf ;tC pM l!0U#_F V-CA O +v zxe^dqY %4'j  Db8  C!"UVc;% p ?pڵ2dńv>  Il$U7{Y#&K!.:  nkyD_+"7$ >$- FfGg,ldnb :[* g{Yސ Q#1BUTE 4!l  (m7'~ z4QfMaFޜs@: >mכ T.?T'A[mљ m'" m%}'^, 4 7 I0 0&  O*(h %oV@ Mi> mvo 6~ *ma3"N4S?CYEx)`oָCc&'w;(u";(ոZ. %L58gg]̴B& $mܸ֐f3B"HN~DX?A5.1* O3O-=E3j .d &-LiH/״ aP gyա^s؃q2ݲF+Ǔ^ѝGn$Rx.޻EX [ P-yg;jc  D &*&/H4AV0/(|aلsZ 2tw1P7 A*HQmo3"xO]sJ 2h5}+)*  } T1 $z m ]<5Z MτFJ7)H½*tҁi׽-o$ N$gynݪ~Nq]£ӂq!ͫʧTxg7_RڇɃǸ[ѡ1dd #II  0 |uԏW?уx!#$6>8&.#2 / .W)/M0!& r!$޻kS^ Be ! ǒ^)8)"=", L%7!n $ )|#/"|!/';;  1)4uj`۶/ :zw Hf$c XCUE! eF` 3L?@}|EPNCX/H   BVm W w+O8Ur)޽{ښYM8Eq,[h6`ږ @,E Q >0"(/te D$ :  Vf 1.W \F(9ѻT0ߛ݊ &:EQ \*UןL峺"\WX]+դ.vbv  3"[.+}ǀםD* 9,qOs Z/bHj !!\ ?Cډ!PV !!K `4t'0 &#$##ss 8R$ D o1 o߅,k4ϑHlG; - ?ރt1$' F .% (.v2; gOI " 9NG3;ߚqZ 4 \y&F(h#uY>- " `gG.# j y9R3 y [>[F/^?&w"D  m 7!-29U sgp _u$Zs@-?2 ' -d'C.`!!< ?_X. 5Փ  XFΛ<ؿ Xݽ;BB *U11 e )\ qx  ϏM?ànGy׎" @B"WVq8(!NvVq)V#n,e* Pvi.T v~e>t  k .t̡Ceܧ ڱ$; ,"j  k! e.a).45e0 7dS*Ot;!E O8T0 ZB/@tY/laV&N jWX .S' U pR"v =p+k܂ATf z))G;O  Gwf B Oi?0N$  wm ,\Ԁ?֩J$%K''G[ !jP Z $);&m3 1 N2)Y-gsNPE 1^.ޡ CqJRR0ё #{b* Nrn \ yrp  >^fv+15 T( NJs*2 p* D[ !) P8-W}  pGPE- ]uGD l 2 n4 _#!h( +}*Yqk|[6 hBb *9+3ezQ % P~_YEoo#0 ,=),%$Z i Y) Mz_QxXf\D*w b{~A  ! pp ] =(,T. &#wN :  7"mD]4 :) t B _ ]  ;;E'?VkqIO1&V &>" ^9 Q7%nenh9#q@BF-9Tl WcHJ> QDMW'wMoar [FZ ZDn,*x*j -eZ  t fs ! 5N`e7KMPqDcUTޤ JL.R Mn}1L > KVgt R[ 3 V>8$ u6DFL  UVXQ _]!cd 0@ ( AxPo+ $ Be  `&)~H+68g1E!6"VEC{g: j(M|l6  8ISW|u p K W ZwOJi |Q&H50g_#v<A?( d  mRf .m ] .mH D$wazQP.gh QS%HU 1R@9 t jL:2.*I2 m >z  6 A N w 0y;d } #ux ; T5)8mc`oo[O]:jiL P1 1D!^'9b< O "U  a!i 4Px0 * & /i83yF$ wp N x8KSH , 1S !xe j+S A 6 3+i ; d 7 jG1k;'q$T i5g\, :t^` 7Mg8\{m!MIE&ji:A.o;@AuuJ:E-lgfJE-EFT}&e _ qGDXI@? 0Nv*?}h/I< 3C`q ;gO (Ocu$#LFk_:JS.F- ~:" BS`\,sT;}"f!;FA7o" | hV J  s } ' `:CGS%}Aj " B^ 5"qJZD w FjU#0$kZ6`QS5,`,o<7 y p 4 . W=k\GAz=~ j z #jR@^ nQNZh *WjIErosaW(ub-N : t ZI  $8-X 6T,|,2.59 T hj7],**) 6$~\\C < t]R)  <=rIhwa xy)5Pn +dY FU L2 x^b M #FryDHz5a8_L#  L>;oU_Kqg~%u\/bQR,l6JIJG!7^;cjp1GY@ auQQ-Ewoo :U 1#gg.5|dR @{!0Bsr' =@]V)?dek >y 9\*R L^]}^9noc'{;HLt}7:Ik6<$ aKDTEFy) 9\m6j$0--^Ff# Op!w NvL-g\Bxg V/z Sh 9{=a$9P?`18.CtkKv+.sLQrJ#C^zCB;kuvkBl@<;f~ s3O5(P#74''+'vvH2oeiKJA-@D$8;>y RW!b^AzgSZnW$ *]0+lP ~x!38?>xCO|YCYQn Zqj_Dhj]"SW|%s ymHlWR3 Axe<AnU0>4V&H~wBDh4ASS k[n{[!0hC:elY'z#@FS]?lw3&F*0txlg6@'rL} R8a eD('R@7K>}RIMcx[Gx+[+7 V~]&VLbx}h}?'<@ 8W(-;23)"  0$ lbreakout2-2.6.5/client/sounds/metal.wav0000664000175000017500000006252412140767214015150 00000000000000RIFFLeWAVEfmt "VDdata(e9rz)c>i ]nGJME- R>E1$  LPn^vMUcxLn-x!G.,{ht]ZV$OFa-n*,lh< 3v v {Tf9w:g\23SN5AvIO=2\8X%;WN0>9u9=y eo$G-@eS>sVow.b=5{nKFxR6$h5 n^=0R* E6hbL  RszseQ>HMAb.tU=7\2}&y\ tLg4AUN)5c7}82'ezOw"Z|UA3FDWf_.#y`. 5 l"`vTV3Pn&{w 7l CaB&a\L.[ 5pc ri7 ;K.nf{kC-u"(>C",QOC`|6_BhZyo%!b 1S}V6 gsJ`Z1i0DG-C/2%_RY?^& >kN:i \*DK5:U_+ 5Q)}u'0*QK~XvM*&'T`]+zYjcWLE"?7%R'RHo}e4lGlIURc2Eka6SQ7Yefa,%Lqh*vYNNN93/%9N6|Yj7<y;;n6QguR9-. =g6v&Ppfl]xAV7WMa)MzTj[ s:7u:<o  )/ K<h?N*p0@$(r[m&>hv)Mad~nuh*CIV>aT$d?h*DCn?90AYI&EpHkh{)f*8xpOF8;nMX18A(<U_7w3O{b4x601xAj\t VM_`$EY2<g1D|b9x1=k%\$taLC.P~<[6](O}.an@ Bj#n$c[[eaoG~oeuveMd[vx 8/XL-4a\V@1PZd`tLPXuxf;l6bp%;t/ $ vUIv+8QFM,rd^8?<6%yKZFdyakKWgLPIbDPv F{4;^f/'? V] \Sh':Ir$O\r!\ExY}llDt00C.uT76:d9OY6O(Ofm5l7j_dAdlEz-,_P+FJ1\aU&rF|oKrq`o2 6f@0Er;^ ];2Q:Nu{E(M@:O? T7 ?zOea,vnh{YS.c$j;Bo /?6hdoW_ pvP)dc/s|yss*BR6!A1b,d(J:jkP|R (ThjQ2 ~k#6.HZ8:mo{[-N =S{l8o lds S &_cI# h oua&\UH'1Z":exT9z d@QDS dyB"9h% { Oj*TVbYkQ_' -mPT= C L2}iVIy VO|Y5#K H` t+7.; $B  lp[ E&=<e<~hq=bJ+\U6 Kk f V ,VRQ=U[1QtcP rI ,~l*OnkLy "u dPON> E[(M_% q5}@$)?5Z0fsjt 3M<t \ [+CvV  Nl@@YWG[ et F  dB|mhnj 9#T K NT5%wFKihP L{yeQVJ 9sUP* h "g D sS| r7]Osc E=*] N[B4Pm(U ; *Q! DM]Vr e {'^ %3 I4r) <;|}; f/bYa/|@^`,t1l?^r2wCks`\PX-,, ,')E P8bIH ag<cFr$@[] GZ?m}#6a 8@$#N1 Cf9{l&A)g tN& rXPU3 q!C`ILd]S x=m diy-NEd&G3}QaH;l+ y*C>@ Wjc{*e.!n/hEZhrm,&4f2gCz/CPX !*Ry"'nkkWYU /.5`J s "/RC e  U\ a Ol i)kb@2 C5 +6 a}\!1 W; : kO YH\ ca 7 X  &F62|iD ,! 't{ADgm>"sf Aa V%NS Bz; Q`0(Hr |!nv2o<.? 7mnG}# /*Z.`f  o$/N/ J OR!vZCjM5| `V  6v3<45n {B(c +>`X6< n iaGu r6 P }.Ln}m[ 9~ R)&_V C,vM5kV3J] oq @  W Z8o<a,]neCM*G e?x 90\HO j>4g A[; H &$ aCq@ضFfQ1`gBS TIOzmmB SfqV  F7u 0Y/[pg2K!hR֣#!$f; mMS ݐ $$:e/ X/;  =c ~ }H~=*וw  "si|CC}f!tP$V-9ߨ;j! @xlw|V] A)m d /P$<//rg]o (i $+E  @ i&- nv /Q) G"O4x  ^{g[*?? <)s s \p .f (}qBSl%M q 8-JxO ^aNHz _ jj#B$ L \k+)V\К݈. a)v ?5 .yCdd( 6^ p| s +L7 MDy (>B&A 7t2;PNVHJ<A kn&H 2k ;d^bVi b"(Nog& [ ]-; [ - 7V+!+ P3  ..)p Y# G/ B3Z(x6 Bl$;2.BS F$#_)."[D Ny-& GK6k ''- xg Gy\ 7DA &rd! qNUoX(5ݳ߶TXnKvkRt\;N8,.Iа!1%y3߉l b'/tE?y( ڔ$} 4pad 3/87m. 9gP_=| [ SHU9hK1Z T` AX-=#p_ - e&[U \g) [r 6#ZT?`_ ' Kk g_Y$) {8Q_ j<4;&tWճL8  Od f^y`Ftb" Ph h7?rw?hj'C/_ Z۶)d-8~{9! ATKpbRo j Bp ) GΎ` gAE+NA`%.YU3b/8eZz M S(Q 1*ه EV5&VPS! 0 r  \"Pt ? G n Pbs."*C|.ڶZWw Q%d /, zn\?; (`% ?y "h u<.8_ H ߕ5Q e%7P d VFwwn` szN H`0"0~ J{S coе]-!i7SrfHs AmfK 1 _@[ (e)1df0-l1 C<{ 0*u!g(( ˸ "C 3U-g*Z ZjK Z" nӆ׆ F/ ,1~X: rGzf 'FFe1## +N}R'"fc ^ ]^]0,m "y˻ i 2" }c~)'01- z j3I D^_jt& lf1&$K;8{c p3 t%G!pں- 2#% t{55T9!O,y :9  ='Kc&'W  {4:$!%L M"[ ' 7yMd]`(P# j %@ bٚޣ) *(: .7" ܯ( wA)74A4  Y15s qA˙n%|.A!1,c6? *r.w$ Z'co2 UNjM "5 }%TG! g NvK4)1 ZW 8>w+{^"r U ǯS _.8 W3W7v9% KG a4V7ANrB _CW+B> \)@&@T&{ 3r Yl%0{- M` dNݤ|O2%W L<} )6(k&P AVtHB  < .3"! JIz5S| 4`$h n#Sq X&̕ލq&._w9 .G$ke CC p)n$"im -Ni1 $ <`9ՖS d<N/ g6FUc{ |kxjx { ~D&c< $^[n]KIX 1  .eP c: MQ %!A2Ͻ O (z UkG3R^ &3G%5yp.q_W}= )g `1B~ q  .ݑ" /,-12&a / SC/ Rk8+t! *(|& ڛކF' e5zK S\Q7ce##,f~WMC(zr [ d5= ̗] !),# p 5l^W N} !S'HuYEww5J$.e  JNh] um8&u= oA')kWTT}z'! 0T9 HjIWd 1Y)  J۳W; %-qc Lu$2C h'Ajj f I,R; b ~b Y F=+= n` %"0@&#oDމm>  ^Xu  rl% IKrgg P 3 ujs 4g.P^ z >a HU(O q:H)M%K l K X  ]Ps nn|* wߩ $TL L >l`IG@ byv G'R\<X+ ]Yl, +[dsj.R%!# "K# !~n:~SKr K,oio,6 uzW" auW2! W 5L ' :f:p: |G  x,lܖUݫQ%] Y K}\`}lpx eAwO T( > KjϚ 4m a(C :0*/ tCSk۩!q)F $~HL+3 ^2 p (/!@ B;9YrbWt H7q/ WolvCZ  }= <=pH! Oטʎ8 `D *:<1" p:3/m3 o4 i f/] +&S6/*$ {Ը@ kLp%UNYs.Q|@NbT" >0maI3U mhc *) )  6 q{ufjVR}O;W5ceo #hkL21dpdM ;-<Rh pb!{wB5T m  Au$ 4qO !f(at VZ  7 M L8cT'G +p bNz?b.}M )B .<}y@ wY /f v u h.5@_ Xߞu rf \DQ f @bd:k X:"T." kuA xhztbc f5F4,Z[ }~c O IkTzDaZ -WW:7hb o"!px}  !um6; wvHcM;IOEz)ob  V a9}&9- Mm8{D 9-WO7%>$ojt  5vr/% LK LO oT !lb 1i)cY_ 6IP_Y ; [k3Nj" XG;Db+:Q1r7l 7Z}'5_5Q{_* j  N z?%{#X H[K%Ar$ <*  z LhB QM L, 7^xB9K<^ &l'Tve C/% Q\*g%m2^vm;aU977! $ sDw?o8. RI70 Pi3TR SD+$45 /QLqOn0K.C8c,WH-Ev~  =jr m -|4 _Lf1@tY>/`&%R7J( j 2m8; x1, la FUn {D<}SIX5&%pPnr#i9@ ~t\? } pLF`U\U#eRpv^w7dbVYE,Z@J@T Y:eZE EroA[gCc1BzOcoeu=X/{E%s%qItfGhlT&6PKt;vo {479go>O5Pa &'{;!cV*$nge|< =7{!$-:M3L):JM"%]s !k7m?[r}*N4)Mo~tocP]s\;!!,-Kh}~!v N0{E@/k54+`C<9R8w)YdoMlGzF_gu=`|ah 5O|Y7aO4<1b$BQ+<pN}V<LIvWb>Eb|xUr4xws2L WZ`( Jv}~ dwus'm7uDm7q/%A|~o6Pz=B1~j Xe^:'J0qMbU-+]^_g#dcrw~ZS$!zx2kx^(un V1J C/+A>#j4ea=>$da]?\,x[07`PF/ a {!qC)0Lj"e'CEjA%C9 ~:$k ,+ E6. [{mz1hDCh!*"NPCFCWq|D~(nD&kG}z/E%pOP6+Q{bbzdw 4a.m {r[4.^(78:pRQw`ab[VYSFa'pMA"vrZ_<`+& }#{P`{jBDt|dd4N'ANPVd I\5nu{_MlM5mH}7. !?; V@3G' \dP uA7kz"|hHqQcnHMOE=twnnrhLYN3B73J>i+kpj_,7^]D nwVj/I`@>Q%D(89pmxzcbUbBa cNDDvs6,+S.&Ba\Rm/),Qlbreakout2-2.6.5/client/sounds/menu_motion.wav0000664000175000017500000000674412140767214016401 00000000000000RIFF WAVEfmt "VDdata  "                lbreakout2-2.6.5/client/chart.c0000664000175000017500000004102012140767214013245 00000000000000/*************************************************************************** chart.c - description ------------------- begin : Mon Sep 24 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "config.h" #include "chart.h" #define CHART_FILE_NAME "lbreakout2.hscr" List *charts = 0; /* list of all loaded level set charts */ char chart_path[512]; /* path charts where actually loaded/created from */ int chart_loaded = 0; /* true if highscore succesfully loaded */ SDL_Rect chart_pos; /* used to store size. x,y is set when drawing */ int chart_gap = 10; int chart_level_offset = 0; /* level offset (name's left aligned, score's right aligned) */ extern SDL_Surface *stk_display; extern Config config; extern StkFont *cfont, *chfont, *ccfont; /* normal, highlight and caption font */ extern FILE *hi_dir_chart_file; /* ==================================================================== Local ==================================================================== */ /* ==================================================================== Reset charts ==================================================================== */ void chart_reset( Set_Chart *chart ) { int i; memset( chart->entries, 0, sizeof( Chart_Entry ) * CHART_ENTRY_COUNT ); for ( i = 0; i < CHART_ENTRY_COUNT; i++ ) chart_add( chart, "............", i + 1, 10000 * ( i + 1 ) ); chart->entries[0].score = 300000; chart->entries[1].score = 200000; chart->entries[2].score = 150000; chart->entries[3].score = 100000; chart->entries[4].score = 70000; for ( i = 0; i < CHART_ENTRY_COUNT; i++ ) chart->entries[i].new_entry = 0; } /* ==================================================================== Create/delete set chart. ==================================================================== */ Set_Chart* chart_set_create( const char *name ) { Set_Chart *chart = calloc( 1, sizeof( Set_Chart ) ); chart->name = strdup( name ); chart_reset( chart ); return chart; } void chart_set_delete( void *ptr ) { Set_Chart *chart = (Set_Chart*)ptr; if ( !chart ) return; if ( chart->name ) free( chart->name ); free( chart ); } /* ==================================================================== Read entries of a chart from file position. ==================================================================== */ void chart_read_entries( FILE *file, char *file_name, Set_Chart *chart ) { char buffer[128]; int i; for ( i = 0; i < CHART_ENTRY_COUNT; i++ ) { if ( feof( file ) ) { fprintf( stderr, "Unexpected EOF in '%s' in entry %i... reading of highscore aborted.\n", file_name, i ); break; } fgets( buffer, 128, file ); buffer[strlen(buffer) - 1] = 0; /* remove newline */ strcpy( chart->entries[i].name, buffer ); fgets( buffer, 128, file ); buffer[strlen(buffer) - 1] = 0; /* remove newline */ chart->entries[i].level = atoi( buffer ); fgets( buffer, 128, file ); buffer[strlen(buffer) - 1] = 0; /* remove newline */ chart->entries[i].score = atoi( buffer ); } } /* ==================================================================== Load all highscores from path. If not found create chart with one set 'Original'. ReturnValue: True if successful ==================================================================== */ int chart_load_from_path( char *path ) { FILE *file = 0; char file_name[512]; char setname[1024]; char aux[4]; Set_Chart *chart = 0; /* full file name */ sprintf( file_name, "%s/%s", path, CHART_FILE_NAME ); /* clear chart list */ list_clear( charts ); if (!strcmp(path, HI_DIR) && hi_dir_chart_file) { file = hi_dir_chart_file; rewind(hi_dir_chart_file); } else { /* open file */ file = fopen( file_name, "rb" ); } if ( file ) { /* test if it's new format or old one. */ fread( aux, sizeof( char ), 3, file ); aux[3] = 0; fseek( file, 0, SEEK_SET ); if ( strequal( ">>>", aux ) ) { /* new format: load all set charts */ while( !feof( file ) ) { /* check if next sign is an '>' else skip reading */ aux[0] = 0; fread( aux, sizeof( char ), 1, file ); fseek( file, -1, SEEK_CUR ); if ( aux[0] != '>' ) break; chart = calloc( 1, sizeof( Set_Chart ) ); /* get name: >>>name */ fscanf( file, ">>>%1023s\n", setname ); chart->name = strdup( setname ); /* entries */ chart_read_entries( file, file_name, chart ); /* add */ list_add( charts, chart ); } } else { /* old format: load single chart as 'Original' */ fprintf( stderr, _("Converting highscore chart as format changed.\n") ); chart = chart_set_create( "LBreakout2" ); chart_read_entries( file, file_name, chart ); list_add( charts, chart ); } if (file != hi_dir_chart_file) fclose( file ); } else { fprintf( stderr, _("Highscore chart doesn't exist in '%s'... creating new one.\n"), path ); chart = chart_set_create( "LBreakout2" ); list_add( charts, chart ); } if (file != hi_dir_chart_file) { /* test if writing is allowed without changing actual contents */ if ( ( file = fopen( file_name, "a" ) ) == 0 ) { fprintf( stderr, _("Write permission for '%s' denied.\n"), file_name ); return 0; } else fclose( file ); } strcpy( chart_path, path ); chart_loaded = 1; return 1; } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Load highscore. If it doesn't exist try to create it in HI_DIR if this fails fall back to ~/.lbreakout and create highscore there. ==================================================================== */ void chart_load() { chart_loaded = 0; /* create list */ if ( charts ) list_delete( charts ); charts = 0; charts = list_create( LIST_AUTO_DELETE, chart_set_delete ); /* load highscore */ if ( !chart_load_from_path( HI_DIR ) ) { fprintf( stderr, _("Unable to access highscore chart in '%s'.\n"), HI_DIR ); fprintf( stderr, _("Trying to use config directory '%s'.\n"), config.dir_name ); if ( !chart_load_from_path( config.dir_name ) ) { fprintf( stderr, _("Unable to access highscore chart in config directory... won't be " "able to save any results. Sorry.\n") ); return; } } printf( _("Saving highscore chart in: %s\n"), chart_path ); /* compute size and position stuff of highscore */ char *cheader = _("Name Level Score"); chart_pos.w = stk_font_string_width( ccfont, cheader ); chart_pos.h = ccfont->height + chart_gap + /* title + gap */ cfont->height * CHART_ENTRY_COUNT + /* entries */ chart_gap + /*gap between caption and entries */ ccfont->height; /* caption size */ chart_level_offset = stk_font_string_width( ccfont, _("name.-----") ) + stk_font_string_width( ccfont, _("Level") ) / 2; /* level offset centered */ } /* ==================================================================== Delete resources ==================================================================== */ void chart_delete() { if ( charts ) list_delete( charts ); charts = 0; } /* ==================================================================== Save chart in directory it was loaded from. ==================================================================== */ void chart_save() { char file_name[512]; int i; Set_Chart *chart = 0; FILE *file = 0; if ( !chart_loaded ) return; /* full file name */ sprintf( file_name, "%s/%s", chart_path, CHART_FILE_NAME ); if (!strcmp(chart_path, HI_DIR) && hi_dir_chart_file) { file = hi_dir_chart_file; rewind(hi_dir_chart_file); } else { /* open file */ if ((file = fopen( file_name, "r+" )) == NULL) file = fopen( file_name, "w" ); /* either no access or it does not exist so try this */ } if ( !file ) { fprintf( stderr, _("??? Highscore chart loaded properly but cannot save? (%s)\n"),file_name ); return; } /* save all charts */ list_reset( charts ); while ( ( chart = list_next( charts ) ) != 0 ) { fprintf( file, ">>>%s\n", chart->name ); for ( i = 0; i < CHART_ENTRY_COUNT; i++ ) fprintf( file, "%s\n%i\n%i\n", chart->entries[i].name, chart->entries[i].level, chart->entries[i].score ); } if (file != hi_dir_chart_file) fclose( file ); } /* ==================================================================== Check if this player entered the highscore chart and update it. ==================================================================== */ void chart_add( Set_Chart *chart, char *name, int level, int score ) { /* add new entry at blind end of chart */ strcpy( chart->entries[CHART_ENTRY_COUNT].name, name ); chart->entries[CHART_ENTRY_COUNT].level = level; chart->entries[CHART_ENTRY_COUNT].score = score; chart->entries[CHART_ENTRY_COUNT].new_entry = 1; /* sort algorithm is stable so first sort levels then score */ chart_sort( chart, SORT_BY_LEVEL ); chart_sort( chart, SORT_BY_SCORE ); } /* ==================================================================== Sort chart with stable algorithm (bubble sort's ok) by wanted value. ==================================================================== */ void chart_swap( Chart_Entry *entry1, Chart_Entry *entry2 ) { Chart_Entry dummy; dummy = *entry1; *entry1 = *entry2; *entry2 = dummy; } void chart_sort( Set_Chart *chart, int type ) { int j; int changed = 0; /* use entry dummy as well so count is CHART_ENTRY_COUNT + 1 */ do { changed = 0; for ( j = 0; j < CHART_ENTRY_COUNT; j++ ) switch ( type ) { case SORT_BY_LEVEL: if ( chart->entries[j].level < chart->entries[j + 1].level ) { chart_swap( &chart->entries[j], &chart->entries[j + 1] ); changed = 1; } break; case SORT_BY_SCORE: if ( chart->entries[j].score < chart->entries[j + 1].score ) { chart_swap( &chart->entries[j], &chart->entries[j + 1] ); changed = 1; } break; } } while ( changed ); } /* ==================================================================== Draw highscores centered in regio x,y,w,h ==================================================================== */ void chart_show( Set_Chart *chart, int x, int y, int w, int h ) { char number_buffer[24]; int entry_offset; /* y offset of entries */ StkFont *font; int i; /* adjust x,y so it's centered */ chart_pos.x = x + ( w - chart_pos.w ) / 2; chart_pos.y = y + ( h - chart_pos.h ) / 2; /* title = name of levelset */ ccfont->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; stk_font_write( ccfont, stk_display, chart_pos.x + ( chart_pos.w >> 1 ), chart_pos.y, -1, chart->name ); /* caption */ ccfont->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; char *cheader = _("Name Level Score"); stk_font_write( ccfont, stk_display, chart_pos.x, chart_pos.y + ccfont->height + chart_gap, -1, cheader ); /* get entry offset */ entry_offset = ( ccfont->height + chart_gap ) * 2 + chart_pos.y; /* entries */ for ( i = 0; i < CHART_ENTRY_COUNT; i++ ) { font = cfont; if ( chart->entries[i].new_entry ) font = chfont; /* name */ font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( font, stk_display, chart_pos.x, entry_offset, -1, chart->entries[i].name ); /* level */ font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; sprintf( number_buffer, "%i", chart->entries[i].level ); stk_font_write( font, stk_display, chart_pos.x + chart_level_offset, entry_offset, -1, number_buffer ); /* score */ font->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_TOP; sprintf( number_buffer, "%i", chart->entries[i].score ); stk_font_write( font, stk_display, chart_pos.x + chart_pos.w, entry_offset, -1, number_buffer ); /* change offset */ entry_offset += font->height; } stk_display_store_rect( &chart_pos ); } /* ==================================================================== Draw highscores centered in regio x,y,w,h but in a more compact way (no title). Also don't use chart_pos (except for x). ==================================================================== */ void chart_show_compact( Set_Chart *chart, int x, int y, int w, int h ) { int px = x + ( w - chart_pos.w ) / 2, py = y; char number_buffer[24]; int entry_offset; /* y offset of entries */ StkFont *font; int i; /* caption */ ccfont->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; char *cheader = _("Name Level Score"); stk_font_write( ccfont, stk_display, px, py, -1, cheader ); /* get entry offset */ entry_offset = ( ccfont->height + 2) + py; /* entries */ for ( i = 0; i < CHART_ENTRY_COUNT; i++ ) { font = cfont; if ( chart->entries[i].new_entry ) font = chfont; /* name */ font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( font, stk_display, px, entry_offset, -1, chart->entries[i].name ); /* level */ font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; sprintf( number_buffer, "%i", chart->entries[i].level ); stk_font_write( font, stk_display, px + chart_level_offset, entry_offset, -1, number_buffer ); /* score */ font->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_TOP; sprintf( number_buffer, "%i", chart->entries[i].score ); stk_font_write( font, stk_display, px + chart_pos.w, entry_offset, -1, number_buffer ); /* change offset */ entry_offset += font->height - 1; } { SDL_Rect region = { x, y, w, h }; stk_display_store_rect( ®ion ); } } /* ==================================================================== Clear all new_entry flags (done before new players are added to chart when game over). ==================================================================== */ void chart_clear_new_entries() { int i; Set_Chart *chart; list_reset( charts ); while ( ( chart = list_next( charts ) ) != 0 ) { chart->entries[CHART_ENTRY_COUNT].score = chart->entries[CHART_ENTRY_COUNT].level = 0; for ( i = 0; i < CHART_ENTRY_COUNT + 1; i++ ) chart->entries[i].new_entry = 0; } } /* ==================================================================== Query set chart by this name or if not found create a new one by this name. ==================================================================== */ Set_Chart* chart_set_query( const char *name ) { Set_Chart *chart = 0; list_reset( charts ); while ( ( chart = list_next( charts ) ) != 0 ) if ( strequal( name, chart->name ) ) return chart; /* not found so create it */ //fprintf( stderr, _("First chart query for '%s'. Creating this chart.\n"), name ); chart = chart_set_create( name ); list_add( charts, chart ); return chart; } /* ==================================================================== Query chart by id. If id is invalid return 0. ==================================================================== */ Set_Chart* chart_set_query_id( int id ) { if ( id >= charts->count ) { fprintf( stderr, _("Chart index '%i' is out of range!\n"), id ); return 0; } return (Set_Chart*)list_get( charts, id ); } lbreakout2-2.6.5/client/misc.h0000664000175000017500000000746012140767214013116 00000000000000/*************************************************************************** misc.h - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __MISC_H #define __MISC_H /* ==================================================================== Target of a shot or a ball. ==================================================================== */ enum { SIDE_UNDEFINED = -1, SIDE_TOP = 0, SIDE_RIGHT, SIDE_BOTTOM, SIDE_LEFT, CORNER_UPPER_LEFT, CORNER_UPPER_RIGHT, CORNER_LOWER_LEFT, CORNER_LOWER_RIGHT }; /* ==================================================================== Load background according to id and draw background to offscreen. Return Value: loaded background surface ==================================================================== */ void bkgnd_draw( SDL_Surface *bkgnd, int id, int to_offscreen ); /* ==================================================================== Confirm request. Darkens/gray screen a bit and display text. Return Value: True if successful ==================================================================== */ enum{ CONFIRM_YES_NO, CONFIRM_ANY_KEY, CONFIRM_PAUSE }; int confirm( StkFont *font, char *str, int type ); /* ==================================================================== Display a info message (gray screen a bit and display text), send a MSG_READY when player has clicked and wait for a remote answer (timeout 10 secs). Waiting may be cancelled by pressing ESCAPE which results in sending a MSG_GAME_EXITED. Return Value: True if both peers clicked to continue, False if the connection was cancelled for some reason. ==================================================================== */ int display_info( StkFont *font, char *str, NetSocket *peer ); /* ==================================================================== Create shadow surface for specified region in surface. Return Value: Shadow surface ==================================================================== */ SDL_Surface* create_shadow( SDL_Surface *surf, int x, int y, int w, int h ); /* ==================================================================== Enter a string and return True if ENTER received and False if ESCAPE received. ==================================================================== */ int enter_string( StkFont *font, char *caption, char *edit, int limit ); /* ==================================================================== Display text blinking. ==================================================================== */ void write_text_with_cursor( StkFont *sfnt, SDL_Surface *dest, int x, int y, char *str, int alpha); /* ==================================================================== Enter nuke mode and allow player to disintegrate single bricks by spending 5% of his/her score. ==================================================================== */ void game_nuke( void ); /* gray screen and display a formatted text, directly update the * screen */ void display_text( StkFont *font, char *format, ... ); #endif lbreakout2-2.6.5/client/slot.h0000664000175000017500000000411212140767214013133 00000000000000/*************************************************************************** slot.h - description ------------------- begin : Sat Dec 15 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __SLOT_H #define __SLOT_H #include "hint.h" typedef struct { char setname[32]; int diff; int player_count; /* 0 - MAX_PLAYERS-1 */ char player_names[MAX_PLAYERS][32]; int player_cur_level_id[MAX_PLAYERS]; int cur_player; /* 0 - MAX_PLAYERS-1 */ int player_scores[MAX_PLAYERS]; int player_lives[MAX_PLAYERS]; int gameSeed; /* for bonus levels and FREAKOUT order */ } GameSlot; /* ==================================================================== Load/save a game to a slot. 'slot_load' returns 1 on success and updates gs. 'slot_save' takes content of 'gs' and saves it. 'slot_delete' deletes the savegame. ==================================================================== */ int slot_load( int slot_id, GameSlot *gs ); int slot_save( int slot_id, GameSlot *gs ); int slot_delete( int slot_id ); /* ==================================================================== Build info hint from game saved to slot 'slot_id'. ==================================================================== */ void slot_update_hint( int slot_id, Hint *hint ); #endif lbreakout2-2.6.5/client/config.c0000664000175000017500000002611612140767214013422 00000000000000/*************************************************************************** config.c - description ------------------- begin : Tue Feb 13 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include #include #include #include "config.h" #include "../common/parser.h" #ifdef _WIN32 #define MKDIR(d, p) mkdir(d) #else #define MKDIR mkdir #endif Config config; #define CONFIG_FILE_NAME "lbreakout2.conf" /* check if config directory exists; if not create it and set config_dir */ void config_check_dir() { char level_dir[512]; snprintf( config.dir_name, sizeof(config.dir_name)-1, "%s/%s", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME ); /* test and create .lgames */ if ( opendir( config.dir_name ) == 0 ) { fprintf( stderr, "couldn't find/open config directory '%s'\n", config.dir_name ); fprintf( stderr, "attempting to create it... " ); MKDIR( config.dir_name, S_IRWXU ); if ( opendir( config.dir_name ) == 0 ) fprintf( stderr, "failed\n" ); else fprintf( stderr, "ok\n" ); } /* create levels directory */ snprintf( level_dir, 512, "%s/lbreakout2-levels", config.dir_name ); MKDIR( level_dir, S_IRWXU ); /* create themes directory */ snprintf( level_dir, 512, "%s/lbreakout2-themes", config.dir_name ); MKDIR( level_dir, S_IRWXU ); } /* set config to default */ void config_reset() { /* levels */ config.levelset_id_home = 0; config.levelset_count_home = 0; /* player */ config.player_count = 1; strcpy( config.player_names[0], "Michael" ); strcpy( config.player_names[1], _("Mr.X") ); strcpy( config.player_names[2], _("Mr.Y") ); strcpy( config.player_names[3], _("Mr.Z") ); /* game */ config.diff = 2; config.startlevel = 0; config.rel_warp_limit = 80; config.addBonusLevels = 1; /* controls */ config.k_left = SDLK_LEFT; config.k_right = SDLK_RIGHT; config.k_rfire = SDLK_SPACE; config.k_lfire = SDLK_y; config.k_return = SDLK_BACKSPACE; config.k_turbo = SDLK_x; config.k_warp = SDLK_w; config.k_maxballspeed = SDLK_c; config.grab = 1; config.rel_motion = 1; config.i_motion_mod = 120; config.motion_mod = 1.2; config.convex = 1; config.linear_corner = 0; config.invert = 0; config.i_key_speed = 500; config.key_speed = 0.5; config.random_angle = 1; config.maxballspeed_int1000 = 900; config.maxballspeed_float = 0.7; /* sounds */ config.sound = 1; config.volume = 8; config.speech = 1; config.badspeech = 0; config.audio_buffer_size = 512; /* graphics */ config.anim = 2; config.fullscreen = 0; config.fade = 1; config.bonus_info = 1; config.fps = 0; config.ball_level = BALL_BELOW_BONUS; config.debris_level = DEBRIS_ABOVE_BALL; /* various */ config.use_hints = 1; config.return_on_click = 0; config.theme_id = 0; config.theme_count = 4; /* multiplayer */ strcpy( config.server, "217.160.141.22:8000" ); strcpy( config.local_port, "8001" ); strcpy( config.username, _("player") ); config.mp_diff = 1; config.mp_rounds = 1; config.mp_balls = 3; config.mp_frags = 10; config.recv_limit = 500; } /* load config */ void config_load( ) { char *str; char file_name[512]; PData *pd; /* set to defaults */ config_check_dir(); config_reset(); /* load config */ sprintf( file_name, "%s/%s", config.dir_name, CONFIG_FILE_NAME ); if ( ( pd = parser_read_file( "config", file_name ) ) == 0 ) { fprintf( stderr, "%s\n", parser_get_error() ); return; } /* assign */ parser_get_int( pd, "set_id_home", &config.levelset_id_home ); parser_get_int( pd, "set_count_home", &config.levelset_count_home ); parser_get_int( pd, "player_count", &config.player_count ); if ( parser_get_value( pd, "player0", &str, 0 ) ) strcpy_lt( config.player_names[0], str, 31 ); if ( parser_get_value( pd, "player1", &str, 0 ) ) strcpy_lt( config.player_names[1], str, 31 ); if ( parser_get_value( pd, "player2", &str, 0 ) ) strcpy_lt( config.player_names[2], str, 31 ); if ( parser_get_value( pd, "player3", &str, 0 ) ) strcpy_lt( config.player_names[3], str, 31 ); parser_get_int( pd, "diff", &config.diff ); parser_get_int( pd, "starting_level", &config.startlevel ); parser_get_int( pd, "rel_warp_limit", &config.rel_warp_limit ); parser_get_int( pd, "add_bonus_levels", &config.addBonusLevels ); parser_get_int( pd, "left", &config.k_left ); parser_get_int( pd, "right", &config.k_right ); parser_get_int( pd, "fire_left", &config.k_lfire ); parser_get_int( pd, "fire_right", &config.k_rfire ); parser_get_int( pd, "return", &config.k_return ); parser_get_int( pd, "turbo", &config.k_turbo ); parser_get_int( pd, "rel_motion", &config.rel_motion ); parser_get_int( pd, "grab", &config.grab ); parser_get_int( pd, "motion_mod", &config.i_motion_mod ); config.motion_mod = 0.01 * config.i_motion_mod; parser_get_int( pd, "convex", &config.convex ); parser_get_int( pd, "linear_corner", &config.linear_corner ); parser_get_int( pd, "random_angle", &config.random_angle ); parser_get_int( pd, "maxballspeed", &config.maxballspeed_int1000 ); config.maxballspeed_float = (float)config.maxballspeed_int1000 / 1000; parser_get_int( pd, "invert", &config.invert ); parser_get_int( pd, "sound", &config.sound ); parser_get_int( pd, "volume", &config.volume ); parser_get_int( pd, "speech", &config.speech ); parser_get_int( pd, "badspeech", &config.badspeech ); parser_get_int( pd, "audio_buffer_size", &config.audio_buffer_size ); parser_get_int( pd, "anim", &config.anim ); parser_get_int( pd, "fullscreen", &config.fullscreen ); parser_get_int( pd, "fade", &config.fade ); parser_get_int( pd, "bonus_info", &config.bonus_info ); parser_get_int( pd, "fps", &config.fps ); parser_get_int( pd, "ball_level", &config.ball_level ); parser_get_int( pd, "debris_level", &config.debris_level ); parser_get_int( pd, "i_key_speed", &config.i_key_speed ); config.key_speed = 0.001 * config.i_key_speed; parser_get_int( pd, "use_hints", &config.use_hints ); parser_get_int( pd, "return_on_click", &config.return_on_click ); parser_get_int( pd, "theme_id", &config.theme_id ); parser_get_int( pd, "theme_count", &config.theme_count ); if ( parser_get_value( pd, "server", &str, 0 ) ) strcpy_lt( config.server, str, 64 ); if ( parser_get_value( pd, "local_port", &str, 0 ) ) strcpy_lt( config.local_port, str, 6 ); if ( parser_get_value( pd, "username", &str, 0 ) ) strcpy_lt( config.username, str, 15 ); parser_get_int( pd, "mp_diff", &config.mp_diff ); parser_get_int( pd, "mp_rounds", &config.mp_rounds ); parser_get_int( pd, "mp_frags", &config.mp_frags ); parser_get_int( pd, "mp_balls", &config.mp_balls ); parser_free( &pd ); } /* save config */ void config_save( ) { FILE *file = 0; char file_name[512]; sprintf( file_name, "%s/%s", config.dir_name, CONFIG_FILE_NAME ); if ( ( file = fopen( file_name, "w" ) ) == 0 ) fprintf( stderr, "Cannot access config file '%s' to save settings\n", file_name ); else { fprintf( file, "@\n" ); fprintf( file, "set_id_home%i\n", config.levelset_id_home ); fprintf( file, "set_count_home%i\n", config.levelset_count_home ); fprintf( file, "player_count%i\n", config.player_count ); fprintf( file, "player0%s\n", config.player_names[0] ); fprintf( file, "player1%s\n", config.player_names[1] ); fprintf( file, "player2%s\n", config.player_names[2] ); fprintf( file, "player3%s\n", config.player_names[3] ); fprintf( file, "diff%i\n", config.diff ); fprintf( file, "starting_level%i\n", config.startlevel ); fprintf( file, "rel_warp_limit%i\n", config.rel_warp_limit ); fprintf( file, "add_bonus_levels%i\n", config.addBonusLevels ); fprintf( file, "left%i\n", config.k_left ); fprintf( file, "right%i\n", config.k_right ); fprintf( file, "fire_left%i\n", config.k_lfire ); fprintf( file, "fire_right%i\n", config.k_rfire ); fprintf( file, "return%i\n", config.k_return ); fprintf( file, "turbo%i\n", config.k_turbo ); fprintf( file, "rel_motion%i\n", config.rel_motion ); fprintf( file, "grab%i\n", config.grab ); fprintf( file, "motion_mod%i\n", config.i_motion_mod); fprintf( file, "convex%i\n", config.convex ); fprintf( file, "linear_corner%i\n", config.linear_corner ); fprintf( file, "random_angle%i\n", config.random_angle ); fprintf( file, "maxballspeed%i\n", config.maxballspeed_int1000 ); fprintf( file, "invert%i\n", config.invert ); fprintf( file, "sound%i\n", config.sound ); fprintf( file, "volume%i\n", config.volume ); fprintf( file, "speech%i\n", config.speech ); fprintf( file, "badspeech%i\n", config.badspeech ); fprintf( file, "audio_buffer_size%i\n", config.audio_buffer_size ); fprintf( file, "anim%i\n", config.anim ); fprintf( file, "fullscreen%i\n", config.fullscreen ); fprintf( file, "fade%i\n", config.fade ); fprintf( file, "bonus_info%i\n", config.bonus_info ); fprintf( file, "fps%i\n", config.fps ); fprintf( file, "ball_level%i\n", config.ball_level ); fprintf( file, "debris_level%i\n", config.debris_level ); fprintf( file, "i_key_speed%i\n", config.i_key_speed ); fprintf( file, "use_hints%i\n", config.use_hints ); fprintf( file, "return_on_click%i\n", config.return_on_click ); fprintf( file, "theme_id%i\n", config.theme_id ); fprintf( file, "theme_count%i\n", config.theme_count ); fprintf( file, "server%s\n", config.server ); fprintf( file, "local_port%s\n", config.local_port ); fprintf( file, "username%s\n", config.username ); fprintf( file, "mp_diff%i\n", config.mp_diff ); fprintf( file, "mp_rounds%i\n", config.mp_rounds ); fprintf( file, "mp_frags%i\n", config.mp_frags ); fprintf( file, "mp_balls%i\n", config.mp_balls ); } } lbreakout2-2.6.5/client/comm.c0000664000175000017500000003462312140767214013112 00000000000000/*************************************************************************** comm.c - description ------------------- begin : Fri Aug 2 2002 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "../gui/gui.h" #include "../game/game.h" #include "game.h" #include "client_data.h" #include "bricks.h" #include "extras.h" #include "comm.h" extern char net_buffer[MAX_MSG_SIZE + PACKET_HEADER_SIZE]; extern int net_buffer_cur_size; extern int msg_read_pos; extern char msgbuf[MAX_MSG_SIZE]; extern int msglen; extern NetSocket client; extern StkFont *chat_font_error; extern int client_is_connected; extern int client_state; extern Game *game, *local_game; extern Player *cur_player; extern Paddle *r_paddle; #ifdef AUDIO_ENABLED extern StkSound *wav_shot, *wav_reflect_paddle, *wav_reflect_brick, *wav_attach; #endif extern int game_stats[2][7]; extern int game_over; extern int client_comm_delay; extern int stats_received; extern GuiWidget *dlg_pauseroom; extern List *client_levelsets; extern int client_recv_limit; extern void set_state( int newstate ); extern void init_next_round( void ); extern void display_final_stats( void ); extern void open_pause_chat( char *text ); extern void close_pause_chat( void); extern int last_ball_brick_reflect_x; /* HACK: used to play local sound */ extern int last_ball_paddle_reflect_x; /* HACK: used to play local sound */ extern int last_ball_attach_x; /* HACK: used to play local sound */ extern int last_shot_fire_x; /* HACK: used to play local sound */ /* handle modifications game::mod_* which were either copied * from local_game or received via network, apply the changes to * game and clear these entries. the current game entry must've * been set to 'game'. Ball and shot updates have already been * applied to the game context. */ #ifdef NETWORK_ENABLED static void handle_mods() { BrickHit *brickhits; int *extras, count; int i, j; #ifdef AUDIO_ENABLED /* play sounds for attached, reflected balls or fired shots */ /* HACK: in a local game use externals from game/balls.c * last_ball_*_x to play sound stereo. this cannot be used for * network games */ if ( local_game == 0 ) { if ( game_get_fired_shot_count() ) stk_sound_play( wav_shot ); if ( game_get_brick_reflected_ball_count() ) stk_sound_play( wav_reflect_brick ); if ( game_get_paddle_reflected_ball_count() ) stk_sound_play( wav_reflect_paddle ); if ( game_get_attached_ball_count() ) stk_sound_play( wav_attach ); } else { if ( last_ball_brick_reflect_x != -1 ) stk_sound_play_x( last_ball_brick_reflect_x, wav_reflect_brick ); if ( last_ball_paddle_reflect_x != -1 ) stk_sound_play_x( last_ball_paddle_reflect_x, wav_reflect_paddle ); if ( last_ball_attach_x != -1 ) stk_sound_play_x( last_ball_attach_x, wav_attach ); if ( last_shot_fire_x != -1 ) stk_sound_play_x( last_shot_fire_x, wav_shot ); last_ball_brick_reflect_x = -1; last_ball_paddle_reflect_x = -1; last_ball_attach_x = -1; last_shot_fire_x = -1; } #endif /* handle brick hits and create new extras. the extras * are moved independently by the client and destroyed on * collection but DO NOT TAKE EFFECT */ brickhits = game_get_brick_hits( &count ); for ( i = 0; i < count; i++ ) client_handle_brick_hit( &brickhits[i] ); /* these collected extras take effect */ for ( i = 0; i < game->paddle_count; i++ ) { extras = game_get_collected_extras( i, &count ); for ( j = 0; j < count; j++ ) client_handle_collected_extra( game->paddles[i], extras[j] ); } game_reset_mods(); } #endif #ifdef NETWORK_ENABLED /* copy stuff from local_game to game */ static void comm_recv_local( void ) { Ball *ball, *ballcopy; Shot *shot, *shotcopy; /* copy balls */ list_clear( game->balls ); list_reset( local_game->balls ); while ( (ball = list_next(local_game->balls)) ) { ballcopy = salloc( 1, sizeof(Ball) ); ballcopy->x = ball->x; ballcopy->y = ball->y; ballcopy->attached = ball->attached; if ( ball->attached ) { if ( ball->paddle == local_game->paddles[0] ) ballcopy->paddle = game->paddles[0]; else ballcopy->paddle = game->paddles[1]; } list_add( game->balls, ballcopy ); } /* copy shots */ list_clear( game->shots ); list_reset( local_game->shots ); while ( (shot = list_next(local_game->shots)) ) { shotcopy = salloc( 1, sizeof(Shot) ); shotcopy->x = shot->x; shotcopy->y = shot->y; list_add( game->shots, shotcopy ); } /* copy score */ game->paddles[0]->score = local_game->paddles[0]->score; /* copy level_over */ game->level_over = local_game->level_over; game->winner = local_game->winner; /* modifications are transferred to game::mod * and handled by the same function that does this * for net updates below. while handle_mods() * resets the mods in the game struct, the * local_game mods must be cleared as well */ game->mod = local_game->mod; handle_mods(); local_game->mod = game->mod; /* copy new level when altered in bonus level */ if (local_game->blRefreshBricks) { local_game->blRefreshBricks = 0; /* HACK HACK HACK HACK.... did I mention this is a hack? And a really bad one indeed. */ memcpy(game->bricks,local_game->bricks,sizeof(game->bricks)); client_redraw_all_bricks(); } return; } /* parse incoming packets and handle them according to the client's * state */ static void comm_parse_packet() { BrickHit *brickhits; unsigned char type; int *extras, count; int i, j; char name[16]; int handled; /* the list of shots is reset before as shot_positions * will not be send when no shots are available */ list_clear( game->shots ); while ( 1 ) { type = (unsigned)msg_read_int8(); handled = 0; if ( msg_read_failed() ) break; /* no more messages */ msglen = 0; /* game unpack functions require a position pointer which is always 0 at the moment */ switch ( type ) { case MSG_SET_COMM_DELAY: client_comm_delay = msg_read_int16(); printf( _("comm_delay set to %i\n"), client_comm_delay ); handled = 1; break; case MSG_DISCONNECT: /* close the pause chatroom window if open */ if ( client_state == CS_PAUSE ) close_pause_chat(); set_state( CS_FATAL_ERROR ); display_text( chat_font_error, _("You've been disconnected.") ); client_data_clear(); client_is_connected = 0; handled = 1; break; case MSG_ERROR: /* close the pause chatroom window if open */ if ( client_state == CS_PAUSE ) close_pause_chat(); /* break up game but wait for the stats */ set_state( CS_FATAL_ERROR ); display_text( chat_font_error, msg_read_string() ); handled = 1; break; case MSG_LEVEL_DATA: cur_player->next_paddle_id = msg_read_int8(); /* top or bottom? */ msg_read( 536, msgbuf ); if ( !msg_read_failed() ) { comm_unpack_level( &cur_player->snapshot, (unsigned char*)msgbuf, &msglen ); cur_player->next_level_received = 1; handled = 1; } else { set_state( CS_FATAL_ERROR ); display_text( chat_font_error, _("corrupted level data") ); } break; case MSG_ADD_USER: i = msg_read_int32(); snprintf( name, 16, "%s", msg_read_string() ); name[15] = 0; if ( msg_read_failed() ) break; client_add_user( i, name ); handled = 1; break; case MSG_REMOVE_USER: i = msg_read_int32(); if ( msg_read_failed() ) break; client_remove_user( i ); handled = 1; break; case MSG_ADD_LEVELSET: list_add( client_levelsets, strdup(msg_read_string()) ); handled = 1; break; case MSG_PAUSE: open_pause_chat( _("Remote player has paused the game.") ); handled = 1; break; case MSG_UNPAUSE: close_pause_chat(); handled = 1; break; case MSG_CHATTER: client_add_pausechatter( msg_read_string(), 0 ); handled = 1; break; } /* game_only packets but received any time */ //if ( client_state == CS_PLAY ) switch ( type ) { case MSG_PADDLE_STATE: comm_unpack_paddle( r_paddle, (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_SHOT_POSITIONS: comm_unpack_shots( (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_BALL_POSITIONS: comm_unpack_balls( (unsigned char*)net_buffer, &msg_read_pos ); #ifdef AUDIO_ENABLED /* play sounds for attached, reflected balls or fired shots */ if ( game_get_fired_shot_count() ) stk_sound_play( wav_shot ); if ( game_get_brick_reflected_ball_count() ) stk_sound_play( wav_reflect_brick ); if ( game_get_paddle_reflected_ball_count() ) stk_sound_play( wav_reflect_paddle ); if ( game_get_attached_ball_count() ) stk_sound_play( wav_attach ); game->mod.fired_shot_count = 0; game->mod.attached_ball_count = 0; game->mod.brick_reflected_ball_count = 0; game->mod.paddle_reflected_ball_count = 0; #endif handled = 1; break; case MSG_SCORES: comm_unpack_scores( (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_BRICK_HITS: comm_unpack_brick_hits( (unsigned char*)net_buffer, &msg_read_pos ); /* handle brick hits and create new extras. the extras * are moved independently by the client and destroyed on * collection but DO NOT TAKE EFFECT */ brickhits = game_get_brick_hits( &count ); for ( i = 0; i < count; i++ ) client_handle_brick_hit( &brickhits[i] ); game->mod.brick_hit_count = 0; handled = 1; break; case MSG_NEW_EXTRAS: comm_unpack_collected_extras( (unsigned char*)net_buffer, &msg_read_pos ); /* these collected extras take effect */ for ( i = 0; i < game->paddle_count; i++ ) { extras = game_get_collected_extras( i, &count ); for ( j = 0; j < count; j++ ) client_handle_collected_extra( game->paddles[i], extras[j] ); } game->mod.collected_extra_count[0] = 0; game->mod.collected_extra_count[1] = 0; handled = 1; break; case MSG_ROUND_OVER: game->level_over = 1; game->winner = msg_read_int8(); handled = 1; break; case MSG_LAST_ROUND_OVER: game->level_over = 1; game->winner = msg_read_int8(); game_over = 1; handled = 1; break; } /* stats may arrive anywhere */ switch ( type ) { case MSG_GAME_STATS: memset( game_stats, 0, sizeof( game_stats ) ); game_stats[0][0] = msg_read_int8(); game_stats[1][0] = msg_read_int8(); game_stats[0][1] = msg_read_int8(); game_stats[1][1] = msg_read_int8(); game_stats[0][2] = msg_read_int8(); game_stats[1][2] = msg_read_int8(); game_stats[0][3] = msg_read_int32(); game_stats[1][3] = msg_read_int32(); game_stats[0][4] = msg_read_int8(); game_stats[1][4] = msg_read_int8(); game_stats[0][5] = msg_read_int8(); game_stats[1][5] = msg_read_int8(); game_stats[0][6] = msg_read_int8(); game_stats[1][6] = msg_read_int8(); stats_received = 1; handled = 1; break; } if ( !handled ) { printf( _("game: state %i: invalid message %x: skipping %i bytes\n"), client_state, type, net_buffer_cur_size - msg_read_pos ); msg_read_pos = net_buffer_cur_size; } } } #endif /* send state of local paddle */ void comm_send_paddle( Paddle *paddle ) { if ( game->game_type == GT_LOCAL ) { /* simply copy the data */ if ( local_game->paddles[PADDLE_BOTTOM]->x != paddle->x ) local_game->paddles[PADDLE_BOTTOM]->invis_delay = PADDLE_INVIS_DELAY; local_game->paddles[PADDLE_BOTTOM]->x = paddle->x; local_game->paddles[PADDLE_BOTTOM]->fire_left = paddle->fire_left; local_game->paddles[PADDLE_BOTTOM]->fire_right = paddle->fire_right; local_game->paddles[PADDLE_BOTTOM]->ball_return_key_pressed = paddle->ball_return_key_pressed; local_game->paddles[PADDLE_BOTTOM]->maxballspeed_request = paddle->maxballspeed_request; local_game->paddles[PADDLE_BOTTOM]->maxballspeed_request_old = paddle->maxballspeed_request_old; return; } msgbuf[0] = MSG_PADDLE_STATE; msglen = 1; comm_pack_paddle( paddle, (unsigned char*)msgbuf, &msglen ); client_transmit( CODE_BLUE, msglen, msgbuf ); } void comm_send_short( int msg ) { if ( game->game_type == GT_LOCAL ) return; /* send these messages as code blue. if they are dropped * the player and server will notice as nothing happens */ msgbuf[0] = msg; client_transmit( CODE_BLUE, 1, msgbuf ); } /* receive any data but only handle such messages valid * in the current state. */ void comm_recv( void ) { #ifdef NETWORK_ENABLED int recv_limit; /* fake communication in local game */ if ( game->game_type == GT_LOCAL ) { comm_recv_local(); return; } if ( !client_is_connected ) return; recv_limit = client_recv_limit; /* limited number of packets if not -1 */ while ( net_recv_packet() && ( recv_limit==-1 || recv_limit > 0) ) { /* check if this is a valid packet and update the socket */ if ( msg_is_connectionless() ) msg_begin_connectionless_reading(); else if ( !socket_process_header( &client ) ) continue; comm_parse_packet(); if ( recv_limit != -1 ) recv_limit--; } #endif } /* send a heartbeat every 2 seconds except in the actual game as we * send paddle updates there */ void comm_send_heartbeat( void ) { static int last_heartbeat = 0; if ( client_state != CS_PLAY ) if ( time(0) >= last_heartbeat + 3 ) { last_heartbeat = time(0); msgbuf[0] = MSG_HEARTBEAT; client_transmit( CODE_BLUE, 1, msgbuf ); } } lbreakout2-2.6.5/client/shrapnells.h0000664000175000017500000000533512140767214014335 00000000000000/*************************************************************************** shrapnells.h - description ------------------- begin : Sat Sep 8 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ typedef struct { SDL_Surface *pic; Vector v; float x, y; float alpha; } Shrapnell; /* ==================================================================== Initate or delete shrapnell list ==================================================================== */ void shrapnells_init(); void shrapnells_delete(); /* ==================================================================== Create shrapnells from surface (surf,sx,sy,sw,sh) and put it to screen position (px,py). The vector imp is the impuls and type the type of what caused the destruction. ==================================================================== */ void shrapnells_create( SDL_Surface *surf, int sx, int sy, int sw, int sh, int px, int py, int type, Vector imp ); /* ==================================================================== Remove all shrapnells ==================================================================== */ void shrapnells_reset(); /* ==================================================================== Show, hide all shrapnells. ==================================================================== */ void shrapnells_hide(); void shrapnells_show(); /* ==================================================================== Update and remove expired shrapnells ==================================================================== */ void shrapnells_update( int ms ); /* ==================================================================== Brick explosion animations. ==================================================================== */ void exp_load(); void exp_delete(); void exps_clear(); void exp_create( int x, int y ); void exps_hide(); void exps_show(); void exps_update( int ms ); void exps_set_dark( int dark ); lbreakout2-2.6.5/client/misc.c0000664000175000017500000004112712140767214013107 00000000000000/*************************************************************************** misc.c - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include "lbreakout.h" #include "../game/game.h" #include "config.h" #include "event.h" #include "misc.h" extern SDL_Surface *stk_display, *nuke_bkgnd, *brick_pic; extern Game *local_game, *game; extern Paddle *l_paddle; extern StkFont *font; extern SDL_Surface *offscreen; extern int stk_quit_request; int shadow_size = 8; #ifdef AUDIO_ENABLED extern StkSound *wav_click; #endif extern int motion_button; extern Config config; extern int bkgnd_count; extern SDL_Surface **bkgnds; /* ==================================================================== Load background according to id and draw background to offscreen. Return Value: loaded background surface ==================================================================== */ void bkgnd_draw( SDL_Surface *bkgnd, int id, int to_offscreen ) { SDL_Surface *pic = 0; int i, j; if ( id >= bkgnd_count || id == -1 ) id = rand() % bkgnd_count; /* load background */ pic = bkgnds[id]; for ( i = 0; i < bkgnd->w; i += pic->w ) { for ( j = 0; j < bkgnd->h; j += pic->h ) { stk_surface_blit( pic, 0,0,-1,-1, bkgnd, i, j); } } /* draw to offscreen */ if (to_offscreen) stk_surface_blit( bkgnd, 0,0,-1,-1, offscreen, 0,0 ); } /* ==================================================================== Confirm request. Darkens screen a bit and display text. Return Value: True if successful ==================================================================== */ void draw_confirm_screen( StkFont *font, SDL_Surface *buffer, char *str ) { int i, y, x; Text *text = create_text( str, 60 ); stk_surface_fill( stk_display, 0,0,-1,-1, 0x0 ); stk_surface_alpha_blit( buffer, 0,0,-1,-1, stk_display, 0,0, 128 ); font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; y = (stk_display->h - text->count * font->height) / 2; x = stk_display->w / 2; for ( i = 0; i < text->count; i++ ) { stk_font_write(font, stk_display, x, y, STK_OPAQUE, text->lines[i]); y += font->height; } delete_text( text ); } int confirm( StkFont *font, char *str, int type ) { SDL_Event event; int go_on = 1; int ret = 0; SDL_Surface *buffer = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); SDL_SetColorKey(buffer, 0, 0); #ifdef AUDIO_ENABLED stk_sound_play( wav_click ); #endif event_clear_sdl_queue(); stk_surface_blit( stk_display, 0,0,-1,-1, buffer, 0,0 ); if ( type == CONFIRM_PAUSE ) stk_surface_gray( stk_display, 0,0,-1,-1,0 ); else draw_confirm_screen( font, buffer, str ); stk_display_update( STK_UPDATE_ALL ); while (go_on && !stk_quit_request) { SDL_WaitEvent(&event); /* TEST */ switch ( event.type ) { case SDL_QUIT: stk_quit_request = 1; break; case SDL_MOUSEBUTTONUP: if ( type == CONFIRM_ANY_KEY ) { ret = 1; go_on = 0; } /* else if ( type == CONFIRM_YES_NO ) { if ( event.button.button == LEFT_BUTTON ) ret = 1; else ret = 0; go_on = 0; }*/ break; case SDL_KEYDOWN: if ( type == CONFIRM_ANY_KEY ) { ret = 1; go_on = 0; break; } else if ( type == CONFIRM_PAUSE ) { if ( event.key.keysym.sym == SDLK_p ) { ret = 1; go_on = 0; break; } else if ( event.key.keysym.sym == SDLK_f ) { config.fullscreen = !config.fullscreen; stk_display_apply_fullscreen( config.fullscreen ); draw_confirm_screen( font, buffer, str ); stk_display_update( STK_UPDATE_ALL ); } } else { char *keyName = SDL_GetKeyName(event.key.keysym.sym); char *yesLetter = _("y"); char *noLetter = _("n"); if (strcmp(keyName, yesLetter) == 0) { go_on = 0; ret = 1; } else if (event.key.keysym.sym==SDLK_ESCAPE || strcmp(keyName, noLetter) == 0 ) { go_on = 0; ret = 0; } default: break; } break; } } #ifdef AUDIO_ENABLED stk_sound_play( wav_click ); #endif stk_surface_blit( buffer, 0,0,-1,-1, stk_display, 0,0 ); stk_display_update( STK_UPDATE_ALL ); SDL_FreeSurface(buffer); /* reset the relative position so paddle wont jump */ SDL_GetRelativeMouseState(0,0); return ret; } #ifdef NETWORK_ENABLED /* ==================================================================== Display a info message (gray screen a bit and display text), send a MSG_READY when player has clicked and wait for a remote answer (timeout 10 secs). Waiting may be cancelled by pressing ESCAPE which results in sending a MSG_GAME_EXITED. Return Value: True if both peers clicked to continue, False if the connection was cancelled for some reason. ==================================================================== */ int display_info( StkFont *font, char *str, NetSocket *peer ) { #if 0 char error[128]; Net_Msg msg; SDL_Event event; int ret = 0, leave = 0; SDL_Surface *buffer = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); SDL_SetColorKey(buffer, 0, 0); #ifdef AUDIO_ENABLED stk_sound_play( wav_click ); #endif event_clear_sdl_queue(); stk_surface_blit( stk_display, 0,0,-1,-1, buffer, 0,0 ); draw_confirm_screen( font, buffer, str ); stk_display_update( STK_UPDATE_ALL ); stk_wait_for_input(); net_write_empty_msg( peer, MSG_READY ); draw_confirm_screen( font, buffer, _("Waiting for remote answer...") ); stk_display_update( STK_UPDATE_ALL ); event_clear_sdl_queue(); while ( !leave ) { if ( SDL_PollEvent( &event ) ) if ( (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE) || event.type == SDL_QUIT ) { net_write_empty_msg( peer, MSG_GAME_EXITED ); leave = 1; break; } if ( net_read_msg( peer, &msg, 0 ) ) switch ( msg.type ) { case MSG_READY: ret = 1; leave = 1; break; case MSG_GAME_EXITED: ret = 0; leave = 1; sprintf( error, /* xgettext:no-c-format */ _("remote player cancelled the game\n") ); confirm( font, error, CONFIRM_ANY_KEY ); break; } SDL_Delay( 10 ); } #ifdef AUDIO_ENABLED stk_sound_play( wav_click ); #endif stk_surface_blit( buffer, 0,0,-1,-1, stk_display, 0,0 ); stk_display_update( STK_UPDATE_ALL ); SDL_FreeSurface(buffer); /* reset the relative position so paddle wont jump */ SDL_GetRelativeMouseState(0,0); return ret; #endif return 1; } #endif /* ==================================================================== Create shadow surface for specified region in surface. Return Value: Shadow surface ==================================================================== */ SDL_Surface* create_shadow( SDL_Surface *surf, int x, int y, int w, int h ) { SDL_Surface *shadow = 0; int i, j; Uint32 white = SDL_MapRGB( stk_display->format, 0xff, 0xff, 0xff ); Uint32 black = SDL_MapRGB( stk_display->format, 0, 0, 0 ); shadow = stk_surface_create( SDL_SWSURFACE, w, h ); SDL_SetColorKey( shadow, SDL_SRCCOLORKEY, white ); for ( i = 0; i < w; i++ ) for ( j = 0; j < h; j++ ) { if ( surf->flags & SDL_SRCCOLORKEY && stk_surface_get_pixel( surf, i, j ) == surf->format->colorkey ) stk_surface_set_pixel( shadow, i, j, white ); else stk_surface_set_pixel( shadow, i, j, black ); } return shadow; } /* ==================================================================== Enter a string and return True if ENTER received and False if ESCAPE received. ==================================================================== */ int enter_string( StkFont *font, char *caption, char *edit, int limit ) { SDL_Event event; int go_on = 1; int ret = 0; SDL_Surface *buffer = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); int length = strlen( edit ); SDL_SetColorKey(buffer, 0, 0); stk_surface_blit( stk_display, 0,0,-1,-1, buffer, 0,0 ); font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_CENTER_Y; while ( go_on && !stk_quit_request ) { stk_surface_fill( stk_display, 0,0,-1,-1, 0x0 ); stk_surface_alpha_blit( buffer, 0,0,-1,-1, stk_display, 0,0, 128 ); stk_font_write(font, stk_display, stk_display->w / 2, stk_display->h / 2, STK_OPAQUE, caption); write_text_with_cursor(font, stk_display, stk_display->w / 2, stk_display->h / 2 + font->height, edit, STK_OPAQUE); stk_display_update( STK_UPDATE_ALL ); event.type = SDL_NOEVENT; SDL_PollEvent(&event); /* TEST */ switch ( event.type ) { case SDL_QUIT: stk_quit_request = 1; break; case SDL_KEYDOWN: switch ( event.key.keysym.sym ) { case SDLK_ESCAPE: ret = 0; go_on = 0; break; case SDLK_RETURN: ret = 1; go_on = 0; break; case SDLK_BACKSPACE: if ( length > 0 ) edit[--length] = 0; break; default: if ( event.key.keysym.sym >= 32 && event.key.keysym.sym < 128 && length < limit ) { edit[length++] = event.key.keysym.unicode; edit[length] = 0; } break; } break; } } stk_surface_blit( buffer, 0,0,-1,-1, stk_display, 0,0 ); stk_display_update( STK_UPDATE_ALL ); SDL_FreeSurface(buffer); /* reset the relative position so paddle wont jump */ SDL_GetRelativeMouseState(0,0); return ret; } /* ==================================================================== Display text blinking. ==================================================================== */ void write_text_with_cursor( StkFont *fnt, SDL_Surface *dest, int x, int y, char *str, int alpha) { static int cursor_on = 0; static Uint32 last_tick = 0; // create temporary space for cursor and text char *text_with_cursor = calloc(strlen(str) + 2, sizeof(char)); if (text_with_cursor) { strcpy(text_with_cursor, str); // Time to blink cursor on/off? if (SDL_GetTicks() - last_tick > 500) { last_tick = SDL_GetTicks(); cursor_on = ! cursor_on; } // Tack on cursor to end of text if (cursor_on) { strcat(text_with_cursor, "_"); } else { strcat(text_with_cursor, " "); } stk_font_write(fnt,dest,x,y,alpha,text_with_cursor); free(text_with_cursor); } } /* ==================================================================== Enter nuke mode and allow player to disintegrate single bricks by spending 5% of his/her score. ==================================================================== */ void game_nuke( void ) { char buf[128]; SDL_Event event; int x,y,i,j,leave = 0; SDL_Surface *buffer = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); SDL_Surface *red_mask = stk_surface_create( SDL_SWSURFACE, BRICK_WIDTH, BRICK_HEIGHT ); stk_surface_fill( red_mask, 0,0,-1,-1, 0xFF0000 ); SDL_SetAlpha( red_mask, SDL_SRCALPHA, 128 ); SDL_SetColorKey(buffer, 0, 0); #ifdef AUDIO_ENABLED stk_sound_play( wav_click ); #endif SDL_SetEventFilter(0); event_clear_sdl_queue(); /* backup screen contents */ stk_surface_blit( stk_display, 0,0,-1,-1, buffer, 0,0 ); /* display bricks darkened */ stk_surface_blit( nuke_bkgnd, 0,0,-1,-1, stk_display, 0,0 ); for ( i = 1; i < MAP_WIDTH - 1; i++ ) for ( j = 1; j < MAP_HEIGHT - 1; j++ ) if ( game->bricks[i][j].id >= 0 ) stk_surface_alpha_blit( brick_pic, game->bricks[i][j].id * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, i*BRICK_WIDTH, j*BRICK_HEIGHT, 128 ); /* info */ font->align = STK_FONT_ALIGN_LEFT; sprintf( buf, _("Plane Of Inner Stability entered (Score: %i)"), l_paddle->player->stats.total_score + l_paddle->score ); stk_font_write( font, stk_display, BRICK_WIDTH, (MAP_HEIGHT-1)*BRICK_HEIGHT, 128, buf ); /* show score of player */ stk_display_update( STK_UPDATE_ALL ); x = y = -1; while (!leave && !stk_quit_request) { SDL_WaitEvent(&event); switch ( event.type ) { case SDL_QUIT: stk_quit_request = 1; break; case SDL_MOUSEBUTTONDOWN: if ( x != -1 ) if ( confirm( font, /* xgettext:no-c-format */ _("Disintegrate Brick? (Costs 5% of your score.) y/n"), CONFIRM_YES_NO ) ) { /* implant a bomb to this brick and return */ game_set_current( local_game ); brick_start_expl( x,y, BRICK_EXP_TIME, local_game->paddles[0] ); local_game->bricks[x][y].score = 0; game_set_current( game ); l_paddle->player->stats.total_score -= (int)(0.05 * (l_paddle->score + l_paddle->player->stats.total_score)); leave = 1; } break; case SDL_MOUSEMOTION: if ( x != -1 ) { /* clear old selection */ stk_surface_blit( nuke_bkgnd, x*BRICK_WIDTH, y*BRICK_HEIGHT, BRICK_WIDTH, BRICK_HEIGHT, stk_display, x*BRICK_WIDTH, y*BRICK_HEIGHT ); stk_surface_alpha_blit( brick_pic, game->bricks[x][y].id * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, x*BRICK_WIDTH, y*BRICK_HEIGHT, 128 ); stk_display_store_drect(); x = y = -1; } /* make new selection if brick */ i = event.motion.x / BRICK_WIDTH; j = event.motion.y / BRICK_HEIGHT; if ( i >= 1 && i <= MAP_WIDTH -2 ) if ( j >= 1 && j <= MAP_HEIGHT - 2 ) if ( game->bricks[i][j].id >= 0 ) { x = i; y = j; stk_surface_blit( red_mask, 0,0,-1,-1, stk_display,x*BRICK_WIDTH, y*BRICK_HEIGHT ); stk_display_store_drect(); } break; case SDL_KEYDOWN: if ( event.key.keysym.sym == SDLK_ESCAPE ) leave = 1; break; } stk_display_update( STK_UPDATE_RECTS ); } stk_surface_blit( buffer, 0,0,-1,-1, stk_display, 0,0 ); stk_display_update( STK_UPDATE_ALL ); SDL_FreeSurface(red_mask); SDL_FreeSurface(buffer); SDL_SetEventFilter(event_filter); } /* gray screen and display a formatted text, directly update the * screen */ void display_text( StkFont *font, char *format, ... ) { int i, y, x; Text *text; char buf[512]; va_list args; va_start( args, format ); vsnprintf( buf, 512, format, args ); va_end( args ); stk_surface_gray( stk_display, 0,0,-1,-1, 2 ); text = create_text( buf, 60 ); font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; y = (stk_display->h - text->count * font->height) / 2; x = stk_display->w / 2; for ( i = 0; i < text->count; i++ ) { stk_font_write(font, stk_display, x, y, STK_OPAQUE, text->lines[i]); y += font->height; } delete_text( text ); stk_display_update( STK_UPDATE_ALL ); } lbreakout2-2.6.5/client/editor.h0000664000175000017500000000327012140767214013444 00000000000000/*************************************************************************** editor.h - description ------------------- begin : Fri Oct 12 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Create/delete editor resources ==================================================================== */ void editor_create(); void editor_delete(); /* ==================================================================== Initiate and clear stuff for each editor call. file_name is the name of the edited file in home directory. ==================================================================== */ int editor_init( char *file_name ); void editor_clear(); /* ==================================================================== Run the editor ==================================================================== */ void editor_run(); lbreakout2-2.6.5/client/slot.c0000664000175000017500000000671112140767214013135 00000000000000/*************************************************************************** slot.c - description ------------------- begin : Sat Dec 15 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "slot.h" static FILE *open_slot( int id, char *mode ) { char fname[512]; snprintf( fname, 511, "%s/%s/lbr2_save_%d", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME, id ); //printf( "accessing '%s' in mode '%s'\n", fname, mode ); return fopen( fname, mode ); } /* ==================================================================== Load/save a game to a slot. 'slot_load' returns 1 on success and updates gs. 'slot_save' takes content of 'gs' and saves it. ==================================================================== */ int slot_load( int slot_id, GameSlot *gs ) { FILE *file = open_slot( slot_id, "r" ); if ( file == 0 ) { fprintf( stderr, "ERROR: cannot open slot %d!\n", slot_id ); return 0; } fread( gs, sizeof(GameSlot), 1, file ); fclose( file ); return 1; } int slot_save( int slot_id, GameSlot *gs ) { FILE *file = open_slot( slot_id, "w" ); if ( file == 0 ) { fprintf( stderr, "ERROR: cannot open slot %d!\n", slot_id ); return 0; } fwrite( gs, sizeof(GameSlot), 1, file ); fclose( file ); return 1; } int slot_delete( int slot_id ) { char fname[512]; snprintf( fname, 511, "%s/%s/lbr2_save_%d", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME, slot_id ); if ( remove(fname) != 0 ) { fprintf( stderr, "ERROR: couldn't delete file %s\n", fname ); return 0; } return 1; } /* ==================================================================== Build info hint from game saved to slot 'slot_id'. ==================================================================== */ void slot_update_hint( int slot_id, Hint *hint ) { GameSlot gs; int i; char text[256], text2[256]; char *str_diff[] = { "Kids", "Easy", "Medium", "Hard" }; /* HACK: copied from manager.c */ if ( slot_load( slot_id, &gs ) ) { snprintf( text, 255, "%s - %s, %d Player(s)#", gs.setname, str_diff[gs.diff], gs.player_count ); for ( i = 0; i < gs.player_count; i++ ) { snprintf( text2, 255, "#%s: %d (Lvl %d)", gs.player_names[i], gs.player_scores[i], gs.player_cur_level_id[i]+1 ); strcat( text, text2 ); } } else strcpy( text, "Right now, there is no game you could resume." ); hint_set_contents( hint, text ); } lbreakout2-2.6.5/client/frame.c0000664000175000017500000003316012140767214013244 00000000000000/*************************************************************************** frame.c - description ------------------- begin : Fri Sep 7 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "config.h" #include "player.h" #include "display.h" #include "frame.h" extern SDL_Surface *stk_display; extern SDL_Surface *offscreen; extern SDL_Surface *bkgnd; /* background + frame */ extern SDL_Surface *brick_pic; /* brick graphics in a horizontal order */ /* parts of the frame: left, top, right */ extern SDL_Surface *frame_left, *frame_top, *frame_right; extern SDL_Surface *frame_left_shadow, *frame_top_shadow, *frame_right_shadow; extern SDL_Surface *frame_mp_left, *frame_mp_right; extern SDL_Surface *frame_mp_left_shadow, *frame_mp_right_shadow; extern SDL_Surface *lamps; /* life lamps */ float score = 0; /* current score */ int dest_score; /* final score */ int score_x_offset = 54; /* display score at this position (right align)*/ int score_x, score_y = BRICK_HEIGHT / 2 - 2; /* center position where to write score */ int new_life_y; /* if new life lamp is drawn do this at this y position */ int name_x = 404, name_y = BRICK_HEIGHT / 2 - 2; /* offset (right side of screen) */ extern int shadow_size; extern Config config; int info_x; int info_y; /* absolute position is info_y + info_offset */ int info_offsets[EX_NUMBER]; /* offset at which extra info is displayed */ int paddle_info_y[4]; int paddle_info_offsets[EX_NUMBER]; /* specialized extras */ extern SDL_Surface *extra_pic; #ifdef AUDIO_ENABLED extern StkSound *wav_life_up, *wav_life_down; #endif extern StkFont *display_font; int warp_blink; Delay warp_delay; int warp_x, warp_y; int warp_blinks; extern SDL_Surface *warp_pic; extern Game *game; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Create frame by loading and assembling all graphics and loading additional graphics. ==================================================================== */ void frame_create() { delay_set( &warp_delay, 500 ); warp_x = stk_display->w - BRICK_WIDTH + ( BRICK_WIDTH - warp_pic->w ) / 2; warp_y = stk_display->h - warp_pic->h; warp_blink = 0; } /* ==================================================================== Inititate the frame to the according game type. Set the position of the extras displayed, enable life lamps etc. ==================================================================== */ void frame_init() { /* setup position of extra info */ info_x = stk_display->w - BRICK_WIDTH; if ( game->game_type == GT_NETWORK ) { /* general */ info_y = 178; info_offsets[EX_METAL] = 26; info_offsets[EX_WEAK_BALL] = 26; info_offsets[EX_EXPL_BALL] = 26; info_offsets[EX_FAST] = 52; info_offsets[EX_SLOW] = 52; info_offsets[EX_CHAOS] = 78; /* paddles */ paddle_info_y[0] = 271; paddle_info_y[1] = 7; paddle_info_offsets[EX_SLIME] = 26; paddle_info_offsets[EX_WEAPON] = 52; paddle_info_offsets[EX_WALL] = 78; paddle_info_offsets[EX_GOLDSHOWER] = 104; paddle_info_offsets[EX_GHOST_PADDLE] = 130; paddle_info_offsets[EX_BONUS_MAGNET] = 156; paddle_info_offsets[EX_MALUS_MAGNET] = 156; } else { /* in single player we ignore the second paddle and model general and paddle0 extras so that they result in the old layout */ info_y = 48; paddle_info_y[0] = 48; paddle_info_offsets[EX_GOLDSHOWER] = 30; paddle_info_offsets[EX_SLIME] = 60; info_offsets[EX_METAL] = 90; info_offsets[EX_WEAK_BALL] = 90; info_offsets[EX_EXPL_BALL] = 90; paddle_info_offsets[EX_WALL] = 120; paddle_info_offsets[EX_WEAPON] = 150; info_offsets[EX_FAST] = 180; info_offsets[EX_SLOW] = 180; info_offsets[EX_CHAOS] = 210; paddle_info_offsets[EX_GHOST_PADDLE] = 240; paddle_info_offsets[EX_BONUS_MAGNET] = 270; paddle_info_offsets[EX_MALUS_MAGNET] = 270; } } /* ==================================================================== Free all resources created by frame_create() ==================================================================== */ void frame_delete() { } /* ==================================================================== Draw frame to offscreen and to bkgnd as frame won't change while playing. ==================================================================== */ void frame_draw() { SDL_Surface *fr_left = (game->game_type==GT_LOCAL)?frame_left:frame_mp_left; SDL_Surface *fr_right = (game->game_type==GT_LOCAL)?frame_right:frame_mp_right; SDL_Surface *fr_left_shadow = (game->game_type==GT_LOCAL)?frame_left_shadow:frame_mp_left_shadow; SDL_Surface *fr_right_shadow = (game->game_type==GT_LOCAL)?frame_right_shadow:frame_mp_right_shadow; /* left and right part are always drawn */ /* left part */ stk_surface_alpha_blit( fr_left_shadow, 0,0,-1,-1, offscreen, shadow_size, shadow_size, SHADOW_ALPHA ); stk_surface_blit( fr_left, 0,0,-1,-1, offscreen, 0,0 ); stk_surface_alpha_blit( fr_left_shadow, 0,0,-1,-1, bkgnd, shadow_size, shadow_size, SHADOW_ALPHA ); stk_surface_blit( fr_left, 0,0,-1,-1, bkgnd, 0,0 ); if ( game->game_type == GT_LOCAL ) { /* add top */ stk_surface_alpha_blit( frame_top_shadow, 0,0,-1,-1, offscreen, fr_left->w + shadow_size, shadow_size, SHADOW_ALPHA ); stk_surface_blit( frame_top, 0,0,-1,-1, offscreen, fr_left->w,0 ); stk_surface_alpha_blit( frame_top_shadow, 0,0,-1,-1, bkgnd, fr_left->w + shadow_size, shadow_size, SHADOW_ALPHA ); stk_surface_blit( frame_top, 0,0,-1,-1, bkgnd, fr_left->w,0 ); } /* right part */ stk_surface_alpha_blit( fr_right_shadow, 0,0,-1,-1, offscreen, stk_display->w - fr_right_shadow->w + shadow_size, shadow_size, SHADOW_ALPHA ); stk_surface_blit( fr_right, 0,0,-1,-1, offscreen, stk_display->w - fr_right->w,0 ); stk_surface_alpha_blit( fr_right_shadow, 0,0,-1,-1, bkgnd, stk_display->w - fr_right_shadow->w + shadow_size, shadow_size, SHADOW_ALPHA ); stk_surface_blit( fr_right, 0,0,-1,-1, bkgnd, stk_display->w - fr_right->w,0 ); } /* ==================================================================== Add life lamps at left side of frame in offscreen ==================================================================== */ void frame_draw_lives( int lives, int max_lives ) { int i,y; /* substract one life to have the same result like in old LBreakout */ /* at maximum ten lamps may be displayed */ for ( i = 0; i < 10; i++ ) { if ( i < lives - 1 ) y = BRICK_HEIGHT; else if ( i < max_lives - 1 ) y = 0; else y = BRICK_HEIGHT * 2; stk_surface_blit( lamps, 0,y, BRICK_WIDTH, BRICK_HEIGHT, offscreen, 0, ( MAP_HEIGHT - i - 1 ) * BRICK_HEIGHT ); } /* get position of next lamp */ new_life_y = stk_display->h - lives * BRICK_HEIGHT; } /* ==================================================================== Add one new life at offscreen and screen (as this will happen in game ) ==================================================================== */ void frame_add_life() { if ( !game->extra_active[EX_DARKNESS] ) { stk_surface_blit( lamps, 0, BRICK_HEIGHT, BRICK_WIDTH, BRICK_HEIGHT, stk_display, 0, new_life_y ); stk_display_store_drect(); } new_life_y -= BRICK_HEIGHT; #ifdef AUDIO_ENABLED stk_sound_play_x( 20, wav_life_up ); #endif } /* ==================================================================== Switch of a life lamp ==================================================================== */ void frame_remove_life() { new_life_y += BRICK_HEIGHT; if ( new_life_y >= stk_display->h ) return; if ( !game->extra_active[EX_DARKNESS] ) { stk_surface_blit( lamps, 0, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, 0, new_life_y ); stk_display_store_drect(); } #ifdef AUDIO_ENABLED stk_sound_play_x( 20, wav_life_down ); #endif } /* ==================================================================== Display extra information on right side of screen. ==================================================================== */ void frame_info_hide() { int i, j; if ( !config.bonus_info ) return; for ( i = 0; i < EX_NUMBER; i++ ) if ( info_offsets[i] > 0 && game->extra_active[i] ) { stk_surface_blit( offscreen, info_x, info_y + info_offsets[i], BRICK_WIDTH, BRICK_HEIGHT, stk_display, info_x, info_y + info_offsets[i] ); stk_display_store_drect(); } for ( i = 0; i < EX_NUMBER; i++ ) for ( j = 0; j < game->paddle_count; j++ ) if ( paddle_info_offsets[i] > 0 && game->paddles[j]->extra_active[i] ) { stk_surface_blit( offscreen, info_x, paddle_info_y[j] + paddle_info_offsets[i], BRICK_WIDTH, BRICK_HEIGHT, stk_display, info_x, paddle_info_y[j] + paddle_info_offsets[i] ); stk_display_store_drect(); } } void frame_info_show() { char str[12]; int i, j; if ( !config.bonus_info ) return; display_font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_CENTER_Y; for ( i = 0; i < EX_NUMBER; i++ ) { if ( info_offsets[i] > 0 && game->extra_active[i] ) { /* picture */ stk_surface_fill( stk_display, info_x, info_y + info_offsets[i], BRICK_WIDTH, BRICK_HEIGHT, 0x0 ); stk_surface_alpha_blit( extra_pic, i * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, info_x, info_y + info_offsets[i], 128 ); /* remaining extra_time */ sprintf(str, "%i", (game->extra_time[i] / 1000) + 1); /* write text */ stk_font_write( display_font, stk_display, info_x + ( BRICK_WIDTH >> 1 ), info_y + info_offsets[i] + ( BRICK_HEIGHT >> 1 ), -1, str ); } } for ( i = 0; i < EX_NUMBER; i++ ) for ( j = 0; j < game->paddle_count; j++ ) if ( paddle_info_offsets[i] > 0 && game->paddles[j]->extra_active[i] ) { if ( i == EX_WALL && game->paddles[j]->extra_time[i] <= 0 ) continue; /* picture */ stk_surface_fill( stk_display, info_x, paddle_info_y[j] + paddle_info_offsets[i], BRICK_WIDTH, BRICK_HEIGHT, 0x0 ); stk_surface_alpha_blit( extra_pic, i * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, info_x, paddle_info_y[j] + paddle_info_offsets[i], 128 ); /* remaining extra_time */ sprintf(str, "%i", (game->paddles[j]->extra_time[i] / 1000) + 1); /* write text */ stk_font_write( display_font, stk_display, info_x + ( BRICK_WIDTH >> 1 ), paddle_info_y[j] + paddle_info_offsets[i] + ( BRICK_HEIGHT >> 1 ), -1, str ); } } /* ==================================================================== Blink the warp icon. ==================================================================== */ void frame_warp_icon_hide() { if ( game->game_type != GT_LOCAL ) return; if ( game->level_type == LT_PINGPONG ) return; if ( game->bricks_left > game->warp_limit ) return; stk_surface_blit( offscreen, warp_x,warp_y,-1,-1, stk_display, warp_x, warp_y ); stk_display_store_drect(); } void frame_warp_icon_show() { if ( game->game_type != GT_LOCAL ) return; if ( game->level_type == LT_PINGPONG ) return; if ( game->warp_limit == 0 ) return; if ( game->bricks_left > game->warp_limit ) return; if ( !warp_blink ) return; if ( !game->extra_active[EX_DARKNESS] ) stk_surface_blit( warp_pic, 0,0,-1,-1, stk_display, warp_x, warp_y ); else stk_surface_alpha_blit( warp_pic, 0,0,-1,-1, stk_display, warp_x, warp_y, 128 ); } void frame_warp_icon_update( int ms ) { //printf( "%i > %i\n", game->bricks_left, game->warp_limit ); if ( game->game_type != GT_LOCAL ) return; if ( game->level_type == LT_PINGPONG ) return; if ( game->bricks_left > game->warp_limit ) return; if ( warp_blinks == 0 ) { warp_blink = 1; return; } if ( delay_timed_out( &warp_delay, ms ) ) { warp_blink = !warp_blink; if ( warp_blink ) warp_blinks--; } } lbreakout2-2.6.5/client/game.h0000664000175000017500000000556212140767214013075 00000000000000/*************************************************************************** local_game.h - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* in game client states */ enum { CS_NONE = 0, CS_RECV_LEVEL, /* wait for level data from server */ CS_SCORE_TABLE, /* score table in local game */ CS_FINAL_TABLE, /* final score table in local game */ CS_FINAL_PLAYER_INFO, /* info that player cleared all levels */ CS_RECV_STATS, /* wait for server to send stats */ CS_FINAL_STATS, /* looking at final network player stats */ CS_GET_READY, /* await click from user */ CS_PLAY, /* render frame */ CS_NEXT_PLAYER, /* cycle to next player in local game */ CS_NEXT_LEVEL, /* init next level for player in local game */ CS_RESTART_LEVEL, /* player begins at reset level next time */ CS_LOOSE_LIFE, /* take a snapshot and decrease lives */ CS_ROUND_RESULT,/* await click and start level receive after it */ CS_GAME_OVER, /* all levels are played */ CS_CONFIRM_WARP, CS_CONFIRM_QUIT, CS_CONFIRM_RESTART, CS_CONFIRM_CONTINUE, CS_FATAL_ERROR, /* display error and quit game after it */ CS_PAUSE, CS_BONUS_LEVEL_SCORE, /* show score gained in bonus level */ CS_GET_READY_FOR_NEXT_LEVEL /* wait for click when showing score of bonus level */ }; /* create various resources like shrapnells */ void client_game_create(); void client_game_delete(); /* create network/local game context and initiate game state: * network needs to receive the level data and a local game * has to load the next level */ int client_game_init_local( const char *setname ); int client_game_init_network( char *opponent_name, int diff ); /* create local game context and initiate game state * as given from slot 'slot_id'. */ int client_game_resume_local( int slot_id ); /* finalize a game and free anything allocated by init process */ void client_game_finalize(); /* run the state driven loop until game is broken up or finished */ void client_game_run( void ); /* test a level until all balls got lost */ void client_game_test_level( Level *level ); lbreakout2-2.6.5/client/item.h0000664000175000017500000001104012140767214013106 00000000000000/*************************************************************************** item.h - description ------------------- begin : Thu Sep 20 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __ITEM_H #define __ITEM_H #include "hint.h" /* ==================================================================== Item of menu ==================================================================== */ enum { ITEM_SEPARATOR = 0, ITEM_SWITCH, ITEM_SWITCH_X, ITEM_RANGE, ITEM_KEY, ITEM_EDIT, ITEM_LINK, ITEM_ACTION }; typedef struct { Value *value; /* value of item */ int type; /* type as listed above */ char *name; /* name of item -- duplicated */ int item_id; /* id of item (returned as action if ITEM_ACTION) */ int x, y, w, h; /* position and size in screen */ int nx, ny; /* position where name is drawn */ int nalign; /* align of name: either left-aligned or centered (only if link to another menu) */ int vx, vy; /* position where value string is drawn right-aligned */ int valign; /* alignment of value string */ float alpha; /* alpha of normal font (which vanishes when selected) */ float halpha; /* alpha of highlight font */ int highlighted; /* keep alpha at 0 (will raise to 255 if not set) */ void (*callback)(); /* if value of item has been modified this functions is called */ void *link; /* menu link */ StkFont *font, *hfont; /* if set use these fonts instead of standard font */ Hint *hint; /* if not NULL this hint is displayed when quick-help's enabled: created by item itself */ SDL_Surface *bkgnd; /* background surface for item */ } Item; /* ==================================================================== Create item. Return Value: item ==================================================================== */ Item *item_create_separator( char *name ); Item *item_create_range( char *name, char *hint, int *val_int, int min, int max, int step ); Item *item_create_switch( char *name, char *hint, int *val_int, char *str_off, char *str_on ); Item *item_create_switch_x( char *name, char *hint, int *val_int, char **strings, int count ); Item *item_create_key( char *name, char *hint, int *val_int, int *filter ); Item *item_create_edit( char *name, char *hint, char *val_str, int limit ); Item *item_create_link( char *name, char *hint, void *menu ); Item *item_create_action( char *name, char *hint, int item_id ); /* ==================================================================== Delete item (void pointer for compatiblity when using with list) ==================================================================== */ void item_delete( void *item ); /* ==================================================================== Adjust alignment of name and value strings ==================================================================== */ void item_adjust( Item *item ); /* ==================================================================== Hide/Show item ==================================================================== */ void item_hide( Item *item ); void item_show( Item *item ); /* ==================================================================== Update alpha of item ==================================================================== */ void item_update_alpha( Item *item, int ms ); /* ==================================================================== Check if position's on item. ==================================================================== */ int item_focus( Item *item, int x, int y ); #endif lbreakout2-2.6.5/client/levels/0000777000175000017500000000000012610471366013361 500000000000000lbreakout2-2.6.5/client/levels/TimeWaster0000664000175000017500000005542012140767201015306 00000000000000Version: 1.00 Level: houghi Cold fusion Bricks: *vvvvvvvvvvvvv ************** vvvvvvvvvvvvv* ************** *vvvvvvvvvvvvv ************** vvvvvvvvvvvvv* ************** *vvvvvvvvvvvvv ************** vvvvvvvvvvvvv* ************** *vvvvvvvvvvvvv ************** vvvvvvvvvvvvv* ************** *vvvvvvvvvvvvv ************** Bonus: ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff fffwffffffffff Level: houghi Let them blow first Bricks: *............. .************* *............. .************* *............. .************* *............. .************* *............. .************* *............. .************* *............. .************* *............. E*E*E*EE*E*E*E *E*E*E**E*E*E* !!!!!!!!!!!!!! Bonus: j............. .fffffffffffff f............. .ggggggggggggg g............. .ddddddddddddd d............. .bbbbbbbbbbbbb b............. .ppppppppppppp p............. .~~~~~~~~~~~~~ ~............. .............. .............. .............. .............. -------------- Level: houghi Ready Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. ......f....... .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: houghi Aim Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. ......y....... .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: houghi Fire Bricks: vvvvvvvvvvvvvv .............. .............. .............. .............. .............. .............. ......v....... .....vvv...... .....v*v...... .............. .............. .............. .............. .............. .............. .............. .............. Bonus: ...p.........p .............. .............. .............. .............. .............. .............. ......p....... .....pfp...... .....w.w...... .............. .............. .............. .............. .............. .............. .............. .............. Level: houghi Blue is nice Bricks: .@.x......x.@. .@.x......x.@. .@.x......x.@. ..@E......E@.. ..@EeeeeeeE@.. ...@Eddddd@... ...@EggggE@... ....@EvvE@.... .....@EE@..... ......@@...... .............. .............. .............. .............. .............. vvvvvvvvvvvvvv ************** vvvvvvvvvvvvvv Bonus: ...f......f... ...f......f... ...f......f... .............. ....ffffff.... .....fffff.... .....ffff..... ......jj...... .............. .............. .............. .............. .............. .............. .............. bbbbbbmbbbbbbb bbbbbbbbbbbbbb wwwwwwwwwwwwww Level: houghi Vada Voom Bricks: .............. .aaabbbcccjjj. .aaabbbcccjjj. .aaabbbcccjjj. .aaabbbcccjjj. .xxxyyyzzzfff. .xxxyyyzzzfff. .xxxyyyzzzfff. .xxxyyyzzzfff. .***dddeeehhh. .***dddeeehhh. .***dddeeehhh. .***dddeeehhh. .............. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ************** w..w..ww..w..w .............. Level: houghi Wonder why. Bricks: .e...z....b... ..e...z...b... ......z...b... ...e...z...b.. c...e..z...b.. .c...e..z..b.. ..c...e.z..b.. ...c.....z..b. ....c..e.z..b. .....c..e.z.b. ......c...z.b. ff.....c.e.z.b ..ff....c.ez.b ....ff...c.ezb ......ff..c.zb kkkk....ff.c.z ....kkkk..ffcz ........kkkkff Bonus: .m............ ..m........... .............. ...*.......... ....*......... .....b........ ......b....... .............. .......w...... ........w..... .............. .........p.... ..........p... ...........j.. .............. .............. .............. .............. Level: houghi Now! This! Is! It! Bricks: aacaaaccaaacaa baaabaaaabaaab ......vv...... @@@..@@@@..@@@ .............. vvvvvvvvvvvvvv ..*..*..*..*.. .............. ##....##....## .............. ..!..!..!..!.. ...vv....vv... ..e..EEEE..e.. vv..........vv ..z..z..z..z.. ...e......e... .e....ee....e. e...e....e...e Bonus: 0.&.0.**.0.&.0 w.0.p.bb.p.0.w ......ll...... .............. .............. .............. ..f..{..{..f.. .............. .............. .............. ...*.3..3.*... ......mm...... .............. .............. ..<..>..>..<.. ...f......f... .1....--....1. w...+....+...w Level: houghi Get the hostages out. Bricks: .............. .EEE......EEE. .EeE......EeE. .E.E......E.E. .EgE......EgE. .....gggg..... .....g..g..... .....g..g..... .....gddg..... .EEE......EEE. .EeE......EeE. .E.E......E.E. .EgE......EgE. .....gggg..... .....g..g..... .EEE.g..g.EEE. .....gxxg..... .............. Bonus: .............. .............. ..b........b.. .............. ..w........w.. .....fccf..... .............. .............. .....sjjs..... .............. ..b........b.. .............. ..w........w.. .....f..f..... .............. .............. .....jggj..... .............. Level: houghi Ready Bricks: v*v.v*v...v*v. vvv.vvvvv.vvv. ......v*v..vvv vvvvvvvvvvvv*v v*vv*v.vvv*vvv vvvvvvvv*vvvvv ..vvvvvvvv*vv* ..v*vv*v.vvvvv ..vvvvvv...... vvv...v*v.vvv. v*vvvvvvv.v*v. vvvv*v....vvv. ....vvvvvv.... ....v*vv*v.... .vvvvvvvvvvvvv .v*v.....v*vv* vvvv.....vvvvv *v............ Bonus: .............. .......b...... .............. .w..w.....w... .............. .............j ...b..j....... .............. .......w...... .j.........b.. ....j......... .............. .....w..b..... .............. ..w.......b..b .............. .............. .............. Level: houghi Bouncy Wall Bricks: @@@@@@@@@@@@@@ @aaaaaaaaaaaa@ @............@ @dddddddddddd@ @............@ @eeeeeeeeeeee@ @............@ @hhhhhhhhhhhh@ @............@ @ffffffffffff@ @............@ @gggggggggggg@ @............@ @iiiiiiiiiiii@ @............@ @jjjjjjjjjjjj@ @............@ @jjjjjjjjjjjj@ Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: houghi Protected by the cold Bricks: *v...d!!d...v* *v...diid...v* *v...dddd...v* *v..........v* *v..........v* *v..........v* *v..........v* *v..........v* *vvvvvvvvvvvv* ************** xxxxxxxxxxxxxx ffffffffffffff .............. .............. vvvvvvvvvvvvvv .............. .............. .............. Bonus: wc..........cw wc..........cw fc..........cf fc..........cf fc..........cf +c..........c+ +c..........c+ +c..........c+ +>>>>>>>>>>>>+ +ffffffffffff+ ?WWWWWWWWWWWW? ?{{{{{{{{{{{{? .............. .............. ?------------? .............. .............. .............. Level: houghi Do not take the red pill Bricks: !..!...!.....@ .....!.@.!..@. ..!......@.!!. !.....!!...... ....!..!.!.@.! ..!...!.@..... ..!@.@........ .!..!..!.@.!.@ ..!..........! @....!...!.... ...!...!...!.. .!@..........@ .....!...!@... ...!........!. .@......!!.... ......@......@ ...........@.. .............. Bonus: .m....m....... mm............ ...m......*... .m............ ...*........*. .*............ .............. *..*......*.w. .............. ........*....w ..m...*....... *..........w.. ....*......... ........ww...w .......*....w. .............. .............. .............. Level: houghi Brother, where art thou? Bricks: i............i .i..........i. ..i........i.. ...i..gg..i... ....igvvgi.... ....g@@@@g.... ...g@ivvi@g... ..g.@.ii.@.g.. fgff@yyyy@ffgf g............g ......**...... .....*..*..... ....*....*.... .............. ....*....*.... .....*..*..... ......**...... .............. Bonus: .............. .b..........b. .............. ......ff...... ....bf55fb.... ....f....f.... ...&..jj..&... .............. .W...!ll!...W. .............. ......??...... .....p..p..... .............. .............. .............. .....W..W..... ......WW...... .............. Level: houghi Almost standard Bricks: kkkkkkkkkkkkkk jjjjjjjjjjjjjj iiiiiiiiiiiiii hhhhhhhhhhhhhh .............. gggggggggggggg ffffffffffffff eeeeeeeeeeeeee dddddddddddddd .............. .............. avavavavavavav cacacacacacaca bcbcbcbcbcbcbc !b!b!b!b!b!b!b .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .p.p.p.p.p.p.m .............. .............. Level: houghi Spicy Bricks: .aa........... .cc.....a..... ........c..... .a..a......... .c..c......... .............. ..a.......b.b. ..c..a....j.j. .a...c........ .c............ .........EEEE. ........EE..Eb .a.a.........j .c.c........@@ ............@@ ....a.....@.@@ ....c.....@.@@ @@@@@@@@@@@.@@ Bonus: ..*........... .p............ ........s..... .w............ .w............ .............. ..j.......b.s. ............s. .m...b........ .............. .............. .............. .*...........b ...*.......... .............. ....b......... .............. .............. Level: houghi Many more points Bricks: .............. .............. .............. .............. .............. .............. .............. .............. ..############ ..#@@@@@@@@@@@ ..#@aaaaaaaaaa ..#@abbbbbbbbb ..#@abcccccccc ..#@abczzzzzzz ..#@abczyyyyyy ..#@abczyxx### ..#@abczyxvv.. ############v# Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ....w0b0w0b0*0 ....0w0b0w0b0* ....b0w0b0w0b0 ....0b0w0b0w0b ....w0b0w0b0w0 ....0w0b0w0... ....b0w0b0**.. ............*. Level: houghi What will it be now? Bricks: .............. g............g g..ggg..ggg..g g............g g.j.v.jj.v.j.g ..j.v.jj.v.j.. ....v....v.... hhh.v.hh.v.hhh .............. .!.!.!..!.!.!. ..*.*.**.*.*.. .*.*.*..*.*.*. !.!.!.!!.!.!.! .............. .j.j.j..j.j.j. .j.j.j..j.j.j. .j.j.j..j.j.j. v.v.v.vv.v.v.v Bonus: .............. .............. .............. .............. .........l.... .............. .............. .............. ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? .............. .............. .............. .............. Level: houghi Forking Bricks: ...h...h...h.c ...h...h...h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c.h.c.h.c.h.c .c...c...c...c .c...c...c...c .ccccccccccccc .vvvvvvvvvvvvv Bonus: ...0...0...0.. ...0...0...0.. .*.~.*.~.*.~.~ .............. .............. .............. ...0...0...0.. .f.f.f.f.f.f.f ...0...0...0.. .............. .............. .............. .............. .c.*.c.*.c.*.c .............. .............. .............. .<<<<.ss.>>>>> Level: noname Holland - Germany Bricks: dddddddddddddd jjjjjjjjjjjjjj gggg##gg##gggg ...#a#..#a#... .x#..#..#..#x. v#*..#..#..*#v #....#..#....# .....#..#..... .....#..#..... aaaaa#aa#aaaaa ddddd#dd#ddddd hhhhh#hh#hhhhh .....#..#..... .....#..#..... .....#..#..... .....#..#..... .....#..#..... .....#..#..... Bonus: .0...1**1...0. .0...1..1...0. .0..3g..g3..0. ...3w....w3... .03........30. m3..........3m 3............3 .............. .............. .............. ......**...... .....g..g..... .............. .............. .............. .............. .............. .....g..g..... Level: houghi Sliding doors Bricks: ********..a..* ###########..* v...av.......a #...av........ #..##v######## #...###......v #....va......# v....va......# #####v#####..# ....###......# .....v.......# v....v.......v a####v######## aa..####..v#.. ....###...##.. ....##...##... ....#...##.... aaaaaaa##aaaaa Bonus: ..........w... .............. .............l .............. .....m........ .............. .............. .............. .....m........ .............. .............. w............. w....m........ ww........m... .............. .............. .............. .............. Level: houghi Tilted Bricks: EEE@@@##Ed*!fz EE@@@##Ed*!fzy E@@@##Ed*!fzyx @@@##Ed*!fzyx@ @@##Ed*!fzyx@c @##Ed*!fzyx@cv ##Ed*!fzyx@cv. #Ed*!fzyx@cv.. Ed*!fzyx@cv... d*!fzyx@cv.... *!fzyx@cv..... !fzyx@cv...... fzyx@cv....... zyx@cv........ yx@cv......... x@cv.......... @cv........... cv............ Bonus: .........w.*&3 ........w.*&3. .......w.*&3.* ......w.*&3.*. .....w.*&3.*.. ....w.*&3.*... ...w.*&3.*.... ..w.*&3.*.m... .w.*&3.*...... w.*&3.*....... .*&3.*........ *&3.*......... &3.*.......... 3.*........... .*............ *............. .............. .............. Level: houghi Balls Bricks: *a**a**aa*avvv *aa*aa*a**aEEE **a*a**a**a*** a*a*aa*a*a**aa aa***aa**a*aa* *aa**aa*aa*a** **aa*a**a*aa** a**a****a*a*a* a**a**aaa*a*a* aa**a*a***a*a* *a**a*a*a*a*aa *aaa*aa**aa**a ***a*a**aa***a ************** aaa*@*aaaaaaaa !a*@*@*a*a*a*a **@...@*a*a*a* @@.....@@@@@@@ Bonus: m............. .............. .............. .............. .............. .............. .............. .............. .............. .............. bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbwbwbwb wbbbwbbbwbwbwb bbb...bbbwbbbb bb.....bbbbbbb Level: houghi Many more points Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vv############ vv#@@@@@@@@@@@ vv#@aaaaaaaaaa vv#@abbbbbbbbb vv#@abcccccccc vv#@abczzzzzzz vv#@abczyyyyyy vv#@abczyxx### vv#@abczyxv... ############.# Bonus: 00000000000000 01111111111111 01222222222222 01333333333333 01444444444444 01555555555555 01...........j 01...........l 01............ 01............ 01..>>>>>>>>>> 01..mwwwwwwwww 01..mwj&&&&&&& 01..mw&ppppppp 01..mw&p...... 01..mw&p.mm... 01..mw&p.mm... .............. Level: houghi random thoughts Bricks: a..........c.. a...#......c.. a...#..gg..c.. accc#c....xx.. a....#ccgccc.. h....d...gx... h..*.di...x... ah.*.i!...g... aah*iia!axaa.. ..hhi....fga.. ...*...!.dgg.. ..i*h...!f.a.. ..i..h.b.#.a.. .bibbhbbf!daaa .bi...hxf..... ..i...x..!.... ..i...x....d.. ..i........d.. Bonus: -..........p.. -..........p.. -......mm..p.. -ppp.p....55.. -.....ppmppp.. 2....*...m5... 2..1.*!3..5... -2.1.!43..m... --21!!-4-5--.. ..22!.333}m-.. ...1..343*mm.. ..012.334}.-.. ..0..2.b3.3-.. .b0bb2bb}4*--- .b0...25}33... ..0...5.343... ..0...5.333*.. ..0........*.. Level: houghi Boxen Bricks: .............. .aaa...kkk.... .aaa...kkk.... .aaa...kkk.... .aaa...kkk.... ....bbb...jjj. ....bbb...jjj. ....bbb...jjj. ....bbb...jjj. .ccc...xxx.... .ccc...xxx.... .ccc...xxx.... .ccc...xxx.... ....zzz...eee. ....zzz...eee. ....zzz...eee. ....zzz...eee. .............. Bonus: .............. .............. ..b.....b..... ..b.....b..... .............. .............. .....s.....s.. .....s.....s.. .............. .............. ..w.....w..... ..w.....w..... .............. .............. .....*.....*.. .....*.....*.. .............. .............. Level: noname Half the place Bricks: E#@E@#EE#@E@#E @E#@#E@@E#@#E@ #@E#E@##@@#E@# E#@E@#EE#@E@#E @E#@#E@@E#@#E@ #@E#E@##@E#E@# ##@E@####@E@## @@@@@@##@@@@@@ aaaaaaaaaaaaaa bbbbbbbbbbbbbb cccccccccccccc jjjjjjjjjjjjjj kkkkkkkkkkkkkk .............. .............. .............. .............. vvvvvvvvvvvvvv Bonus: .............. .............. .............. .............. .............. .............. .............. .............. W.....mm.....W W.....ll.....W ..555.--.555.. b.....++.....b w............w .............. .............. .............. .............. ?????????????? Level: houghi Jumping Jack Flash Bricks: gEgEgEggEgEgEg gEgEgEggEgEgEg .............. .............. !!!!!!!!!!!!!! ************** ..@@......@@.. ......##...... xxxxxxxxxxxxxx .............. .............. !!!!!!!!!!!!!! ************** .............. .............. .............. !!!!!!!!!!!!!! ************** Bonus: m.*.m.**.m.*.m w.w.w.ww.w.w.w .............. &&&&&&&&&&&&&& ~~~~~~~~~~~~~~ jjjjjjjjjjjjjj .............. .............. !!!ll!!!!ll!!! .............. ffffffffffffff ++++++++++++++ -------------- .............. .............. bbbbbbbbbbbbbb WWWWWWWWWWWWWW cccccccccccccc Level: houghi Get in there!! Bricks: vvcba.g.i.h@#E v.cba.g.i.h@#E .Ecba.g.i.h@## *Ecba.g.i.h@@@ **Eba.g.i.hhhh ..Eba.g.i..... ..Eba.g.iiiiii ..Eba.g....... ...Ea.g....... ...Ea.gggggggg ...Ea......... .vv.E********* ....E********* ....E......... .....EEddddddd vv.....EEeeeee .........EEvvE .........vvEEv Bonus: {m........*... }..?....*..... ..........d... 5.l...*....... 55.?....d.*.d* .............. .........*..*. ...d?.*....... .............. ...........*.. ....d......... .....w5w5w5w5w .....w5w5w5w5w .............. ..........*... .............d ...........mm. .........ww..m Level: houghi Points at the top Bricks: dddddddddddddd .............. .............. .............. .............. .............. .............. .............. ############## xxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzzz !!!!!!!!!!!!!! cccccccccccccc jjjjjjjjjjjjjj kkkkkkkkkkkkkk .............. .............. Bonus: &&5&5&j&5&&5&& .............. .............. .............. .............. .............. .............. .............. .............. .m.m..m..m..m. ......p....... ..l........l.. ...s..p..s.... ..b.w...w..b.. .............. ...}.....{.... .............. .............. Level: houghi Try twice Bricks: xxxxxxxxxxxxxx .............. .............. .............. .............. .............. .............. .............. .************* .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: pppppppppppppp .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: houghi It is I, ... Bricks: a.a..a..a.a... a.a.a.a.a.a... a.a.a.a.a.a... aaa.a.a.a.a.## a.a.a.a.a.a... a.a.a.a.a.a... a.a..a...a.... .............. ......a..a.a.a ####.a.a.a.a.a ****.a.a.a.a.a !!!!.aaa.aaa.a xxxx...a.a.a.a yyyy.a.a.a.a.a zzzz..a..a.a.a .............. .............. .............. Bonus: *.*..*..*.*... .............. .............. .............. .............. .............. .............. .............. .............. .............. ....m......... ....m......... <<<>>>.......... .p.w..w..w.w.w .............. .............. .............. Level: houghi Two lines Bricks: @.....v......x @.....v......x @.....v......x @.....v......x @.....v......x @.....v......x @.....v......y @.....v......y @.....v......y @.....v......y @.....v......y @.....v......y @.....v......y @.....v......z @.....v......z @.....v......z @.....v......z @.....v......z Bonus: ......*......m .............. .............. .............. .............. .............. .............. ......!......! ......p......p ......!......! .............. .............. .............. .............. .............. .............. .............. ......w......w Level: houghi Draw bridge Bricks: eeeeeeeeeeeeee dddddddddddddd hhhhhhhhhhhhhh @@@@@@@@@@@@@. #############. .....v........ .....v........ .....v........ .EEEEvEEEEEEEE ....EEE....... .............. .............. .............. .............. .............. .............. .............. .............. Bonus: 5554433221100p 5554433221100p jjjjjjjjjjjjjj .............. .............. .....b........ .....b........ .....b........ .....m........ .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: houghi Low Resolution Bricks: .#...#..#...#. .#..#.#.#...#. .#..#.#.#.#.#. .##..#...#.#.. .............. ..###.###..##. ..#.#.#...#... #.#.#.##...#.. ..##..#.....#. ..#.#.###.##.. .............. EEEEEEEEEEEEEE @@@@@@@@@@@@@@ ############## xxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzzz ffffffffffffff Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: houghi Crossing Bricks: *.!........c.d .*.!......c.d. !.*.!....c.d.c .!.*.!..c.d.c. ..!.*.!c.d.c.. ...!.*c!d.c... ....!c*d!c.... ....c!d*c!.... ...c.d!c*.!... ..c.d.c!.*.!.. .c.d.c..!.*.!. c.d.c....!.*.! .d.c..##..!.*. d.c..#@@#..!.* .c....##....!. c............! .............. .............. Bonus: .0.12......4.3 0.0.12....4.3. .0.0.12..4.3.. 1.0.0.124.3... 21.0.0.123.... .21.0.1.12.... ..21.0.1.12... ...21.0.1.12.. ...421.0.0.12. ..4.321.0.0.12 .4.3..21.0.0.1 4.3....21.0.0. .3......21.0.0 3........21.0. ..........21.0 ...........21. ............21 .............. Level: houghi Stairs Bricks: @iihhggffd..*z iihhggffdd.z.v iihggffd...z#! hhgggfd....v.. hhggfdd.*..v.. hhggfd...z.!.. hggfd.*..v#!.i ggfdd..z#!...i gffd...v.....i fdd.*.#!....ij dd...z.....iij ..*..v.....ijk ...z#!...iijkk *..v.....ijjkz .z#!....ijjkzz .v......ijkkzz z!....iijjkzzz v..zzzijjkkzzz Bonus: .............. .............. ...........p.. .............. ..........m... ..........m.b. ......p.....b. ..........bw.. ........bwb... ........b..... .....bbwb..... ..p..l........ ...b..b....... ....bwb....... .b..b......... .lbwb......... b.b........... bwb........... Level: houghi Stars in the dark Bricks: .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! Bonus: jjjjjjjjjjjjjj jgjgjgjgjgjgjg jjjjjjjjjjjjjj gjgjgjgjgjgjgj jjjjjjjjjjjjjj jgjgjgjgjgjgjg jjjjjjjjjjjjjj gjgjgjgjgjgjgj jjjjjjjjjjjjjj jgjgjgjgjgjgjg jjjjjjjjjjjjjj gjgjgjgjgjgjgj jjjjjjjjjjjjjj jgjgjgjgjgjgjg jjjjjjjjjjjjjj gjgjgjgjgjgjgj jjjjjjjjjjjjjj jgjgjgjgjgjgjg Level: houghi The end ... Bricks: @@@@@@@@@@@@@@ .............. v............v v............v vEEEvhhhhvEEEv ....v.cc.v.... .c..vEEEEv..c. .c..........c. .cb........bc. .cb........bc. ..ba......ab.. ..ba......ab.. E..ak....ka..E E..akhhhhka..E #...kj..jk...# #...kj..jk...# #....j..j....# #....j..j....# Bonus: .............. .............. *............* .............. ....m....m.... .............. .*..........*. .............. .............. .............. .............. ..m........m.. ....p....p.... .............. .............. ....j....j.... .............. .....w..w..... lbreakout2-2.6.5/client/levels/SnyMaxx0000664000175000017500000003202012140767201014620 00000000000000Version: 1.14 Level: Johann NitroStart Bricks: .............. .............. .............. .............. .............. ...!......!... .............. .............. ......**...... .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ...5......5... .............. .............. ......00...... .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Johann FindEm Bricks: .............. .............. .v..........v. gggggggggggggg ......vv...... ....v....v.... .............. ...v......v... .............. ......vv...... ......vv...... .............. fv..ff..ff..vf .............. .............. .............. .............. .............. Bonus: .............. .............. ............}. .j..........j. ......55...... ....0....0.... .............. .............. .............. ......dd...... .............. .............. w....?..?....+ .............. .............. .............. .............. .............. Level: Johann RC Bricks: .............. .............. .........ggg.. ..gg....g..g.. ..g.g...g..... ..g.g...g..... ..gg....g..... ..g.g...g..g.. ..g.g.*.g..g.. ..g.g.g..ggg.. .............. e............e gggggggggggggg .............. .............. .............. .............. .............. Bonus: .............. .............. ..........l*.. ..*.....g..... .............. ........*..... ...?....*..... ..*........m.. ..*...j....... ..p.*.0...?*.. .............. 0............0 0?W*W000?ww??0 .............. .............. .............. .............. .............. Level: Johann Burst Bricks: dddddddddddddd ggdgggdgggdggg gggdggdggdgggd ggggdgdgdggggd dggggdhdggggdg gddddhdhddddgg dggggdhdggggdg ggggdgdgdggggd gggdggdggdgggd ggdgggdgggdggg xyxyxyxyxyxyxy .............. .............. .............. .............. .............. .............. .............. Bonus: 5.....<......5 ..4...!...4... ************** ************** wwwwww~wwwwwww ************** ************** ************** ******>******* wwbwww}wwwbwww .............. .............. .............. .............. .............. .............. .............. .............. Level: Johann 11-24 22:32 Bricks: .............. ....fEjjEf.... .iiif@jj@fiii. *..df@jj@fd..* ....f@jj@f.... d!!.f@jj@f.!!d ....f@jj@f.... *..ifEjjEfi..* ..iiffffffii.. bbbbbb..bbbbbb .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. ....d.mm.d.... .l.W..44..W.w. ....4.bb.4.... ....<.**.<.... g...c.<<.c...g ......55...... ......**...... ...?{.ff.{?... .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Johann The Fish Bricks: .............. g...gg..gg.... ...g...g...gg. ..g...g...g... .g...b...g...g ....b*b.g..... ...beeeb...b!. ..beveeeb.be!. vEeeeeeee@ee!. vv@eeeee@v@e!v ..v@eee@v.v@!v ...v@e@v...vvv ....v@v....... .............. .............. .............. .............. .............. Bonus: .............. f............. .......?..........?... .....*...m...~ ........?..... ....bwb....?f. ....5..-..?4-. ..}.......44+. .....g.....4-. ............f. .............. .............. .............. .............. .............. .............. .............. Level: Johann Sacker Bricks: kkkkk....v.... kkkkk...v..... kkkkk..v..hhh. .......v...h.h ....!..vdddh.. ....i..djjxd.. ....iddjjj.d.. ....d!..*..d.. ...dcdddddc... ...cic...cic.. #@#.c.e#..c.#. eeeeeeeeeeeeee .............. .............. .............. .............. .............. .............. Bonus: .........!.... ........m..... *dw.p.....cd.. .............m ..........d... ....s...w..... ....4j..-+.}.. ....4......-.. ....4.fg..4... ...555...555.. .b..4.b...-... .b..w.b....... .............. .............. .............. .............. .............. .............. Level: Johann CropCircles Bricks: .....eeee..... ....efhhfe.... ...efhEEhfe... ..*fh#!!#hf*.. .efh..!!..hfe. kefh..!!..hfek .efh..!!..hfe. .vefh#!!#hfev. ..vefhEEhfev.. ...vefhhfev... ....veffev.... .....veev..... ......yy...... .............. .............. .............. .............. .............. Bonus: ......pp...... .....b44b..... ....j4..4j.... ..l.4.55.4.~.. .!0>..55..<0!. .*0>..55..<0m. .}0>..55..<0{. ..0.4.55.4.0.. .....4..4..... ....fj44jf.... .....&ww&..... ......WW...... .............. .............. .............. .............. .............. .............. Level: Johann ServoSaver Bricks: .............. ..........j... ........cc!cc. ..........j... ..........j... ..bbbbbbbbbbb. .#bcccccccccb# ..bc*******cb. ..bc*******cb. hhbc*******cb. ddbcccccccccb. ..bbbbbbbbbbb. .............. .............. .............. .............. .............. .............. Bonus: .............. ..........*... ........f}j}f. ..........w... ..........w... ..c.........c. ......g.....<. ..>.224555l... ..>.22l5555<.. 55..22b5555... ff..!..g..~... ..w<.<........ .............. .............. .............. .............. .............. .............. Level: Johann ShortWave Bricks: k.k.g.k......k .k.gig.k....k. g.gi!ig.k..k.g igi!*!ig.kk.gi !i!*!*!ig..gi! *!*!i!*!iggi!* !*!igi!*!ii!*! i!igbgi!*!!*!i gigbvbgi!**!ig bgbvkvbgi!!igb vbvk.kvbgiigbv kvk...kvbggbvk .k.....kvbbvk. ........kvvk.. .........kk... .............. .............. .............. Bonus: ....l......... .............. .............. .....g........ .W..........?. .............. ....}.....&... ...?..j...?... .{..l......... ?..~0c........ b.w0.0c...s?.w 0l0...0!.....0 .0.....0g..w0. ........0..0.. .........00... .............. .............. .............. Level: Johann Really Simple Bricks: ************** *############* *#************ *#*ggggggggggg *#*g********** *#*g*gggggggg* *#*g*g******** *#*g*g*ggggggg *#*g*g******** *#*g*ggggggggg *#*g********** *#*gggggggggg* *#************ i############# .............. .............. .............. .............. Bonus: 00000000000000 0............0 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.00000j000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 0.000000000000 5............. .............. .............. .............. .............. Level: Johann Missing Link Bricks: v..vvvvvvv.vv. vv.vvvvvv.vvv. v.vvv.vvv.vv.v v..vvvvvv.vvvv .............. .v..v.vv...v.v .v..v.v.v..v.v .v..v.v.v..vv. .v..v.v..v.v.v .v..v.v..v.v.v .vv.v.v..v.v.v .............. xxxxxxxxxx.xxx bbb.bbbbbbbbbb !!!!!!!!!!.!!! eee.eeeeeeeeee dddddddddd.ddd .............. Bonus: ....{......... ......5.?.}... 5..W.........? .....-..}..5.W .............. .j..1.d....... ......5....5.. .?..W.j.d..5.. .b..?....?.{.. ......&..5...+ .{..5......&.. .............. 1....{..b..+.1 .<-.....1w.}.s ....5b..+...&. .*.......-.*.. ............5{ .............. Level: Johann Sny Bricks: iiciiciicicici iciciccicicici iciiiciccicici iiciicicciccci iiiciciiciiici iciciciiciiici iiciiciiciccii iiiiiiiiiiiiii eeeeeeeeeeeeee kkkkkkkkkkkkkk EkEkEkEkEkEkEk kkkkkkkkkkkkkk ************** ************** gggggggggggggg dddgdddgdddgdd d.dgd.dgd.dgd. d.ddd.ddd.ddd. Bonus: ..4..4..4.4.4. .4.4.44.4.4.4. .4...4.44.4.4. ..4..4.44.444. ...4.4..4...4. .4.4.4..4...4. ..4..4..4.44.. ..>.....m..... .............. .............. .............. .............. <<<<<<<<<<<<<< .WWWWWWWWWWWW. d.{{{.fj.{{{.. .?...?...?...? .............. .............. Level: Johann ToothPick Bricks: dddccccccccddd ddckkkkkkkkcdd dckxxxxxxxxkcd ckxhhhhhhhhxkc kxhhhhhhhhhhxk xhhhhhhhhhhhhx !xhhhhhhhhhhx! ..xhhhhhhhhx.. ...xxxxxxxx... ...#......#... .............. .............. ......**...... .............. .............. .............. .............. .............. Bonus: .............m .............. .....dddd..... ...55555555... ..?5......5... &.?5w.....5.l. ..?5!.....5..~ ...55555555... .............. .............. .............. .............. ......jw...... .............. .............. .............. .............. .............. Level: Johann Justalevel Bricks: .............. .k.k.k.k.k.k.. !!!!!!!!!!!!!! k.k.k.k.k.k.k. .............. k###kkkkkk###k vvvvvvvvvvvvvv vvvvvvvvvvvvvv k###kkkkkk###k .............. .............. !!!!!......... gggg!!!!!!!!!! dddggggggggggg **dddddddddddd .************d ............** .............. Bonus: .............. .............. .............. .............. .............. ....444444.... d&&m......m&&d d&&&......&&&d ......WW...... .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Johann justanotherlevel Bricks: .............. .............. .............. gggggggggggggg ccccc!vv!ccccc kkkk@vvvv@kkkk kkkk@vvvv@kkkk kkkk@vvvv@kkkk @@@@@vvvv@@@@@ hhhhhhhhhhhhhh dddddddddddddd gggggggggggggg !...vixxiv...! ...vi....iv... ..vi......iv.. .vi........iv. vi..........iv i............i Bonus: .............. .............. .............. .............. ......55...... .s...5555....c ......-+...<.. ..........?... .............. .............. ....}......... .b.....j....b. ......gf...... ....2....2.... .............. .............. .............. w............~ Level: Johann Purplepeopleeater Bricks: .............. ...cccccccccxi dddc*******cxi dddccccccc*cxi dddkkkkkic*cxi dddk#@#kic*cxi ...k#@#kic*cxi kkkkkkkkic*cxi cckiiiiiic*cxi *ccccccccc*cxi ***********cxi ccccccccccccxi xxxxxxxxxxxxx! iiiiiiiiiiiii! !!!!!!!!!!!!!! hhhhhhhhhhhhhh hhhhhhhhhhhhhh .............. Bonus: .............. ...1jjjjjj...* 5551.......... 5551555555.... 555.....l5.... 555......5.... .........5.... .........5.... 55p...{.W5.... .555555555.... .............. j............. ......>....... ..}.?.w.?.}.W. .............. g+..........w> .....f...........f 0f...........f 0f...........f 00...........f lbreakout2-2.6.5/client/levels/Izusiowe0000664000175000017500000001764612140767201015050 00000000000000Version: 1.00 Level: bluszcz THC 1 Bricks: hhhhh........c ..h.........c. ..h....ccc.c.. ..h...c...c... ..h.xc.x...... cchcxc.x...... c.hcx..x.dddd. c.h.x..x.d..d. c.h.xxxx.d.... .cc.x..x.d.... ...cx..x.d.... ...cx..x.d.... ....xc.x.d.... .....c...d.... .....c...d.... ......c..d..d. jjjjjbd..dddd. jjjjjbd....... Bonus: ..m.*........5 ..&.........5. .......555.5.. ......5...5... ..b.25.2...... 55<525.2...... 5..52..2.----. 5...2..2.-..-. 5.l.2222.-.... .55.2..2.-.... ...52..2.-.... ...52..2.-.... ....25.2.-.... .....5...-.... .....5...-.... ......m..-..-. 00000bw..----. 00000bw....... Level: bluszcz THC 2 Bricks: ....cc...c.... ......ccc.c.c. ........cc.cc. ccccccc..c.cc. ......ccc..ccc ........cc.c.c .........cc.cc ..........c.cc ..........*z** vvvvvvvvvvazza vvvvvvvvvvazza vvvvvvvvvvazza aaaaaaaaaaazaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ........b..... ............b. ..........j... ...........5.. ...........55. ...........55. ...........55. .........w.5.. ............gm cccccccccccccc .............. .............. .............. Level: bluszcz EGIS Bricks: .............. .............. .............. .............. ggg.....f..... g.......f..... g.........gggg g...g...f.g... gg..g...f.g... g...g.ggf.gggg g...g..gf....g g...g..gf....g ggg.ggggf.gggg ........f..... ........f..... zzzzzzzzzzzzzz zzzEzzzzzzzzzz zzzzzzzzzzzzzz Bonus: .............. .............. .............. .............. 555.....l..... 5.......l..... 5.........5555 5...5...l.5... 55..5...l.5... 5...5.55l.5555 5...5..5l....5 5...5..5l....5 555.5555l.5555 ........j..... ........m..... wbwbwbwbwbwbwb .............. +....++......+ Level: bluszcz ATS Bricks: dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd ccccccddcccccc dddddcddcddddd dddddcddcddddd dcccdcddcddccc dcccdcddcddccc dcccdcddcddccc dcccdcddcddddd dddddcddcddddd dddddcddcccccd dcccdcddcccccd dcccdcddcccccd dcccdcddcccccd dcccdcddcddddd dcccdcddcddddd Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 ......gg...... &&&&&.gg...... &&&&&.gg...... &>>>&.gg...bbb &>>>&.gg...bbb &>>>&.gg...bbb &>>>&jggj....? 11111jggj....? 11111.gg.....? 1???1.gg.....? 1???1.00.....? 1ppp1.00.....? 1fff1.00.????? swwws.00.????m Level: bluszcz ZiPPo Bricks: ......****.... ......*****... .......****... ........****.. ........****.. .........aa... .........aa... .bbbbbbbbbbbbb .bbbbbb.bbbbbb .bbbbbb.bbbbbb .bbbbbb.bbbbbb ........bbbbbb ........bbbbbb ........bbbbbb ........bbbbbb ........bbbbbb ........bbbbbb ........bbbbbb Bonus: ......5555.... ......55555... .......5555... ........5555.. ........5555.. .........44... .........44... .3333335bbbbbb .333333.bbbbbb .333333.bbbbbb .*c*c*c.bbbbbb ........bb5jbb ........555555 ........55m5m5 ........bwbwbw ........555555 ........555555 ........5p5p5p Level: Bluszcz 69 Bricks: xxxxxiixxxxx** xiiiiiix!!!x** xiffffix!!!x!* xiffffix!!!x*! xiiiiiix!!!x!* xxxxxiixxxxx*! x!!!xiiiiiix!* x!!!xidjjdix*! x!!!xijhhjix!* x!!!xijhhjix*! x!!!xidjjdix!* x!!!xiiiiiix** xxxxxiixxxxx** iiiiiiiiiiiiii ************** ************** ************** ************** Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. bbbbbbbbbbbbbb bbbbbbmmbbbbbb bbbbbbjjbbbbbb bbbbbbbbbbbbbb Level: Bluszcz fUCK ME Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! iiiiiiiiiiiiii iiiiiiiiiiiiii !!!i!!!!iiiiii !iii!iiii!iii! !iii!iiii!!ii! !!!i!!!iii!!!! ii!i!!!iiii!!i ii!i!iiiii!!!i ii!i!iiii!!i!! !!!i!!!!i!iii! iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii !!!!!!!!!!!!!! Bonus: .............. .............. .............. .............. ...........b.. wbbbbbwbbbbbbw .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. mmmggggggggmmm Level: Bluszcz Wonderful LIVES Bricks: xxxxxxxxxxxxxx xxxxxxxxxxxxxx cccxxxxxxxxxxx cxxxxxxxxxxxxx cxxxxxxxxxxxxx cxxxcccxccxcxc cxxxcccxccxccx cccxcxcxccxcxc iiiiiiiiiiiiii iiiiiiiiiiiiii xxxxxxxxxxxxxx xxxxxxxxxxxxxx xxxxxxxxxxxxxx ************** ************** ************** ************** ************** Bonus: l5lll5l55lllll l5555l55555lll l55ll5lll55555 l5555555ll55l5 555l5ll5555ll5 l55bbbbbb555l5 l55bbbjbb5555l lllbbbbbbll55l 5l5lbbbbbl5l55 555555j555ll55 ll55555555555l ll555lll55llll ll5l5l5555llll bbbbb55555bbbb jjjjjj555jjjjj jjjjjjjjjjjjjj ++m+m+m+m+m+m+ wwwwwwwwwwwwww Level: Bluszcz Happy Izoos Bricks: iiiiiiiiiiiiii i************i i************i ihddd****ddd*i iidxd*ii*dxdgi ihdxd*ii*dxdhi iiddd*ii*dddgi ighgh*ii*ghhhi iighg*ii*hghgi ihdgh*ii*ghdhi iidhg****hgdgi ihhdhghghgdhhi iihddddddddhgi i************i iiiiiiiiiiiiii xxxxxxxxxxxxxx !!!!!!!!!!x!!! vvvvvvvvvvvvvv Bonus: .............. ...........5.. ..........555. ..........5.5. ......5!..5555 ......!5..5555 ......5!..555. ......!5..555. ......5!...5.. ......!5...... ffffffffffffff ggggg!!!gggggg ccccc!!!cccccc mmmmm555mmmmmm wwwwwwwwwwwwww >>>>>>>>>>>>>> bbbbbbbbbb.bbb ++++++++++++++ Level: Bluszcz Happy Izoos Bricks: @@@@@@@@@@@@@@ xxxxxxxxxxxxxi xxxxxxxxxxxxii @@@@@@@@@@@@i@ hhhhhhhhhhhhhh iziiiiziziziii izzzzizizizizz izzzizzizizizz izzzizziziziii izzizzzizizzzi izzizzzizizzzi izizzzzizizzzi iziiiiziiiziii vvvvvvvvvvvvvv yyyyyyyyyyyyyy xxxxxxxxxxxxxx !*!*!*!*!*!*!* zzzzzzzzzzzzzz Bonus: 55555555555555 55555555555555 55555555555555 555555555555m5 wwwwwwwwwwwwww 5.5555.5.5.555 5....5.5.5.5.. 5...5..5.5.5.. 5...5..5.5.555 5..5...5.5...5 5bb5bbb5b5bbb5 5b5bbbb5b5bbb5 5b5555b555b555 wwwwwwwwwwwwww gggggggggggggg bWbWbWbWbWbWbW b5b5bbb5b5b5b5 ww>>>>>>>>>>ww Level: Bluszcz Wypas Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvEEExxEEEvvv vvvExxxxxxEvvv vvvE!dddd!Evvv vvvE!eeee!Evvv vvvE!iggi!Evvv ...E!gggg!E... dddE!gggg!Eddd hhhE!ifai!Ehhh fffE!iafi!Efff !!!E!diid!E!!! !!!E!deed!E!!! !!!E!dddd!E!!! !!!E!!!!!!E!!! !!!EEEEEEEE!!! Bonus: ************** llllllllllllll <<<<<<<<<<<<<< >>>>>>>>>>>>>< &&&...--...&&& &&&.!!!!!!.&&& &&&.555j55.&&& &&&.555555.&&& &&&.55j555.&&& ....555j55.... www.555555.www www.j55555.www www.5555j5.www bbb.555555.bbb bbb.555555.bbb bbb.5jj555.bbb bbb.555j55.bjb bmb........mmm Level: Bluszcz Till end Bricks: @@@@@@@@@@@@@@ @e!!!!!!!!!!!@ @e!iiivviiii!@ @e!@@@@@@@@i!@ @e!@eeeeee@i!@ @e!@eeeeee@i!@ @e!@zzzzzz@i!@ @e!@dddddd@i!@ @e!@dddddd@i!@ @e!@@@@@@@@i!@ @e!iiiiiiiii!@ @e!!!!!!!!!!!@ @@@@@@!!@@@@@@ dddgd@!!@dgdgd chchc@!!@chchc hbhbh@!!@hbhbh *.*.*....*.*.* .............. Bonus: 55555555555555 5............5 5.....mm.....5 5w.00000000.w5 5..15555551..5 5..25555552..5 5..3llllll3..5 5..35555553..5 5..55555555..5 5..55555555..5 5..bbbbbbbbb.5 5pbbbgssgbbbp5 5555jj..jjj555 b...bj}{jb...b w...wj<+jw...w .w.>.j+.w. m.m.m....m.m.m .............. Level: Bluszcz Rasta Bricks: hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd .............. .!.!.!.!.!.!.! !*!*!*!*!*!*!* .v.v.v.v.v.v.v v.v.v.v.v.v.v. Bonus: 55555555555555 33333333333333 22222222222211 11111111111111 00000000000000 m....&.b...>m> .Ww...!.{{...> ...s-.}bl...s. m.........+..m b............b ...b!..b..b... .............. b....b...b..!b .............. .!.f.m.......m !}w}-}-}p}l}w} .............. .............. Level: Bluszcz Terkinka Bricks: xxxxxxxxxxxxxx xvvvvvvvEEEEex xvvvvvvvEEEEex xvvvvvvvEEEEex xvvvvvvvEEEEex xvvvvvvvaaaa*x xvvvvvvvaaaa*x xvvvvvvvaaaa*x xvvvvvvvaEEa*x xvvvvvvva!!a*x xvvvvvvvaaaa*x xvvvvvvvaEEa*x xvvvvvvva!!a*x xvvvvvvvaaaa*x xvvvvvvvaEEa*x xxxxxxxxa!!a*x xxxxxxxxxaaa*x xxxxxxxxxEEx*x Bonus: ------->>>>--- .2222222gwb .215j512....>b .2155512w...~b .2155512.>>.>b .2155512....~b .2111112....5b .2222222.bb.-b ............5b +*+*Wbwpgss.>b bbbbbbbbbbb.fw lbreakout2-2.6.5/client/levels/Yexter0000664000175000017500000005501612140767201014503 00000000000000Version: 1.00 Level: Yexter Yexter Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj j#j#j##j#j#jjj j#j#j#jj#j#jjj j#j#j##jj#jjjj jj#jj#jj#j#jjj jj#jj##j#j#jjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjj###j##j###j jjjj#jj#jj#j#j jjjj#jj##j###j jjjj#jj#jj##jj jjjj#jj##j#j#j jjjjjjjjjjjjjj jjjjjjjjjjjjjj .............. .............. Bonus: ...........*.. .............s .............. ..m...4....... ..m.....&.l.j. ......?....... ............*. .............. bbbb.......... .ww........... .w...>..+}...& &.....&....... ........<...*. d*d........... .............. .............. .............. .............. Level: Yexter Yexter Bricks: .............. .............. .............. .jvaa....aavj. .jvaa....aavj. .jvaa....aavj. .jvaa....aavj. .jvaa....aavj. .jvaaa..aaavj. .jvaaaaaaaavj. .jvvaaaaaavvj. .jjvvvaavvvjj. ...jjvaavjj... ....jvaavj.... ....jvaavj.... ....jvaavj.... ....jvaavj.... ....jvaavj.... Bonus: .............. .............. .............. .............. ..........1... ....-......+.. ..?......1.... ...f*......*.. ..........c... .....j........ ..}........+.. .....-.&...... .............. .......*...... .............. .....?p....... .............. .............. Level: Yexter Yexter Bricks: ##..######..## ##..aaaaaa..## **..bbbbbb..** ii..bbbbbb..ii ii..aaaaaa..ii ii..bbjjjj..ii ii..bbjjjj..ii **..aaaaaj..** ##..bbbbbj..## ##..bbbbbj..## **..aaaaaj..** ii..bbjjjj..ii ii..bbjjjj..ii ii..aaaaaa..ii ii..bbbbbb..ii **..bbbbbb..** ##..aaaaaa..## ##..######..## Bonus: .............. .............. .......5...... .....&........ ....*......... .........5.... ....4......... .............. .......*...... ....j......... .....&...d.... .............. .............. ......ww...... ....*..g...... ......5....... .............. .............. Level: Yexter Yexter Bricks: .............. ....######.... .jj..####..jj. .jjj..##..jjj. .jvjj....jjvj. .jvvjj..jjvvj. .jjvvjjjjvvjj. .jjjvvjjvvjjj. ...jjvvvvjj... ....jjvvjj.... ...jjvvvvjj... .jjjvvjjvvjjj. .jjvvjjjjvvjj. .jvvjj..jjvvj. .jvjj....jjvj. .jjj..##..jjj. .jj..####..jj. ....######.... Bonus: .............. .............. .?..........?. .............. .............. .............. .............. .?..........?. .....5ml5..... .............. .............. .?.4w+dd-b4.?. .............. .....s..s..... .?..........?. .............. .............. .............. Level: Yexter Yexter Bricks: .............. .vvvvvvvvvvvv. .vaaaaaaaaaav. .v##########v. .vaaaaaaaaaav. .vvvvv##vvvvv. .....vaav..... .....v##v..... vvv..vaav..vvv .v...v##v...v. .v...vaav...v. .v...v##v...v. .v...vaav...v. .....v##v..... .....vaav..... .....v##v..... .....vaav..... .....vvvv..... Bonus: .............. .............. .............. .............. ...j......j... .&*..&..&..*&. ......55...... .............. .b...????...b. .............. ......}}...... .............. .b...b..b...b. .....w..w..... .....b..b..... .............. ......++...... .............. Level: Yexter Yexter Bricks: ......!!...... ....!!aa!!.... ...!aaaaaa!... ...!ajjjja!... ...!ajaaja!... ..!ajjaajja!.. .!aajakkajaa!. .!ajjakkajja!. .!ajakxxkaja!. .!ajakxxkaja!. .!ajjakkajja!. .!aajakkajaa!. ..!ajjaajja!.. ...!ajaaja!... ...!ajjjja!... ...!aaaaaa!... ....!!aa!!.... ......!!...... Bonus: .............. .............. .............. .............. ......>?.1... ......dd...... .............. ..b..-..+..b.. .............. ..m...33...m.. .............. .............. .............. .............. Level: Yexter Yexter Bricks: .............. .............. fvvvvvvvvvvvvf v............v v.fvvvvvvvvf.v v.v........v.v v.v.fvvvvf.v.v v.v.v....v.v.v v.v.v.vv.v.v.v v.v.v.vv.v.v.v v.v.v....v.v.v v.v.fvvvvf.v.v v.v........v.v v.fvvvvvvvvf.v v............v fvvvvvvvvvvvvf .............. .............. Bonus: .............. .............. .............. .............. ..&...ss...&.. ..}........}.. ....bbbbbb.... ....b....b.... ....b.44.b.... ....b.g+.b.... ....w....w.... ....*dddd*.... .............. ..0...dd...0.. .............. .............. .............. .............. Level: Yexter Yexter Bricks: ######.......j aaaaaa......ji ######.....jih aaaaaa....jihg ######...jihgf aaaaaa..jihgfk ######.jihgfke aaaaaa.####### ..####........ ...aaa........ j...########## ij...aaaaaaaaa hij...######## ghij...aaaaaaa fghij...###### kfghij...aaaaa ekfghij...#### #######....aaa Bonus: .............. .............. .............. ...........&.j .............. ..........&..b ............bb .............. .............. .............. .............. .............. .............. s............. .4............ m............. mm.4..+....... .............. Level: Yexter Yexter Bricks: .vvv.vvvv.vvv. .v*v.v**v.v*v. .vvv.vvvv.vvv. .............. .vvv.vvvv.vvv. .v*v.v**v.v*v. .vvv.vvvv.vvv. .............. .vvv.vvvv.vvv. .v*v.v**v.v*v. .vvv.vvvv.vvv. .............. .vvv.vvvv.vvv. .v*v.v**v.v*v. .vvv.vvvv.vvv. .............. .............. .............. Bonus: ...b.w..w.b... .....b..b..... ......&&...... .............. .....+..+..... .............. .5..........5. .............. .....1..1..... .............. .............. .............. ...+.<..<.5... .............. .....}..}..... .............. .............. .............. Level: Yexter Yexter Bricks: vvvvvv**vvvvvv *............* v.vvvv**vvvv.v v.*........*.v v.v.vv**vv.v.v v.v.*iiii*.v.v v.v.vi!!iv.v.v v.v.v!hh!v.v.v *.*.*i**i*.*.* *.*.*i**i*.*.* v.v.v!hh!v.v.v v.v.vi!!iv.v.v v.v.*iiii*.v.v v.v.vv**vv.v.v v.*........*.v v.vvvv**vvvv.v *............* vvvvvv**vvvvvv Bonus: ......m&...... .............. .............. .............. ....??????.... .............. ....l....l.... ....?....?.... .............. .............. ....2....2.... ....2....2.... .............. .............. .............. ......44...... .............. .............. Level: Yexter Yexter Bricks: !v!v!v!!v!v!v! vvvvvvvvvvvvvv v****v*vvv*v*v v*vvvv*vvv*v*v v*vvvv*vvv*v*v v*vvvv*vvv*v*v v*vvvv*vvv*v*v v*vvvv*vvv*v*v v*v**v*vvv*v*v v*vv*v*vvv*v*v v*vv*v*vvv*v*v v*vv*v*vvv*v*v v****v*****v*v vvvvvvvvvvvvvv !v!v!v!!v!v!v! .............. .............. .............. Bonus: .............. ........4..... .............. .....2........ ...l+...l..... .............. &..+.2.......& ........4..... .............. ..bb.+..&..+.. ..wb.......... ..bb.......... *............* .............. .}.s....s.}... .............. .............. .............. Level: Yexter Yexter Bricks: .............. .............. ..#a##a#.v##v. ..a####av.aa.. ..#a##a#.v##v. ....aa..v.aa.. ...v##v..v##v. ....aa..v.aa.. ...v##v..v##v. ....aa..v.aa.. ...v##v..v##v. ....aa..v.aa.. ...v##v..v##v. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ......m....... .............. ...5..+..3..5. .............. ...3.......... .............. ......}....... .............. ...s.....s.... .............. .............. .............. .............. .............. Level: Yexter Yexter Bricks: .............. *.*.*....*.*.* ......vv...... .!.!..vv..!.!. .............. *.*.*....*.*.* ......vv...... .!.!..vv..!.!. .............. *.*.*....*.*.* ......vv...... .!.!..vv..!.!. .............. *.*.*....*.*.* ......vv...... .!.!..vv..!.!. .............. *.*.*....*.*.* Bonus: .............. .............. ......lb...... .............. .............. .............. ......55...... ....b....b.... .............. .............. ....c....c.... ....b....b.... .............. .............. .2..........2. ......ww...... .............. .............. Level: Yexter Yexter Bricks: .v..........v. .k..........k. .v....kk....v. .k...kvvk...k. .v..kvkkvk..v. .k.kvk..kvk.k. .vkvk....kvkv. .kvk......kvk. .vk........kv. .k..........k. .............. .aaaaaaaaaaaa. .avvvvvvvvvva. ..vjjjjjjjjv.. .xvvvvvvvvvvx. .xxxxxxxxxxxx. .............. .............. Bonus: .............. .............. ......bb...... .............. ......??...... .....?..?..... ....?....?.... ...?......?... .............. .............. .............. ...*d5l5dd*... .............. ......++...... .............. .............. .............. .............. Level: Yexter Yexter Bricks: .............. .............. .cccccccccccc. .vvvv*cc*vvvv. .vvvvvccvvvvv. .ccccvccvcccc. .c*vcvccvcv*c. .cvccvccvccvc. .cvc*vccv*cvc. .cvccccccccvc. .cvvvvvvvvvvc. .cccccccccccc. .............. .............. .zzz.zzzz.zzz. .z*z.z**z.z*z. .zzz.zzzz.zzz. .............. Bonus: .............. .............. .............. .............. ......ll...... .............. ......??...... ......??...... ...3......3... ......++...... .bbb......bbb. .bw........wb. .............. .............. .............. .&...s..s...&. .............. .............. Level: Yexter Yexter Bricks: ************** zzzzz****zzzzz z*zz*zzzz*zz*z zzzzzzzzzzzzzz z*zz*z**z*zz*z zzzzzzzzzzzzzz z*zz*zzzz*zz*z zzzzzz**zzzzzz z*zz*zzzz*zz*z zzzzzzzzzzzzzz z*zz*z**z*zz*z zzzzzzzzzzzzzz z*zz*zzzz*zz*z zzzzzz**zzzzzz z*zz*zzzz*zz*z zzzzzzzzzzzzzz zzzzzzzzzzzzzz .............. Bonus: .............. .............. .............. .?..?.??.?..?. .............. ???.?....?.??? ......??...... .?..?....?..?. .............. ???.?.??.?.??? .............. .?..?....?..?. ......??...... ???.?....?.??? .............. .............. ......??...... .............. Level: Yexter Yexter Bricks: .............. .............. .............. .aaaaaaaaaaaa. ..dddddddddd.. j..hhhhhhhh..j ij..gggggg..ji hij..jjjj..jih kkij..ii..jikk gggj......jggg kkij..ii..jikk hij..jjjj..jih ij..gggggg..ji j..hhhhhhhh..j ..dddddddddd.. .aaaaaaaaaaaa. .............. .............. Bonus: .............. .............. .............. .............. .....c.c.>.... .............. ....?..5.?.... ......g....... ...b......b... ..s........s.. ......ll...... .......j...... .....?..?..... ...b......b... ..+........+.. .............. .............. .............. Level: Yexter Yexter Bricks: .............. k#####..#####k vk####..####kv kvk###..###kvk vkvk##..##kvkv kvkvk#..#kvkvk vkvkvk..kvkvkv kvkvkvkkvkvkvk vkvkvkvvkvkvkv kvkvkvkkvkvkvk vkvkvkvvkvkvkv kvkvkvkkvkvkvk vkvkvk..kvkvkv kvkvk#..#kvkvk vkvk##..##kvkv kvk#E#..#E#kvk vk#EE#..#EE#kv k#####..#####k Bonus: .............. l............l .............. .............. ...?......?... ....?....?.... .....?..?..... .&....55....&. .............. .....b55b..... .....w++w..... +.....55.....+ .b..&*..*&..b. w............w .............. 4............4 .............. .............. Level: Yexter Yexter Bricks: .............. ....iiiiii.... ....i####i.... ....iaiiai.... ...ii#ii#ii... ...i#iiii#i... .iiiaiiiiaiii. .i##iiiiii##i. .iaiiiiiiiiai. .i#iiiiiiii#i. .iaiiiiiiiiai. .i##iiiiii##i. .i###iiii###i. .iiii#ii#iiii. ....iaiiai.... ....i#ii#i.... ....i#ii#i.... ....iiiiii.... Bonus: .............. .............. .............. .....m..l..... .............. .............. .............. ......jj...... ..2?......?2.. ...2..}}..2... ..2?......?2.. ....b....b.... .....+..+..... .............. .............. ......ss...... .............. .............. Level: Yexter Yexter Bricks: .............. .............. .............. vzv..vzzv..vzv z*z..z**z..z*z vzv..vzzv..vzv vvv..vvvv..vvv vzv..vzzv..vzv z*z..z**z..z*z vzv..vzzv..vzv vvv..vvvv..vvv vzv..vzzv..vzv z*z..z**z..z*z vzv..vzzv..vzv vvv..vvvv..vvv vzv..vzzv..vzv z*z..z**z..z*z vzv..vzzv..vzv Bonus: .............. .............. .............. .s....ss....s. s.s..s..s..s.s .s....ss....s. .5....55....5. .s....ss....s. s.s..s..s..s.s .s....ss....s. .5....55....5. .s....ss....s. s.s..s..s..s.s .s....ss....s. .5....55....5. .s....ss....s. s.s..s..s..s.s .s....ss....s. Level: Yexter Yexter Bricks: ###v.!..!.v### ##v.!....!.v## #v.!.j..j.!.v# v.!.jv..vj.!.v .!.jva..avj.!. !.jvak..kavj.! .jvaka..akavj. jvakak..kakavj vakaka..akakav vakaka..akakav jvakak..kakavj .jvaka..akavj. !.jvak..kavj.! .!.jva..avj.!. v.!.jv..vj.!.v #v.!.j..j.!.v# ##v.!....!.v## ###v.!..!.v### Bonus: ....l....l.... .............. .............. .............. .....&..&..... .....b..b..... ...4.b..b.4... .....w..w..... 5b.*......*.b5 5b...j..j...b5 .............. .............. .............. .....+..+..... .............. .............. .............. .............. Level: Yexter Yexter Bricks: .............. .............. .............. .............. ##jajxiixjaj## ##jajxiixjaj## ##jajxiixjaj## #jajxiiiixjaj# jajxiiiiiixjaj ajxiiiiiiiixja ajxiiiiiiiixja jajxiiiiiixjaj #jajxiiiixjaj# ##jajxiixjaj## ##jajxiixjaj## ##jajxiixjaj## .............. .............. Bonus: .............. .............. .............. .............. ......??...... ......??...... ......??...... .....ssss..... ....ssjjss.... ...s..bb..s... ...s.w44w.s... .....*++*..... .............. .............. .............. .............. .............. .............. Level: Yexter Yexter Bricks: .............. .............. .............. cccaccccccaccc czcaczcczcaczc cccaccccccaccc aaaaaaaaaaaaaa cccaccccccaccc czcaczcczcaczc cccaccccccaccc aaaaaaaaaaaaaa cccaccccccaccc czcaczcczcaczc cccaccccccaccc aaaaaaaaaaaaaa cccaccccccaccc czcaczcczcaczc cccaccccccaccc Bonus: .............. .............. .............. .............. ......ll...... ...&555555&... ....dddddd.... ....bbwwbb.... .............. ....bbwwbb.... .............. .............. .............. .............. ss..........ss ....+....+.... .............. .............. Level: Yexter Yexter Bricks: ############## ####f####f#### ###faf##faf### ##fadaffadaf## #fadddaadddaf# faddddddddddaf faddddddddddaf faddddddddddaf faddddddddddaf f.adddddddda.f #a.adddddda.a# ##a.adddda.a## ###a.adda.a### ###a.adda.a### ###a.adda.a### ###a.adda.a### ###a.adda.a### ###a......a### Bonus: .............. .............. .............. .............. ......44...... ......ss...... ..*...??...*.. ......55...... *.....bb.....* ......ff...... ......++...... .....*}}*..... ......&&...... ......??...... ......jj...... ......<<...... ......55...... .............. Level: Yexter Yexter Bricks: ###aa####aa### #....#ii#....# #....#ii#....# #....#ii#....# a....xiix....a a....xiix....a #aaxxxiixxxaa# #iiiiiiiiiiii# #iiiiiiiiiiii# #iiiiiiiiiiii# #iiiiiiiiiiii# #aaxxxiixxxaa# a....xiix....a a....xiix....a #....#ii#....# #....#ii#....# #....#ii#....# ###aa####aa### Bonus: .............. .............. ......ll...... ......mm...... ......bb...... .............. ....??..??.... .............. ......++...... .............. .............. .....?...?.... ......mm...... ......bb...... .............. .............. .............. .............. Level: Yexter Yexter Bricks: #.aha#@@#aha.# #.aha#@@#aha.# #a.a.a##a.a.a# #a.a.a..a.a.a# #haha.aa.ahah# #haha.aa.ahah# ##.a.ahha.a.## ##.a.ahha.a.## @@.ha.aa.ah.@@ @@.ha.aa.ah.@@ ##.a.ahha.a.## ##.a.ahha.a.## #haha.aa.ahah# #haha.aa.ahah# #a.a.a..a.a.a# #a.a.a##a.a.a# #.aha#@@#aha.# #.aha#@@#aha.# Bonus: .............. .............. ...3......3... .b..........b. .............. ......ll...... .....*..*..... ...b......b... ....&....&.... .............. .....?..?..... ...p.?..?.p... ......44...... .............. ...+......+... ...<......<... ...*......*... .............. Level: Yexter Yexter Bricks: k.vvkkkkkkvv.k .k.vvkkkkvv.k. v.k.vvkkvv.k.v vv.k.vvvv.k.vv .vv.k.vv.k.vv. ..vv.k..k.vv.. v..vv.kk.vv..v kv..vv..vv..vk kkv..vvvv..vkk kkv..vvvv..vkk kv..vv..vv..vk v..vv.kk.vv..v ..vv.k..k.vv.. .vv.k.vv.k.vv. vv.k.vvvv.k.vv v.k.vvkkvv.k.v .k.vvkkkkvv.k. k.vvkkkkkkvv.k Bonus: .............. ......11...... ......55...... .............. .............. .....?..?..... ......l4...... w....*..*....w .b....dd....b. .b....dd....b. w............w ......ss...... .....?..?..... .............. .............. .....*55*..... ......11...... .............. Level: Yexter Yexter Bricks: ..a..a..a..a.. ..a..a..a..a.. ###aa####aa### #aaaaaaaaaaaa# #aaaaaaaaaaaa# #aa###aa###aa# #aa#aaaaaa#aa# #aa#aaaaaa#aa# #aa#aa##aa#aa# #aa#aa##aa#aa# #aa#aaaaaa#aa# #aaaaaaaaaaaa# a............a aa..........aa aaa........aaa aaaa......aaaa #####....##### .............. Bonus: .............. .............. ...mm....mm... .............. ....55...55... .............. ....bb..bb.... .....w33w..... .............. .....s..s..... ......++...... .............. .............. .............. .............. .............. .............. .............. Level: Yexter Yexter Bricks: !.!.!.!!.!.!.! .............. .............. *.*.*.**.*.*.* .............. .............. !.!.!.!!.!.!.! .............. .............. v.v.v.vv.v.v.v *.*.*.**.*.*.* v.v.v.vv.v.v.v .!.!.!..!.!.!. v.v.v.vv.v.v.v .*.*.*..*.*.*. v.v.v.vv.v.v.v .!.!.!..!.!.!. .............. Bonus: .............. .............. .............. .............. .............. ....+.ll.+.... .............. ......44...... .............. b.b...jj...b.b .............. .............. .............. .............. .............. ......ss...... .............. .............. Level: Yexter Yexter Bricks: hhhhhhhhhhhhhh h............h h.h.h....h.h.h h..h..hh..h..h h.h.h....h.h.h h............h hv#aax..xaa#vh hv#aax..xaa#vh hv#aax..xaa#vh hv#aax..xaa#vh hv###x..x###vh hvvv#x..x#vvvh hvvv##..##vvvh hvvvh#..#hvvvh hvvvh#..#hvvvh hhhhh#..#hhhhh ######..###### .............. Bonus: .............. .............. .............. .............. .............. .............. .....b..b..... bb..m....m..bb ...2m....m2... ...bm....mb... .............. .....b..b..... .............. .............. .............. .............. .............. .............. Level: Yexter Yexter Bricks: iiiiaajjaaiiii iiiaajjjjaaiii iiaajj..jjaaii iaajj....jjaai aajj......jjaa ajj........jja jj..#....#..jj j..#i....i#..j ..#ii....ii#.. ..#ii....ii#.. j..#i....i#..j jj..#....#..jj ajj........jja aajj......jjaa iaajj....jjaai iiaajj..jjaaii iiiaajjjjaaiii iiiiaajjaaiiii Bonus: ......44...... ......22...... .............. ..b........b.. .............. ..*........*.. .............. ....s....s.... ...4......l... ...4......l... .............. .............. ..&........&.. .............. .............. b*..........*b w.....55.....w .............. Level: Yexter Yexter Bricks: ##########v.a! #######a*v.a!a ########v.a!a! #####a*v.a!a!a ######v.a!a!a. ###a*v.a!a!a.. ####v.a!a!av.a #a*v.a!a!a..a! ##v.a!a!a..a!a *v.a!a!a.va!a! ..a!a!a..a!a!a jajajajjajajaj ajajajaajajaja jajajajjajajaj z!z!z!zz!z!z!z !z!z!z!!z!z!z! z!z!z!zz!z!z!z .............. Bonus: .............. .............. .............. .............. .............. .......?...?.. ...........*.. .......j...... .............. .........l.... ......c....... .....555j.?.?. ....b444bc.... .....bwwb..... ....}..}...... .*............ .............. .............. Level: Yexter Yexter Bricks: ..ajajaajaja.. ...ajajjaja... ....ajaaja.... .....ajja..... ......aa...... ka###.jj.###ak kaakk.aa.kkaak ka#kk.jj.kk#ak kaakk.aa.kkaak ka###.jj.###ak kaaaa.aa.aaaak kkka#.jj.#akkk kkkaa.aa.aakkk kkka#.jj.#akkk aaaaa.aa.aaaaa #x#x#.jj.#x#x# .............. .............. Bonus: .............. ......00...... ......l?...... .............. .............. .............. bm..........mb ......bb...... ...b......b... .............. ..55......55.. .............. .............. ......bb...... .............. .............. .............. .............. Level: Yexter Yexter Bricks: #####....##### #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #aa*aaaaaa*aa# #aa*aaaaaa*aa# #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #aaa#....#aaa# #####....##### Bonus: .............. ..4........4.. .............. .............. .............. .?.?......?.?. .............. .m..........m. .............. .....++++..... .m..........m. .............. .?.?......?.?. .............. .............. .............. .l..........l. .............. Level: Yexter Yexter Bricks: ##dd......dd## ##dd.vvvv.dd## ##dd.viiv.dd## ##dd.vvvv.dd## #ddd......ddd# #ddd##..##ddd# ddddha..ahdddd dddhh#..#hhddd ddhhg#..#ghhdd dhhgga..agghhd dhgg##..##gghd dhg#......#ghd dhg#......#ghd dhg#..ii..#ghd dhg#..ii..#ghd dhg#..ii..#ghd dhg#..vv..#ghd dhg#......#ghd Bonus: .............. .............. ......**...... .............. .0..........0. .0..........0. ...?......?... ...?......?... ...?......?... ...?......?... ...?......?... .............. .............. ......++...... b.b........b.b w.....ss...... .............. .............. Level: Yexter Yexter Bricks: ....kkkkkk.... ...akkkkkka... ...akkkkkka... ..aakkkkkkaa.. ..a..kkkk..a.. .aa...kk...aa. .a..!!..!!..a. aa..........aa a.....ee.....a aa....ee....aa .a....ee....a. .aa........aa. ..a........a.. ..aa.dddd.aa.. ...a..dd..a... ...aa....aa... ....a....a.... aaaaaa..aaaaaa Bonus: .............. .............. .............. .....j..j..... .............. ......ll...... .............. .............. ......}}...... .............. .............. .55........55. .............. ......ss...... .............. .............. .............. .............. Level: Yexter Yexter Bricks: .............. #####....##### #dddddddddddd# #daaaddddaaad# #daaaaaaaaaad# jjjjaaaaaajjjj jjjjaaaaaajjjj ##aaaaaaaaaa## #daaa####aaad# #daaa####aaad# ##aaaaaaaaaa## jjjjaaaaaajjjj jjjjaaaaaajjjj #daaaaaaaaaad# #daaaddddaaad# #dddddddddddd# #####....##### .............. Bonus: .............. .............. .............. .............. .............. ....bb..bb.... .........c.... ......44...... ...w.......... .............. ......mm..s... .............. ....}...+..... ......j....... .............. .............. .............. .............. Level: Yexter Yexter Bricks: aajjajajjjjjjj ajajaaajjjjjjj aajjjajjjjjjjj ajajjajjjjjjjj aajjjajjjjjjjj jjjjjjjjjjjjjj jjjaaajajajaaa jjjjajjajajajj jjjjajjaaajaaj jjjjajjajajajj jjjjajjajajaaa jjjjjjjjjjjjjj ajjjajaaajajaj ajjjajajajaaaj ajjjajaaajjajj ajajajajajjajj aajaajajajjajj jjjjjjjjjjjjjj Bonus: .............. .............. ...&&......... .............. .........&&... .......b...... .............. .&&........... .....b..b..... .............. .............. ......4.4...&. .............. ..m...+.+..m.. .............. .............. .............. .............. Level: Yexter Yexter Bricks: h...h....h...h .............. h...h....h...h .............. h.#.h.##.h.#.h ..x...xx...x.. ..!...!!...!.. ..!...!!...!.. !!!!!!!!!!!!!! !!!!!!!!!!!!!! ..!...!!...!.. ..!...!!...!.. ..x...xx...x.. h.#.h.##.h.#.h .............. h...h....h...h .............. h...h....h...h Bonus: .............. .............. .............. .............. ....*....*.... ..5...55...5.. .&.&.&..&.&.&. .............. .............. .............. .............. .&.&.&..&.&.&. ..5...55...5.. ....*....*.... .............. .............. .............. .............. Level: Yexter Yexter Bricks: .###..jj..###. .#j#..##..#j#. .#j#..jj..#j#. .#h#..jj..#h#. .#j#..##..#j#. .#j#..jj..#j#. .#j#..jj..#j#. ..j...##...j.. jjjjjjjjjjjjjj jjjjjjjjjjjjjj ..j...##...j.. .#j#..jj..#j#. .#j#..jj..#j#. .#j#..##..#j#. .#h#..jj..#h#. .#j#..jj..#j#. .#j#..##..#j#. .###..jj..###. Bonus: .............. .............. .............. ..m........m.. ..m........m.. .............. .............. .............. .............. .............. .............. .............. .............. ..m........m.. ..m........m.. .............. .............. .............. lbreakout2-2.6.5/client/levels/Invisible0000664000175000017500000000451212140767201015142 00000000000000Version: 1.00 Level: Celine GRONDIN mur invisible Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvv*****vvvv vvvvv*****vvvv vvvvv*****vvvv vvvvv*****vvvv vvvvv*****vvvv vvvvv*****vvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv .............. .............. .............. .............. .............. .............. Bonus: 00000000000000 00000000000000 00100002200000 11122222222222 1113m+++++5544 1113m+++++5544 1113m+++++5544 1113mwwwww5544 1113mwwwww5544 1113mwwwww5544 1113m*****5544 1113m*****5544 .............. .............. .............. .............. .............. .............. Level: Celine GRONDIN mur invisible Bricks: ****xx#xx***** ****xx#xx***** ****@@#@@***** ****hh#iiiiiii ****hh#iiiiiii vvvvvv#vvvvvvv vvvvvv#vvvvvvv vvvvvv#vvvvvvv vvvvvv#vvvvvvv vvvvvvvvvvvvvv .............. .............. .............. .............. .............. .............. .............. .............. Bonus: ....mm.mm..... ....mm.mm...l. .............j ..l........... ..j...cmmmmmmm -...}.c.j..f.- -..*.....+...- ..+.f.~....... .*......*..*&& m.pww&}w.pw.&m .............. .............. .............. .............. .............. .............. .............. .............. Level: Celine GRONDIN mur invisible Bricks: .............. .............. ...aaaaaaaa... ...a******a... ...a******a... ...a******a... ...a******a... ...a******a... ...a******a... ...aaaaaaaa... vvvvvvvvvvvvvv .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. ...}mmmmmmm... ...}++++++m... ...}++++++m... ...}++++++m... ...}++++++m... ...}++++++m... ...}++++++m... ...}******m... pwwwwlllllwwwp .............. .............. .............. .............. .............. .............. .............. Level: Celine GRONDIN mur invisible Bricks: ************** ************** ************** ************** ************** **vvvvvvvv**** **vvvvvvvv**** **vvvvvvvv**** **vvvvvvvv**** vvvvvvvvvvvvvv .............. .............. .............. .............. .............. .............. .............. .............. Bonus: }}++++++++4444 }}++++++++4444 }}++++++++5555 }}++++++++5555 }}++++++++-www }}lmmw~mffwjwj }}mmmmmmmmdwww }}********gggg }}********gggg lll}llll}}}}}{ .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/MontyHall0000664000175000017500000003656712140767201015144 00000000000000Level: Kevin Nathan Easy Bricks: .............. .............. .............. dddddddddddddd dddddddddddddd eaeaeaeaedddea .dddddddddddd. ..aaaaaaaaaa.. .eeeeeeeeeeee. ..iiiiiiiiii.. daaaaaaaaaaaad eeeeeaaaaeeeee ..bbbbbbbbbb.. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .0.0.0.0.0.0.0 0.0.0.0.0.0.0. ..1..1..1..w.. .+........j.+. .-.......-. .+..j111....b. ...w......1... 0.0.0.0.0.0.l0 .s...b..?...p. ....g....g.... .............. .............. .............. .............. .............. Level: Kevin Nathan Strange Bricks: .............. .............. .............. .............. d#d#dcd#c#d#c# eee#eee#eee#ee .#ffffffffff#. .#gggggggggg#. ..hh##bb##hh.. ..iiicccciii.. ...aaaaaaaa... ....aaaaaa.... .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. 0.0.0.0.0.0.0. ->......>-..m. ...s..l2.?.... ..w...11...p.. ..2b......b2.. ..+11....11+.. .....g..j..... .............. .............. .............. .............. .............. .............. .............. Level: Kevin Nathan Glacier Bricks: .............. ..aaaaaaaaaa.. .gggggggggggg. ..agagagagag.. ggggg....ggggg ggggg....ggggg .aabbccaabbcc. .ggggg..ggggg. ..gggg..gggg.. ..gggg..gggg.. .aaa.aaaa.aaa. .bbb.bbbb.bbb. ...cccccccc... gggggggggggggg gggggggggggggg .............. .............. .............. Bonus: .............. ...m.......p.. ......g....... ...j......j... w.b.........bw <>.<>....<><>. .......2...g.. .....<..>..... ...j.-..+.j... .....+..-..... ..b...b....b.. .l...l....ls.. ...11211211... 0+0-0w0.0<0-0+ .......g...... .............. .............. .............. Level: Kevin Nathan X Files Bricks: d............d d#..........cd .cd........d#. ..dc......#d.. ...#d....dc... ....bbaabb.... .....cccc..... ....bbaabb.... ...#d....dc... ..dc......#d.. .cd........dc. d#..........cd d............d .............. ...cbabbabc... ddddd....ddddd .............. .............. Bonus: .............. l............1 ..2........b.. ..w........p.. ....j......... .............. .....1?11..... .......g...... .........j.... ..1........1.. ..b........b.. .............. .............. .............. ...2g0sl002... 11+<+....->-11 .............. .............. Level: Kevin Nathan Y Files Bricks: d............d dc..........cd .cd........dc. ..dc......cd.. ...cd....dc... ....bbaabb.... .....cccc..... .....#ii#..... .....#ii#..... .....#ii#..... .....#ii#..... .....#ii#..... .....#..#..... .....#..#..... .............. ...cbabbabc... ddddd....ddddd .............. Bonus: g............j 3............3 ..2........b.. ..p........+.. ...j.......... .............. .....2121..... ......l....... .......m...... ......1g...... ......bw...... ......++...... .............. .............. .............. ...200sl002... 11+<+....->-11 .............. Level: Kevin Nathan Yellow Rose Bricks: .............. hhh...hh...hhh hhhh..hh..hhhh hh....hh....hh hhhhh.hh.hhhhh .aba.cccc.aba. .hhhhhhhhhhhh. ..hhhhhhhhhh.. .hhhhhhhhhhhh. .aba.cccc.aba. hhhhh.hh.hhhhh hh....hh....hh hhhh..hh..hhhh hhh...hh...hhh ....cccccc.... .....cccc..... .............. .............. Bonus: .............. 000...00...000 ..1...11...1.. ......22...... s............< ......mw....b. .j....p....... ..1111111111.. .b.....l....g. ......w+...... -..>......<..+ .......?...... .<..........>. +w....11....b- ......j.g..... .............. .............. .............. Level: Kevin Nathan S.O.B. Bricks: .............. .............. dddddddddddddd dddddddddddddd dddddddddddddd eeeeeeeeeeeeee ffffffffffffff gggggggggggggg hhhhhhhhhhhhhh iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .?.?.?.?.?.?.? 1.1j1.1.1.1g1. .?.?.?.?j?.?.? 2.2.2.2g2.2.2. ?.?.?j?.?.?.?j .1.1g1.1.1j1.1 .?.?.?.?.?.?.? 0g0.0.0.0.0.0. ?.?.?.?.?.?.?. .0.0.0g0.0.0.0 .............. .............. .............. .............. .............. .............. Level: Kevin Nathan Pump Bricks: .............. ......cc...... cc..cccccc..cc ddc...cc...cdd dddc..cc..cddd eeccc.cc.cccee ffc...##...cff ggc...##...cgg cccc.cccc.cccc iiic.ciic.ciii iic..ciic..cii iiic..cc..ciii iiic.ciic.ciii cccc.cccc.cccc iiic.ciic.ciii cccc.cccc.cccc cccc.cccc.cccc .............. Bonus: .............. .......j...... 2...2..2.2..2. .1....g.....1. 0..0...j..0..0 +.....wp.....- .............. .............. 0000.1111.0000 m......?.....? .j............ >..p......l.<. .<....s.1...w. 0-0+.+0+0.0-0+ .............j +....g..+.g..+ ...b......b... .............. Level: Kevin Nathan Maze Bricks: .ccc.ccc.ccc.. .............. cc.ccc.ccc.ccc .............. .ccccccccccccc .............. ..cccccccccc.. .............. ccccc.ccccc.cc .............. ccc....ccc.... cccc..ccccc..c cccc...ccc...c cc....cc....cc .............. ...cc....cc... .c.cc.cc.cc.cc .ccccccccccccc Bonus: ..4...4...4... .............. ....j...g..... .............. ..1.1.1.1.1.1. .............. ..+.<.>.-.s... .............. w0.+..1.l....g .............. .......g.j.... m.b.....b....2 .............. b+....p>....<- .............. ...g......j... ...1..w..b..l. .............. Level: Kevin Nathan Brief Pause Bricks: ###........### ##..........## #............# ......ff...... ......ff...... .....ffff..... .d.d.ffff.d.d. eeeeeeeeeeeeee fhid.bccb.dihf fhid#cccc#dihf fhid.bccb.dihf gggggggggggggg .f.f.dddd.f.f. .....dddd..... ......dd...... ......dd...... .............. .............. Bonus: .............. .............. .............. .............. .......w...... .............. ...g.3333...g. ..-........... 4.....5....... .j.<..ml..p.j. .......5+....4 .............. .g...3333.g... .....s..b..... ......w....... .......+...... .............. .............. Level: Kevin Nathan Symmetry Bricks: .............. cccc.cccc.cccc chhc.chhc.chhc chhc.chhc.chhc chhc.chhc.chhc cccc.cccc.cccc .............. cccc.cccc.cccc chhc.chhc.chhc chhc.chhc.chhc chhc.chhc.chhc cccc.cccc.cccc .............. cccc.cccc.cccc cddc.cddc.cddc cddc.cddc.cddc cddc.cddc.cddc cccc.cccc.cccc Bonus: .............. mg...b..b...gm .55...55...55. .5s...5w...s5. .5....5.....5. -.+........+.- .............. .g.<.j..j...g< .44...33...44. .l4...33...4l. .44...33...44. .p...j.wj...p. .............. .g.>.b..b...g> .............. .............. .............. -g.+.-.w+.-.g+ Level: Kevin Nathan Bowtie Bricks: i............i ii..........ii i###......###i hgfe......efgh hgfeb....befgh hgfe#a..a#efgh hgfe#adda#efgh ####aaddaa#### hgfebaddabefgh hgfebaddabefgh ####a#dd#a#### hgfe#adda#efgh hgfe#a..a#efgh hgfeb....befgh hgfe......efgh i###......###i ii..........ii i............i Bonus: l............l .............. ..3........3.. ..3w......m3.. .g3........3g. ..3..3..3..3.. ..3..3553..3.. ..3..3553..3.. .w3g.3553.m3w. ?.3m.3553.g3.? ..3..3553..3.. ..3..3553..3.. .w3..3..3..3w. ..3.s....b.3.. ..3w......w3.. ..3........3.. .-..........+. -............+ Level: Kevin Nathan Tree Bricks: ....ffffff.... ...ffffffff... ..ffffffffff.. ...ffffffff... ....ffffff.... .....ffff..... ....ffffff.... ...ffffffff... ..ffffffffff.. .ffffffffffff. .ffffffffffff. ..ffffffffff.. ...ffffffff... ....ffffff.... .....eeee..... .....eeee..... .....eeee..... .....eeee..... Bonus: ....-.?....... ........g.j... ....m..m..... .............. .....j+.>..... .......j..b.. ...s.m+..g.... ........-..... ......b>...... ......j....... .....-......>... ...+......+... Level: Kevin Nathan Blockade Bricks: ##iiiiiiiiii## #ciiiiiiiiiic# cdiiiiiiiiiidc gciiiiiiiiiich ggciiiiiiiichh gggciiiiiichhh gggg#cccc#hhhh ggggc#cc#chhhh ggggcc##cchhhh ggggc#cc#chhhh gggg#cccc#hhhh gggcffffffchhh ggcffffffffchh gcffffffffffch cdffffffffffdc #cffffffffffc# ##ffffffffff## .............. Bonus: ..5.b.55.b.5.. .<..........<. .mw.-...+..wm. .5..........5. ..5........5.. +..5j....j5..- ...........s.. ....4.>p.4.... ?w..........w? ....4.p>.4.... ..s........... -..5j.-..j5..+ ..5........5.. .5..........5. pm..........mp .<..........<. ..w.b.s+.b.w.. .............. Level: Kevin Nathan Maze Two Bricks: ....c....c.... .cccc....cc... ....c....c.c.. ....c...#c..c. ccc.c..c.c...c ....c.c..c...c ....c#...c..c. .cccc....c.c.. .............. #ccc.c##c.ccc# .............. .cc........cc. ....c.##.c.... ....c.cc.c.... ccc.c....c.ccc c...cccccc...c c............c #.##cccccc##.# Bonus: ....m....4.... ..+........... .............. ............-. 4......1.....4 ....l.m..l.... .........w.... .............. .............. .....1..1..... .............. .-............ .........+.... ......11...... 4............4 .............. s............s ....j<>pwb.... Level: Kevin Nathan Stairs Bricks: .gghhhhhhhhgg. ..gghhhhhhgg.. d..gghhhhgg..d cd..gghhgg..dc .cd........dc. ..cd......dc.. ...cd....dc... c...c....c...c hc..........ch hhc........chh hhhc......chhh hhhh......hhhh .............. ....dhhhhd.... ...dhhhhhhd... ..dhhhhhhhhd.. .dhhhhhhhhhhd. dccchcccchcccd Bonus: .55g...w...55. ..55.-...>55.. ...55....55... .>..55..55..>. .w..........w. .............. .............. ?............. .............. .............. <............< .............. .............. .............. ......jl...... ....b....s.... ......-...>... .+..w..?.w..+. Level: Kevin Nathan Lattice Bricks: hhhhhhhhhhhhhh c.c.c.c.c.c.c. d...d...d...d. dc.cdc.cdc.cdc d...d...d...d. c.c.c.c.c.c.c. iiiiiiiiiiiiii .cec.cec.cec.c ..e...e...e... c.c.c.c.c.c.c. ..e...e...e... .cec.cec.cec.c gggggggggggggg c.c.c.c.c.c.c. .............. .c.c.c.c.c.c.c .............. c.c.c.c.c.c.c. Bonus: m......g.....p ..4...4...4... .............. .............> .............. ..w...j.s.w... .............. ...b...b...b.. .............. 5...5...5...5. .............. .............. .............. ....j.-...s.+. .............. .......<...... .............. ..l.....+.w... Level: Kevin Nathan Layers Bricks: .....chhc..... ....c.hh.c.... ...c.h..h.c... ..c.h....h.c.. .c.h..ee..h.c. c.h..e..e..h.c .h..e....e..h. h..e..ff..e..h .he..f..f..eh. g.h.f....f.h.g .g.h..dd..h.g. c.g.hd..dh.g.c c..i.h..h.i..c c.i.h.ff.h.i.c .i.h.f..f.h.i. i.h.f....f.h.i .h.f..dd..f.h. h.f..d..d..f.h Bonus: .............. .............. ...g.......... ...........j.. ...>..b....... .............. .............. l..w..j......g .............. .............. ............w. ....j....<.... .............. ......g?...s.. .w............ .............. .+..........+. .............. Level: Kevin Nathan Wedge Bricks: dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd ddddd#hh#ddddd ddddc....cdddd ddd#......#ddd ddc........cdd d#...bbbb...#d c#..abccba..#c d#...bbbb...#d ddc........cdd ddd#......#ddd ddddc....cdddd ddddd#hh#ddddd hhhhhhhhhhhhhh .............. .............. Bonus: l....g..g....l .............. ..j........j.. >............< ...p..ww..p... ....g....g.... j............j ..g........g.. m....4j54....m w...-45p4-...w .....45l4..... ..+........+.. .j..........j. <...+....+...> .............. w...s....b...w .............. .............. Level: Kevin Nathan Topper Bricks: .............. iiiiiiiiiiiiii ....bbbbbb.... ..bbbbbbbbbb.. ...bbbbbbbb... ....bbbbbb.... .....bbbb..... .....hhhh..... ....hhhhhh.... ...hhhhhhhh... ....hhhhhh.... .....hhhh..... .....bbbb..... ....bbbbbb.... ...bbbbbbbb... ..bbbbbbbbbb.. .bbbbbbbbbbbb. .....dddd..... Bonus: .............. g..m......m..g .............. ..w...55...w.. ...g......g... ....j....j.... ......pg...... .....1111..... ....111111.... ...<111111<... ....111111.... .....1111..... ......ls...... .............. ....>....>.... ..j...55...j.. .g..........g. .....b..w..... Level: Kevin Nathan Crystals Bricks: .............. c.....c.....c. bc...chc...cic bbc.chhhc.ciii bc...chc...cic c.....c.....c. .............. ...c.....c.... ..cec...cdc... .ceeec.cdddc.c ..cec...cdc... ...c.....c.... .............. .c.....c.....c cfc...cgc...ca fffc.cgggc.caa cfc...cgc...ca .c.....c.....c Bonus: .............. s.....l.....?. 5.....5.....5. m5...5<5...5j5 5.....5.....5. .............. .............. ...-.....+.... ...4.....4.... ..4?4...4>4..m ...4.....4.... .............. .............. .g.....g.....j .3.....3.....3 3b3...3w3...3p .3.....3.....3 .............. Level: Kevin Nathan Ricochet Bricks: #iiiiiiiiiiii# .h.h.h.h.h.h.h .............. #.g.g.g.g.g.g. .............. .c.c.c.#.c.c.# .............. f.f.f.f.f.f.f. .............. .c.c.c.c.c.c.c .............. e.#.e.e.#.e.e. .............. .c.c.c.c.c.c.c .............. d.d.d.d.d.d.d. .............. hcc########cch Bonus: ......m....... ...s.........l .............. ....p...j..... .............. .-.w.......-.. .............. g.....b.j...g. .............. .5...5.+.5.w.5 .............. +.....j.....+. .............. ...l.....s.... .............. g...j.b.p...g. .............. 5w..........w5 Level: Kevin Nathan Pyramid Bricks: ##..........## #............# .............. ......cc...... ......cc...... .....cddc..... .....cddc..... ....cddddc.... ....cddddc.... ...cddddddc... ...cddddddc... ..cddddddddc.. ..cddddddddc.. .cddddddddddc. .cddddddddddc. .dddddddddddd. .ccccc##ccccc. .............. Bonus: .............. .............. .............. ......>>...... ......--...... .............. .....s..s..... .............. ....bj..jb.... .............. ...w<...... j....?..?....j ..b...w....... .............. .>...j.+.j.... p............p ..-.s.....-.b. w............w ...g...<...g.. ......+....... .............. lbreakout2-2.6.5/client/levels/Zigies0000664000175000017500000001327612140767201014457 00000000000000Version: 1.04 Level: zigie the beginning Bricks: .............. .............. .............. ...ddffffdd... ...dgfxxfgd... ...hgffffgh... ...hggggggh... #..hhhhhhhh..# .............. .............. iiEEEvvvvEEEii .iihhhhhhhhii. ..iiiiiiiiii.. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. ...+.0..l0.... ......m1...... ....0.b...+... ........0..... 3..w..0......3 .............. .............. 1....w00c...+1 .f..1..1w..1.. ...1..+...1... .............. .............. .............. .............. .............. Level: zigie the X Bricks: .iiiiiiiiiii.. .ihhhhhhhhhi.. .ihggghggghi.. .ihg#ghg#ghi.. .ihg#ggg#ghi.. .ihgg#g#gghi.. .ihhg#g#ghhi.. .iihhg#ghhii.. .iihhg#ghhii.. .ihhg#g#ghhi.. .ihgg#g#gghi.. .ihg#ghg#ghi.. .ihg#ghg#ghi.. .ihggghggghi.. .ihhhhhhhhhi.. .iiiiiiiiiii.. .............. .............. Bonus: ..0...0..0.1.. .1..0.+...l... ..1........0.. .>.......0.... .......1..0... ..+.1...m..>.. .0f...4....... ...+.<.{.1.... .....f.....0.. .0.0..w....... ..-.....+..0.. .....1.-...1.. .1........p... ..0.-.j.0..... .0.........1.. ..0.0.>....... .............. .............. Level: zigie the invisible one Bricks: @....vvvv....@ .............. .vvvvvvvvvvvv. .@..........@. v............v ..vvvvvvvvvv.. ..@@@@@@@@@@.. .............. .vvvvvvvvvvvv. .............. .............. .vvvvvvvvvvvv. .............. .............. .vvvvvvvvvvvv. .............. .............. .............. Bonus: .....0.+l..... .............. .01.m2.1>..10. .............. .............1 ..~+..j..1.... .............. .............. ...0...c..1.b. .............. .............. .1+..1.-w.+.0. .............. .............. .wb1.0.>.-..b. .............. .............. .............. Level: zigie the labyrinth Bricks: ...c.....ccccc .c.c.ccc.cc... .c.c.c.c.cc.c. .c.c.c.c....c. .c...c.cccccc. .ccccc........ .cc.....cccccc .!c.ccccc..... ..c.c...c.cccc ccc.c.c.c.c... c...c.c.c.c.c. c.ccc.c.c.c.c. c.c...c.ccc.c. c...c.c.....c. ccccccccccccc. .............. .............. .............. Bonus: ...b.....w>0b0 .>...1.w.2.... ...0...+..w.w. .w...b........ .0.....w0b.w>. .b.>.<........ ..1.....0.b.1- .4..b.0.w..... ..-.w......b0. .0....b.b.b... >...+.....0.b. 1.b0..1.w...2. b.....b.b.>.1. >...w.2.....w. wbwwbbw.bwbw>. .............. .............. .............. Level: zigie uncontrollable Bricks: @@@@@@@@@@@@@@ @............@ @.kkkkkkkkkk.@ @.jjjjjjjjjj.@ @.jaaaaaaaaj.@ @.jabbbbbbaj.@ @.jabccccbaj.@ @.jabcvvcbaj.@ @.jabcvvcbaj.@ @.jabccccbaj.@ @.jabbbbbbaj.@ @.jaaaaaaaaj.@ @.jjjjjjjjjj.@ @.kkkkkkkkkk.@ .............. .@@@@@@@@@@@@. .kkkkkkkkkkkk. .............. Bonus: .............. .............. ...b..j..0.0.. ....1...1..g.. ..0......b.b.. ......*0..<... ..b<0...+0.... .....l42.b.... ...+..24..0... .....-...0.1.. ..0.b..W...... ...0.1..>.->.. .........0.... ..1.m.1.w..W.. .............. .............. .c0>b.4 ...0.0..1..... ~.........W..+ ........~..... .....0........ 3>+j....0.-.~3 .....>....0..f +.......>.~..- .....10>...... 2d-~......+.s2 f..0.0..0....b ~..-..0..0+... .....0........ Level: zigie grow Bricks: !...!....!...! .............. ..!...!!...!.. .............. !...!....!...! .............. ..!...!!...!.. .............. !...!....!...! .............. ..!...!!...!.. .............. !...!....!...! vvvvvvvvvvvvvv .............. .............. .............. .............. Bonus: !...-0...1...0 0.0......0.~.. ..g..0l1...{0. ..~.......~... 1...1f...1f..1 ...........f.. ..p..00j...g0. ..f......0.... 10..-...-....1 .~.~.......~0. ..{...11...p.. 0.0W.W..bw.... -...>...0wb..c ~0-0fb0~0+.0+0 .............. .............. .............. .............. Level: zigie crack it Bricks: .............. ..ffffffffff.. @.fggggggggf.@ ..fghhhhhhgf.. ..fghffffhgf.. ..fghfhhfhgf.. @.fghfhhfhgf.@ ..fghffffhgf.. ..fghhhhhhgf.. ..fggggggggf.. ..ffffffffff.. EEEEE#z#EEEEEE .............. cccccccccccccc .............. ExxxxxxxxxxxxE .............. vvvvvvvvvvvvvv Bonus: .............. ..0..0...0.b.. ..bl..01...1.. ...1{...l..... ..>20>....0... ......41c.2>.. ..1W0...{1.... .....+.<0.Wj.. ..1.0....00... ..c..010...+.. ..0g0.c.0~.... .....545...... .............. 0.0.0.2m+.2.w. .............. .~}0.+1p.0*.0. .............. bp1w1+.b+>bw1< Level: zigie the green one Bricks: f!...zzzz...!f !f...v**v...f! f!.yyzzzzyy.!f !f.x######x.f! f!.x#f!!f#x.!f ...x#fyyf#x... ...xEzzzzEx... ...xEhiihEx... .xx*EhiihE*xx. .@@@@gggg@@@@. igigigigigigig gxgxgxgxgxgxgx igigigigigigig xxxxxxxxxxxxxx .............. xxxxxxxxxxxxxx .............. .............. Bonus: +4...*..+...4+ 4m..........m4 .4.1cjffmc1.41 41.>......>.14 1....+44+....1 ...+..110.+... .....0--0..... ...~.W..W.~... .>....ww....c. .............. ...1.1.1.1...+ 1.f..{1.j..f1. .+.0.s...0.... 0>2bw0*W2>00w2 .............. 1bbw0d11d.ws.1 .............. .............. Level: zigie press"d"OrFindTheBrick Bricks: vvvvvvvvvvvvvv .............. aabbccxxccbbaa aabbccxxccbbaa .............. EEEEE####EEEEE .............. aabbccxxccbbaa aabbccxxccbbaa .............. EEEE#E##E#EEEE .............. aabbccxxccbbaa aabbccxxccbbaa .............. EEEEE####EEEEE v............v .............. Bonus: .10+~-1~.10-.1 .............. .2.c0*44?0...0 0g0.2.44s.10-. .............. ......55...... .............. 2.f0.l44.p0.+0 ~0.-jm44mc.?0. .............. ....5....5.... .............. 0wf10m44mf-~0- f+0{bp44b>0f~+ .............. ......55...... m............m .............. lbreakout2-2.6.5/client/levels/Crossing0000664000175000017500000002737212140767201015016 00000000000000Version: 1.01 Level: kbozen 01 Bricks: !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! .............. !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! .............. !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! .............. Bonus: 00000000000000 l...........>. W....!........ .{..{..{..{>.{ ..W........... ......&..>.... ....W......... +.......>....< ......+....... {..{..<..{..{. ........W..... ....>......... ..........W... ..>....s...... ............W. >............. .{.{.{.{.{.{.{ {.{.{.{.{.{.{. Level: kbozen 02 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! .............. !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! .............. !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! .............. Bonus: 0000.0000.0000 .....b........ ..!.........-. {..{..{..{..{. .~........-... ....l....+.... ...~....-..... .............. ..+..+-....... .{..{..{..{..{ .......~...... .........w.... ..-........... ......&....... -..........~.. .............. {.{...{.{.{.{~ .{.{.{.{.{.{.{ Level: kbozen 03 Bricks: !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! E..E.E..E.E..E !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! E..E.E..E.E..E !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! E..E.E..E.E..E Bonus: 00000000000000 ............l. ...p..b....... .>..{..{..{..{ ........<...c. .............. ..........c... .w...~........ ........c..... ..{..{.<{..{.. ......c....... .........>.... ....c......... ...........f.. ..c....b...... .............> c{.{.{.{.{.{.. ..{.{.{.....{. Level: kbozen 04 Bricks: !..!E!..!E!..! ....E....E.... vvvvvvvvvvvvvv ....E....E.... !..!E!..!E!..! ....E....E.... !..!E!..!E!..! ....E....E.... vvvvvvvvvvvvvv ....E....E.... !..!E!..!E!..! ....E....E.... !..!E!..!E!..! ....E....E.... vvvvvvvvvvvvvv ....E....E.... !..!E!..!E!..! .............. Bonus: 0000.0000.0000 ..........w... >...l......... ............~. ..>....!...... ......{...~... .............. ........~..... ......<..p.... ...{..~....<.. .b......>....{ .............. ......&...>... ..~........... ............>. ~............. .{.{.{.{...{.{ {.{.{.{.{.{.{. Level: kbozen 05 Bricks: !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! E..EEE..EEE..E !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! E..EEE..EEE..E !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! E..EEE..EEE..E Bonus: 11111111111111 ...+......!... .-............ ..{........{.. ...-...p.l..c. .............. .w...-....c... ............b. .......+c..... .{.{.......{.. ......c..-.... .............. ....c......-.. ......&....... ..c..........- .............. c.{.{.{.{.{.{. .{.....{...{.. Level: kbozen 06 Bricks: !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! ...EEE..EEE... !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! ...EEE..EEE... !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! .............. Bonus: 11111111111111 l.....<....... ............W. .>.....{...... ..........f... ..{........+.. ........W..... .w...>......{. ......<....... .{.....>...... .............. .............. ..f...p....... ...........>.. W............. .............> .{.{.{.{.{.{.{ {.{.{.{.{.{.{. Level: kbozen 07 Bricks: !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! EE.EEEE.EEEE.E !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! E.EEEE.EEEE.EE !..!.!..!.!..! .............. vvvvvvvvvvvvvv .............. !..!.!..!.!..! EE.EEEE.EEEE.E Bonus: 11111111111111 ...b.......... ..........!... .~.....{...... l....w...b..c. ..{........... ..........c... .....~........ ........c..... .......+...{.. .{..b.c..w.... .............. ....c......... ......&....~.. ..c........... .............~ c{.{.{.{.{.{.{ ..{.........{. Level: kbozen 08 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEE..EEE..E Bonus: 1111.1111.1111 .............. .............. ...{.....s..>. lc...b.{...... ............{. ...c..&....... ........>..b.. .....c........ ..{...<....... .s.....c...{.w .............. ......{....... ..>........... ...........c.. >............. {.{...{.{.{.{c .{.....{...{.. Level: kbozen 09 Bricks: !..!E!..!E!..! .........E.... vvvvvvvvvvvvvv ....E......... !..!E!..!E!..! E.EEEE.EEEE.EE !..!E!..!E!..! .........E.... vvvvvvvvvvvvvv ....E......... !..!E!..!E!..! EE.EEEE.EEEE.E !..!E!..!E!..! .........E.... vvvvvvvvvvvvvv ....E......... !..!E!..!E!..! E.EEEE.EEEE.EE Bonus: 1111.1111.1111 ....w......... .............. .>.......b..{. ...l......W... ......{....... ........W..... {.&..>....!... ......<....... .......>.+.{.. w.{........... .............. ..W....{...... ....<......>.. W............. .............> {.{...{...{.{. .{.........{.. Level: kbozen 10 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEEEEEEE..E !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEEEEEEE..E !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEEEEEEE..E Bonus: 1111.1111.1111 ..........b... .~............ ......{.....c. b.{f....l..... ...........&.. .....~........ ........c..... .......+...... ......c....{.. .{.w....s..... .............. ...........f.. ..c....p...... .............~ c............. {.{...{.{.{.{. .{.........{.. Level: kbozen 11 Bricks: !..!E!..!E!..! ....E....E.... vvvvEvvvvEvvvv ....E....E.... !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E....E.... vvvvEvvvvEvvvv ....E....E.... !..!E!..!E!..! EEEEEE..EEEEEE Bonus: 2222.2222.2222 .............c .............. w..!...+....{. ........b.lc.. ......{....... ..{..........s p....-........ .......c...... ..{.b......... +....c.{..w.{. .............. .............. ..c....-.....& .............. ......-....... ..{..{..{..{.. ......{{...... Level: kbozen 12 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEEEEEEE..E !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! EEEEEE..EEEEEE !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEEEEEEE... Bonus: 2222.2222.2222 ....w..+.....> .............. ....b......>.. .-....l....... ...........{.. .............. ....-.!....... .......>...... ..{.b......&.. .....<.d.....w .............. ............{. ..>.......d... .............. >...........d. {.{...+...{.{. .{.........{.{ Level: kbozen 13 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E....E.... vvvvEvvvvEvvvv ....E....E.... !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E....E.... vvvvEvvvvEvvvv ....E....E.... !..!E!..!E!..! E..EEEEEEEE..E Bonus: 2222.2222.2222 ......p....... s.........w... ..b.........{. .......~...... .c............ ..{........... ......<...b... .............. .&..........c. .....+........ .............. ..c...~....{~. .{............ .............. .~...!l~..c... {..{.......{{. .{{........{c. Level: kbozen 14 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! EEEEEE..EEEEEE !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEEEEEEE..E !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! EEEEEE..EEEEEE Bonus: 2222.2222.2222 .............. .............. .s.....>...... ...w......+.l. ......{....... .{............ ......>......b .............. b.......b..... ......<.....{. ..&........... .............. .............. .......-...... ......-......! .+...{..{..... ......{{...... Level: kbozen 15 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E....E.... vvvvEvvvvEvvvv ....E....E.... !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E....E.... vvvvEvvvvEvvvv ....E....E.... !..!E!..!E!..! EEEEEE..EEEEEE Bonus: 2222.2222.2222 ....b...b..... .............. .{.......b.... ...w..f....{W. .......{...... ............f. .....<........ .............. ..f....W...{.. .{....{.....W. .............. .............. ......c....... ...l..cc....&. .W.....c..!... .....{..{..... ......{{...... Level: kbozen 16 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! EEEEEEEEEEE..E !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEEEEEEEEEE !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! EEEEEEEEEEE..E Bonus: 3333.3333.3333 l........s..b. .............b ......s.{..c.. ..d........... ............c. ......{w...... .&..b....b.... .............. ...........f.. <.....b!...... .............. ..{...c....... b........>.... ....c......>.. ..b........... .bc...b+..{.>{ ...........{{. Level: kbozen 17 Bricks: !..!E!..!E!..! .........E.... vvvvvvvvvEvvvv .........E.... !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E....E.... vvvvEvvvvEvvvv ....E....E.... !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E......... vvvvEvvvvvvvvv ....E......... !..!E!..!E!..! E..EEEEEEEEEEE Bonus: 3333.3333.3333 ...b....+....l .............. b...w......... ..-....&...... .............. .............. .b....{....w.< .............. .d{b...c...... ............{. ..d.........>. .............. .....b.{.>.... .c............ .......b...>.. {..{........{. .{{........... Level: kbozen 18 Bricks: !..!E!..!E!..! .........E.... vvvvvvvvvEvvvv .........E.... !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E......... vvvvEvvvvvvvvv ....E......... !..!E!..!E!..! E..EEEEEEEEEEE !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! EEEEEEEEEEE..E Bonus: 3333.3333.3333 ....<..b..l... .............. .............. ..&........... .......{....s. .............. .......b...b.. .............. w.+.........{. ......f....!.. .............. .{............ b.c.b..+.~..-. .............. b....c.....-.. ..c.......{..{ ...........{{. Level: kbozen 19 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEEEEEEE..E !..!E!..!E!..! ....E....E.... vvvvEvvvvEvvvv ....E....E.... !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E......... vvvvEvvvvvvvvv ....E......... !..!E!..!E!..! E..EEEEEEEEEEE Bonus: 3333.3333.3333 p.b...b.....w. .............. <..b...b...... ......!....... ..w........... ............{. b.......l..... .............. .{+...&....... .............. ...........c.. .>....s....... ........c...c. ..>........... .>.....{.c...b {..{.......b!. .{{........... Level: kbozen 20 Bricks: !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! E..EEE..EEE..E !..!E!..!E!..! ....E....E.... vvvvEvvvvEvvvv ....E....E.... !..!E!..!E!..! E..EEEEEEEE..E !..!E!..!E!..! .............. vvvvvvvvvvvvvv .............. !..!E!..!E!..! EEEEEE..EEEEEE Bonus: 3333.3333.3333 .b............ .....w....b... ......&....... ..s........c.. .............. .............. .s...w....<.c. .............. ........l...~. ......+....... .~.........c.. ..s....d...... b........~.... ......d....... ....~.......~. .....{..{..b.. ......{{...... Level: kbozen 21 Bricks: !..!@!..!@!..! ....z....z.... vvvvzvvvvzvvvv ....z....z.... !..!@!..!@!..! @zz@@@zz@@@zz@ !..!@!..!@!..! ....z....z.... vvvvzvvvvzvvvv ....z....z.... !..!@!..!@!..! @zz@@@zz@@@zz@ !..!@!..!@!..! ....z....z.... vvvvzvvvvzvvvv ....z....z.... !..!@!..!@!..! @zz@@@zz@@@zz@ Bonus: 4444.4444.4444 ..<...+....... .......f...... .f.?.p....?.f. ...........b.. .............. ..b........... .>...l.{...>{. .............. .{....>...p... ............<. .............. ..b........... ......-...b... ...........-.. .-............ {..{..{.{.{.{. .{{....{...{.. lbreakout2-2.6.5/client/levels/KungFu0000664000175000017500000002222112140767201014412 00000000000000Version: 1.00 Level: Tars Training Fields Bricks: ff..ffff..ffff .............. .............. .............. f..ffff..ffff. .............. .............. .............. ..cccc..cccc.. .............. .............. .............. .cccc..cccc..c .............. .............. .............. cccc..cccc..cc .............. Bonus: 2>..w22>..w22> .............. .............. .............. >..w22>..w22>. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Tars Train Harder - More Chi Bricks: .............. .!.!.!..!.!.!. .*.*.*..*.*.*. .............. .............. .............. ....fz...fz... ..zzz..zzz..zz .............. .............. ...fz...fz...f .zzz..zzz..zzz .............. .............. ..fz...fz...fz zzz..zzz..zzz. .............. .............. Bonus: .............. .b.b.+..+.b.b. .c.c.c..c.c.c. .............. .............. .............. ....>....>.... .............. .............. .............. ...>....>....> .............. .............. .............. ..>....>....>. .............. .............. .............. Level: Tars Shadowless Kick Bricks: .............. .............. .............. zffz.zffz.zffz zzzz.zzzz.zzzz .............. cffc.cffc.cffc cccc.cccc.cccc .............. iffk.kffk.kffi kkkk.kkkk.kkkk .............. .............. z..z.z..z.z..z ifff.ffff.fffi cccc.cccc.cccc .............. .............. Bonus: .............. .............. .............. W>b&.&>b&.&>bW .............. .............. .>b&.&>b&.&>b. .............. .............. +>b&.&>b&.&>b+ .............. .............. .............. .............. +>b>.b>b>.b>b+ .............. .............. .............. Level: Tars Golden Pagoda Bricks: ......h....... .....heh...... ......h....... .....heh...... ......h....... ....hhehh..... .....hhh...... ...hhhchhh.... ....#c!c#..... ..hhh#c#hhh... ...hhh#hhh.... .hhhhhhhhhhh.. ..hhhhhhhhh... hhhhhhhhhhhhh. .hhhhhhhhhhh.. .............. ffffffffffffff .............. Bonus: .............. ......5....... .............. ......5....... .............. ......5....... .....1.1...... ......f....... .....flf...... ...12.f.21.... .............. ..121212121... .............. .12121212121.. .............. .............. b>b>b>b>b>b>b. .............. Level: Tars Festival Bricks: .............. !.!........!.! *.*........*.* *.*........*.* *.*........*.* *.*.cccccc.*.* *.*ciggggic*.* ..cigzzzzgic.. ..cgiiiiiigc.. .cgihehhehigc. .cgzihiihizgc. .cgzihiihizgc. .cgzihiihizgc. .cgihehhehigc. ..cgiiiiiigc.. ..cigzzzzgic.. ...ciggggic... ....cccccc.... Bonus: .............. +.b........b.+ .............. .............. c.c........c.c .............. c.c...-<...c.c .............. ....~....~.... .....5..5..... ......ll...... ......bb...... ......WW...... ...>.5..5.>... ....~....~.... .............. ......<+...... .............. Level: Tars Ancient Library Bricks: ...cf...fc.... jcccc...ccccj. ccfc.....cfcc. c.c.......c.c. .............. .c.........c.. .#.........#.. #d#.......#d#. .k.........k.. .k.ccccccc.k.. k.k.c...c.k.k. ...ccccccc.... ....czzzc..... ##..czzzc...## .###czzzc####. ....c..c...... .............. .............. Bonus: ....>...>..... f...........f. ..b.......b... .............. .............. .............. .............. .............. .............. .............. ....f...f..... .............. .............. .............. .............. .............. .............. .............. Level: Tars Scroll of Dragonbreath Bricks: .............. *zdz.......... *zdz....z..... zzdz.....z.... dddz.....z.... ####...cccc... ......!aaaac.. .....##!cccac. ....#**#.z.ca. ....ee#..z.ca. ...he...z..ca. ..hh.....zzacz ........z.ca.. .........ca... ff.......ca.aa ff.......ccacc ff........cc.. cc............ Bonus: .............. .............. ..*........... .............. *.*........... .............. ......W....... .......W...... .....**....... .....*........ .............. .............. .............. .............. >b............ >b............ >b............ .............. Level: Tars Shaolin Wonderpalm Bricks: ..#!#....#!#.. ..###....###.. .............. .zzz......zzz. .zgz......zgz. .zzz......zzz. .............. .zzz......zzz. .zgz......zgz. .zzz......zzz. .............. .............. .###......###. .fff......fff. .iff......ffi. .ccc......ccc. .............. .............. Bonus: ...j......j... .............. .............. ..&........&.. ..m........m.. ..-........-.. .............. ..&........&.. ..m........m.. ..-........-.. .............. .............. .............. .bbb......bb>. .+>>......>>+. .............. .............. .............. Level: Tars Outer Gate Bricks: .............. .............. ..d........d.. ..@@dd@@dd@@.. ...f......f... ..dddd@@dddd.. ..d@d@ff@d@d.. ...d@....@d... ....d....d.... ....@....@.... ....d....d.... ....@....@.... ....d....d.... ....@...@..... .............. .............. .............. .............. Bonus: .............. .............. ..-........-.. .............. ...+......+... .............. ......++...... ...>......>... .............. .............. ....c....c.... .............. ....>....>.... .............. .............. .............. .............. .............. Level: Tars Outer Courtyard Bricks: .............. .fgf..**..fgf. #jfg#z..z#gfj# #####.zz.##### .............. .............. .............. .fgf......fgf. #jfg#....#ffj# #####.yy.##### .............. .............. .............. .fgf......fgf. #jfg#....#gfj# #####.xx.##### .............. .............. Bonus: .............. ..>...5l...>.. .fbc.*..*.cbf. ......bb...... .............. .............. .............. ..>........>.. .fbc......cbf. ......++...... .............. .............. .............. ..>........>.. .fbc......cbf. ......b}...... .............. .............. Level: Tars Inner Gate Bricks: k.....hh...... .....hchh...k. .....chhh...k. ..k.hhhhhh.... ....chhhhh.... ...chhhhhhh..k .khhhhhhhhhh.. ...ccchhccc... .k.ccjj#jcc.k. .k.cfjjf#fc.k. .h.ccj#.#cc.h. hehcc#..#ccheh edecc#.##ccede dddz##ii##zddd ###zz##.#zz### ..#zz#..#zz#.. ..#zz#..#zz#.. ..#.##..##.#.. Bonus: ......22...... .....2f22..... .....f222..... ....222222.... ....f22222.... ...f2222222... ..2222222222.. ...f..22..f... .............. ....b..b.b.... .............. .............. .*..........*. ***...++...*** .............. .............. .............. .............. Level: Tars Inner Courtyard Bricks: ......!!...... .............. #####EzzE##### *...a.zz.a...* cc###E..E###cc ffff.E..E.ffff gfkj.z..z.jkfg gfkj.z..z.jkfg ffff.E..E.ffff #####E..E##### *...a....a...* cc###E..E###cc ffff.E..E.ffff gfkj.c..c.jkfg ffff.E..E.ffff #####E..E##### .............. .............. Bonus: ......l*...... .............. ......bb...... ?...d.WW.d...? .............. .............. c.~f.w..w.f~.c >b~f.5..5.f~b> .............. .............. ?...d....d...? .............. .............. >b~f.+..+.f~b> .............. .............. .............. .............. Level: Tars General Wu Bricks: .............. zzz........zzz zgz........zgz zzz..v..v..zzz .....@..@..... .............. ...v..@@..v... .h.@.@!!@.@.h. eee...@@...eee ddd........ddd kkk........kkk .....v..v..... .....@..@..... .i..........i. fff........fff fff........fff ccc........ccc .............. Bonus: .............. .&..........&. .m..........m. .....d..d..... .............. .............. ...d......d... ......ll...... .............. .*..........*. .............. .....d..d..... .............. .+..........+. b>b........>b> >b>........b>b .............. .............. Level: Tars Victory Celebration Bricks: .............. .............. .............. .............. .!#..!##!..#!. c*c.c*cc*c.c*c h*h.h*hh*h.h*h c*c.c*cc*c.c*c e*e.e*ee*e.e*e c*c.c*cc*c.c*c c*c.c*cc*c.c*c c*c.c*cc*c.c*c e*e.e*ee*e.e*e c*c.c*cc*c.c*c h*h.h*hh*h.h*h c*c.c*cc*c.c*c c*c.c*cc*c.c*c c*c.c*cc*c.c*c Bonus: .............. .............. .............. .............. .l...l..l...l. .............. 4.4.4.44.4.4.4 j.j.j.jj.j.j.j 5.5.5.55.5.5.5 .............. .............. .............. 5.5.5.55.5.5.5 j.j.j.jj.j.j.j 4.4.4.44.4.4.4 .............. .............. .............. Level: Tars R&R Bricks: .c...cc....... cc...ccc..c... .........ccc.. ..ccc....cccc. .cccc......... .............. .......h...... ......hhh..... ......hhh..... gggggdhhhdfggg ggggggdhdgfggg gggggggddffgfg ggggggggdgffgg gggggggggff@gg egggggggfefg@g eegeeggeeefge@ eeeeeeeeeeegee eeeeeeeeeeeeee Bonus: .............. .&....&....... .............. ...........&.. ...&.......... .............. .......5...... ......555..... ......555..... ......555*>... ......*5..>... ........*bb.b. ..........>>.. .........>b... ........b.>... ..........b... .............. .............. lbreakout2-2.6.5/client/levels/CalendarFun0000664000175000017500000002224212140767201015400 00000000000000Version: 2.30 Level: Redito Happy New Year! Bricks: j.jj...jjj.jjj j..j...j.j.j.j j..j.j.j.j.j.j j.j....j.j.j.j j.j..j.j.j.j.j j.jj...jjj.jjj @..@.@.@.@.@.@ .............. ************** !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! ************** !!!!!!!!!!!!!! ************** ************** .............. .............. Bonus: ~.W....W5~.~.W f..f.......5.d 5..&.f.f.f...l d.5....d.&.f.f f....5.....d.5 W.*~...~5W.W*. .............. .............. .............. f<.j.fwwf.j..*..... .2..2..2...... >.d.d.d....... .{>.l.?Wc..W.. ...252~.202.0c ..d..W.?.d.>.W ..c.c.2.c2c.2. ...{0....*...1 ....d.W>.l.?W. ......1..5.... .......W2.2d.. .........c.c.. ........W0W... .........d.... .............. Level: Redito Luck O' The Irish Bricks: .....ddd...... ....dxfxd..... ...dxaaaxd.... ...dfaccaxd... ..dxaciicaxd.. ..dfaciicafd.. .dxaci..icaxd. .dfaci..icafd. @hhhhhh@.icaxd @hhhhhh@.icaxd @hhhhhh@.icafd @hhhhhh@...... @hhhhhh@...... @hhhhhh@...... @hhhhhh@...... @hhhhhh@...... .@hhhh@....... ..@@@@........ Bonus: .....{g....... ......m0{..... ...}.gb..g.... ...{?.f.}p.... ..g0.0?0.<0{.. .......gf..g.. .?m0f?....}... .{0<+...0+.p.. .5.55.5...f... 3}2..2}3.?.b.{ .5.55.5...g0-. .j2..2j....... 35.55.53...... .-2ml2-....... .5.55.5....... 3j5555j3...... ..-22-........ ...33......... Level: Redito Spring Has Sprung! Bricks: !bb...EE...bb! bb!b.!bb!.b!bb .EEb!b!!b!bEE. .............. ..dd......ii.. .dddd....iiii. d*dd*d..iiiiii ddhhdd..iihhii d*dd*d..iiiiii .dddd....iiii. ..ff......ff.. f.ff.f..f.ff.f .ffff....ffff. ..ff......ff.. @.ff.x@@x.ff.@ xfxxffxxffxxfx fxffxffffxffxf .............. Bonus: 0g..........g0 ..15.1gl1.g1.. ...g0.00g0.... .............. .............. .?22?....c25c. .............. ~.11.~..~.11.~ .............. .?{{?....c{{c. .............. >....p..p....> ..}}......}}.. ..w?......?w.. ..00.3..3.00.. >.bb- 0f..1.++.1..f0 .............. Level: Redito Easter Egg Hunt Bricks: .....vjjv..... ....vj..jv.... ...vjvhhvjv... ..vEjffffjEv.. .vEjvv@@vvjEv. .vEjedededjEv. .vEjdededejEv. .vEjvv@@vvjEv. .vEj!a!a!ajEv. .vEja!a!a!jEv. .vEjvv@@vvjEv. .vEjdededejEv. .vEjedededjEv. .vEjvv@@vvjEv. ..vEjffffjEv.. ...vjvhhvjv... ....vj..jv.... ......jj...... Bonus: .....1gg1..... ....fW..Wf.... ...~..55..~... ..2.pmjjmp.2.. .>..0....0l.>. ...s...2..s... .b..2.?.?2..b. .c.>......>.c. .......1.f.... .1.-f.1...-.1. .>..........>. ...W2....2W... .1..b.2.2b..1. .f.d.0..0.d.f. ..~...ww...~.. ...>..11..>... ....cW..Wc.... ......<<...... Level: Redito Call Your Mom! Bricks: Ev.vE......... iaEaiv........ aiaiav........ ivaviEvvE..... avivaiaaiv.... ivEviaiiav.... av.vai..iEv.vE iv.via..aiaEai av.vaivviaiaia iv.via..aivavi Ev.vEi..iaviva ....vaiiaivEvi ....viaaiav.va .....EvvEiv.vi ........vav.va ........viv.vi .........Ev.vE .............. Bonus: .>.c.......... 5p.b5......... d.*..f........ .}.g..cp...... 2.5.24*&4..... .>.<...?.f.... ~...dW..W.>.c. .-.2.....5b.p5 c...cl55l..*.d 4{.?4d..d.g.}. .f.+.....2.5.2 ....f.?b..2.>. .....4w*4....~ ......-+..W.-. ........fc...c ........24?.{4 ..........+.f. .............. Level: Redito Call Your Dad! Bricks: #v............ akv........... kva#.......... avvkv......... kvvav.#....... avvkvvav...... kvva#kvk#v.... avvkav.va#v... kva#kvvvkakv.. akv.akakakva#. #...kv#vkavvkv ....av.vakvvav ....kv.vkavvkv ....av.vakvvav ....#v.v#avvkv .........kva#. .........akv.. .........#.... Bonus: .0............ 5~b........... .1?........... <...d......... 1!>+0......... f...p0?0...... 1-0>..f..b.... b...3...!.0... .*d..1*1.5.l.. 2.0.1.w.1.1?.. .....d.d.b...d ....s2.2s13>+. .....-.-.f...c ....W...W1-0b. .....>.>.<...* ..........~d.. .........2.0.. .............. Level: Redito Ice Cream Summer Days Bricks: .!.!.j!jj.!.!. c.c.jjjjdj.c.c .!.jjdjjjj..!. c..djjj!jjj..c ..jjj!djdjdj.. !.jjdjjjjjjj.! ..j!jjj!jjjd.. c.djjdjjjd!j.c ..jdjj!jjjjj.. !.jj!jjjdjj..! ...jjjdjj!j... ...j@@@@@j.... ....@@@@@..... ....@@@@@..... ....@@@@@..... .....@@@...... .....@@@...... .....@@@...... Bonus: .j...~fl2.m.j. f.f....~?..f.f .}..~2g..2..}. >..?...f.~...> ..2~.f?.?.?... f...?..~.2.2.f ...f.2&f...?.. ..?.~?...?f... ..2?..f~2..... >...f...?.~..> ...~.5w5.f.... ...2..4..~.... .............. ....4.4.4..... .............. .............. ......4....... .............. Level: Redito Oh, Canada! Bricks: jjjjjjdjjjjjjj jjdjjdddjjdjjj jjddjdddjddjjj jjdddddddddjjj jjdddddddddjjj djjdddddddjjdj ddjjdddddjjddj dddjdddddjdddj dddddddddddddj jdddddddddddjj jjdddddddddjjj jjjdddddddjjjj jjjdddddddjjjj jjdddddddddjjj jdddddddddddjj jdddddddddddjj jjjjjjdjjjjjjj jjjjjjdjjjjjjj Bonus: +d.4.d*d.4.dc+ ..-...3...-... W...-?.?-...W4 ..2.f0j0f.2... c..{1~.~1{...c ?4..-.0.?..4?. ......*....... f.~d.{l{.d~.fW .2.1?0f0-1.2.0 ..{...2...{... d.c1..*..1c.0d .W..-.0.?..W.. c4.2.~d~.2.4.c ..d...{...d..0 ..{.?...-.{.c. --.>.f3f.>.-.- .W.4.wWw.4..Ww >+.W-+.+-.W.+> Level: Redito America The Beautiful Bricks: a!a!a!dddddddd !a!a!adddddddd a!a!a!jjjjjjjj !a!a!ajjjjjjjj a!a!a!dddddddd !a!a!adddddddd a!a!a!jjjjjjjj !a!a!ajjjjjjjj dddddddddddddd dddddddddddddd jjjjjjjjjjjjjj jjjjjjjjjjjjjj dddddddddddddd dddddddddddddd jjjjjjjjjjjjjj jjjjjjjjjjjjjj dddddddddddddd dddddddddddddd Bonus: f2f2<2*.?..{.* 2.2.2....{.... .2f2.2....W.&. 2.2f2f.W.l..W. f2f2.2~......~ 2.2f2...~?~... .2.2.2.W..W... 2<2f2f.&.....& -.?...{{...?.- ...~.-...-~... W...W.&..W...W ..W..w..w..W.. {.?...--...?.{ ....{..*.{.... w....W..W....w ..W&.......W.. ?..-.~..~.-..? -?.{..--..{.?- Level: Redito Leaves are Falling Bricks: akakaka...ee@@ kakaka..de@de@ akaka..e@.e@d@ kaka....@@.@.@ akak....e@de@. kak...@@d@@.@. aka...e@.e@e@@ ka.....e@d@.d@ aa.....d@.@@.@ k....e@.@ed@@@ a......@@@ed@@ ......e.e@@.@@ ..e.d...@e@@@@ d..........@@@ ed...e..e...@@ eeede..d....@@ edeedee..e..@@ deeeedeed..e@@ Bonus: mWf.d.f....w.5 W3.W3W..*5.0lc d.d.f......-{. .f......5....5 W........~5m.. .d3...5-5-..5. 3W.........b.5 .........w5.5- W<.....*...-.. .....c5.~.*.c5 d......-.-b5-. ......~.5.5..c ..c.........~. ...........5.5 c3......c..... .~-.c.......5w c..3..~....... {-0.-.0-...0-5 Level: Redito Trick or Treat! Bricks: ......x....... ......x....... .....xxx...... ....eeeee..... ...eeeeeee.... ..eeeeeeeee... .eevveeevvee.. .eevveeevvee.. eeeeveeeveeee. eeeeeeveeeeee. eeeeeeveeeeee. eeveeeeeeevee. eevveeeeevvee. .eevvevevvee.. .eeevvvvveee.. ..eeeveveee... ...eeeeeee.... ....eeeee..... Bonus: ......5....... ......5....... ......l....... .....}*}...... ...b!.2.!b.... ..}c.f.{gdg{.>.*. bWf5<.d.<5fWb. !2dc.2f2.cd2!. ?.dd>~w~>dd.?. .b~dd{d{dd~b.. .>cfdddddfc>.. ..s?Wd0dW?s... ...>.f>f.>.... ....-0+0-..... Level: Redito Lest We Forget Bricks: .....v@@@v.... .....v@@@v.... .....v@@@v.... .....v@@@v.... .vvvvv@d@vvvvv .v@@@@ddd@@@@v .v@@@ddxdd@@@v .v@@@ddxdd@@@v .v@@@@ddd@@@@v .vvvvv@d@vvvvv .....v@@@v.... .j...v@@@v..j. jjj..v@@@v.jjj .j...v@@@v..j. .j...v@@@v..j. .j...v@@@v..j. .j...v@@@v..j. .....v@@@v.... Bonus: .....2?.?2.... .......2...... .....j.2.j.... ......?.?..... .2.~.c.d.c.~.2 ..?.?..j..?.?. .?.2...l...2.? .j.2..?*?..2.j ..?.?..j..?.?. .2.dm..d..md.2 .....c.?.c.... .............. .4...~2?2~..4. .............. .d...c.?.c..d. .............. .~...j.?.j..~. .....2...2.... Level: Redito Baby It's Cold Bricks: jakcja#cjEkcja cjakcjakcjakcj kcjakcjakcjEkc bkcjakcja#cjak ja#cjakcjakcja cjakcjakcjakcj kcjakcjakcja#c akcjakcjakcjak #akcjakcjEkcja cjakcjakcjakcj kcja#cjakcjakc akcjakc#akcjak jakcjakcjakcja cjakcjakcjakcj kcjEkcjakcjEkc a#cjakcjakcja# jakcjakcjakcja cjakcjakcjakcj Bonus: 1f.dWf.dW..dWf .........>.c c.3.b.d.b.3... .............. ...>......>... ..5.5....-.-.. .?.j.?..5.j.5. d.{.{....{.{.d ...?......g... ..f~f....f~f.. d.2.>.22.>.2.d 2.?.2>dd>2.?.2 .m.W.dbbd.W.!. 2...2....2...2 {...{....{...{ .............. Level: Redito Merry Christmas! Bricks: f*f@..v...@f*f **@..vhv...@** **..vh!hv...** f@...vhv....@f @....xjx.....@ ....ff*ff..... ....xdedx..... ...ffj*jff.... ...x*e!e*x.... ..ff!f*f!ff... ..xdfe!efdx... .ffgjf*fjgff.. fxdjfe!efjdxf. x*!d!d!d!d!*x. xxxxxx@xxxxxx. ......@....... !!.ff.@.dd.!!. !!.ff.@.dd.!!. Bonus: 5.5...f....5.5 .....j5j...... .5..05l50...5. 5....fmf.....5 .....212...... ....1...1..... .....f0f...... .............. ...f.0!0.f.... ..1p2...2p1... ....W0?0W..... .1f.1f.f1.f1.. <.1..0.0..1.<. d..w2.?.2w..d. 0W+>-<.<->+W0. ......5....... .<..c...c..<.. 0..-.....-..0. lbreakout2-2.6.5/client/levels/Wolvie0000664000175000017500000001357012140767201014467 00000000000000Level: RBA W Bricks: ............... ...ddaddddddd.. ...ddaadddddd.. ...dddaaddddd.. ...ddddaadddd.. ...dddddaaddd.. ...ddddddaadd.. ...dddddaaddd.. ...ddddaadddd.. ...dddddaaddd.. ...ddddddaadd.. ...dddddaaddd.. ...ddddaadddd.. ...dddaaddddd.. ...ddaadddddd.. ...ddaddddddd.. ............... ............... Bonus: ............... ...m.3...+..m.. .....g3g....... ....s..3.f..... ........3..s... ....b....3..... ......f...3g... ...w.+......+.. .......lllb.... .....s......... ........b.3.w.. ....b....3..... ........3...... .......3...w... ......3........ ...!.3....+.!.. ............... ............... Level: RBA o Bricks: ............... ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddbbbbddd.. ...dddbbbbddd.. ...dddbddbddd.. ...dddbddbddd.. ...dddbddbddd.. ...dddbbbbddd.. ...dddbbbbddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ............... ............... Bonus: ............... ...~....*...... ......W.....c.. ........{W..... .....W.....~... ...c........... .....-l..l.&*.. ...*...55...... ...!c.l55lf.&.. .......55...... ...f.&l..l.!... ............... ...d-.......... ......f.-.d.c.. ............... ...{...d....... ............... ............... Level: RBA l Bricks: ............... ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddcdd.. ...dddddddcdd.. ...ddccccccdd.. ...ddccccccdd.. ...ddccccccdd.. ...ddcddddcdd.. ...dddddddcdd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ............... ............... Bonus: ............... .......55...... ...5......~.5.. ............... ...?.l......... ........l...m.. ....+.......... ...m..<...4.... ........<...?.. ...~.4......... ..........4.+.. .......?....... ...wb>wb>wb>w.. ............... ......+ff+..... ............... ............... ............... Level: RBA v Bricks: ............... ...dddddddddd.. ...dddddddddd.. ...ddaddddddd.. ...ddaadddddd.. ...dddaaddddd.. ...ddddaadddd.. ...dddddaaddd.. ...ddddddaadd.. ...dddddaaddd.. ...ddddaadddd.. ...dddaaddddd.. ...ddaadddddd.. ...ddaddddddd.. ...dddddddddd.. ...dddddddddd.. ............... ............... Bonus: ............... ...j...2.+..W.. ............... ....2.......... .........2..f.. ............... ....W.......+.. ............... ........l.l2... ......4........ ...4........... ..........j.... ........+...... .....f......... ....+.......... ...........4... ............... ............... Level: RBA e Bricks: ............... ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...ddbbbdbbdd.. ...ddbbbdbbdd.. ...ddbdbddbdd.. ...ddbdbddbdd.. ...ddbdbddbdd.. ...ddbdbddbdd.. ...ddbdbddbdd.. ...ddbbbbbbdd.. ...ddbbbbbbdd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ............... ............... Bonus: ............... ...j...44...}.. .......c..+.... ....w.......... ............p.. ........p...... ...c..l...w.... ......5........ ....j.l.mc..d.. ......5........ ...d..l..}..... .....w....w.c.. ........+...... ............+.. ...+........... ......?..?..... ............... ............... Level: RBA r Bricks: ............... ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddccddddd.. ...dddccddddd.. ...dddcdddddd.. ...dddcdddddd.. ...dddcdddddd.. ...dddcdddddd.. ...ddccccccdd.. ...ddccccccdd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ............... ............... Bonus: ............... ...5..g.....5.. ........j~d.... ......j........ ....g.......&.. ..........&.... ....+.......... ............... ....~.l.+.d.... ..........~.... ............... ............... ...&........... ............... .....+..>...+.. ...5........5.. ............... ............... Level: RBA i Bricks: ............... ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddadd.. ...dddddddadd.. ...ddadaaaadd.. ...ddadaaaadd.. ...ddadaaaadd.. ...ddddaddadd.. ...dddddddadd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ............... ............... Bonus: ............... ...j....w...... .....+....m.... ......!..?.!... .....j......... ....b..}..3.... ..........3.... .....l.3333.+.. ....mf.3333.... .....l.3333b... .......3..3.... ...w..?...3m... ...........w... .....+...b..... ............... ............... ............... ............... Level: RBA n Bricks: ............... ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...ddddbbbbdd.. ...ddddbbbbdd.. ...ddddbddddd.. ...ddddbddddd.. ...ddddbddddd.. ...ddddbddddd.. ...dddbbddddd.. ...dddbbbbbdd.. ...dddbbbbbdd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ............... ............... Bonus: ............... ...4...&4...4.. ......0..+..p.. ....f.......... .........W..... ...w.p.l..l.c.. ........?...... ...<.1j...1w... .........?..+.. .....<.W...j... ...c..l.<...... ........l.l.... ....!.+...W.... ...0...?....!.. ..........c.... ...+.....0..... ............... ............... Level: RBA e Bricks: ............... ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ...ddcccdccdd.. ...ddcccdccdd.. ...ddcdcddcdd.. ...ddcdcddcdd.. ...ddcdcddcdd.. ...ddcdcddcdd.. ...ddcdcddcdd.. ...ddccccccdd.. ...ddccccccdd.. ...dddddddddd.. ...dddddddddd.. ...dddddddddd.. ............... ............... Bonus: ............... ...5...55...5.. ...p..b.>...+.. ............... .....m..f?..... ...d........>.. .....?l........ ....+.g....+... ...>..lmbm.j... ......g....b... ......l.f.w.... ............d.. .....w..+.?.... ...~.......~... ....+.d~...+... ............... ............... ............... Level: RBA CLAWS Bricks: cvvvvvccvvvvvc cvvvvvccvvvvvc vcvvvvccvvvvcv vcvvvvccvvvvcv vvcvvvccvvvcvv vvcvvvccvvvcvv vvvcvvccvvcvvv vvvcvvccvvcvvv vvvvcvccvcvvvv vvvvcvccvcvvvv vvvvvccccvvvvv vvvvvccccvvvvv zzzzzzcczzzzzz cvvvvvccvvvvvc vcvvvcvvcvvvcv vvcvcvvvvcvcvv vvvcvvvvvvcvvv zzzzzzzzzzzzzz Bonus: 04j44455444j40 0+4+4w5w4+4+4+ 30444455444403 30444455444403 +j+4+jw5+j+0+j 33044455444033 33304455440333 3+jwj+j+jwj+j+ 33330455403333 33330455403333 +3+j+2wj+3+j+3 33333222233333 5+5+5wjw5+5+5+ 41111145333335 0511152243334b 004142222535bm 00052222224pmb 5+5+5wjw5+5+5+ lbreakout2-2.6.5/client/levels/Arcade0000664000175000017500000001661112140767201014400 00000000000000Level: elvis In the beginning Bricks: .............. .............. ....ccc....... .............. .............. .............. .............. .............. .............. .............. .............. .............. f.f.f.f.f.f.f. .............. .............. .............. .............. .............. Bonus: .............. .............. ....222....... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: elvis when aliens attack Bricks: ............i. ...........iii ............i. .g.g.g.g.g.... .............. .f.f.f.f.f.... .............. .h.h.h.h.h.... .............. .e.e.e.e.e.... .............. .d.d.d.d.d.... .............. .............. .............. ..aa..aa..aa.. ..bb..bb..bb.. ..cc..cc..cc.. Bonus: ............5. .............. .............. .0.0.0.0.0.... .............. .0.0.0.0.0.... .............. .0.0.0.0.0.... .............. .0.0.0.0.0.... .............. .0.0.0.0.0.... .............. .............. .............. .............. .............. .............. Level: elvis Command prompt Bricks: ....i.......e. ....i.......e. ....i......h.. .....d.....h.. .....d....h... .....d....c... ......e....... ......e....... ......e....... .......h...... .c.....h...... .......h...... .......c...... .............. .............. g.....g.....g. gg....gg....gg gg.aa.gg.aa.gg Bonus: .............. .............. .............. .............. .............. ..........4... .............. .............. .............. .............. .4............ .............. .......4...... .............. .............. .............. >.....f.....-. .............. Level: elvis Flying Ostrich? Bricks: .............. .............. .............. .hhhhhh..c.... ..eeeee....c.. ....dd........ .............. .............. .............. .............. .......f...... hh....hhhhhhhh e......eeeeeee ........ddd... .............. .............. .............. .............. Bonus: .............. .............. .............. ..>.f....g.... ...........g.. .............. .............. .............. .............. .............. .............. .........>.f>. .............. .............. .............. .............. .............. .............. Level: elvis Preparation A Bricks: .............. ...........ff. .fff...f...ff. .fff...f...ff. .fffh......... .fff.......... .....h........ .............. ......h....... .............. ...f...c...... ...f.......... .............. ........ff.... ........ff.... ........ff.... .............. .............. Bonus: .............. ...........11. .000...2...... .............. .............. .............. .............. .............. .............. .............. ...2.......... .............. .............. ........11.... .............. .............. .............. .............. Level: elvis Intruder Alert Bricks: .h..h......... dh..hd........ .h.dh......... hh..hhhhh..h.. ...........h.. ...........h.. ..d........hd. ...........h.. hhhhhh..h..hhh .....h..h..... .....h..h..... ........h..... ........h..... ........h..d.. .....h..h..... ....dh..h..... .....h..h..... hhhhhh..hhhhhh Bonus: .............. 4....4........ ...4.......... .............. .............. .............. ..3.........3. .............. .............. .............. .............. .............. .............. ...........2.. .............. ....2......... .............. .............. Level: elvis Freddy Fender Bricks: .............. c............. ........c..... ........h..... .............. ...f.......... ...ff.e.e.c... ..........h... .............. .............. .............. .............. .............. .............. ............gg ..ggggg...ggg. gggh..ghgggh.. g............. Bonus: .............. 4............. ........4..... ........f..... .............. .............. ..........4... ..........>... .............. .............. .............. .............. .............. .............. .............. .............. ...-...-...-.. .............. Level: elvis Temp, temper, ... Bricks: .............. .f..........f. .ff........ff. .f.f......f.f. .f..f....f..f. .f...f..f...f. .f...f..f...f. .f..cf..f...f. .f..ff..ff..f. .f.f..ff..f.f. .ff..f..f..ff. .f...f..fc..f. ..f.f....f.f.. ..f.f....f.f.. ...f......f... ...f.cc...f... ....fcc..f.... .....ffff..... Bonus: .............. .............. .............. .............. .............. .............. .............. ....3......... .............. .............. .............. .........3.... .............. .............. .............. .....44....... .............. .............. Level: elvis Don Quixote Bricks: .d............ .c............ ded........... .e.........g.. ddd........e.. d.d....ii..g.. ccc....ii.gg.. eeeccc.ii.g.g. ...eeeccc..... ......eeeccc.. .........eee.. .............. ....ii........ ....ii.....ccc ....ii..ccceee .....ccceee... ..ccceee...... ..eee......... Bonus: .............. .5............ .............. .............. ...........f.. .............. .......g...... .............. .............. .............. .............. .............. .............. .....g........ .............. .............. .............. .............. Level: elvis Sole Posession Bricks: gggggggggggggg ggggggggggghhg ggggggggggghhg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg ffffffffffffff fff...ffffffff ffff.....fffff fffff.c...ffff fffff.....ffff fffff..c..ffff ffff.......fff ffff...c...fff ffff.......fff fff....c...fff Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ......m....... .............. .......p...... .............. .......s...... .............. .......w...... Level: elvis Troff Bricks: .............. .hhhhhhhhhhhh. .h..........h. .h.hhhhhhhhhh. .h.h.......... .h.h.dddddddd. .h.h.d......d. .h.h.d......d. .h.h.dddddd.d. .h.h......d.d. .h.hhh..ddd.d. .h..........d. .hhh........d. ...h........d. ...h........d. ..ch........d. ............d. .cddddddddddd. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..4........... .............. .4............ Level: elvis L*Bert Bricks: aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaccaaaaaa aaaaaaccaaaaaa aaaaa....aaaaa aaaaad..haaaaa aaaaaddhhaaaaa aaaaaddhhaaaaa aaaa..dh..aaaa aaa........aaa aaad..hd..haaa aaaddhhddhhaaa aaaddhhddhhaaa aa..dh..dh..aa a............a ad..hd..hd..ha addhhddhhddhha Bonus: g............g ..........0.0. .0..0......... ......44...... ..0...mm.0.... ...........0.. .............. .0.0.........0 .............. ...........0.. .............. ............0. 0............. .............0 .............. .............. .............. w............w Level: elvis pinball Bricks: ####.....##### ###..........# ##h..........# ##h.......##.# ##h......###.# ##h..d...#e#.# ##h..d...#.#.# ###......#.#.# ###.d......#.# ##..d......#.# ##......gg.#.# ##.d....gg.#.# ##.d....gg.#.# ##.........#.# ##........##.# ###.......#..# ####.....##..# ####cbabc##..# Bonus: .............. .............. ..4........... ..3........... ..2........... ..1.......5... ..0........... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Gatinha0000664000175000017500000012015512140767201014573 00000000000000Version: 1.00 Level: Vivian Gatinha 01 Bricks: ************** vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv .............. ************** .............. .............. .............. .............. .............. .............. .............. Bonus: .............. ?*b?l.?b.?bj?m ..bm......b..b ?mbj.bm.*.?.?b ..?.?..?.?...w b..b*?.m..*b.* .?w.....w...?. >>*?.b?.j.?>>> w****.jbbbbb.w .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: *v*v*v**v*v*v* vv.v.v..v.v.vv *..v.v..v.v..* vvvv.v..v.vvvv *....v..v....* vvvvvv..vvvvvv .............. vvvvv....vvvvv *...v.vv.v...* vvv.v.**.v.vvv ..v.v.**.v.v.. *.v.v.vv.v.v.* ..v.v....v.v.. vvv.v....v.vvv *...v....v...* vvvvv....vvvvv .............. .............. Bonus: m.bw.wllw.wb.m .............. *............* ...c......c... c............c .....c..c..... .............. ....c....c.... b............b ..c...bb...c.. ......bb...... j............j .............. ..c........c.. w............w c...c....c...c .............. .............. Level: Vivian Gatinha 01 Bricks: z*z!jz**zj!z*z z*zj!z**z!jz*z zcz!jz**zj!zcz z*zj!zccz!jz*z z*z!jz**zj!z*z z*zj!z**z!jz*z zcz!jz**zj!zcz z*zj!z**z!jz*z z*z!jzcczj!z*z z*zj!z**z!jz*z zcz!jz**zj!zcz z*zj!z**z!jz*z z*z!jz**zj!z*z v@vvvv@@vvvv@v zzzjjzzzzjjzzz .............. .............. .............. Bonus: ...>p....>m... ....b....b.... ...*......*... ....>....>.... ...w......w... ....b....b.... ...j......j... ....c....c.... ...l......l... ....w....w.... ..m..m..m..m.. .............. .............. .............. ...w+....+w... .............. .............. .............. Level: Vivian Gatinha 01 Bricks: z!z!z!z!z!z!z! !z!z!z!z!z!z!z z!zzz!zzz!z!z! !z!z!z!z!z!z!z z!zzz!zzz!z!z! !z!z!z!z!z!z!z z!zzz!zzz!zzz! !!!!!!!!!!!!!! ############## ************** ************** jjjjjj**jjjjjj zzzzzzzzzzzzzz .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. bbbbbbbbbbbbbb lmlmlmjmjmlmlm ......jj...... wbwbwbwbwbwbwb .............. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: @@@.......kkkk @@........k..k @............k @...j..j.....k ....j..j.....k ...jjjjjj..kkk ...jgjgjj.kkkk ..jjjjjjj.kkkk ..jjj!jjjkkkkk ..jjjjjjjkkkkk ...jjdjjkkkkkk ...jjdjjkkkkkk ...jjjjjkkkkkk ....kkkkkkkkkk ....kkkkk..k.k ....kkkkk..k.k .@@kk@@kk@kk@k .kkkk@kkk@kk@k Bonus: ..........>bbb ..........*..b .............b ....w..w...... .............. .............. ....w.w....... ...........+.. .....m....+..j ...p...p.+..j. .....*.......p .....*....+... .........+.... ......b.+...b. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: jjjjjjjjjjjjjj .............. .@##########@. .#j........j#. .#.@######@.#. .#.#j....j#.#. .#.#.@##@.#.#. .#.#.#..#.#.#. .#.#.#..#.#.#. .#.#.#..#.#.#. .#.#.#.*#.#.#. .#.#.#.@@.#.#. .#.#.#j..j#.#. .#.#.@####@.#. .#.#j......j#. .#.@########@. .#j..........j .############# Bonus: bbbwmbwmbwmjmb .............. .............. ..b........b.. .............. ....b....b.... .............. .............. .............. .............. .............. .............. ......b..b.... .............. ....b......b.. .............. ..b..........b .............. Level: Vivian Gatinha 01 Bricks: *....***....*c *.....v.....*c !!....v....!!c *!....v....!*c j!....v....!jc j*....v....*jc j!....v....!jc j!....v....!jc *!*!..v..!*!*c ***!..*..!***c jjj!..!..!jjjc jjj!..!..!jjjc jj*!*!!!*!*jjc jj****v****jjc jjjj!vvv!jjj*c jjjj!vvv!jjj*c ****@vvv@****c .............. Bonus: l.....j.....l? .............. md.........dm? .b.........b.. w>.........>w? w...........w. b...........b? b...........b. .mbp..g..pbm.? .............. ->>c..l..c>>-? -...........-. *..m.....m..*? ......*....... WW+s.....+Ws.? >w>>.....>>w.w .............. .............. Level: vivian Nao_sei Bricks: E#************ jj***#******** j@**j!j******* #.*c*.#c****** ..Ec*.@cE***** *j*.....#***** ..E#@.*.#c**** #..j#j..#cE*** #@..j##.@*#*** jz*..E@...!#** jz#@.*E*#*#E** jz*..*..@cE**j #@..E*.*#c***# ..***@.@E***E* ..Ejj#.##c*E** .####...##E*#* .............. .............. Bonus: .............. .....b........ .c...m........ ..&........... ....b......... mbm.....b..... ......*....... ....b...b..... ......j....... .m*.......mb.. .*cc.m........ .m*........... .............b .............. ...p....&.l... .pwc&...wc..w. .............. .............. Level: vivian Nao_sei Bricks: .hh.**.....jj. .hh...*...jjjj .hh...**..jjjj .......*...jj. .......@...... .......@...... ......kkk..... ......k!k..... ......kkk..... ...jjjjjjjjj.. ...jjcjcjcj... ....jjjjjjj... ggggjjjjjjgggg agaggggggggggg gaggggggaggaag ggggggagaggggg ggggaggggagaga gEEgEEEgEEEgEE Bonus: .p..j......bl. .............. ..........*... ............b. .............. .............. .............. .......m...... .............. ...b.......+.. .....b.b.b.... .............. &b..+jjjjj.... ...>......s..> ......b....... .b-.b.......b. ...*.*...*...* w..w...w...w.. Level: Vivian Gatinha 01 Bricks: ************** @!!!!!!!!!!!!@ !cczzzzzzzzcc! !c*zzzzzzzz*c! !z!zzE##Ezz!z! !zczz#**#zzcz! !z!zz!**!zz!z! !zczz#**#zzcz! !z!zz#**#zz!z! !zczz!**!zzcz! !z!zz#**#zz!z! !zczz#**#zzcz! !z!zzE##Ezz!z! !zczzzzzzzzcz! !z!zzzzzzzz!z! .............. .............. .............. Bonus: w.b.b.b.b.b..w .............. b.?Wp.m..pWb.b c...........Wc bb.m......m..b *...s.ll....w* b?..b>bb>bb..b **.w..bw.....* b...b.bb.bs.?b *W..b.wb.b..** b..b.jbbj....b **.>..jm..b.?* b..s}.......>b *?>jbffffb>.j* bwj?bjb+jb?jwb .............. .............. .............. Level: Vivian Gatinha 01 Bricks: ****c!c!c!c*** ****cvcvcvc*** ****c.c.c.c*** ****c.c.c.c*** ****c.c.c.EE** **EEE.E.E..E** **E...E.E..E** **E...E.EE.@E* **E.@EE..E..E* EE@.E....E..E* E...E....E@.EE E...E.....E... E..EE.....EE.. E..E.......E.. EjjEjjjjjjjEEj EjjEjjjjjjjjEj EjjEjjjjjjjjEj jjjjjjjjjjjjjj Bonus: jjjj.m.m.m.jjj jjjj.w.w.w.jjj jjjj.......jjj jjjj*.*.*.*jjj jjjjp.p.p...jj jj..........jj jj..........jj jj...........j jj...........j .............j .............. .............. .............. .............. .bb.bbbbbbb..b .c..c.c.c.c..c .............. w...w...w...w. Level: Vivian Gatinha 01 Bricks: @!..........!@ !!.zzz..zzz.!! ...z!z..z!z... ...zzz..zzz... ......!!...... !!....!!....!! @!....!!....!@ !!.zzz..zzz.!! ...z!z..z!z... ...zzz..zzz... .............. !!..........!! @!..........!@ !!..........!! .............. .............. .............. .............. Bonus: .f..........f. ff.*bw..wb*.ff ...?m>..>m?... ...!cj..jc!... ......bb...... ff....bb....ff .f....bb....f. ff.wb*..*bw.ff ...?m>..>m?... ...fff..fff... .............. ff..........ff .f..........f. ff..........ff .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: *@*@*@*@*@*@*@ z!z!z!z!z!z!z! *z*z*z*z*z*z*z z!z!z!z!z!z!z! *z*z*z*z*z*z*z z!z!z!z!z!z!z! *z*z*z*z*z*z*z z!z!z!z!z!z!z! *z*z*z*z*z*z*z z!z!z!z!z!z!z! *z*z*z*z*z*z*z z!z!z!z!z!z!z! *z*z*z*z*z*z*z z!z!z!z!z!z!z! *z*z*z*z*z*z*z .............. .............. .............. Bonus: m.m.m.m.m.m.m. j!}jsj.jpjm!b! ?}?s?.?p?m?b?* .............. .............. .............. ...........!.. .............. .p-!-b-*-w-b-. .!m!b!*!w!*!*. .m-b-*-w-?-b-. .>b>*>w>?>*>*. .bm*mwm?m?mbm. .!*!w!?!?!*!*. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: @............@ !.*z*z**z*z*.! !.E@E@EE@E@E.! !............! @............@ !............! !.y*y*yy*y*y.! !.@#@#@@#@#@.! !............! @............@ c............c c.*x*x**x*x*.c c.cccccccccc.c E............E .............. .............. .............. .............. Bonus: .............. j..b.bmmb.b..* m............p *............m .............. .............j ......!f...... .............. p............. .............. .............. ...s.w..w.s... ..>~>~>~>~>~.. .............. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: .............. .@!@..@!@..@!@ .!*!..!*!..!*! .!*!..@!@..!*! .@!@..vvv..!*! ..vv..@!!@.!*! ..@!@.!**!.!*! ..!*!.!**!.@!@ ..!*!.!**!.vvv ..!*!.@!!@.@!@ ..@!@..vvv.!*! ..vvv..@!@.!*! ..vvv..!*!.@!@ .@!!@..!*!.vvv .!**!..@!@.@!@ .!**!......!*! .@!!@......!*! ...........@!@ Bonus: .............. ..>....>....>. ..--..w*w...*. .w-w...?....l. ..?.........b. .......>>...b. ...>...gm..wbw ...bm.w}sw..?. ..wbw..-b..... ...b...??...>. ...?........*. ........>..w-w ........c...?. ..>>....>..... ........?...>. ..ww........w* ..??........w. ............?. Level: Vivian Gatinha 01 Bricks: jabcxy**yxcbaj jabcxyzzyxcbaj kjabcxyyxcbajk kjabcxyyxcbajk #kjabcxxcbajk# #kjabcxxcbajk# #.kjabccbajk.# @.kjabccbajk.@ @..kjabbajk..@ @*.kjabbajk.*@ @@..kjaajk..@@ @@*.kjaajk.*@@ @@@..kjjk..@@@ @@@*.kjjk.*@@@ @@@@..kk..@@@@ @@@@@.kk.@@@@@ .............. .............. Bonus: m***b*ll*b***m ms.!b*mm*b!.sm m>...b**b...>m m>?..b**b..?>m ..w..cbbc..w.. ...?.cbbc.?... ...w..jj..w... ....?....?.... ....w....w.... .>...?..?...>. .....w..w..... ..>...??...>.. ......ww...... ...>......>... .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: @..czz!!zzc..@ *..#zczccz#..* @..#zcczcz#..@ *..c!!zc!!c..* @..#zcczcz#..@ *..czczcczc..* @..#zz!!zz#..@ *..c##zz##c..* @..vvvvvvvv..@ *..vvvvvvvv..* @..vvvvvvvv..@ *..vvvvvvvv..* @..vvvvvvvv..@ .............. .............. .............. .............. .............. Bonus: ...*bcmmcb*... *...b....b...* ....b....b.... b..*p....p*..w ....l....l.... w..*mj..jm*..b ....ww..ww.... b..b......b..w ...>??<... w..&W-W!-W&..b ...sl....!}... b..g......5..w ...>...>..>... .............. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: ffffffffffffff ffffffhhffffff fffffhhhhfffff ffffhggghfffff fffhggggghffff ffhhgjjjghhfff ffhhjjgjjhhhff fhhhjgggghhhhf ffhhggggghhhff ffhhggjgghhfff fffhhggghhffff ffffhhghhfffff fffffhhhffffff ffffffffffffff @............@ .............. .............. .............. Bonus: mgbgbgbgbgbg!m !pWWmWmWmWWmp! !pm>f????f>Wp* *pW>f&mm&f*Wp! !jW>f?c!?f>WWb jm0>fjc!jf>0W! mW0>f?c!?f>0Wm !m0*f{{j{f*0*! bb0>f{j{{f>0Wj !b0*fwwwwf>0W! *b0>>>>*>>>0** !-+-bbbbbbb-+! !+j+mmmmmm-j-+ m-+-+-+-+-+-+m .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: !***a********! !............! zazzzazazaazze a..........zze a.zzazzzzz..za a.z.......z*ae a.z.zz***.z.ze a.z.z.***.a*ze a.z.z.***.z.ae a.z.z...*.z.ze a.z.zzzz*.z*ae a.z....zzzz.ze a.zzzz......ze a.zzzzzzzzzzza z.zzzazzzzzzze .............. .............. .............. Bonus: m....mmmmm...* m............* ?w.b.+5w+ww?p. b............. >..>wj5p....bw w.j.......>.ww p.j.}jj&..}.>. w.p.>..mb.!... w.j.*.5*5.b.wc w.>.......{.>. d.{.>.5*..>.ww j.?....&d4p.d. j.j&p........c j.fd.b.df>.bfw w.*smmmsmmms** .............. .............. .............. Level: Vivian Gatinha 01 Bricks: E*fhjde@djhf*E *gfhjde!djhfg* igEhjdezdjhf#i igfhjde!djhfgi igfhEdezdj#fgi igfhjde!djhfgi igfhjdez#jhfgi @gfhjde!djhfg@ igfhjd#zEjhfgi igfhjde!djhfgi igfh#dezdjEfgi igfhjde!djhf*i ig#hjdezdjhfEi *gfhjde!djhfgi #gfhjdezdjhfgi .............. .............. .............. Bonus: ...!d.....!... .m&......d.&m. ...c.g.b...c.. ....p.....p... w.W~...b.~...w ...>.ss.?..... *2.....b.d>W.* ....b~?.?..... s.W....b....&. .5.~?j...d?5.} }4.>.wwb...4.. w3..m.~..dm3.. .2..m..>..m2.w .1-.mff.ffm1-. .0+~m..>..m0+. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: dddddddddddddd dffffffffffffd d######fffff#d d#ffff#f###f#d d#ffff#f#g#f#d d#f##f#f#g#f#d d#f#hf#f#g#f#d d#f#hf#f#g#f#d d#f##f#f#g#f#d d#f#hf#f#g#f#d d#f#hf#f#g#f#d d#f####f#g#f#d d#ffffff#g#f#d d#ffffff#g#f#d d########g###d .............. .............. .............. Bonus: s......s.c.... ..*........*.p p............w .............. w...c....m...m .............m ....j........m ....m..s.m.... +....c...m.*.w m...m....m.... m...m..g.m.... W............W m.*........... w.....g......+ .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: daadaaadaaaaaa daadadadaaaada daadaaadaadaaa daadadadaadada ddadadadaddada adddadaaddaada addaadaaddaada addaadaaddaada addaadaaddaada aaaaaaaaaaaaaa aaaaaaaaaaaaaa .............. .............. .............. .............. .............. .............. .............. Bonus: lf.l..fl..5..f j..j.j.j.W..j. *W.p..5b..*..W .....*bc...... b?.?W?bm..?.b. 5.}..}b.g..b}5 .g&..gb...4... ..m...b.g&..&4 .g.4.gb4.p..m. b+.m+mmm+m+mmm w.smw.s.w..s.w .............. .............. .............. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: eeeeeeeEeeeee@ @*eeeeeeeeeeee .ceeeeeeeeeeee ..@eeeeeeeeeee ...c*eeeeeeeee ....@eeeeeeeee .....ceeeeeeee ......@*eeeeee .......ceeeeee ........@eeeeE .........ceeee ..........@*ee ...........cee ............@e .............. .............. .............. .............. Bonus: .mm.m.c....... ..mm.......... .wfm.j.p.l..b. ...mwwwwwww... ...w.bbbbb.c.. .....mmbbbbm.< .....wfmm..... ........ml.... .......wmmmm.. ...........m.. .........wfmm. ............m* ...........w+w .............+ .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: jjjjejjjejjjjj jjjjzjjjzjjjjj jjjejeeejejjjj jjejjjjjjejjjj jjejEjjEjejjjj jjejgjjjgejjjj jjejjg*gjejjjj jjjegjjjgejjjj jjjejdddjejjjj jjjejjdjejjjjj jjjjejjjejjjjj jjjjjeeejjjjjj .............. .............. .............. .............. .............. .............. Bonus: ????.???.????? !W.wgdWdgd...! ..1.W...wb.5.W f1mb....bb...f .}m..cc..b.{.. d}m..&&&.b...d .}m1.sms.b5{W! >w3..5...b...> !.b..jjj...{.f f3b...j..m.... ..<.pbbbpm..<5 c*c*.www.m*cc* .............. .............. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: ************** ************** *vvvvvvvvvvvv* *v**********v* *v**********v* *v*vvvvvvvv*v* *v*v******v*v* *v*v*vvvv*v*v* *v*v*!****v*v* *v*v*vvv**v*v* *v*v***vvvv*v* *v*v********v* *v*vvvvvvvvvv* *v*vvvvvvvvvv* vv************ .vvvvvvvvvvvvv .............. .............. Bonus: mmmmmmmmmmmmmm b.b.b.b.b.b..* .............. w.}..+..+..+.. .............. w............* .....l.....j.. w.p........... ....lm.c.c.... w............* ..p..l........ w...jjjjjjjj.. .............. w.p..........* ...w.w.w.w.*.. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: @hhhhh@@hhhhh@ g!#ffffffff#!g giiiiiiiiiiiig gEdEdE**EdEdEg gdjdjdjdjdjdjg gjdjdjdjdjdjdg ge#e@e##e@e#eg @xyzxyzzyxzyx@ cacacacacacaca bbbbbbbbbbbbbb acacacacacacac vvvvvvvvvvvvvv .............. .............. .............. .............. .............. .............. Bonus: .f---f..f---f. pg.!~~&&~~!.gp ?5>5>5>5>5>5>? ?.c.c.mm.c.c.? ?012345543210? ?012345543210? p}.{.}..{.}.{p .W*bW*bb*Wb*W. w!w!w!w!w!w!w! m>m>m>m>m>m>m> +-+-+-+-+-+-+- ?+w-cmwwmc-w+? .............. .............. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: !@!@!@!@!@!@!@ c*c*c*c*c*c*c* cfcgchcicjckce cfcgchcicjckce cfcgchcicjckce cfcgchcicjckce cfcgchcicjckce cfcgchcicjckce cfcgchcicjckce cfcgchcicjckce cfcgchcicjckce xxxxxxxxxxxxxx .............. .............. .............. .............. .............. .............. Bonus: >.>.>.>.>.>.>. -.-.-.-.-.-.-. -&-&-&-&-&-&-& sbsbsbsbsbsbsb jmjmjmjmjmjmjm {g{g{g{g{g{g{g ?p?p?p?p?p?p?p dbdbdbdbdbdbdb !c!c!c!c!c!c!c f*f*f*f*f*f*f* ?}?}?}?}?}?}?} wmwmwmwmwmwmwm .............. .............. .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: EggggggggggggE @ggg......ggg@ Egg..cccc..ggE Eg...cddc...gE @g...cddc...g@ Eg...cddc...gE Eg...cEEc...gE @g...chhc...g@ Eg...chhc...gE Eg...chhc...gE @g...cEEc...g@ Eg...cffc...gE Eg...cffc...gE @g...cffc...g@ gg...cccc...gg ......##...... ......##...... .............. Bonus: .pmmmmllmmmmp. .wg{......{gw. .!?..&jj&..?!. .5...-55-...5. .>...dbbd...>. .>...>mW>...>. .f...s..s...f. .w...>55>...w. .m...dbbd...!. .~...cWmc...~. .-...<..<...-. .?...d55d...?. .+...*bb*...+. .w...?mW?...w. ww...w!!w...ww .............. .............. .............. Level: Vivian Gatinha 01 Bricks: jjjjjjjjjjjajj jjajajjjjjajaj jjajajjjjjjjja jjaaajjjjjjjja jahahajaaaajja jaa@aaaaaaajaj jjadaaaaaaajaj jjjajaaaaaaajj jjjjjaaaaaaajj jjjjjaaaaaaajj jjjaaajjaaaajj jjaajjjjjaajjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj .............. .............. .............. .............. Bonus: +ffffffffffff- +>*b*llllb.b.- +>wbwW&wcbbbb- +>wbwW&jcw!..- +>.m.W&jcw!s.- }>...W-jcw!s.? }>...W-jcw!s.? }>{.gW-.cw!sb? }>..gW-..w..b? }>{.gW++++++b? ?>{..W......b? ?>{..Wwww...b? ?>ww{{{{{mmmm? ?------------? .............. .............. .............. .............. Level: Vivian Gatinha 01 Bricks: gggggggggggggg gggggggggggggg ggghhghhgggggg ggghhghhghhggg ggghhgggghhggg ggggghhhghhggg gggghhhhhggggg gggghhhhhggggg gggghhhhhggggg ggghhhhhhggggg ggghhhhhhggggg ggghhhhhgggggg gggggggggggggg ************** ************** ************** ************** ************** Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. mmmmmmmmmmmmmm dddddddddddddd bbbbbbbbbbbbbb wwwwwwwwwwwwww 00000000000000 Level: vivian untitled Bricks: .............. .............. .!.!......!.!. ..*........*.. .!.!......!@!. ..@........@.x ..@..xxxx..@xx ..@.xx..xxxxxy yy@xx!.!.xx!.. xxxx..*...!!!. ...x.!@!.!!*!! .!.xx.@...!!!. !*!.x.@....!.. .!..xy@....@.. .@...xxx...@.. .@.xxxyyxxx@.. y@yxy.....xxx. xxxyy.....yyxx Bonus: .............. .............. .f.f......f.f. ..b........b.. .f.f......f.f. .............. .....bbb...... .....p..mm.... .p...-.-...!.. bbb*..b...d?!. ...*.-.-.!!m~! .!.*......{Wd. !*!........!.. .!............ .............. ...www........ .............. ...w.......... Level: vivian untitled Bricks: x*xj*j*jj*j*j* x*x#*#*#@*@*@j x*x#*#*#@*@*** x*x#*#*#@*@@@j x*x#*#*#@***** x*x#*#*#@@@@@j x*x#*#*#*!*!*! x*x#*#*#!!*!*! x*x#*#*#***!*! ####*#*#!!!!*! *****#*#*****! ######*#!!!!!! *******#zzzzzz ########cccccc .............. .............. .............. .............. Bonus: .b.......m.m.b .b............ .b...........b .b............ mb...........b mb............ wb.......m...m wb......jw...w wbj..........j .............. .............. .............. .............. ........w..... .............. .............. .............. .............. Level: vivian untitled Bricks: gggfgggggggggg ggfffghhggjjjg gjfffghhgjjjjj gjfffghhggjjjj ggfffggggggggg ggfffggggggggg ggg@gggggggggg eeeeeeeeeeeeee eeejjeeeeeeeee eeejjeeeeejeee jjjjjjjjjjjjjj gjjjjjjjjjjjgj ggjjggggjjjggj gggggggggjgggj gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg Bonus: mmwbbwpbbb.5ms .mbmbmpp.bsm.m wjbm5pw.pbmm.. .wbmpms.mmm5j. wbbbbw5ppbb?sm w?bbb5m.spm..s wmbpb+mp+bp5+m bppmwppmmbp+++ pwpbmb++mpm.s+ bbpj+mb+bmj+5s bbbjpmbppmmm++ pbbbbbppbjpm.b .wwbwwbbmmmm.b m.m.mmjmm..... bbbbbbjbmmmbbb jjjjjjjbbbbbmm ppppppjppppppp wwwwwwjwwwwwww Level: noname fff Bricks: *#*#*#*#*#*#*# *#*#*#*#*#*#*# *#*#*#*#*#*#*# !@!@!@!@!@!@!# .............. .............. j!j!j!j!j!j!j! @*@*@*@*@*@*@* #*#*#*#*#*#*#* @*@*@*@*@*@*@* .............. j!j!j!j!j!j!j! @*@*@*@*@*@*@* #*#*#*#*#*#*#* @*@*@*@*@*@*@* jvjvjvjvjvjvjv .............. .............. Bonus: .............. .............. .............. p.*.m.m.m.*.p. .............. .............. .b.j.+.}.c.b.b .............. .............. .>.>.>.>.>.>.. .............. .w.w.w.w.w.w.w .............. .............. .............. .............. .............. .............. Level: noname fff Bricks: .............. !************* .............* jjjjjjjjjjjj.* #E#E#E#E#E#@.* jjjjjjjjjjjj.* .............* ************** *............. *.jjjjjjjjjjjj *.@#E#E#E#E#E# *.jjjjjjjjjjjj *............. *............. ************** .............. .............. zzzzzzzzzzzzzz Bonus: .............. mbbbbbbbbbbbbb .............b .............b .............b .............b .............b bbbbbbbbbbbbbb b............. b............. b............. b............. b............. b............. bbbbbbbbbbbbbb .............. .............. >>bbbwwwbbb>>> Level: noname Glabi Bricks: !jhhhhhhhhhhz! zjvv*vvv*vvv.z .j*v*v*v*v*v.* .jvv*vvv*vvv.* ..fffffffffffj ..vvv*vvv*vvvj *.v*v*v*v*v*vj ..vvv*vvv*vvvj ..gggggggggggj ..jvvv*vvv.vvv .*jv*v*v*v.v*v ..jvvv*vvv.vvv ..dddddddddddj ..vvv*vvv*vvvj *.v*v*v*v*v*vj ..vvv*vvv*vvvj .............. E............E Bonus: m............m .bbb.bbb.bbb.. .............. .???.???.???.. .............. ..***.***.***. .............. ..???.???..... .............. ...b>W.jjj.sss .............. .......???.... .............. ..>>>.lll.???. .............. ..+w+.+w+.+w+. .............. .............. Level: noname Glabi Bricks: ************** ************** ************** ************** ************** *****!!!****** *****!!!****** *****!*!****** *****!*!****** *****!!!****** *****!!!****** ************** ************** ************** ************** ************** zzzzzzzzzzzzzz vvvvvvvvvvvvvv Bonus: ************** mmmmmmmmmmmmmm pppppppppppppp ************** mmmmmmmmmmmmmm bbbbbgggbbbbbb bbbbbgggbbbbbb bbbbbgjgbbbbbb fjfjfgjgfjfjff fffffgggffffff fjfjfgggfjfjff ffffffffffffff *j*j*f*f*j*j*f fbfbfbfbfbfbfb >f>f>f>f>f>f>f fcfcfcfcfcfcfc jjjjjjwjjjjjjj bbbbbbbbbbbbbb Level: noname r Bricks: !.......!*!.!* *!.....!*z*!*! !*!...!*z.z*!. .!*!.!*z.!!z*! ..!*!*z.!*!.z* ...!*z.!*!.!*z ..!*z.!*!.!*z* .!*z.!*!.!*z.! !*z.!*!.!*z.!* *z.!*!.!*z.!*z z*!*!.!*z.!*z* .!*!.!*z.!*z*z .!!.!*z.!*z*z* ...!*z.!*z*z*z ..!*z.!*z*z*z* .!*z.!*z*z*z*z !*z.!*z*z*z*z* *z.!*z*z*z*z*z Bonus: m.......m.w.m. .......b...b.w b............. .w............ .............. .............. ......p....... .....p........ ....p......... .............. .............. ...........*.. ..........*... .........*.b.. ........*.b.w. .......*.b.w.. ......*.b.w... .....*.b.w.... Level: noname Glabi Bricks: !...!.vk.j.k.j .*.*..vk.j.k.j ..!.!.vk.j.k.j !...!.vk.j.k.j .*.*..vk.j.k.j ..!.!.vk.j.k.j .*.*..vk.j.k.j !...!.cccccccc .*.*...bbbbbbb ..!.!...aaaaaa .*.*.....ccccc !...!.....bbbb .*.*.......aaa ..!.!.....bbbb .*.*.....ccccc !...!...aaaaaa .*.*...bbbbbbb ..!.!.cccccccc Bonus: j.....pW.f.m.m ......W*.f.f.W ....j.WW.f.f.p ......WW.*.f.l ......&*.f.w.l ..g...&W.f.f.l .*....WW.f.f.W j.....p.wbbbb> ...w.....wdddd ..g.j...bbbbbb ...........>cc ..........&&&m ...........{{{ ..*.......fffw ..........wWWW *.......>>>g>> .w......*.>>.* ......ffffffff Level: noname Glabi Bricks: zzzzzzzzzzzzzz z************z z*cccccccccc*z z*czzzzzzzzc*z z*cz******zc*z z*cz*zzzz*zc*z z*cz*#!!#*zc*z z*cz*#!!#*zc*z z*cz*!!!!*zc*z z*cz*#!!#*zc*z z*cz*#**#*zc*z z*cz*####*zc*z z*cz*zzzz*zc*z z*cz******zc*z z*czzzzzzzzc*z z*cccccccccc*z z************z zzzzzzzzzzzzzz Bonus: bbbbbbbbbbbbbb ffffffffffffff ffffffffffffff fffbbbbbbbbfff ffff......ffff ffff.bbbb.ffff ffff..!!..ffff ffff..m*..ffff ffff.!pl!.ffff ffff..ws..ffff ffff......ffff ffff......ffff ffff.!jj!.ffff ffff......ffff ffffffffffffff ffffffffffffff ffffffffffffff wwwwwwwwwwwwww Level: noname Glabi Bricks: z************z *############* *#z********z#* *#*########*#* *#*#z****z#*#* *#*#*####*#*#* z#z#z#zz#z#z#z *#*#*#yy#*#*#* *#*#*#xx#*#*#* *#*#*#zz#*#*#* z#z#z#yy#z#z#z *#*#*#xx#*#*#* *#*#*#zz#*#*#* *#*#*#yy#*#*#* *#*#*#xx#*#*#* *#*#*#vv#*#*#* c@c@c@cc@c@c@c vvvvvvvvvvvvvv Bonus: *?00?>ww>?00?* 0m..........m0 0b*0?llll?0*b0 0b0b......b0b0 0b0b*?pp?*b0b0 wb0b0b..b0b0bw bbbbbbmmbbbbbb 0b?b0bjjb!b0b0 +b+b+bggb+b+b+ 0b0b0b*jb0b0b0 >*>*>bggb>*>*> !b0b0bj*b0b0b! 0bdb0bggb0bdb0 0b0b0b*jb0b0b0 bbbbbbggbbbbbb 0b0b0bjjb0b0b0 0b0b0bggb0b0b0 w>w>w>wfw>w>w> Level: noname untitled Bricks: .j**********j. .@E#E#..#E#E@. .E****!!****E. .#*!!!!!!!!*#. .E*!******!*E. .#*!*!!!!*!*#. .E*!*!**!*!*E. .@!!!!**!!!!@. .E*!*!!!!*!*E. .#*!******!*#. .E*!!!!!!!!*E. .#**********#. .E#E#E##E#E#E. .@kkkkkkkkkk@. .@jjjjjjjjjj@. ..kkkkkkkkkk.. ...jjjjjjjj... .............. Bonus: .m..........m. .jjjjj..jjjjj. .j*...++....j. .j.bbb++bbb.j. .j.p......p.j. .j.p......p.j. .j..........j. .j...?..?...j. .jwwwwwwwwwwj. .jbbbbbbbbbbj. .jmmmmmmmmmmj. .jppppppppppj. .jpppppjppppj. .>>>??????c>>. .>bbbbbbbbbb>. ..bbbbwwbbbb.. ...bbbbbbbb... .............. Level: i untitled Bricks: *********.zzzz @@@.###**.zzzz @!!!!!#**..##z @!@@@!#****##z @!@!@!.*****#z @!@@@!#*****#z @!!!!!#v.***#z #######v.**##z vvvvvv.v.**##z .......v.**##z ******.v.*###z ******.v.####z ******.v#####z .......######z vvvvv########z ......******.. ************** ************** Bonus: ..........m*p. ..........m*p. .mmmmm........ .m...m........ .m.m.m........ .m...m........ .mmmmm.b...... .......b...... bbbbbb.b...... .......b...ccc .......b..**** .......b.ppppp .......bbbbbbb .......wwwwwww wwwwwmmmmmmmm. .............. .............. .............. Level: noname untitled Bricks: ************** vvvvvvvvvvvvvv **!!!!!!!!!!** zzzzzzzzzzzzzz ************** vv!!!!!!!!!!vv ************** vv!!!!!!!!!!vv ************** vv!!!!!!!!!!vv ************** vv!!!!!!!!!!vv ************** vvvvvvvvvvvvvv v*vvv*vv*vvv*v vvvvvvvvvvvvvv ************** zzzzzzzzzzzzzz Bonus: m.m.b.b.p.p..m .............. .............m .............. .........j...m .............. .............m .............. ...*.........m .............. .............m .............. .............b bbbbbbbbbbbbbb bwbbbbbbwbbbbb bbbbbbbbbbbbbb wwwwwwwwwwwwww .*.*.*.*.*.*.. Level: noname untitled Bricks: *E*#*#******** #@##E#EE#E##@* ************** *@##E#EE#E##@# ************** #@##E#EE#E##@* ************** *@##E#EE#E##@# ************** #@##E#EE#E##@* ************** *@##E#EE#E##@# ************** #@##E#EE#E##@* ************** *@##E#EE#E##@# *************z #@##E#EE#E###z Bonus: j.mmmwwmmmmjjj .............j gggggggg>jjjjj }............. bbbbbbwbbbbbbb .............> ppppppwppppppp }............. ------w------- .............} >bbbbbwbbbbbbb b............. ******w******* .............} ++++++w+++++>+ }............. l>llllwlllllll .............w Level: noname untitled Bricks: ************** *zzzzzzzzzzzz* !!!!!!!!!!!!!! *zzzzzzzzzzzz* ************** *zzzzzzzzzzzz* !!!!!!!!!!!!!! *zzzzzzzzzzzz* ************** *zzzzzzzzzzzz* !!!!!!!!!!!!!! *zzzzzzzzzzzz* ************** *zzzzzzzzzzzz* !!!!!!!!!!!!!! *zzzzzzzzzzzz* ************** zzzzzzzzzzzzzz Bonus: bbbbbbjmbbbbbb .mmmmmmmmmmmm. bbbbbb.jbbbbbb .mmmmmmmmmmmm. bbbbbbj.bbbbbb .!d!d!d!d!d!d. .......j...... .d!d!d!d!d!d!. bbbbbb..bbbbbb .ffffffffffff. .......j...... .ffffffffffff. bbbb.bj.bbbbbb .ffffffffffff. .......j...... .ffffffffffff. bbbbbbjbbbbbbb .............. Level: noname untitled Bricks: ************** zzzzzzzzzzzzzz zzzzzzzzzzzzzz z*z*z*z*z*z*z* *!*!*!*!*!*!*! z!z!z!z!z!z!z! z*z*z*z*z*z*z* *z*z*z*z*z*z*z !z!z!z!z!z!z!z !*!*!*!*!*!*!* *z*z*z*z*z*z*z zzzzzzzzzzzzzz z*z*z*z*z*z*z* *!*!*!*!*!*!*! z!z!z!z!z!z!z! *z*z*z*z*z*z*z z*z*z*z*z*z*z* z!z!z!z!z!z!z! Bonus: jjjjjjjjjjjjjj ************** .............. bbbbbb........ ......jbbbbbbb .............. bbbbbb........ ......jbbbbbbb .............. bbbbbb........ ......jbbbbbbb .............. bbbbbb........ ......jbbbbbbb .............. bbbbbbj....... .......bbbbbbb .............. Level: noname untitled Bricks: gggggggggggggg g*aaaaaaaaaa*g gaggggggggggag gag*aaaaaa*gag gagaggggggagag gagagzzzzgagag gagagz!!zgagag gagagzzzzgagag gagaggggggagag gag*aaaaaa*gag gaggggggggggag g*aaaaaaaaaa*g gggggggggggggg zzzzzzzzzzzzzz ************** zzzzzzzzzzzzzz ************** zzzzzzzzzzzzzz Bonus: b...b..b.b...b .............. b.b........b.b ..b........b.. *.b........b.* ..b..*ppm..b.. .cb..bllb.cb.. ..b..mww*..b.. w.b........b.w ..b...j....b.. ..b........b.. ....wbwbwbw... .............. f*c*f*c*f*c*f* .............. .............. .............. .............. Level: noname untitled Bricks: !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! Bonus: m333333333333m l3l3l3l3l3l3l3 >>>>>>>>>>>>>> >>>>>>j>>>>>>> llllllllllllll llllll*lllllll bbblgbbbbbbbb* *3>3g3g3g3>3*3 3*3g3gWg3g3g3g b}b}b}*}b}b}b} }}}}}}}}}}}}}} -p-p-{-{-{-{-{ p-p-p-{-{-{-{- f+f+f+f+f+f+f+ sWsWsWsWsWsWsW gsgsgsgsgsgsgs {}{}{}{}{}{}{} -------------- Level: noname untitled Bricks: c************c c!!!!!!!!!!!!c c************c c!!!!!!!!!!!!c c************c c!!!!!!!!!!!!c c************c c!!!!!!!!!!!!c c************c c!!!!!!!!!!!!c c************c c!!!!!!!!!!!!c c************c c!!!!!!!!!!!!c c************c c!!!!!!!!!!!!c c************c czzzzzzzzzzzzc Bonus: >jjjjjjjjjjjj> l************l >bbbbbbjbbbbb> .............. >bbbbbjbbbbbb> .............. >bbbbbbjbbbbb> .............. >bbbbbjbbbbbb> .............. >bbbbbbjbbbbb> .............. >bbbbbjbbbbbb> .............. >bbbbbbjbbbbb> .............. >bbbbbjbbbbbb> .............. Level: noname untitled Bricks: *j*j*j**j*j*j* j.j.j.jj.j.j.j j!.!.!..!.!.!j j*j*j*jj*j*j*j j............j *j*j*j**j*j*j* j............j j.*.*.**.*.*.j jc!c!c!!c!c!cj j.c.c.cc.c.c.j j............j j.*.*.**.*.*.j j.j.j.jj.j.j.j .............. .............. .............. .............. .............. Bonus: *b?.?.j?.?.?b* .............. .....b..b..... .?.?.?..?.?.?. .............. ?.?.?.c?.?.?.? .............. w.?.w.??.w.?.w *..b.*...b*... .............* *............* w.?.?.??.?.?.w ..>.>....>.>.. .............. .............. .............. .............. .............. Level: noname untitled Bricks: *!..........!* !!.********.!! .............. @..********..@ .............. zzEEEEEEEEEEzz vvv********vvv !!!!!!!!!!!!!! .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: mb..........bm bb.jjjjcjjj.bb .............. ...jjjcjjjj... .............. ww..........ww .*..........*. ....&.*.*..... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: j..kkkkkkkkkkk .j............ !.j....j...j!! *..j....j...j* j@..j....j..Ej E...@j....j..@ !!j..Ej....j!! *j....@j....j* jE.....Ej....j @....j.v@j.... ....jE.vvEj... ...j@v..vv@j.. !!jEvv...vvEj* *j@vv.....vv@j jEvv.......vvE @vv.........vv vv............ .............. Bonus: *..bwb*bwb*bwm .............. .......b...>.. ............>m >........b...l .............. ...........b.. .......w.....m *............. .....c........ .............. .............. ..w........... .j...........m p............. .............. .............. .............. Level: noname untitled Bricks: *..*..*..*.*.* *.....*......* EEEEEEEEEE#..* #.........*..* *.*.*.*.*.*..* *.........*..# *..#EEEEEEEEE# *..*......*..# *..*......*..# #..*.*..*.*..* #E.*......#..* #EEEEEEEEE#..* ......*......* ......*.*.*..* ......*......# .cccc##EEEEEEE .............. .............. Bonus: l..m..m..m.m.j l.....w......j .............* *.........j..b w.m.m.m.m.b..> j.........*..* b............. b..*......w..b b..j......w..b w..w.m..m.*..s s..s......s..b .............b ......w......b ......w.m.m..b ......w......> .............. .............. .............. Level: noname untitled Bricks: ************** ************** ************** ************** ****#***#***** ***#!#*#!#**** ****#***#***** ************** ******a******* ******a******* *****aaa****** ************** ************** ************** ****aaaaa***** ************** ************** ************** Bonus: mmmmmmmmmmmmmm wwwwwwwwwwwwww bbbbbbbbbbbbbb .............. .............. ....l...l..... .............. .............. .............. .............. .............. .............. .............. .............. ....jjjjj..... .............. .............. .............. Level: noname untitled Bricks: .kkkkk..kkkkk. k............k ..!!!....!!!.. ..!*!....!*!.. ..!*!....!*!.. ..!!!.ee.!!!.. ......ee...... ......ee...... .....eeee..... .....eeee..... .....ehhe..... .............. .............. ..d.dddddd.d.. ...djjjjjjd... ....dddddd.... .............. .............. Bonus: ....bb..bb.... .............. .............. ...m......*... .............. ......p....... .............. .............. .............. .............. ......jj...... .............. .............. .............. ....ww..ww.... .............. .............. .............. Level: noname untitled Bricks: !************! !............! !............! vzzzzzzzzzzzzv !vvvvvvvvvvvv! !............! vzzzzzzzzzzzzv !............! !vvvvvvvvvvvv! vzzzzzzzzzzzzv !............! vccccccccccccv !............! vzzzzzzzzzzzzv .............. .............. .............. .............. Bonus: bmbmbmjmbmbmbb p............p b............b w.....p......w .c..b...m..b.. .............. .............. .............. .....***....c. b............b .............. .............. .............. .wwww.....www. .............. .............. .............. .............. Level: noname untitled Bricks: *v!.*.!.*.!v*v v!.*.!.*.!.*v! !.*.!.*.!.*.!v .*.!.*.!.*.!.* *.!.*.!.*.*.!. .!.*.!.*.!.*.! !.*.!.*.*.!.*. .*.!.*.!.*.!.* *.!.*.!.!.*.!. .!.*.!.*.!.*.! !.*.!.*.*.!.*. .*.!.*#.#*.!.* *.!.*##.##*.!. .!.*##...##*.! !.*##.....##*. .*##.......##* *##.........## @............@ Bonus: mjb...*...wjcm jb...*.p....j. b...*.......wj .......b...... .............. .......l.....w .............. .......p...... .............. .......b...... c............. .....w!.!w.... ....w!!.!!w... ....!!...!!..* ...!!.....!!.. ..!!.......!!. .!!.........!! !............! Level: noname untitled Bricks: !v#z@#**#@z#v! !v#z@!**!@z#v! !v#z@#EE#@z#v! !v#z@@@@@@z#v! !v#zzzzzzzz#v! !v##########v! !vvvvvvvvvvvv! !!!!!!!!!!!!!! .............. @............@ *............* @............@ *............* @............@ *............* @............@ .............. .............. Bonus: f>.b..ll..b.>f f>.b..ll..b.>f f..b......b..f f..m......m..f f..mmwjjwmm..f f............f f............f ffffffffffffff .............. .............. m............m .............. b............b .............. w............w .............. .............. .............. Level: noname untitled Bricks: #*#*@...c.c*** #*#*#...c.c*** #*#*#...c.c*** #*#*#..@###### #.#.#..c.c.*** #c#c#..c.c.*** #c#c#..c.c.*** #c#c#..c.c.*** #c@c#..@###### .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .m.m....b.b>>m .>.>....*.w>>> .w.w....w.b>>> .p.p.......... .......b.b.>>m .b.*...*.*.>>> .w.w...b.w.>>> .*.b...w.b.>>> .w.w.......... .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: !.!.!.!.!.!.!. .*.*.*.*.*.*.* !.!.!.!.!.!.!. .............. .!...!..!...!. !*!.!*!!*!.!*! .!...!..!...!. ...*......*... .............. !!!.!!!!!!.!!! v*v.v*vv*v.v*v vvv.vvvvvv.vvv ccc.cccccc.ccc .............. .............. .............. .............. .............. Bonus: *...b.m...b.*. .............. ....w...l.w... .............. .............. b.....j......b .............. .............. .............. &............& .............. .............s .w.....>...... .............. .............. .............. .............. .............. Level: noname untitled Bricks: ......!!...... *...*.**.*...* .!.!..!!..!.!. ..*...**...*.. .!.!..!!..!.!. *...*.**.*...* ......!!...... ......**...... cccccccccccccc *!*!*!*!*!*!*! zczczczzczczcz .............. .............. .............. .............. .............. .............. .............. Bonus: ......bb...... .............. .m..........m. .............. ...*......*... .............. ......jj...... .............. wsp..w..w...sw .............. b>b>bwbbwb>b>b .............. .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: ****..##..**** ***@z....z@*** ***@!....!@*** ***@!....!@*** ***@!....!@*** ***@!....!@*** z@@@!....!@*** !!!!!....!@*** !!!!!....!@*** !!!!!....!@*** !!!!!....!@@@@ !!!!!....!!!!! .............. .............. .............. .............. .............. .............. Bonus: bbbb.......bwm www........bwm mmm.>....f.bwm jjj.>....f.bwm ....>....f.bwm ....>....f.bwm ....c....f.bwm m**mc....f.bwm wwwwc....f.bwm bb.......f...j .........f.... .........fffff .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: *yzvzy**yzvzy* yyzvzyyyyzvzyy zzzvzzzzzzvzzz vvvvvvvvvvvvvv vvv@vvvvvv@vvv vvvv*vvvv*vvvv zzzv!*vv*!vzzz yyzvv!**!vvzyy *yzvvv!!vvvzy* yyzvv!**!vvzyy zzzv!*vv*!vzzz vvvv*vvvv*vvvv ***@vvvvvv@*** ***#jjjjjj#*** ####jjjjjj#### .............. .............. .............. Bonus: l..*..ll..*..l .*.*.*..*.*.*. ..b*b....b*b.. ****??????**** m??.jjjjjj.??m fff-cffffc-fff ..b-..!!..-b.. .*.-?....?-.*. l..-?j..j?-..l .*.-?.>>.?-.*. ..b-..cc..-b.. !!!-*>>>>*-!!! +sw.ffffff.+sw jjj..b.b.b.jjj ....w.w.w..... .............. .............. .............. Level: noname untitled Bricks: ........@..... !!!!!!!....... !*****!...!!!. !*!!!*!...!*!. !*!*!*!...!!!. !*!!!*!....... !*****!....... !!!!!!!......@ .............. @............. .......!!!!!!! .......!*****! .!!!...!*!!!*! .!*!...!*!*!*! .!!!...!*!!!*! .......!*****! .......!!!!!!! .............. Bonus: .............. *b....b....... ..........b.m. ..bbb......l.. ...l......fff. .............. .............. ffffff*....... .............. .............. .......*b....* .............b ..*b.....www.. ..l.......l... .fff...w.....w .......w.....w .......fffffff .............. Level: noname untitled Bricks: jjjjjjjjjjjjjj ************** jjjjjjjjjjjjjj ************** !!!!!!!!!!!!!! ************** !!!!!!!!!!!!!! ************** !!!!!!!!!!!!!! ************** !!!!!!!!!!!!!! ************** !!!!!!!!!!!!!! ************** !!!!!!!!!!!!!! zzzzzzzzzzzzzz .............. .............. Bonus: bwbmbmbjbwbwbw .............. ffffffffffffff b............. .............. .............b .............. b............. .............. .............b .............. b............. .............. .............b ......w....... .............. .............. .............. Level: noname untitled Bricks: f.*.j..d.i.**. .f.j*.d!..i..g *.f..d..*..ig. .j.fd.*!*.*gi. j..df.*!..g..i j.d..f.!.g..i. .d.**!f.g..i.. d.j.*!!f..i.!* !d.j.!g.fi!.!* !.d.jg..if*.!* *..dgj.i.!f.!* *..gd.i.**.f.. .*g!.i.j..*.f. .g.!i.d.j....f g*.i...d.j..f. ..i!***!d.jf.. .i..***!.dfj.. i........fd.j. Bonus: b...*......... .b.*.......... ..b.........*. .*.b.......... *...b......... .....b......b. ......w....... .....*.w..b... ...m....w..... *....m...w.... .......m..w.*. ....w.b....... .*...b........ .............. ............*. ..f.......f... .f.........f.. f...........f. Level: vivian untitled Bricks: gggggggggggggg gggggggggggggg ggghhghhgggggg ggghhghhghhggg ggghhgggghhggg ggggghhhghhggg gggghhhhhggggg gggghhhhhggggg gggghhhhhggggg ggghhhhhhggggg ggghhhhhhggggg ggghhhhhgggggg gggggggggggggg ************** ************** ************** ************** ************** Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. mmmmmmmmmmmmmm dddddddddddddd bbbbbbbbbbbbbb wwwwwwwwwwwwww 00000000000000 Level: vivian untitled Bricks: .............. .............. .!.!......!.!. ..*........*.. .!.!......!@!. ..@........@.x ..@..xxxx..@xx ..@.xx..xxxxxy yy@xx!.!.xx!.. xxxx..*...!!!. ...x.!@!.!!*!! .!.xx.@...!!!. !*!.x.@....!.. .!..xy@....@.. .@...xxx...@.. .@.xxxyyxxx@.. y@yxy.....xxx. xxxyy.....yyxx Bonus: .............. .............. .f.f......f.f. ..b........b.. .f.f......f.f. .............. .....bbb...... .....p..mm.... .p...-.-...!.. bbb*..b...d?!. ...*.-.-.!!m~! .!.*......{Wd. !*!........!.. .!............ .............. ...www........ .............. ...w.......... Level: vivian untitled Bricks: x*xj*j*jj*j*j* x*x#*#*#@*@*@j x*x#*#*#@*@*** x*x#*#*#@*@@@j x*x#*#*#@***** x*x#*#*#@@@@@j x*x#*#*#*!*!*! x*x#*#*#!!*!*! x*x#*#*#***!*! ####*#*#!!!!*! *****#*#*****! ######*#!!!!!! *******#zzzzzz ########cccccc .............. .............. .............. .............. Bonus: .b.......m.m.b .b............ .b...........b .b............ mb...........b mb............ wb.......m...m wb......jw...w wbj..........j .............. .............. .............. .............. ........w..... .............. .............. .............. .............. Level: vivian untitled Bricks: gggfgggggggggg ggfffghhggjjjg gjfffghhgjjjjj gjfffghhggjjjj ggfffggggggggg ggfffggggggggg ggg@gggggggggg eeeeeeeeeeeeee eeejjeeeeeeeee eeejjeeeeejeee jjjjjjjjjjjjjj gjjjjjjjjjjjgj ggjjggggjjjggj gggggggggjgggj gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg Bonus: mmwbbwpbbb.5ms .mbmbmpp.bsm.m wjbm5pw.pbmm.. .wbmpms.mmm5j. wbbbbw5ppbb?sm w?bbb5m.spm..s wmbpb+mp+bp5+m bppmwppmmbp+++ pwpbmb++mpm.s+ bbpj+mb+bmj+5s bbbjpmbppmmm++ pbbbbbppbjpm.b .wwbwwbbmmmm.b m.m.mmjmm..... bbbbbbjbmmmbbb jjjjjjjbbbbbmm ppppppjppppppp wwwwwwjwwwwwww lbreakout2-2.6.5/client/levels/TheGauntlet0000664000175000017500000001000312140767201015432 00000000000000Level: Lourens Barriers (warmup) Bricks: ############## ############## ############## ############## ############## ############## ############## .............. .dd...ff...gg. .dd...ff...gg. .jj...ii...hh. .jj...ii...hh. .............. ccjjccjjccjjcc .............. .............. .............. jccccccccccccc Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .>............ ......+....b.. .+............ .......>....j. .............. ..>..1.>.1..3. .............. .............. .............. >>+....b..+... Level: Lourens Speedy clearance Bricks: j###.###j.j##j ####.####.#### #jjj.#jj#.#jj# ###j.####.#### j###.###j.###j jjj#.#jjj.#jjj ####.#jjj.#### ###j.#jjj.j##. jjjj.jjjj.jjj. jEEj.#EEj.#EE. #EE#.#EE#.#EE. #jj#.#jj#.###. ####.#jj#.###. ###j.#jj#.j#j. #jjj.#jj#.jjj. ####.####.j#j. j##j.###j.j#j. cccccccccccccc Bonus: ..........*... .............. .m............ .............. .............. b*....b.....b. .............. ...b..m....... .m.........m.. .............. .............. ......m....... .............. .......b...... .*b........... .............. .............. ...+>+cc+>+... Level: Lourens Frostbite Bricks: ############## ############## ############## ############## ############## ############## ############## ############## ############## gjjjggjjggjjjg cjjjjjjjjjjjjj cjjjjjjjjjjjjj jj..jjj.jj.jjj j....j..jj..jj j....j..j....j j.......j....j j............. j............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. ff>.f+>f+f>>ff {.f.+.f.+>{f>{ ff>+.f>{ff.fff .>..>f>..+..>f f.......>...+. >....f..f....f +............> f............. +............. Level: Lourens Well protected goodies Bricks: jdehfgidehfgij cccccccccccccc .............. .............. v##v#v##v#v##v .............. .............. cccccccccccccc jjjjjjjjjjjjjj ************** jjjjjjjjjjjjjj jcjcjcjcjcjcjc cjcjcjcjcjcjcj jcjcjcjcjcjcjc .............. .............. .............. .............. Bonus: j543210012345j b.b.b.b.b.b.b. .............. .............. .............. .............. .............. .............. ~c~d>-cfcf>dcc .............. ddc--dc-c--f>> f.>.c.>.~.f.>. .c.f.~.f.c.~.c ~.>.c.c.~.>.f. .............. .............. .............. .............. Level: Lourens Faster, Faster! Bricks: .............. .............. @@.@@@..@@.@@@ @..@.@.@....@. @@.@@@..@...@. @..@.@...@..@. @..@.@.@@...@. .............. EE.EEE..EE.EEE E..E.E.E....E. EE.EEE..E...E. E..E.E...E..E. E..E.E.EE...E. .............. .............. ############## cccccchhcccccc cccccccccccccc Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. 5.w.>+..+>.w.5 +>44++>>++44>+ Level: Lourens Kept in the dark Bricks: jv..v.jj.v...j .v.v....vv..v. .v...vvvv.vv.. v...v........v v.......vvv..v .v.v.v.....v.v ..v....vv..... .v..v...v...v. vvv..v...vv.v. ..vv.......... ..vv..v.v.v..v v.v..v..vv..vv v...v......... .v........vvv. .vv..vvvv.v... bbaaabbbbaaabb dddddddddddddd ************** Bonus: .d..d....d.... .d.d....dd..d. .d...-ddd.dd.. d...d........d d.......d-d..f .d.f.d.....d.d ..d....dd..... .d..d...f...d. -dd..d...dd.d. ..fd.......... ..fd..d.d.d..- d.d..-..dd..dd d...d......... .d........dfd. .dd..d-dd.d... >>>>>>>>>>>>>> dddddddddddddd .............. Level: Lourens Killer Bricks: hhhhhhhhhhhhhh ************** hhhhhhhhhhhhhh ************** .............. ####.####.#### .............. .............. .@#@##@@##@#@. .............. .............. #*###@##@###*# *a@aa#aa#aa@a* cc#*a#**#a*#cc .............. .............. ##b##b##b##b## @@.@@.@@.@@.@@ Bonus: 55555555555555 .............. 55555555555555 .............. .............. .............. .............. .............. .............. .............. .............. .>.>......>.>. >..>......>..> ...>..>>..>... .............. .............. ..{..{..{..{.. .............. lbreakout2-2.6.5/client/levels/Chaos0000664000175000017500000001674112140767201014262 00000000000000Version: 1.01 Level: Bjoern Ganslandt Breakthrough Bricks: *h*h*h**h*h*h* h*h*h*hh*h*h*h *h*h*h**h*h*h* ##h*h*hh*h*h## g##h*h**h*h##g gg##h*hh*h##gg fgg##h**h##ggf ffgg##vv##ggff hffgg#vv#ggffh hhffggggggffhh ehhffffffffhhe eeeeeeeeeeeeee eeeeeeeeeeeeee .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............p ........0..... m..........c.. ....w......... .............. ...+.....<..1. .?...c........ .............. .............. .............. .............. .............. .............. Level: Bjoern Ganslandt Jump a lot Bricks: .............. .............. .fffffffffffff .iiiiiiiiiiiii .............. .............. #############. .............. .............. .############# .............. .............. #############. .............. .............. iii########### .............. .............. Bonus: .............. .............. ......c....... .2.2.w.2.2f2.2 .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ++............ .............. .............. Level: Bjoern Ganslandt Icy Bricks: jjjjjjjjjjjjjj jj.jjj.jjjjjjj jj.jjj.jjjj.jj j..jjj.jjjj..j j..jjj.jjjj..j j..jjj.jjjj... j..jjj.jjjj... j..jj..jjjj... j..jj..jjjj... ....j..jjj.... ....j..jjj.... ....j..jjj.... ....j...jj.... ....j...jj.... ....j...jj.... ........j..... ........j..... ........j..... Bonus: ff.f...f..f.f. ....f....l...f ff.ff.....m.ff .....f..f....f f...f..ff..... ...f.....0f... 0....0..f..... ...ff..f..f... f...l...df.... ....2..f...... ........ff.... .........f.... ....f...f..... .........f.... ........f..... ........f..... ........f..... .............. Level: Bjoern Ganslandt Rock solid Bricks: .............. .c.....c...... .#.....#...... ....c....c.... ....#....#..c. .c..........#. .#.....c...... .....c.#....c. .....#......#. ...c.......... .c.#..c..c.... .#....#..#.... .....c.......c .....#..c....# .c......#..c.. .#.........#.. .............. .............. Bonus: .............. .2.....c...... .............. .............. ............+. .............. .......2...... .............. .............. ...s.......... .........2.... .............. .............. .............. ...........f.. .............. .............. .............. Level: Bjoern Ganslandt Bricks: @............@ d@g........g@d dd@g......g@dd ddd@g....g@ddd dddd@ghhg@dddd cdddd@hh@ddddc gcddddhhddddcg .gcdddhhdddcg. ..gcddhhddcg.. ...gcdhhdcg... ....gchhcg.... .....ghhg..... .............. .............. .............. .............. .............. .............. Bonus: .............. .............. ..........w... ?.p.........?. .......f...... .............. ....?......... .+............ ...........+.. ...-.......... .............. .....+........ .............. .............. .............. .............. .............. .............. Level: Bjoern Ganslandt Tux Bricks: .....aaa...... ....aaaaa..... ....aaaaaa.... ...aaaaaaa.... ...ajjaajj.... ...ajjaajj.... ...aj.aaj..... ...aj.aaj..... ...aaaaaaa.... ...aeeeeee.... ...aeeeeeee... ...aeaeeeee... ...aeeaaaa.... ..aajeeeee.... ..aajjeeeja... .aaajjjjjjaa.. aaajjjjjjjjaa. aaajjjjjjjjaa. Bonus: .............. ......m....... .............. ....-......... .............. .......j...... .............. .............. .............. .............. ...?.......... ......+...w... .............. ...0.......... .......1.~.... .............. ....c......... .-.......f.... Level: Bjoern Ganslandt Maze Bricks: hh#.....#..... ..#..gg.#..h.. ..#..gg.#.hhh. ..#.....#.hhh. ..#..#..#.hhh. .##..#..#..h.. .....#..#..... .....#..####.. .ee..#.....#.. .ee..#..dd.#.. .....#..dd.#.. .....#.....#.. ###.!####cc#.. .f#....#...#.. .f#....#...#.. ..#..###...#.. ..#....#...#.. .##....#...#.. Bonus: m............. .....-........ ...........2.. ...........2.. ...........2.. .............. .............. .............. .............. ..+......f.... ........l..... .............. .........?c... .b............ .............. .............. .............. .............. Level: Bjoern Ganslandt Invisible Bricks: .v..........v. .v..........v. .vvvvvvvvvvvv. .............. .............. .vvvvvvvvvvvv. .............. .............. .............. ..v........v.. .vvvvvvvvvvvv. ..v........v.. vv..........vv .vvv.....vvv.. v.v.v...v.v.v. vv.vvv.vvv.vvv v...v...v...v. .............. Bonus: .............. .g..........b. ......22...... .............. .............. .............. .............. .............. .............. .............. ......f....... ..m........<.. .............p .c............ ..........d... }...+...+..... ........-...w. .............. Level: Bjoern Ganslandt CPU-eater Bricks: ************** *!!!!!**!!!!!* *!....**....!* *!.!******!.!* *!.!*!!!!*!.!* *!.!*!..!*!.!* *!.!*!..!*!.!* *!.!*!..!*!.!* *!.!*!..!*!.!* *!.!*!..!*!.!* *!.!*!..!*!.!* *!.!*!..!*!.!* *!.!*!..!*!.!* *!.!*hhhh*!.!* *!.!*hhhh*!.!* *!.!*hhhh*!.!* ************** .............. Bonus: .............. .?..........?. .............. .?..........?. .............. .?..........?. .............. .?..........?. .............. .?..........?. .............. .?..........?. .............. .?..........?. ......33...... .?..........?. .............. .............. Level: Bjoern Ganslandt Waltz Bricks: .............. ......aa...... aa...jaaj..aa. aa.a..aa...aa. aa....a....aa. ajjjjjajjjjajj a.....a....a.. a.....a....a.. ajjjjjaajjjajj a..........a.. a..........a.. jjjjjjjjjjjajj .............. .............. jjjjjjjjjjjjjj .............. .............. jjjjjjjjjjjjjj Bonus: .............. .............. ......p....... -..3.......... ............?. .............. m.....-....... .............. ...........~.. .............. .............. b....+..>..... .............. .............. ..w.d...j.-c.. .............. .............. -.<...f.-..... Level: Bjoern Ganslandt Do not move! Bricks: .............. ..E.....d..... ..E........... **E........... *dE.........f. eeE........... hhE........... ffE........... ggE....g...... EEE.........e. .............. .............. ..E........... .............. .............. EE....EEEEEEEE .............. .............. Bonus: .............. ........1..... .............. .............. ............1. .............. .............. .............. .......1...... ............j. .............. .............. .............. .............. .............. .............. .............. .............. Level: Bjoern Ganslandt Symmetry Bricks: !!!!!!@@!!!!!! ......@@...... ......@@...... ......@@...... ......@@...... ......@@...... ..cc..@@..cc.. ..cc..@@..cc.. ......@@...... ......@@...... ......@@...... ......@@...... ......@@...... ......@@...... .....@@@@..... .EEEEEEEEEEEE. .EzzEzEEzEzzE. .E..E....E..E. Bonus: 000000..000000 .............. .............. .............. .............. .............. ..+*......*+.. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..c..f..f..c.. .............. Level: Bjoern Ganslandt Multiball Bricks: zzzzzzzzzzzzzz yEyyyyyyyyyyEy zEzzzzzzzzzzEz xExxxxxxxxxxEx zEzzzzzzzzzzEz yEyyyyyyyyyyEy zEzEEEEEEEEzEz xExExxxxxxExEx zEzEzzzzzzEzEz !E!!!!!!!!!!E! zEEEEEEEEEEEEz !!!!!!!!!!!!!! fccccccccccccf fccccccccccccf fccccccccccccf fccccccccccccf fccccccccccccf ffffffffffffff Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. bbbbbbbbbbbbbb wwwwwwwwwwwwww b00000000000bb bbbbbbbbbbbbbb bbbbbbbbbbbbbb &&&&&&&&&&&&&& wwwwwwwwwwwwww lbreakout2-2.6.5/client/levels/N_Snapshots0000664000175000017500000001341612140767201015460 00000000000000Version: 1.00 Level: Michael Speck Chinese Bricks: .............. .............. .............. ffffffffffffff ffffffffffffff gggggggggggggg gggggggggggggg jbbbbbbbbbbbbj jbjjjjjjjjjjbj jbjjjjjjjjjjbj jbbbbbbbbbbbbj dddddddddddddd dddddddddddddd eeeeeeeeeeeeee eeeeeeeeeeeeee .............. .............. .............. Bonus: .............. .............. .............. ?......-.....? ....+.....>... ..p.....b..... .....~.....+.. ...s....j.b.w. .*1323232323.. ..3232323231*. .w...j....s... .......~...+.. ....b.....p... ..b...+.>..... ?...-........? .............. .............. .............. Level: Michael Speck Spearhead Bricks: .............. .............. .............. jjjj.......... kkkkkk........ aaaaaaaa...... kkkkkkkkkk.... jjjjjjjjjjjj.. #####....zzzzz #####....zzzzz kkkkkkkkkkkk.. jjjjjjjjjj.... aaaaaaaa...... jjjjjj........ kkkk.......... .............. .............. .............. Bonus: .............. .............. .............. .2.-.......... .+............ 2.w2b..+...... .-....2..~.... .p.*.}..s..c.. .........44444 .........44444 p..*...}s.~... .2...2-..+.... ..b2w..d...... .-.+.......... 2............. .............. .............. .............. Level: Michael Speck Fortress Bricks: .............. .............. .............. .............. .............. ..E##zzzz##E.. .kE@..gg..@Ek. kkE.iiiiii.Ekk kkEgiggggigEkk kkEgiggggigEkk kkE.iiiiii.Ekk .kE@..gg..@Ek. ..E##zzzz##E.. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .....f>.f..... .p..........p. ?...3....3...+ .b...34.3..... .....3.43...b. +...3....3...? .p..........p. .....f.>f..... .............. .............. .............. .............. .............. Level: Michael Speck Soccer Worldcup Bricks: .............. .............. ffffffffffffff ffffffffffffff ffffffffffffff jjjffffffffjjj ffjffffffffjff ffjfffjjfffjff jfjffjffjffjfj jfjffjffjffjfj ffjfffjjfffjff ffjffffffffjff jjjffffffffjjj ffffffffffffff ffffffffffffff ffffffffffffff .............. .............. Bonus: .............. .............. >...+.bb.+...> ..b..-..-..b.. .............. 11>........>11 .f1..b..b..1.. ..1...33...1.. ?.1..3553..1.? ?.1..3553..1.? ..1...33...1.. ..1..b..b..1f. 11>........>11 .............. ..b..-..-..b.. >...+.bb.+...> .............. .............. Level: Michael Speck Construction Time Bricks: .............. .............. .............. ..!..!kk!..!.. .....*kk*..... .gggggggggggg. .ffhhhhhhhhff. .*fh*dddd*hf*. .@!h@!ee!@h!@. .@!h@!ee!@h!@. .*fh*dddd*hf*. .ffhhhhhhhhff. .gggggggggggg. .....*kk*..... ..!..!kk!..!.. .............. .............. .............. Bonus: .............. .............. ..b..c..+..0+. .0.0...3.3.... ..s........0.. .............. .............. .....4..4.>... ..w..b.m...p.. ..p...g.b..w.. .....4..4..... .............. .............. ..0>.......s.. ....3.3...0.0. .+0..+..b..c.. .............. .............. Level: Michael Speck Four Seasons Bricks: .............. .............. hhhh......eeee hhhh......eeee hhhh......eeee hhhh......eeee hhhh......eeee hhhh......eeee .............. .............. ffff......jjjj ffff......jjjj ffff......jjjj ffff......jjjj ffff......jjjj ffff......jjjj .............. .............. Bonus: .............. .............. +..b.......2.4 3.s.......4{.. .3.2......f.*. ?.-........b.? ...}......c.3. .p........2pjb .............. .............. bjp2........p. .3.d......}... ?.b........-.? .*.f......2.3. ..{4.......s.3 4.2.......b..+ .............. .............. Level: Michael Speck Hidden Obstacles Bricks: .............. .............. .............. .............. .v#eeeeeeee#v. ..e#......#e.. ..eg#vvvv#ge.. ..egf....fge.. ..egf.dd.fge.. ..egf.dd.fge.. ..egf....fge.. ..eg#vvvv#ge.. ..e#......#e.. .v#eeeeeeee#v. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ...00000000... .............. .....4444..... ..+?......?b.. ...?b.pp.-?... ...?-.pp.b?... ..b?......?+.. .....4444..... .............. ...00000000... .............. .............. .............. .............. Level: Michael Speck Oh, Deer! Bricks: .............. .............. .d..e....e..d. .e..d....d..e. .#..#....#..#. .a..i....i..a. .g..a....a..g. .a..i....i..a. .g..a....a..g. .a..i....i..a. .g..a....a..g. .a..i....i..a. .g..a....a..g. .#..#....#..#. .h..d....d..h. .d..h....h..d. .............. .............. Bonus: .............. .............. .p..p....p..p. .p..p....p..p. .............. ....5....5.... .4..........4. ....5....5.... .4..b....b..j. ....5....5.... .j..b....b..4. ....5....5.... .4..........4. .............. .p..p....p..p. .p..p....p..p. .............. .............. Level: Michael Speck Pipes Bricks: .............. .............. .j..!..!..###. .j..#dd#..#gg. .jj.#dd#..#g.. .jj.####...... .##........... .f#*.###.*.##. .f#!.!.!.!.#e. .f#.!.!.!.!#e. .##.*.###.*#e. ...........##. ......####.jj. ..g#..#hh#.jj. .gg#..#hh#..j. .###..!..!..j. .............. .............. Bonus: .............. .............. .f............ .3....b....*>. ..f..+.....d.. ..3........... .............. .3............ .5..?2?2?2?.3. .3.?2?2?2?..5. ............3. .............. ...........3.. ..c.....+..f.. .>*....b....3. ............f. .............. .............. Level: Michael Speck Collect Your Reward! Bricks: .............. .............. .x..........x. .............. ...z.z..z.z... .............. .x..........x. ...z.z..z.z... .............. .............. ...z.z..z.z... .x..........x. .............. ...z.z..z.z... .............. .x..........x. .............. .............. Bonus: .............. .............. .b..........b. .............. ...5.5..5.5... .............. .b..........b. ...5.5..5.5... .............. .............. ...5.5..5.5... .b..........b. .............. ...5.5..5.5... .............. .b..........b. .............. .............. lbreakout2-2.6.5/client/levels/Freek0000664000175000017500000005335712140767201014265 00000000000000Level: Corrado Corrado[2] Bricks: ....dddddddd.. ...d..ddd..d.. ..d....d....d. ..d....d....d. ..d.........d. ..d.........d. ..d.........d. ...d.......dd. ...d.......d.. ...d.......d.. ...d.......d.. ....d.....dd.. ....d.....dd.. .....d....d... .....d....d... .....dd..d.... ......dd.d.... .......dd..... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Corrado Corrado[2] Bricks: ...f#y....#x.. ...f#yd...#x.. v.gf#y....#xd. v.gf#yd...#xd. vigf#y#.a.#xde .igf#yd.a.#xde .igf#*d.a.#xde .igf#.d.a.#xde .igf#.d.a.#xde .igf#...a.#xde .ig.#...a.#*de .ig.#.....#vde .i..#.....#.ve .i..#.!.!.#.*e ....#..!..#..v .............. .............. .............. Bonus: ...{.......... ...b.b........ ..f..p........ .....b........ ...m.......w.. .............. ............>m ..bb.......... .{bb..-.l..<<. ........-....p ........-....p .bg........d+. .............. .+....4.4..... .......4.....+ .............. .............. .............. Level: Freek Corrado[1] Bricks: bbbbbb........ bbbbb...a..... bbbb...aaa.... iii.....a..... ii..........dd i..ddd....!aaa ..jjjd...!@@@@ .hhhjd..!@@@@@ ...hjd..@@@@@@ ....jd.....ggi aax..d.....ggi *####......ggi #####......ggi ......v..v.ggi ...........ggi .............. .............. .............. Bonus: d.55.......... .mg.....?..... .......???.... pp......?..... .............d .....l.....??. .............. ....m......... .....>........ .............w W..........*.. .............. ............?. ......>..f...< ...........l.. .............. .............. .............. Level: Freek Corrado[3] Bricks: ffff........e. .ffff....dddee ..ffff....ddee ..aaaaa...ddee ...aaa....ddee !..##.....d..e .!............ ..!......!@@@@ ....aaaaa..d*. .....bbbbbzd.. ###*..yyyyz@.. !#...**...z@.* *#.vEEEE!vz@.. .#..........*. .............. .............. .............. .............. Bonus: .g.b........*. ..w.?....b.w.. ....??........ ..mm......f... .............. .............m .............. ..p........... ....c..j...... .....++.l..... .........W.... ..........!... .........!w... ............-. .............. .............. .............. .............. Level: Freek untitled Bricks: fffff....fffff dddd*...g..... dddd...g..z.z. dddd..g...zzz* .....g......*. ....g......... ...kkkk*!!.... ..bbbbbbb!!... aaaaaaaaaa!!.. .............. ......dddd.... @@@j.xxxxxx.j. ...jjjjjjjjjj. .............. .............. ....v....hh.h. .............. .............. Bonus: p.p......&&b.. .w>>.......... ..>>...d....d. mcc........... .....b........ .............. ...2233445.... ..11.-j.jb.... 00-..j.g-..... .............. .............. .....f..~.f... ....l..}....~. .............. .............. ....<....+.... .............. .............. Level: Corrado Corrado[4] Bricks: jjjjj......... j***.yyyxx**.. jjjj.yxxxx.... jjfffyyyyycccc jjfz.###..!!!c hhh.dddd..cccc hhhh..zd.ccccc hhhhh.....eee. hvvv.......ze. hhh.EEEEEE.... ..........ii.. ...bbbbb.iii.. ....bbbb..zi.. .........**i.. a.....dddd*... **aa.....**... .............. .............. Bonus: m...*......... .....?b.3b.j.. .?3........... ....+.dl..b.m. ?.!W.........1 ...........1.. pm.+.......... ...........--. ...........-.. m.m........... ...........w.. .....f.!..?... ....}.w....... ...........s.. ......<..+.... ..}......+.... .............. .............. Level: Freek untitled Bricks: ffffffffffffff gggggggggggggg hhhhhhhhhhhhhh #####.*####### ....#vd#...... ccc!#..#xxxxxx !ccc#..#xxEE.. ccc.#dv#...... ccc.#..#...... ....#.d#!!.... kkkk....yyyyyy kkkk.v..yyyyyy ....aaaa...... ee.xxxxxx.dddd .............. .............. .............. .............. Bonus: .m...??..m...b ...........m.. *}.!.g..f.b... .............. ......p....... j+pb.....+.-.p j4.d.......... .44..?........ d............. ......?....... .-.~....f.c.>> ..{.....c..-.. .............. -..<<...s...w. .............. .............. .............. .............. Level: Freek untitled Bricks: !v.!.....!kkdd ....vkkkkkkkdd ycc..kkkkkkkdd ggigggggkkkkdd fhiiiiiiikkkdd fhhhhhhhikkkdd fffffffhhhkkdd ffffffffhhkkdd aaaaaaffhhkkdd aaaaaafffffkdd aaaaaafffffkdd aaaavyyyfffkdd aaa...!.fffkdd ##...@@@kkkk## .............. .............. .............. .............. Bonus: ...........-~. ....2.+....... m......?.?..m. .~.d.f..p.+..4 2...?.p..2.l4. ..p.........+. -4.-.b~+2.?... ...W.......b.p +..c<..d.f<.W. .W...2.W.4.... .4b........-.c ...?.....c.... ..<.....-..... ..........w... .............. .............. .............. .............. Level: Freek untitled Bricks: *!*hhggv!..... e!*hhgg*!..... e!*hhgg*!..... @@@@@@@@@@vvvv kkkkkkkkkkkkkk yyykkkkkkkkkkk hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh *........*kkkk *!..!zzkkkkkkk EEiiizzz....EE iiizziiiiiiiii iiiiiiiiiiiiii jjjjjjjjjjjjjj jjj........jjj .............. .............. Bonus: .-.m.......... .....-........ .............. .............. ....f......... .m.5........f. ...55.-.22.-.> ..*..*...2...> .............. ............m. .........l.... ..jj.ddd...... .??...>g<.l.<. ..?........... bb..p.-WW}..++ bbw........Wbb .............. .............. Level: Freek untitled Bricks: .............. .............. ...!.a...aa... aa...#a..##... ##....#....... ...a....a..... ..a#a.!.#a.... ii#.#....#a... iiiiii....#eee iiiiii.ieeeeee gggggiiieeeeee gggggii.eeeeee gggggii....**e *gggg.!v!.*... g*ggg......... ggggg......... .............. .............. Bonus: .............. .............. .....f...W~... f>....>....... .............. ...~....W..... ..~.>....f.... .-........c... ?p.?2-........ .-..2.......m. 555.2l1.0000.. ......1.j..... ..w.?.1....... .............. ......... .......>...... .............. .............. .............. .............. .............. .............. .............. .............. Level: Freek untitled Bricks: **.**..**.**.. *..*.*.*..*... **.**..**.**.. *..**..*..*... *..*.*.**.**.. .............. **********.*.* .........*.*.* .........*.**. .........*.*.* ***.*..*.*.*.* *...**.*.*.... ***.**.*.***** *...*.**...... ***.*.**.***.. .........*..*. .........*..*. .........***.. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ggg.g..g...... g...gg.g...... ggg.gg.g...... g...g.gg...... ggg.g.gg.ggg.. .........g..g. .........g..g. .........ggg.. Level: Freek Bricks: czczczczczczcz hijfhjffjhfjih hijfhjffjhfjih hijfhjffjhfjih hijfhjffjhfjih hijfhjffjhfjih hijfhjffjhfjih hijfhjffjhfjih hijfhjffjhfjih hijfhjffjhfjih hijfhjffjhfjih hijfhjffjhfjih hijfhjjjjhfjih hijfhhhhhhfjih hijffffffffjih hijjjjjjjjjjih hiiiiiiiiiiiih hhhhhhhhhhhhhh Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. bbmbbdmdbbmbbb +w+w+w+w+w+w+w g}g5g}g5g}g5g} bbbdbbbmbbbdbb +d+w+d+w+d+w+d w+w+w+w+w+w+w+ Level: Freek Bricks: .............. .............. .............. ************** ************** .............. .............. vvvvvv.vvvvvvv .............. .............. .............. vvvvv.vvvvvvvv .............. .............. .............. vvvvvvv.vvvvvv .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ?????.???????? .............. .............. .............. +<+>+>+.+>+s<< .............. .............. Level: Freek Bricks: .............j .............j .............j .............j .............j g............j g............j g...b........j g...b........j g...b......... aaaab..ccc.... ....b..g...... ....b..g...... ....baag...... .......g...... .......g...... .............. .............. Bonus: .............* .............* .............* .............* .............* *............* *............W *...*........W *...*........W *...*......... WWWW*..WWW.... ....*..W...... ....*..W...... ....WWWW...... .......W...... .......W...... .............. .............. Level: Freek Bricks: .............. .............. ...i......i... ..iji....iji.. .ijjji..ijjji. .ij.jjiijj.ji. .ij..jiij..ji. .ij...jj...ji. .ij........ji. ..ij......ji.. ..ij......ji.. ..ij......ji.. ..iij....jii.. ...ijj..jji... ....ijjjji.... .....ijji..... .....iiii..... ......ii...... Bonus: .............. .............. ...w......w... ..jjj....jjj.. .>ssss..ssss>. .>?.??????.?>. .>0..0000..0>. .++...00...++. .!!........!!. ..&&......&&.. ..~~......~~.. ..cc......cc.. ..>ll....ll>.. ...000..000... ....------.... .....bbbb..... .....gggg..... ......++...... Level: Freek Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. aaaaaaaaaaaaaa aaaaaaaaaaaaaa *a*a*a*a*a*a*a E*E*E*E*E*E*E* cccccccccccccc cccccccccccccc cccccccccccccc aaaaaaaaaaaaaa Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .-.~.-.~.-.~.- !>!>!>!>!>!>!> .!.!.!.!.!.!.! .............. .............. .............. wbwbwbwbwbwbwb Level: Freek Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. ......v....... .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Freek Bricks: .............. ...eeeeee..... ..eeeeeeeee... .ee....eeeee.. ee........eee. ...........ee. ...........ee. ...........e.. ..........ee.. ......eeeee... ......eeee.... ......ee...... ......e....... .............. .............. ......e....... .....eee...... .....eee...... Bonus: .............. ...??????..... ..?????????... .??....?????.. ??........???. ...........??. ...........??. ...........?.. ..........??.. ......?????... ......????.... ......??...... ......?....... .............. .............. ......?....... .....???...... .....???...... Level: Bricks: ........j..d.. .............. .j............ ..d........... .............. ..g..........g ..........j... ........d..... g........g.... ...j..j.g....g j.........j... ..d........... ..........g... .............. .....j.....j.g .........j...g ...d.......... .............. Bonus: ........d..*.. .............. .d............ ..*........... .............. ..d..........* ..........d... ........d..... *........d.... ...*..d.d....* d.........*... ..d........... ..........*... .............. .....d.....d.d .........d...* ...*.......... .............. Level: Bricks: ..j.d.jj.d.j.. .............. .d..j.dd.j..d. .d..j.dd.j..d. .............. .............. jj.dd.jj.dd.jj jj.dd.jj.dd.jj .............. .............. dd.jj.dd.jj.dd dd.jj.dd.jj.dd dd.jj.dd.jj.dd .............. .............. .............. .............. .............. Bonus: ..<.~....W.j.. .............. ......+f...... ......f+...... .............. .............. s.....s.....s. .l.....l.....l .............. .............. .............. >-.>-.>-.>-.>- .............. .............. .............. .............. .............. .............. Level: Bricks: #E##cbabcbabc@ #EEExyyzyyxxyj .............. .............. ************** kkkkkkkkkkkkkk .e.e.e.e.e.e.e .............. ..........kkkk ..........kkkk ..........kkkk ..........kkkk .E#@zh....kkkk .E#@zh........ .............. .............. .............. .............. Bonus: ....+...+...+. .......+.....+ .............. .............. !j.!.f.!.f.!.j .............. .............. .............. ..........pwpw ..........!!!! ..........ppwp ..........wppw ..........pwpp .............. .............. .............. .............. .............. Level: Bricks: .............. .............. .............. ...jk......... ..jkjkjkjk...k kjk..jkjkjk.kj jk........jkj. ...........j.. .............. .............. .............. ...........*e* *e*......e*e*e e*e*...*e*e... ...e*e*e*..... ....e*e....... .............. .............. Bonus: .............. .............. .............. ...gw......... ..*b*b*b*w...w +g+..g+g+g+.+g *w........*b*. ...........g.. .............. .............. .............. ...........fdf fdf......df>~- >~-f...fdf>~..... ....-~-....... .............. .............. Level: Bricks: .*.***.***.*** .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .*.*.*.*.*.*.* .***.***.***.* Bonus: ...-........>. .............. .>...>...>...> .............. ...>.......-.. .......-...... ...........>.. .-...-........ .............. .............> .......-...-.. .............. ...-.....-...- .>.>.>.-.....> .......>...... .........>.... .............. ..........>... Level: Bricks: ************** .............. dddddddddddddd .............. @.@.@.@.@.@.@. .............. ************** .............. dddddddddddddd dddddddddddddd .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. 5.5.5.5.5.5.5. .............. .............. .............. -l.-l.-l.-l.-l .............. bf.bf.bf.bf.bf .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Bricks: .............. h.e.h.e.h.e.h. vhvhvhvhvhvhvh e.h.e.h.e.h.e. .............. .............. .............. .............. dddddddddddddd ************** igigigigigigig gigigigigigigi .............. .............. ************** zzzzzzzzzzzzzz jjjjjjjjjjjjjj .............. Bonus: .............. ..f...<...d... .............. w...>...g...b. .............. .............. .............. .............. -..-..-..-..-. .............. .............. .............. .............. .............. .............. ...+.....+.... +.....+.....+. .............. Level: Bricks: .............. .............. .............. .............. .............. .............. .ccc.....aaaaa c*c*c....a*a*a c*c*c....a*a*a ccccc....aaaaa cc*ccc....a*a. *ccc*c...aaaaa c*c*cc..aa***a cc*cc...a*aaa* .ccc....aaa.aa .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .000.....5.5.5 0w0b0.....s.f. 0+0+0....5-5-5 00000.....5.5. 00+000.....-.. +000+0....5.5. 0b0p00...5f~s5 00+00...5-5.5- .000.....5...5 .............. .............. .............. Level: Bricks: .............. .............. ........hhh... ........h*h... ........h*h... .........*.... .....eee.*.... .....e*e.*.... .ggg.e*e.*.... .g*g..*..*.iii .g*g..*....i*i ..*...*....i*i ..*...*.....*. ..*.........*. ..*.........*. ..*.........*. .............. .............. Bonus: .............. .............. ........fff... ........flf... ........fff... .............. .....~~~...... .....~l~...... .---.~~~...... .-l-.......jjj .---.......jlj ...........jjj .............. .............. .............. .............. .............. .............. Level: Bricks: dddddddddddddd dddddddddddddd ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** .............. .............. .............. .............. .............. Bonus: >>>>>>>>>>>>>> !!!!!!!!!!!!!! -------------- wwwwwwwwwwwwww ++++++++++++++ llllllllllllll wwwwwwwwwwwwww ++++++++++++++ pppppppppppppp mmmmmmmmmmmmmm llllllllllllll ++++++++++++++ ++++++++++++++ .............. .............. .............. .............. .............. Level: Bricks: jfkfjf..fyfkfj jfkfyf..fjfkfj jfkfjf..fyfkfj jfkfyf..fjfkfj jfkfjf..fyfkfj jfkfyf..fjfkfj jfkfjf..fyfkfj jfkfyf..fjfkfj jfkfjf..fyfkfj jfkfyf..fjfkfj jfkfjf..fyfkfj jfkfyf..fjfkfj jfkfjf..fyfkfj jfkfyf..fjfkfj jfkfjf..fyfkfj jfkfyf..fjfkfj jfkfjf..fyfkfj ######..###### Bonus: ..m.*>.....m.s p..b....>*.... .5............ .c........bm.. ....*...w*..cs p..b....>...c. ..m..>....b... .c..*w.....m5s pw......>..... .....>...*b.5. ..mb........5. pw..*.......5s ...b......bmw. .5...>......w. p.mb.w...*b.c. ....*........s .....>..>..... .............. Level: Bricks: .............. .............. .............. .************. .*iiiiiiiiii*. .*ihhhhhhhhi*. .*ihiiiiiihi*. .*i!!hh!!!hi*. .*ihi!iih!hi*. .*ih!hii!ihi*. .*i!!!hh!ihi*. .*ihiiiiiihi*. .*ihhhhhhhhi*. .*iiiiiiiiii*. .************. .............. .............. .............. Bonus: .............. .............. .............. .344141444434. .240330020030. .42?..?..?.42. .43.?..?..?42. .41........34. .41?..?..?.21. .31........34. .03..?..?..34. .34......?.33. .03.?..?..?01. .141144414101. .040004000001. .............. .............. .............. Level: Bricks: ############## ############## ############## ############## ##j.j.jk.k.k## ##j.j.jk.k.k## ##.j.jkjk.k.## ##.j.jkjk.k.## ##j.j.jk.k.k## ##j.j.jk.k.k## ##.j.jkjk.k.## ##.j.jkjk.k.## ##j.j.jk.k.k## ##j.j.jk.k.k## ##..........## ##..........## ##..........## ##..........## Bonus: .............. .............. .............. .............. .............. .............. ..........-... .............. ....+.j....j.. ..>........<.. .......>...... .....-........ ..j...<....... .........+.... .............. .............. .............. .............. Level: Bricks: .............. zzzzzzzzzzzzzz z************z z*yyyyyyyyyy*z z*yyyyyyyyyy*z z*yy******yy*z z*yy*xxxx*yy*z z*yy*xxxx*yy*z z*yy*x**x*yy*z z*yy*x**x*yy*z z*yy*xxxx*yy*z z*yy*xxxx*yy*z z*yy******yy*z z*yyyyyyyyyy*z z*yyyyyyyyyy*z z************z zzzzzzzzzzzzzz .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .l.}......?... .............. ......l....... .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Classique0000664000175000017500000000561412140767201015153 00000000000000Version: 1.45 Level: Bertrand GRONDIN Bobo Bidon Bricks: hhhhhhhhhhhhhh h*h*h*h*h*h*h* hhhhhhhhhhhhhh vvvvvvvvvvvvvv *i#ii*ii#ii*i# *i#ii*ii#ii*i# *i#ii*ii#ii*i# *i#ii*ii#ii*i# *###i*i###i*i# *dddi*idddi*id v###vvv###vvv# cccccccccccccc ccccc***cccccc ccccc***cccccc xxxxxxxxxxxxxx .............. .............. .............. Bonus: 55!555555!5555 0............. m0j00mj0000j0m ..*...*...*... .~mfW~+W.?~.fm .~?fW~+W.W~.f. .~.f.~}..}~.f? ...s........s. .............. ....g.j...g.j. l...........l. mc-.{.m.w{-..m ...w+....+..c. p.p....j.p...p wbw*wbw*wbw*wb .............. .............. .............. Level: Bertrand GRONDIN Que du malus Bricks: .............. .............. zzzzzzzzzzzzzz gggggggggggggg dddddddddddddd iiiiiiiiiiiiii ffffffffffffff kkkkkkkkkkkkkk bbbbbbbbbbbbbb !!!!!!!!!!!!!! gggggggggggggg !!!!!!!!!!!!!! cccccccccccccc vvvvvvvvvvvvvv xxxxxxxxxxxxxx .............. .............. .............. Bonus: .............. .............. l>>>>>>>>>>>>> -..d.fW.fc.-d. -..d&fW.fc&-d. -.!d&fW.fc&-d! -..d&fW!fc&-d. -..d&fW.fc&-d. ....ccccc..... ..??......??.l .............. ......!....... .l.........l.. .............. .....l........ .............. .............. .............. Level: Bertrand GRONDIN Badaboum Bricks: !!!!!!!!!!!!!v !!!!!!!!!!!!!v #############v !!!!!!!!!!!!!v !!!!!!!!!!!!!v #############v v!**********!v v!**********!v v!*!!!!!!!**!v v!*!!!!!!!**!v v!*!!!!!!!**!v v!**********!v v!**********!v zzzzzzzzzzzzzz zzzzzzzzzzzzzz .............. .............. .............. Bonus: l............. ......*....... ..g....g...... l............. ......*....... .............. ..l.......l... ...mmmmmmm.... .............. .............. .............. .............. .....jjjj..... b.b.b.b.b.b.bj .w.wlw.wlwjwjw .............. .............. .............. Level: Bertrand GRONDIN Slalom Bricks: .............. .............. .............. hhhhhhhhhhhhhh dddddddddddddd !@!@!@!@!@!@!@ !!!!!!!!!!!!!! !!!!!!!!!!!!!! #z#z#z#z#z#z#z cc*ccccc*cccc* cccccccccccccc v#v#v#v#v#v#v# aaaaaaaaaaaaaa ffffffffffffff gggggggggggggg .............. .............. .............. Bonus: .............. .............. .............. .............. .....l...l.... .............. ..?...f...?... .m...l.m.l...m .5.5.5.5.5.5.5 p...........p. .....l...l.... ......g....... p-..*...*...-p &.wb......bw.& ...+....+..... .............. .............. .............. Level: Bertrand GRONDIN Slalom Bricks: .............. EEEEEEEEEEEEEE Eaaaaaaaaaaaaa Eaaaaaaaaaaaaa EaaEEEEEEEEEEE Ebbbbbbbbbbbcc Ebbbbbbbbbbbcc EEEEEEEEEEEEcc Eccccccccccccc Eccccccccccccc EccEEEEEEEEEEE Ecczzzzzzzzzzz Ecczzzzzzzzzzz EEEEEEEEEEEEzz .............. .............. .............. .............. Bonus: .............. .............. .mm...l.&&..mm .mm.....&&..mm .............. ....&&l.....mm ....&&......mm .............. .mm...l....... .mm........... .............. .&&...l...&&mm .&&.......&&mm ............mm .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Smilies0000664000175000017500000002641612140767201014632 00000000000000Version: 1.00 Level: Hasenfuss :) Bricks: EEEEEEEEEEEEEE E............E E.....**.....E E...**zz**...E E..*zzzzzz*..E E..zzzzzzzz..E E..zz*zz*zz..E E.zzzzzzzzzz.E E.zzzzzzzzzz.E E..zzzzzzzz..E E..z*zzzz*z..E E..zz*zz*zz..E E...zz**zz...E E....zzzz....E E............E E.zzz....zzz.E EjjjjjjjjjjjjE EjjjjjjjjjjjjE Bonus: .............. .............. .............. ......00...... ....000000.... ...00000000... ...00.00.00... ..0000000000.. ..0000000000.. ...00000000... ...0.0000.0... ...00.00.00... ....00..00.... .....0000..... .............. ..555....555.. .bbbbbbbbbbbb. .wwwwwwwwwwww. Level: Hasenfuss :| Bricks: ffffffffffffff f............f f..*E*EE*E*..f f...*E**E*...f f...E****E...f f...cccccc...f f...c*cc*c...f f..cccccccc..f f..cccccccc..f f...cccccc...f f...cccccc...f f...cccccc...f f...c****c...f fcc.cccccc.ccf fcc........ccf fcc........ccf fcc........ccf ffffffffffffff Bonus: 44445555554444 .............. .............. .............. .............. .............. .............. ...p......p... ...p......p... .............. .............. .....bbbb..... .............. .....w..w..... .--........--. .............. .............. .............. Level: Hasenfuss :D Bricks: cccccchchchhhh aacccc@@ccchhh aaacc@@@@chchh aacc@@@@@@ccch cgc@@@@@@@@chc gcc@@*@@*@@hch cgc@@@@@@@@ccc gc@@@@@@@@@@ch cg@@@@@@@@@@cc gcc@@@@@@@@cch cgc@******@ccc gcc@*zzzz*@cic cgc@*zzzz*@ihi cic@*zzzz*@ihi ihi@@*zz*@@cic ihic@@**@@ccfc ciccc@@@@cccfc cfcccc@@ccccfc Bonus: .............. dd.........www ddd.......w.ww dd...........w .m..........w. m..........w.w .............. .............w .............. .............w .............. .....5555...w. .....5555..www .w...5555..www www...55...bwb wwwb......bbwb >w..........w> *w..........w* Level: Hasenfuss :( Bricks: cccccccccccccc c!!!!!!!!!!!!c c************c c*zzzzzzzzzz*c c*zzEEzzEEzz*c c*zzzzzzzzzz*c c*zzz*zz*zzz*c c*zzzzzzzzzz*c c*zzzzzzzzzz*c c*zzzzzzzzzz*c c*zzzzzzzzzz*c c*zzz****zzz*c c*zz*zzzz*zz*c c*z*zzzzzz*z*c c*zzzzzzzzzz*c c************c ckkkkkkkkkkkkc ckkkkkkkkkkkkc Bonus: 00005500550000 0pppppppppppp0 0............0 0............0 0............0 0............0 0............0 0............0 0............0 0............0 0............0 0............0 0............0 0............0 0............0 0............0 0ddgddddddgdd0 0++++++++++++0 Level: Hasenfuss :P Bricks: zkzzkzkzzkzzkz kzkzzkzzkzzkzk zkzkzkzkzkkzkz zzkzkzkzkzzkzz zzzkkkkkkkkzzz zzz!!!!!!!!zzz zzz!!*!!*!!zzz zzz!!!!!!!!zzz zz!!!!!!!!!!zz zz!!!!!!!!!!zz zzz!!!!!!!!zzz zzz!!!!!!!!zzz zzz!******!zzz zzz!!!!*v*!zzz zzz!!!!*v*!zzz zzz!!!!***!zzz zzz!!!!!!!!zzz zzzzzzzzzzzzzz Bonus: w............w ..w..w..w..w.. .>..........>. ....>...>....w w............. ..w.bbbbbb.... ....bgbbgb..w. .w..bbbbbb.... ..l........l.w .............. w.w..........w ...wwwwwwww... .w.w......ww.. ..wwwww...w..w w.....w...w... .w....w...w.w. ......wwwww... p............p Level: Hasenfuss sun Bricks: .h....h.....h. ..h....h...h.. ...h..h...h... h...h..h.h...h .h...h..h...h. ..h...hh...h.. ...h.hhhh.h... ....h*hh*h.... h.h.hhhhhhh.h. .h.hhhhhhh.h.h ....h*hh*h.... ...h.h**h.h... ..h...hh...h.. .h...h..h...h. h...h.h..h...h ...h...h..h... ..h...h....h.. vhvvvvvhvvvvhv Bonus: .............. .............. .............. .............. .............. .............. .............. .....5..5..... .............. .............. .....5..5..... ......55...... .............. .............. .............. .............. .............. g.ggggg.gggg.g Level: Hasenfuss dynamite Bricks: EEEEEEEEEEEEEE E********EEEEE E********EEEEE E**********vEE E********EE*vE E********EEE*E EEEEEEEEEEEEhE zzzzzzzzzzzEhE zzzzzzzzzzzhhh ccccczzzzzzhhh ccccccczzzzhhh cccccccczzzzhz cccceeeeeeeeez ccccccczzzzzzz cccccczzzzzzzz ccczzzzzzzzzzz ccczzzzzzzzzzz ccczzzzzzzzzzz Bonus: .............. .............. .............. .............. .............. .............. ............5. ............5. ...........555 ....*......555 *.*...*....555 .......*....5. *.*b444444445. ......*....... *.*..*........ .............. *.*........... www........... Level: Hasenfuss :/ Bricks: @@@@@hhhh@@@@@ @@@@hhhhhh@@@@ @@@hhgggghh@@@ @@hhgccccghh@@ @hhgccccccghh@ @hgccccccccgh@ @hgcc*cc*ccgh@ @hgccccccccgh@ @ggccccccccgg@ @ggccc**cccgg@ @@gccccccccg@@ @@gccccccccg@@ @@gc**cccccg@@ @@gccc**cccg@@ @@gccccc**cg@@ @@@gccccccg@@@ gg@@gccccg@@gg gg@@@gggg@@@gg Bonus: .............. .............. .............. .............. .............. .............. .....bllb..... .............. .............. ......bb...... .............. .............. ....bb.g...... ......bb...... ........bb.... .............. w.....*......w .....w..w..... Level: Hasenfuss :O Bricks: .....eeee..... .....eeee..... .....eeee..... ...eeeeeeee... .....cccc..... ....cccccc.... ...cc*cc*cc... ...cccccccc... ...cccccccc... ..cccc**cccc.. ..ccc*!!*ccc.. ..cc*!!!!*cc.. ...c*!!!!*c... ...cc*!!*cc... ...ccc**ccc... zz..cccccc..zz z*z..cccc..z*z .EEEEEEEEEEEE. Bonus: .....5555..... .....5555..... .....5555..... ...>>5555>>... .............. .............. .....5..5..... .............. .............. ......55...... .....5ll5..... ....5l..l5.... ....5l..l5.... .....5ll5..... ......55...... bb..........bb *bg........gb* .............. Level: Hasenfuss :X Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvv*vvvv*vvvv vvvvv*vv*vvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvv*vv*vvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvv*vvvv*vvvv vvvvv*vv*vvvvv vvvvvv**vvvvvv vvvvvv**vvvvvv vvvvv*vv*vvvvv vvvv*vvvv*vvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: *000000000000* 0000......0000 0000......0000 0000.b..b.0000 0000......0000 0000......0000 0000.*..*.0000 0000......0000 00000000000000 0000......0000 0000>....>0000 *000.>..>.000* 0000..gg..0000 0000..**..0000 0000.>..>.0000 0000>....>0000 0000......0000 +.+.+.+.+.+.+. Level: Hasenfuss :S Bricks: !*!!!!!*!!!!*! !!*!!!*!!!!*!! !!!*!!!*!!*!!! g!!!*!*!!*!!!g !g!!******!!g! !!g!gggggg!g!! !!!gg*gg*gg!!! !!!!gggggg!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !i!!*!!!**!!i! iii*!!!*!!*iii !i!*!!!*!!*!i! !!!*!!*!!!*!!! !!!*!!*!!!*!!! !!!!**!!!*!!!! !!!!!!!!!!!!!! .............. Bonus: .............. .............. .............. .............. .............. ....>.>>.>.... .....b..b..... ....wwwwww.... .............. .............. ...+......+... .............. .............. .............. .............. .............. .............. .............. Level: Hasenfuss :C Bricks: E*E*E*E*E*E*E* *E*E*E*E*E*E*E E*E*E*E*E*E*E* *E##########*E E*#cccccccc#E* *E#cccccccc#*E E*#cc*cc*cc#E* *E#cccccccc#*E E*#cccccccc#E* *E#cccccccc#*E E*#cccccccc#E* *E#ccc**ccc#*E E*#cc*##*cc#E* *E#c*####*c#*E E*#c*####*c#E* *E#c*####*c#*E E*#cc*##*cc#E* *E##########EE Bonus: .............. .............. .............. .............. ...*555555*... ...55555555... ...55.55.55... ...55555555... ...55555555... w..55555555... ...55555555... ...555..555... ...55....55... ...5......5... ...5......5... ...5......5... ...55....55..m .............. Level: Hasenfuss humans Bricks: ccgccccccccdcc cgggcc**ccdddc cgggcc**ccdddc cgggc****cdddc ccgccccccccdcc gcgcgccccdcdcd cgggc*cc*cdddc ccgccccccccdcc ccgccccccccdcc ccgc*cccc*cdcc ccgcc*cc*ccdcc cgcgcc**ccdcdc gcccgccccdcccd ************** zzzzzzzzzzzzzz EzEzEzEzEzEzEz ************** zzzzzzzzzzzzzz Bonus: ..?.555555.?.. .???......???. .?*?......?*?. .???......???. ..?........?.. ?.?.?....?.?.? .?j?......?j?. ..?........?.. ..?........?.. ..?........?.. s.?..s..s..?.s .?.?......?.?. ?.w.?....?.w.? .............. ..g...g...g... .............. .............. .............. Level: Hasenfuss :[ Bricks: EEkkkkkkkkkkEE EEkkkkkkkkkkEE EEkcccccccckEE EckcacaacackcE EckccaccacckcE EckcccccccckcE Ecccc*cc*ccccE EccccccccccccE EccccccccccccE EckcicaacickcE EckciccccickcE EckcccccccckcE Eckc******ckcE EEkc*cccc*ckEE EEkc*cccc*ckEE EkkcccbbccckkE kkkcdbccbdckkk kkkkcccccckkkk Bonus: .............. ...l......l... .............. .5..b....b..5. .5..........5. .5..........5. .5...b..b...5. .*..........*. .5..........5. .5....gg....5. .5..........5. .5..........5. .5..b.~~.b..5. .............. .............. ..+555..555+.. .............. ....000000.... Level: Hasenfuss tree Bricks: bbbbbyyyybgbgb gbgbyyydyybbbb bbbydyyyyyygbg bgbyyyyyyyybbb bbyyy!yy!ydygb gbyyyyyyyyyybb byydyyyyyyyyyg byyyyydyyyyyyb bydyyyyyydydyb gyyyyyyyyyyyyb bbyyyyeeyyyybg bgbydyeeyyybbb bbbyyyeeydybgb gbgbyyeeyybbbb bbbbbyeeybbgbg bgbgbbeebbbbbb bbbbbeeeebgbgb gbgbeeeeeebbbb Bonus: ..........?.?. ?.?....5...... ....5......?.? .?............ .....*..*.5.?. ?............. ...5.........? ......5....... ..5......5.5.. ?............. ......>>.....? .?..5.>>...... ......bb.5..?. ?.?...bb...... ......ww...?.? .?.?..ww...... ..........?.?. ?.?........... Level: Hasenfuss snake Bricks: bbbbbbbbbbcc*c bhhhhhhhhbc*** bhhhhhhhhbc*** bhhhhhhhhbc*** bbbbbbbbbbc*** EEEEEEEEEEEE*c ***c***c***c*c *E*c*E*c*E*c*c *E*c*E*c*E*c*c *E*c*E*c*E*c*c *E*c*E*c*E*c*c *E*c*E*c*E*c*c *E*c*E*c*E*c*c *E*c*E*c*E*c*c *E*c*E*c*E*c*c *E*c*E*c*E*c*c *E***E***E***c *EEEEEEEEEcccc Bonus: .*.....*..22.2 .55555555.2... .5b5b5b5b.2.b. .55555555.2... ....*....s2... .............2 .}.2...2...2.2 ...2...2...2.2 ...2...2...2.2 ...2...2...2.2 ...2...2...2.2 ...2...2...2.2 ...2...2...2.2 ...2...2...2.2 ...2...2...2.2 ...2...2...2.2 .............2 ..........2222 Level: Hasenfuss >:[ Bricks: @@@@@@@@@@@@@@ @@@@*@@@@*@@@@ @@@@*@@@@*@@@@ @@@@**@@**@@@@ @@@@**aa**@@@@ @@@@aaaaaa@@@@ @@@@aaaaaa@@@@ @@@@a*aa*a@@@@ @@@aaaaaaaa@@@ @@@aaaaaaaa@@@ @@@aaaaaaaa@@@ @@@@aaaaaa@@@@ @@@@acccca@@@@ @a@@acccca@@a@ @a@@acaaca@@a@ @a@@acaaca@@a@ aaa@aaaaaa@aaa aaa@@aaaa@@aaa Bonus: .............. ....5....5.... ....5....5.... ....55..55.... ....55..55.... .........s.... .............. .....g..g..... ...5..s...5... ...5......5... ...5.w..w.5... .............. .....5555..... .>...5g55...>. .b..s5..5...b. .b...5..5...b. .-...cccc...-. .....~.~...... Level: Hasenfuss :* Bricks: EEEEEEEEEEEEEE E...zzzzzz...E E..zzzzzzzz..E E.zzzjzzjzzz.E E.zzjzjjzjzz.E E.zzzzzzzzzz.E Ezzzz*zz*zzzzE EzzzzzzzzzzzzE EzzzzzzzzzzzzE EzzzzzzzzzzzzE E.zzzzzzz*zz.E E.zzzzz*zzz*.E E.zzzzzz*z*z.E E.zzzzzzz*zz.E E.zzzzzz*z*z.E E..zzzz*zzz*.E E...zzzzz*...E E...EEEEEE...E Bonus: .............. ....b....b.... .............. ..b..c..c..b.. ....l.ll.l.... .............. .b..w....w..b. ..+........+.. ...5555....... .b.5555w.w..b. ..+5555....+.. ...5555>...... ...5555...>... ..+5555....+.. ..b5555....... ...b...wwwww.. ....>>>>>w.... .............. Level: Hasenfuss key Bricks: aaaaaaaaaaaaaa aaaaaaaaaaaaaa aajaaaaaaaaaaa ajejaaaaaaaaaa jeeejaaaaaaaaa eeEeejaaaaaaaa eEEEejjjjjjjjj eEEEejEEEjjjjj eEEEeeeeeeeeee eEEEeeeeeeeeee eEEEejEEEjjeee eEEEejjEjajeee eeEeejaEaajeje jeeejaaEaajeje ajejaaaEaaajaj aajaaaE.Eaaaaa aaaaaE...Eaaaa aaaaE.....Eaaa Bonus: *............* ..c.c.c.c.c.c. .............. ..5........... .5s5.......... 55.55......... 5...5......... 5...5......... 5...5555555555 5...55555555*5 5...5......555 5...5......5s5 55.55......5.5 .5s5..?.?..5.5 ..5..?...?.... ....?.....?... .............. ?.?.........?. Level: Hasenfuss exit Bricks: E@E@E@E@E@E@E@ @E@E@Ebb@E@E@E E@E@Ebeeb@E@E@ @E@Ebeeeeb@E@E E@Ebeeeeeeb@E@ @E@beezzeebE@E E@Ebezzzzeb@E@ @E@beezzeebE@E E@Ebeeeeeeb@E@ @E@beeeeeebE@E E@Ebeeee**b@E@ @E@beeeeeebE@E E@Ebeeeeeeb@E@ @E@beeeeeebE@E E@Ebeeeeeeb@E@ @E@beeeeeebE@E E@Ebeeeeeeb@E@ @E@bbbbbbbbE@E Bonus: .............. ......**...... ......44...... .....4444..... ....444444.... ....445544.... ....455554.... ....445544.... ....444444.... ....444444.... ....444455.... ....b.b.b.b... ...w.w.w.w.... ....d.d.d.d... ...>.>.>.>.... ....~.~.~.~... ...-.-.-.-.... ....W.W.W.W... lbreakout2-2.6.5/client/levels/Popcorn0000664000175000017500000002662512140767201014647 00000000000000Version: 1.00 Level: NJBilly Buttery Bricks: .............. .............. ....g.g.gg.... ....gggggg.... ...gggggggg... ...gggggggg... ...jjjjjjjj... ...jjjjjjjj... ....jjjjjj.... ....jjjjjj.... ....jjjjjj.... ....jjjjjj.... ....jjjjjj.... ....jjjjjj.... ....jjjjjj.... ....jjjjjj.... ####jjjjjj#### .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .....bbbb..... .....bbbb..... .....b>>b..... ....lbbbbl.... ....>bbbb>.... ....lbbbbl.... ....wwwwww.... ....wwwwww.... .............. Level: NJBilly Kernel Bricks: .............. .............. .............. .......gg..... ......ggjg.... .....gjjjjg... ....gjgggjg... ...gggg**gg... ..ggggg**gg... ...gggg**gg... ....ggggggg... .....gggggg... ......gggg.... #.#####gg###.# .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .......>>..... ......wwww.... ....jjj**jj... ...5555..55... ..bbbbb..bb... ...5555..55... ....bb>>>bb... .....wwwwww... .......>>..... .............. .............. .............. .............. .............. Level: NJBilly Film Strip Bricks: .............. .............. zzzzzzzzzzzzzz z.z.z.z.z.z.z. zzzzzzzzzzzzzz iiziiiziiiziii iiziiiziiiziii iiziiiziiiziii iiziiiziiiziii iiziiiziiiziii iiziiiziiiziii iiziiiziiiziii zzzzzzzzzzzzzz z.z.z.z.z.z.z. zzzzzzzzzzzzzz .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. ..&.>.*.>.&... ..&.>.*.>.&... ....>.!.>..... !.!...!...!..! .............. >b>b>b>b>b>b>b b.b.b.b.b.b.b. wwwwwwwwwwwwww .............. .............. .............. Level: NJBilly Projector Bricks: .............. ........ii.... .......iiii... ..ii...iggi... .iiii..iggi... .iggihhiggi... .iggihhiiii... .iggihhhii.... .iiiihhhh...j. ..iihhhhhj.jj. ..hhhhhhhjjjj. ..hhhhhhhjjjj. ..hhhhhhhj.jj. ..hhhhhhh...j. ..hhhhhhh..... ..hhhhhhh..... .............. .............. Bonus: .............. .............. ........>>.... .............. ..>>....ww.... .....!!....... ..ww.......... .....www!!.... .............. ..!!.......... ....jjj....... ..W*...*W..... ..b>b>b>b..... ..wwwwwww..... ..pb>b>bp..... .............. .............. .............. Level: NJBilly Leading Lady Bricks: iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiii*i*i iiiiiggii**i** iiiiggggi***** iiiggggggi***i iiigg@@ggi***i iiig@@@@gii*ii iiigx@@xgii*ii iigg@@@@ggiiii iigg@@@@ggiiii iigg@@@@ggiiii iigg@dd@ggiiii iggg@@@@gggiii iggg@@@@gggiii igiii@@iiigiii iiii@@@@iiiiii iii@@@@@@iiiii Bonus: ..........**.* .........*..*. .m............ .m...!!....... .m.........>.. ...........>.. .....**....>.. .>............ .>..b&&b...... ..!b.&&.b!.>.. ...b....b..>.. ...b.jj.b..... b....bb......b bm...>>...m..b bm..wwww..m..b .....ww....... wwww.....ww.ww .............. Level: NJBilly Silver Screen Bricks: dddddddddddddd ddddccccccdddd dddccccccccddd ddccccccccccdd ddccccccccccdd dccccccccccccd dccccccccccccd dccccccccccccd dccccccccccccd dccccccccccccd dccccccccccccd dccccccccccccd dccccccccccccd ddccccccccccdd ddccccccccccdd dd####..####dd dd..........dd .............. Bonus: .............. .............. .............. ww..ww..ww..ww .............. ......>>...... ......!!...... ...&&....&&... ......**...... .....>>>>..... .!..........!. ...bbj>>jbb... ...bwwwwwwb... ...bwwbbwwb... wb.bwwwwwwb.bw bw..........wb wb..........bw .............. Level: NJBilly Food & Drink Bricks: .............. .............. .....j........ ....j......... ...j.......... ..j........... .iii.dddddddd. .!!!.dddddddd. .hhh.dggggggd. .hhh..gggggg.. .hhh..gggggg.. .hhh...gggg... .hhh.########. .hhh.......... .hhh.......... .hhh.......... #####......... .............. Bonus: .............. .............. .....>........ ....*......... ...>.......... ..g........... ......&&&&&&.. .!>!.!>gjjg>!. ..>...>wwww>.. .bbb.......... .www....ww.... ..j........... .bbb.......... .www.......... .............. .............. .............. .............. Level: NJBilly Be Quiet! Bricks: .............. .............. .ff..gvg.ivi.j ffff.gvg.ivi.j fvvf.gvg.ivi.j fvvv.gvg.ivi.j ffvv.ggg.iii.j vffv.ggg.iii.j vvff.gvg.ivi.j vvvf.gvg.ivi.j fvvf.gvg.ivi.v ffff.gvg.ivi.j .ff..gvg.ivi.j .............. kk###.kk.###kk ************** ****.####.**** kk##......##kk Bonus: .............. .............. .............b .............b .....b.b...... >....b.b.!.!.. >b...>w>.>w>.. .b....wj.jw... .....!.!.b.b.. .........b.b.. .............. .ww..........w .............w .............. .............. b.....w>.....b w............w .............. Level: NJBilly Theatre Floor Bricks: ..........f... !*.vvvvv.*f... ..gviiiv!...g. ...viiiv...... f..vvvvv.g.!.. f..*..f....... ...f..f...g..g .!......d....* *..g.!..dd.... .g.....*.dd.g. ..*!*.....d... ......g....... .g..!*..!*...f ..........!.*f !..g....f..... .....!..f.g.!. .............. .............. Bonus: .............. >!.55555.!*... ..*5.!.5j...b. ...5...5...... j..55555.&.... w..w..j....... ...j..&...w..! .>......b..... !..b.!..>!.... .w.....!.b..j. ..!&......w... ......>....... .&..*........& .............. ...w....w..... .............. .............. .............. Level: NJBilly From The Right Bricks: .............z ............gy ggggggggg...gx gggggggggggggx ..gggggggggggx ....gggggggggx ........gggggx .........ggggx ..........gggx ...........ggx d..d..d..d..gx d..d..d..d..gy d..d..d..d...z d..d..d..d...# dd.dd.dd.dd..# c..c..c..c...# c..c..c..c...# ##.##.##.##..# Bonus: .............! ............&! w.&&.*..&..... w!.j!bb!.!&&!. .....bb.j....w ....c.>>..bb.w ........>.bm.w .............w ............>w .............. w..w..w..w..!. c..j..j..c...! b..b..b..b...! >..>..>..>.... w!.w!.w!.w!... .............. .............. .............. Level: NJBilly Monster Movie Bricks: iiiiiiiiiiiiii iiiiiiiiiiiffi iiiiiiiiiiffff iiiiiiiiifffff iiiiiiifffffff iiiiiiffddffff aaiiifffddffff *aaaffffffffff ***affffffffff ****jjjfffffff *******fffffff ****jjjfffffff ***affffffffff *aaaifffffffff aaiiifffiiiiif iiiiiiiiiiiiif iiiiiiifffffif iiiiibffffffff Bonus: !..!.w.!....w. ..j......w!..! w..!.!........ ..!....!...!.! !....!...w.... ..!.j.*....w.. .......j.!..!. .!.w.......... l....!.!.w.l.w !.........!... .&w!&.w.!....! !...!......!.. ......!.l!...! !!.!...!...!.. >.j.>.j.>.j.>. .b.b.b.b.b.b.b w.w.w.w.w.w.w. .............. Level: NJBilly Attack From Mars Bricks: vddvv......... ddddc......... d**dv......... d**dv.c....... ddddv......... vddvv..c...... vvvvv......... .vvv...c...... ...c.c....vvv. .........vvfvv .c.......vfgfv ...c....vvigiv .....c.cviiiii ........vdidid ........vvvvvv .............. .............. .............. Bonus: j!!j.......... !!!!w......... !ll!j......... !ll!j.w....... !!!!.......... j!!j...w...... .jj........... .......p...... ...p.w........ ...........!.. .w........!b!. ...w......pbp. .....w.w...j.. .........bjbjb .............. .............. .............. .............. Level: NJBilly Western Bricks: kkkkkkkkkkkkkk kkkjkjjkkkkkkk kkkjjjjkjkkkkk kjkjjjjjjkkkkk kjjjjjjjjkkkkk kkjjjjjkkkkkkk kkkhhhhkkkkkkk kkkhgigkkkkkkk kkkhggggkckkkk kkkhggggkkccc* kkkhgghkkkccc* kkkhghgkcgcckk kkkkgggkcgcgkk kkkkiffkcggkkk kkkkiifkkiikkk kkkkiiikkiikkk kkkiiiiiiikkkk kkkiiiiiiikkkk Bonus: ....!.!.!..w.. p.w.....j.b..! .!.!j..!.!.!.. .....bj...j..p j!.wb...pw.w.> !.!...&...&.b. .w.!!...b!.!.& !.*b..*b..!..j ....!...>...w. b.&.!.!!j..>!. .>.b..!...!... ..j..!.p!j.p.. &j..p.j.!.!..! ..!....!...!.j !!.>.!..!..... ..........!.&. .!!bw.wbwb..!. .w.wbwbwbw.ww. Level: NJBilly Chase Scene Bricks: iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii giiiiiiiiiiiii ggiiiiiiiiigii gggiiiiiiggggi gggggiiigg*ggi ggffgggigjjjgg giifgggggiijgg ffffffggjjjjjj fkffkfggjkjjkj gkggkggggkggkg cccccccccccccc cccccccccccccc bbbbbbbbbbbbbb aaaaaaaaaaaaaa aaaaaaaaaaaaaa Bonus: ......*....!.. w!..wb.bw....w ........!..... w..b!.p..bl.w. ..l....l...... .b.!p.*.p!.b.. !............! ..........p... j.p.j...j....j ......*.....p. .........!.!.. p...!.!j.....! .!............ ...!..j!.!.... ............!. !b.b.b.b.b.b.b w.w.w.w.w.w.w. .............. Level: NJBilly Down In Front!!! Bricks: .............. .cccccccccccc. .cccccccccccc. .cccccccccccc. .cccccccccccc. .ccccgccccccc. .ccccgccccccc. .ccciiicccccc. .gcciiiccgcccg .gcciiiccgcccg !!!ciiicdddchh fffcfffcfffcff fffcfffcfffcff fff.fff.fff.ff fff.fff.fff.ff fff.fff.fff.ff .a...a...a...a .a...a...a...a Bonus: .............. ..!........!.. .j..!.j..!..j. ..*........... ...p...p..!p.. .!!..w.!!..... ...!.b.....!.. ..!..!..!...*. .w.....*.w...w .b!.!j...b..!b .j.p..!p.j.p.j !w..*w...w...w ......!...!... !w...w...w..!w ..!...!.!.!.!. .............. .b...b...b...b .w...w...w...w Level: NJBilly Catastrophe Movie Bricks: kkkkkkkkkkkkkj kkkkkkkkkkkkjj kkkkkkkkkkkjjj kkkkkkkkkkjjjj kkkkkkkkkjjjjj kkkkkkkkjjjjjj kkkkkkkjjjjjjk kkkkkk**jjjjkk kkkkk****jjkkk fkkkk****jkkkk ffikk****kkkkk iiiik****kkkkk fiifkk**kkkkkk fiiffkkkkkkkkk iiiifkkkkkkkkk ffiiffkkkkkkkk ffiiffkkkkkkkk fffiiffkkkkkkk Bonus: ......!..!..!. ..>.j..>..j... l....!.......p .p.!..!..!.*.! !............. .b.b.b.b.b.b.b w.wjw.wjw.w.w. .!.!.....!...! .>............ j.l.plp*p..j.> ....*....!>... ..j!!.!.....!. >!.......>!..j ..!>!j.p...p.. .p!.....!l...! b.bjb.bjb.b.b. .w.w.w.w.w.w.w .............. Level: NJBilly Fantasy Flick Bricks: *vvvv.....!... **vvv.....!... ***vv....!!!.. v***v..!.!!!.! vv*hv...!!!!!. vvvhv....ggj.. .vvhv....igj.. ..vhv....jgj.. ..vhv....dgj.. ..vhv....jjj.. ..vhv....jg!.. ..vgg...jj!!.. ..vhg!..jj!!.. ..vhv!!.j!!!!. ..vvv!!!j!!!!. ......!!!!!!!. .......!!!!!!! ........!!!!!! Bonus: ..!.*......... ...j.......... .!..!....jwj.. .............. j.!.!....!.!.. .!........w... ...!.....!.... ..*.*.....!!.. ..!.!.....w!.. ..j......j.... ...bj.....!... ..!.!...!!.... ...b....j.b!.. ..j..bj.w.j.j. ..*.*....!b.b. .......b.j.j.. .......wbwbwbw ........w.w.w. Level: NJBilly Scary Movie Bricks: kkkkkkkkkkkkkk kkkkkkkkkkkkkk kkkkkkkkkkkkkk kggkkakkkkjkkk k@gkkkkkkjjjkj kiggakjkkjjjkj k@ggkkjjkjjjkj kd@gkkkjkjkjkj k@@kkkkjjjjjjk kffkakkkjjjjjk fffkkkkkkjjjkk kfffkakkkjjjkk kffkfkkkkjjjkk khhkkakkkjjjkk khhkkkkakjjjjk hhhhhekkkjjjjk hhkhhekakjjjjj kkkkkekkkjjjjj Bonus: .!..!...5..!.. ..5...b.5!55.b b.5!.!.55..55. .!55.....b!.55 ..w5....!...*w w...*.w..55... 555!....w55w.5 !5...b...55.!5 .5b5555.!5.5.. 55!5.!.*..!5!! 5!.55555555... j.j.j.5!j!j.j! .!.!.5555..!!. b.b.b5b!b!b.b. .w.w.w.w.w!w!w b.b.b.b.b5b.b. w.w.w.w.w5w!w! .............. Level: NJBilly City Disaster Movie Bricks: kgkkkkkkkkkkkk gggkkkkkkkkkkk gggkkkkkkkkkkk gggkkkkkkkkkkk kgkkkkkkkkkkkk kkkkkkkkikkkkk kkkkkkkkiiikkk kkkkkkkkkiiikk kkkkkkkkkkiikk kkakkkkkkkiikk kkakkakkkkkiik akakkakkkkkiik akakkakkkkkiik abakkakbkkiiik ababkaabkkiiii bbabbaabkiiiii hhhhhhhhiiiiii hhhhhhhhiiiiii Bonus: !.!....!.....! ....w!w.w..!.. .!.j....!j.... .....w.w..!.!. bbbbbbbbbbbbbb *55!5pwp!5555* 55555!55555!55 5!5j55*!5j!.!5 !5555555!55555 wp5w5w5w5w5wpw 555555*5555555 555!5p5p55!55! !5!j55!5!j55!5 5!55!555!5!555 bbbbbbbbbbbbbb .!!j...!.j.!.! w.w.w.w.w.w.w. .............. Level: NJBilly The End Bricks: *c*c*c*c*c*c*c cccccccccccccc @@@@@c@@c@@@@@ cccccccccccccc c************c c************c c!!!!!!!!!!!!c c!!!!!!!!!!!!c @@@@@@zz@@@@@@ zzzzzzzzzzzzzz zzzzzzzzzzzzzz v!!!!!!!!!!!!v v!!!!!!!!!!!!v @@@@v@@@@v@@@@ vvvvvvvvvvvvvv gggggggggggggg hhhhhhhhhhhhhh kkkkkkkkkkkkkk Bonus: 55555&5m555555 j555555555555j 5j555j55j555j5 55j55555555j55 555j555555j555 >>>5j5555j5>>> j5555j55j5555j 555555jj555555 &&&&&&jj&&&&&& 55555j55j55555 >>55j5555j55>> 555j555555j555 55j555}}555j55 5j5555pp5555j5 j55j5cccc5j55j b}bbjbjjbjbb}b bbjbbb>>bbbjbb wwwwpwjjwpwwww lbreakout2-2.6.5/client/levels/Arkanoid0000664000175000017500000001104112140767201014741 00000000000000Version: 1.00 Level: Lelldorin arkanoid Bricks: .............. .............. .............. .............. kkkkkkkkkkkkkk dddddddddddddd hhhhhhhhhhhhhh gggggggggggggg eeeeeeeeeeeeee ffffffffffffff .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. +...<......l.+ ..g..........0 .+..>...2..... 3......&..-... .............> ..1..-........ .............. .............. .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: .............. j............. jh............ jhi........... jhif.......... jhife......... jhifeg........ jhifegj....... jhifegjh...... jhifegjhi..... jhifegjhif.... jhifegjhife... ############ee .............. .............. .............. .............. .............. Bonus: .............. l............. .............. ..-........... .............. &............. .0...s........ .............. ..&........... s..s..0.-..... .............. 4>...&....3... ............<. .............. .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. ......kk...... ...gggkkfff... ..gggjjjjfff.. .gggjjjjjjfff. .gggjjjjjjfff. .gggjjjjjjfff. ......kk...... ......kk...... ......kk...... ......kk...... ......kk...... ......kk...... ...cc.cc...... ...cc.cc...... ....ccc....... .....c........ Bonus: .............. .............. ......-+...... ....<...>..... ......p..0.>.. ...+.1....<.+. .s0.-......... ...>.....5-... .......-...... .............. .......0...... ......+....... .............. ......<-...... ...>.......... ....+..s...... .............. .............. Level: noname untitled Bricks: .............. ############## hhhhhh##iiiiii hhhihh##iidiii hhiihh##iiddii hiiiih##iddddi iiiiih##iddddd hiiiih##iddddi hhiihh##iiddii hhhihh##iidiii hhhhhh##iiiiii ###i######d### .............. .............. .............. .............. .............. .............. Bonus: .............. .............. 0....0..0+...0 .............. ...>....l...wf ..f..W.....+.. &+.w.....l...& ...+.l........ l...........W. .............> 0....4..4....0 ...s......s... .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: .............. .......hh..... ......ch...... .....cc....gg. .....cc...fg.. .....cc...fg.. ....dcch..f... ....dcchh.f... ...d@cchhff... ...d@cchhff... ...ddcchh.f... ....dcch..f... ....dcchh.f... .....cc...fg.. .....cc...fg.. .....cc....g.. .......h....g. .............. Bonus: .............. .............. .......<...... .....0......0. ...........>.. .....>1....w.. ..........0... ....+s........ ......->..&... ...>.&..0.<... ....+1.3...... ......w...+... ........-..... .....>1...0s.. .............. ......<....... ............-. .............. Level: noname untitled Bricks: .............. .............. .kgkgkddddddd. .gkgkgjjjjjjj. .kgkgkddddddd. .gkgkgjjjjjjj. .kgkgkddddddd. .jjjjjjjjjjjj. .dddddddddddd. .jjjjjjjjjjjj. .dddddddddddd. .jjjjjjjjjjjj. .dddddddddddd. .............. .............. .............. .............. .............. Bonus: .............. .............. ..0..>........ ....p...{-.... ...+.-...<.0.. ..3.>..0...... .....b.....>.. .+.*......+... .....-l.5.b... ...0.......}-. ........>..0.. .>-...<.p..3.. .......+...... .............. .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. .............. .....jjjj..... .....jjjj..... .....jjjj..... ....jjjjjj.... ....jgjjgj.... ...jggjjggj... ...gggggggg... ...gggggggg... .gggggggggggg. gggggggggggggg .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .....0.b...... ......pw...... .............. ......d4...... .....<.-<..... ....+......... ......0.f0.... .............. .-.f0.<..+.sf. >...-.>.-...-> .............. .............. .............. .............. .............. Level: noname untitled Bricks: .............. ...j......j... ...j......j... ....j....j.... ....j....j.... ...kkkkkkkk... ...kkkkkkkk... ..kkhkkkkhkk.. ..kkhkkkkhkk.. .kkkkkkkkkkkk. .kkkkkkkkkkkk. .kkkkkkkkkkkk. .k.kkkkkkkk.k. .k.k......k.k. .k.k......k.k. .k.kkk..kkk.k. ....kk..kk.... .............. Bonus: .............. ...+.......... ..........2... .............. .............. ....0.p....... ...0...j.+.... .........b.... ..W.-.+l...... ...2?...s2.+.. .......0...... .2......-..... ....-.f-...... .-.2........2. .s........2.f. .....+......-. ....f...-..... .............. lbreakout2-2.6.5/client/levels/Color0000664000175000017500000005475212140767201014307 00000000000000Version: 1.00 Level: Ade Colorful Bricks: .!.*.EEE###@@@ *.!.*.EEE###@@ .*.!.*.EEE###@ ..*.!.*.EEE### k..*.!.*.EEE## jk..*.!.*.EEE# ijk..*.!.*.EEE hijk..*.!.*.EE ghijk..*.!.*.E fghijk..*.!.*. efghijk..*.!.* defghijk..*.!. adefghijk..*.! badefghijk..*. cbadefghijk..* xcbadefghijk.. yxcbadefghijk. zyxcbadefghijk Bonus: }.{........... .}.{.......... ..}.{......... ...}.{........ }...}.{....... {}...}.{...... }{}...}.{..... {}{}...}.{.... }{}{}...}.{... }}{}{}...}.{.. {}}{}{}...}.{. }5b}{}5}...}.{ w}{}j{}{}...}. {?}{}&{}?}...} }{*}{}}*}{}... {}{}+{}}{+{}.. }{}{}}{}}{}{}. }}{}{}}{}}{}{} Level: Ade White Bricks: .............. jjjjjjjjjjjjjj jj....jj....jj jjj...jj...jjj j.jj..jj..jj.j j..jj.jj.jj..j j...jjjjjj...j j....jjjj....j jjjjjjjjjjjjjj jjjjjjjjjjjjjj j....jjjj....j j...jjjjjj...j j..jj.jj.jj..j j.jj..jj..jj.j jjj...jj...jjj jj....jj....jj jjjjjjjjjjjjjj .............. Bonus: .............. .....5555..... .............. .............. ......??...... .............. ....l....l.... .............. .............. ......}}...... .....b..b..... .....pw&.p.... .............. .............. .............. .............. .............. .............. Level: Ade Green Bricks: ############## ###........### ##....ff....## #ffffffffffff# .f..ffffff..f. .f..ffffff..f. .fff#....#fff. ffff.ffff.ffff ffff.f##f.ffff ffff.f##f.ffff ffff.ffff.ffff .fff#....#fff. .f..ffffff..f. .f..ffffff..f. #ffffffffffff# ##....ff....## ###........### ####......#### Bonus: .............. .............. ......}}...... ..}.}....}.}.. ......}}...... .}..}....}..}. .............. }}.}.2..2.}.}} ...........m.. .}..........}. }..}.cgb}.}..} .}..........}. ....?....?.... .}....ss....}. ....+....<.... .............. .............. .............. Level: Ade Blue Bricks: EgEgEgEgEgEgEE E.g.g.g.g.g.gE Eg.g.g.g.g.ggE E.g.g.g.g.gg.E Eg.g.g.g.gg.gE E.g.g.g.gg.ggE Eg.g.g.gg.gg.E E.g.g.gg.gg.gE Eg.g.gg.gg.g.E E.g.gg.gg.g.gE Eg.gg.gg.g.g.E E.gg.gg.g.g.gE Egg.gg.g.g.g.E Eg.gg.g.g.g.gE E.gg.g.g.g.g.E Egg.g.g.g.g.gE Eg.g.g.g.g.g.E E.g.g.g.g.g.gE Bonus: .............. .............. .........3..m. ....3......... .............. ....>...>..... .............. ..l...*...l... .........c.?.. ..&.....c..... .......c...... ......c....... .....c........ ....c.....*... .............. .............. .............. ......s....... Level: Ade Yellow Bricks: ...hhhhhhhhhhh h...hhhhhhhhhh hh...hhhhhhhhh hhh...hhhhhhhh hhhh.......... hhhhh......... hhhhhh..hhhhhh hhhhhhh.hhhhhh hhhhhhh.hhhhhh hhhhhhh.hhhhhh ........hhhhhh ........hhhhhh hhhhhh...hhhhh hhhhhhh...hhhh hhhhhhhh...hhh hhhhhhhhh...hh hhhhhhhhhh...h hhhhhhhhhhh... Bonus: ....j.j.j.j.j. j....j.j.jdj.j .j....j.j.j.j. j1j....j.j.j.j .j.j.......... j.j.j......... .j?j.j...j.m.j j.j.j.j.j.j.j. .-.1.c...j1j.j j.j.j.j.j.j.j. .........jdj>j ........j.j.j. j.j.j....j.j.j .j.j.j>...j.j. j.<.m.j....j.j .j.j.j.j....j. j.j.j.1.j....j .j.j.j.j.j.... Level: Ade Pink Bricks: .............. iii.i.i..i.i.i i.i.i.ii.i.i.i iii.i.iiii.ii. i...i.i.ii.i.i i...i.i..i.i.i .............. iii..iiiiiiiii i..i.....iiiii ii.i.iii....ii i..i.i.ii.i... i..i.i.iiiiii. ...iii.i.i.i.i ii...iii.i.i.i iiii.....i.i.i iiiiiiii...ii. iiiiiiiiii.... iiiiiiiiiiiiii Bonus: .............. .............. .............. .............. .............. .............. .............. ..........l..b .............. .............. ...4.j........ b......g.4.... .............. .............. ..w........... .-.+.......... .....}........ ......s....... Level: Ade Gray Bricks: .kkkkkkkkkkkk. ..kkkkkkkkkk.. k..kkkkkkkk..k kk..kkkkkk..kk kkk..kkkk..kkk kkkk..kk..kkkk kkkkk....kkkkk kkkkkk..kkkkkk kkkkkk..kkkkkk kkkkkk..kkkkkk kkkkkk..kkkkkk kkkkk....kkkkk kkkk..kk..kkkk kkk..kkkk..kkk kk..kkkkkk..kk k..kkkkkkkk..k ..kkkkkkkkkk.. .kkkkkkkkkkkk. Bonus: .!&!&!&!&!&!&. .............. .......b...... ......*.l..... .............. .f............ .............. .............. 3.&f.......3.. .............. ..........b..& ....b.....wb.. ..b*..><..*... ..w........... .............. ......s.p..... ....W......... .............. Level: Ade Orange Bricks: ......eeeeeeee eeeee........e e......eeeee.e e.eeee.....e.e e.e.....ee.e.e e.e.eee..e.e.e e.e.e....e.e.e e.e.e.ee.e.e.e e.e.e.e..e.e.e e.e.e.e..e.e.e e.e.e.ee.e.e.e e.e.e....e.e.e e.e.eee..e.e.e e.e.....ee.e.e e.eeee.....e.e e......eeeee.e eeeee........e ......eeeeeeee Bonus: .............. .............. .............. .............. .............5 ...........5.. .............. &.w.{....5.... .............. .............. .........~.... &..........!.. .............. .............c ...+.......... .............. .............. .............. Level: Ade Red Bricks: .ddd.dddd.ddd. ..dd.dddd.dd.. d..d.dddd.d..d .d...dddd...d. ..d..dddd..d.. ...d.dddd.d... ....d....d.... dddd.d..d.dddd dddd..dd..dddd dddd..dd..dddd dddd.d..d.dddd ....d....d.... ...d.dddd.d... ..d..dddd..d.. .d...dddd...d. d..d.dddd.d..d ..dd.dddd.dd.. .ddd.dddd.ddd. Bonus: .{.{..{{..{.{. ...0.{..{.0... {..{..{{..{..{ .....{..{..... ..{...{*...{.. .....{..{..... ....{....{.... {..{......{..{ .0{...{{...{0. .0{...{{...{0. {.&{......{&.{ ....{....{.... .......d..b... ..b..{d.{..{.. .....*{{*..... {..{.{w&{.{..{ ..{{..{{..{{.. .....{..{..... Level: Ade Colored Stars Bricks: .............. ......!!...... .....!!!!..... ....!!!!!!.... ...!!!..!!!... ..!!!....!!!.. .!!!......!!!. !!!........!!! !!....!!....!! !!!........!!! .!!!......!!!. ..!!!....!!!.. ...!!!..!!!... ....!!!!!!.... .....!!!!..... ......!!...... .............. .............. Bonus: .....jjjj..... ....jjp.jj.... ...jj....jj... ..jd...0..dj.. .jj...jj.c.jj. jj...j..j...jj j.c.j....j...j ...j......j... ..5j......j5p. .0.j......j... ....j....j..0. .....jjjj..... ..&p..j<...... ...d......d... ......p....... .............. .............. .............. Level: Ade Red Hot (Chilli Peppers) Bricks: .*v*v****v***. .***v*vv*vv*v. .*v*v****vv*v. .............. .*vvvvvvvvvv*. .*v********v*. .*v*vvvvvv*v*. .*v*v****v*v*. .*v*v*vv*v*v*. .*v*v*vv*v*v*. .*v*v****v*v*. .*v*vvvvvv*v*. .*v********v*. .*vvvvvvvvvv*. .************. vvvvvvvvvvvvvv ************** .............. Bonus: ..{.{....{.... ....{.{{.{{.{. ..{.{....{{.{. .............. ..{{{{{{{{{{.. ..{........{.. ..{.{{{{{{.{.. ..{.{....{.{.. ..{.{.{{.{.{.. ..{.{.{{.{.{.. ..{.{....{.{.. ..{.{{{{{{.{.. ..{........{.. ..{{{{{{{{{{.. .............. {{{{{{{{{{{{{{ .............. .............. Level: Ade Long Misty Days Bricks: .............. .aa.aa..aa.aa. ..bbb....bbb.. .cc.cc..cc.cc. .............. .cc.cc..cc.cc. ..bbb....bbb.. .aa.aa..aa.aa. .............. .............. .aa.aa..aa.aa. ..bbb....bbb.. .cc.cc..cc.cc. .............. .cc.cc..cc.cc. ..bbb....bbb.. .aa.aa..aa.aa. .............. Bonus: .............. ....c......... ..f........... ...........2.. .............. ....j....2.... .............. ....}......... .............. .............. ..2......c.... ...........&.. .............. .............. .&..*....*.... .............. .............. .............. Level: Ade GreenWall Bricks: ############## f##..####..##f .f####..####f. f.f########f.f .f.f#....#f.f. ..f.f####f.f.. ...f.ffff.f... ....f....f.... ......xx...... .....xvvx..... ......xx...... ...x......x... ..xvx....xvx.. zffxffzzffxffz yyfffyyyyfffyy xxxfxxxxxxfxxx yyfffyyyyfffyy zfffffzzfffffz Bonus: .............. }............} .}..........}. }.}........}.} .}.}......}.}. ..}.}....}.}.. ...}.}}}}.}... ....}....}.... ......}}...... .....}&&}..... ......}}...... .............. ...m......m... .............. .............. m0...0..0...0m .............. .............. Level: Ade Stones Bricks: aa##EE@@EE##aa kk##EEaaEE##kk jj##Ea##aE##jj jj##xx##xx##jj kk#xx####xx#kk aa##########aa .............. .............. .............. .............. .............. .............. ..#vvvvvvvv#.. ..#vvvvvvvv#.. ..#vvvvvvvv#.. ..#vvvvvvvv#.. ..#fghijked#.. ..##########.. Bonus: .............. .............. .............. m............m .............. .............. .............. .............. .............. .............. .............. .............. ......ll...... .............. .....m&&m..... .............. ....l....l.... .............. Level: Ade Flag Bricks: aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh .............. .............. .............. Bonus: {{{{{{{{{{{{{{ {j{j{j{{j{j{j{ .............. ..d....j...d.. ....3.....3... {{{{{{{{{{{{{{ ......d....... .............. .b.b.b.b.b.b.. .............. jjjjjjjjjjjjjj ....w..c..w... .&&&......&&&. ..m........m.. .............. .............. .............. .............. Level: Ade Flag Bricks: .............. ffffffffffffff ffffffffffffff ffffffffffffff ffffffhhffffff fffffhhhhfffff ffffhhhhhhffff fffhhhhhhhhfff ffhhhhgghhhhff ffhhhhgghhhhff fffhhhhhhhhfff ffffhhhhhhffff fffffhhhhfffff ffffffhhffffff ffffffffffffff ffffffffffffff ffffffffffffff .............. Bonus: .............. }}}}}}}}}}}}}} ...........d.. }}}l}}}}}}}}}} .d....jj}..l.. }}}}}j..j}}}}} ....j....j.... .bb.bb....jbb. ..j........j.. ..j.d....44j.. ...j......j... ....j....j.... ..&.&j.+j.&.&. ......jj...... ...m...4...m.. .............. .............. .............. Level: Ade Darknes Bricks: .............. ......vv...... .....vvvv..... ....vv..vv.... ...vv....vv... ..vv......vv.. .vv........vv. .v....vv....v. .....vvvv..... ....vv..vv.... ...vv....vv... ..vv......vv.. .vv........vv. vv..........vv v............v aaaaaaaaaaaaaa .............. .............. Bonus: .............. ......dd...... .....dddd..... ....dd..dd.... ...dd....dd... ..dd......dd.. .dd........dd. .d....dd....d. .....dddd..... ....dd..dd.... ...dd....dd... ..dd......dd.. .dd........dd. dd..........dd d............d *d*d*d**d*d*d* .............. .............. Level: Ade Hotter Than Hell Bricks: #.#.######.#.# #.#.######.#.# ###...##...### #.#...##...#.# #.#...##...#.# .....vvvv..... ....vvvvvv.... ...vvvvvvvv... ..vvvvvvvvvv.. .vvvvvvvvvvvv. vvvvvv..vvvvvv vvvvv....vvvvv vvvv......vvvv vvv........vvv vv..........vv v............v .............. .............. Bonus: .............. .............. .............. .............. .............. .....{{{{..... ....{{{{{{.... ...{{{{{{{{... ..{{{{{{{{{{.. .{{{{{**{{{{{. {{{{{*..*{{{{{ {{{{*....*{{{{ {{{*......*{{{ {{*........*{{ {*..........*{ *............* .............. .............. Level: Ade Green Day Bricks: @@@@@@##@@@@@@ @@@@@#..#@@@@@ @@@@#....#@@@@ @@@#......#@@@ @@#........#@@ @#...xxxx...#@ #...xxxxxx...# ...xxxxxxxx... ..xxxxxxxxxx.. .xxxxx..xxxxx. xxxxx....xxxxx xxxx......xxxx xxx........xxx xx..........xx x............x .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .....}}}}..... ....}}}}}}.... ...}}}}}}}}... ..}}}}pp}}}}.. .}}}}p..p}}}}. }}}}p....p}}}} }}}p......p}}} }}p........p}} }p..........p} p............p .............. .............. .............. Level: Ade Rainbow Bricks: .............. ......dd...... .....dddd..... ....ddeedd.... ...ddehhedd... ..ddehhhhedd.. .ddehhffhhedd. ddehhffffhhedd dehhffggffhhed dhhffggggffhhd dhffgg..ggffhd dhfgg....ggfhd dhfg......gfhd dhfg......gfhd dhfg......gfhd .............. .............. .............. Bonus: .............. ......gg...... .....gggg..... ....gggggg.... ...gggggggg... ..gggggggggg.. .gggggggggggg. gggggggggggggg gggggggggggggg gggggggggggggg gggggg..gggggg ggggg....ggggg g*gg......gg*g gggg......gggg gggg......gggg .............. .............. .............. Level: Ade Yellow Stars Bricks: .............. ......hh...... ..h..heeh..h.. .heh.heeh.heh. ..h...hh...h.. .............. ......hh...... .h...heeh...h. heh..heeh..heh .h....hh....h. ...h......h... ..heh....heh.. ...h......h... .h....hh....h. heh..heeh..heh .h...heeh...h. ......hh...... .............. Bonus: .............. ......jj...... ..j..jjjj..j.. .jjj.jjjj.jjj. ..j...jj...j.. .............. ......jj...... .j...jjjj...j. jjj..jjjj..jjj .j....jj....j. ...j......j... ..jjj....jjj.. ...j......j... .j....jj....j. jjj..jjjj..jjj .j...jjjj...j. ......jj...... .............. Level: Ade Paddlers Bricks: .............. .............. .....j..j..... ....jj..jj.... ...jjj..jjj... ..jjjj..jjjj.. .jjjjk..kjjjj. jjjjkk##kkjjjj jjjkka##akkjjj jjkkba..abkkjj jkkcb....bckkj kkzc......czkk kyz........zyk xy..........yx x............x .............. .............. .............. Bonus: .............. .............. .....!..!..... ....!b..b!.... ...!b!..!b!... ..!b!b..b!b!.. .!b!b!..!b!b!. !b!b!>..>!b!b! b!b!>b..b>!b!b !b!>bw..wb>!b! b!>bw....wb>!b !>bw......wb>! >bw........wb> bw..........wb w............w .............. .............. .............. Level: Ade Why? Bricks: .............. ......d....... .....ddd...... ....ddddd..... ...ddd.ddd.... ...dd...ddd... ...d.....dd... .........dd... .........dd... ........ddd... .......ddd.... ......ddd..... .....ddd...... .....dd....... .....dd....... .....dd....... .............. .....dd....... Bonus: .............. ......?....... .....???...... ....?????..... ...???.???.... ...??...???... ...?.....??... .........??... .........??... ........???... .......???.... ......???..... .....???...... .....??....... .....??....... .....??....... .............. .....??....... Level: Ade Slow Motion Bricks: !!!!.......... ggg!.......... g!!!!......... gggg!......... !!gg!!!!!!.... gggg!!ggg!.... !!!g!!g!g!!.!! ..!gggg!gg!.!g ..!!!!g!gg!.!g .....!gggg!!!g .....!!!!g!g!g ........!gg!gg ........!!!!!! .............. .............. .............. .............. .............. Bonus: <<<<.......... <<<<<......... <<<<<<........ <<<<<<<<<<.... <<<<<<<<<<<... <<<<<>>>>>>>>>>>>> WWWWWWWWWWWWWW bbbbbbbbbbbbbb ************** >>>>>>>>>>>>>> >>>>>>>>>>>>>> bWbWbWbbWbWbWb WbWbWbWWbWbWbW bbbbbbbbbbbbbb bbbbbbbbbbbbbb .............. .............. Level: Ade The Dark Side Bricks: ##jjjjjjjjjjjj #.#jjjjjjjjjjj #.####jjjjjjjj #.##v#jjjjjjjj ##j######jjjjj jjj#j##v#jjjjj jjj#j#####j#jj jjjjjj##v#j#jj jjjjjj#j###jjj jjjjjjjjj#j#jj jjjjjjjjj#j#jj kkkkkkkkkkkkkk kjjkjjkjjkkjjk kkjkkjkkkkkkkk kjjkjjkjjkkjkj kjjkkkkjjkkjjk jjjjjjjjjjjjjj jjjjjjjjjjjjjj Bonus: ..mmmddddddddd ...mmddddddddd ......dddddddd ......dddddddd ..d......ddddd ddd.d....ddddd ddd.d.....d.dd dddddd....d.dd dddddd.d...ddd ddddddddd.d.dd ddddddddd.d.dd dddddddddddddd dddddddddddddd dbbddbbdbddbbd wwwwddwdddwwwd dddddddddddddd dddddddddddddd dddddddddddddd Level: Ade Some Colors Bricks: ...E##E@@EE##@ ....E##E@@EE## .....E##E@@EE# aaa...E##E@@EE a......E##E@@E a..aaa........ a..a.a........ a..a.aa....... aaaa.aa....... *x*a.aa.aaa... chcaaaa.a.a... jijijia.a.aaaa egegegaaa.aa.a !d!d!d!!a.aaaa hjhjhjhhaaaaa. kfkfkfkkfkfa.a gjgjgjggjgja.a !i!i!i!!i!i!i! Bonus: .............. .............. .............. .............. .............. 4............. .............. .............. .............. ........4..... l1...1........ .............. ...bl.....4... &?...*........ ...b.j........ *.w........... ...}...*}..... .....s........ Level: Ade XXX Bricks: a...a....a...a .a.a......a.a. ..a........a.. .a.a......a.a. a...a....a...a .............. ...d*dddd*d... ..ddd*dd*ddd.. .ddddd**ddddd. .ddddd**ddddd. ..ddd*dd*ddd.. ...d*dddd*d... .............. a...a....a...a .a.a......a.a. ..a........a.. .a.a......a.a. a...a....a...a Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Ade Dont Worry Bricks: .............. .............. ..vv..vvvvvv.. ..vv..vvvvvv.. ..vv..vv...... ..vv..vv...... ..vv..vv...... ..vv..vv...... ..vvvvvvvvvv.. ..vvvvvvvvvv.. ......vv..vv.. ......vv..vv.. ......vv..vv.. ......vv..vv.. ..vvvvvv..vv.. ..vvvvvv..vv.. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ......m....... .......m...... .............. .............. .............. .............. .............. .............. .............. .............. Level: Ade Flamengo Bricks: .!!!ddddddddd. .!!!ddddddddd. .!!!ddddddddd. .aaaaaaaaaaaa. .aaaaaaaaaaaa. .aaaaaaaaaaaa. .dddddddddddd. .dddddddddddd. .dddddddddddd. .aaaaaaaaaaaa. .aaaaaaaaaaaa. .aaaaaaaaaaaa. ..dddddddddd.. ..dddddddddd.. ...dddddddd... ....aaaaaa.... .....aaaa..... ......aa...... Bonus: .............. .........0.3.. ...0..d.+..... .....m........ ...0...l...... .&...3....b... .............. ...b....?..... ....s......d.. .........+.}.. ......b....... ...?3......... .........&.... .....}.s...... .............. ......m....... .............. .............. Level: Ade Pink & Blue Bricks: gggggggggggggg ......gg...... .iiii.gg.iiii. .i..i.gg.i..i. .ii.i.gg.i.ii. ..i.i....i.i.. iii.iiiiii.iii i............i iiiiii..iiiiii .....i..i..... g....i..i....g g.iiii..iiii.g g.i........i.g g.iii.gg.iii.g g...i.gg.i...g ggg.i.gg.i.ggg ....i.gg.i.... iiiii.gg.iiiii Bonus: jjjjjjjjjjjjjj ......{{...... .{}{}.55.}{}{. .}..{.55.{..}. .{}.}.ll.}.}{. ..{.{....{.{.. }{}.}{}}{}.}{} {............{ bb{}{}..}{}{bb .....{..{..... {....{..{....{ }.}{{}..}{{}.} {.{........{.{ }.}{}.{{.}{}.} {...{.}}.{...{ }{}.}.{{.}.}{} ....{.}}.{.... }}}}}.{{.}}}}} Level: Ade GreenHeart Bricks: .............. .....f..f..... ....ffffff.... ...ffffffff... ..f#f.ff.f#f.. .fff......fff. fff........fff #f..........f# ff..........ff #f..........f# f#f........f#f .f#f......f#f. ..f#f....f#f.. ...f#f..f#f... ....ff..ff.... ....#f..f#.... xxxxxf..fxxxxx yyyy......yyyy Bonus: .............. .....}..}..... ....}.33.}.... ...}.5...5}... ..}...bb...}.. .}.&......&.}. }............} .............. }b..........b} .............. }............} .}..........}. ..}.+....+.}.. ...}......}... ....}....}.... .............. .............. .............. Level: Ade NoIdea Bricks: ......jj...... !....jjjj....! i!..jjjjjj..!i !g!........!g! .!d!......!d!. ..!f!....!f!.. k..!h!..!h!..k kk..!i!!i!..kk kkk..!aa!..kkk kkk..!aa!..kkk kk..!i!!i!..kk k..!h!..!h!..k ..!f!....!f!.. .!d!......!d!. !g!........!g! i!..jjjjjj..!i !....jjjj....! ......jj...... Bonus: .............. ......<.f..... .............. ..f.........d. .............. ...?.......... .....+...d...b .!.....*...... ?.......!...w. .5.....b.....5 .......+...... .........c.... ....?......... ...*......*... .b..........?. ......ss...... .............. .............. Level: Ade Oxygen Bricks: .............. ..gggggggggggg .ggggggggggggg g.ggaaaggggggg .ggaagaagggggg g.gagggagggggg .ggagggagggagg g.gagggaggagag .ggagggagaggga g.gagggaggggga .ggaagaaggggag g.ggaaaggggagg .gggggggggaggg g.gggggggaaaaa .ggggggggggggg ..gggggggggggg .............. .............. Bonus: .............. .............. ......c.&?.0.. ...sj......... ........j.b.c. ......m....... ...?..0....... .....>...2.... ...b.........? ......j.<.&s.. .............. ....0....m.... ...w.......... ....&.2....... ...b....<.b.0. .............. .............. .............. Level: Ade Tchau Bricks: defghijk*!defg aaa..........h !a...........i *aaa.........j kaa..........k jaa.a.a......d i.a.a.a......e h.aaaaaaaa...* g...a.aa.a...! f...a.aaaaa.af e......a.aa.ag d......a.aa.ah k.........a.ai j.........aaaj i............k !............d *............e fghijk*!xyzabc Bonus: {}{}{}{}..}{}{ .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/SkillShot0000664000175000017500000002431212140767201015132 00000000000000Version: 1.00 Level: Daddy Page one Bricks: #c#!!!!!!!!#c# ###!!!!!!!!### !!!!##!!##!!!! ###!#!!!!#!### #c#!#!!!!#!#c# ###!!#!!#!!### !!!!!!##!!!!!! ###!!#!!#!!### #c#!#!!!!#!#c# ###!!!!!!!!### !!!!!!!!!!!!!! ###!#!!!!#!### #c#!!####!!#c# ###!!!!!!!!### !!!!!!!!!!!!!! ###!!#!!#!!### #c#!#vvvv#!#c# ####vvvvvv#### Bonus: .m.m......m.m. ...m.....0m000 00000000000000 333........333 3.3........3.3 333........333 .............. 222...**...222 2.2........2.2 222...&&...222 000000&&000000 333*..&&..*333 3.3w......w333 333...**...333 .*..w....w..*. ...*......*... .m....ww....m. j..j..ww..j..j Level: Daddy Page Two Bricks: gfgv.!.v!.v### fgf.v...v.!#f# gfg!.v.!.v.### fgE...v...vfgf gfEv.!.v.!.### fgE.v...v..#g# gfE!.v.!.vv### fgE...v...vgfg gfEv.!.v.!.### fgE.v...v..#g# gfE!.v.!.vv### EEE...v...vfgf v..v.!.v.!.### .v..v...v..#f# ..v..v.!.vv### .!.v!.v...vvvv ***********vvv vvvvvvvvvvvvvv Bonus: ???........44l ???........45l ???........44l ??...........5 ??.!!!!!!!!444 ??.55555555454 ??.!!!!!!!!444 ww...........5 ww.........444 ........c..454 mm.~~.*..cc444 ....~~c...c..5 c..c.~~c...444 .c..c.~~c.*454 ..c..c.~~>>444 >>>>>>>>>.>>jj sswwbbbwwss>jj WWWWWWWWWWWWWW Level: Daddy Page Three Bricks: dddddddddddddd djjjjjjjjjjjjd djddddddddddjd djdjjjjjjjjdjd djdjddddddjdjd djdjdjjjjdjdjd djdjddjjddjdjd djdjdjddjdjdjd djdjdjddjdjdjd djdjdjddjdjdjd djdjdjddjdjdjd djdjddjjddjdjd djdjdjjjjdjdjd djdjddddddjdjd djdjjjjjjjjdjd djddddddddddjd djjjjjjjjjjjjd dddddddddddddd Bonus: {{{{{{{{{{{{{{ {WWWWWWWWWWWW{ {W**********W{ {W*WWWWWWWW*W{ {W*W******W*W{ {W*W*WWWW*W*W{ {W*W*5WW5*W*W{ {W*W*W55W*W*W{ {W*W*W55W*W*W{ {W*W*W55W*W*W{ {W*W*W55W*W*W{ {W*W*5WW5*W*W{ {W*W*WWWW*W*W{ {W*W******W*W{ {W*WWWWWWWW*W{ {W**********W{ {WWWWWWWWWWWW{ {{{{{{{{{{{{{{ Level: Daddy Page Four Bricks: jjjjjjjjjjjjjj jxxxxxxxxxxxxj jxjjjjjjjjjjxj jxjxxxxxxxxjxj jxjxjjjjjjxjxj jxjxjxxxxjxjxj jxjxjjxxjjxjxj jxjxjxjjxjxjxj jxjxjxjjxjxjxj jxjxjxjjxjxjxj jxjxjxjjxjxjxj jxjxjjxxjjxjxj jxjxjxxxxjxjxj jxjxjjjjjjxjxj jxjxxxxxxxxjxj jxjjjjjjjjjjxj jxxxxxxxxxxxxj jjjjjjjjjjjjjj Bonus: ffffffffffffff fm..........mf f.~~~~~~~~~~.f f.~...mm...~.f f.~..4..4..~.f f.~..l..l..~.f f....~..~....f f.....44.....f f.....44.....f f.....44.....f f.....44.....f f..cp~..~pc..f f..cpl..lpcW.f f.Wcp4pp4pcW.f f.WccccccccW.f f.WWWWWWWWWW.f fww...mm...wwf ffffffffffffff Level: Daddy Page Five Bricks: xvvvvvzzvvvvvx vx....zz....xv yvx...zz...xvy vyvx..zz..xvyv v.yvx.zz.xvy.v v..yvxzzxvy..v v...yvxxvy...v v....yvvy....v v.....yy.....v v.....yy.....v v....yvvy....v v...yvxxvy...v v..yvxzzxvy..v v.yvx.zz.xvy.v vyvx..zz..xvyv yvx...zz...xvy vx....zz....xv xvvvvvzzvvvvvx Bonus: w.....ll.....w .2....&&....2. 3.2........2.3 .3.2......2.3. ..3.2....2.3.. ...3.2ww2.3... ....5.22.5.... .....5..5..... ......55...... ......55...... .....5..5..... ....5.22.5.... m..3.2ll2.3..m ..3.2.ww.2.3.. .3.2......2.3. 3.2........2.3 .2..........2. b.....bb.....b Level: Daddy Page Six Bricks: v!v!v!v!v!v!v! vvvvvvvvvvvvvv v!v!v!v!v!v!v! vvvvvvvvvvvvvv v!v!v!v!v!v!v! vvvvvvvvvvvvEE v!v!v!v!v!v!v! vvvvvvvvvvvvvv v!v!v!v!vEEEv! vvvvvvvvvvvvvv v!v!v!v!v!v!v! vvvvvvEEEvvvvv v!v!v!v!v!v!v! vvvvvvvvvvvvvv v!vEEEv!v!v!v! vvvvvvvvvvvvvv v!v!v!v!v!v!v! EEEvvvvvvvvvvv Bonus: ....b...b...b. ..p...p.g.g.gW *...~......... .dWd..j.>.l~<. j...........pw &.&.l.&.*.&... ............{} ..c.b.c~b.w.b. l............. .~>~jW..p.}{*j W.....!w!..... g.g.g......d.d ......w}{...W. .c<.w.*...w.~w *.......w..... .~p.}{gd.d..w. .w....!...*.!. ...Wb.w.bW.gb. Level: Daddy Page Seven Bricks: xxxxxxxxxxxxxx xe@x@exxe@x@ex x@exe@xx@exe@x xe@x@exxe@x@ex x@exe@xx@exe@x xe@x@exxe@x@ex x@exe@xx@exe@x xe@x@exxe@x@ex x@exe@xx@exe@x zz*z*z*z*z*z*z z*z*z*z*z*z*zz zEEEEEEEEEEEEz zzzzzzzzzzzzzz .............. EEEEEE..EEEEEE cbcbcbcbcbcbcb bcbcbcbcbcbcbc aaaaaaaaaaaaaa Bonus: mc..........cm cc..........cc .....w..w..... ....lm..ml.... ....cccccc.... .............. .............. .............. .............. ..2>2.mm2>2.2. .2.2>2cc.2>2.. .............. ....bwwwwb.... .............. .............. .............. 111.111111.111 1s1.1s11s1.1s1 Level: Daddy Page Eight Bricks: vvvvvvvvvvvvvv v............v v............. vvvvvvvvvvvvE. ...........vE. ...........vE. .vvvvvvvvvvvE. .v..........E. .v..........E. .vvvvvvvvvvvE. ...........vE. ...........vE. .vvvvvvvvvvvE. .v..........E. .v..........E. .vvvvvvvvvvvE. ...........vE. EvvvvvvvvvvvEE Bonus: .....WgW.....p .............p ~............. bb....&...ww.. .............. ...........~.. .ww..WjW..bb.. .............. .............. .....WgW..ww.. ...........~.. .............. ......&....... .............. .............. .....WjW...... .............. .f...WgW...f.. Level: Daddy Page Nine Bricks: iivvvviivvvvii ivivvivvivvivi ivviivvvviivvi ivviivvvviivvi ivivvivvivvivi iivvvviivvvvii iivvvviivvvvii ivivvivvivvivi ivviivvvviivvi ivviivvvviivvi ivivvivvivvivi iivvvviivvvvii iivvvviivvvvii ivivvivvivvivi ivviivvvviivvi ivviivvvviivvi ivivvivvivvivi iivvvviivvvvii Bonus: 22222222222222 22222dddd22222 00000d&&d00000 00000d&&d00000 00000dddd00000 00000444400000 00000444400000 0*000dddd000*0 00000d&&d00000 00w00d&&d00w00 0w000dddd000w0 00000444400000 jj000dddd000jj j0j00dddd00j0j j00jjd&&djj00j j00jjd&&djj00j j0j00dddd00j0j jj000dddd000jj Level: Daddy Page Ten Bricks: !..!######!..! ....#.##.#.... ....#.##.#.... !..!#.##.#!..! .#####EE#####. ....#.EE.#.... !..!#.EE.#!..! ....#.EE.#.... .############. ....#.##.#.... !..!#.##.#!..! ....#.##.#.... .#####EE#####. ....#vEEv#.... !..!#vEEv#!..! ....#.EE.#.... v####!EE!####v vvvvvvvvvvvvvv Bonus: ...m44l444m... ...m4.4l.4m... ....4.44.4.... w..w4.44.4w..w .44444..44444. ....4....4.... ....4....4.... ....4....4.... .444444444444. ....4.44.4.... ....4.44.4.... ....4.44.4.... .44444..44444. ....4*..*4.... ....4s..s4.... ....4....4.... .4444....4444. ......ww...... Level: Daddy Page Eleven Bricks: .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! ************** Bonus: .....mmmm..... gg..........gg dddddddddddddd .............. .............. dddddddddddddd .............. ggWWWWWWWWWWgg dddddddddddddd .............. .............. dddddddddddddd .............. bbWWWWWWWWWWbb dddddddddddddd .............. wwggWWWWWWggww dddddddddddddd Level: Daddy Page Twelve Bricks: ************** ************** ************** ************** ************** *****....***** *****.vv.***** *****.vv.***** *****.vv.***** *****.vv.***** *****.vv.***** *****.vv.***** *****....***** ************** ************** ************** ************** *EEEEEEEEEEEEE Bonus: }}}}}}}}}}}}}} ++++++++++++++ gggggggggggggg <<<<<<<<<<<<<< cccccccccccccc WWWWW....WWWWW ?????.55.????? bbbbb.55.bbbbb >>>>>.l5.>>>>> ddddd.5l.ddddd !!!!!.55.!!!!! ~~~~~.55.~~~~~ wwwww....wwwww !!!!!!!!!!!!!! wwwwwwwwwwwwww cccccccccccccc dddddddddddddd d............. Level: Daddy Page Thirteen Bricks: *v...xxx....v* *vvvvxxxvvvvv* *E*EvExEvE*E*E ****vExEv***** E*E*EExEE*E*E* *****ExE****** *E*E*ExE*E*E*E *****ExE****** E*E*EExEE*E*E* *****ExE****** *E*E*ExE*E*E*E *****ExE****** E*E*EExEE*E*E* .***.ExE****** .E.E.ExE*E*E*E .....ExE...... hhhhhExEhhhhhh EEEEEExEEEEEEE Bonus: .w...wlw....w. .....wbw...... ......w....... ......w....... ......b....... ......b....... ......w....... ......b....... ......w....... ......*....... ......w....... ......b....... ......w....... .............. .............. .............. 44444...444444 .............. Level: Daddy Page Fourteen Bricks: vvv.******.vvv v.....**.....v v.vvv....vvv.v v...vv..vv...v v.*.v.vv.v.*.v v...v.vv.v...v v.vvvv..vvvv.v v............v vvv.******.vvv .............. .vvv.vvvv.vvv. ...v.v..v.v... **.v.v..v.v.** **.v.v..v.v.** **.v.v..v.v.** ...v.v..v.v... .vvv.v..v.vvv. .....v..v..... Bonus: www.bbbbbb.www f.....bb.....f f............f f....5..5....f f.b...44...b.f f.....44.....f f....5..5....f f............f fff.bbbbbb.fff .............. .WWW.<<<<.WWW. ...W.<..<.W... bb.W.<..<.W.bb bb.W.<..<.W.bb bb.W.<..<.W.bb ...W.<..<.W... .WWW.<..<.WWW. .....<..<..... Level: Daddy Page Fifteen Bricks: vvvvvvvvvvvvvv v............v v............v v............v v.v..v..v..v.v v............v v............v v.v..v..v..v.v v............v v............v v.v..v..v..v.v v............v v............v v.v..v..v..v.v v............v v............v v............v vvvvvvvvvvvvvv Bonus: .-..?4.W..2?.. .............- j............. j............> <.p..1..1..p.+ !............. .............. ?.>..5..l..w.W .............. 2............3 ..5..?..W..?.. c............c .............. 3.b..b..b..b.? .............< ~............~ .............. wf+0d0+d0!4+f! Level: Daddy Page Sixteen Bricks: vv#k!k!k!k!#vv vv#!k!k!k!k#vv vv#k!k!k!k!#vv EEE!k!k!k!kEEE **#k!k!k!k!#** **#!k!k!k!k#** **#EEE##EEE#** ****#k!!k#**** **.*#!kk!#*.** **.*#k!!k#*.** **.*#EEEE#*.** **.*##kk##*.** **..!!##!!.... ....!#kk#!.... @kk@!!##!!@kk@ @kk@!#kk#!@kk@ @kk@!!##!!@kk@ @@@@!#!!#!@@@@ Bonus: .&.00000000.&. .&.00000000.&. .&.00000000.&. ...00000000... jj.00000000.jj jj.00000000.jj jj....ll....jj jjjj4&..&4jjjj jj.j4.&&.4j.jj jj.j4&..&4j.jj jj.j4....4j.jj jj.j44.&44j.jj jj....33...... .....3&.3..... 3..3..33..3..3 3mm3.3.&3.3mm3 3mm3++33++3mm3 3333+3++3+3333 Level: Daddy Page Seventeen Bricks: kkkkkkkkkkkkkk kddddddddddddk kdkkkkkkkkkkdk kdkddddddddkdk kdkdkkkkkkdkdk kdkdkddddkdkdk kdkdkdkkdkdkdk kdkdkdkkdkdkdk kdkdkdkkdkdkdk kdkdkdkkdkdkdk kdkdkdkkdkdkdk kdkdkdkddkdkdk kdkdkdkkkkdkdk kdkdkddddddkdk kdkdkkkkkkkkdk kdkddddddddddk kdkkkkkkkkkkkk kddddddddddddd Bonus: .............. .????????????. .?..........?. .?.????????.?. .?.?333333?.?. .?.?3????4?.?. .?.?3?l5?4?.?. .?.?3?45?4?.?. .?.?3?45?4?.33 .?.?3?45?4?333 .?.?3?45?4?.3. .?.?3?4??4?.3. .?.?3?4444?.3. .?.?3??????.3. .?.?3.......?3 .?.??????????3 .?...........3 .????????????3 Level: Daddy End of Game Bricks: zvyvxvigvxvyvz zvyvxvgivxvyvz zvyvxvigvxvyvz zvyvxvgivxvyvz zvyvxvigvxvyvz zvyvxvgivxvyvz zvyvxvigvxvyvz zvyvxvgivxvyvz zvyvxvigvxvyvz zvyvxvgivxvyvz zvyvxvigvxvyvz zvyvxvgivxvyvz zvyvxvvvvxvyvz zvyvxxxxxxvyvz zvyvvvvvvvvyvz zvyyyyyyyyyyvz zvvvvvvvvvvvvz zzzzzzzzzzzzzz Bonus: ....*4554*.... .....4554..... .....4554..... WWWWW4554WWWWW ...*.4554.*... ...*.4554.*... .....4554..... ...++4554++... fffff4554fffff .....4554..... ...--4bb4--... fffff4bb4fffff ....W4444W.... ....W.**.W.... -.WwwwwwwwwW.- -.W.}}..}}.W.- --{{..cc..{{-- }}++......++}} lbreakout2-2.6.5/client/levels/Celine0000664000175000017500000000563112140767201014420 00000000000000Version: 1.01 Level: Bertrand GRONDIN tres facile Bricks: .............. ..#.#.#.#.#.#. .............. cccccccccccccc cccccccccccccc ************** *vvvvvvvvvvvv* *vvvvvvvvvvvv* **####*####*** .............. ..d.dEEEd.d... @...........@@ .zzzzzzzzzzz.. .*z*z*z*z*z*.. .iiiiiiiiiii.. .............. .............. .............. Bonus: .............. ..~.~.~.~.~.~. .............. .............. .............. .............. .555555555555. .444444444444. .............. .............. .............. .............. .wwwwwwwwwww.. .mmmmmmmmmmm.. .slslwwwwsls.. .............. .............. .............. Level: Bertrand GRONDIN tres facile Bricks: .............. .............. .............. zzzzzzzzzzzzzz cccccccccccccc cccccccccccccc baaaabbaaaabba b####bb####bb# gggggggggggggg iiiiiiiiiiiiii hhhhhhhhhhhhhh .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. 5ll555ll55ll55 **..w....w..** cccc......cccc .mm0...mm0.... !1.21!!2..2!!1 pppppppppppppp W.f*jgg*fj*ggW ww+wwwww+wwww+ .............. .............. .............. .............. .............. .............. .............. Level: Bertrand GRONDIN tres facile Bricks: .............. .............. .bbbbbbbbbbb.. .##z##z##z##.. .@@z@@z@@z@@.. .bb*bb*bb*bb.. EEEEEEEEEE.... ***i***i***i** !!!!!!!!!!!!!! !!!!!!!!!!!!!! cccccvvvcccccc cccccvvvcccccc .#..#....#..#. .............. .............. .............. .............. .............. Bonus: .............. .............. .bb.......bb.. ...m..m..m.... .55m55m55m.... .bb.....&.bb.. .............. .wwm&}}mww.m.. **fjjf-**jjf-f !s.jjp??pjj.s! **+++www++++** bwbwwwbwbwwbww .............. .............. .............. .............. .............. .............. Level: Bertrand GRONDIN tres facile Bricks: @iiiic*******@ iiiiic*******c ii**ic#######c ii**ic*******c iiiiic*******c ddddddd!!!!ddd a*aaaaaz!!za*a #######vvvv### gggggccccggggg gggggccccggggg !!!!!!!!!!!!!! ************** ************** .............. .............. .............. .............. .............. Bonus: 5.00.........5 g............. ........--.... ..gg.......gg. ......gg...... w..pp....pp..w .......l..l... ..55...mmmm55. .............. .....s..s..... cc<.&mmmm&.....b.....>p .c..........c. f.f...mm...f.f .w...5.b&5..w. .??...j.b..??. .............. ......j..j.... ..{b5*.1&..b.. ......>1.}.... ..}.>}>1...}.. ....5.&.*..... ....5..1b<.... ....&&1.<&.... .??...bb...??. .fp.--..--.pf. pwf.~~..~~.fwc sc..{b..&m..p. ?>.+<+..+<+.s? Level: Wraithlord CrashMan Bricks: .............. .....dddd..... ....dcdddd.... c...ccccddc... c..cceacd.cc.. cc..eeeed.cc.. cc.deeeed.cc.. cd.deaaedddd.. ddcdeeeddddd.. ddcddddddddd.. ddccddjdd.dd.. d...cdddc.d... ....ccccc..... ...ccccccc.... ...cc...cc.... ...dd...dd.... ..ddd...ddd... .dddd...dddd.. Bonus: .............. .............. .....!..<..... .....!!j<..... ....+.pj<.+... ....5555..+... ...&5..5..w... ...&5pp5s..c.. *{w&555.sw.c.. *{w.jj.cs..c.. *{wwjj....{c.. *...bb..b.{... ....b}}}b..... ...&-&&&-..... ....-...-..... ...jj...jj.... ....f...f..... .w+wf...fw+w.. Level: Wraithlord BubbleMan Bricks: .....z........ .....yc....... .c....aaz..... ccc..zzzz..... ccc.zaaazj.... .c..zkakzj.... ....zakazj.... .jz..zkzy..... .zzz.ycy...... .zzz.cccjj.... ..zzjcccjj.... ...jj##c.x.... ....z##zxx.... .....zzzxx.... ....cc.cc..... ...xxx.zzz.... ...axx.aaa.... ..aaaa.aaaa... Bonus: .....!........ .....w........ .}............ *m*........... *m*.>jj.&..... .}..>..g...... ....>>.g&..... .bb....g&..... .bbp.<.&...... .bss.<<....... ..ssp>...c..j?<. ......}}+~.?.. .&?...w.~.w?.. .&?...w~~.w?.. .&?..>.....?.. .....4W....... ....*4W...4.*. .....4{...4{.. Level: Wraithlord QuickMan Bricks: ...h.......h.. ...h..ii..hh.. ...hhiiiihh... ....hiiihh.... ....hhhhhh.... ....hhhhci.... ....caeaciaa.. .haacaeaciaa.. hhaiaeeeiia@i. hh.iaeeeiai@ii ii.iiaeeaii.ii ii..iiaaii.iii iii.iiiiia.iii .ii.aiiiah.ii. .ii.iiiaah.... ...hiaaaii.... ...ii...iii... ..iii...iiii.. Bonus: ...c.......c.. ...c......cc.. ...c.???...... ....mm???}.... ....???....... ......?.p..... ....p!?!p???.. .5?.p!?!p.?... ?5?......m.... *5.?.?...m...? *5.???........ *p..?..w.?..5. .p...???.?.... ..}...w??..... ..}..ww--..... ...<<.++<<.... ...jj...jjj... ..>>>...>>>>.. Level: Wraithlord ProtoMan Bricks: .......iiii... ......iiibi... ......ibibi..i .....biaaiaaii ..iiibia!a!aii .iiiibbiaeaaib iiiiiiiieee.ia iii.bbbbeeebia i...ibbbbebbib ...iib.bbbbbib ...iii.bbbb.ib ...iki.ibbb.ib ...iki.iiii.ib ...iki.biiibib ...iii.bbbbbii ....i..ib.biai ......iii.iii. .....iiii.iiii Bonus: .............. ........jj.... ........j..... .............. ...&.???m.m.?. ..&&??.??...?f ..&.?...?...?j !...?jj.???*?j !...?j...??.?f .....j.4...*?f ...4...444..?f ...4p?.??.4.?f ...4p?..??..?f ...4p?.w...w.f .....?..www... .............. ........+.+... ......?<<.<f>?>f>?>f.. ..cc..cc..cc.. Level: Wraithlord MegaMan Bricks: vvv...ggE..vvv vvv..EEggE.vvv vvv.ggEggE.vvv vvv.ggEggE.vvv vvv.EEeeee.vvv ..gggEejej.vvv ..EggEeeee.... .EEggEeeke.gEE .EEggggeegEggg .EEvvgggggEkjk .EEvvgggggEggg .EEvvggggvvgEE ...vggggggv... ...ggEEEEgg... ..gggEEEEggg.. ..EggvEEvggEE. .EEEvvvvvvEEE. EEEE......EEEE Bonus: ccc........?m* c?c........?m* c?c.}}.....?m* c?c.}}.....?m* ccc...????.?m* ......?!?!.?m* ......????.... ......??!?.b.. .....ww??w.bp* ...mmwwwww.bpp ...mmbbbbb.bp* ...jjwwwwjjb.. ...mm}}}}mm... ...bb....bb... ..+++....+++.. ...wmj..jmw... ....cc++cc.... .............. lbreakout2-2.6.5/client/levels/Circle0000664000175000017500000002301612140767201014417 00000000000000Version: 1.00 Level: kl circle 1 Bricks: @@ffff@@ffff@@ ffcc@@@@@@ccff ffcc@@@@@@ccff !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!@@@@@@@!!!! @@@@@@@@@@@@@@ @@@@@zzz@@@@@@ zzzzzzzzzzzzzz zzzzzzzzzzzzzz !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! .............. .............. .............. .............. Bonus: ......44...... ..mm.4444.mm.. ..55.4444.55.. .............. .............. .bb.......bb.. .............. .....mmm...... ...4455544.... +...&&&&&....+ .....p.p...... ....!f**f!.... ?????????????? ??????ww?????? .............. .............. .............. .............. Level: kl circle 2 Bricks: !!!..!!!!..!!! !!!........!!! !!!.EEEEEE.!!! !!!..gggg..!!! @@@.g!!!!g.@@@ ...g!@xx@!g... ..g!@xxxx@!g.. .g!vxxvvxxv!g. g!@xxvvvvxx@!g g!@xxvvvvxx@!g .g!vxxvvxxv!g. ..g!@xxxx@!g.. ...g!@xx@!g... ....g!!!!g.... .....gggg..... .............. .............. .............. Bonus: ......mm...... .............. .............. .....????..... ......44...... .............. .............. ..4...55...4.. ...&.5ll5.&... ...&.5555.&... .+4...55...4+. ......**...... ......bb...... .....j44j..... .....????..... .............. .............. .............. Level: kl circle 3 Bricks: .....@@@@..... ....EvvvvE.... ....EvvvvE.... ....@vvvv@.... ...vvyyyyvv... ..vyyyyyyyyv.. ..vyyyyyyyyv.. ..vy******yv.. ..vy*cccc*yv.. ..vy*c@@c*yv.. .vyy*@@@@*yyv. vyy**@cc@**yyv vy**@gccg@**yv yy*@gggggg@*yy y**@gggggg@**y **@g......g@** *@gg......gg@* @gg........gg@ Bonus: .............. ......mm...... .............. .....3333..... ...33&**&33... ..3........3.. ..3........3.. ..3...bb...3.. ..3..5555..3.. ..3..&44&..3.. .3...4444...3. 3....4*m4....3 3...>w++w>...3 ...4.....p4... ...4......4... ..4........4.. .4..........4. 4............4 Level: kl circle 4 Bricks: !!!c*!!!!*c!!! !!!c*!!!!*c!!! !!*c*!!!!*c*!! !!*c*!!!!*c*!! !!!c*!!!!*c!!! !!!c*!!!!*c!!! !ccc******ccc! @@@ccc!!ccc@@@ .....@@@@..... ************** !!*!!!!!!!!*!! !!!!!!!!!!!!!! !!*!!!!!!!!*!! ******!!****** bbbzzzzzzzzbbb bzbbbbbbbbbbzb ....######.... ###........### Bonus: l5.&.m....&.5l 54..........45 44..........44 33..........33 22..........22 ........m..... &............& .............. .....????..... .............. .............. .............. .............. .............. >..s......s..> +w..........w+ .............. .............. Level: kl nuts Bricks: !!!!@!!!!@!!!! !!!!@!!!!@!!!! !!!!@!!!!@!!!! !!!!@!!!!@!!!! !!!!E!!!!E!!!! .............. !!!!E!!!!E!!!! !!!!.!!!!.!!!! !!!!.!!!!.!!!! !!!!.!!!!.!!!! !!!!.!!!!.!!!! ...@.@..@.@... @@@@.@@@@.@@@@ !!!!.!!!!.!!!! !!!!.!!!!.!!!! !!!!.!!!!.!!!! !!!!.!!!!.!!!! !!!!.!!!!.!!!! Bonus: 555m.5555.m555 5555.llll.5555 .............. .....4444..... .....****..... .............. m444.m44m.444m 5??5.5??5.5??5 5??5.5??5.5??5 5??5.5??5.5??5 ggg*.*44*.*ggg .............. .............. pppp.wwww.pppp ****.gggg.**** ++44.}}}}.44++ .............. .............. Level: kl nuts Bricks: EE...EEEE...EE !!...E!!E...!! !!.@.E!!E.@.!! EE.@.!!!!.@.EE !!.@.!!!!.@.!! !!.@.E!!E.@.!! EE.@.E!!E.@.EE !!.@.EEEE.@.!! !!.@......@.!! EE..........EE !!...EEEE...!! !!...@@@@...!! EE...bbbb...EE !!!E.cccc.E!!! !!!E.@@@@.E!!! !!!@......@!!! !!!@......@!!! EEE@......@EEE Bonus: .............. m.....&&....33 m...........33 .....*..*..... 33...*..*....m 33...........m ......&&...... m...........33 m...........33 .............. 33...........m 33...........m .....m&&m..... 554........455 554........455 554........455 554........455 .............. Level: kl blast Bricks: #*#*#*#*#*#*## *#*#*#*#*#*#** #*#*#*#*#*#*#* #*#*#*#*#*#*#* #*#*#*#*#*#*#* #*#*#*#*#*#*#* #*#*#*#*#*#*#* #*#*#*#*#*#*#* #*#*#*#*#*#*#* #*#*#*#*#*#*#* #*#*#*#*#*#*#* #*#*#*#*#*#*#* #*#*#*#*#*#*#* #c#c#c#c#*#*#* #c#c#c#c#*#*#* #z#z#z#z#z#z#* EEEEEEEEEEEE#* .............. Bonus: .?.?.?.?.?.?.. .............. .............. .............. .............. .............. .............. l............. .............. .............. .............. .............. .............. .&.&.......... .............. l..m.m.b.m.b.. .............. .............. Level: kl blast Bricks: .............. ..@@@....@@@.. .@###@vv@###@. @#v#*#@@#*#v#@ #vvv#*##*#vvv# b#*#*####*#*#b bb#*#*##*#*#bb bbvv*####*vvbb bbvvv####vvvbb xbvvv####vvvbx xbbbb####bbbbx xxxxx####xxxxx .....####..... .....####..... .....####..... .....####..... .....####..... .....####..... Bonus: .............. ..444....444.. ......mm...... ..&........&.. .lmb..55..bml. 4.....55.....4 44....55....44 ......55...... ......55...... *.....55.....* *.....55.....* ......55...... ......55...... ......55...... ......55...... ......55...... .............. .............. Level: kl suprise Bricks: ###*.@EE@.*### !!!#.!vv!.#!!! !!!#x@vv@.#!!! ###*x!vv!.*### EEEEx@vv@.EEEE ....x!vv!..... ###*x@@@@..### !!!#......*!!! !!!#......#!!! !!!#x@EE@x#!!! ###*x!vv!x*### EEEEx@vv@xEEEE ....x!vv!x.... ###*x@vv@x*### !!!#x!vv!x#!!! !!!#.@@@@.#!!! !!!#......#!!! ###........### Bonus: www........www 55mj..55..jm55 55&j..55..j&55 l.....55.....l ......55...... ......55...... .............. 55m........m55 4&4........4&4 444........444 ......ll...... ......55...... ......55...... ......55...... 55m...55...m55 4&3........3&4 443........344 www........www Level: kl hmmmm Bricks: i#cc!!!!!!cc#i i#cc!!!!!!cc#i i#cc!!!!!!cc#i i#cc!!!!!!cc#i EEcc@@@@@@ccEE *!!E!!!!!!E!!* *!!#!!!!!!#!!* *!!#!!!!!!#!!* *!!#!!!!!!#!!* *!!E!!!!!!E!!* *!!!!!!!!!!!!* **EEE####EEE** #!!!!!!!!!!!!# ##!!!!!!!!!!## ###!!!!!!!!### E###bbbbbb###E EE###bbbb###EE EEE###bb###EEE Bonus: l.m.233332.m.l l.m.233332.m.l ....233332.... ....233332.... ......55...... ....&&55&&.... ....?4554?.... ....?4554?.... ..*.?4554?.*.. ..*.?4554?.*.. ..*??4554??*.. .............. &>..........>& j&>........>&j ..&>......>&.. ....}....}.... .....}mm}..... .............. Level: kl pyramid Bricks: ggg#!!aa!!#ggg gg#!!aaaa!!#gg g#!!aa**aa!!#g #*!aa*##*aa!*# *#aa*#**#*aa#* **#*#*@@*#*#** ***#*E!!E*#*** **#*E!!!!E*#** ***E!!!!!!E*** ***!!!!!!!!*** **!!!!!!!!!!** #!!!!!!!!!!!!# !E!!!!!!!!!!E! .!E!!!!!!!!E!. ..!E!!!!!!E!.. ...!E!!!!E!... ....!E!!E!.... .............. Bonus: 555l......l555 .m..........m. m............m .............. .............. .............. ......55...... .....5445..... ....543345.... ...54322345... ..5432jj2345.. .5432....2345. ..32......23.. .............. ....m&..&m.... .....w..w..... .............. .............. Level: kl squares Bricks: #iiii@@@@iiii# #iiii....iiii# #iiii....iiii# #i@@@....@@@i# #iEEE!!!!EEEi# #iEii!!!!iiEi# #iEi######iEi# #iEi#iiii#iEi# #iEi#i##i#iEi# #iEi#i##i#iEi# #iEi#iiii#iEi# #cEi######iEc# #cEii!!!!iiEc# #cEEE!!!!EEEc# #*****!!*****# ######!!###### gggggg!!gggggg ######..###### Bonus: 03333....33330 03333....33330 03333....33330 0............0 0............0 0..4......4..0 0..4?....?4..0 0..4?l55l?4..0 0..4?5555?4..0 0..4?5555?4..0 0..4?5555?4..0 0..4?....?4..0 0..4......4..0 0m....gg....m0 0.....gg.....0 0.jj..ww..jj.0 ..++&&ww&&++.. .............. Level: kl squares Bricks: !!!!######!!!! !!!#!!!!!!#!!! !!#y******y#!! *#yy@@EE@@yy#* #*#y!!!!!!y#*# @*yy!!!!!!yy*@ @*#y!!!!!!y#*@ @*yy!!!!!!yy*@ @*#y!!!!!!y#*@ @*yy!!!!!!yy*@ @*#y!!!!!!y#*@ @*yy!!!!!!yy*@ E*#*!!!!!!*#*E #E*!hhhhhh!*E# !#E!hhhhhh!E#! b!#EhhhhhhE#!b bb!#hhhhhh#!bb bbb!######!bbb Bonus: .............. ....l.jj.l.... &m..........m& .............. ....b.gg.b.... .....3333..... .....4444..... .....4554..... .....4554..... .....4554..... .....4444..... .....3333..... .............. m.....gg.....m mm....jj....mm .+...&jj&...+. ..+..wwww..+.. ...+......+... Level: kl squares Bricks: iiiE!!!!!!Eiii iiiE!!!!!!Eiii iiiE!!!!!!Eiii iii*!!!!!!*iii iii*!!!!!!*iii @@@@EEEEEE@@@@ gggg!!!!!!!ggg gggg!!!!!!!ggg gggg!!!!!!!ggg EE@@!*****!@EE **@@!@vvv@!@** *@**!@vvv@!*@* @!*@!@vvv@!@*@ !!!@!@vvv@!@!! !aa@!@@@@@!@a! !aa@!!!!!!!@a! !aa@@@@@@@@@a! !cccccccccccc! Bonus: m.l.444444.l.m ....444444.... ....444444.... ....444444.... ....444444.... .............. g............g .............. m............m .............. ......555..... ....m.555.m... ....?.555.?... ....?.&5&.?... ....?.....?... ....???????... .............. +.*&&wwwww&&*+ Level: kl wine Bricks: ..vv......vv.. ...v......v... ...#......#... ...#.vvvv.#... ...#iiiiii#... ...#iiiiii#... ...#iiiiii#... ...#iiiiii#... ...##iiii##... ....E#ii#E.... .....E##E..... ......##...... ......##...... ......##...... ......##...... ......##...... ......##...... .....####..... Bonus: ..+&......&+.. ...m......m... .............. ......**...... ....000000.... ....111111.... ....222222.... ....333333.... .....4444..... ......55...... .............. .............. .............. .............. .............. .............. .............. .............. Level: kl scotch Bricks: .............. .............. .............. .............. ...E.vvvv.E... ...#.ccvv.#... ...#ecceee#... ...#eeeecc#... ...EcceeccE... ...#cceeee#... ...#eeeeee#... ...#eeeeee#... ...#eeeeee#... ...EeeeeeeE... ...#eeeeee#... ...##eeee##... ....#eeee#.... ....EEEEEE.... Bonus: .............. .............. .............. .............. ........*..... .....*........ .......gg..... ......gg...... ....*....*.... ......&..&.... .............. .............. .............. .............. ....333333.... .....4444..... .....5555..... .............. Level: kl random Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: j.j.j..!55.-+- .!.!pgjl.!p!.b j>s.c...!&f.-j .s>..j}..p.j.} ++g5!j.!4.!..! pc..s-W....l-3 .!g+s.W+.pg..+ .pl+5s**.!.!5f !w.>.!**-jg.p* -!&.+}s4!>.-.* -.&!p+5.5j..!* .!s&.!sbb.j-.* !.f!5..!!!ww.! 5sgb+.!ps.w.jc s.!.g}+p-.s!.. ++..+bg3.!.j.. .&-!0gf.+j...! !b*ww-.!...!sg lbreakout2-2.6.5/client/levels/Maze0000664000175000017500000001213012140767201014105 00000000000000Version: 1.00 Level: michael hmmmmm????? Bricks: !EvEvEvEvEvE*E **v!vv!v!v!v** E*EvEvEvEvEvE* **!!!!!!!!!!!* *!xxxxxxxxxx** *EyEyEyEyEyE*E **zzzzzzzzzz** !*aaaaaaaaaa!* E*EbEbEbEbEbE* **cccccccccc!* *!dddddddddd** *EeEeEeEeEeE*E **kkkkkkkkkk** !*jjjjjjjjjj!* E*EiEiEiEiEiE* **hhhhhhhhhh** *EgEgEgEgEgE*E *fffffffffff** Bonus: s.5.5.5.5.5.?. ??4b44b4b4b4?? .?.2.2.2.2.2.? ??bbbbbbbbbbs? ?sbbbbbbbbbb?? ?.0.0.0.0.0.?. ??bbbbbbbbbb?? p?wwwwwwwwwwp? .?.w.w.w.w.w.? ??bwbwbwbwbw+? ?+jjjjjjjjjj?? ?.j.j.j.j.j.?. ??~~~~~~~~~~?? *?dddddddddd*? .?.c.c.c.c.c.? ??{{{{{{{{{{?? ?.}.}.}.}.}.?. ?wWfWfWfWfWw?? Level: michael crazy!!!!! Bricks: @@@@@@@@@@@@@@ @************@ @*xxxj*jgxxx*@ @*xkxi*igxkx*@ @*xxxj*jgxxx*@ @*xhg@@@ghgy*@ @@ygh@v@hgyz@@ @@zyg!v!gyzz@@ @@zzy@@@yzzz@@ @@!*!x***!*!@@ @@*!***x!*!*@@ @@!*!x***!*!@@ @**!***x!*!**@ @*!*!x***!*!*@ @**!***x!*!**@ @*!*!x***!*!*@ @**!***x!*!**@ @*@@@@*@@@@@*@ Bonus: .............. .????????????. .?wwww?wbwww?. .?wbwb?bbwbw?. .?wwww?wbwww?. .?wbb...bbbw?. ..wbb.*.bbww.. ..wwb.*.bwww.. ..www...wwww.. ..?c?~ccc?c?.. ..c?ccc~?c?c.. ..?c?~ccc?c?.. .cc?cc?~?c?cc. .c?c?~?cc?c?c. .cc?cc?~?c?cc. .c?c?~?cc?c?c. .cc?ccc~?c?cc. .c....c.....c. Level: michael sizes!!! Bricks: ************** *!###c!###c!#* *#cccccE****#* *#cEEEEE*EEE#* *#cE*****E!!c* *#cEEEEEEE!!!* *#cE!!!!!!!E#* *#cEEE!!!!!!#* *#EE!!!!!!!!#* *!vE!EEEEEEE#* *cvEEEzzzzzz!* *#vEEzzzzzzzc* *#vEEzEEEEEE#* *#vEEEE!vycx#* *#vvvvEijkbz#* *#vvvvEdefgh#* *#####E!#####* ************** Bonus: bbbbbbbbbbbbbb bb...w?...bb.b b.?????.bbbb.b b.?.....b....b b.?.wwwww.--bb b.?.......---b b.?.-------..b b.?...-wwwww.b b....-------.b w--.m........b ww-...+++++++b w.-..+++++++ww w.-..+.......w w.-....+++++.w w.----.+++++.w w.----.+++++.w w......+.....w wwwwwwwwwwwwww Level: michael water Bricks: ************** *EEEEEEEEEEEE* *EvEEEEEEEEvE* *E.EaaEEaaEgE* *EgE!!EE!!EgE* *EgE!!EE!!EgE* *EgE!!EE!!EgE* *EgEggggggEgE* *ggEEgggEEEgg* *gggEcEcEcEgg* *EEgbkbgbkbgE* *EEgxgxgxgxgE* *EgEEyEgEyEEE* *EgEgEgggEgEE* *EggggggggggE* *EvggggggggvE* *EEEEEggEEEEE* ************** Bonus: bbbbbbbbbbbbbb b............b b.w........w.b b...pp..pp.m.b b.m.pp..pp.m.b b.m.pp..pp.m.b b.m.pp..pp.m.b b.m.mmmmmm.m.b bmm..mmm...mmb bmmm.?.?.?.mmb b..m???m???m.b b..m???m???m.b b.m..?.m.?...b b.m.m.mmm.m..b b.mmmmmmmmmm.b b.wmmmmmmmmw.b b.....mm.....b wwwwwwwwwwwwww Level: michael BOOM Bricks: *!!!!********* *############! *#*!!!!*****#! *#*########!#! *#*#*!!!!*#!#! *#*#*####*#!#* *#*#*#vv#*#!#* *#*#*#gf#*#*#* *#*#*#ih#*#*#* *#*#!#jk#*#*#* *#*#!#ed#*#*#* *#*#!#!##*#*#* *#!#!#!!!*#*#* *#!#!######*#* *#!#***!!!!*#* *#!##########* *#*******!!!!* *############# Bonus: bbbbbwwwwwwwwb b............b b.wbbbbbbbbb.b b.w........w.b b.w.{{****.w.b b.w.{....*.w.b b.w.{.??.*.w.b b.w.{.??.*.w.w b.w.{.??.*.w.w b.w.{.??.*.w.w b.w.{.??.*.w.w b.w.{.*..*.w.w w.w.{.****.w.w w.w.g......w.w w.w.bbbbbbbw.w w.w..........w w.bbbbbbbbbbbw w............. Level: michael BLIZZARD Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! E!!E!!E!!E!!E! ************** *vvvvzEEzvvvv* *vEEEzEEzEEEv* *vEczzEEzzcEv* *vEczzEEzzcEv* *vEczzEEzzcEv* *vEczzEEzzcEv* *vEczzEEzzcEv* *vEEEEEEEEEEE* *EEEEEEEEEEEE* Bonus: ffffffffffffff **ffff**ffff** **ffff**ffff** **ffff**ffff** ffffffffffffff ffffffffffffff ffffffffffffff .ff.ff.ff.ff.f .............. .WWWW!..!WWWW. .W...!..!...W. .W.**!..!**.W. .W.**!..!**.W. .W.**!..!**.W. .W.**!..!**.W. .W.*!!..!!*.W. .W............ .............. Level: michael FUN Bricks: ******EE****** *EEEE*EE*EEEE* *EddE*EE*EddE* *EeeE*EE*EeeE* *EkkE*EE*EkkE* *ajjE*EE*Ejja* *EiiE*EE*EiiE* *EhhE*EE*EhhE* *EggE*EE*EggE* *EfEE*EE*EEfE* *EE***EE***EE* *EE*EEEEEE*EE* *EE*EEEEEE*EE* *EE*E****E**E* *E**E*EE*EE*E* *E*EE*EE*EE*E* *E****EE****E* *EEEEEEEEEEEE* Bonus: wwwwww..wwwwww ww...w..w....w w.bb.w..w.bb.w w.bb.w..w.bb.w w.bb.w..w.bb.w wbbb.w..w.bbbw w.bb.w..w.bb.w w.bb.w..w.bb.w w.bb.w..w.bb.w w.b..w..w..b.w w..bww..wwb..w w..b......b..w w..b......b..w w..b.bbbb.bw.w w.wb.w..w..w.w w.w..w..w..w.w w.wwww..wwww.w w............w Level: michael FUN Bricks: vv************ !v*!!!****!!!* !v*!*!****!*!* !v*!!!****!!!* !v************ !vdddddzaaaaab !vdddddzaaaaab !!!g!!!z!!!bbb !E!g!E!z!E!ccc !E!g!E!z!E!c!! !E!g!E!z!E!cxy !!!g!!!z!!!cxy eeegfffziiicxy !E!g!!!zijjxxy !E!g!EEzijkyyy !!!g!!!zijkkkk hhhgEE!zijjjjj hhhg!!!ziiiiii Bonus: bbwwwwwwwwwwww 5bw***wwww***w 5bw*w*wwww*w*w 5bw***wwww***w 5bwwwwwwwwwwww 5b-----?ddddd~ 5b+++++?ddddd~ 555f444?333~~~ 5.5f4.4?3.3jjj 5.5f4.4?3.3j22 5.5f4.4?3.3j{} 555f444?333j{} WWWf&&&?>>>j{} 1.1f000?><<{{} 1.1f0..?><<<<< !!!f000?>>>>>> Level: michael FUN Bricks: dddddddddddddd kk***kkkkkkkkk EiEiEiEiEiE!Ei EhEhEhEhEhEhEh EgEgEgEgEgEgEg EfEfEfEfEfEfEf **E**jEjEjEjEj EeEeEeEeEeEeEe EcEcEcEcEcEcEc Eb.b.b.b.b.b.b aa*aaadada!a!a @@*@@@d@d@!@!@ ##*###d#d#!#!# EE*EEEdEdE!E!E ..*vvvdvdv!v!v ..*vvvdddv!v!v .EEEEEEEEEEEEE ************** Bonus: --{{cc~~>>**pp &&bbb&&&&&&&&& ...........*.. .5.5.5.5.5.5.5 .m.m.m.m.m.m.m .}.}.}.}.}.}.} bb.bbW.W.W.W.W .j.j.j.j.j.j.j .c.c.c.c.c.c.c .............. ..b...l.l.g.g. ..b...l.l.g.g. ..b...l.l.g.g. ..b...l.l.g.g. ..b...l.l.g.g. ..b...lll.g.g. .............. wwwwwwwwwwwwww lbreakout2-2.6.5/client/levels/P.I.T.A.0000664000175000017500000004411412140767201014245 00000000000000Version: 1.00 Level: G Nooks & Crannies Bricks: ...!#....#!... .####.##.####. ....#.!!.#.... ...!#.##.#!... !#.##....##.#! ##..##..##..## ....#....#.... !...#!..!#...! #.#!#....#!#.# ..####..####.. ...#!#..#!#... ...#.#..#.#... .#!#.#..#.#!#. .###......###. ..!#......#!.. ...###..###... .............. .............. Bonus: ..55......55.. .....5..5..... ..55.5555.55.. 5555.5..5.5555 5.5........5.5 .............. 55...5555...55 5555.5555.5555 .5.5.5555.5.5. .............. ....5....5.... .55.5....5.55. ..5........5.. .............. .55........55. .55........55. .............. .............. Level: G Balls Vs. Timer Bricks: !!!!!!!!!!!!!! .............. .............. .............. .............. zzz@zz@zzzz@zz zzzz@zzz@z@zzz z@z@z@zzzzzz@z @@zzzz@z@z@zz@ .............. .............. .............. .............. @zzzz@zzz@zzzz zz@zzz@z@zz@z@ zzzzzzz@z@zz@z @zz@zz@zzzz@zz .............. Bonus: ffffffffffffff 55555555555555 .............. .............. .............. 555.55.5555.55 5555.555.5.555 5.5.5.555555.5 ..5555.5.5.55. .............. .............. .............. .............. .&bbb.&bb.bbb& bb.bbb.b.bb.b. bbbbbbb.b.bb.w .bb.bb.bbbb.ww .............. Level: G Big Zero Bricks: .............. .EEEEEzzEEEEE. .EE........EE. .EE.zzzzzz.EE. .EE.zgggzz.EE. .EE.zgggzz.EE. .EE.zggzdz.EE. .EE.zggzdz.EE. .EE.zggzdz.EE. .EE.zggzdz.EE. .EE.zgzddz.EE. .EE.zgzddz.EE. .EE.zgzddz.EE. .EE.zgzddz.EE. .EE.zzdddz.EE. .EE.zzzzzz.EE. ..E........E.. ..EEEEEEEEEE.. Bonus: .............. .............. .............. ....555555.... ....5...55.... ....5...55.... ....5..5.5.... ....5..5.5.... ....5..5.5.... ....5..5.5.... ....5.5..5.... ....5.5..5.... ....5.5..5.... ....5.5..5.... ....55...5.... ....555555.... .............. .............. Level: G Have "Fun" Bricks: z.!..h..h..!.z @.@.!@!!@!.@.@ z.y..h..h..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ cccccccccccccc cccccccccccccc Bonus: 55555m55m55555 5555w5ww5w5555 5.5555555555.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 b>b>b>b>b>b>b> >b>b>b>b>b>b>b Level: G Aim Carefully! Bricks: g@....gg....@g @@...@gg@...@@ .....@@@@..... .!..@....@..!. ......@@...... .....@gg@..... .!..........!. ......@@...... .............. .!..........!. ...@......@... ..@..@..@..@.. @@..........@@ .....!..!..... .............. .............. ..!..!..!..!.. .............. Bonus: m.....mm.....m ......mm...... 555........555 5.5........5.5 555........555 555...ff...555 5.5........5.5 555........555 555........555 5.5........5.5 555........555 .............. ....555555.... ....5.55.5.... ....555555.... .555555555555. .5.55.55.55.5. .555555555555. Level: G Hard Shot II Bricks: .............. .EEEE@..@EEEE. .Ezzz....zzzE. .Ezcc.EE.cczE. .Ezch....hczE. .EzchdiidhczE. .EzchdiidhczE. .EzchdiidhczE. .EzchdiidhczE. .EzchddddhczE. .EzchhddhhczE. .EzcchddhcczE. .EzzchhhhczzE. .EEzcccccczEE. ..EzzzzzzzzE.. E.EEEEEEEEEE.E .............. .............. Bonus: .............. .............. ..555....555.. ..555....555.. ..555....555.. ..5555555555.. ..5555555555.. ..5555555555.. ..5555555555.. ..5555555555.. ..5555555555.. ..5555}}5555.. ..5555555555.. ...55555555... ...555mm555... .............. .............. .............. Level: G Symmetric Death III Bricks: hh.hhhhhhhh.hh @@v@@hhhh@@v@@ @...@ihhi@...@ @.E.@iiii@.E.@ @...@giig@...@ EEvEEggggEEvEE E...EdggdE...E E.@.EddddE.@.E E...E.dd.E...E @@v@@.@@.@@v@@ @...@....@...@ @.E.@@vv@@.E.@ @...@....@...@ EEvEE.EE.EEvEE E...E....E...E E.@.EEvvEE.@.E E...E....E...E EE.EE.EE.EE.EE Bonus: l*.ffffffff.*l ..f..>>>>..f.. .....3>>3..... .....3333..... .....4334..... ..f..4444..f.. .....5445..... .....5555..... ......55...... ..5........5.. .............. ......55...... .............. ..5........5.. .............. ......55...... .............. .............. Level: G CrazyBounce Bricks: iiiihhhhhhiiii iiiivggggviiii iiiivvffvviiii iiiivvvvvviiii iiiivvvvvviiii iiiivvjjvviiii iiiiveeeeviiii iiiiddddddiiii iiiiiiiiiiiiii iiii......iiii iiii.@..@.iiii ......@@...... i@..@.@@.@..@i @..@..@@..@..@ .............. ..@..@..@..@.. i@..@....@..@i @..@..@@..@..@ Bonus: m...ffffff...m ....5ffff5.... ....55ff55.... ....555555.... ....555555.... ....55..55.... f...5....5...f ff..........ff fff........fff ffff......ffff ffff......ffff .............. .............. .............. .............. .............. .............. .............. Level: G Pure Evil Bricks: @@.cccccccc.@@ @..c......c..@ @..c.zzzz.c..@ @.cc.z!!z.cc.@ @.c..z!!z..c.@ @.c.zz!!zz.c.@ @.c.z!!!!z.c.@ @.c.z!!!!z.c.@ @.c.zz!!zz.c.@ @.c..z!!z..c.@ @.cc.zzzz.cc.@ @..c......c..@ @@.cccccccc.@@ z@..........@z .@@@@....@@@@. ...@......@... @..@......@..@ @@.@@.@@.@@.@@ Bonus: l.....mm.....l .............. .....4444..... .....4554..... .....4554..... ....445544.... ....455554.... ....455554.... ....445544.... .....4554..... .....4444..... .............. ...>>>>>>>>... .............. .............. .............. .............. .............. Level: G Fast & Weak Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! .............. .............. Bonus: 5W>g5W>g5W>g5W W>g5W>g5W>g5W> >g5W>g5W>g5W>g g5W>g5W>g5W>g5 5W>g5W>g5W>g5W W>g5W>g5W>g5W> >g5W>g5W>g5W>g g5W>g5W>g5W>g5 5W>g5W>g5W>g5W W>g5W>g5W>g5W> >g5W>g5W>g5W>g g5W>g5W>g5W>g5 5W>g5W>g5W>g5W W>g5W>g5W>g5W> >g5W>g5W>g5W>g g5W>g5W>g5W>g5 .............. .............. Level: G Shoot & Dodge Bricks: zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz .............. .............. .............. .............. Bonus: f>p5f>p5f>p5f> >p5f>p5f>p5f>p p5f>p5f>p5f>p5 5f>p5f>p5f>p5f f>p5f>p5f>p5f> >p5f>p5f>p5f>p p5f>p5f>p5f>p5 5f>p5f>p5f>p5f f>p5f>p5f>p5f> >p5f>p5f>p5f>p p5f>p5f>p5f>p5 5f>p5f>p5f>p5f f>p5f>p5f>p5f> >p5f>p5f>p5f>p .............. .............. .............. .............. Level: G Stars! Bricks: .............. ..@.......@... .@h@.@a@.@h@.. ..@...@...@... .............. ..@...@...@... .@h@.@h@.@h@.. ..@...@...@... .............. ..@...@...@... .@h@.@h@.@h@.. ..@...@...@... .............. ..@...@...@... .@h@.@h@.@h@.. ..@...@...@... .............. .............. Bonus: .............. ..5.......5... .5l5.5m5.5l5.. ..5...5...5... .............. ..5...5...5... .5.5.5.5.5.5.. ..5...5...5... .............. ..5...5...5... .5.5.5.5.5.5.. ..5...5...5... .............. ..5...5...5... .5m5.5.5.5m5.. ..5...5...5... .............. .............. Level: G Symmetric Death IV Bricks: cEEEEEEEEEEEEc cEcEcEccEcEcEc bEcEcEccEcEcEb aEbEbEbbEbEbEa ...E.EaaE.E... EE.E.EaaE.E.EE cE...EaaE...Ec cEEE.EaaE.EEEc bEbE.E..E.EbEb aEaE......EaEa .E.EEE..EEE.E. .E..........E. .EEEEE..EEEEE. .EEEEE..EEEEE. .............. EEEEEE..EEEEEE cba........abc EEEEEE..EEEEEE Bonus: 5............5 5.5.5.55.5.5.5 ..5.5.55.5.5.. >............> ......ff...... ......ff...... 5.....ff.....5 5.....ff.....5 .............. >.>........>.> .............. .............. .............. .............. .............. .............. 5.>........>.5 .............. Level: G Can U Do It? Bricks: vjzjzzzzzzjzjv #jzjzzzzzzjzj# jjjjjjjjjjjjjj jijijjjjjjijij jijijjjjjjijij jijijjjjjjijij jijijjjjjjijij ffffffffffffff fhhhhhhhhhhhhf fhgggggggggghf fhgddddddddghf fhgd!!!!!!dghf fhgd!!!!!!dghf ####!!!!!!#### ...#!!!!!!#... .#.##@zz@##.#. .....v..v..... ##.########.## Bonus: ..5.555555.5.. ..5.555555.5.. m............m .............. .............. .............. .............. .............. .............. .............. .............. ....555555.... ....555555.... ....555555.... ....555555.... ......ww...... .............. .............. Level: G Maziac Bricks: cvcvcv..vcvcvc vcvcvc..cvcvcv ######..###### zzz#......#zzz zzz#......#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zz...#vv#...zz z....#vv#....z #####.vv.##### #............# #.#.#.##.#.#.# #...#....#...# ##.########.## Bonus: l.4.4....4.4.l m4.4.4..4.4.4m .............. 555........555 555........555 555...33...555 555...33...555 555...33...555 555...33...555 555...33...555 555...33...555 55....33....55 5.....33.....5 ......33...... .............. .............. .............. .............. Level: G A Toughie Bricks: !!!!!!!!!!!!!! ###.########## kkkkkkkkkkkkkk #########k#### jjjjjjjjjjjjjj ######k####### ffffffffffffff ############k# eeeeeeeeeeeeee ##k########### dddddddddddddd #########k#### gggggggggggggg ####k######### iiiiiiiiiiiiii k############# hhhhhhhhhhhhhh #############. Bonus: 55555555555m55 ...5.......... 55555555555555 .........l.... 55555555555555 .............. 5555m555555m55 ............l. 55555555555555 .............. 55555555555555 .........l.... 55555555555555 .............. 55555555555555 l............. 5555mwwwwwwwww .............. Level: G I'll Finish You Here! Bricks: ....E...E...EE !!..........!E !E....E...E... E....E...E.... ....E...E...E. ..!E...E...E.. ..E!..E...E..! ...E!E...E.... E...E!..E...E. !E...E!E...E.. !.E...E!..E..! !..E...E!E.... E...E...E!..E. !E...E...E!E.. !.E...E...E!.E !..E...E...E.! E...E...E...E! !E...E...E...E Bonus: 555........5.. 555........55. 5.5........555 .5............ .555.......... ..5.5.......55 .5.555......55 ..5.5.5.....55 .5.5.555...... 5...5.5.5...55 55...5.555..55 55....5.5.5.55 .5.....5.555.. 5.......5.5.5. 55.......5.55. 55........5.ll .5...........l 5...........l. Level: G Hell Lattice Bricks: EE.EE.EE.EE.EE EE.EE.EE.EE.EE ..!..!..!..!.. ..!..!..!..!.. EE.EE.EE.EE.EE EE.EE.EE.EE.EE ..!..!..!..!.. ..!..!..!..!.. EE.EE.EE.EE.EE EE.EE.EE.EE.EE ..!..!..!..!.. ..!..!..!..!.. EE.EE.EE.EE.EE EE.EE.EE.EE.EE ..!..!..!..!.. ..!..!..!..!.. EE.EE.EE.EE.EE EE.EE.EE.EE.EE Bonus: .............. ..5..5..5..5.. .5>55.55.55>5. .5.55.55.55.5. ..5..5..5..5.. ..5..5..5..5.. .5.55>55>55.5. .5.55.55.55.5. ..5..5..5..5.. ..5..5..5..5.. .5.55>55>55.5. .5.55.55.55.5. ..5..5..5..5.. ..5..5..5..5.. .5>55.55.55>5. .5.55.55.55.5. ..5..5..5..5.. .............. Level: G Ridiculousness Bricks: ...@cccccc@... .z.@.bbbb.@.z. ...@..aa..@... .z.@......@.z. ...@......@... .@@@......@@@. .@..........@. .@...@vv@...@. .@.!.@..@.!.@. .@...@..@...@. .@.!.@vv@.!.@. .@...@..@...@. .@.!.@..@.!.@. .@...@vv@...@. .@.!.@..@.!.@. .@...@..@...@. .@@@@@vv@@@@@. .............. Bonus: ....l5mm5l.... .5...5jj5...5. ......55...... .5..........5. .............. .............. .............. ..555.~f.555.. ..5.5....5.5.. ..555....555.. ..5.5.f~.5.5.. ..555....555.. ..5.5....5.5.. ..555.~f.555.. ..5.5....5.5.. ..555....555.. ......f~...... .............. Level: G Beat This... Bricks: .............. .....@..@..... .............. ....@.@@.@.... .............. ...@.@vv@.@... .....@vv@..... ...@.v@@v.@... .....@@@@..... ......vv...... ....@.@@.@.... .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ......55...... ......55...... .....5..5..... .............. ......55...... .............. .............. .............. .............. .............. .............. .............. .............. Level: G Maziac Bricks: #########ccccc ccc#c####ccccc ccc#c####c#### c#c#cccc#c#### c#c#cccc#c#ccc c#c###c##c#ccc c#c###c##c#c#c ccc#cccc#c#c#c ccc#cccc#c#c#c c#c####c#c#c## c#c####c#c#c## c#c#cccccccccc c#c#cccccccccc c#ccc########c c#ccc########c c#c#cccc#ccccc c#c#cccc#ccccc c############# Bonus: .........55555 1m1.l....45555 011.3....4.... 0.1.3333.4.... 0.1.33j3.4.555 0.1...3..4.445 0.1...3..4.4.5 0m1.3333.4.4.5 001.3333.4.4.l 0.1....3.4.4.. 0.1....2.3.3.. 0.1.22223j3344 0.1.2222233334 0.112........4 0.222........4 0.2.2222.55544 0.l.2222.55555 0............. Level: G Fun City End Bricks: !!!.!.!.!!!... .!..!.!.!..... .!..!!!.!!!... .!..!.!.!..... .!..!.!.!!!... .............. .............. .!!!.!..!.!!.. .!...!!.!.!.!. .!!!.!.!!.!.!. .!...!..!.!.!. .!!!.!..!.!!.. .............. .............. .............. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: ...5.5.5...5.. 5.55.5.5.555.. 5.55...5...5.. 5.55.5.5.555.. 5.55.5.5...5.. 555555555555.. 5555555555555. 5...5.55.5..55 5.555..5.5.5.5 5...5.5..5.5.5 5.555.55.5.5.5 5...5.55.5..55 5555555555555. .............. .............. .............. ffffffffffffff >>>>>>>>>>>>>> Level: G Fatal Doomsday End Bricks: .............. ddddd.d.d.dddd d.d.d.d.d.d... ..d...ddd.ddd. ..d...d.d.d... ..d...d.d.dddd .............. dddd.d..d.ddd. d....dd.d..d.d ddd..d.dd..d.d d....d..d..d.d dddd.d..d.ddd. .............. .............. !...!...!...!. ..!...!...!... .............. vvvvvvvvvvvvvv Bonus: .............. fffff.f.f.ffff f.f.f.f.f.f... ..f...fff.fff. ..f...f.f.f... ..f...f.f.ffff .............. ffff.f..f.fff. f....ff.f..f.f fff..f.ff..f.f f....f..f..f.f ffff.f..f.fff. .............. .............. ~...~...~...~. ..~...~...~... .............. >>>>>>>>>>>>>> Level: G Wonder Walls End Bricks: ccc.c.c.cccc.. .c..c.c.c..... .c..ccc.ccc... .c..c.c.c..... .c..c.c.cccc.. .............. .ccc.c...c.cc. .c...cc..c.c.c .cc..c.c.c.c.c .c...c..cc.c.c .ccc.c...c.cc. .............. cccccccccccccc cccccccccccccc cccccccccccccc vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. .5..5.5.5..... .5..555.555... .5..5.5.5..... .5..5.5.5555.. .............. .555.5...5.55. .5...55..5.5.5 .55..5.5.5.5.5 .5...5..55.5.5 .555.5...5.55. .............. 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: G T.C.S. End Bricks: ############## #!!!#!#!#!!!## ##!##!#!#!#### ##!##!!!#!!!## ##!##!#!#!#### ##!##!#!#!!!## ############## #!!!#!###!#!!# #!###!!##!#!#! #!!!#!#!#!#!#! #!###!##!!#!#! #!!!#!###!#!!# ############## ############## ###@###@###@## ############## #@###@###@###@ g############g Bonus: gggggggggggggg >5555555555f55 555555555f5555 555f555>555555 5f555f55555555 55>5555f555f>5 5555>555555555 55555555555555 jjjjjjjjjjjjjj 55555555555555 55f55555555555 55555>5f5f5>55 55555555555555 f555f5555555f5 555555555>5555 55555555555>55 555555f5555555 m5f5>55555555m Level: G TrickShot End Bricks: ############## #ccc##c#c#ccc# ##c###c#c#c### c#c#c#ccc#ccc# .#c#.#c#c#ccc# .#c#.#c#c#c### .#c#.#c#c#ccc# .###.######### .............. ############.. ccc#c###cc##.. c###cc##c#c#.. ccc#c#c#c#c#.. ccc#c#c#c#c#.. c###c#c#c#c#.. ccc#c#c#cc##.. ###########... .............. Bonus: .............. .555..5.5.555. ..5...5.5.5... m.5.m.555.555. ..5...5.5.555. ..5...5.5.5... ..5...5.5.555. .............. .............. .............. 555.5...55.... 5...55..5.5... 555.5.5.5.5... 555.5.5.5.5... 5...5.5.5.5... 555.5.5.55.... .............. .............. Level: G Jedi Adventure End Bricks: vvvvvvvvvvvvv@ v***v*v*v***v@ vv*vv*v*v*vvv@ @v*vv***v***v@ @v*vv***v***v@ @v*vv*v*v*vvv@ @v*vv*v*v***v@ vvvvvvvvvvvvvv v***v**v*v***v v*vvv**v*vv*v* v***v*v**vv*v* v***v*v**vv*v* v*vvv*vv*vv*v* v***v*vv*v***v vvvvvvvvvvvvvv .............. .............. .............. Bonus: .fff>...>...>. .555.5f5.555.. >.5f.5f5f5ff.. ..5..555.555.. ..5.>555>555.. ..5f.5f5.5ff.. ..5..5f5.555f. >...>....>.... .555.55f5.555. .5ff.55f5..5f5 .555.5f55.f5f5 .555>5f55>.5f5 .5ff.5..5..5f5 .555.5..5.555. >.f.>..f.>...f .............. .............. .............. Level: G Fatal Doomsday II End Bricks: zzz.z.z.zzz.@@ .z..z.z.z....@ .z..zzz.zzz... .z..z.z.z..... .z..z.z.zzz... .............. .zzz.z...z.zz. .z...zz..z.z.z .zzz.z.z.z.z.z .z...z..zz.z.z .zzz.z...z.zz. .............. z..z....zz.... zz@@@zz@@@@zz@ zzz@zzzzz@zzzz z@zzz@@@zzz@@z ...z..z..z.... .............. Bonus: 555.5.5.555... .5..5.5.5..... .5..555.555... .5..5.5.5..... .5..5.5.555... .............. .555.5...5.55. .5...55..5.5.5 .555.5.5.5.5.5 .5...5..55.5.5 .555.5...5.55. .............. *..*....**.... }}...}}....}}. .............. .............. .............. .............. Level: G Weirdness End Bricks: eeeeeeeeeeeeee @@@@@e@e@e@@@e @e@e@e@e@e@eee ee@eee@@@e@@ee ee@eee@e@e@eee ee@eee@e@e@@@e eeeeeeeeeeeeee @@@@e@ee@e@@ee @eeee@@e@e@e@e @@@ee@e@@e@ee@ @eeee@ee@e@ee@ @@@@e@ee@e@@@e eeeeeeeeeeeeee .............. .............. .............. .............. .............. Bonus: f.f.f.f.f.f.f. 55555.5.5.555. 5m5.5.5m5.5m.. ..5...555.55.. ..5...5.5.5... ..5...5.5.555. .f.f.f.f.f.f.f 5555.5..5.55.. 5....55m5.5.5m 555..5.55.5..5 5m...5..5.5..5 5555.5..5.555. f.f.f.f.f.f.f. .............. .............. .............. .............. .............. Level: G "The End" End Bricks: vvvvvvvvvvvvvv .............v .@@@.@.@.@@@.v ..@..@.@.@...v v.@..@@@.@@@.v v.@..@.@.@...v v.@..@.@.@@@.v .............. .@@@.@..@.@@@. .@...@@.@..@.@ .@@@.@.@@..@.@ .@...@..@..@.@ .@@@.@..@.@@@. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: 55555555555555 .............5 .............5 .............5 5............5 5............5 5............5 .............. .............. .............. .............. .............. .............. .............. 55555555555555 55555555555555 55555555555555 55555555555555 Level: G Secret Bonus Level! Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} bbbbbbbbbbbbbb wwwwwwwwwwwwww gggggggggggggg Level: G The End Bricks: ************** hhh*h*h*hhh*** *h**h*h*h***** *h**hhh*hhh*** *h**h*h*h***** *h**h*h*hhh*** ************** hhh*h**h*hhh** h***hh*h**h*h* hh**hh*h**h*h* h***h*hh**h*h* hhh*h**h*hhh** ************** EEEEEEEEEEEEE* ************** *******E****** EEEEEEE*EEEEEE .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. f.f.f.f..f.f.f f.f.f.f..f.f.f .............. .............. lbreakout2-2.6.5/client/levels/Symmetry-MKII0000664000175000017500000001333312140767201015577 00000000000000Version: 1.00 Level: Leo Gruyters Soft Start Bricks: .............. .............. ajjjjjjjjjjjja ja@gggggggg@aj jgav@v@@v@vagj jgva......avgj jg@.avEEva.@gj jgv.vaaaav.vgj jg@.Ea**aE.@gj jg@.Ea**aE.@gj jgv.vaaaav.vgj jg@.avEEva.@gj jgva......avgj jgav@v@@v@vagj ja@gggggggg@aj ajjjjjjjjjjjja .............. .............. Bonus: .............. .............. ..m..b..b..m.. .............. >..g..mm..g..> .b..........b. 1...j....j...1 .~....lg....~. ..}...55...{.. f.....55.....f .w..........w. >.?........?.> 1-..........-1 .*..........*. 0..0..00..0..0 ..~.-.ff.-.~.. .............. .............. Level: Leo Gruyters Nuclear Bricks: .....gggg..... ....gg**g..... ...gg*gg*gg... ..gg*gggg*gg.. .gg*ggddgg*gg. gg*ggeeeegg*gg g*ggbbbbbbgg*g *gg#@hhhh@#gg* *gffffffffffg* *giiddddddiig* *gddddddddddg* *gggggddggggg* g*gggjddjggg*g gg**ggjjgg**gg gggg*!jj!*gggg @@vvEj@@jEvv@@ .............. .............. Bonus: .....ffff..... ....ff00f..... ...ff0~~0ff... ..fw0~dd~0wf.. .ff0~d55d~0ff. ff0~d.ff.d~0ff w0~.j3333g.~0w 0~...f..f...~0 0............0 0.4..p-.-m.4.0 0.f........f.0 0.+..+bb+..+.0 ~0..........0~ w~00~.....00~w ..~~0-..-0~~.. ..w4.>..>.4w.. .............. .............. Level: Leo Gruyters Mine Bricks: .............. .ffffffffffff. .@@@@@bb@@@@@. .iiii#bb#iiii. .bbbb#bb#bbbb. .Ekfb#bb#bfkE. .Ekeb#bb#bekE. .Ekeb#bb#bekE. .Eke@#bb#@ekE. .Eke@#bb#@ekE. .Ekej#bb#jekE. .#####bb#####. .EEEEEaaEEEEE. .aaaaaaaaaaaa. .aaaaaaaaaaaa. .############. .############. .............. Bonus: .............. ..4.4m44}4.4.. .0?0w0?0?040?. .~..........~. .0~...p....~0. ..0.m...m..... .............. ....g.5..{.... .............. .............. ....*....*.... .............. ..0w..jj..w0.. .fm.mf..fm.mf. .sb-.++++.-bs. .+???+??+???+. .............. .............. Level: Leo Gruyters Volcano Bricks: .............. gggEjjjjjjEggg ggggjjjjjjgggg gggg!EjjEggggg ggggggjjgggggg aaaaa!**!aaaaa aaa..!**!..aaa aa...!@@!...aa a....!@@!....a .....v@@v..... ....va@@av.... ...va#EE#av... ..va#E###Eav.. .va########av. vaE#E#EEE#E#av a############a #ffffffffffff# .............. Bonus: .............. .............. ..*2.m..m.2*.. .2..l....g..2. ..p........p.. ......55...... .............. .............. .............. .............. .............. .............. .............. .............. .............. ..-.~f..f~.-.. .>m+..mm..+>m. .............. Level: Leo Gruyters Ufo Bricks: .............. .............. ......zz...... .....zjjz..... ....zj**jz.... ...xjEddEjx... ..xjddddddjx.. .xjeeeeeeeejx. xjhaahhhhaahjx jhEEahEEhaEEhj zjhaahhhhaahjz .zjEeeeeeeEjz. ..zjddddddjz.. ...@jddddj@... ...@vj**jv@... ...@.vjjv.@... ...@.v@@v.@... .............. Bonus: .............. .............. .............. ......55...... .............. .............. ...-p.ww.p-... ..>~......~>.. .0m.f.**.f.m0. 00...g..l...00 .0+3......3+0. ..3.bf..fb.3.. .....2ff2..... ......44...... .............. .............. .............. .............. Level: Leo Gruyters Staircase Bricks: .............. .............. .!E........... ..!#.......... ...!E......... ..!.!#........ .!E!.!E....... ..!.!.!#...... ...!E!.!E..... ..!.!.!.!#.... .!#!.!E!.!E... !.!.!.!.!.!#.. .!.!#!.!E!.!E. !.!.!.!.!.!.!# .!#!.!#!.!E!.! ..!...!...!... .............. .............. Bonus: .............. ..m........... .3.2.......... ....2......... ...2.m........ ......2....... .3.3.w.2...... ......5.m..... ...1.3.1.2.... ....*.....2... .~...~.3.~.m.. b.+.w.+.*.+.2. ...1.....1.2.2 ..>...>.3.>.3. .............. .............. .............. .............. Level: Leo Gruyters Alien City Bricks: .............. ......EE...... .....a##a..... ....aaEEaa.... ....@j##j@.... ..E.@aEEa@.... .aaa@a##a@.E.. .ea#@jEEj@aaa. .ej#@a##a@#ae. .ea#@aEEa@#je. .ea#@a##a@#ae. .ea#@aEEa@#ae. .ea#@EkkE@#ae. .ea#EkkkkE#ae. .ea#eeeeee#ae. .eaeeeeeeeeae. .effffffffffe. #ffff....ffff# Bonus: .............. .............. .............. .....5..5..... .....m..m..... .............. ..5..?..?..... .b...m..m..5.. .mm.........b. .b...W..W..mm. .m...>..>...b. .b2........2m. .m....mm....b. .b}........{m. ....g1.1.j..b. .w...wmmw...w. ..~f4~f4~f4~.. ..2+>.....>2.. Level: Leo Gruyters Evil Bricks Bricks: ...j#@@@@#j... a.a.j#@@#j.a.a a.#a.j##j.a#.a a.##a.jj.a##.a a.@##a..a##@.a ..j###aa###j.. ...j@####@j... ....j####j.... .....j##j..... .....j##j..... ....j####j.... ...j@####@j... ..j###aa###j.. a.@##a..a##@.a a.##a....a##.a a.#a......a#.a a.a........a.a .............. Bonus: ...1{~ff~{1... 5.g.lf~~fl.s.5 5..}.*{{*.}..5 4.{.?.11.?.{.4 4.f{.?..?.{f.4 ..+~{.??.{~+.. ...mf{{{{fm... ....+~..~+.... .....+~~+..... .....m~~m..... ....+~..~+.... ...mf{{{{fm... ..+~{.--.{~+.. +.f{.w..w.{f.+ -.{.+....+.{.- +............+ -............- .............. Level: Leo Gruyters Black Hole Bricks: .............. .!!keEEEEek!!. .!kk******kk!. .dekkeggekked. .dekkggggkked. .dee######eed. .dee#aaaa#eed. .deE#avva#Eed. .deE#avva#Eed. .deE#avva#Eed. .deE#avva#Eed. .dee#aaaa#eed. .dee######eed. .dekkggggkked. .dekkeggekked. .!kk******kk!. .!!keEEEEek!!. .............. Bonus: .............. .............. ..3.ffffff.3.. .W..111111..W. ...wmmmmmmw... .~.*......*.~. .>....l!....>. .fg..!55!...f. ..f...55...f.. ......55...... .fp...55...jf. .>00......00>. .............. .W*~000000~*W. ..+.wffffw.+.. .-..-.+..-..-. .............. .............. Level: Leo Gruyters Finale Bricks: .............. ************** *EEE********** **E*E****E**** **E*E***E***E* **E*EE**EE**** **E*EjEjE***** **E*E*E**E**** **j*********** **j*********** **EEE*******E* **E***E*****E* **E***EE****E* **EE**E*E**EE* **E***E*E*E*E* **E***E*E*E*E* **EEE*E*E**EE* ****j*j******* Bonus: .............. 55555555555555 5...5555555555 55.5.5555.5555 55.5.555.555.5 55.5..55..5555 55.5.5.5.55555 55.5.5.55.5555 55555555555555 gggggggggggggg }}...}}}}}}}.} .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Afl0000664000175000017500000002547612140767201013734 00000000000000Level: Latts AFL Bricks: .............. .............. dddd.ggg!.j... dddd.gEEg.j... d..d.g....j... d..d.!....j... d..d.g.vv.j.vv dccd.g....j... dddd.ggg..j... dddd.ggg..j... d..d.gcc..j... d..d.g....j... d..d.g.vv.j!cc d..!.g....jjjj d..d.g....jjjj .............. fzfzfzfzfzfzfz .............. Bonus: .............. .............. b..3.......... .....0....0... .............. .............. 3..s.1.1....2. ...?......s... *..+.......... .10.......3... .....~0....... <....3....?... .....>.2....0. 0............. ...<.-....0.>. .............. ..s-f..>..+... .............. Level: Latts Adelaide Crows Bricks: hhggddhhg!ddhh hh!g*dhhgg*dhh hhggddhhggddhh hhgEddhhEgddhh hhggddhhggddhh hhggddhhggddhh hhggddhhggddhh hhEgddhhgEddhh hhggddhhggddhh hhggddhh!gddhh hhggddhhggd*hh hhgEddhhEgddhh hhggddhhggddhh hh!gddhhggddhh hhggddhhggddhh hhEgddhhgEddhh hhggddhhggddhh hhggddhhggddhh Bonus: b...5.*......1 ...?.1j.&..... 2..3....1..2.. ......>....... ..0.1.2..j.?0. .0....f2..2... 2wcW......>4.2 ....+.1&...... 0...0.....5.0f p.d......3...1 5..3..0..<.... .{.....1.d!.?g ......0....0.. ~..2}........l 40f....?f....1 ....1...0..4.. .......1.0.... ...1>.2.+..... Level: Latts Brisbane Lions Bricks: hgggghgggggggh hggghhhggggggh hgghhhhggggggh hgghhhgggggggh hEEEhhhhhhheEh iiiihhhhhiiiii iiihhhhhhiiiii iiihihihhhiiii iiihihihiihiii iiiihihhihiiii #iiiiiiiiiiii# i#iiiiiiiiii#i ii##iiiiii##ii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii Bonus: ..........s>.. .0.?..-.<.3.-. ....Wf........ ~.l3.....2&.g. .......1...0.. ..+..4....0..~ *1.-...2...... ...>...W.2.{.? ..2.{.j....... w.2......2...1 .0.....5..>.-. ...f.4...f.... ........~1.... ..01...... ......0....... ............g. 1.30..51...-0. .0...........0 ..>..........- .....j?...0.3. .-..-......s.. .....0....~... ..w<.1..-..... .0.+..g....1.- .....1...0.... .............. Level: Latts Collingwood Magpies Bricks: jj..jj..jj.vjj jj..jj..jj..jj jj.vjj..jj..jj jj..jjv.jj..jj jj..jj..jj..jj jj..jj..jj..jj jjv.jj.vjjv.jj jj..jj..jj..jj jj..jj..jj..jj jj.vjjv.jj..jj jj..jj..jj.vjj jjv.jj.vjj..jj jj..jj..jj..jj jj..jj..jjv.jj jj.vjj.vjj..jj jj..jj..jjv.jj jjv.jj..jj..jj jj..jjv.jj.vjj Bonus: .....5........ 4............. ........2..... s....?s.....+. ........+...4. .4......>....0 ............m. +-..0....-...> .....c........ 1.....0....... 1...>...{...1. .{......j..... .............. 0.......b....0 ........-..... .....2...1..-? .............. .>..+-........ Level: Latts Essendon Bombers Bricks: ............vd ............dd .vv.......vddd .vv.......dddd .vv.....vddddd .vv.....ddddd# .vv...vddddd## ......ddddd### ....vddddd.vvv vvv.dddddv.... ###ddddd...... ##dddddv...vv. #ddddd.....vv. dddddv.....vv. dddd.......vv. dddv.......vv. dd............ dv............ Bonus: .............j .............. ..1.......5... ..>........p.0 .1.......~.4.. ............l. ..1...c.0.1+.. .......W..>... ....34.......g .&...?1f-d.... ....0..d...... ...3..>3...b.. ....{+........ ...1........?. -0.<.......... ..-........>.. .............. m............. Level: Latts Fremantle Dockers Bricks: ffffffvvdddddd ffffff..dddddd ffffff..dddddd ffffffvvdddddd ffffff..dddddd ffffff..dddddd ffffffvvdddddd ffffff..dddddd ...fff..ddd... ..ffffvvdddd.. v..fff..ddd..v .v.fff..ddd.v. .iv..fvvd..vi. ii.v.f..d.v.ii iii.v....v.iii iiiivvvvvviiii iiiii....iiiii iiiiii..iiiiii Bonus: ......{...b... ........3..d.. -.3......0..+- .....<.-?..... <...+....-.<.. ...d1....j..0. .{....5....... ...-....2..... ....0.....>... ..1....s.1.... ....>...?0...< .d.......d.... ..0...0....-.. ...1....0....> 0.p.4......1.. ...-.2+<-...3. ..>........... .....?..w..... Level: Latts Geelong Cats Bricks: aaaaaaaaaaaaaa aaaaaaaaaaaaaa EaaaaaaaaaaaaE jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj aaaaaaaaaaaaaa aaaaaaaaaaaaaa EEaaaaaaaaaaEE jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj aaaaaaaaaaaaaa aaaaaaaaaaaaaa EEEaaaaaaaaEEE jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj Bonus: ....s..W.....4 ?.-...0.~1.... .W.3.....-.>.. ..........s..* .0.f.g.>...{+. ..+.d.......0. b....c...d0?sj 5p..1.41.....l ..-<...!...<.. 0.>2.....2..W. .....W.....fm2 d4.d.f.....d.. ...{..0.<..0.. .f.+<.~..>f.d5 ....W...W..... ....2-...1dw.. .1............ f..<...3..-... Level: Latts Hawthorn Hawks Bricks: @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h @hh@hh@hh@hh@h Bonus: .......5...... .0......&..+.. ....0>..s.-s.. ..>....0...2.. ..?....2.....+ .3<..s.<}.>... ..c.1..w...-.0 ....b..>..w0.m .1..0..0..}... ..c.W~..c.14.. .lw.<..+...<.1 .bj.-3..-..0.. .-<.!s..<.g... .0&.2...1..c.c .....?.cW.>..? ..c.{......... .+>.+>..1..... ....w-.~..b+.+ Level: Latts Kangaroos Bricks: jjggjjggjjggjj jjggjjggjjggjj jjggjjggjjggjj jjggjjggjjggjj jjggjjggjjggjj jjggjjggjjggjj jjggjjEEjjggjj jjggjj..jjggjj jjggjvvgjjggjj jjggv..gjjggjj jjggjvvgjjggjj jjggjjvvjjggjj jjggjv..vjggjj EEggggg..vggEE ggggggvvvvgggg gggggv.ggvgggg gggg.vggg..vgg .............. Bonus: 00000000000000 0..<.-..-.<..0 0.{........{.0 0...?....?...0 0..+c>ff..>..0 0}!...l+>...}0 0>.j~.....g!.0 0.......>....0 0-..!.......-0 0..?....!.?..0 0...>......>+0 0>.f....>.f..0 0............0 ..-.>.w....-.. ~..<......<>.~ .............. .............. .............. Level: Latts Melbourne Demons Bricks: dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd adddddddddddda EEddddddddddEE aaaddddddddaaa aaaaddddddaaaa EEEEEddddEEEEE aaaaaaddaaaaaa aaaaaaaaaaaaaa EEEEEEEEEEEEEa aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa aEEEEEEEEEEEEE Bonus: 4...4..-.40..4 ...1......fp.. .W-.p.0.1...-. ..d.......W..0 1..-.s-...-1d. ..?....f...... ..0<.2...s<.1. .............. .-.....d.-.... 1...f.2...0... .............. .p<.s......?...W..?.. ..-0..+..0..b. ........-..... -.....?p...... ..+........-0. ......-..>.... .b0.W........0 ........0.0... .....>........ ......-....... ........-..... .............. .............. ......0....... .............. .............. .............. ....0......... Level: Latts Richmond Tigers Bricks: ............hh ...........hhh .vvv......hhhh .v.......hhhhh .v......hhhhhh .......hhhhhhh ......hhhhhhh. #####hhhhhhhv. .vvvhhhhhhhvv. .vvhhhhhhhvvv. .vhhhhhhh##### .hhhhhhh...... hhhhhhh....... hhhhhh......v. hhhhh.......v. hhhh......vvv. hhh........... hh............ Bonus: ............m. .............. ..p.......+.?. .w.......<.w.. ........20...- ...........b.. ......+.?.-... .....-.-.4.... .<1...s.....c. ...g..3!j>.2.. ...p>...f..... ..s..-<....... 0.12.0........ +f..Ws........ 4..>0......... w0........c... .<-........... .............. Level: Latts St Kilda Saints Bricks: dd*ddv..vdd*dd ddddd....ddddd dddddv..vddddd ddddd....ddddd dddddv..vddddd ddddd....ddddd dddddv##vddddd v.v.v.##.v.v.v ....######.... ......##...... .v.v.v##v.v.v. jjjjjv..vjjjjj jjjjj....jjjjj jjjjjv..vjjjjj jjjjj....jjjjj jjjjjj..jjjjjj jjjjjjvvjjjjjj jjjjjjjjjjjjjj Bonus: *.........1... .+.5.......... .>......p.>3W. .-............ 3.?..c...f.... ....1....0-..4 W....4.....!.. .............. .............. .............. ........4..... ..b01.......?1 .4..>.....1... w..d....>....+ ..1.......-... f.W.....d....f ...3-......4.. ........+..... Level: Latts Sydney Swans Bricks: djjjjjjjjjjjjd ddjjjjjjjjjjdd ddjjjjjjjjjjdd ddjjjjjjjjjjdd dddjjjjjjjjddd dddjjjjjjjjdd* ddddjjjjjjdddd *dddjjjjjjdddd jdddjjjjjjdddj jddddjjjjddddj jddddjjjjddddj jjddddjjddddjj jjddddddddddjj jjjdjddjdjdjjj jjjjddjddjjjjj jjjjjjdjjdjjjj jjjjdjd*jjjjjj jjjjjjdjdjjjjj Bonus: f...4..w.5.... .....f.....2.. ..-....4..>... 3.>.<...+..... ....2..f..-..f {.0........}.. ....~.....<... ..<..0&.00..+. +.....!...>2.. &~fg......g... .......0...... ......>...0f.. -0...-.f....l- .>.4..5.~.+... <...........0< .+3<.f+....... ...w.....s...3 ...........-.. Level: Latts West Coast Eagles Bricks: ggggghhhhggggg ggggghhhhggggg gggghhhhhhgggg gggghhhhhhgggg ggghhhgghhhggg ggghhhgghhhggg gghhhhgghhhhgg gghhhEEEEhhhgg ghhhhgggghhhhg hhhhgggggghhhh hhhgggggggghhh hhgggghEgggghh hgggghEhgggggh gggggEhhhggggg ggggEhhhgggggg gggggghghggggg gggggggggggggg gggggggggggggg Bonus: .....?1...4.+. 1.b....{2j?.0. .....0.f...... .1<.<.+..W..>5 >..W...>..f1.. 5~..s...0....f ...?.4.l..>..- -.3}......-... .0.g...5..f5.3 .>.~..<..{...0 .f...0.2!.0... 5<.2+.s...~.1. ..W..f.d...... .........-.<.. .0.....f~.0.W. ...1>0........ ...f.<2......s dd-d..?..+.2>. Level: Latts Western Bulldogs Bricks: jjjjjjjjjjjjjj dddddddddddddd dddddddjjjdddd dddddddjjjdddd dddddjjjjjjddd ddddjj@jjjjjdd dddjj@@jjjjjjd gggjjjjjjjjjjg ggggggggggjjjg ggggjjjjjggjjg ggggjgjjjjgjjg ggEgggggjjggjg gEgggggggjgggg EgggjggggjjEgg ggggjgjgggjgEg ggggjjjjgggggE ggggggjjjggggg gggggggggggggg Bonus: +.c.>.gd..W..s .0......0..... }..0-.4.?....- ...W......>W.4 ?......-.2.0.. ....2b.W...... 0.d.>...0d4... .-....-.....j. ........{....? ...........<.. ....&...20d.0. .~.2W.0..+...d 5..d.......f.. ..f..4...<..l. ....p.0......5 .0.-.>....4... .......W...... ...<.......... Level: Latts MCG Bricks: .............. ....ffffff.... ...ffffffff... ..ffffgdffff.. .gffxfgdfxffg. ffgfyffffyfgff jffgffffffgffj fffgffffffgfff jjfgfjjjjfgfjj fffgfjddjfgfff jjfgfjjjjfgfjj fffgffffffgfff jffgffffffgffj ffgfyffffyfgff .gffxfdgfxffg. ..ffffdgffff.. ...ffffffff... ....ffffff.... Bonus: .............. ....d.5W.d.... ......<....... ......2....... ........3..... ..?........... .....j.......? ......0.0..... ....+...<.&.>. 4.{.1.bb.1...4 .>fl.?....}s.. .....0.0...... .............. .+..~.>....+.. .......W...... .............. ...3....2..... ....d.W..d.... Level: Latts www.afl.com.au Bricks: vv...djjd...vv v..dddddddd..v ..dddddddddd.. .dhhhdhhhdhdd. ddhdhdhdddhddd ddhhhdhhhdhddd ddhdhdhdddhhhd dddddddddddddd ############## dddddddddddddd ddhhhdhhhdhdhd ddhdddhdhdhhhd ddhdddhdhdhdhd hdhhhdhhhdhdhd .dddddddddddd. ..dddddddddd.. v..dddddddd..v vv...dddd...vv Bonus: 5............5 .............. .........1.... ..>.0...df.... ...f-..>...... .0...1..5.-.0. .0.0.12...2... .4.d....0..{.. WWWWWWWWWWWWWW .....0.....d.> 4.{0...1...1.. .....>0m2.>.4. 1.>0...-.f.... .....5..0..0.. ...-..1.d.2... .....2..4..... ...f...f...... 5.....0......5 lbreakout2-2.6.5/client/levels/Kazan-10000664000175000017500000002132712140767201014423 00000000000000Version: 1.00 Level: Derek "Kazan" Meek Warmup Bricks: cbaaaaaaaaaabc cbaaaaaaaaaabc cbbbbbbbbbbbbc cccccccccccccc .f.f.f..f.f.f. ..f.f.ff.f.f.. .f.*!h..h!*.f. ..f!*.hh.*.f.. .h.e.*!!*!e.h. .hh.h!**!h.hh. .hh.h!**!h.hh. .h.e.*!!*!e.h. ..f!*.hh.*.f.. .f.*!h..h!*.f. ..f.f.ff.f.f.. .f.f.f..f.f.f. xxxxxxxxxxxxxx .............. Bonus: 32111111111123 32111111111123 32222222222223 33333333333333 .............. ..?....j...?.. .....s........ ..<........>.. .............. .&..?....?..&. .w..........p. ......-+...... ..+........-.. .....>..<..... ....?....?.... .m..........*. ?....?..?....? .............. Level: Derek "Kazan" Meek Jackpot Bricks: j*aaaaaaaaaa*j j*aaaaaaaaaa*j j*aaaaaaaaaa*j j*@@@@@@@@@@*j j*yyyyyyyyyy*j j*yyyyyyyyyy*j j************j jjj*jjjjjj*jjj kkj*jkkkkj*jkk fkj*jkffkj*jkf fkj*jkffkj*jkf fkj*jkffkj*jkf fkj*jkffkj*jkf fkj*jkffkj*jkf fkj*jkffkj*jkf fkjjjkffkjjjkf fkkkkkffkkkkkf .............. Bonus: .....1111..... ....122221.... ...12332321... ..3333333333.. ...s..m&..p... .............. .............. ......jj...... .....f..>..... .............. .............. ..j........j.. .............. .............. .............. g.....gg.....g ..w........w.. .............. Level: Derek "Kazan" Meek Explosive Peril Bricks: ijjjk....kjjji i**!k....k!**i i*cck....kcc*i h****....****h hhfff....fffhh #####.zz.##### hhhh.zaaz.hhhh hhhh.z**z.hhhh .ff...zz...ff. .ff........ff. .............. .....z..z..... .!..!*!!*!..!. xxxxxzxxzxxxxx xxxxxxxxxxxxxx .............. .............. .............. Bonus: ....b......... .............. ....c....c.... .............. p.~........~.m ......55...... 3....}**{....3 ...W.{..}.W... ......44...... .wf........fw. .............. .............. .s..........s. ...b.......... .............. .............. .............. .............. Level: Derek "Kazan" Meek Two Face Bricks: aabc..##..cbaa abc.!.##.!.cba bc.@..!!..@.cb c....!..!....c ayy.!....!.yya #*y..!..!..y*# #*y........y*# #*y!..!!..!y*# #*yxcb##bcxy*# **yxcbaabcxy** dxxxcbbbbcxxxd dddxccccccxddd dddxxxxxxxxddd ddd##.##.##ddd eee..!..!..eee hhh.!.!!.!.hhh ffff.f..f.ffff .............. Bonus: ?.....55.....? ..&...55...!.. .<....??....>. .............. ..?........?.. l............l 5............5 5?..........?5 5..3!.55.&3..5 c.....mm.....c ..*..?..?..w.. .f..........>. ...j.>..<..... .?.55.55.55.?. .............. .............j .>.{.3..g.p.<. .............. Level: Derek "Kazan" Meek Narrow Places Bricks: cccccccccccccc cccccccccccccc cccccccccccccc *bbbeeeeeebbb* #bdbee##eebdb# #bdbee##eebdb# *bbbeeeeeebbb* cccccceecccccc cccccceecccccc ####cceecc#### ddd#cceecc#ddd eee#bceecb#eee hhh#abzzba#hhh fff###zz###fff .............. .............. .............. .............. Bonus: *..>.........* .?.......l..?. ...&.......... .444.?mm?>444. .............. ....<.....b... ......??....f. .jb.?....?..j. .w.f.....&<.w. .....s..s..... *.?.>......?.* .?...bj.....?. ....5....5.... .&}........{w. .............. .............. .............. .............. Level: Derek "Kazan" Meek Rock and a Hard Place Bricks: .............. .............. .............. cccccccccccccc caaaaaaaaaaaac cccccccccccccc cccccccccccccc cccccccccccccc cccccyyyyccccc cyyycyyyycyyyc cyfycyhhycyfyc cyfycyhhycyfyc cyyycyyyycyyyc cccccyyyyccccc cccccccccccccc cccccccccccccc caaaaaaaaaaaac cccccccccccccc Bonus: .............. .............. .............. .............. .333333333333. .............. .b..........b. ......ll...... ...>......>... .............. ..*...wm...*.. ..5...g>...5.. &{c}......{c}& .....<..<..... .............. ......bb...... .w~.fpggpf.~w. .............. Level: Derek "Kazan" Meek The All Seeing Eye Bricks: cccc......cccc c*c..xxxx..c*c cc..xxxxxx..cc c..xxyyyyxx..c ..xxyyyyyyxx.. .xxyyzzzzyyxx. .xyyzz##zzyyx. .xxyyzzzzyyxx. ..xxyyyyyyxx.. c..xxyyyyxx..c cc..xxxxxx..cc c*c..xxxx..c*c cccc......cccc ####......#### fff#zzzzzz#fff fffzzzzzzzzfff ...yyyyyyyy... .............. Bonus: ?............? .4..........4. .............. .....m..m..... .............. .............. ....?.ll.?.... .?..........?. ...?......?... .....m..m..... .............. .4?........?4. .............. 5555......5555 .*.5?.??.?5.*. *.*..?ww?..*.* ...?.w..w.?... .............. Level: Derek "Kazan" Meek Anger Rising Bricks: @.hhhhhhhhhh.@ ..ffffffffff.. ..ffffffffff.. ..gggggggggg.. ..gggggggggg.. **EEEEEEEEEE** .............. .....yyyy..... .#.#.yaay.#.#. .b.b.yaay.b.b. .b.b.yaay.b.b. .#!#.yyyy.#!#. .b.b......b.b. .b.b!.!!.!b.b. .#b#......#b#. .###.!..!.###. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ...l..&*..l... ......44...... ......m&...... .............. .............. .............. ..5........5.. .............. .............. .............. Level: Derek "Kazan" Meek Test Your Might Bricks: cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz .............. gg.yyyyyyyy.gg gg.yyyyyyyy.gg gg.yyyyyyyy.gg ###yyyyyyyy### cc#zzzzzzzz#cc .............. .............. Bonus: .............. .?...?..?...?. .............. ...?...j..?... .*...........* .....?..?..... ...?...*..?... ..-........-.. .?..!.j..!..?. .............. .............. .......>...... ...g......g..c .....f..+..... 555........555 *&5.p.ws.?.5&m .............. .............. Level: Derek "Kazan" Meek Fient Bricks: ajggggggggggja ajggggggggggja aj**********ja ajggff**ffggja ajgg#h**h#ggja ajgg#heeh#ggja ajgg#heeh#ggja ajgg######ggja ajgg#hhhh#ggja ajgg#h**h#ggja ajgg#h**h#ggja ajgg#h**h#ggja ajgg#f**f#ggja aj*g##**##g*ja a#*ggg**ggg*#a a#**********#a a############a yyyyyyyyyyyyyy Bonus: .m..........m. .............. .............. ?............? ..*.5....5.*.. ....5?..?5.... ....5....5.... ?...555555...? ...s544445s... ....54..45.... ....54..45.... ....54..45.... m...54..55...m ....55..55.... .5.444..444.5. .3..........3. .333333333333. .g.w......w.g. Level: Derek "Kazan" Meek Cahadhras Bricks: ******!!****** *#####..#####* .#aaa#..#aaa#. .#aca#!!#aca#. .#aca#..#aca#. !#aca#..#aca#! .#aca*..*aca#. .#aca#!!#aca#. .#aca#..#aca#. .#aca#..#aca#. .#aca#..#aca#. .#aca#..#aca#. !#a###!!###a#! .#a##a..a##a#. z#aaaazzaaaa#z y#####yy#####y xxxxxxxxxxxxxx .............. Bonus: .?..........?. .....l..5..... .............. ......?....... ...?......?... .............. .....m..}..?.. .......?...... .............. ..?........... .............. ...*....s.s... .............. .............. ?.........?... .............? ..w.?.b?...w.. .............. Level: Derek "Kazan" Meek The Mines Bricks: a************a #a#cccccccc#a# #a#cccccccc#a# ...bbbbbbbb... ...bbbbbbbb... a#a#a#aa#a#a#a b#b#b#bb#b#b#b .............. .............. #b#b#b##b#b#b# #c#c#c##c#c#c# .............. .............. c#c#c#cc#c#c#c y#y#y#yy#y#y#y .............. dddddddddddddd dddddddddddddd Bonus: .............. ..l........l.. ..m........m.. ....}....{.... .............. -.?........?.+ ......??...... .............. .............. .&3m..33..-3m. ..3..<33>..3.. .............. .............. ?...?....?...? ..>...f....<.. .............. .?...?..?...?. ...?...w..?... Level: Derek "Kazan" Meek Into the Fray Bricks: .ggccccccccgg. .ggccccccccgg. .ggccccccccgg. .gggggggggggg. .gggggggggggg. .............. .............. zzzzzzzzzzzzzz ******zz****** #dd###jj###dd# #jj###jj###jj# yxjxyxjjxyxjxy yxjxyxjjxyxjxy z###z####z###z z###z####z###z .jjj.jjjj.jjj. .jjj.jjjj.jjj. .............. Bonus: .?..?....?..?. ......m5...... .............. ...?......?... .............. .............. .............. ..*...??...m.. .............. ....3....3.... ..?.3....3.?.. .............. ....?....?.... ..3...33...3.. ..3...33...3.. .............. ..?..?..?..?.. .............. Level: Derek "Kazan" Meek Nautilus Bricks: ***bbbbbbbb*** aaaaaaaaaaaaaa a....*aa*....a a#...*aa*...#a a##..abba..##a a#c#.abba.#c#a a#cc#abba#cc#a a#cc#abba#cc#a a#cc#....#cc#a a#cc#....#cc#a a#cc#.cc.#cc#a a#cc#.cc.#cc#a a#cc#.cc.#cc#a a#cc#xccx#cc#a aaaa#xccx#aaaa aaaa#yccy#aaaa #####yccy##### zzzzzzzzzzzzzz Bonus: ....?....?.... .............. .............. m............m .............. ..5...s....5.. ..44......44.. ?.33.&..-.33.? ..22......22.. ..11......11.. ..00..*?..00.. ?............? .............. ......+....... .?..........?. ...~......l... ......??...... w..-......+..w Level: Derek "Kazan" Meek ISU Is the Bomb Bricks: xxxxxxxxxxxxxx ************** *###*z#z*#z*#* **d**#b#*dz*d* z*d*z#bb*dz*d* z*d*zbab*dbbd* z*d**bb#*dbbd* **d**#b#*dbbd* *###*z#z*d###* ************** cccccccccccccc cccccccccccccc cccccccccccccc zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz ##.##.##.##.## .............. Bonus: .?.?..?.?.?... .....?........ ..5......5..5. ......m....... .............. .............. .............. ......m...**.. ..5........5.. .............. .............. .....?..??.?.. ..?...?....... .......?....?. ....?....?.... .?w........g.. ......55...... .............. lbreakout2-2.6.5/client/levels/PlayAgain0000664000175000017500000003443612140767201015073 00000000000000Version: 1.00 Level: Jacques Buffa briques Bricks: .............. .............. .............. jjjjjjjjjjjjjj jjjjjjjjjjjjjj eeeeeeeeeeeeee eeeeeeeeeeeeee ffffffffffffff ffffffffffffff iiiiiiiiiiiiii iiiiiiiiiiiiii gggggggggggggg gggggggggggggg hhhhhhhhhhhhhh hhhhhhhhhhhhhh .............. .............. .............. Bonus: .............. .............. .............. .........2...? .............. b2....2...-.2. ..j........... .....>.s...... .-..........+. ..1...?f...1.. .....1.......j +.........>.~. .......b...... ...0......0.?. .............. .............. .............. .............. Level: Jacques Buffa fresques Bricks: .............. .............. gggggggggggggg jvjvjvjjvjvjvj gggggggggggggg .............. .............. hhhhhhhhhhhhhh jvjvjvjjvjvjvj hhhhhhhhhhhhhh .............. .............. dddddddddddddd jvjvjvjjvjvjvj dddddddddddddd .............. .............. .............. Bonus: .............. .............. ..?.d....~.... ...3.2.j..3.2. .b..........>. .............. .............. .......+...... .1.-.>..1f?.1. .............. .............. .............. .?...+....-... ...0....0...b. .............. .............. .............. .............. Level: Jacques Buffa diversite Bricks: .............. dddddddddddddd eeeeeeeeeeeeee hhhhhhhhhhhhhh *cc*cccccc*cc* !!#iiiiiiii#!! !!#ffffffff#!! !!#gggggggg#!! !!#*cccccc*#!! kkkkk#vv#kkkkk jjjjj#bb#jjjjj .....#zz#..... .....#bb#..... .....cccc..... .............. .............. .............. .............. Bonus: .............. .-2..f..j2.... ....+..d..>... ..w..2..*...-. b.?<.l.2...2.< .3...1...?..b3 ....>..b..j... >.....-....... ...1.....1..1. ....1.5...+... .0.?..ss....0. .......?...... ......3....... ........1..... .............. .............. .............. .............. Level: Jacques Buffa X Bricks: .v..........v. .ccc......ccc. .cffc....cffc. .cfffc..cfffc. ..cfffccfffc.. ...cffffffc... ....cffffc.... .....cffc..... .vv..c**c..vv. .....cffc..... ....cffffc.... ...cffffffc... ..cfffccfffc.. .*fffc..cfff*. .cffc....cffc. .*cc......cc*. .............. .............. Bonus: .............. ..2d......b... .........j..2. .j..>.....>... ..-.....+..?.. ...2..-..2~... ....+....s.... .....b........ .....?.4...... ........<..... .....f...1.... ...1......>... ..~...~w.1.... .?............ ....1.......-. ..0........0.. .............. .............. Level: Jacques Buffa ovni Bricks: ......kk...... .....kddk..... .vv.kddddk.vv. ....khhhhk.... ...kdhhhhdk... ...khgggghk... ..kdhgggghdk.. ..khgvvvvghk.. ..dhgvzzvghd.. ..dhgvzzvghd.. ..khgvvvvghk.. ..kdhgggghdk.. ...khgggghk... ...kdhhhhdk... ....khhhhk.... ....kddddk.... .....kddk..... ......kk...... Bonus: ......-?...... ........2..... .......b.+.... ......2..~.... ....~.....j... .......d..>... ..>...?....... ...+.4..l..2.. ....j......... ...2.b5....?.. ....w.ss.-.... ..1........0.. ....>..b...... .....1..~.f... ......<..1.... .............. .....0.0...... .............. Level: Jacques Buffa attention Bricks: .............. !iiiiiiiiiiii! !gggggggggggg! !ffffffffffff! !dddddddddddd! !ee@@eeee@@ee! !hhhhhhhhhhhh! cccccccccccccc .............. !iiiiiiiiiiii! !gggggggggggg! !ffffffffffff! !dddddddddddd! !ee@@eeee@@ee! !hhhhhhhhhhhh! cccccccccccccc .............. .............. Bonus: .............. ...4....>.4... bj............ .......3....j. ..1.d....~...2 2.+..?.....1.. .........-.b.. ...b...m...... .............. ...2......2.?. .?..-.1.<..... .........f..+. 2...s..p.....2 ......1....>.. .............. ..0.....w..0.. .............. .............. Level: Jacques Buffa passage Bricks: .............. .............. ..cccccccccc.. ..cbbbbbbbbc.. ..cbbbbbbbbc.. ..cbbaaaabbc.. ..cbbavvabbc.. ..cbbaaaabbc.. ..cbbbbbbbbc.. ..cbbbbbbbbc.. ..cccccccccc.. .............. .............. E.EEEEEEEEEE.E .............. .............. .............. .............. Bonus: .............. .............. ......2b...2.. ...~2...2..... ......l...-+.. ..-?.3..<..>.. ..j.d......... .....f.5..b... ...+.......... ....1?.~.1.?.. ..>.s.0.j.<... .............. .............. .............. .............. .............. .............. .............. Level: Jacques Buffa carree Bricks: .............. .............. .............. ..iiiiiiiiii.. ..iiiiiiiiii.. ..icccccccci.. ..icggggggci.. ..icggggggci.. ..icgccccgci.. ..icgchhcgci.. ..icgchhcgci.. ..icgccccgci.. ..icggggggci.. ..icggggggci.. ..icccccccci.. ..iiiiiiiiii.. ..iiiiiiiiii.. .............. Bonus: .............. .............. .............. ....1..2...... .............. ..2........... .......?...... ....2......?.. ..-..<........ .......5.b.1.. ...........+.. ..+........... ..>......2.-.. ...b.~....w... ..1.....s..b.. ...?...?..>... ....0....0.... .............. Level: Jacques Buffa etages Bricks: cccccccccccccc .............. !.vvvvvvvvvv.! !.v.hh..dd.v.! !.v.hh..dd.v.! !.v.hh..dd.v.! !.vvvvvvvvvv.! .............. cccccccccccccc .............. !.vvvvvvvvvv.! !.v.ee..gg.v.! !.v.ee..gg.v.! !.v.ee..gg.v.! !.vvvvvvvvvv.! .............. cccccccccccccc .............. Bonus: .3..*.5......3 .............. w..2...?...b.. .....p...d.... ..>......~.... j...-...+....? ..?..<.b...j.. .............. ..b...l..>..*. .............. 1.....f2...~.1 .....+...-.... .............s ?...0....0...- .............. .............. ...0.....0.... .............. Level: Jacques Buffa cubes Bricks: .............. ......cc...... .ggg..cc..fff. .gvg..cc..fvf. .ggg......fff. .............. .....cccc..... .....cvvc..... .eee.cvvc.hhh. .eze.cccc.hzh. .eee......hhh. .............. .............. ...iii..ddd... ...izi..dzd... ...iii..ddd... .............. .............. Bonus: .............. .......5...... .4....~....... ..bd...f..-... ..?.......w.2. .............. ........-..... .....+.21..... .~.....s..1... .+b..-.1...b2. ...1......?... .............. .............. ....?.....0... .............. ....0......... .............. .............. Level: Jacques Buffa patience Bricks: .............. ...e...j....i. ...#...#....#. .d...h...f.... .#...#...#.... ........d..e.. ..i...k.#..#.. ..#...#....... ....g......... .f..#...g...h. .#......#...#. ......e...j... ...h..#...#... ...#.......... .............. .j..d.i..f..g. .#..#.#..#..#. .............. Bonus: .............. ...3...5....3. .............. .b...j...b.... .............. ........-..2.. ..?...l....... .............. .............. .-......j...+. .............. ......~...s... ...+.......... .............. .............. .1..w.?..1.... .............. .............. Level: Jacques Buffa arc en ciel Bricks: .............. .....iiii..... ....iiiiii.... ...iiggggii... ..iiggggggii.. .iiggffffggii. iiggffffffggii iggffddddffggi ggffddddddffgg gffddeeeeddffg ffddeeeeeeddff fddeehhhheeddf ddeehhhhhheedd deehh....hheed eehh......hhee ehh........hhe hh..........hh h............h Bonus: .............. .............. .............. .............. .............. .............. .....+........ ..?.....-.?.+. .....s.b...... ...-.......... <..........<.. .b..?.g.....b. .............. .............. ...........g.. .g............ .............. .............. Level: Jacques Buffa bloc Bricks: .............. .............. ..cbcbccbcbc.. ..b!i!bj!e!b.. ..ci!ijbe!ec.. ..b!i!bj!e!b.. ..ci!ijbe!ec.. ..b!i!bj!e!b.. ..cjbjvvbjbc.. ..cbjbvvjbjc.. ..b!h!jb!d!b.. ..ch!hbjd!dc.. ..b!h!jb!d!b.. ..ch!hbjd!dc.. ..b!h!jb!d!b.. ..cbcbccbcbc.. .............. .............. Bonus: .............. .............. ....2.b.2..... ..?.......j... ...j.......... .....~.d?>.... ..-.......*1.. ......l..f.b.. ...>..4....+.. ..1b.?.5...... ...........1.. ..+.p.<.2..... .....2.>.s.... ..1...-....-.. .............. ......w....... .............. .............. Level: Jacques Buffa prison Bricks: ######..###### !fff!#..#!eee! f!f!f#..#e!e!e ff!ff#..#ee!ee f!f!f#..#e!e!e !fff!#..#!eee! #*#........#*# .............. .............. .............. #*#**####**#*# !hhh!#..#!ggg! h!h!h#..#g!g!g hh!hh#..#gg!gg h!h!h#..#g!g!g !hhh!#..#!ggg! #*#........#*# .............. Bonus: .............. .2.-3....d..1. ...........3.. b.m.l......m.b .s.~1....2..<. ..?........?.. .............. .............. .............. .............. .............. .1+........j+. j............. ..3<2.....<3s1 w........2.... .............. .............. .............. Level: Jacques Buffa losanges Bricks: ..cc......cc.. .cggc....cddc. cgvvg*..*dvvdc cgvvgc..cdvvdc .cggc....cddc. ..cc......cc.. ......cc...... .....chhc..... .vv.*hvvh*.vv. ....chvvhc.... .....chhc..... ......cc...... ..cc......cc.. .ceec....cffc. *evve*..*fvvf* cevvec..cfvvfc .ceec....cffc. ..cc......cc.. Bonus: ...-......>... ............d. .............. -..4.~..~.4..b .>..f....<..+. ..?.......f1.. ......2>...... ........b..... ....-....?.... ....1..5...... .....*..s..... .............. ..........pw.. .b..?.....2... ..2..+........ ........1..... ....1....?.... ..0........0.. Level: Jacques Buffa muraille Bricks: .............. eeeeeeeeeeeeee dddddddddddddd .*..........*. .g#........#g. .g#hhhhhhhh#g. cg#c.c.c.c.#gc cg#iiiiiiii#gc cg#.c.c.c.c#gc cg#iiiiiiii#gc cg#c.c.c.c.#gc .g#hhhhhhhh#g. .g#...##...#g. ..#........#.. zzczzzcczzzczz jjjjjjjjjjjjjj .............. .............. Bonus: .............. ........1..... 1...3..?...... .............. .?............ ....2-..>.~... .-.....+.....2 ...f.b..j1.... b...<.......2~ +.....l.p<.... .2.>.....b..-. ....s.d...w.2. .............. .............. ..0....?..>.0. .............. .............. .............. Level: Jacques Buffa palettes Bricks: .............. .*ggg*..*eee*. .cgggc..ceeec. .cgggc..ceeec. .cgggc..ceeec. .#####..#####. .............. .*hhh*..*iii*. .chhhc..ciiic. .chhhc..ciiic. .chhhc..ciiic. .#####..#####. .............. .*ddd*..*fff*. .cdddc..cfffc. .cdddc..cfffc. .cdddc..cfffc. .#####..#####. Bonus: .............. ....+m........ ...5.?....4... .j......+...j. .............. .............. .............. ....?.......m. .<.b.2..s.3.2. .............. ........2..... .............. .............. .?.-.....<.+.. ...1.w..1...2. .............. .............. .............. Level: Jacques Buffa barettes Bricks: ii.ee.ff.hh.dd ib.be.fb.bh.db ii.ee.ff.hh.dd bi.eb.bf.hb.bd ii.ee.ff.hh.dd ib.be.fb.bh.db ii.ee.ff.hh.dd bi.eb.bf.hb.bd ii.ee.ff.hh.dd ib.be.fb.bh.db ii.ee.ff.hh.dd bi.eb.bf.hb.bd ii.ee.ff.hh.dd ib.be.fb.bh.db ii.ee.ff.hh.dd bi.eb.bf.hb.bd .............. .............. Bonus: .............. 3..3........32 .?....3..>.... ..........?... ...b........j. .+.....-.....~ ..........d... ....j....+.... 2.....2.....2. .>........<... ...-.......... ....s.....b..1 .w..1....1..-. .1....~0...... ............0. ....0.?....... .............. .............. Level: Jacques Buffa couloirs Bricks: cEcEcEcEcEcEcE .E.E.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .............. .............. .............. .............. .............. .............. Bonus: 3.4.5.2.l.3.2. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Jacques Buffa feu d'artifice Bricks: aaaaaaaaaaaaaa a*aa*aaaa*aa*a a.!.!.!.!.!.!a a!.!.!.!.!.!.a a............a a.!.!.!.!.!.!a a!.!.!.!.!.!.a a............a a.!.!.!.!.!.!a a!.!.!.!.!.!.a a............a a.!.!.!.!.!.!a a!.!.!.!.!.!.a .............. .............. .............. .............. .............. Bonus: .............. .............. ....4.5...2.3. >2.d...j.~.?.> .............. ....b.?.....b. .+...1...b.-.1 *............. ..f...<.....j* .1.....-.p.+.. .............. -.0.?...>.0... .....~........ .............. .............. .............. .............. .............. Level: Jacques Buffa ascension Bricks: gggggggggggggg gggggggggggggg ...###..###... jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj .##...##...##. iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii ...###..###... hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh ###...##...### .............. .............. .............. Bonus: ...4....5..... 3.....3....... .............. .-...m.>..f... ...2.........m .j.b..?l.-2+.. .............. ..-.s....j.~.. .1....w2....1. ..?.>....<...s .............. ...+...?....b. .....1....0... ..0........... .............. .............. .............. .............. Level: Jacques Buffa dynamites Bricks: jjjjjjjjjjjjjj jjj*jjj*jjj*jj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj j*jjj*jjj*jjj* jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjj*jjj*jjj*jj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj j*jjj*jjj*jjj* jjjjjjjjjjjjjj jjjjjjjjjjjjjj .............. .............. Bonus: .............. ..........2... .2...........b ......2..b.... .>.....j..d... ...fb.......?. ...........2.. .j2...?....... ....*...w.+.>. ..-........... ......-....... 2.?.+..2.~.... ............2. .......s...-.. .............. ...1......1... .............. .............. Level: Jacques Buffa labyrinte Bricks: ############## .g.g.g.g.g.g.g f.f.f.f.f.f.f. .h.h.h.h.h.h.h j.j.j.j.j.j.j. ###########... .i.i.i.i.i.i.i d.d.d.d.d.d.d. .h.h.h.h.h.h.h j.j.j.j.j.j.j. ...########### .d.d.d.d.d.d.d e.e.e.e.e.e.e. .h.h.h.h.h.h.h j.j.j.j.j.j.j. ###########... .............. .............. Bonus: .............. ...4.......... ............m. .?.....m...... ..........3... .............. .b.2.>........ ........b.<... .+...........f ......l.2..... .............. ...-.......... ..b.2.<.b.?... ...w.......... .............. .............. .............. .............. Level: Jacques Buffa espace Bricks: vvvvvvvvvvvvvv .............. .............. .............. ...v...v...v.. .............. .............. .............. .............. .v.v..v....v.. .............. .............. .............. ...v...v...v.. .............. .............. .v...v.v...v.. .............. Bonus: .2.f.3.d.5.j.b .............. .............. .............. ...4...l...3.. .............. .............. .............. .............. .?.~..+....b.. .............. .............. .............. ...b...?...-.. .............. .............. .2...1.?...w.. .............. Level: Jacques Buffa bravo Bricks: .!...!..!.!..! ...!.......... ......!.....!. .!.bb!..b!.b.. ...bb...b..b.. !.b..b..b..b.. ..b..b..b.b... ..b..b.!b.b..! .!b..b..bb.... ..b..b!.bb.!.. !.b..b..b.b... ..b..b..b.b..! ..b..b..b..b.. ...bb...b..b.. ...bb...b..b.. .............. .............. .............. Bonus: .j...j..j.j..j ...j.......... ......j.....j. .j.jgj..jj.g.. ...jj...j..j.. j.j..j..j..j.. ..g..j..g.j... ..j..j.jj.j..j .jj..j..jj.... ..j..jj.jj.j.. j.j..g..j.j... ..j..j..j.j..j ..g..j..j..j.. ...jj...g..g.. ...jj...j..j.. .............. .............. .............. lbreakout2-2.6.5/client/levels/GreenWall40000664000175000017500000005475712140767201015202 00000000000000Version: 1.00 Level: Ade Welcome Back To GW4 Bricks: #####..##...## #####..##...## ##.....##...## ##.....##...## ##.##..##...## ##.##..##.#.## ##..#..##.#.## #####..####### #####..###.### .......v...... .......#...... ......##...... .....#.#...... ....#..#...... ff..######..ff .......#...... .......#...... .......#...... Bonus: mmmmm..mm...mm mmmmm..mm...mm mm.....mm...mm mm.....mm...mm mm.mm..mm...mm mm.mm..mm.m.mm mm..m..mm.m.mm mmmmm..mmmmmmm mmmmm..mmm.mmm .......m...... .......m...... ......mm...... .....m.m...... ....m..m...... m...mmmmmm.... .......m...... .......m...... .......m...... Level: Ade New Bricks Bricks: @@@...xx...@@@ ExE...xx...ExE @@@.######.@@@ ....#xEEx#.... @@@.######.@@@ ExE...ff...ExE @@@.######.@@@ ....#xEEx#.... @@@.######.@@@ ExE...xx...ExE @@@...xx...@@@ .............. .............. .............. .............. .............. .............. .............. Bonus: ......mm...... .m....mm....m. .............. .............. .............. .m....mm....m. .............. .............. .............. .m....44....m. ......ll...... .............. .............. .............. .............. .............. .............. .............. Level: Ade More Fun Bricks: .............. .............. ...@#@##@#@... ...#......#... ...@.EEEE.@... ...#.@xx@.#... ...@.#ff#.@... .*.#.@xx@.#.*. .*.@.#ff#.@.*. .@.#.@xx@.#.@. .#.@.#ff#.@.#. .@.*.@xx@.*.@. .#.*.#ff#.*.#. .@...@xx@...@. .#EEE#ff#EEE#. .@#@#@xx@#@#@. .....EEEE..... .............. Bonus: .............. .............. .............. .............. .............. ......mm...... .............. .l....mm....l. .............. .............. .............. .............. ...m......m... ......mm...... .............. ......mm...... .............. .............. Level: Ade OK Bricks: xx@xx@xx@xx@xx @@@@@@@@@@@@@@ xxxxxx@@xx@@@x xxxxxx@@xx@@xx xx@@xx@@xx@xx@ xx@@xx@@xxxx@@ xx@@xx@@xxx@@@ xx@@xx@@xx@@@@ xx@@xx@@xxx@@@ xx@@xx@@xxxx@@ xx@@xx@@xx@xx@ xxxxxx@@xx@@xx xxxxxx@@xx@@@x @@@@@@@@@@@@@@ xx@EE@xx@EE@xx ff#ff#ff#ff#ff .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. mmmmmm..mm...m .............. ......mm...... ......44...... .............. .............. Level: Ade Some Ants Bricks: @@f@@f@@f@@f@@ .............. .............. ..E..E..E..E.. ..E..E..E..E.. .............. .xxx.xxxx.xxx. fx#xfx##xfx#xf .xxx.xxxx.xxx. .............. ..E..E..E..E.. ..E..E..E..E.. .............. .............. @@f@@f@@f@@f@@ .............. .............. .............. Bonus: ..m..m..m..m.. .............. .............. .............. .............. .............. .............. 4.m.l.mm.l.m.4 .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Ade Jonestown Bricks: .............. ......@@...... ......@@...... ...@@@@@@@@... ...@@@@@@@@... ......@@...... ......@@...... ..@...@@...@.. .@f@..@@..@f@. @fff@.@@.@fff@ .@f@..@@..@f@. .@f@..@@..@f@. .@f@..@@..@f@. .@f@..@@..@f@. .@f@..@@..@f@. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ..m........m.. ..4........4.. .............. .............. .............. .............. .............. .............. .............. .............. Level: Ade Snood Bricks: xxx...##...xxx xx#..#zz#..#xx x##.#zzzz#.##x ...#zzzzzz#... ..#zEEzzEEz#.. ..#zzzzzzzz#.. ..#zzzEEzzz#.. ..#zzzEEzzz#.. ..#zzz##zzz#.. ...#zEEEEz#... ...#zzEEzz#... ....#zzzz#.... x@#.#zzzz#.#@x xx#..#zz#..#xx xxx...##...xxx .@#........#@. .............. .............. Bonus: .............. m.....mm.....m ......mm...... ......mm...... ......mm...... ......mm...... .............. .............. .............. .............. .............. .....mmmm..... .....4..4..... m.....ll.....m .............. .............. .............. .............. Level: Ade Drops Bricks: ......ff...... ......@@...... .....@@@@..... .EEE@@@@@@EEE. .E##########E. .E#xxxxxxxx#E. .E#xyyyyyyx#E. .@#xyzzzzyx#@. f@#xyzjjzyx#@f f@#xyzjjzyx#@f .@#xyzzzzyx#@. .E#xyyyyyyx#E. .E#xxxxxxxx#E. .E##########E. .EEE@@@@@@EEE. .....@@@@..... ......@@...... ......ff...... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. m............m .............. .............. ...m.m.m.m.... ......ll...... .............. .............. .............. .............. .............. Level: Ade Birds Bricks: .............. .............. ........E..... ........@E.... ###......@E... xx@##.....@E.. ffxx@##...@@E. zzffxx@#..@E@E EEzzffxx#*@EE@ EEEEzzffxx@EEE EEzzffxx#*@EE@ zzffxx@#..@E@E ffxx@###..@@E. xx@###....@E.. ####.....@E... ........@E.... ........E..... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. mm............ .............. .........m.... ......m....... ....m......... ..m........... m............. .............. .............. .............. .............. Level: Ade 617 Bricks: xxxxxxxxxxxxxx vvvvvvvvvvvvvv vEEvvvEEvEEEE. vEEvvvEEvEEEE. vEEvvvEEvEEEE. vEEvvvEEvvvEE. vEEvvvEEvvvEE. vEEvvvEEvvvEE. vEEEEvEEvvEEEE vEEEEvEEvvEEEE vE..EvEEvvvEEv vE..EvEEvvvEEv vEEEEvEEvvvEEv vEEEEvEEvvvEEv vvvvvvvvvvvvvv xxxxxxxxxxxxxx .............. .............. Bonus: mmmmmmmmmmmmmm .............. .............. .............. .............. .............. ..........4... ...l4.....l... .............. .............. .............. .............. .............. .............. ************** .............. .............. .............. Level: Ade Daisy Bricks: .............. .............. ......jj...... .....jhhj..... ....jhhhhj.... ...jhhzzhhj... ..jhhyyyyhhj.. ..jhxxxxxxhj.. ..jhEEEEEEhj.. ..jhEEEEEEhj.. .............. xxxx......xxxx f##f@@@@@@f##f f##f@@@@@@f##f xxxx......xxxx .............. .............. .............. Bonus: .............. .............. ......mm...... .............. .............. .............. .............. .............. .............. .............. .............. ...4......4... .mm........mm. .mm........mm. .............. .............. .............. .............. Level: Ade Never Bricks: .............. @.f.@.ff.@.f.@ @.f.@.ff.@.f.@ .............. ..##########.. ..#xxxxxxxx#.. ..#xyyyyyyx#.. ..#xyzzzzyx#.. ..#xyzjjzyx#.. ..#xyzjjzyx#.. ..#xyzzzzyx#.. ..#xyyyyyyx#.. ..#xxxxxxxx#.. ..##########.. .............. @.f.@.ff.@.f.@ @.f.@.ff.@.f.@ .............. Bonus: .............. ......mm...... ......mm...... .............. .............. .............. .............. .............. ......mm...... ......mm...... .............. .............. ...4m....m4... .............. .............. .............. .............. .............. Level: Ade Always Bricks: @...EEEEE.#xx# .@...@@@@.x@@x ..@...@@@.x..x a..@...@@.#..# ba..@...@.#..# cba..@....#..# jcba..@...f@@f .jcba..@..f@@f ..jcba..@.#..# ..jcba..@.#..# .jcba..@..f@@f jcba..@...f@@f cba..@....#..# ba..@...@.#..# a..@...@@.#..# ..@...@@@.x..x .@...@@@@.x@@x @...EEEEE.#xx# Bonus: .............. .............. .............. .............. .............. .............. ..........m..m ..........m..m .............. .............. ..........m..m ..........m..m .4............ 4l............ l............. .............. .............. .............. Level: Ade Trash Bricks: ......EE...... .....E..E..... ....E.vv.E.... ...E.vvvv.E... ..E.vv@@vv.E.. #E.vv@vv@vv.E# .Evv@vvvv@vvE. .vv@vvvvvv@vv. .vv@vvxxvv@vv. .vv@vvxxvv@vv. .vv@vvvvvv@vv. .Evv@vvvv@vvE. .E.vv@vv@vv.E. ..E.vv@@vv.E.. ...E.vvvv.E... ....E.vv.E.... .....E..E..... ......EE...... Bonus: .............. .............. .............. ......mm...... .............. ......mm...... ..*...mm...*.. ..*...mm...*.. .**...mm...**. ..*...mm...*.. ..*...mm...*.. ..*...mm...*.. ......mm...... .............. ......mm...... ......44...... .............. .............. Level: Ade Dummies Bricks: EEE@@@@@@@@EEE E............E E.....xj.....E E....xyzj....E E...xyzyzj...E E..xyzjxyzj..E @.xyzj..xyzj.@ @xyzj....xyzj@ @xyzj....xyzj@ @.xyzj..xyzj.@ E..xyzjxyzj..@ E...xyzyzj...E E@@..xyzj..@@E E..@..xj..@..E E...@....@...E EEEEE@..@EEEEE .....@..@..... EEEEE@..@EEEEE Bonus: .............. .............. .............. .............. ......mm...... ......mm...... .....m..m..... ....m....m.... ....m....m.... .............. .............. .............. .....l..l..... ......44...... .............. .............. .............. .............. Level: Ade Pigeon Bricks: .............. .............. ..xxx....xxx.. x#@@@EEEE@@@#x xc!!cccccc!!cx xc!!cccccc!!cx xccc!!cc!!cccx @ccc!!cc!!ccc@ @ccccc!!ccccc@ @ccccc!!ccccc@ @ccc!!cc!!ccc@ xccc!!cc!!cccx xc!!cccccc!!cx xc!!cccccc!!cx x#@@@EEEE@@@#x ..xxx....xxx.. .............. .............. Bonus: .............. .............. .............. .............. .*....mm....*. .*....mm....*. .*....mm....*. .*....mm....*. .*....mm....*. .*....mm....*. .*....mm....*. .*....mm....*. .*....mm....*. .*...4mm4...*. .............. .............. .............. .............. Level: Ade Crack Bricks: @@zzzzzzzzzzzz @zzzzzzzz*zzzz @z@@@zzz*z*zzz @z@z@zzzz*zz*z @@@@@@@@zzz*z* zz@@z@z@zzzz*z zz@z@@@@@@zzzz z*zzz@z@@zzzzz *z*zz@z@@z@z@z z*zzzzzz@z@z@* zzzzzzzz@@@@zz zz*zzz*zzz@z@* z*z*z*z*zz@z@z zz*zzz*zzzzzzz zzzzzzzzzzzzzz .............. .............. .............. Bonus: .............. .............. .........m.... ...m.......... ............m. ....m.m....... .............. .............. .*............ .............. .............* .............* ..*...*....... .....4..4..... .....l..l..... .............. .............. .............. Level: Ade Ugly Bricks: ......xx...... .....x!!x..... ....xfxxfx.... ...x!x!!x!x... ..x@xfxxfx@x.. .x!*!x!!x!*!x. x#x@xfxxfx@x#x !x!*!x!!x!*!x! x#x@xExxEx@x#x x#x@xExxEx@x#x !x!*!x!!x!*!x! x#x@xfxxfx@x#x .x!*!x!!x!*!x. ..x@xfxxfx@x.. ...x!x!!x!x... ....xfxxfx.... .....x!!x..... ......xx...... Bonus: ......**...... ......**...... ....*....*.... .............. ..*........*.. .............. *............* .............. ......**...... ......**...... .............. *............* .............. ..*........*.. .............. ....*.44.*.... .............. .............. Level: Ade Nice Bricks: .............. .............. .@@@......@@@. .@v@.xxxx.@v@. .@@@.xffx.@@@. .....xxxx..... .............. .###.EEEE.###. .#f#.E..E.#f#. .#f#.E..E.#f#. .###.EEEE.###. .............. .....xxxx..... .@@@.xffx.@@@. .@v@.xxxx.@v@. .@@@......@@@. .............. .............. Bonus: .............. .............. .............. ......mm...... .............. ......mm...... .............. .............. ..m........m.. ..m........m.. .............. .............. ......l4...... .............. .............. .............. .............. .............. Level: Ade We Will Rock You Bricks: ..#xyzjjzyx#.. ..#xyzzzzyx#.. ..#xyyyyyyx#.. ..#xxxxxxxx#.. ..##########.. .............. .............. .............. .............. ..@..@@@@..@.. ..@..@ff@..@.. ..@..@ff@..@.. ..@........@.. ..@...ff...@.. ..@...ff...@.. ..@@@@@@@@@@.. .............. .............. Bonus: .............. .............. .............. ...mmmmmmmm... .............. .............. .............. .............. .............. .............. ......ll...... ......mm...... .............. ......mm...... .............. ......44...... .............. .............. Level: Ade After Six Beers Bricks: ......@@...... .....@@@@..... ....@eeee@.... ...@eeeeee@... @@@e##ee##e@@@ @eee##ee##eee@ EeeeeeeeeeeeeE EeeeeeddeeeeeE EeeeeeddeeeeeE EeeeeeddeeeeeE .eeeeeeeeeeee. ..eeEEEEEEee.. ..eeeEEEEeee.. ...eeeEEeee... ...eeeeeeee... .....eeee..... ......ee...... .............. Bonus: .............. .............. .............. .....m..m..... .............. .............. .............. .............. .............. .....*..*..... ....**44**.... .............. ....*....*.... .............. .............. .............. .............. .............. Level: Ade Cognitive Distortion Bricks: ####.#........ #..#.#........ #..#.#......@a #..#.#......aE #ff#.#....@aEa #..#.#....aEa. #..#.#....Ea@. #..#.#....@... ####.......... ..........#### .....@..#.#..# ...@aE..#.#..# ...aEa..#.#..# .@aEa@..#.#ff# .aEa....#.#..# aEa@....#.#..# Ea......#.#..# a@......#.#### Bonus: .............. .............. .............m .............. .mm........... .............. .............. .............. .............. .............. .............. .............. ...4.......... ..4........mm. .............. m............. .............. .............. Level: Ade Ace Bricks: ###..xxxx..### #x#..@ff@..#x# ###..xxxx..### f*ffffffffff*f @@@..xxxx..@@@ @x@..@xx@..@x@ @@@..xxxx..@@@ f*ffffffffff*f xxx..xxxx..xxx x#x..@xx@..x#x xxx..xxxx..xxx f*ffffffffff*f EEE..xxxx..EEE E#E..@ff@..E#E EEE..xxxx..EEE .............. .............. .............. Bonus: .............. .m....mm....m. .............. .............. .............. .m....**....m. .............. .............. .*..........*. ......**...... .*..........*. .............. .............. ......44...... .............. .............. .............. .............. Level: Ade Changes Bricks: @.xxxxxxxxxx.@ @.x.@....@.x.@ @.x.@.##.@.x.@ @.x.@.ff.@.x.@ @.x.@*ff*@.x.@ @.x.@*ff*@.x.@ @.x...ff...x.@ @.x.@.##.@.x.@ @.x.@....@.x.@ @.x........x.@ @.x.@....@.x.@ @.x.@....@.x.@ @*x*@....@*x*@ @...@....@...@ @@@@@....@@@@@ .............. .............. .............. Bonus: .............. .............. .............. .............. ......44...... ......ll...... .............. .............. .............. .............. ..m........m.. ..m........m.. .mm........mm. .............. .............. .............. .............. .............. Level: Ade Stargate Bricks: ......@@...... .....@!!@..... ....@.!!.@.... ......@@...... .....@..@..... ...f@x..x@f... ...@.x@@x.@... ...f.@xx@.f... ..ff@.xx.@ff.. ..f@x.@@.x@f.. ..@.x@..@x.@.. ..f.@....@.f.. .ff@......@ff. .f@........@f. .@..........@. .............. .............. .............. Bonus: .............. ......mm...... ......mm...... .............. .............. .............. .............. ...b..mm..b... ..wb..mm..bw.. ..w.b....b.w.. ....4....4.... .............. .wb........bw. .w..........w. .............. .............. .............. .............. Level: Ade Brain Damage Bricks: .............. .............. .............. @@@@@@@@@@@@@@ @.jjjjjjjjjj.@ @.!zzzzzzzz!.@ ..j!yyyyyy!j.. ..jz!xxxx!zj.. ..jzy!!!!yzj.. ..jzyx!!xyzj.. ..jzy!!!!yzj.. ..jz!xxxx!zj.. ..j!yyyyyy!j.. .@!zzzzzzzz!@. .@jjjjjjjjjj@. .@@@@@@@@@@@@. .............. .............. Bonus: .............. .............. .............. .............. .bb........bb. .bb........bb. ..w........w.. ..w........w.. ..w..****..w.. ..b...bb...b.. ..w..****..w.. ..w........w.. .bw........wb. ..b........b.. ..b..4ll4..b.. .............. .............. .............. Level: Ade Innocent Victim Bricks: @@@abcjjcba@@@ @@@abc..cba@@@ @@@ab....ba@@@ @@@a..jj..a@@@ @@...zjjz...@@ @...yzjjzy...@ #..xyzjjzyx..# #@.xyzjjzyx.@# #@.xyzjjzyx.@# ##.xyzjjzyx.## ##@.yzjjzy.@## ##@..zjjz..@## ###a..jj..a### ###ab....ba### ###abc..cba### ###abcjjcba### .............. .............. Bonus: .............. .............. .............. .............. .............. ......**...... ......**...... ......**...... .............. .............. .............. .............. ......44...... .............. .............. .............. .............. .............. Level: Ade FreeCell Bricks: #a@yE@cx@#Eba@ #a@yE@cx@#Eba@ #a@yE@cx@#Eba@ #a@.E.c.@.Eba@ #a@.E.c...E.a. .a@........... .a............ .......x.....@ #...E..x.#..a@ #.@.E..x@#E.a@ #a@.E.cx@#E.a@ #a@.E.cx@#Eba@ #a@yE@cx@#Eba@ #a@yE@cx@#Eba@ #a@yE@cx@#Eba@ .............. .............. .............. Bonus: .............. .............. .............. ...........*.. ......*.....*. .*............ .*............ .............. .............. .............. .*....**....*. .4....ll...4.. .............. .b.b..bb...bb. .w.w..ww...ww. .............. .............. .............. Level: Ade Cube Bricks: .............. .............. .............. ...xxbb@@cc... ...xxbb@@cc... ...cc##aa**... ...cc##aa**... ...@@bbyyzz... ...@@bbyyzz... ...aa**jjbb... ...aa**jjbb... ...xxbb@@EE... ...xxbb@@EE... ...ccyybbzz... ...ccyybbzz... .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .........**... .........**... .............. .............. .....**....... .....**....... .............. .............. ......44...... .............. .............. .............. .............. Level: Ade Colorfull Bricks: .....aaaa..... ....iiiiii.... ...dggggggd... ..dEzzyyzzEd.. .dEzaa!!aazEd. dEz!ffffff!zEd dzafhhhhhhfazd x!fh******hf!x afh*eeeeee*hfa fh*ExExxExE*hf h*ex@.@@.@xe*h *Ex........xE* ex@........@xe x............x @............@ .............. .............. .............. Bonus: .............. .............. .............. .....mmmm..... ....mm..mm.... .............. ...m......m... .............. .............. ......44...... .............. .............. .............. .............. .............. .............. .............. .............. Level: Ade Crazy Bricks: @@@@@....@@@@@ @aaaa.EE.aaaa@ @abbb.EE.bbba@ @abcc....ccba@ @abcxxxxxxcba@ @abcxyyyyxcba@ @abcxyzzyxcba@ @abcxyzzyxcba@ @abcxyzzyxcba@ @abcxyzzyxcba@ @abcxyyyyxcba@ @abcxxxxxxcba@ @abcc....ccba@ @abbb.EE.bbba@ @aaaa.EE.aaaa@ @@@@@....@@@@@ .............. .............. Bonus: .............. .............. .............. .............. .***......***. .............. .............. .bbb..**..bbb. ......**...... ......ll...... .............. .***......***. ....4....4.... .............. .............. .............. .............. .............. Level: Ade Poison Bricks: .............. .............. .............. ..@@@@@@@@@@.. ..aaaaaaaaaa.. ..bbbbbbbbbb.. ..cccccccccc.. ..@@@@@@@@@@.. ..cccccccccc.. ..bbbbbbbbbb.. ..aaaaaaaaaa.. ..@@@@@@@@@@.. .............. .............. .............. .EEEEEEEEEEEEE .............. .............. Bonus: .............. .............. .............. .............. ..bwbbbbbbwb.. ..bwmwbbwbwb.. ..bwbbbbbbwb.. .............. ..bwbbbbbbwb.. ..bwmwbbwbwb.. ..bwbbbbbbwb.. .............. .............. .............. .............. .............. .............. .............. Level: Ade LazyClub Bricks: .............. .............. xxxxxxxxxxxxxx aaaaaaaaaaaaaa xxxxxxxxxxxxxx @@@@@@@@@@@@@@ xxxxxxxxxxxxxx aaaaaaaaaaaaaa xxxxxxxxxxxxxx @@@@@@@@@@@@@@ xxxxxxxxxxxxxx aaaaaaaaaaaaaa xxxxxxxxxxxxxx .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. mmmmmmmmmmmmmm !!!!!!!!!!!!!! ************** !!!!!!!!!!!!!! mmmmmmmmmmmmmm !!!!!!!!!!!!!! bbbbbbbbbbbbbb .............. .............. .............. .............. .............. Level: Ade On The Frontier Bricks: .............. x############x b@bbbbbbbbbb@b bb@bbbbbbbb@bb bbb@bbbbbb@bbb bbbb@bbbb@bbbb baabbbaabbbaab baabbbaabbbaab bbbbbbbbbbbbbb bbbb@bbbb@bbbb bbb@bbbbbb@bbb bb@bbbbbbbb@bb b@bbbbbbbbbb@b x############x .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ..b........... .**........... .**...mm...**. .**...mm...**. .**........... ..b........... .............. .............. .....4ll4..... .............. .............. .............. .............. .............. Level: Ade TNT Bricks: .@@@@@..@@@@@. .@xxx@..@xxx@. .@x*x@..@x*x@. .@x*x@..@x*x@. .@xxx@..@xxx@. .aaaaxxxxaaaa. .accax**xacca. .accax**xacca. .aaaaxxxxaaaa. .@xxx@..@xxx@. .@x*x@..@x*x@. .@x*x@..@x*x@. .@xxx@..@xxx@. .@@@@@..@@@@@. .............. .............. .............. .............. Bonus: .............. .............. ..***....***.. ..***....***.. .............. .....wwww..... .....bbbb..... .....bbbb..... .....wwww..... .............. ...*......*... ...*......*... ...4......4... .............. .............. .............. .............. .............. Level: Ade Going To Bagdah Bricks: ...EEEEEEEE... ....#....#.... aaaa#.aa.#aaaa .aaa@.aa.@aaa. ..aaaaaaaaaa.. E..aaaaaaaa..E E#@aaaaaaaa@#E E..aaaaaaaa..E E.ccaaccaacc.E E.ccaaccaacc.E E..aaaaaaaa..E E#@aaaaaaaa@#E E..aaaaaaaa..E ..aaaaaaaaaa.. .aaa@.aa.@aaa. aaaa#.aa.#aaaa ....#....#.... ...EEEEEEEE... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ..mm..mm..mm.. ..mm..mm..mm.. .............. .............. .............. .............. .............. ......44...... .............. .............. Level: Ade Dead Fish Bricks: ......xx...... .....xccx..... ....xcxxcx.... ...xcx..xcx... ..xcx....xcx.. .xcx......xcx. xcx..@..@..xcx cx..@cccc@..xc x..@cccccc@..x cx..@cccc@..xc xcx..@..@..xcx .xcx......xcx. ..xcx....xcx.. ...xcx..xcx... ....xcxxcx.... .....xccx..... ......xx...... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .....bbbb..... ....bbmmbb.... .............. .............. .............. .............. .............. ......ll...... ......44...... .............. .............. Level: Ade 38 Bricks: ffffffffffffff f@@@@@ff@@@@@f f@@@@@ff@@@@@f f@@@@@ff@@f@@f ffff@@ff@@f@@f ffff@@ff@@f@@f ff@@@@ff@@@@@f ff@@@@ff@@@@@f ff@@@@ff@@f@@f ffff@@ff@@f@@f ffff@@ff@@f@@f f@@@@@ff@@@@@f f@@@@@ff@@@@@f f@@@@@ff@@@@@f ffffffffffffff .............. .............. .............. Bonus: .............. .............. ......mm...... ......mm...... .............. .............. .............. .............. ......ll...... .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Ade www.death.com Bricks: .@@@@@..@@@@@. .@.f.@..@.f.@. .@.f.@..@.f.@. .@.f.@..@.f.@. .@.f.@..@.f.@. ...f......f... ...f......f... .ffffffffffff. .ffffffffffff. .ffffffffffff. ...f......f... ...f......f... .@.f.@..@.f.@. .@.f.@..@.f.@. .@.f.@..@.f.@. .@.f.@..@.f.@. .@@@@@..@@@@@. .............. Bonus: .............. .............. .............. ...b......b... .............. .............. .............. ...w......w... .bb4bbbbbb4bb. .............. .............. .............. .............. ...b......b... .............. .............. .............. .............. Level: Ade www.death.com Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Family0000664000175000017500000002644712140767201014452 00000000000000Version: 1.00 Level: Daddy Family Bricks: vvvvvv@vvvvvvv v.v.v.v@.v.v.v E!.!E!EE!E!E!E E...E.EE.E.E.E EEE!EEEEEE!EEE zzzzzzzzzzzzzz .......kik.... k#.*.#kikik..* ik###kik.kik## kik.kik###kik. .kikik..*..kik ..kik...###.ki zzzzzzzzzzzzzz ##kik###kik### .kikik.kikik.k kik.kikik.kiki ik###kik###kik zzzzzzzzzzzzzz Bonus: 333333.l3mmm33 >>>>>>l.>>>>>> .>.>.>..>.>... .5.5.5..5.5.5. ...>......>... 2222222222222j .......?f>.... ?..&..>Wpf?..& W>...?Wf.pf>.. fW>.>Wf...pf?. .fWWWf..&..p.. ..fff......... .wbwbwjw.wbwbw ..<><....W.... .<>p><.~WpW..~ .><.<><...<><...~W~ wbwbwdwdwdwbwb Level: Daddy Snow Storm Bricks: jjjjjjjjjjjjjj jvjvjvjjvjvjvj jjjjjjjjjjjjjj jvjvjvjjvjvjvj jjjjjjjjjjjjjj jvjvjvjjvjvjvj jjjjjjjjjjjjjj jvjvjvjjvjvjvj jjjjjjjjjjjjjj jvjvjvjjvjvjvj jjjjjjjjjjjjjj jvjvjvjjvjvjvj jjjjjjjjjjjjjj jvjvjvjjvjvjvj jjjjjjjjjjjjjj jvjvjvjjvjvjvj jvjvjvjjvjvjvj jjjjjjjjjjjjjj Bonus: bW.W.WwwW.W.Wb .4.4.4..4.4.4. .W.W.W..W.W.W. .3.3.3..3.3.3. .W.W.WwwW.W.W. .3.3.3..3.3.3. bW.W.W..W.W.Wb .1.1.1..1.1.1. .W.W.WwwW.W.W. .1.1.1..1.1.1. bW.W.W..W.W.Wb .0.0.0ww0.0.0. mW.WmW..WmW.Wm W0W0W0WW0W0W0W .W.W.W..W.W.W. W0W0W0WW0W0W0W b0m0m0ww0m0m0b WgWgWgWWgWgWgW Level: Daddy Boom Bricks: ************** *............* *.**********.* *.*........*.* *.*.******.*.* *.*.*....*.*.* *.*.*.**.*.*.* *.*.*.**.*.*.* *.*.*.**.*.*.* *.*.*.**.*.*.* *.*.*.**.*.*.* *.*.*.**.*.*.* *.*.*....*.*.* *.*.******.*.* *.*........*.* *.**********.* *............* ************** Bonus: 11111111111111 1............1 1.1111111111.1 1.1........1.1 1.1.222222.1.1 1.1.2....2.1.1 1.1.2.44.2.1.1 1.1.2.44.2.1.1 1.1.2.44.2.1.1 1.1.2.44.2.1.1 1.1.2.44.2.1.1 1.1.2.44.2.1.1 1.1.2....2.1.1 1.1.222222.1.1 1.1........1.1 1.1111111111.1 1............1 11111111111111 Level: Daddy Oh boy Bricks: vfv#vfv#vfv#** hvh#hvh#hvh#** v#v#v#v#v#v##* f#f#f#f#f#f#** v#v#v#v#v#v#** h#h#h#h#h#h#*# v#v#v#v#v#v#** f#f#f#f#f#f#** v#v#v#v#v#v##* h#h#h#h#h#h#.. v#v#v#v#v#v#.. f#f#f#f#f#*#*# v#v#v#v#v#*#** h#h#h#h#h#*#** v#v#v#v#v#*##* f#fvf#fvf#**** v#vhv#vhv#**** h############# Bonus: bwb.bwb.0w0.ll wbw.wbw.w0w.ll 0.0.0.0.0.0..l 0.0.0.0.0.0.ll 0.0.0.0.0.0.ll 0.0.0.0.0.0.5. 0.0.0.0.0.0.55 0.0.0.0.0.0.55 b.w.w.w.w.w..5 w.0.0.0.0.0... b.0.0.0.0.0... w.0.0.0.0.4.5. b.0.0.0.0.4.54 w.0.0.0.0.4.44 b.0.0.0.0.4..4 w.bwb.bwb.4444 b.wbw.wbw.4444 w............. Level: Daddy Fancy work Bricks: vvvvvvvvvvvvvv xcvvvvvvvvvvcx xcvvvvvvvvvvcx evvvvvvvvvvvve xcvvvvvvvvvvcx xcvvvvvvvvvvcx eevvvvvvvvvvee ycvvvvvvvvvvcy yccvvvvvvvvccy eeevvvvvvvveee yccvvvvvvvvccy ycccvvvvvvcccy eeeevvvvvveeee zcccvvvvvvcccz zccccvvvvccccz eeeeevvvveeeee eccceeeeeeccce ecceccccccecce Bonus: **...f??f...** ++..f?--?f..++ w..f?-WW-?f..w .*f?-WddW-?f*. g.?-Wd~~dW-?.g g.-Wd~{{~dW-.g ..Wd~{..{~dW.. ..W~{....{~W.. w..{......{..w ..g........g.. .............. ....<....<.... ...g>....>g... ....<....<.... w............w .....*..*..... ....++++++.... ...g......g... Level: Daddy Expand Bricks: @@@@@@@@@@@@@@ @............. @!..!..!..!..! @............. @............. @!..!..!..!..! @............. @............. @!..!..!..!..! @............. @............. @!..!..!..!..! @............. @............. @!..!..!..!..! @............. @............. @!..!..!..!..! Bonus: .............. .............. .............. ...........}g. .b..>.>.>.>.>.>. .............. .............. .............. &.&.&.&.&.&.&. .............. +s+..+s+...+s+ jjjjjjjjjjjjjj jjjjjjjjjjjjjj Level: Daddy Whew Bricks: **xxxxxxxxxxxx **yyyyyyyyyyyy *Exxxxxxxxxxxx *Eyyyyyyyyyyyy *Exxxxxxxxxxxx *Eyyyyyyyyyyyy *Exxxxxxxxxxxx *Eyyyyyyyyyyyy *Exxxxxxxxxxxx *Eyyyyyyyyyyyy *Exxxxxxxxxxxx *Eyyyyyyyyyyyy *Exxxxxxxxxxxx *Eyyyyyyyyyyyy *Exxxxxxxxxxxx *Eyyyyyyyyyyyy *Exxxxxxxxxxxx *EEEEEEEEEEEEE Bonus: bbggggggggggbb bbggggggggggdd b.ww........bb b.dddddddddddd b...........bb b...........dd b.ww........bb b.dddddddddddd b...........bb b...........dd b.ww........bb b.dddddddddddd b...........bb b...........dd w.ww........bb w.dddddddddddd w...........bb w............. Level: Daddy Alex Bricks: gggvgvvggvgvvg gvgvgvvgvvvggv gggvgvvggvvggv gvgvgvvgvvgvvg gvgvggvggvvvvv vvvvvvvvvvvvvv !!!!!!!!!!!!!! ***!***!***!*! *!*!*!*!*!*!*! *!*!*!*!*!*!*! *!*!*!*!*!*!*! *!*!*!*!*!*!*! *!*!*!*!*!*!*! *!*!*!*!*!*!*! *!*!*!*!*!*!*! *!*!*!*!*!*!*! *!***!***!***! *############# Bonus: 333.3l.33.3..3 3.3.3..3...33. 333.3..33..33. 3.3.3..3..3..3 3+3+33+33+.+.+ gbgbgbggbgbgbg ppp........ppp 000.000.000.0. 0.0.0.0.0.0.0. 0.0.0.0.0.0.0. 0.0.0.0.0.0.0. 0.0.0.0.0.0.0. 0.0.0.0.0.0.0. 0.0.0.0.0.0.0. 0.0.0.0.0.0.0. 0.0+0.0+0.0+0. 0+000+000+000+ 0............. Level: Daddy Michael Bricks: ivvvvgvvgvvvvi ivvvvvggvvvvvi i#gg#vggv#gg#i i#gg#gvvg#gg#i i####iiii####i iiiivvvvvviiii ivvvvvvvvvvvvi igvgv@gg@vgvgi ivgvv@gg@vvgvi igvgv@gg@vgvgi iiiii@@@@iiiii .............. !!!!!!!!!!!!!! !@@@@@@@@@@@@! !!!!!!!!!!!!!! ************** *EEEEEEEEEEEE* ************** Bonus: w..w..**..w..w .............. ..55......55.. ..55..**..55.. .............. ....w.**.w.... ......**...... .g.g..55..g.g. WWWWW.55.WWWWW WWWWw.l..wWWWW ccccc....ccccc ffffffffffffff ffffffffffffff f............f -------------- wb>>>wbw>>>>bw 3............3 33333333333333 Level: Daddy Mommy Bricks: ...dddddddv... .!.dddddddv.!. ...dddddddv... ..vd@@d@@dv... !zz@vv.vv@zz!. .zv@vg.gv@vz.. .zv@vg.gv@vz.. !zv@vvgvv@vz!. .zz@gvvvg@zz.. ...@vgggv@.... !..!@@@@@!..!. .............. vvvv.!..!.vvvv ..vv.#..#.vv.. !....#.!#....! *.!.!#..#!.!.* *****#..#***** ######!.###### Bonus: ...0112110.... ...0112110.... ...0112110.... bbb0..2..0bbbb ....33.33..... ..w.33.33.w... ..w.44.44.w... ..w.44444.w... b...55555...b. ....55l55..... .............. WWWWW~><~WWWWW b{{{~.<>.~{{{b {{{{{.><.{{{{{ ......<>...... bWWWW.><.WWWWb bbbbb.<>.bbbbb ......><...... Level: Daddy Daddy Bricks: vvvvvvvvvvvvvv .............. .............. .vvvvvvvvvvvv. .v..........v. .v..........v. .v.v.vvvv.v.v. .v.v.v..v.v.v. .v.v.v..v.v.v. .v.v.v..v.v.v. .v.v.v..v.v.v. .v.v.v..v.v.v. .v.v.v..v.v.v. .v.v.v..v.v.v. .v.v......v.v. .v.vvvvvvvv... yyyyyyyyyyyyyy zzzzzzzzzzzzzz Bonus: bbbbbbbbbbbbbb .............. .............. .bbbbbbbbbbbb. .b..........b. .b..........b. .b.4.5555.4.b. .b.4.5..5.4.b. .b.4.5..5.4.b. .b.4.5..5.4.b. .b.4.5..5.4.b. .b.4.5..5.4.b. .b.4.5..5.4.b. .b.4.5..5.4.b. .b.4......4.b. .b.44444444... }}...}}}....}} ++++++++++++++ Level: Daddy What to do Bricks: ###g######g### #i#.#iiii#.#i# ###.######.### .............. ..#...#...#... .#i#.#i#.#i#.. ..#...#...#... g............g ##...####...## #i#.#iiii#.#i# ##...####...## .............. ..#...#...#g.. .#i#.#i#.#i#.. ..#...#...#... .............. g#...#...#...# #i#.#i#.#i#.#i Bonus: 111m111111m111 1m1.155551.1m1 111.111111.111 .............. ..1...1...1... .151.151.151.. ..1...1...1... m............m 11...1111...11 151.155551.151 11...1111...11 .............. ..1...1...1m.. .1b1.1b1.1b1.. ..1...1...1... .............. m1...1...1...1 1+1.1+1.1+1.1+ Level: Daddy Just 6 to go Bricks: hhhxhxhxhxhxhh hhhhhhhhhhhhhx hhxhhh######hh hhhh##hhhhhhhx hh##hhhhxhhhxh hhhhhxhxhxhxhx hh##hhhhxhxhxh hhhh##hhhxhxhx hhxhhh##hhhhxh xhhhxhhh##hhhx hhxhhhxhhh##hh hhhhxhhhxhhhhh hhxhhhxhhh##hh hhhhxhhh##hhhx hhxhhh##hhxhxh xhhh##hhhxhxhx hh##hhxhxhxhxh #hhhhhhhhhhhhx Bonus: ww..........w+ ...~+~.f.f.gfw w...~.......w< .......+....<> ....b...w..<>+ g.lfb.~wbw~.-> ~~..b..~w~.->- w+......~.-.-> ~.w.pp..ff-<>- w...ppp...-~<> f.w.p+pf.-..{{ ..f.ppp..-fl.g .-...f.f-...{{ ..~...f-...~bw -....-......wb ...-........bw .-..W.wW.W.Wwb ..gW>WWW>>>>>>>>>>>1 0>2222222222>1 0>2>>>>>>>>3>1 0>2>444444>3>1 0>2>4>>>>5>3>1 0>2>4>gl>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>5555>3>1 0>2>4>>>>>>3>1 0>2>33333333>1 0>2>>>>>>>>>>1 0>111111111111 Level: Nethippy Fire Away! Bricks: .............. !!!!!!!!!!!!!! cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc .............. Bonus: ffffffllffffff jjjjjjjjjjjjjj 55555555555555 55555555555555 44444444444444 44444444444444 33333333333333 f33333ff33333f 33333333333333 22222222222222 22222222222222 22222222222222 22222222222222 }&}&}&}&}&}&}& pppppppppppppp pppppppppppppp pppppppppppppp .............. Level: Nethippy sMILE! Bricks: .............. .............. .....hhhh..... ....hhhhhh.... ...hvvhhvvh... ..hhvvhhvvhh.. .hhhhhhhhhhhh. .hhhhhvvhhhhh. .hhvhhhhhhhvh. .hhhvhhhhhvhh. ..hhhvvvvvhh.. ...hhhhhhhh... ....hhhhhh.... .....hhhh..... .............. .............. .............. .............. Bonus: .............. .............. .....****..... ....*>>>>*.... ...*55bb55*... ..*>55bb55>*.. .*>bbbbbbbb>*. .*>bbb55bbb>*. .*>5bbbbbbb5*. .*>b5bbbbb5>*. ..*>b55555>*.. ...*>bbbb>*... ....*>>>>*.... .....****..... .............. .............. .............. .............. Level: Nethippy Green Wall Bricks: zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz ffffffffffffff Bonus: ffffff{lffffff !5!5555!5555!5 555!5555!55!55 55!55!55555555 5555555555!!55 55!!5555555555 55555!5!555555 55555555555!5! !55!5555555555 555555!555!555 55!555555555!5 5555!555!55555 !5555555555!55 55!555!5555555 5555!5555!5555 >>>>>>>>>>>>>> bbbbbbbbbbbbbb wwwwwwwwwwwwww Level: Nethippy Kaboom! Bricks: .....!!!!..... ..!!!!**!..... ..!**!*!!!!!.. .!!********!.. .!******!!*!!. .!!!*!******!. ..!**!**!*!*!. ..!*!!**!*!*!. ..!*!!**!!!*!. ..!!!!**!.!!!. .....!**!..... .....!**!..... ....!!**!!.... ....!****!.... ..!!!****!!!.. !!!********!!! !************! ************** Bonus: .5555....5.... .5.......5555. 55..........5. 5...........55 5............5 5............5 55...........5 .5...........5 .5...........5 .5.......5...5 .5555....55555 ...55....55... ...5......5... .555......555. 55..........55 .............. .............. .............. Level: Nethippy Break On Thru! Bricks: ffffffffffffff ############## ############## ############## ############## ############## #######!###### ######!!!##### #####!!!!!#### ######!!!##### #######!###### ############## ############## ############## ############## ############## ############## gggggggggggggg Bonus: WWWWWWWWWWWWWW 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 mmmmmmmmmmmmmm mmmmmmmmmmmmmm Level: Nethippy Big Z Bricks: .............. .############. .!!!!!!!!!!!#. !!!!!!!!!!!!#. !!!!!!!!!!!!#. !!!!!!!!!!!#.. !!!!!!!!!!#... !!!!!!!!!#.... !!!!!!!!#...#! !!!!!!!#...#!! !!!!!!#...#!!! !!!!!#...#!!!! !!!!#...#!!!!! !!!#...#!!!!!! !!#...#!!!!!!! !#...#!!!!!!!! #...#!!!!!!!!! ...########### Bonus: .............. m............. m55555555555.. 555555555555.. 555555555555.. 55555555555.m. 5555555555.m.. 555555555.m..m 55555555.m..mm 5555555.m..m55 555555.m..m555 55555.m..m5555 5555.m..m55555 555.m..m555555 55.m..m5555555 5.m..m55555555 .m..m555555555 .............. Level: Nethippy Keep 'em Blue! Bricks: .............. ggggggggggggg. gE@EEEEEEE@Eg. g@hhhhhhhhh@g. gEh@@@@@@@hEg. gEh@iiiii@hEg. gEh@i@E@i@h@g. gEh@iEiEi@h@g. gEh@iE@Ei@hEg. gEh@iiiii@hEg. gEh@@@@@@@hEg. g@hhhhhhhhh@g. gE@EEEEEEE@Eg. ggggggggggggg. .............. .............. .............. .............. Bonus: .............. mm555555555mm. m...........m. 5.mm55555mm.5. 5.m...m...m.5. 5.5.mm5mm.5.5. 5.5.m...m.5.5. 5.5.5...5.5.5. 5.5.m...m.5.5. 5.5.mm5mm.5.5. 5.m.......m.5. 5.mm55555mm.5. m...........m. mm555555555mm. .............. .............. .............. .............. Level: Nethippy WonderWall Bricks: feggggggggggef fegddddddddgef fegdhhhhhhdgef fegdhiiiihdgef fegdhiiiihdgef fegdhiiiihdgef fegdhhiihhdgef fegddhiihddgef feggdhiihdggef feegdhiihdgeef ffegdhiihdgeff jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj Bonus: .............. 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? Level: Nethippy Level 13 Bricks: dddddddddddddd diiiiiiiiiiiid dihhhhhhhhhhid dihgggggggghid dihgg@gg@@ghid dihg@@ggg@ghid dihgg@gg@@ghid dihgg@ggg@ghid dihg@@@g@@ghid dihgggggggghid zzhhhhhhhhhhzz czziiiiiiiizzc cczzddddddzzcc ccczzddddzzccc cccczzddzzcccc ccccczzzzccccc cccccczzcccccc cccccczzcccccc Bonus: bbbbbbbbbbbbbb bbbbbbbbbbbbbb wwwwwwwwwwwwww >>>>>>>>>>>>>> 55555f55ff5555 5555ff555f5555 55555f55ff5555 55555f555f5555 5555fff5ff5555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 555555ll555555 55555555555555 }}}}}}}}}}}}}} pppppppppppppp Level: Nethippy Up The Middle! Bricks: ..!.!.gg.!.!.. .!.!.g..g.!.!. ..!.g.gg.g.!.. E!.g.g..g.g.!E ..h.g.gg.g.h.. .d.h.g..g.h.d. d.d.h.gg.h.d.d .d.d.h..h.d.d. d.d.d.hh.d.d.d .d.d..hh..d.d. d.d..!hh!..d.d .d..!.hh.!..d. d..!.!hh!.!..d ..!.!.hh.!.!.. @!.!.!hh!.!.!@ !.!.!.hh.!.!.! @!.!.!hh!.!.!@ xxxxxxxxxxxxxx Bonus: .5.5.5**5.5.5. ..5.5l..l5.5.. 55.5g.**.g5.55 ..5g.g..g.g5.. 55b.g.**.g.b55 .5.b.g..g.b.5. 5.5.b.**.b.5.5 .5.5.b..b.5.5. 5.5.5.bb.5.5.5 .5.555ww555.5. 5.5555ww.555.5 .55555}}5.555. 555555}}.5.555 555555}}5.5.55 555555}}.5.5.5 555555ww5.5.5. 555555ww.5.5.5 >>>>>>ww>>>>>> Level: Nethippy Chao-Wall Bricks: !..!.!..*...!! .**.!!***....! .***!******!.. *!**!!*!!**.@* *!.@!**.!.*.** ..!**!..*!!*.* .!!!!!*!**!*!. .!!!!****.!!!. .!!**@.!*!**!. .!!*!!*!!.*!@! .@!*!***.**!.! .*!!!!!*.!!.!. .!*!!!!!!*..!! .@*.@.*!*@*..! ..!.!!.**!*!.! !.*.!!**..**.* !!**!.*.*.*.** !!......!..!.. Bonus: .5555m5.m..5.. 5555..555.555. 5555.555555.55 5.55..5..555.5 5.5..555.55555 55.55.555..555 5.....5.55.5.5 5....55555...5 5..55.5.5.55.5 5..?..?.55?... 5..?.???5??.5. 5g.....?5..5.5 5.g......?55.. 5.g5.5g.g.g55. 55.5..5gg.g.5. }5g5..gg..gg5g }}gg.5g.g.g.gg }}5555........ Level: Nethippy Balls A Plenty Bricks: hhhhhgffgddddd hhhhhgffgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhggggddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiiiiddddd .............. Bonus: .............. 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} wwwwwwwwwwwwww 55555555555555 55555555555555 55555555555555 55555555555555 bbbbbbbbbbbbbb bbbbbbbbbbbbbb .............. Level: Nethippy The End Bricks: !!!.!.!.!!!... .!..!.!.!..... .!..!!!.!!!... .!..!.!.!..... .!..!.!.!!!... .............. .............. .!!!.!..!.!!.. .!...!!.!.!.!. .!!!.!.!!.!.!. .!...!..!.!.!. .!!!.!..!.!!.. .............. .............. .............. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: ...5.5.5...5.. 5.55.5.5.555.. 5.55...5...5.. 5.55.5.5.555.. 5.55.5.5...5.. 555555555555.. 5555555555555. 5...5.55.5..55 5.555..5.5.5.5 5...5.5..5.5.5 5.555.55.5.5.5 5...5.55.5..55 5555555555555. .............. .............. .............. ffffffffffffff >>>>>>>>>>>>>> lbreakout2-2.6.5/client/levels/Nations0000664000175000017500000001675112140767201014641 00000000000000Version: 1.31 Level: Bertrand GRONDIN Vatican Bricks: .............. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. .hhhhhhcccccc. Bonus: .............. .f..l55m..l55. ..f.....m...f. ...f.&.....f.. ....f...g.f... .....f...f.... ......f.f.m... ..*.*g.f.*.&*. ...4&.....4... ..........4g.. ...4.......... .....j........ ......ccc..... .....c..jc.... ..........g... .............. .????????????. .wbbwbbwwwwww. Level: Bertrand GRONDIN Italie Bricks: .............. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .zzzzcccc****. .............. Bonus: .............. .l...*........ .............. ...*.......... ........*..l.. .*.c.......... .............. ..l....l...... .....m........ ...*.......... .............. .*............ ...c.j........ ...........j.. ..j.....jw.... ....*...jw.... .ww...w*jwwww. .............. Level: Bertrand GRONDIN France Bricks: .............. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .ggggccccdddd. .............. Bonus: .............. .5555*44*4m44. ......d....... ...l..d.?..... .>...ffff...*. ...--.cl.-g... ..?..p..c.-... .............. ....}.&&..>... ..*....*j...?. ...c.?.jj..... .....3333..... ........>.*.&.. ...w.....&.w.. .....jj..j.... ..dl.....d.l.. ....5.....5... .g..WWWWWW..g. .c.l5.....5lc. .p...s..s...p. .............. .bwbwbwbwbwbw. .............. .............. .............. Level: Bertrand GRONDIN Finlande Bricks: .............. cccggccccccccc cccggccccccccc cccggccccccccc cccggccccccccc cccggccccccccc cccggccccccccc cccggccccccccc gggggggggggggg gggggggggggggg gggggggggggggg cccggccccccccc cccggccccccccc cccggccccccccc cccggccccccccc cccggccccccccc cccggccccccccc cccggccccccccc Bonus: .............. *....l...l...* .............. .....*....*... ...pp...m..... .............. .............. .............. g..55fffffffff ...55p...pg... ...55..mm..... .............. .............. .l.pp++++..l.. .............. .............. .............. **...l....m. ..5555555555.. ..d...**...d.. ....f..>.f.... .............. .*..*.l*..*... ..4444444444.. .....22}2..... ....c2222c.... ..p.3p&.3.p... ....33333..... ...wg..l.gw... ..1111111111.. ......j..j.... ..0000000000.. ..........0... .w....w..jw... Level: Bertrand GRONDIN Hongrie Bricks: .d*dd*dd*ddd*. .dddddddddddd. .*dd*ddd*dd*d. .dddddddddddd. .dddddddddddd. .dd*dd*dd*dd*. .cccccccccccc. .cccccccccccc. .cccccccccccc. .cccccccccccc. .cccccccccccc. .cccccccccccc. .zzzzzzzzzzzz. .zzzzzzzzzzzz. .zzzzzzzzzzzz. .zzzzzzzzzzzz. .zzzzzzzzzzzz. .zzzzzzzzzzzz. Bonus: .............. ...p..!...p... .&&....l.&..&. ...d.0000.d... .w..........w. .w*..*j*.j*jw. .....1111...&. ..-...l....-&. ..~..2222..~.. ...*...*..*... ...j...j...... ....m3333m.... .....4444.l... .....5555..... ...m*..m.*.... .............. .w............ .w.bw.b.wb.ww. Level: Bertrand GRONDIN Bosnie Herzegovine Bricks: ccccdddddddddd ccccdddddddddd ggggdddddddddd ggggdddddddddd ****d*dddddddd ****dddddd*ddd dddddddddddddd dddddddddddddd ddddddd*dddddd dddddddddddddd dddddddddddddd ddd*dddddddddd dddddddddd*ddd dddddddddddddd dddddddddddddd dddddddddddddd .............. .............. Bonus: 5555.>..>.l... 5555...!.!.!.. 4444..dddddd.. 4444...l.....* ........&..... ..........m... .....fffff.... ..*........*.. p........p.... ..&.~~~~~~.l.. .............. l..m..j.j*.... .............. .....p.....p.. &..&.......&.. w.bw..<<..bw.b .............. .............. Level: Bertrand GRONDIN Lettonie Bricks: .dddddddddddd. .d*ddd*dddd*d. .dddddddddddd. .dddddddddddd. .dddddddddddd. .dddddddddddd. .d*dd*ddd*ddd. .cccccccccccc. .cccccccccccc. .cccccccccccc. .dd*ddddddddd. .ddddddddddd*. .dddddddddddd. .ddddd*dddddd. .dddddddddddd. .dd*dddddd*dd. .dddddddddddd. .............. Bonus: .l...w..w...m. .............. ....fffff..l.. .b..*....*..b. .444444444444. .......g...... .............. .............. .555555555555. .............. .....cccc..... .333333333333. ...*.....*.... .}g.....l...}. .......g...... .............. ..w..w..w..w.. .............. lbreakout2-2.6.5/client/levels/Zufallswelt0000664000175000017500000002770212140767201015540 00000000000000Level: Guenter Guenters Rache Bricks: .............. ......a....... ......a....... ..e..e.e..e... ..@@@@@@@@@... ..@@@@@@@@@... ..@dyxxxyd@... ..@dzhhhzd@... ..@dzh*hzd@... ..@dyh@hyd@... ..@dyh.hyd@... ..@dc@.@cd@... ..EdE...EdE... ...E.....E.... .............. .............. .............. .............. Bonus: .............. ......-....... ......m....... ..{..w.w..{... .............. ..11..l..11... ..1g>>s>>g1... ..10f---f01... ..d.>~.~>.d... ..d.>bdb>.d... ..d-fb.bf-d... ..1?pd.dp?1... ...p.....p.... .............. .............. .............. .............. .............. Level: Guenter Spirale Bricks: eee........... .............. .....#........ ....@.#....... ...#...#...... ..#e.v..@..... .#eee#...#.... ..@e#...#.vvvv ...#...#...... ......@....... .....#........ ....#.yyyyyyyy ...@.......... v.#........... v#............ .............. .............. vvv........... Bonus: <.g........... .............. .............. .............. .............. ...5.......... ..555......... ...5......m-lm .............. .............. .............. ......fff?ffff .............. d............. d............. .............. .............. fff........... Level: Guenter Zauberhut Bricks: g............g ....dddddd.... ....d@@@@d.... ....dkEEkd.... ....d@@@@d.... ....dkEEkd.... ....d@@@@d.... !!..dkEEkd..!! !a..d@@@@d..a! a!..dkEEkd..!a .a!.d@@@@d.!a. ..add.xx.dda.. ...a!vvvv!a... xxxxx!!!!xxxxx ***z******z*** eeeeeeeeeeeeee .............. .............. Bonus: ?............? ....s....s.... ......jj...... .....4..4..... ......55...... .....3..3..... .s....55....s. .m...2..2...m. ......55...... .....g..g..... .............. .............. .....+dd+..... bbb-b.<<.b-bbb .............. .............. .............. .............. Level: Guenter Roesselsprung Bricks: dddddd@ddddddd dd.....v@ddddd d@.......v@vdd d..@........@d @....@.......d ...........@.d .@.bv.@......d ...@...bbbbb@d .......@.....d .............@ ......@....... ....@.......E. ..........@y.. yyy@....Ey.... ......@y...... ....Ey........ .............. ..v........... Bonus: 1b>b>b.-b>b>b1 1-.......b-bb1 1...........>1 m............1 .............1 .............1 ...f.........w .......-.....1 .............1 .............. .............. .............. .............. ccc........... .............. .............. .............. .............. Level: Guenter Frust Bricks: ......@@...... .............. .............. .@ffffffffff@. .@f...ii...f@. .@...EEEE...@. .@...h**h...@. .@..######..@. .@..h****h..@. .E.@@@@@@@@.E. ...h**!!**h... ..yyyyyyyyyy.. .....@@@@..... .dddddddddddd. .!!!!!!!!!!!!. eeeeeeeeeeeeee .............. .............. Bonus: ......ll...... .............. .............. ..}{.&**&.{}.. ..}...55...}.. .............. .............. .............. .............. ......gg...... .............. ......mm...... .............. ..+s+-<<-+s+.. ....<....<.... ?f?fcfccfcf?f? .............. .............. Level: Guenter brutale Gewalt Bricks: .............. .hh.....d..... hhh....d.@@@@. h.h...d.....@. h.h..d......@. h.hhd.yyy...@. h.....y.y...@. h.....yhy...@. hhhh..yyy...@. ...h........@. ..hh..@@....@. hhh..@@@@...@. h...@@@@@@..@. h@@@@@@@@@@@@. hh..........e. .h.E..cc..E.d. EEEE......EEEE .............. Bonus: .............. ..0.....g..... ..0....c...... ..0...c....... ..0..c........ ..00c.WWW..... ......W.W..... j.....W5W..... .0&&..WWW..... ...&.......... ..bb.......... pbb........... p............. p............. p<..........d. .<....m?....d. .............. .............. Level: Guenter Guenter Bricks: ############## ............@. .jjjx..jjjx.@. .j..x..j..x.@. .j.....j....@. .j.@@@.j.@@@@. .j.....j....@. .j.....j....@. .j.jj..j.jj.@. .j..j..j..j.@. .j..j..j..j.@. .j..j..j..j.@. .jjjj..jjjj.@. ..........z.@. .@@@@@@@@@@@@. .............. .yyyy..yyyy... .EEEE..EEEE... Bonus: .............. .............. .000s0>>0s000> .............. ....00ss00.... ....<<<<<<.... .............. .............. .............. .....gggg..... .............. ....~wssw~.... ....s4444s.... cscc~b11b~ccsc >.s.~0000~.s.> ssssssssssssss .............. .............. .............. .............. Level: Guenter Gluecksspiel Bricks: @............@ @.cccccccccc.@ @.EEE@##@EEE.@ @............@ @............@ @............@ @..EE@##@EE..@ @............@ @@..........@@ @....@..@....@ @....E..E....@ cccc.@..@.cccc #EE@.#..#.@EE# @....#..#....@ @....E..E....@ @....@..@....@ @....E..E....@ @....@cc@....@ Bonus: ?............? ?.??????????.? ?.??????????.? ?............? ?............? ?............? ?..????????..? ?............? ??..........?? ?....?..?....? ?....?..?....? ????.?..?.???? ????.?..?.???? ?....?..?....? ?....?..?....? ?....?..?....? ?....?..?....? ?....?mm?....? Level: Guenter Autsch Bricks: i.....jj.....i i.....jj.....i ......jj...... ......jj...... ......ii...... ......ii...... ......ii...... ......ii...... ......ii...... ......ii...... EEE...ii...EEE h.....ii.....h h.EEEEiiEEEE.h h.....ii.....h h....@@@@....h hEEE......EEEh h............h EE.EE.@@.EE.EE Bonus: 5.....44.....5 5.....44.....5 ......44...... ......44...... ......ff...... ......ff...... ......ff...... ......ff...... ......ff...... ......ff...... ......ff...... {.....ff.....{ f.....ff.....f f.....??.....f f............f f............f m............m .............. Level: Guenter Laecheler Bricks: .............. .............. .............. ...fff.fff.... .............. .............. ....d...d..... .xx.......xx.. .x.........x.. .x....i....x.. .xx...i...xx.. ......i....... ......x....... ...ee...he.... ....eeeee..... .....eee...... .............. .............. Bonus: .............. .............. .............. ...&l&.&l&.... .............. .............. ....g...g..... .++.......++.. .+.........+.. .+....j....+.. .++...j...++.. ......j....... ......j....... ...0f...f0.... ....00000..... .....000...... .............. .............. Level: Guenter Umpfffff Bricks: ......ff...... ..@@@@@@@@@@.. .............. .............. .@.@......@.@. .@.@......@.@. .@i@......@i@. .@@@......@@@. .@@@......@@@. .............. .............. ......@@...... ......@@...... .............. ...@..cc..@... ...@@@@@@@@... .............. .............. Bonus: ......55...... .............. .............. .............. .............. .............. ..5........5.. .............. .............. .............. .............. .............. .............. .............. ......mm...... .............. .............. .............. Level: Guenter Schnell oder aetzend Bricks: .............. .............. ..!!!!!!!!!!.. .............. xxxxxxxxxxxxxx xx**xxxxxx**xx x*****xx*****x xxxxxxxxxxxxxx ...@.......... .............. .....@.....@.. .............. .............. ..@........... .......@...... .............. ............@. .............. Bonus: .............. ..4444444444.. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Guenter Duesterwald Bricks: .............. .......c...... ..c........... ..c...c..c..c. .............. .............. ........c..... ......c.....c. ...c........c. ..........c... .............. .............. .c.....c....c. .............. .............. !!!!!!!!!!!!!! .............. ************** Bonus: .............. .......~...... ..2........... ..2...5..>..~. .............. .............. ........m..... ......>.....2. ...W........?. ..........-... .............. .............. .-.....W....2. .............. ff>>ff>>ff>>ff dddddddddddddd dddddddddddddd .............. Level: Guenter Chaos Bricks: ..dd.......... !.d.!!!!!!dd.! .d.......*.d.! .d..@.!!!x.d.! *!..ddd.#d!.!. d!!xx.d.!.!!x. .!..d!!E.!dx!. @!d.d!!d.!.!!d d!*...!!!xx!dd .!.d!!.d*.x... .x..x...!@d.!d .!.xx..!!!..!. .!#..d..ddx@xx ..dd..!!!!xx!. .d.d!!!...!!!. xd...d.Exd.@d. .d..dd@..dd.d. ...E....!..... Bonus: *.....d.}}.... ......df..fwf. .f.f.......... .....0.b.+..00 ...<.00..f!... fw....0.}....< ....}.d....5.. .f....5.. 00.w.ff.!.0.>c .0...d0~>..~.. ....?g0>.f.0.. ..b....0c...m. f....w.b0.0.w~ .j.1<.f.c00..~ .f.....++<...0 ...ff.+f...... ....b......... .............. Level: Guenter Glueck oder Pech Bricks: .e..@@@@@@..e. #............# eE..........Ee e.E...@@...E.e e..E!!!!!!E..e e............e #............# gE....@@....Eg g.E........E.g g..E!!!!!!E..g g............g #............# hE....@@....Eh h.E........E.h h..E......E..h h............h @@xxxxxxxxxx@@ .............. Bonus: .g..333333..g. 5............5 1............1 1.....33.....1 1.....mm.....1 1...------...1 5............5 ......55...... ....++++++.... ......??...... .............. 5............5 .............. .............. .............. p............p 55..........55 .............. Level: Guenter Hoelle Bricks: .............. hhhhhhhhhhhhhh hhhhhhhhhhhhhh .............. .............. .............. @@@@@@@@@@@@@@ @@@@@@@@@@@@@@ .............. .............. !!!!!!!!!!!!!! !!!!!!!!!!!!!! .............. zzzzzbbbbzzzzz z*z*@@@@@@*z*z zzzzzzzzzzzzzz !..!..!!..!..! zzzzzzzzzzzzzz Bonus: .............. 55555555555555 55555555555555 .............. .............. .............. ssssssssssssss {{{{{{{{{{{{{{ .............. 44444444444444 -------------- ~~~~~~~~~~~~~~ 44444444444444 l.....mm.....l &.&{{{{{{{{&.& dddddddddddddd &cc&cc&&cc&cc& >>>>>>>>>>>>>> Level: Guenter Himmel Bricks: z...!....!...z ......!!...... .!.!......!.!. .....!..!..... !..x......x..! ......!!...... .!.!......!.!. .....!zz!..... .............. !.!...!!...!.! ....!....!.... ..!........!.. .............. .!.!..!!..!.!. .............. ..!..!..!..!.. .............. .............. Bonus: ...00000000... 40003w..w30004 g000334433000g 00003.33.30000 .0..00bb00..0. 0001g1..1g1000 1.1.111111.1.1 11111.11.11111 00111111111100 .0.+++..+++.0. 00sw.0ss0.ws00 .*.000..000.*. 00000g22g00000 <.<.02..20.<.< 0&&&02<<20&&&0 .0000.00.0000. .............. .............. lbreakout2-2.6.5/client/levels/D2K0000664000175000017500000003416512140767201013605 00000000000000Version: 1.00 Level: noname pyramid 1 Bricks: ....!!!!!!.... ...!hhhhhh!... ..!hhhhhhhh!.. ccccccEEcccccc cccccc@@cccccc ****E@!!@E**** !!!E@!!!!@E!!! !!!@!!!!!!@!!! !E@!!!!!!!!@E! E@!!!!@@!!!!@E @!!!!@!!@!!!!@ !!!!@!!!!@!!!! v!!@!!cc!!@!!! !!@!!c..c!!@!! !@!!c....c!!@! !!!c......c!!@ !!c........c!! !c..........c! Bonus: ....22mm22.... ...25555552... ..2555555552.. .............. .............. ......mm...... ***..5555..*** ....544445.... l..54....45..l ..54......45.. &54..&mm&..45& 54...3333...45 4...3....3...4 4..3......3..4 4.3........3.4 &3..........3& 3............3 w............. Level: noname pyramid 2 Bricks: cc**********cc cc**********cc cc****EE****cc cc**@E@@E@**cc cc**#bbbb#**cc EE*#*!!!!*#*EE EE*#!!!!!!#*EE ..#!!!!!!!!#.. ..#!!!!!!!!#.. ..#!!!@@!!!#.. .#!!!@!!@!!!#. .#!!!@**@!!!#. .#!!@*bb*@!!#. #!!!@*..*@!!!# #!!@*b..b*@!!# #!!@b....b@!!# #!@b......b@!# ##@b..@@..b@## Bonus: 44..........44 44..........44 44..........44 44..5.55.5..44 44...&&&&...44 .....5555..... .............. .............. .............. ......55...... .....5mm5..... .....5..5..... ....5....5.... 4...5....5...4 4..g......g..4 4..gw....wg..4 4..w......w..4 4..w......w..4 Level: noname wedges Bricks: ge@EEEEEEEE@eg !ge@EEEEEE@eg! .!ge@EEEE@eg!. ..!ge@EE@eg!.. @..!ge@@eg!..@ E@..!geeg!..@E EE@..!gg!..@EE EEE@.!bb!.@EEE EEEE@!!!!@EEEE EEEE@!!!!@EEEE EEE@b.@@.b@EEE EE@b.@EE@.b@EE E@b.@EEEE@.b@E @b..b@EE@b..b@ b....b@@b....b ......bb...... .............. .............. Bonus: 4............4 .4..........4. ..4........4.. ...4......4... ....4m..m4.... .....4&&4..... ......44...... ......**...... .............. ....4....4.... ...4..55..4... ..4&.5..5.&4.. .4&.5....5.&4. 4b..m5..5m..b4 b....w55w....b ......ww...... .............. .............. Level: noname more wedges Bricks: .cc@******@cc. ..c*@EEEE@*c.. ...cc@EE@cc... i...cc@@cc...i @i...cccc...i@ x@i...cc...i@x xx@i......i@xx xxx@i....i@xxx xxxx@ixxi@xxxx xxxx@ixxi@xxxx xxx@i!!!!i@xxx xx@i!!kk!!i@xx x@i!!k@@k!!i@x @i!!k@EE@k!!i@ i!!!k@EE@k!!!i !!!!k@EE@k!!!! !!!k@EEEE@k!!! !!k@EEEEEE@kkk Bonus: .23...ll...32. ..2........2.. ...23....32... ....23..32.... .....2332..... 5.....22.....5 55..........55 555.&....&.555 5555..44..5555 5555..44..5555 555........555 55....gg....55 5....g..g....5 ....&....&.... m...&....&...m ....&....&.... ...w......w... www........www Level: noname more wedges Bricks: #************# *#EEEEEEEEEE#* @*#!!!!!!!!#*@ E@*#!!!!!!#*@E EE@*#!!!!#*@EE E@*#!!!!!!#*@E @*#!!!!!!!!#*@ *#!!!!!!!!!!#* @*#!!!!!!!!#*@ #@*#!!!!!!#*@# ##@*#!!!!#*@## #@*#!!!!!!#*@# @*#!!!!!!!!#*@ *EEEEEEEEEEEE* xxxxxxxxxxxxxx ************** !!!!!!!!!!!!!! bbbbbbbbbbbbbb Bonus: .............. .............. ......mm...... .............. ......44...... .....4554..... ....455554.... ...44555544... ....455554.... .....4554..... ...m..44..m... .............. .............. .............. +m....++....m+ .............. .............. .............. Level: noname stonewall Bricks: Ei..E****E..iE *Ei.iE**Ei.iE* E*Ei.*EE*.iE*E *E*EiE**EiE*E* ..E*E****E*E.. iiiE*E**E*Eiii ****E*EE*E**** iiiEeE**EeEiii E.Eee*EE*eeE.E !Eee*e**e*eeE! !!E*e*ee*e*E!! !!*Ee*ee*eE*!! !!!!E*ee*E!!!! !!!!!E**E!!!!! v!!!!!EE!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: .5....ll....5. ..5.5....5.5.. ...5......5... ....5....5.... .............. 444........444 .............. 444.3....3.444 ...33....33... w.33......33.w .w....&&....w. ..w...&&...w.. .............. .............. .............. .............. .............. gggggggggggggg Level: noname pod Bricks: hh*hhh**hhh*hh h*f*f*EE*f*f*h *fff*#EE#*fff* h*f*#*EE*#*f*h hf*E!!EE!!!*fh h*E!!!EE!!!E*h *E!!!!!!!!!!E* E!!!!!!!!!!!!E #!!!!****!!!!# *@!!!*EE*!!!@* !*#!!*EE*!!#*! g!*E!*EE*!E*!g fg!*E*EE*E*!gf fEg!*@EE@*!gEf fEEg!*!!*!gEEf fEEEg!!!!gEEEf fEEEEggggEEEEf ffffffffffffff Bonus: .............. .............. ..l........l.. .............. ....45..543... ...345..543... ...34555543... ...34555543... ...34.&&.43... ...34....43... ...34....43... ....4....4.... .....m..m..... .............. *............* *............* *............* *wwwggggggwww* Level: noname the blues Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! gEgEEEgEEEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! gEgEgEgEgEgEg! EEEEgEEEgEEEE! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 444444&444444& 333333&333333& .............. 5.5...5...5.m. 5.5.w.5.w.5.m. 5.5.w.5.w.5... 5.5.!.5.!.5... 5.5...5...5... 5.5...5...5... 5.5...5...5.b. 5.5...5...5.b. 5.5.&.5.&.5.b. 5.5...5...5.b. &.&...&...&.b. !.!.w.!.w.!.b. ....w...w..... &............& wb.wgggwggw.bw Level: noname shelves Bricks: @jjjj!*EEEEEEE @jjjj!*!!jjjj@ @jjjj!*!!jjjj@ @jjjj!*!!jjjj@ EEEEEEE!!jjjj@ @jjj*!*!!jjjj@ @jjj*!*!!jjjj@ @jjj*!*!!jjjj@ @jjj*!*EEEEEEE @jjj*!*!!kkkk@ @jjj*!*!!kkkk@ @jjj*!*!!kkkk@ EEEEEEE!!kkkk@ Ekkkkk*!!kkkk@ Ekkkkk*!!kkkk@ Ekkkkk*!!kkkk@ Ekkkkk*!!kkkk@ EEEEEE*EEEEEEE Bonus: .5555......... .5..3&..35555. .5..3&..3...5. .l555&..3...5. ........3...5. .5**....3...5. .5.3....3...5. .5.3....35555. .5.3.......... .5.3.....4444. .5.3.....3..4. .555.....3..4. .........3..4. .222bw.&.3..4. .2.3bw.&.3..4. .2.3bw.&.3..4. .222bw.&.44++. .............. Level: noname peano curve Bricks: #####!!!!##### #!!!#!!!!#!!!# #!!!#!!!!#!!!# #!!!#!!!!#!!!# #!!!#!!!!#!!!# #!!!#!!!!#!!!# #!!!#!!!!#!!!# #!!!#!!!!#!!!# #!!!######!!!# #!!!*!!!!*!!!# #!!!*!!!!*!!!# #!!!*!!!!*!!!# #####!!!!##### !!!!#!!!!#!!!! !!!!#!!!!#!!!! !!!!#!!!!#!!!! !!!!#!!!!#!!!! #####!!!!##### Bonus: .....5225..... .???.5225.???. .?...5225...?. .?...5225...?. .?...5225...?. .?...5225...?. .?...5555...?. .?...&22&...?. .?..........?. .?...????...?. .?...4444...?. .?.m.4444.m.?. .....4444..... &333.gggg.333& 3333.wbbw.3333 3333.bwwb.3333 3333.bwwb.3333 .....w..w..... Level: noname peano 2 Bricks: ####i####i#### #ee#i#ee#i#ee# ##e###ee###e## i#!!!!!!!!!!#i @@!!!!!!!!!!@@ @!!!!!!!!!!!!@ @!!!!!!!!!!!!@ EEEEE!!!!EEEEE vvvv#!!!!#vvvv vvvv#!!!!#vvvv vvE##!!!!##Evv vvEffffffffEvv vvEffffffffEvv vvE#@!!!!@#Evv vvgg@!!!!@ggvv ###g@!!!!@g### #h#g@!!!!@g#h# #h##@!!!!@##h# Bonus: ....l....l.... .&..........&. .............. &....m44m....& ......44...... ......44...... ......55...... ......55...... 3333..55..3333 3???.*55*.???3 3?...*55*...?3 3?.&&....&&.?3 3?.&&....&&.?3 3?...g55g...?3 3?...g55g...?3 .....gggg..... .w...&..&...w. .w..........w. Level: noname cantor Bricks: !!!!!!!!!!!!!! !!!!!!@@!!!!!! !!!!!!@@!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! ************** EEEEEE**EEEEEE dddddd**dddddd dddddd**dddddd ************** EEE*EEEEEE*EEE dddddddddddddd kk!kkkkkkkkkkk kkkkkkkkkkkkkk E.E.E.EE.E.E.E Bonus: 55555555555555 ?...&....&...? ?............? ?.....**.....? ?............? ?............? ?...ggggg....? ?..wwbbbbww..? .............. .............. ?44444..44444? ?44444..44444? .............. .............. .............. b&b&b&..&b&b&b .w.w.w..w.w.w. .............. Level: noname swath Bricks: !!!*Eee*e*e*e* !!!!*E*e*e*e*e !!!!!*E*e*e*e* !!!!!**E*e*e*e !!!!*!!*E*e*e* !!!*!!!!*E*e*e !!*!!!!!!*E*e* !*!!!!!!!!*E*e *!!!!!!!!!**E* E*!!!!!!!*!!*E !E*!!!!!*!!!!* !!E*!!!*!!!!!! !!*E*!*!!!!!!! !*!!E*!!!!!!!! *!!!!E*!!!!!!! !!!!!*E*!!!!!! !!!!*!!E*!!!!! !!!*!!!!E**### Bonus: 345........... 2345..&....... 1234&......... 01234......... j012.45....... ..0.2345...... ...012345..... l...012345...& .&..&01234.... .....&012.*5.. l......0.2345. 5w......012345 55.......01234 5.33......0123 .333w......012 33333.......01 3333..w......j w33....w...... Level: noname tiers Bricks: ..####..####.. ..#vv#..#vv#.. ..#vv#..#vv#.. ..#vv#..#vv#.. ..#vv#..#vv#.. @@@@*@@@@*@@@@ @vv@*@EE@*@vv@ @vv@*@EE@*@vv@ @vv@*@EE@*@vv@ !!!!!!EE!!!!!! !.!!*!EE!*!!.! !.!!*!EE!*!!.! !.!!*!EE!*!!.! @@@@*@@@@*@@@@ @!!#*#!!#*#!!@ @!!#.#!!#.#!!@ @!!@.@!!@.@!!@ @!!@.@!!@.@!!@ Bonus: .............. .............. .............. .............. ...&&....&&... 5555.5555.5555 5..5.5..5.5..5 5..5.5..5.5..5 5mm5.5..5.5mm5 ....*....*.... .............. .............. .............. .............. .??...??...??. .??...??...??. .bb...bb...bb. .ww...ww...ww. Level: noname eyes Bricks: EE@!@@@@@@!@EE E@!.!!!!!!.!@E @!..........!@ !..##....##..! !.#EE#..#EE#.! !#@!!@##@!!@#! !E!!!!EE!!!!E! E!!!!!@@!!!!!E !E!!!!EE!!!!E! h!@!!@!!@!!@!h h.!EE!!!!EE!.h h..!!!!!!!!..h h............h h............h h.!!!!!!!!!!.h h.!********!.h h.!*!!!!!!*!.h h.!*!@@@@!*!.h Bonus: ...m......m... .....4444..... .............. .............. .............. .............. ..5555..5555.. ..5555..5555.. &.5555..5555.& &.....??.....& ......??...... m.....??.....m m............m +............+ +...wwwwww...+ .............. .............. .............. Level: noname compartments Bricks: cccccccccccccc caaaaaaaaaaaac caaaaaaaaaaaac cccccccccccccc bEEEEEEEEEEEEb b************b b!*!!!!!!!!*!b b!!*!!!!!!*!!b b############b b************b b!*!!!!!!!!*!b b!!*!!!!!!*!!b b############b b************b b!!!!!!!!!!!!b b!!!!!!!!!!!!b b!!!!!!!!!!!!b b############b Bonus: c............c c............c c............c ***...ll...*** .............. .............. .....5555..... .....5mm5..... w............w b............b w...j5555j...w &...!5555!...& b............b w............w w............w &..j555555...& b..jgggggg...b w............w Level: noname tubes Bricks: gEEEEEEE#####g ggggggggggg##g gEEEEEEEEEgEEg g!!!!!!!!EgEEg g!!!!!!!!EgEEg g!!!!!!!!EgEEg g!!!!!!!!Egggg g!!!!!!!!EgEE# g!!!!!!!!EgEEg gEEEEEEE#EggEg ggggggggggggEg EEEEEEEE#EEgEg !**hhhhhhhEgEg !.*EEEEE#EEgEg !.*gggggggggEg !.*EEEEE#EEEEg !.*!!!!!!!!!!! EE............ Bonus: g.......ccc..l g5555555553..l g.........3..l g55555555.3..l g55555555.3..l g55555555.3..l g55555555.3ccc g55555555.3... g55555555.3..4 g.......&.35.4 g.......&.35.4 ........&..5.4 m....+++++.5.4 m.......&..5.4 m..&&.&&&&&5.4 m.......&....4 m..wwwwwwwwwww .............. Level: noname threadz Bricks: !!!!!!!!!!!!!! !************! !************! !!!!!!!!!!!!!! #...EEEEEE...# !#dddddddddd#! !!EddddddddE!! *!!EddddddE!!* !*!!#EEEE#!!*! !!*EfEiiEfE*!! !*EffEiiEffE*! *EfffEiiEfffE* #*ff*EiiE*ff*# ff**aEiiEa**ff ff*a.EiiE.a*ff f*a..EiiE..a*f *a...EiiE...a* #....EiiE....a Bonus: 44444444444444 l............l ...gggggggg... .............. .............. 4............4 4............4 .............. 4............4 4...m.55.m...4 4...m.55.m...4 ....m.55.m.... ......55...... ......55...... ......55...... ......55...... ......55...... ......55...... Level: noname stubble Bricks: @@!@@@!!@@@!@@ @!!!@!!!!@!!!@ !!!!!!!!!!!!!! @!!!!!!!!!!!!@ @@!!EEEEEE!!@@ @!!!@@@@@@!!!@ !!!!!@!!@!!!!! @!!!!!!!!!!!!@ @@!!!!!!!!!!@@ @!!!!@!!@!!!!@ !!!!@@@@@@!!!! @!!!EEEEEE!!!@ @@!!!!!!!!!!@@ @!!!!!!!!!!!!@ !!!!!!!!!!!!!! @!!!!@!!@!!!!@ @@!!@@@@@@!!@@ @!!!EEEEEE!!!@ Bonus: ..5...ll...5.. ..54......45.. ..54??????45.. &.5444444445.& &&5........5&& &.5........5.& ..5........5.. ..5........5.. ..5........5.. ..5...mm...5.. ..5........5.. &.5........5.& &&5........5&& &w5.wccccw.5w& ************** .????.mm.????. ..ww......ww.. .ggg......ggg. Level: noname spilling... Bricks: ......#**vvvvv .....x*#vvvvvv ....x*.Evvvvvv ...x*.Evvvvvvv ..x*.Evvvvvvvv .x*.Evvvvvvvvv x*.Evvvvvvvvvv *.E!!!!!!!!!!v .E!!!!!!!!!!!! EE!!!!!!!!!!E# .E!!!!!!!!!Evv ..EE!!!!!!Evvv ...E!!!!!Evvvv ....E!!!Evvvvv .....E!Evvvvvv ......Evvvvvvv .......Evvvvvv ........Evvvvv Bonus: ...........**& ...........**& ...........**& ...........**& ...........**& ...........**& ...........**& ...5555555555& ..55555555555. ..5555555555.. ..555555555.m. ...5555555.m.. ....55555.m... .....555.m.... ......l.m..... .......??????? ........?????? .........????? Level: noname rain Bricks: E*E*E*E*E*E*Ec E***E*E*E*E*Ec E*E*E*E*E*E*E* E*E*E*E*E*E*E* E*E***E*E*E*E* E*E*E*E*E*E*E* E*E*E***E*E*E* E*E*E*E***E*E* E*E*E*E*E*E*E* E*E*E*E*E*E*E* E*E*E*E*E***E* E*E*E*E*E*E*** E*E*E*E*E*E*E* E*E*E*E*E*E*E* E*E*E*E*E*E*E* EcEcEcEcEcEcE* EcEcEcEcEcEcE* !!!!!!!!!!!!!! Bonus: .5............ .?w........... .............. ...w.......... ...5.......... ...?.......... .......w...... .......5...... .......?...... .............. ...........w.. ...........5.. ...........?.. .............. .............w .............5 .............? .............. Level: noname whiskers Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!#*!!!!!!!!! !!#*!!#*!!*!!! !#*!!#*!!#*!!! #*!!#*!!#*!!!! *#!#*!!#*!!!!! a*#*!!#*!!!!!! va*#!#*!!!!#*! vva*#*!!!!#*!! vvva*#!!!#*!!! ....a*#!#*!!#! .....a*#*!!#*! ......a*#!#!!! vvvvvvva*#*!!! ........a*#!!! .........a*#!! vvvvvvvvvva*EE Bonus: 5555555555.555 44444444444444 .............. .............. g............. .............. ..g........... .............. j...g......... .............. ..m...g....... .......g...... .............. .........g.... ......m....... ...........g.. ............g. .........m.... Level: noname death ... Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: jf.l.fWj?-w??b !!??!&&d-+.-}l -Wdf.{&d..}.?W f?wb!&.+Wf.... ~fl...b&!>?&jw W+}~ssb?>?-f.? b..blf??b.-.j? j&wW.fWWWW?.l? ??-.~j>j.?{fb? ?.&j.f~!w?>!b+ .ddd+bb.W?>.&. l?fW&&&gg~ffW& b?{W!jggg.W&&. bw>>&jwwWd&.j! lm&b}}&&+.~w.. ~w&f!?f??>~>+! w...&?&w-b>ssw .fw{j...-jw&.. Level: noname and life. Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!*!!!!!!! !!!!!*E*!!!!!! !!!!*E!E*!!!!! !!!*E*!*E*!!!! !!*E!!!!!E*!!! !!!*E*!*E*!!!! !!!!*E!E*!!!!! !!!!!*E*!!!!!! !!!!!!*!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: ....l....l.... .............. ......5....... .....555...... ....55.55..... ...55...55.... ..55.....55... .55...l...55.. .5..??l??..5.. ..5...l...55.. ..55.....55... ...55...55.... ....55.55..... ?????555?????? ....&...&..... ...>>>>>>>>... +b+b+wb+w>b+b+ wwwwwww.wwwwww Level: noname moria Bricks: #######ff####f #aaaaa#ff#!!#f #aaaaa#ff#!!#f ###aaa#EEE!!#f aaaaaa!!!E!!#E a###!#!!!E!!!E a!!#!#!!!E!!!E a!!#!#!!!E!!aE aEEEEE#a####aE aa!#!!#a#!!#aE aa!!!!#a#!!#a! aa!!!!#a#!!#a! aa#####a#!!#!! aaaaaaaab..ba! aaaaaaaab..ba! ###aaaaa#..### gg#aaaaa#..#gg gg#######hhhgg Bonus: .....ll..ll..? .44444.**.55.? .......**.55.& ..........55.& 4.....555.55.. 4...5.555.555. 455.5.555.555. 455.5.555.55.. 4......4...... 445.55.4.bb.&. 445555.4.ww.&m 445555.4.ww.&. 44.....4.ww... 44.....4?..?*. 44....&*?..?*. ....gg&*...... &&.mgg&*....&& .........ppp.. lbreakout2-2.6.5/client/levels/HereWeGo0000664000175000017500000001614712140767201014672 00000000000000Level: migs automobile Bricks: ............... ............... ............... .....ffyff..... ....ffffgff.... ....ffffggf.... ....fyffggf.... ....ffffggf.... ..ffffffggffy.. ..fyffffffffff. ..ffffyffffyfh. ..@fffffyfffff. ..fffffffffff.. ....aaa..aaa... ....aja..aja... ....aaa..aaa... ...cc!cccc!cc.. ............... Bonus: ............... ............... ............... .....!.+.>..... ....1.2.0.}.... .....<.?0...... ....+~p.0m+.... .....2.-0...... ..}2...20.b1... ....b?W...2.?<. ..sw.-.>-c+.... ....2c.2.1.w.+. ..1b.?-.~...... ....<.s..<>.... .....W.....d... ....-.d..{..... ...+..w.-+.?... ............... Level: migs robot Bricks: ............... ............... ......aEEa..... ......a**a..... ......a**a..... ......aaaa..... ......ahha..... ......ahha..... ......aaaa..... ......affa..... ......affa..... ......aEEa..... .......aa...... .......aa...... .......aa...... .......aa...... .....@@@@@@.... ............... Bonus: ............... ............... ......0..-..... ......+.-c..... ......0?....... .........0..... ......0>.W..... ......b.f0..... ......0..b..... ......-5.0..... ......0<++..... ......W..0..... .......s....... .......dw...... .......f....... ........>...... ............... ............... Level: migs red-man Bricks: ............... ......d*d...... .....d*d*d..... .....*d*d*..... ......*d*...... .......*....... .......d....... .....*d*d*..... .....d*d*d..... .......*....... .......d....... .......*....... .......d....... ......*.*...... .....d...d..... ....*.....*.... ............... ............... Bonus: ............... ......0.0...... .....1.-.1..... .....2c.c2..... .......-....... .......3....... .......>....... ......d.d...... .....~.>.~..... ............... .......f....... .......3....... .......W....... ............... .....<...<..... ............... ............... ............... Level: migs sand lorry Bricks: ............... ............... ...ddd......... ..ddddd..eee... ..dvvdd.eeeee.. ..dvvddeeeeeee. ..dvvddeeeeeee. ddddddddddddd. ddddddddddddd. hd*dddddd*ddd. hdddddddddddd. ddddddddddddd. ..daaaddddaaad. ...aja....aja.. ...aja....aja.. ...aaa....aaa.. ............... ............... Bonus: ............... ............... ............... ..}.W-l..+.s... ...~.1....w.-.. ....c+?s.d.d.?. ..~f5...b.-f... *.1?.}d.-1.?-. ..?.!c.1&.g?.+. -b..w+.4...}.. ...+&?.?..d....d.>.. ............... ............... Level: migs dodge 'em Bricks: v............. .....ddd*dd...v ....dddddddd... ...dd*ddddddd.. ..dddddddd*ddd. d*dddddddddddd djjjjjjjjjjjjd djd*dj*j*jj*jd djjjdjdjdjjjjd *ddjdjdjdjjddd djjjdjdjjjjddd dddddddddddddd ..dddd*dddddd*. ...dddddddddd.. ....ddddd*dd... .....dddddd.... ............... ............... Bonus: ............... .....j0!....... ....-!0!.>{0... ...4c.!03d01-.. ..}w+?{.w!.f.1. {.!+.?+!.-?!>. ..!*d>c.bc.!3&- ?5~.!s.?.!g.!w !p!c!4f!m0~0> ..<0{!g!0c{!c.. ...b?-!jd?.?+.. ....~0?w!.!.... .....{wd-<0.... ............... ............... Level: migs jet Bricks: ............... ......v......@. ......k........ ......k...@.... ...@..k........ ......k......k. ......k......k. ......k......k. ...kkkkkkkkkkk. ..kckckckckckc. ...kkkkkkkkkkk. ......k......k. ......k......k. ......k......k. ..@...k........ ......k..@..... ......k........ ......v........ Bonus: ............... ............... ......w........ ......!........ ......<........ .............?. ......}........ .............W. ...-b.?-*.>b-s. ..?0c1p2.2.1c0. ...+&~?+>.d&+.. ......~......W. ......{........ .............?. ......<........ ......!........ ......w........ ............... Level: migs choo-choo Bricks: .....j......... ....j...ddddd.. ...dd...dvvvd.. ...dd...dvvvd.. ...dd...ddddd.d ...dd...ddddd.d ..ddddddddddd.d ..ddddddddddd.d ..ddddddddddd.d ..ddddddddddd.d ..ddddddddddddd ddaEadddaEad.d ...aaa...aaa... ...aja...aja... ...aaa...aaa... ...aaa...aaa... ..@##@#.#@#@@v. ............... Bonus: ............... ....4...0.W.?.. ...?.....?W.0.. ...c!...fm4.... ...-0...f.2s..! ...2?....0.!W.0 ..->.<>0..2p..0 ..f00d.ss0Wd..0 ...?&+4?...0..f ..4cs.c.b?>.W.W ..!W>4W022.?cd1 m0fdW---.5.0.+ ....2<...<0.... ...0}c.....b... ....W....0-.... ...w5+...j.0... ..f{gd0.4d{0.+. ............... Level: migs chevron Bricks: ............... ............... ............... jjjjjjjjjjjjjj h..hh..hh..hh. ...hh..hh..hh.. ..hh..hh..hh..h hh..hh..hh..hh h..hh..hh..hh. ...hh..hh..hh.. ..hh..hh..hh..h hh..hh..hh..hh h..hh..hh..hh. jjjjjjjjjjjjjj ............... ............... ............... ............... Bonus: ............... ............... ............... w.?.f.bb.f.?.w ~..11..&...00. ...11......00.. ..11..?<..00..& 11...-..00..+. 1..?<..00..>?. ....-..00..+... ..?<..00..>?..2 .....00......22 *..00..}{..22. c.j.>.WW.>.jmc ............... ............... ............... ............... Level: migs all aboard!! Bricks: .......j@.....v .......j@f..... ......jj@f..... .....jjj@yf.... .....jjj@yf.... ....jjjj@yyf... ...jjjjj@yyf... ...jjjjj@yyyf.. ..jjjjjj@fffff. .......v@v..... ..eeeeeeeeeeee. ...eeeeeeeeeee. ....eeeeeeeee.. .....eeeeeee... ...!..!ee!e.!.. gggggggggggggg gggggggggggggg ............... Bonus: .......0....... ........1?..... .......?....... .....!-.j0..... .....0.1..W.... ......W.4}0.... ...01d<2pl.0... ....b.?0jm2?... ..?-.0.....1.0. ........1...... ..21*?.0.W0.2!. ....012w.0db... .....!.1{?.&1.. ......0.W.0.... ...>...~..>.... 0&0?{+.<.?010? f0.c0.>.0.!0.f ............... Level: migs yello sub Bricks: ....hh......... ...!vh..!..!g.. EggghEgggEggEg .....h......... ...y.h.....yy.. @x..h....f..z. z...h......... ....hhhhhhhhh.. ...hhhhhhhhhhh. x.hhhhhhhhhhh. ...hhhhhhhhhhh. ...hhhhhhhhhhh. ...hhhhhhhhhhh. ...hhhhhhhhhhh. ....hhhhhhhhh.. z.x........... ..y........y... ........@...... Bonus: ............... ...<42..?..d... ..c<...<<....... -.f........... ...........>... ........!...... Level: migs traffic Bricks: ............... jjjjjjjjajajjj .........g!g... ..ada....a.a... ............... vjvjvjvjvjvjvj ....a.a.....a.a ....iii.....@@@ ....a.a.....a.a cccccccccccccc a.a........... yyy.....afa... a.a........... vjvjajajvjvjvj .....hhh..a.a.. .....a.a..d*d.. ..........a.a.. jjjjjjjjjjjjjj Bonus: ............... 2.?w.c.&...-.2 .........W..... ..Wl.......?... ............... 1-1?1.1.*.1w1. ......3........ .....m......p.5 ....3.......... !2.s&.j-.?c2&! ............... ?w+.....Ws.... ............... ..0+0.0.0.0+0?0 .....Ws........ ..........+.... ............... >.b.>.<.>.b.>. Level: migs bridge o' troubled h2o Bricks: ..............v ddd.......ff.. dddd..v...fff. cccccccccccccc a.ca.c..c.aca. aaaaaaaaaaaaaa ekkkkkvvkkkkke ekkkk....kkkke ekkk......kkke ekk...v...vkke ekk........kke ek..........ke ek....v..v..ke ek.v........ke ee..........ke ee.........vee eee.v......eee eeeeeg!!ggeeee Bonus: ..............j ?.*........p.. +4.1..g...+.3. ..>.{.{!2~&w?.? &..?......~W<. ..w.s.ff.}-.c.f !-..?>.?4.1.2! ...-0-....b-&.. ..<........c{>1 c.f...W...?... ..>.........~0m 1............. ..}....j..+..s~ ~..<........&1 ..{............ ?-.........b.? ...?.>......c-. !0>0+0.?0<.W0! lbreakout2-2.6.5/client/levels/Daves0000664000175000017500000002324212140767201014261 00000000000000Version: 2.00 Level: Dave W. Warm-Up Bricks: .............. gggggggggggggg gggggggggggggg g............g g............g g............g g..jjjjjjjj..g g..jjjjjjjj..g g..j......j..g g..j......j..g g..j......j..g g..j..dd..j..g g..j..dd..j..g g..j..dd..j..g g..j..dd..j..g g..j..dd..j..g g..j..dd..j..g #..#..##..#..# Bonus: .............. +..s......s..+ .............. .............. .............. .............. -..<......<..- .............. >..>......>..> .............. .............. 1..1..11..1..1 .............. .............. ......>>...... ...-......-... c..+..bb..+..c .............. Level: Dave W. Stop 'n' Go Bricks: d.f.h.d.f.h.d. d.f.h.d.f.h.d. .............. .............. .h.d.f.h.d.f.h .h.d.f.h.d.f.h .............. .............. c.c.c.c.c.c.c. c.c.c.c.c.c.c. .............. .............. .h.d.f.h.d.f.h .h.d.f.h.d.f.h .............. .............. d.f.h.d.f.h.d. d.f.h.d.f.h.d. Bonus: >...0.>...0.>. -.+...-.+...-. .............. .............. .0.>.<.0.>.<.0 ...-.....-.... .............. .............. .............. .............. .............. .............. .0.....0.....0 ...-.....-.... .............. .............. >.....>.....>. .............. Level: Dave W. "Have a Nice Day" Bricks: .....hhhh..... ....hhhhhh.... ....hhhhhh.... ...hhhhhhhh... ...h#hhhh#h... ...h#hhhh#h... ..hh#hhhh#hh.. ..hhhhhhhhhh.. ..hhhhhhhhhh.. ..hhhhhhhhhh.. ..hhhhhhhhhh.. ..hh#hhhh#hh.. ...hh####hh... ...hhh##hhh... ...hhhhhhhh... ....hhhhhh.... ....hhhhhh.... .....hhhh..... Bonus: .....5555..... .............. .............. .....l..m..... .............. .............. .....<..<..... .............. .............. .............. ....W....W.... .....+--+..... .............. .....b..b..... ...>......>... .............. .....>..>..... .............. Level: Dave W. Arara Bricks: jjjjjjjjjjjjjj hhhhhhhhhhhhhh ffffffffffffff .............. .............. hhhhhhhhhhhhhh eeeeeeeeeeeeee eeeeeeeeeeeeee eeeeeEeeEeeeee ddddE....Edddd ddddE.hh.Edddd ddddE.hh.Edddd ddddE....Edddd dddddEEEEddddd .............. .............. .............. .............. Bonus: .............. 00000000000000 +b}s+b&&b+s}b+ .............. .............. 00000000000000 .............. .............. .............. WWWW......WWWW >>>>..44..>>>> {&{{..44..{{&{ ----......---- >>>>>....>>>>> .............. .............. .............. .............. Level: Dave W. The Panic Room Bricks: eEeE......EeEe cjcj......jcjc .............. .............. .............. .............. jfjEEE.EEEjjfj jjE!!E.E!!Ejjj ..E!.....!E... ..E!.....!E... ..E!.ccc.!E... jfE!.cic.!Ejfj jjE!.ccc.!Ejjj ..E!.....!E... ..E!!!!!!!E... ...EEEEEEE.... .............. .............. Bonus: *.*........*.* .............. .............. .............. .............. .............. .b..........b. ...b.....b.... .............. .............. .............. .+....l.....+. .............. .............. ...b.....b.... .............. .............. .............. Level: Dave W. K.I.S.S. Bricks: .............. .k.k.k..k.k.k. .............. .d.d.d..d.d.d. .............. .c.c.c..c.c.c. .............. .e.e.e..e.e.e. .............. .x.x.x..x.x.x. .............. .h.h.h..h.h.h. .............. .c.c.c..c.c.c. .............. .j.j.j..j.j.j. .............. .z.z.z..z.z.z. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .b.*.b..b.*.b. .............. .............. .............. .............. .............. .............. .............. .............. Level: Dave W. Apparitions Bricks: hhhhhhhhhhhhhh hffffffffffffh hfggggggggggfh hfg........gfh hfgvv.vv.vvgfh hfgvv.vv.vvgfh hfg........gfh hfg........gfh hfgvv.vv.vvgfh hfgvv.vv.vvgfh .............. .............. vv..vv..vv..vv vv..vv..vv..vv .............. .............. .EEvvE..EvvEE. .............. Bonus: 11111111111111 1............1 1............1 1s..........s1 1..b...f..b..1 1...>.5..>...1 1............1 1............1 1+..W..5.W..+1 1..>..f...>..1 .............. .............. -...>....>...- .>...-..-...>. .............. .............. ...-......-... .............. Level: Dave W. Bull's-eye Bricks: ffffffffffffff ffffffffffffff .............. .....####..... ...##....##... ..#........#.. ..#..EEEE..#.. .#..gggggg..#. .#.EgjjjjgE.#. .#.EgjddjgE.#. .#.EgjddjgE.#. .#.EgjjjjgE.#. .#..gggggg..#. ..#..EEEE..#.. ..#........#.. ...##....##... .....####..... .............. Bonus: +......m.....+ .............. .............. .............. .............. .............. .............. ....b....b.... .............. .......l...... .............. .............. .............. .............. .............. .............. .............. .............. Level: Dave W. Spectra Bricks: .............. .ii........... .##........ee. ...........##. .ee.....ee.... .##.....##.hh. ....hhh....##. ....###....... .............. .hh........... .##.....ff.... ....fff.##.ff. ....###....##. .dd........... .##.ddd....... ....###....kk. .kk........##. .##........... Bonus: .............. ..l........... .............. .............. .............. ...........4.. ....2.2....... .............. .............. ..3........... ........b..... ....+.+....b.. .............. ..>........... ....-.-....... .............. .............. .............. Level: Dave W. Double Barreled Bricks: kkkkkkkkkkkkkk kkkkkkkkkkkkkk kkkkkkkkkkkkkk kkk........kkk kk!!!!..!!!!kk kk!**!..!**!kk kk!!!!..!!!!kk kkk........kkk kkkkk****kkkkk kkkzzzzzzzzkkk kkkkcccccckkkk kkkkkcccckkkkk kkkkkkcckkkkkk kkkkkkkkkkkkkk #kk@#kkkk#@kk# .............. .............. .............. Bonus: *.>.s.b+.s.>.* .............. -.-.W....W.-.- .............. .<.2gf..fg2.<. b..5.5..5.5..b ...f52..25f... .............. .............. >.>.-....-.>.> .............. .............. d...d....d...d +..b+....+b..+ .............. .............. .............. .............. Level: Dave W. The Desert Bricks: .ev.ev..ev.ev. .ev.ev..ev.ev. .ev.ev..ev.ev. .ve.ve..ve.ve. .ve.ve..ve.ve. .ve.ve..ve.ve. .ev.ev..ev.ev. .ev.ev..ev.ev. .ev.ev..ev.ev. .ve.ve..ve.ve. .ve.ve..ve.ve. .ve.ve..ve.ve. .ev.ev..ev.ev. .ev.ev..ev.ev. .ev.ev..ev.ev. .ve.ve..ve.ve. .ve.ve..ve.ve. .ve.ve..ve.ve. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Dave W. Crunchy Egg Bricks: .............. .............. .bjjj####jjjb. .bjE#!..!#Ejb. .bE.!.!!.!.Eb. .bE!.!..!.!Eb. .E!.!.!!.!.!E. .E.!.@..@.!.E. .E!.!.!!.!.!E. .E.!.!..!.!.E. .E!.!.!!.!.!E. .E.!@!..!@!.E. .E!.!.!!.!.!E. .E.!.!vv!.!.E. .bE.!v!!v!.Eb. .bE!v!ii!v!Eb. .bjEE!ii!EEjb. .bjjjEEEEjjjb. Bonus: .............. .............. .s..........s. ..W........W.. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .&..........&. .m..........m. ..b...gg...b.. .............. Level: Dave W. Fort Knox Bricks: gggggggggggggg jjjjjjjjjjjjjj eeeeeeeeeeeeee jjjjjjjjjjjjjj gggggggggggggg .............. .............. vEEEEEvvEEEEEv ..!v*zffz*v!.. .!.!vzffzv!.!. ..!.!#hh#!.!.. .!.!.#hh#.!.!. ..!.!#hh#!.!.. .!.!.#dd#.!.!. ..!.#dddd#.!.. .!.!#dddd#!.!. ..!#dddddd#!.. ###dddddddd### Bonus: ....s....+.... .............. .*..........*. .............. .............. .............. .............. .............. .>&{..+s..{&>. .c>4f.!j.f4>c. .{3-4.22.4-3{. .1d4d.11.d4d1. .-2{5.00.5{2-. .1f3>.>>.>3f1. .{2>.WWWW.>2{. .1-3.WWWW.3-1. .>2.W-WW-W.2>. ...WWWWWWWW... Level: Dave W. Snail Bricks: E...aaaaaaaaaa E...aaaaaaaaaa E...aaaaaaaaaa E...EEEEEEaaaa E..E......Eaaa E..E.......Eaa E..E.......Eaa E..E..zz...Eaa E..E..z!z..Eaa E..E....z..Eaa E..E....z..Eaa E...E...z..Eaa E....EEE...Eaa E..........Eaa E..........Eaa aE........Eaaa aaEEEEEEEEaaaa aaaaaaaaaaaaaa Bonus: .......*.....* .............. .............. ..........*... ...........*.. .............. .............. ......<<...... ......->->->->->-> .............. .............. .............. ..s........s.. .............. .............. >->->->->->->- .............. .............. .............. Level: Dave W. The Maze Bricks: fff#hhhhhh#fff jjj#hhhhhh#jjj jjj#EEEEEE#jjj dddddddddddddd .............. ##c###cc###c## ffffffffffffff jjjjjjjjjjjjjj jjjjjEEEEjjjjj dddddddddddddd .............. c#####cc#####c ffffffffffffff jjjjjjjjjjjjjj jjjjjEEEEjjjjj dddddddddddddd .............. ##c###cc###c## Bonus: m...555555...m ....555555.... .............. ->W>->WW->-W>- .............. .............. ...+......+... .............. .............. >->->->->->->- .............. .............. ..s........s.. .............. .............. ->->->->->->-> .............. .............. Level: Dave W. Nup-Nup Bricks: .............. .djdjdjdjdjEv. .jhjhjhjhjEdv. .fjfjfjfjEhjv. .jhjhjhjEfjdv. .hjhjhjEhjhjv. .jdjdjEhjfjdv. .jEEjEdjhjhjv. .E!!Efjhjfjdv. .z!!cjdjhjhjv. .E!!Efjhjfjdv. .jEEjEdjhjhjv. .jdjdjEhjfjdv. .hjhjhjEhjhjv. .jhjhjhjEfjdv. .fjfjfjfjEhjv. .jhjhjhjhjEdv. .djdjdjdjdjEv. Bonus: .............. .>.-.>.-.>.... ..0.0.0.0..>.. .+.s.+.s..0... ..1.1.1..s.-.. .2.2.2..1.0... ..>.-..2.b.>.. ......>.1.0... ..55.*.2.&.{.. ..55..-.1.0... ..55.*.2.}.{.. ......>.1.0... ..>.-..2.b.>.. .2.2.2..1.0... ..1.1.1..s.-.. .+.s.+.s..0... ..0.0.0.0..>.. .>.-.>.-.>.... lbreakout2-2.6.5/client/levels/Pawset0000664000175000017500000001560312140767201014464 00000000000000Version: 0.40 Level: Paweusz Don't be greedy Bricks: .............. .............. .EEEEEEEEEEEE. .E**********E. .E*EEEEEEEE*E. .E*E******E*E. .E*E*EEEE*E*E. .E*E*E**E*E*E. .E*E*E**E*E*E. .E*E*EE*E*E*E. .E*E****E*E*E. .E*EEEEEE*E*E. .E********E*E. .EEEEEEEEEE*E. ************E. EEEEEEEEEEEEE. fff........... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. ......00...... ......55...... .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Paweusz A Fortel Bricks: .............. ..hhhhhhhhhh.. ..hggggggggh.. ..hgffffffgh.. ..hgfjjjjfgh.. ..hgffffffgh.. ..hggggggggh.. ..hhhhhhhhhh.. ..bbbbbbbbbb.. @@@@@@@@@@@@@@ kk.@......@.kk @@.@......@.@@ .............. .............. .............. .............. .............. .............. Bonus: .............. ......~....?.. ..........c?.. ...>.......?.. .....m.....?.. ........m..?.. ...+.......?.. ..-......f.?.. ...........?.. ....llgll..... m5..........5m .............. .............. .............. .............. .............. .............. .............. Level: Paweusz The Patience Bricks: ......@....... ...@.........@ ....@.@.@.@@.* .@...i...i.... *...@.@.@.@... .............. ....@.@.@.@... @....i...i.... ....@.@.@.@.@. .............. ..@........... *....@..@.@.*@ .@....@....... ...@.......... ............@. .....@.@..@... @............. ...@...@.@..@. Bonus: .............. .............. .............3 .....2...m.... b............. .............. .............. .....0...1.... .............. .............. .............. w...........l. .............. .............. .............. .............. .............. .............. Level: Paweusz Have a nice day :) Bricks: cafij.*..jifac afij......jifa fijjjjjjjj.jif ijjjEE#EEjj.ji jjjEjjjjjEjj.j .jEjjjjjjjEj.. hjEjj#j#jjEj.g gjEjjjjjjjEj.h hjEjjjjjjjEj.g g*Ejjj#jjjEj*h hjEjjjjjjjEj.g gjEj#jjj#jEj.h hjEj#jjj#jEj.g gjEjj###jjEj.h .jjEjjjjjEjj.. ..jjEE#EEjj... ..ffffffffff.. hghghg.hghghgh Bonus: 5..-..m......5 ...........3.. 4lw........... ..........~... .>...!........ .............. .............. ?..........>.. ...Wf...f....1 .m....5.....m. s............s .............. .............. .......?...... .............. .........-.... ..<........+.. W............. Level: Paweusz Can't see me ? Bricks: vE...........v .............. .............. .............. E.......v..... ........E..... .............. ............E. .E............ ....v......... .............. .............. ..........v... v....E........ .............. .............. .......E....E. .......v...... Bonus: 5............4 .............. .............. .............. ........4..... .............. .............. .............. .............. ....4......... .............. .............. ..........4... 4............. .............. .............. .............. .......4...... Level: Paweusz It's full of stars! Bricks: ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ......#....... .............. ######.####### .............. .............. Bonus: 55555555555555 jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj .............. .............. .............. .............. .............. Level: Paweusz High durability Bricks: .............. .!..@.@@.@..!. ...@......@... @@..........@. @............@ @.zzzzzzzzzz.@ @.zzzzzzzzzz.@ @.zzzzzzzzzz.@ @.zzzzjjzzzz.@ @.zzzzjjzzzz.@ @.zzzzjjzzzz.@ @.zzzzzzzzzz.@ @.zzzzzzzzzz.@ .............. .............. .............. .............. .............. Bonus: .............. ps...........p .............. ............l. .............. ..*........*.. ....>..w.f.... .............. ....1.33...... ..f...&&..-... ......&&...... .............. .............. .............. .............. .............. .............. .............. Level: Paweusz The Precision Bricks: #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc #a#g#i#fEjEbEc .............. .............. zzzzzzzzzzzzzz jjjjjjjjjjjjjj .............. .............. Bonus: .............4 .....l.....2.. .0.......0...0 ...2...1...... .............. .?...1...m.>.. .............. .-............ ...?...2.1.+.. .1............ ...........1.. .....0...c...2 .............. .............. ...>......g..~ c...+...?..... .............. .............. Level: Paweusz Hidden Treasure Bricks: .............. .............. !.!.!.!.!.!.!. .............. #............# ##zzz....zzz## ###*z....z*### ####*z..z*#### iiiii*zz*fffff iiiii*zz*fffff ####*zvvz*#### ###*z.vv.z*### ##zzz.vv.zzz## #.....vv.....# ......vv...... ......vv...... ......vv...... vvvvvvvvvvvvvv Bonus: .............. .............. ..?.....?.s... .?....?....... .............. .............. ..........?... .............. ..?>...f<..?p. m.w..........m ......g*...... .............. ...W......~... ......-?...... .............. ......?....... .............. ....w..?...... Level: Paweusz In the Net Bricks: .............. .............. .............. jjjjjjjjjjjjj. jjjEEEEEEEjjj. jj@jjjjjjj@jj. jEjjjjjjjjjEj. jEjjjEE*jjjEj. jEjjE**EjjjEj. jEjjE**EjjjEj. jEjjE**EjjjEj. jEjjE**EjjjEj. jEjjjEEjEjEjj. jEjjjjjjj@jjj. jj@jjjjjjjjjj. jjjEEEEEjjjjj. jjjjjjjjjjjjj. .............. Bonus: .............. .............. .............. ???????????**. ..p.......!.s. .............. w..fc*...*.... >............. ..<..55...p... ...c.55..c..~. g.*..j5.&l.... ..c..00....... .......c....*. 3..>.......... .............. .............. <............. .............. Level: Paweusz Arrow marks the spot Bricks: ############## .............. .............. .............. aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa .............. .............. zzzzzzzzzzxzzz zzzzzzzzzzxxzz zzzzzzxxxxxxxz zzzzzzzzzzxxzz zzzzzzzzzzxzzz .............. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: 55555&555555l5 .............. .............. .............. .2..21&2.+.... l..&.......2&. ?????????????? .............. .............. .&..&......... w.2....2..c... .&...2.1j2...m ...&.......+.. ......&....... .............. .............. ..2........... 2...21..2..2.. Level: Paweusz Last but not least Bricks: ************** ************** ************** ************** ************** ************** *aaa**a*a*aaa* *a**a*a*a*a*** *a**a*a*a*a*** *aaa***a**aaa* *a**a**a**a*** *a**a**a**a*** *a**a**a**a*** *aaa***a**aaa* ************** ************** ************** ************** Bonus: .............. 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 lbreakout2-2.6.5/client/levels/N_Arenas0000664000175000017500000000667612140767201014721 00000000000000Version: 1.00 Level: Michael Speck Duell-1 Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-2 Bricks: .............. .............. .............. .............. ..#..#..#..#.. ..#..#..#..#.. ..#..#..#..#.. ..@..@..@..@.. ..@..@..@..@.. ..@..@..@..@.. ..@..@..@..@.. ..#..#..#..#.. ..#..#..#..#.. ..#..#..#..#.. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-1 Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-3 Bricks: .............. .............. .............. .............. .............. ..#..#..#..#.. .............. #...@....@...# .............. .............. #...@....@...# .............. ..#..#..#..#.. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-1 Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-4 Bricks: .............. .............. .#...#..#...#. .............. @............@ @............@ @............@ @............@ @............@ @............@ @............@ @............@ @............@ @............@ .............. .#...#..#...#. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Alexandre0000664000175000017500000000552012140767201015121 00000000000000Version: 1.00 Level: noname Bricks: dddddddddddddd deeeeeeeeeeeed dehhhhhhhhhhed dehffffffffhed dehfggggggfhed dehfgiiiigfhed dehfgi**igfhed dehfgi**igfhed dehfgi**igfhed dehfgi**igfhed dehfgi**igfhed dehfgi**igfhed dehfgi**igfhed cvvvvvccvvvvvc .............. .............. .............. .............. Bonus: {************* {&&&&&&&&&&&<- {&jlllllllll<- {&j+}}}}}}}s<- {&j+mwwwwwbs<- {&j+mgggg!bs<- {&j+mg12g!bs<- {&j+mg12g!bs<- {&j+mg03g!bs<- {&j+mg03g!bs<- {&j+mg45g!bs<- {&j+mg45g!bs<- {&j+mg45g!bs<- w-~dW->>j~f~-w .............. .............. .............. .............. Level: noname untitled Bricks: aaaaaaaaaaaaaa ************** vvxxggdde*zzii vvxxggdde*zzii vvxxggdde*zzii vvxxggdde*zzii vvxxggdde*zzii vvxxggdde*zzii vvxxggdde*zzii ************** aaaaaaaaaaaaaa .............. .............. .............. .............. .............. .............. .............. Bonus: 00000000000000 llllllllllllll ++ggmm**.l+}.. ++ggmm**.l+}.. ++ggmm**.l+}.. ++ggmm**.l+}.. ++ggmm**.l+}.. ++ggmm**.l+}.. ++ggmm**.jj}.. wwwwwwwwwwwwww W{&&!!cdd>?-f~ .............. .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: xx************ xxi*i!ddddzzzz xx**!!ddddzzzz xx**!!ddddzzzz xx**!!ddddzzzz ****!!ddddzzzz ****!!ddddzzzz ****!!ddddzzzz ****!!ddddzzzz ****!!ddddzzzz ****!!ddddzzzz ..........**** .............. .............. .............. .............. .............. .............. Bonus: ww000000000000 ww*>.cggggllll ww*>scggggllll ww*>scggggllll ww*>scggggllll >>*>scggggllll mm*mscggggllll >>*>WWggggllll >>*>{{ggggllll >>*>{{ggggllll !!!!jjggggllll ..........~~~~ .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: x***!!!vvdvvvv x***!!!vvdvvvv x***!!!vvdvvvv x***!!!vvdvvvv x***!!!vvdvvvv x***!!!vvdvvvv x***!!!vvdvvvv x***!!!dddvvvv aaaaaaaaaaaaaa .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: 1gggf43~l.mmmm 1ggg>43}}.**** 1ggg&4b}l.bbbW 1ggg&>bl+.bbbb 1ggg&bb{+.b><- 1ggg&bb++.bbdd 1ggg&bbll.**** 1ggg&bb...mmmm wwwgwjwwwwwwww .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: x**!vvdddeeeee x**!vvdddeeeee x**!vvdddeeeee x**!vvdddeeeee x**!vvdddeeeee x**!vvdddeeeee x**!vvdddeeeee x**!vvdddeeeee x**!vvdddeeeee .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: 0++&334**..-*- 0++&3344g****d 0++&334f4}444c 0++&33~444444{ 0.mmmmmmmmm455 mmm2mmmgggmm55 122233ggg>>>55 122233ggg>j>55 wpwpwpwpwpwpwp .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Hommage0000664000175000017500000002661412140767201014602 00000000000000Level: anchois shoot Bricks: hh............ hh............ .....ggg...... ...gggggg.g... ..gggjjjgggg.. .ggjjkkkjjjggg ggjkkjjjkkkjjg gjkjjjajaajkkj gjkjajjjjjajkj jkajjjajjjjakj gjkkkjjjkjkkjg ggjjjkkkjkjjgg gggggjjjgkgggg .gggggggggggg. .....gggggg... .............. .............. .............. Bonus: 55............ 55............ .............. .............. .............. ......?....... ....?..g.?.... ......5.55.?.. ....5.....5.?. .?5b..5b...5b. ..w?..wm...?w. ...s.?.?.?.... .............. .............. .............. .............. .............. .............. Level: anchois Loook out !!! Bricks: .............. .....f.f...... .....fff...... .....feff..... ....f.e....dd. ......e...deed gggghhehhhgggg ggghhhehhhggag ggghhhhhhggaag ggggghhhgggggg gggggggggggggg #!!!#!!!!#!!!# .***.****.***. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .....lwmb..... ....b.w....... ......w....55. .?..44w444.... .?.444w444..?. ...>4444>..??. .....444...... .+b-.-s.-..b+. 5...5....5...5 .............. .............. .............. .............. .............. .............. Level: anchois I see dead people ... Bricks: ...kkk......aa a.kkjjk...a.aa aakjjjkk.aacc. ..kvjvjkaaaac. ..kjjjjk.aacc. ..kjjjjk...... ..kjjjjk...... ..kjjjjjk..... ..kj..jjk..... ..k.dd.jk..... ..kjddjjk...bb ..kjjjjka..abb .kkkkkkk.ab.bb vvvvvvvvvvvvvv .............. .............. .............. .............. Bonus: .............. .............. ...........bb. ...d.d......m. ...........bb. .............. .............. ...00000...... ...0..00...... ..0.bb.0...... ..~~bb~~~...33 ..0d~0~0~...55 .~~~0~~~..~.33 .............. .............. .............. .............. .............. Level: anchois Wind catcher Bricks: aaaaaaaaaaaaaa a.aaaa.aaaaaaa ..aaa...aaa.aa ..aaa...aaa.aa ...aa...aa...a ...aa...aa.... ...a....a..... ........!..... ...!.......... .............. ........!..... ...ggggggg.... .ggvvvvvvvgg.. gvvvvvvv!vvvg. gvv!vvvvvvvvvg .gvvvvvvvvvvg. ..ggvvvvvvvg.. ....ggggggg... Bonus: ......m....... b....b.....b.. ....>.....>... .............. .............. .............. .............. ........2..... ...2.......... .............. ........2..... .............. .............. ........2..... ...2.......... .............. .............. .............. Level: anchois Rick Dangerous Bricks: aaaaaaaaaa#### ..aa.aa.a.#... ...a..a...#.hh f.........#*hh ff........aaaa f*........a.aa ffffffffe....a effffffff..... ........e..... e............f ........e...ff e..........fff ..ffffffefffff e.ffffffffffff .............. e............. ffffffffffffff efffffffffffff Bonus: .............. .............. ...f..f.....11 ...........g11 .............. .............. ..b........... .............. .............. .............. .............. ............b. ..c...b....... .............. .............. .............. ......-....-.. w...+...-..... Level: anchois Test Drive Bricks: ...f...a..e... ..fef.aha.e... ...e..aka..... ...e.aahaa..f. .....akkka.f.f f.f..akhka..e. .f..aakhkaa.e. fef.akkkkka.e. .e..akkhkka... .e.aakkhkkaa.. .e.akkkkkkka.. ...akkkhkkka.. ..aakkkhkkkaa. ..akkkkkkkkka. ..akkkkhkkkka. ..akkkkhkkkka. .akkkkkkkkkkka aakkkkkhkkkkka Bonus: .............. ..+.+..l...... .............. .......2...... .......?...+.+ .......2...... .......2...... +.+...>?g..... ......>2>..... .w.....2...... .............. .......2...... .......2...... .............. ....b..2..b... ......-2.-.... .......c...... .....??2??.... Level: anchois Invaders Bricks: .....!!!!..... ......**...... .............. d.d.d.d.d.d.d. .g.g.g.g.g.g.g f.f.f.f.f.f.f. .h.h.h.h.h.h.h d.d.d.d.d.d.d. .g.g.g.g.g.g.g f.f.f.f.f.f.f. iiiiiiiiiiiiii .............. .............. .............. a...a..a..a..a caaacaacaacaac .............. .............. Bonus: .....5555..... .............. .............. p.p.p.p.p.p.p. .............. ..3.........3. .....3.m.3.... ....g.....g... .3...........3 ?.?.?.?.?.?.?. b..b..b..b..b. .............. .............. .............. .............. .1++w++5++w++1 .............. .............. Level: anchois Welcome into the Matrix Bricks: ..hh.hhhh.hh.. ##gg#gggg#gg## .g!*.*!!*.*!g. ..!*.*!!*.*!.. .g!*.*!!*.*!g. ..!*.*!!*.*!.. .g!*.*!!*.*!g. ..!*.*!!*.*!.. .g!*.*!!*.*!g. ..!*.*!!*.*!.. .g!*.*!!*.*!g. ..!*.*!!*.*!.. c...*.**.*...c c.....cc.....c .cc........cc. .............. .............. .............. Bonus: ..11.1111.11.. .............. ......lm...... ......j....... .............. .............. .b..........b. .............. .............. .............. .......g...... .............. .............. ......??...... .>f........>f. .............. .............. .............. Level: anchois Sonic Bricks: .cbbbbcc...... cb.h.hbc...... cb....bbc..... b......bc..... b.....hbc..... bh.....bc..ggg b.....bc..gg.. cb....bc..gggg cb..hbc...ggg. .bh.ach.h..gj. hcbbac......d. aaabbbbbbbbbbb .............. ##..........## ffffffffffffff .............. .............. .............. Bonus: ....m......... .b.2.2b....... .............. b......b...... ......2....... .2.....b...>>> b.........l>.. .b........>>>> ....2bb...>>>. .b2..b2.2..>b. 2bb.b......... ..>-b-b-->---- .............. .............. 00000000000000 .............. .............. .............. Level: anchois drop dead Bricks: .........h.hhh ..........h.hh .aa........h.h ..a.......h..h ..a!........h. .a............ eaee.........h eee........... eee........... eee........... ee............ ee............ ee............ e.a..g...a.g.. e.aag..gaa.gg. eggggggggggggg eggggggggggggg ....ggg.gggg.. Bonus: .........5.5.5 ..........m.5. ...........5.. ..........w..5 ...g........5. .............. ...l.........5 .............. ..b........... ?b............ .?............ .............. .c............ .............. .......>...>.. .+.f?..?..?+?. ..?..?>.?....> ..........f... Level: anchois I know what you did... Bricks: dddd.......ddd ddd..ccc...ddd dd..caaac...dd dd.ca..ac...dd dd.ca...ac...d d.ca....aceeee d.ca....acceee d.cd....aaaeee d..dd...ccceee ...dd.....eeee d...dd.......d d....dd......d .d............ ......d......d d............. .............. .d...........d ......d....... Bonus: 11............ 1.....m.....1. 1....5w5...... .1..b..b....1. .1...........1 1.........1... ...>.......1.1 1...........1. ....c.......-. ...........-g- 1...+c........ 1.....>......1 .............. ......1......1 .............. .............. .............. .............. Level: anchois xenon II Bricks: e**edehhede**e e..ede!!ede.be eb.edehhede..e e..#ddeedd#b.e e..#.dddd.#..e e.b#.dddd.#.be e..#.d..d.#..e e..#..d.d.#b.e eb.#e..d..#..e e...e.....e.be e...e.....e..e ee..e....ee..e .e..e....e..ee .e...e..ee..e. .ee..e..e...e. ...e.......e.. .............. .............. Bonus: .....f44f..... .....f55f...>. .>...f44f..... ......ff...>.. .............. ..c...bb....c. .....-..-..... ......-.-..>.. .>..b..-...... ..........b.>. .............. b........g.... .+..+....+..+. .....w........ .............. .............. .............. .............. Level: anchois slow or fast ? Bricks: hhhhhcgggchhhh h...cc...cc..h hv..cgg.ggc.vh h..cc.....cc.h h..cgg...ggc.h h.cc.......cch h.cgg.!!!.ggch hcc...***...cc hcgg.......ggc ccdddddddddddc cgg.........gc ceeeeeeeeeeeee ggvvvvvvvvvvgg .............. gggggggggggggg hhhhhhhhhhhhhh .............. ffffffffffffff Bonus: 00000..w..0000 ....1.....1... .m..1.....1.m. ....1.....1... ....<<...<<... .............. <...b.>>>.b.<< ......>>>..... ...........<<. ....w....w.... .<<.........<< ..-+-+-.+-+-.. <><>>>>><>>><> 11111111111111 .............. ><><><><><><>< Level: anchois aziz light !! Bricks: .............. ..h.h.h..h.... ...h.h.hh.h... ..h.hhhh.h.... .#.h#hhhh....j .jjhhh#hh.j#jf .fffhhhhhfffff ffff#hhhffffff ffffffffffffff cccccccccccccc ..........#... #.#........... gggggggggggggg gggg*****gggg# gggggggggggggg .............. .............. .............. Bonus: .............. .............. .............. .............. .5..5mm......1 .11.ww5ww.151? .???.....????? ????5...?????? ??w?fbfb5??w?? dddg?dcd?gdddd ..........5... 5.5........... dddddddddddddd ...ddddddj...5 000+5w55w+0000 .............. .............. .............. Level: anchois You wanna play god ? Bricks: .............. ############## #............# #............# #c.########..# #..#c..hhh#..# #..#...hhh#..# #.c#...hhh#..# #..#.c#hhh#..# #..#..#hhh#..# #c.#..#####..# #..#c......... #.c#.......... #..########### #c.....fffffff #......fffffff #######....... .............. Bonus: .............. .............. .............. .............. .............. .......111.... .......111.... .......m11.... .......111.... .......11m.... ......00000... .............. .............. .......0000000 .........b...b ........+..+.. .............. .............. Level: anchois freeze !! Bricks: ...hh......... ...hh...j..... .......jj..... .......jjj.... ......jjjj.... ..j...jjjjj... .jjj..jjjjjj.j jjjj.gjjjjjgjj ggjjggggjggggj gggggggggggggg gggggggggggggg .............. .g#g..gg#g..g# .............. #gggg#ggggg#gg gggggggggggggg .............. .............. Bonus: ...55......... ...55...l..... .............. .............. .............. .............. .2....22222..2 ff22.2fffff2f2 44ff2.44f44.4f ........2..... .............. .............. .w.b..+f.f..b. .............. ..f.f.f.f.f.f. .f.f.f.f.f.f.f .............. .............. Level: anchois Insane Bricks: ......dd...... .....deed..... ...a.deed.a... ..a..deed..a.. ..a..deed..a.. .a...deed...a. .a...deed...a. a....deed....a .a...deed...a. .a....dd....a. ..a...dd...a.. ..a........a.. ...a..dd..a... ......dd...... .............. .............. vvvvvvvvvvvvvv kkkkkkkkkkkkkk Bonus: ......md...... .....>ll>..... ...+.>33>.+... ..?..>33>..d.. ..d..>33>..?.. .-...>33>...-. .-...>33>...-. -....>33>....- .-...b33b...-. .-....--....-. ..-...--...-.. ..~........~.. ...~..~~..~... ......~~...... .............. .............. b--b---b---b-b >>>>>>>>>>>>>> Level: anchois Insane II Bricks: .............. .............. ...dd....dd... ..deed..deed.. ..deed..deed.. ..deed..deed.. ..deed..deed.. ..deed..deed.. ..deed..deed.. ...dd....dd... .............. ...dd....dd... ...dd....dd... .............. .............. .............. vvvvvvvvvvvvvv kkkkkkkkkkkkkk Bonus: .............. .............. ...>>....>>... ..dddd..dddd.. ..dbbd..dbbd.. ..d??d..d~~d.. ..d??d..d~~d.. ..d??d..d~~d.. ..d??d..d~~d.. ...>>....>>... .............. ...m>....m>... ...>>....>>... .............. .............. .............. dbd>>dbd>ddbdd >>>>d>>>d>>d>> Level: anchois Insane III Bricks: e..e..d....... ee.e.d!d...... e.ee.d!d...... e..e.dd....... e...........ee ......e..ddde. .d.d.e!e.d.dee .ddd.e!e.dd.e. .d.d.ee..d..ee .d............ .............. .............. gggg.ggggg.ggg g..g.g...g.g.. cccccccccccccc vvvvvvvvvvvvvv kkkkkkkkkkkkkk kvvkkvvkvkvvkv Bonus: >..~..~....... >~.~.~l~...... ~.>>.~l~...... ~..~.~~....... ~...........33 ......3..~>>3. .~.>.3l3.-.-33 .>>-.3l3.>-.3. .~.-.33..>..33 .~............ .............. .............. 0000.00000.000 0..0.0...0.0.. >>>>>>>>>>>>>> 55cccccccccccc ffff-ff-f-ffff >>>c55c>>>>c>> Level: anchois Final cut Bricks: .aaaaaaaaaaaa. .aaaaaaaaaaaa. .aacccaaaaaaa. .aacacaaaacca. .aacccaaaacaa. .aacacacaccca. .aacccaacacaa. .aaaaaaacacca. .aaaaaaacaaaa. .############. .#jaajaajaaja. .#ajaajaajaaj. .#jaajaajaaja. .............. .............. .............. .............. .............. Bonus: .............. .............. .m.555........ ...5.5....55.. ...555....5... ...5.5.5.555.. .m.555..5.5... ........5.55.. ........5..... .............. ..-dd-dd-dd-d. ..d-dd-dd-dd-. ..b-db-db-dbd. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Flower0000664000175000017500000000551412140767201014457 00000000000000Version: 0.10 Level: B&Z Rose for you Bricks: ......i....... ..iii.iii..... .i..ii.ii..... .i..ii.ii..... .iiiii.iii.... i.iii.iiii.... ii...iiii..fff .iiiiiii..ff.f .ii.iii.f.f.ff ....ii.ff.fff. ........ff.... ........f..... ...fff..f.ff.. ....fff.fff... .....ff.f..... .......f...... .......f...... ......f....... Bonus: .............. .............. .f......f..... ....!......... ...+....<..... ......>0p..... .0...b.......? ..c...1}..j-.b .-...?......f. ........<..... .............. .............. ...fw...+..... ..........1... .....<-.0..... .............. .............. .............. Level: B&Z Tulip Bricks: ...iiii....... ..i....i...... ..i.ii.i.i.... .iii..ii.ii... .iii.iii.iii.. iiiii.i.iiii.. iiiii..iiiii.. iiii.iiiiiii.. iii.iiiiiiii.. .ii.iiiiiiii.. ..iiiiiiiii... f..i.iiiii.... .f....f......f .fff...f...fff .f.ff..f..ffff .ff.ff.f.ffff. ..ff.f.f.fff.. ...ffffff..... Bonus: ....?......... .............. .....-.f...... ..0........... ......j..>.... .~+c......W... ..}.....*+f... 0->...&2..0... .......+.~.... .?..~-..-.c... ..f...>..?.... .............. .............. .-W.........{. ...+...!...>.. ..2.~....~f-.. ...f...0...... .....>........ Level: B&Z Red Rose Bricks: .......ddd.... ......ddddd... ....ddd.ddd... ...d..dd.d.dd. ..d...ddd.dddd ..dddd.dd.dddd ..ddddddd.dddd ..dddddddd.ddd .d.dddddd.dd.. ddd.ddd..dddd. ddd....dddd..f .dddddddddddf. ..dddd.ddddff. ...dd...ffff.f .......f.fff.. ......f.f.fff. .......f...fff ............ff Bonus: .............. ........>..... ....3.!..g&... ...........b.. .......p-...?. ..~.......->.0 ...~s..s....~. ...<*b>.3..... ....3..w...... 0-...?....j... ..>........... .~.....>&!<... ...?-...~?..0. ..........-... ..........&>.. ......c....... ............w. .............. Level: B&Z Vine Leaf Bricks: .fff.f..f..... .f.fff.fff..f. .ff.ff.fff.f.. ffff.f.fff.... .ffffffff..ff. .....ffffffff. .fffff.ffffff. fffff.fff..... ffff.fffffff.. .ff.ff.ff.ff.. ff.fff.fff.f.. ffffff.fffff.. fff.f....fff.. ......ff.....f .....f..f...f. .....f......f. ......f...ff.. .......fff.... Bonus: .0......W..... ...>.+.>f...-. .-..~..}5c.... ...f.1.+-..... .?g.c.j....&<. .....w.>s.?+.. ... .s.....1...f.. ....sf..>c.... 0-<4c....b}-.. .w..>......... .............. .....>..-..... .............. ...........+.. .......+.>.... Level: B&Z Margarite Bricks: .............. ......f....... f......f...... ff.....f...... .ff.hhh.f..... ...hhhhh.hhh.. ...hhhhh.hhhh. .hh.hhhhhhhhh. hhhhh....hhhh. hhhh..ee..h... hhhh.e..e.hhh. .hhh.e..e.hhhh ...h..ee..hhhh .hhhh....hhhhh .hhhhhhhhh.hh. .hhhh.hhhhh... ..hhh.hhhhh... .......hhh.... Bonus: .............. ......p....... ?............. .-............ ....3...-..... ...<.!g..>.+.. .....0cb..0... .0..+>......f.... .............. lbreakout2-2.6.5/client/levels/BeOS-4ever0000664000175000017500000001317212140767201015033 00000000000000Level: neo beos Bricks: .............. ggg......d..d. g.g.....d.dd.d g.g.g...d.dd.. g.gg.g..d.dd.. gg.g.g..d.dddd g.ggg...d.d..d g.gg....d.d..d g.gg.g..d.dd.d ggg.g....d..d. .............. eeeeeeeeeeeeee ffffffffffffff iiiiiiiiiiiiii hhhhhhhhhhhhhh ccc..cccc..ccc .............. .............. Bonus: .............. .............. .............l b...>......... ........-..s.. 5....5....5..5 .............. +............0 .....<........ .............. .............. 5.......5..... .s.0.........b .............. ............-. .+....>......5 .............. .............. Level: neo rules Bricks: .............. .fefefefefefe. .efefefefefef. .cccccccccccc. .............. .ff.g.gd.eekk. .f.fg.gd.e.k.. .f.fg.gd.eek.. .ff.g.gd.e..k. .f.fg.gd.e..k. .f.f.g.ddeekk. .............. .cccccccccccc. .gdgdgdgdgdgd. .dgdgdgdgdgdg. .gdgdgdgdgdgd. .............. .............. Bonus: .............. ....-......p.. ..f...l..-.... ......+....... .............. ...........-.. .............. .......-..m... .............. .............. .....f........ .............. ......+....... ..-...b..f.... .............. ..>...>...>... .............. .............. Level: neo roots Bricks: .e..dd..gk.k.. .eeed.dg.kk... .e.edddg.k.k.. .eeed.d.gk.k.. .....f..h..... ....fffh.h.... .....f.h.h.... .....f..h..... i.i.g..e..k.dd ii.g.ge.ekkkd. i..g.ge.e.k..d i...g..e..k.dd .............. cccccccccccccc .............. .............. .............. .............. Bonus: .1......f..... ..........5... .....>........ ..b........+.. .............. .....5...1.... .............. ........>..... +............s ..........0... 0............. ....f..5...... .............. .>...+..b...>. .............. .............. .............. .............. Level: neo beos dano Bricks: .............. .............. .dd........... .d.d.......... .d.d.......... .d.d.......... .d.d.ggff..kk. .d.dg.gf.fk.k. .d.dg.gf.fk.k. .dd.gggf.fkk.. .............. .eeeeeeeeeeee. .............. .............. ##..#c..c#..## ...#......#... .............. .............. Bonus: .............. .............. .-l........... .............. .............. .+.1.......... .....-..5...s. .5............ .......s..1.5. ....0......+.. .............. ..>.5.+...<.-. .............. .............. .....f..-..... .............. .............. .............. Level: neo next generation Bricks: .............. .kk.....g..f.. .k#k...g#gf#f. .k#k.d.g#gf#.. .kk.d#dg#gff.. .k#kdddg#g.#f. .k#kd#.g#g.#f. .k#kd#dg#gf#f. .kk..d..g..f.. .............. ....ee..hh.... ....e#eh#..... .jj.e#eh#h.jj. ....e#e.hh.... .............. #jjjjjjjjjjjj# .............. .............. Bonus: .............. ..-.....5..f.. .>............ .....g.j.<.... ..1........2.. .....3...b.... .5.....<....5. .............. .....>.....>.. .............. .....-..-..... .............. .>..........b. ........5..... .............. ..-...-f...-.. .............. .............. Level: neo r6 Bricks: .............. .gggggggggggg. .fdddffffddff. .fdffdffdffdf. .fdffdffdffff. .fdffdffdffff. .fdffdffddddf. .fdddfffdffdf. .fdfdfffdffdf. .fdffdffdffdf. .fdfffdffddff. .gggggggggggg. .............. .ccbccbbccbcc. .............. .............. .............. .............. Bonus: .............. ...1.......5.. ...>......>... .5..>......... ..-.......+... ....lw..0...<. ...........>.. ..c0.f.+..1... .........5.-.. .............. ..>.+..5..>... .5............ .............. .>..-.>.....-. .............. .............. .............. .............. Level: neo fine logo Bricks: .............. .dddddddddddd. .ddddjjjjdddd. .dddjddddjddd. .ddjddddddjdd. .ddjddddddjdd. .ddddjjjjdjdd. .dddjddddjddd. .dddjddddjddd. .ddddjjjjdjdd. .dddddddddjdd. .dddddddddjdd. .ddddddddjddd. .ddddjddjdddd. .ddddjddjdddd. .dddddjjddddd. .dddddddddddd. .............. Bonus: .............. ...f.......... .......j...... ..d.5......d5. .............. .5.l..>..+.... ....b...4..... ..<........1.. .....f.d...<.. .+............ ..1....5....5. ...d.....b.+.. ..5........... ........55.... ......f....d.. .d.+5......... .............. .............. Level: neo open beos Bricks: .............. ..g..d..k.ee.. .gvgdvdkvkeve. .gvgdvdkkkeve. .gvgdvdkvveve. .gvgdd.kvkeve. ..g.d...k.eve. .............. .ff..i..h..jj. .fvfivihvhjvv. .ffviiihvhvjv. .fvfivvhvhvvj. .fvfivihvhjvj. .ff..i..h..j.. .............. .............. .............. .............. Bonus: .............. ..0........0.. ..+..l..b..-.. ..>........... .....<...+.>.. .............. ..5.5...5...5. .............. .............. ..p..>.....w.. ........b..... ..........-... ..b..+.....>.. ..5..5..5..5.. .............. .............. .............. .............. Level: neo take me home Bricks: .............. ....e......... ...jje..ee..cv v.ejjjeeee..cv v.eejjjeee..cv v.eeejjeee..cv v.eeejjjee..cv v.eeeejje...cv v.eeeejje...cv v.eeeeeje...cv v.edeeeje...cv v.djdeeje...cv v.jajeejek..cv v.jajeeeekk.cv v.jaj.eekk..cv v.fff..ek...cv .............. .............. Bonus: .............. ....b......... .............. .........+...> .....l..2..... -......>....+. ..-..........5 ...+.4......b. p............. ......+.-....~ 5...w......... ...2........p. ......5+...... -..>.......... .......b.....- >...........5. .............. .............. Level: neo and the future Bricks: .............. .............. ..........ddd. .........dd.dd vdvv.fvv.dv.vd d....f.......d d...ff......kd dde.efe.eggkkd d.e.efe.eg.k.d d..eef.eeg..kd ............dd ...........dd. ...........d.. ...........d.. .............. ...........d.. vvv.v.v.v.v.vv .............. Bonus: .............. .............. ..........>+.. .............. b..5.swp....+l >............. .............. +.2..>...5.3.> ....5.5....... ............s. .............. .............. ...........+.. .............. .............. .............. 5pw.+.s.b.5.<+ .............. lbreakout2-2.6.5/client/levels/Makefile.in0000664000175000017500000002714612610471343015351 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = client/levels DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ # Use ls | grep -v Makefile | sed -e "s/$/ \\\\/" for update EXTRA_DIST = 1010011010 \ Abc \ Afl \ Alex \ Alexandre \ AllNighter \ Arcade \ Arkanoid \ BeOS-4ever \ Bertrand \ BigBang \ Biolab428 \ Blues \ Bombs \ CalendarFun \ Celine \ Chaos \ Choices \ Circle \ Classique \ Color \ Composers \ Cool \ Crossing \ D2K \ Daves \ Demons \ Family \ Fantaisie \ FatalDoomsday \ FatalDoomsday2 \ Flower \ Fly \ Freek \ FunCity \ Gatinha \ GreenWall \ GreenWall2 \ GreenWall3 \ GreenWall4 \ Hans \ HereWeGo \ Heroes \ HighBall \ Holidays \ Hommage \ Impossibility \ Invisible \ IoriYagami \ Iris \ IrrenhausAh \ Izusiowe \ JediAdventure \ Kazan-1 \ Kevin \ KungFu \ Lapis \ Lattsville \ LBreakout1 \ LBreakout2 \ LinuxFun \ Lord \ Maze \ MegaMan2 \ Megadoomer \ MontyHall \ N_Arenas \ Nations \ Negundoid \ NES \ NewOERG1 \ N_Snapshots \ ObiWan \ OpenSource \ OurWorld \ Pabelo \ Patience \ Pawset \ Ph33r \ P.I.T.A. \ PlayAgain \ Popcorn \ RichQuick \ Runes \ R-World \ Sadistic \ Shimitar \ Silly \ SkillShot \ Smilies \ SnyMaxx \ StarWars \ Symmetry \ Symmetry-MKII \ T.C.S. \ TheEnd \ TheGauntlet \ TimeWaster \ TrickShot \ Tricky \ Twilight \ Vader \ Weirdness \ Wizi \ Wolvie \ WonderWalls \ WTF \ X \ Yexter \ Yoda \ Zigies \ Zooligan \ Zufallswelt all: all-am .SUFFIXES: $(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) --foreign client/levels/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign client/levels/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 uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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 installdirs: 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-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-data-local install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-local install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-info-am install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/levels @for file in $(EXTRA_DIST); do \ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/levels/$$file; \ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\levels\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done # 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: lbreakout2-2.6.5/client/levels/ObiWan0000664000175000017500000000566712140767201014411 00000000000000Version: 1.00 Level: Bertrand GRONDIN La cuvette diabolique Bricks: ......gg...... .EyyyyyyyyyyE. .EzzzzzzzzzzE. .E**********E. .@**********@. .EhhhhhhhhhhE. .EaaaaaaaaaaE. .Ed*d*d*d*d*E. .EEEEEEEEEEEE. aaaaaaaaaaaaaa zzzzzzzzzzzzzz .**.**.**.**.* .##.##.##.##.# ffffffffffffff vvvvvvvvvvvvvv .............. .............. .............. Bonus: ......55...... ..l.*.....*... ......W....... ..c--...--.c.. .mc!~{!{~!.cm. ..ffffffffff.. ....d..d...... ..5.5.5.5.5... .............. >W...W>>W. ..W>W.*.W>>W. ..W>>W...W>>W. .mW..Wm.mW..Wm gmW..WmgmW..Wm p.W..W.p.W..W. b.W>>W.b.W>>W. w.W>W.b.W>>W. w.5555.w.5555. b......b...... w*bw*bw*bw*bw* .............. .............. Level: Bertrand GRONDIN Barres obliques Bricks: **@@**@@**@@** ************** aaaaaaaaaaaaaa iiiiiiiiiiiiii eeeeeeeeeeeeee @@!!##!!##!!@@ vvvvvvvvvvvvvv vzzzzzzzzzzzzv vz*zzz*zzz*zzv vzzzzzzzzzzzzv vvvvvvvvvvvvvv !!##!!##!!##!! dddddddddddddd **hh**hh**hh** cccccccccccccc cccccccccccccc vvvvvvvvvvvvvv EE!!EE!!EE!!EE Bonus: m............m .............. .............. .*.....*.*.... l5..........5l ..44..44..44.. .............. ..b.......b... ..~...~...~... ...g.....g.... l............l 00..00..00..00 ....!!....!!.. .............. ppmm<>>.>>mm.. .+b.>.>...m... ..bbjjjj5j..5. ..p..mwg.j.... ..p.jp>>>..... ..wpwj.mm+mw.. ....gw...+pm.. ....m+.>www5.. ..b..+55m..... .............. .............. .............. .............. Level: pope1 ph33r Bricks: .............. .............. .............. .............. ...jjjjjjjj... ..jggggggggj.. ..jgccccccgj.. ..jgcggggcgj.. ..jgcg**gcgj.. ..jgcg**gcgj.. ..jgcg**gcgj.. ..jgcg**gcgj.. ..jgcc**ccgj.. ..jggg**gggj.. ..jjddddddjj.. ...j......j... .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ....555555.... ....5gggg5.... ....5g..g5.... ....5g..g5.... ....5g..g5.... ....5gggg5.... ....555555.... .............. ....mmmmmm.... .............. .............. .............. Level: pope1 ph33r Bricks: .............. ....fffffff... ....ffaaaff... ....ffa*aff... ....ffa*aff... ....ffa*aff... ....f*****f... ....ffa*aff... ....ffa*aff... ....ffa*aff... ....ffaaaff... ....ffaaaff... ....ffaaaff... .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .......5...... ......555..... .......5...... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: pope1 ph33r Bricks: ....cccccc.... ....!!!!!!.... ccccc....ccccc c*c*c....c*c*c ccccc.**.ccccc *ccc*.**.*ccc* .............. ....######.... ....#....#.... ....#....#.... ....#.!..#.... ....#..!.#.... ....#....#.... .............. iiiiiiiiiiiiii .............. .............. .............. Bonus: ....jjjjjj.... .............. .............. .............. .............. .............. .............. .............. .............. .............. ......w....... .......w...... .............. .............. .............. .............. .............. .............. Level: pope1 ph33r Bricks: .............. .............. ......**...... .....####..... ....#....#.... ccc#.!..!.#... c###.......#cc c#....!!...##c .#...!..!...#c .#..!....!..#. .#.!..cc..!.#. .#!...cc...!#. .#.!......!.#. .#..!....!..#. .#...!..!...#. .#....!!....#. ..#........#v. ...........v.. Bonus: .............. .............. .............. .............. .............. .............. ............m. .............. .............. .............. ......55...... ......55...... .............. .............. .............. .............. .............. .............. Level: pope1 ph33r Bricks: !!!!!a##a!!!!! .!...####...!. ..!...##.....! .!....##....!. !.....##...!.. jj**jj##jjj*jj j*j*jj##jj*j*j *jjj*j..j*jjj* jjjjj*..*jjjjj ccccc*..*ccccc .....*..*..... .....*..*..... .............. .............. .............. .............. .............. .............. Bonus: .....5..5..... .............. .............. .............. .............. >>..>>..>>>.>> >.-.>>..>>.-.> .->-.>..>.->-. ->>--....-->-- dddddd..dddddd .....d..d..... .....d..d..... .............. .............. .............. .............. .............. .............. Level: pope1 ph33r Bricks: !!!!!!!!!!!!h. !!!!!!!!!!!h.# !!!!!!!!!!h.#. hhhhhhhhhh.#.. *.......*h#... *.......h#.... h......h#..... *h....h#...... *.h..h#....... *.*hh*.#...... *.*hh*..#....# *.h..h...#.... *h....h...#.#. h......h...#.. ........h..... ........*h.... hhhhhhhhhh.... .............. Bonus: 5...5...5...m. .5.5.5.5...... ..5...5....... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: pope1 ph33r Bricks: !c...ccccc..c! cc...ccccc..cc .....ccccc.... .....c***c.... ************** *....c***c...* *....ccccc...* *....ccccc...* *....ccccc...* hhhhhggggghhhh hhhhg.....ghhh hhhg.......ghh hhg.........gh hg...........g g............g g............g g............g g............g Bonus: 5............5 .............. .....mmmmm.... .....m...m.... .............. .....m...m.... .....mmmmm.... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: pope1 ph33r Bricks: *cccccccccccc* c*bbbbbbbbbb*c cb*aaaaaaaa*bc cba********abc cba*......*abc cba**.....*abc cba*.*...**abc cba*.!!!!.*abc cba*.!!!!.*abc cba*.!!!!.*abc cba*.!!!!.*abc cba*.!!!!.*abc cba*.*..*.*abc cba**....**abc cba*......*abc cba*......*abc cba*......*abc cba*......*abc Bonus: ?????????????? 3.....mm.....3 3............3 3............3 3............3 3............3 3............3 3............3 5.....++.....5 5....+ww+....5 3.....++.....3 3............3 3............3 3............3 3............3 3............3 3............3 3............3 Level: pope1 ph33r Bricks: !ee*#jjjjj#ee! eee*#jjjjj#eee eee*#jjjjj#eee eee*#jjjjc*eee #eecjjjjjc*eee .#ecjjjjjc#### ..#cjjjjj#.... ...jjjjj#..... ...jjjj#...... ...jjj#....... ...jj#........ ...j#......... ...#.......... .............. .............. .............. .............. .............. Bonus: 5....?????...5 .....?????.... .....?????.... .............. .............. .............. ........j..... .......j...... ......j....... .....j........ ....j......... ...j.......... .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Blues0000664000175000017500000002657312140767201014303 00000000000000Version: 1.00 Level: noname squeeze Bricks: !!.!!!EE!!!.!! !!.!!!EE!!!.!! !!.!!!EE!!!.!! !!.!!!EE!!!.!! !!.!!!EE!!!.!! !!.!!!EE!!!.!! !!.!!!EE!!!.!! ......EE...... ......EE...... .....!EE!..... ....!*..*!.... ...!*E..E*!... ..!*Eg..gE*!.. .!*Eg....gE*!. !*Eg......gE*! *Eg........gE* Eg..........gE g............g Bonus: l&5*44..44*5&l &.5*44..44*5.& ..5.44..44.5.. ..5.44..44.5.. ..5.44..44.5.. ..5........5.. ..5........5.. 555555..555555 .....5..5..... ....5....5.... ...5.&..&.5... ..5.&....&.5.. .5.&.w..w.&.5. 5.&........&.5 j..+......+..j .............. .............. p............p Level: noname blue eye Bricks: .!.!.!.!.!.!.! .!.!.!.!.!.!.! .!.!.!.!.!.!.! .............. *EEEEvvvvEEEE* E****E..E****E **EEE....EEE** *Eii*E..E*iiE* E*ii*E..E*ii*E .E**E....E**E. ..EE......EE.. ......EE...... vvvvEEEEEEvvvv vvvvEvEEvEvvvv vvvvEvEEvEvvvv vvvvEvEEvEvvvv .............. .............. Bonus: 4.4.4.4.4.4.4. 4.4.4.4.4.4.4. 4.4.4.4.4.4.4. .............. .............. .............. .............. .............. .............. .............. .............. .............. &&&&......&&&& .....j..j..... bbbb.*..*.bbbb wwww......wwww .............. .............. Level: noname green blues Bricks: ..EEEEEEEEEE.. ..gggggggggg.. .vvvvvvvvvvvv. .vxE!!!!!!Exv. .vxE!!!!!!Exv. ..xE!!!!!!Ex.. ..xE!!!!!!Ex.. ..xEEEEEEEEx.. ..xEffffffEx.. !!xEffffffEx!! !!EEffffffEE!! !!EfzzzzzzfE!! !!EzyyyyyyzE!! !!EyxxxxxxyE!! !!ExvvvvvvxE!! !!Ev!!!!!!vE!! !!EE!!!!!!EE!! vvvv!!!!!!vvvv Bonus: .............. .............. .............. ....333333.... ....444444.... ....555555.... ....555555.... .............. .....&&&&..... &j..........j& &m..........m& .............. .............. .............. .............. ...*&&&&&&*... gg..bbbbbb..gg ww.+......+.ww Level: noname blue fortress Bricks: .************. *EEEEEEEEEEEE* !*..........*! .!*EEEEEEEE*!. .!E*......*E!. .!E.*EEEE*.E!. .!E.E*vv*E.E!. .!E.E*EE*E.E!. .!E.E*EE*E.E!. .!E.E*EE*E.E!. .!E.E*vv*E.E!. .!E.*EEEE*.E!. .!E*......*E!. .!*EEEEEEEE*!. !!!!!!!!!!!!!! gEEEEEEEEEEEEg gggggggggggggg ffffffffffffff Bonus: ......ll...... .............. .............. 5............5 5............5 5............5 5.....??.....5 5............5 5............5 5............5 5.....??.....5 5............5 5............5 5............5 ..&........&.. &............& .............. w?wbwbwbwbwbw? Level: noname blue teeth Bricks: Eg!vEEEEEEv!gE gg!v.EggE.v!gg EEv..EggE..vEE !v!E.v!!v.E!v! Ev!E..vv..E!vE !v!E.EEEE.E!v! Ev!E.EggE.E!vE !v!E.EggE.E!v! Ev!E.EggE.E!vE !v!E......E!v! EvEE......EEvE .............. vvvv.EggE.vvvv !!!!EEggEE!!!! !!!!EggggE!!!! !!!!EggggE!!!! !!!!EggggE!!!! EEEEEggggEEEEE Bonus: .?.5......5.?. ??.5......5.?? ..5........5.. .54........45. .5c...ll...c5. .54........45. .5c...&&...c5. .54...&&...45. .5....bb....5. .54........45. .5..........5. .............. 555*..bb..*555 4444..&&..4444 ...4.wwww.4... 55.4.+..+.4.55 55.4......4.55 .............. Level: noname deep blue sea Bricks: ..g...g...g... gggggggggggg.. ggggggggggggE. !!!!!!!!!!!!E. !!!!!!!!!!!!E. !!!!!!!!!!!!E. !!!!!!!!!!!!E. !!!!!!!!!!!!E. !!!!!!!!!!!!E. !!!!!!!!!!!!E. !!!!!!!!!!!!E. !!!!!!!!!!!!Ev !!!!!!!!!!!!E. !!!!!!!!!!!!E. !!!!!!!!!!!!E. !!!!!!!!!!!!E. EEEEEEEEEEEEE. vvvvvvvvvvvvv. Bonus: ..!...!...*... .........+.&.. ?????????+*... 555555555555.. 22222222222g.. 22222222222g.. 444444444444.. 22222222222g.. 22222222222g.. 333333333333.. 22222222222... 22222222222m.* 222222222222.. 2222222222j!.. 2222222222j!.. lflflflflfjm.. .............. bw&w&wbwbwbwb. Level: noname alien grin Bricks: *E............ E*EvvvvvvvvvE. !E*EvvvvvvvE*. !.!*EvvvvvE*E. E.!E*EvvvE*E!. *E!.E*EgE*E.!. E*E.!E*#*E!.E. !E*E!.E*E.!E*. !.E*E.!#!.E*E. E.!E*E!.!E*E!. *E!.E*EgE*E.!. E*E.!E*#*E!.E. .E*E!.E*E.!E*. ..E*E.!#!.E*E. ...E*E!.!E*E.. ....E*EgE*E... .....E*E*E.... ......E*E..... Bonus: .............. ...&&j&j&j&&.. 4...&&&&&&&... 454..bjbjb.... .54.&.*.*.&.b. ..45.&...&.5b. ...54.j.j.45.. 4...45...54... 45...54.45.... .54...454...b. ..45.......5b. ...54.....45.. ....45...54... ...w.54.45.w.. ....w.454.w... .....w...w.... .............. .............. Level: noname red, white, and blues Bricks: jjjj......jjjj @@@@......@@@@ EEEE.E..E.EEEE @@@@.@jj@.@@@@ jjjj.@jj@.jjjj jjjj.@jj@.jjjj @@@@.@jj@.@@@@ EEEE.@jj@.EEEE @@@@.@jj@.@@@@ jjjj.@jj@.jjjj jjjj.EjjE.jjjj @@@@.@jj@.@@@@ EEEE.@jj@.EEEE @@@@.@jj@.@@@@ jjjj.@jj@.jjjj jjjj.@jj@.jjjj @@@@.E@@E.@@@@ EEEEvvvvvvEEEE Bonus: ..ml......lm.. .............. .............. .....5555..... &..m.5555.m..& &..m.5555.m..& .....5555..... .....5555..... 3333.5555.3333 333&.5555.&333 333&..55..&333 3333.5555.3333 .....5555..... 4444.5555.4444 &444.5555.444& &444.5555.444& 4444..mm..4444 ....wwwwww.... Level: noname blues shades Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvv#vvvvv vvvvvvv#v#vvvv vvvvvv#vvv#vvv #vvvvvv#vvv#vv v#vvvvvvvvvv#v vv#vvvvvvvvvv# vv####v#v####v v#jjjj#v#jjjj# v#jjjj#v#jjjj# v#jjjj#v#jjjj# vv#jj#vvv#jj#v vv#jj#...#jj#v ...##.....##.. .............. Bonus: ........&...&. .&............ .............. &...&......... .........*.... ......*...*..& *......*...*.. .*....*...*.*. ..*..........& &&.*.......... .w....g.g..... ..5555.m.5555. ..5555.m.5555. w.5555.w.5555. ...55.....55.w ...55.....55.. .............. .............. Level: noname barriers Bricks: .EgggE..EgggE. EEEgEEEEEEgEEE .EgggE..EgggE. .EgggE..EgggE. EEEgEEEEEEgEEE .EgggE..EgggE. gggggggggggggg !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! gggggggggggggg gEgggEggEgggEg EEEgEEEEEEgEEE .EgggE..EgggE. .EgggE..EgggE. EEEgEEEEEEgEEE Bonus: ...l......l... ...!......!... .............. .............. .............. ..&&&....&&&.. .............. 33333333333333 44444444444444 55555555555555 44444444444444 33333333333333 m.....**.....m m.j.*.**.*.j.m ...&......&... ...&......&... ..+&+....+&+.. ...w......w... Level: noname altar Bricks: ExxxxxxxxxxxxE !ExxxxxxxxxxE! !!ExxxxxxxxE!! !!!ExxxxxxE!!! !!!!ExxxxE!!!! !!!!!E**E!!!!! !!!!!*##*!!!!! !!!!!*..*!!!!! !!!!!*..*!!!!! !!!!!*##*!!!!! !!!!!E**E!!!!! !!!!EggggE!!!! !!!EggggggE!!! !!EggggggggE!! !EggggggggggE! EggggggggggggE EggggggggggggE EggggggggggggE Bonus: ..l........l.. 5.&........&.5 55.&......&.55 554..j!!j..455 5544.****.4455 5544g....g4455 5544g....g4455 5544g....g4455 5544g....g4455 5544g....g4455 5544......4455 554&..mm..&455 55&.pwbbwp.&55 5m.+......+.m5 m.+j......j+.m .............. .............. .w.w.w.w.w.w.. Level: noname bowl full of blues Bricks: ......@@...... .............. .EggggggggggE. .gEggggggggEg. ..gEggggggEg.. ...gEggggEg... ...gEggggEg... E..gEEggEEg..E .@...EEEE...@. ..@........@.. ...@......@... ....E....E.... .E..........E. .EEEggggggEEE. .gEEEggggEEEg. ..gEEEggEEEg.. ...gEEEEEEg... ....gEEEEg.... Bonus: .............. .............. ..5555555555.. .&.55555555.&. ..&.555555.&.. ...b.????.b... ...w.????.w... ...g..??..g... .............. .............. .............. .............. .............. ....444444.... .&...????...&. ..&...??...&.. ...+......+... ....w....w.... Level: noname blue city on a sunny day Bricks: !!!bvvvb!!bhhh !!!bbbvb!!vhhh !!!b!!bv!!!vhh bbbv!!bEb!!v#h vvv!!!bEvbbv#v vvv!!bvEvvv##v vvvbb#vEvvv#kv #vvvv#vEvvv##v #vvvv##Evvv#kv #vvvv##EEvv##v #vvvv#kEEvv#EE #@@vv##Ej@@#EE #@@EE#kEE@@#Ek #@jEE##Ej@@#EE #@@EE#kEE@@#Ek #@jEE##Ej@@#EE #@@EE##EE@@#EE gggggggggggggg Bonus: 555c!...55c.ll 555..c..55...l 555.55..555... c...55..c55... !..555..?..!.? ?..55c..?....? g.......?....? ....?.!.?....? ....?...!....? ....?........g ....?....gg... ...gg...*..... .............. ..*.....*..... .............. ........*..... .............. w&mw+!w+.wbwmb Level: noname eruption Bricks: vihhjvvvvjhhiv vvvihjvvjhivhv hvvvvhjjhvvvvh hvvvvvhhvvvvvh vvhhhihhihhvvv vhvjvhhhhvjhvv hvvvjvhhvjvvhv vvvvvjhhjvvvvh vvvvhhhhhhvvvh vvvhei##iiivvv vvhieEaaEeihvv vhveEa**aEevhv vhveEaaaaEeehv vhveEaaaaEiehv hveiEaaaaEvevh vveEaaaaaaEeev veEEaaaaaaEEee EEEEaaaaaaEEEE Bonus: l*..........*l ..........*... .............. .............. .....*..*..... .*............ .............. .............* .............. .....g..g..... ..*...mm...... .............. ...j......j... ...&......&... ......&&.....* ..j........... ......bb...... ......ww...... Level: noname blue cave Bricks: EEEEEaaaaaEEEE !!!!EEaaaaE!!! !!!!!EaaaE!!!! !!!!!EaaaE!!!! !!!!!EEaEE!!!! !!!!!!EaE!!!!! !!!!!!EaE!!!!! !!!!!!E#E!!!!! !!!!!!***!!!!! !!!!!!***!!!!! !!!!!!E#E!!!!! !!!!!!EaE!!!!! !!!!!!EaE!!!!! !!!!!EaaaE!!!! !!!!!EaaaE!!!! !!!!!EaaaE!!!! !!!!EaaaaaE!!! EEEEEaaaaaEEEE Bonus: .....l.l.l.... 54.&.......&45 54.&&.....&&45 54..........45 54..........45 54.....m....45 54.....m....45 54..*g...g*.45 54..*g...g*.45 54..*g...g*.45 54..*g...g*.45 54.....m....45 54...j.m.j..45 54....b&b...45 54.....&....45 54..........45 54.m..www..m45 .....+...+.... Level: noname blue lightning Bricks: .EEE!..EE!.... E...E.E....... .....E........ ......E!...EE! ......!E!..E.. ......E!EE.E.. .....E...EE.!. .....E...E!... ....EE..E..... ....E!..E..... .!EE.!.!.E.... .E.......E.... .E.......EEE.. !!E.....E..EE. ..E.....E...E. ..E.....E...E. .E!....E....!. !E!..!E!....*. Bonus: ....5....5.... .............. .............. .......5.....5 ......5.5..... .......5...... ............5. ..........5... .............. .....5........ .5...5.5...... .............. .............. 55............ .............. .............. ..5.........5. 5.5..5.5...... Level: noname mountain lake Bricks: ......cE...... ...#.cE#c..... ..cE.c#Ec..... ..cEc#EEEc...c ..#EE#E##c..cE .c#EE####c.c## .cEEE####EEcE# .c#EE#####cE## c#E#E#@#@EEE#E c#EE@ggggg@#@E #g@gggggggggg@ E@gggggggggggg @gggggggggggg@ gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg Bonus: .............. ...5...5...... ......5....... ....&5........ ..5..5.55..... ..5..5555...5& ..5..555...... .&5..55555.... .5.5.5.5b..... .5.......m..b. 5..m.......... .bg.........mm b............. g............g ...&........&. .p.........p.. .............. +wg.w.gw+.w.gw Level: noname obstacles Bricks: E!!EEE!!EEE!!E !!!!!!!!!!!!!! !EEE!!EEE!!EEE !!!!!!!!!!!!!! !!!!!!!!!!!!!! EEE!EEE!EEE!!E !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!EEE!EEE!!EEE !!!!!!!!!!!!!! !!!!!!!!!!!!!! EEE!!EEE!EEE!! !!!!!!!!!!!!!! !!!!!!!!!!!!!E !!EEE!!EEE!!!! !!!!!!!!!!!EEE gggggggggggggg EEEggEEEgEEEgg Bonus: .............. .............. &...cc........ 55555555555555 .............. ...&...&...cc. 55555555555555 ..cc...m...... .....&...m.... 55555555555555 .cc..g..gcc... ........&...m. 55555555555555 ......cc...... .....m.......& .m&...bb..&... ..+........+.. ...wb...w...wb Level: noname boxes Bricks: EEEEEE******** E*****E*!!!!!* E*ggggE*!!!!!* E*ggggE*!!!!!* E*g***E*!!!!!* E*ggg*E*!!!!!* E*ggg*E*!!!!!* E*****E*!!!!!* EEEEEE#******* *******#EEEEE* *!!!!!*E*****E *!!!!!*E*ggggE *!!!!!*E*ggggE *!!!!!*E*g***E *!!!!!*E*ggg*E *!!!!!*E*ggg*E *!!!!!*E*****E *******EEEEEEE Bonus: ......j....... ........55555. ........54445. ........54.45. ...c....54l45. ........54.45. ........54445. .......g55555. .......mg..... b....gm......j ......g....... .............. .............. ..........c... .............. .............. ......b....... w..+..w....... Level: noname propagation Bricks: *E*E!!!!!EEEE. E*E*E!!*!..... EE*E*E!!*..... EEE*E*!!!*EEE. EEEE*E!!!!*EE. *EEEE*!!!*!*E. E*EEE!*!!!*!E. *E*EEE!*!*!*E. E*E*EE*!*!*!E. *E*E*E!*!*!*E. E*E*E*E!*!*!E. *E*E*E*EE*!*E. E*E*E*E*EE*!E. *E*E*E*E*EE*E. E*E*E*E*E*EEE. *E*E*E*E*E*EE. zzE*E*E*E*E*E. zzzE.E.E.E.E.. Bonus: .............. .............. .............. .........g.... ..........&... .........*.&.. .............. 5........*.... .............. ..5........... .............. j...5......... .&............ +.b...5....... ...&.......... ....b...5..... &&.+.j........ www........... lbreakout2-2.6.5/client/levels/Makefile.am0000664000175000017500000000344412445277062015343 00000000000000# Use ls | grep -v Makefile | sed -e "s/$/ \\\\/" for update EXTRA_DIST = 1010011010 \ Abc \ Afl \ Africa \ Alex \ Alexandre \ AllNighter \ AllWorld \ America \ Arcade \ Arkanoid \ Asia \ Astra \ Astro \ Belief \ BeOS-4ever \ Bertrand \ BigBang \ Biolab428 \ Blues \ Bombs \ CalendarFun \ Celine \ Chaos \ Choices \ Circle \ Classique \ Color \ Composers \ Cool \ Crossing \ D2K \ Daves \ Demons \ Europe \ Family \ Fantaisie \ FatalDoomsday \ FatalDoomsday2 \ Flower \ Fly \ Football \ Freek \ Frozen \ FunCity \ Gatinha \ Germany \ GreenWall \ GreenWall2 \ GreenWall3 \ GreenWall4 \ Hans \ HartzIV \ HereWeGo \ Heroes \ Hieroglyphs \ HighBall \ Holidays \ Hommage \ Horror \ Impossibility \ Invisible \ IoriYagami \ Iris \ IrrenhausAh \ Izusiowe \ JediAdventure \ JustForFun \ Kazan-1 \ Kevin \ KungFu \ Lapis \ Lattices \ Lattsville \ LBreakout1 \ LBreakout2 \ LinuxFun \ Lord \ Madness \ Maze \ Megadoomer \ MegaMan2 \ Memory \ MontyHall \ N_Arenas \ Nations \ Negundoid \ NES \ NewBricks \ NewOERG1 \ N_Snapshots \ ObiWan \ Oceania \ OpenSource \ OurWorld \ Pabelo \ Patience \ Pawset \ PCGames \ Ph33r \ P.I.T.A. \ PlayAgain \ Popcorn \ RichQuick \ Runes \ R-World \ Sadistic \ Shimitar \ Silly \ SkillShot \ Smilies \ SnyMaxx \ StarWars \ Symmetry \ Symmetry-MKII \ T.C.S. \ TheEnd \ TheGauntlet \ TimeWaster \ TrickShot \ Tricky \ Twilight \ Vader \ WallBricks \ Weirdness \ Wizi \ Wolvie \ WonderWalls \ WTF \ X \ Yexter \ Yoda \ Zigies \ Zooligan \ Zufallswelt install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/levels @for file in $(EXTRA_DIST); do \ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/levels/$$file; \ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\levels\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done lbreakout2-2.6.5/client/levels/T.C.S.0000664000175000017500000003156112140767201014065 00000000000000Version: 1.00 Level: G TCS #1 Bricks: .............. ############## hhhhhhhhhhhhhh hhhhhhhhhhhhhh ############## gggggggggggggg gggggggggggggg ############## dddddddddddddd dddddddddddddd ############## ffffffffffffff ffffffffffffff ############## !!!!!!!!!!!!!! !!!!!!!!!!!!!! ############## ......gg...... Bonus: .............. .............. .............. 55555555555555 .............. 44444444444444 44444444444444 .............. 33333333333333 33333333333333 .............. }222222222222} }222222222222} g............g 11111111111111 11111111111111 g............g ......mm...... Level: G TCS #2 Bricks: !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# ######gg###### Bonus: .l...........l 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5}5.5.5. 5.5.5g.}5g5.5. .....gmm.g.... Level: G TCS #3 Bricks: ###!######!### #!#!#!##!#!#!# #!#!#!##!#!#!# #!#!#!##!#!#!# ###!######!### #!###!##!###!# #!#!#!##!#!#!# #!#!#!##!#!#!# #!#!#!##!#!#!# #!###!##!###!# #!!!######!!!# #!!!#!##!#!!!# #!!!#!##!#!!!# #!!!#!##!#!!!# ############## g............g .............. .............. Bonus: ...5..ll..5... .5.5.5..5.5.5. .5.5.5..5.5.5. .5.5.5..5.5.5. ...5......5... .5...5..5...5. .5.5.5..5.5.5. .5.5.5..5.5.5. .5.5.5..5.5.5. .5...5..5...5. .555......555. .555.5..5.555. .555g5}}5g555. .555g5}}5g555. ....g.}}.g.... m............m .............. .............. Level: G TCS #4 Bricks: ......ii...... ......##...... .....iiii..... .....####..... ....dddddd.... ....######.... ...dddddddd... ...########... ..hhhhhhhhhh.. ..##########.. ......hh...... ......##...... ......gg...... ......##...... ......gg...... ......##...... ......gg...... .....f##f..... Bonus: ......55...... ......55...... .....5555..... .....5ll5..... ....555555.... ....555555.... ...55555555... ...55555555... ..5555555555.. ..5555gg5555.. ......55...... ......}}...... ......55...... ......gg...... ......55...... ......}}...... ......55...... .....m55m..... Level: G TCS #5 Bricks: g###!!!!!!###g .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .############. .############. .############. .############. .############. Bonus: m...555555...m ..g.555555.g.. ....555555.... ..g.555555.g.. ....555555.... ..}.555555.}.. ....555555.... ..}.555555.}.. ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... .............. .............. ......ll...... .............. .............. Level: G TCS #6 Bricks: .....####..... ....######.... ...##...g##... ...##....##... ...##....##... ...##....##... ...##......... ...##......... ...##......... ...######..... ...#######.... ...##!!!!##... ...##!!!!##... ...##!!!!##... ...##!!!!##... ...##!!!!##... ....######.... .....####..... Bonus: .......l...... .............. ........m..... .............. .............. .............. .............. .............. .............. .............. ....}......... .....5555..... .....5555..... .....5555..... .....5555..... .....5555..... .............. .............. Level: G TCS #7 Bricks: ############## #!!!!!!!!!!!!# #!##########!# #!#!!!!!!!!#!# #!#!######!#!# #!#!#!!!!#!#!# #!#!#!##!#!#!# #!#!#!#!!#!#!# #!#!#!#!##!#!# #!#!#!#!!#!#!# #!#!#!##!#!#!# #!#!#!#!!#!#!# #!#!#!#!##!#!# #!#!#!####!#!# #!#!#!!!!!!#!# #!#!########!# #!#!!!!!!!!!!# #############g Bonus: .............. .555555555555. .5..........5. .5.55555555.5. .5.5......5.5. .5.5.5555.5.5. .5.5.5..5.5.5. .5.5.5.55.5.5. .5.5.5.5..5.5. .5.5.5.55.5.5} .5.5.5..5.5.5} .5.5.5.55.5.5} .5.5.5.5..5.5} .5.5.5....5.5} .5.5.555555.5} .5.5........5} .5.5555555555} ....gggggg..mm Level: G TCS #8 Bricks: !!!!zEEEEz!!!! !!!!z!!!!z!!!! @@@@z!!!!z@@@@ !!!!z!!!!z!!!! !!!!zEEEEz!!!! !!!!z!!!!z!!!! @@@@z!!!!z@@@@ !!!!z!!!!z!!!! !!!!zEEEEz!!!! !!!!z!!!!z!!!! @@@@z!!!!z@@@@ !!!!z!!!!z!!!! !!!!zEEEEz!!!! !!!!z!!!!z!!!! @@@@z!!!!z@@@@ !!!!z!!!!z!!!! !!!!zEEEEz!!!! #####aaaa##### Bonus: 5555l....l5555 55555555555555 ....555555.... 55555555555555 55555....55555 55555555555555 ....555555.... 55555555555555 55555....55555 55555555555555 ....555555.... 55555gggg55555 55555....55555 55555555555555 ....}5555}.... 5555}5555}5555 5555}....}5555 .....mppm..... Level: G TCS #9 Bricks: g.@@@@@@@@@@.g ..@@@@@@@@@@.. ..@@@@!!@@@@.. ..@@@!!!!@@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@@!!!!@@@.. ..@@@@!!@@@@.. ..@@@@@@@@@@.. ..@@@@@@@@@@.. Bonus: m.l........l.m .............. ....g}55}g.... ....}5555}.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....}5555}.... ....g}55}g.... .............. .............. Level: G Bonus Round Bricks: g!!!!!!!!!!!!! ##!!!#!!#!!!!! #!#!#!#!##!!!! ##!!#!#!#!#!!! #!#!#!#!#!#!!! ##!!!#!!#!#!!! !!!!!!!!!!!!!! !!#!#!###!!!!! !!#!#!#!!!!!!! !!#!#!#!!!!!!! !!#!#!######!! !!#!#!!!!!!#!! !!###!!!!!!#!! !!!!!!!!!!!#!! ############!! !!!!!!!!!!!!!# !!!!!!!!!!!!## #############g Bonus: m5555555555555 ..5j5.55.55555 .5.5.5.5..5555 ..55.5.5.5.555 .5.5.5.5.5.555 ..555.j5.5.555 55555555555j55 55.5.5...55555 55.5.5.5555555 5j.5.5.5555555 55.5.5......55 55.5.55j555.55 55...555555.55 55555555555.55 ............55 bbbj555555555. wwwwwww}}}}}.. .............m Level: G TCS #10 Bricks: ##!!##!!##!!## #!!##!!##!!##! !!##!!##!!##!! !##!!##!!##!!# ##!!##!!##!!## #!!##!!##!!##! !!##!!##!!##!! !##!!##!!##!!# ##!!##!!##!!## #!!##!!##!!##! !!##!!##!!##!! !##!!##!!##!!# ##!!##!!##!!## #!!##!!##!!##! !!##!!##!!##!! !##!!##!!##!!# ##!!##!!##!!## g############g Bonus: ..55..55..55.. .55..55..55..5 55..55..55..55 5..55..55..55. ..55..55..55.. .55..55..55..5 55..55..55..55 5..55..55..55. ..55..55..55.. .55..55..55..5 55..55..55..55 5..55..55..55. ..55..55..55.. .55..55..55..g 55..55..55..}g 5..55..55..}}. ..55..55..gg.. m............m Level: G TCS #11 Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! #!#!#!#!#!#!#! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !@!@!@!@!@!@!@ !!!!!!!!!!!!!! !!!!!!!!!!!!!! E!E!E!E!E!E!E! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !@!@!@!@!@!@!@ !!!!!!!!!!!!!! !!!!!!!!!!!!!! #!#!#!#!#!#!#! !!!!!!!!!!!!!! #!!!!!!!!!!!!# g############g Bonus: 55555555555555 55555555555555 .5.5.5.5.5.5.5 55555555555555 55555555555555 5.5.5.5.5.5.5. 55555555555555 55555555555555 .5.5.5.5.5.5.5 55555555555555 55555555555555 5.5.5.5.5.5.5. 55555555555555 55555555555555 .5.5.5}5}5.5.5 55555555555555 .555555555555. mgggg}}}}ggggm Level: G TCS #12 Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! ############## ############## ############## #E####EE####E# ############## ############## ############## ############## g############g Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 }gggggggggggg} }............} }.....ll.....} }............} .............. .............. .............. .............. m............m Level: G TCS #13 Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! @@@@@@@@@@@@@@ @@@E@@@@@@E@@@ @@@@@@EE@@@@@@ E@@@@@@@@@@@@E @@@@@@@@@@@@@@ g@@@@@@@@@@@@g Bonus: jjjjjjjjjjjjjj 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 .}}}}}}}}}}}}. ....gggggg.... .............. .............. .............. m............m Level: G TCS #14 Bricks: !!!!#!!!!#!!!! #####!!!!##### !!!!#!!!!#!!!! !!!!######!!!! !!!!!!!!!!!!!! #!!!!!!!!!!!!# ##!!!!!!!!!!## ###!!!!!!!!### ####!!!!!!#### #####!!!!##### ######!!###### #!##########!# #!!########!!# #!!!######!!!# #!!!!####!!!!# #!!!!!##!!!!!# #!!!!!!!!!!!!# g############g Bonus: jjjj.5555.jjjj .....5555..... 5555.5555.5555 5555......5555 55555555555555 .555555555555. ..5555555555.. ...55555555... ....555555.... .....5555..... .....g55g..... .5...g55g...5. .55..g55g..55. .555.g}}g.555. .5555g}}g5555. .55555..55555. .555555555555. m............m Level: G TCS #15 Bricks: !!!!!@@@@@@@@@ !!@@!@!!!!!!!@ !@@@!@!@@@@@@@ @@!@!@!@!!!!!! @!!@!@!@!!!!!! @!!@!@!@!!!!!! @@!@!@!@@@@@@@ !@!@!@!!!!!!!@ !@!@!@@@@@@!!@ !@!@!!!!!!@!!@ !@!@!!!!!!@!!@ !@!@!!!!!!@!!@ !@!@!!!!!!@!!@ @@!@@@!@@@@!!@ @!!!!@!@!!!!!@ @@@@@@!@!!!!!@ !!!!!!!@@@@@@@ #######g#####g Bonus: 55555......... 55..5.5555555. 5...5.5....... ..5.5.5.555555 .55.5.5.555555 .55.5.5.555555 ..5.5.5....... 5.5.5.5555555. 5.5.5......55. 5.5.555555.55. 5.5.555555.55. 5.5.555555.55. 5.5.555555.55. ..5...5....55. .5555.5.55555. ......5.55555. 5555555....... .......m.....m Level: G TCS #16 Bricks: E!!!!!EE!!!!!E !!!!!!EE!!!!!! !!###!EE!###!! !!###!!!!###!! !!##########!! !!!########!!! E!!##E!!E##!!E !!!##!!!!##!!! !!!##!!!!##!!! !!!##!!!!##!!! !!!##!!!!##!!! E!!##!!!!##!!E !!!##E!!E##!!! !!!########!!! !!##########!! E!###g..g###!E #####....##### #####@..@##### Bonus: .55555..55555. 555555..555555 55.j.5..5.j.55 55...5555...55 55....jj....55 555j......j555 .55...55...55. 555..5555..555 555j.5555.j555 555..5555..555 555..5555..555 .55jg5555gj55. 555.g.55.g.555 555.gg}}gg.555 55...g}}g...55 .5...m..m...5. .............. .............. Level: G TCS #17 Bricks: !!!@@!!!!@@!!! !!!@@!!!!@@!!! !!!@@!!!!@@!!! @@@@!!!!!!@@@@ @@@@!!!!!!@@@@ !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!@@!!@@!!!! !!!!@@!!@@!!!! !!!!@@!!@@!!!! !!!!@@!!@@!!!! !!!@@@!!@@@!!! !!!@@!!!!@@!!! !!!@@!!!!@@!!! !!!@@@!!@@@!!! !!@@@@!!@@@@!! @@@!!@@@@!!@@@ g@@@!@@@@!@@@g Bonus: jjj..5555..jjj jjj..5555..jjj 555..5555..555 ....555555.... ....555555.... 55555555555555 55555555555555 5555..55..5555 5555..55..5555 5555..55..5555 5555..55..5555 555...55...555 555..5555..555 555..5555..555 555...55...555 55}}}}55gggg55 ..}}}}..gggg.. m.}}}}..gggg.m Level: G TCS #18 Bricks: g############g .#!!!!!!!!!!#. .#!!!!!!!!!!#. .#####!!#####. .#!!!#!!#!!!#. .#!!!#!!#!!!#. .###!#!!#!###. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .############. .############. Bonus: m............m ..5555555555.. ..5555555555.. ......55...... ..555.55.555.. ..555.55.555.. ....5.55.5.... ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5g55g5.5.. ....}gggg}.... ....}}}}}}.... Level: G Bonus Round Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! ############## ############## ############## ############## gEEEEEEEEEEEEg Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 bjjjjjjjjjjjjb bggggggggggggb b}}}}}}}}}}}}b bwwwwwwwwwwwwb m............m Level: G TCS #19 Bricks: @@@@@@@@@@@@@@ @@!!!!!!!!!!@@ @@!!!!!!!!!!@@ @@!@@@@@@@@!@@ @@!@!!!!!!@!@@ @@!@!!!!!!@!@@ @@!@!@@@@!@!@@ @@!@!@!!@!@!@@ @@!@!@!!@!@!@@ @@!@!@!!@!@!@@ @@!@!@!!@!@!@@ @@!@!@@@@!@!@@ @@!@!!!!!!@!@@ @@!@!!!!!!@!@@ @@!@@@@@@@@!@@ @@!!!!!!!!!!@@ @@!!!!!!!!!!@@ g@@@@@@@@@@@@g Bonus: ..jjjjjjjjjj.. g.5555555555.} g.5555555555.} g.5........5.} g.5.555555.5.} g.5.555555.5.} g.5.5....5.5.} g.5.5.55.5.5.} g.5.5.55.5.5.} g.5.5.55.5.5.} g.5.5.55.5.5.} g.5.5....5.5.} g.5.555555.5.} g.5.555555.5.} g.5........5.} g.5555555555.} ..5555555555.. m............m Level: G TCS #20 Bricks: @@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@@@@@@@@@@@@@ g@@@@@@@@@@@@g Bonus: jjjjjjjjjjjjjj }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }55555ll55555g }55555ll55555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g m555555555555m Level: G THE END Bricks: ############## #!!!#!#!#!!!## ##!##!#!#!#### ##!##!!!#!!!## ##!##!#!#!#### ##!##!#!#!!!## ############## #!!!#!###!#!!# #!###!!##!#!#! #!!!#!#!#!#!#! #!###!##!!#!#! #!!!#!###!#!!# ############## ############## ###@###@###@## ############## #@###@###@###@ g############g Bonus: gggggggggggggg >5555555555f55 555555555f5555 555f555>555555 5f555f55555555 55>5555f555f>5 5555>555555555 55555555555555 jjjjjjjjjjjjjj 55555555555555 55f55555555555 55555>5f5f5>55 55555555555555 f555f5555555f5 555555555>5555 55555555555>55 555555f5555555 m5f5>55555555m lbreakout2-2.6.5/client/levels/Patience0000664000175000017500000003307712140767201014756 00000000000000Version: 1.00 Level: G Big X Bricks: ####zzzzzz#### #cb#zzzzzz#bc# #bb#zzzzzz#bb# #aa#zzzzzz#aa# #...#zzzz#...# #..!.#zz#.!..# ###.!.##.!.### zzz#.!..!.#zzz zzzz#.!!.#zzzz zzz##!..!##zzz zz#.!....!.#zz ##.!......!.## ..!.##..##.!.. ...#z#..#z#... aa#zz#..#zz#aa bb#zz#..#zz#bb cb#zz#..#zz#bc ######..###### Bonus: ....55ll55.... .m4.555555.44. .44.555555.44. .44.555555.44. ..33.5555.33.. ..323.55.323.. ...323..323... 555.323323.555 555m33223.m555 555.32.32..555 55.323.3323.55 ..323...3323.. .323......323. .33.5....5.33. 44.55....55.44 44.55....55.44 44.55....55.4m .............. Level: G 5 HELLpings Of Trouble Bricks: .............. .............. @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ .....@cc@..... .....@cc@..... .....@cc@..... .....@cc@..... .............. @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ .............. Bonus: .............. .............. .55........55. .55........55. .55........55. .55........55. .--........~~. ......55...... ......55...... ......55...... ......ff...... .............. .55........55. .55........55. .55........55. .55........55. .>>........dd. .............. Level: G Rings Of Hell Bricks: .............. .............. ...###..###... ..#!!!!!!!!#.. .#!!......!!#. .#!.######.!#. .#!#......#!#. .#!#!!!!!!#!#. .#!#!####!#!#. .#!#!#!!#!#!#. .#!#!.!!.!#!#. .#!#!####!#!#. .#!#!!!!!!#!#. .#!#......#!#. .#!.##..##.!#. .#!!......!!#. ..#!!!!!!!!#.. ...########... Bonus: .............. .............. ..3........3.. .3.22222222.3. ..2233333322.. ..23......32.. ..2.555555.2.. ..2.444444.2.. ..2.4....4.2.. ..2.4.55.4.2.. ..2.455554.2.. ..2.4....4.2.. ..2.434444.2.. ..2.555555.2.. ..23......32.. ..22......22.. .3.22222222.3. ..3........3.. Level: G Big Tough Wall Bricks: hhhhhhhhhhhhhh !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! dddddddddddddd dddddddddddddd cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc Bonus: jjjjjjjjjjjjjj 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 }g}g}g}g}g}g}g g}g}g}g}g}g}g} {W{W{W{W{W{W{W W{W{W{W{W{W{W{ {W{W{W{W{W{W{W W{W{W{W{W{W{W{ {W{W{W{W{W{W{W W{W{W{W{W{W{W{ {W{W{W{W{W{W{W Level: G Sideways Hourglass Bricks: .............. .............. !.@@cccccc@@.! !.@z@cccc@z@.! !.@zz@cc@zz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzz@@zzz@.! !.@zz@cc@zz@.! !.@z@cccc@z@.! !.@@cccccc@@.! .............. .............. Bonus: .............. .............. 23..444444..32 23.l.4444.l.32 23.55.mm.55.32 23.55555555.32 23.55555555.32 23.55555555.32 23.55555555.32 23.55555555.32 23.55555555.32 23.55555555.32 23.555..555.32 23.55.33.55.32 23.m.3333.m.32 23..333333..32 .............. .............. Level: G Green Spiral Bricks: zzzzzzzzzzzzzz z............z z............z z.zzzzzzzzzz.z z.z........z.z z.z........z.z z.z.zzzzzz.z.z z.z.z....z.z.z z.z.z....z.z.z z.z.z.z..z.z.z z.z.z.z..z.z.z z.z.z.zzzz.z.z z.z.z......z.z z.z.z......z.z z.z.zzzzzzzz.z z.z..........z z.z..........z z.zzzzzzzzzzzz Bonus: 44444444444444 4............4 4............4 4.4444444444.4 4.4........4.4 4.4........4.4 4.4.444444.4.4 4.4.4....4.4.4 4.4.4....4.4.4 4.4.4.4..4.4.4 4.4.4.4..4.4.4 4.4.4.4444.4.4 4.4.4......4.4 4.4.4......4.4 4.4.44444444.4 4.4..........4 4.4..........4 4.444444444444 Level: G Terrible Trouble Bricks: ccccchhhhccccc ccccchhhhccccc ccccchhhhccccc @@@@@hhhh@@@@@ cccc@hhhh@cccc ccc.@.hh.@.ccc cc..@.hh.@..cc c...@.hh.@...c ....@.hh.@.... zz@...hh...@zz zz@.hhhhhh.@zz zz@.hhhhhh.@zz zz@.hhhhhh.@zz zz@........@zz zz@@@c@@c@@@zz zzzz@c@@c@zzzz zzzz@c@@c@zzzz @@@@#c##c#@@@@ Bonus: l5555....5555l 55555....55555 55555....55555 .............. m555......555m 555........555 55..........55 5............5 .............. 55..........55 55..........55 55..........55 55..........55 55..........55 55...>..<...55 5555.>..<.5555 5555.>..<.5555 .....>..<..... Level: G Utter Chaos Bricks: ..d.#@h.....d# .....#.@.d..d# .....h..#d...d d..#.@..d....d d..h...#.@...# .....@.##@..d. ...h..#d...d.# d....@#d....d. ...#..@......d d#hh..h#.#.... .#.h#h.#.###.. ...##@.h#d.#.. ....#..hd@h.h. .d...@.dd.d.dd .d.#.@d..hhhh. .dd.d.......d. ...#...#.....# ...#.#.......@ Bonus: ..5...5.....5. .........5..5. .....5...5...5 5.......5....5 5..5.......... ............5. ...5...5...5.. 5......5....5. .............5 5.55..l....... ...5.l........ .......5.5.... .......55.5.5. .5.....55.5.55 .5....5..5555. .55.5.......5. .............. .............. Level: G Pink Floyd - The Wall Bricks: .............. .............. .............. bcbcbcbcbcbcbc cbcbcbcbcbcbcb bcbcbcbcbcbcbc cbcb@@cb@@cbcb bcb@@cbcb@@cbc cbc@c@cb@b@bcb bcbcbc@@bcbcbc cbcbcb@@cbcbcb bcbcb@bc@cbcbc cbcb@bcbc@cbcb bcb@bcbcbc@cbc cbcbcbcbcbcbcb bcbcbcbcbcbcbc .............. .............. Bonus: .............. .............. .............. ....5.5...55.5 .l.555555.5... ..5555........ .55....5..5... 5..5.m.5m5.... 5.555.55...... .5..5...5...5. 5...5.555.55.. 5....5.5.5...5 .555.5...5.l5. ..5....5.5...5 ....5...5...5. ..........55.. .............. .............. Level: G Bonus Round! Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 5l555555555555 555555555555j5 55555555555555 5555555555j5j5 55555555555555 55555l5j555j55 55555555555555 55555555j55555 5555j555555555 55555555555555 555555j555l555 55555555555555 55j555555555l5 55555555555555 gggggggggggggg bbbbbbbbbbbbbb }}}}}}}}}}}}}} wwwwwwwwwwwwww Level: G Column "Fun" Bricks: .............. .............. c@b@a@..@a@b@c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c ######..###### .............. Bonus: .............. .............. p.f.f....f.f.p 5.5.f....f.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 l.5.5....5.5.l .............. .............. Level: G PaintBox Bricks: @@@@@@@@@@@@@@ @h@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@@@@@@@@@@@@ Bonus: l......ll....l .m.}}555555gm. ...}5555555gg. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...gg5555555}. ...mg555555}}. .............. Level: G Green Cheese Bricks: zzzzzzzzzzzzzz zzvzzzzzzzzvzz zzzzzzzzzzzzzz zzzzvzzzzzzzzz zzvzzzzzzzzzzz zzzzzzzzvzzzzz zzzzzzzzzzzzvz zzzvzzzzzzzzzz zzzzzzvzzzzzzz zzzzzzzzzzzzzz zvzzzzzzzzzzzv zzzzzzzzzzzzzz zzzzzzzzzzvzzz zzzzvzzzzzzzzz zzzzzzzzvzzzzz zvzzzzvzzzzvzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz Bonus: l.....ll.....l 55b55555555m55 55555555555555 5555w555555555 55b55555555555 55555555w55555 555555555555b5 555b5555555555 555555w5555555 55555555555555 5b55555555555b 55555555555555 5555555555b555 5555w555555555 55555555b55555 5w5555b5555w55 55555555555555 55555555555555 Level: G Secret Center Bricks: .............. .............. c.!.c@cc@c.!.c .....@cc@..... .!.!.@cc@.!.!. .....@cc@..... c.!.c@cc@c.!.c .....@cc@..... .!.!.@cc@.!.!. .....@cc@..... c.!.c@cc@c.!.c .....@cc@..... .!.!.@cc@.!.!. .....@cc@..... c.!.c@cc@c.!.c .....@cc@..... .@.@.@cc@.@.@. .............. Bonus: .............. .555......555. l5.5..55..5.5l 55555.55.55555 5.5.5.55.5.5.5 55555.55.55555 .5.5..55..5.5. 55555.55.55555 5.5.5.55.5.5.5 55555.mm.55555 .5.5..55..5.5. 55555.55.55555 5.5.5.55.5.5.5 55555.55.55555 .5.5..55..5.5. .555..55..555. ......55...... .............. Level: G Green Spiral II Bricks: ..z.z.z.z.z.z. .z.z.z.z.z.z.z .############. .#.z.z.z.z.z#. .#z.z.z.z.z.#. .#.########.#. .#.#.z.z.z#.#. .#.#z.z.z.#.#. .#.#.####.#.#. .#.#.#.z.z#.#. .#.#.#z.z.#.#. .#.#.######.#. .#.#z.z.z.z.#. .#.#.z.z.z.z#. .#.##########. .#.z.z.z.z.z.z .#z.z.z.z.z.z. .############# Bonus: ..2.2.2.2.2.2. .w.b.w.b.w.b.w .555555555555. .5.b.b.b.b.b5. .52.2.2.2.2.5. .5.55555555.5. .5.5.b.b.b5.5. .5.52.2.2.5.5. .5.5.5555.5.5. .5.5.5.b.m5.5. .5.5.52.2.5.5. .5.5.555555.5. .5.5b.b.b.b.5. .5.5.2.2.2.25. .5.5555555555. .5.w.b.w.b.w.b .52.2.2.2.2.2. .5555555555555 Level: G UUU Bricks: .............. .#.#.#..#.#.#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .###.####.###. .............. vvvvvvvvvvvvvv .............. vvvvvvvvvvvvvv .............. vvvvvvvvvvvvvv .............. vvvvvvvvvvvvvv .............. Bonus: .............. .............. ..5...55...5.. ..5...55...5.. ..5...55...5.. ..5...55...5.. ..5...55...5.. ..5...55...5.. .............. .............. l333333333333l .............. 33333333333333 .............. 33333333333333 .............. 22222222222222 .............. Level: G Get The Corners! Bricks: !#!#!#!!#!#!#! ##!#!#!!#!#!## !!!#!#!!#!#!!! ####!#!!#!#### !!!!!#!!#!!!!! ######!!###### !!!!!!!!!!!!!! ############## !!!!!!!!!!!!!! ############## !!!!!!!!!!!!!! ############## !!!!!!!!!!!!!! ############## !!!!!!!!!!!!!! ############## !!!!!!cc!!!!!! ......cc...... Bonus: m555555555555m 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 gggggggggggggg 55555555555555 }}}}}}}}}}}}}} ......mm...... .............. Level: G Double Columns Bricks: #............. #!!!!!!!!!!!!! #!#d#d#d#d#d#! #!#d#d#d#d#d#! #!#d#d#d#d#d#! #!#d#d#d#d#d#! !!#d#d#d#d#d#! !!#d#d#d#d#d#! !############! !############! !#h#h#h#h#h#!! !#h#h#h#h#h#!! !#h#h#h#h#h#!# !#h#h#h#h#h#!# !#h#h#h#h#h#!# !#h#h#h#h#h#!# !#h#h#h#h#h#!# !!!!!!!!!!!!!@ Bonus: 5............. 52222222222222 52555555555552 52555555555552 52555555555552 52555555555552 22555555555552 225l555m555l52 25555555555552 25555555555552 25555555555522 25555555555522 25555555555525 25555555555525 25555555555525 25555555555525 25454545454525 22222222222225 Level: G Treasure Box Bricks: .............. !!!!!!!!!!!!!! !zzzzzzzzzzzz! !zccccccccccz! !zc########cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc########cz! !zccccccccccz! !zzzzzzzzzzzz! !!!!!!!!!!!!!! .............. Bonus: .............. 22222222222222 23333333333332 234}}}mm}}}432 234gggggggg432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234gggggggg432 23444444444432 23333333333332 22222222222222 .............. Level: G Bonus Round! Bricks: !.!.!.!.!.!.!. .!.!.!.!.!.!.! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* Bonus: .............. 55555555555555 55555555555555 55l5555l555555 55555555555555 55555555555555 555555555l5555 5555l555555555 555555*5*55555 55555555555555 55555555555555 55555555555555 555555555555.5 55555555555g5g 5555555555g5g5 5}5}5555555555 }5}5}5555555j5 5w5w5w5w5w5w55 Level: G Yes, it's Tough! Bricks: .............. #!#!#!#!#!#!#! .............. !#!#!#!#!#!#!# .............. #!#!#!#!#!#!#! .............. !#!#!#!#!#!#!# .............. #!#!#!#!#!#!#! .............. !#!#!#!#!#!#!# .............. #!#!#!#!#!#!#! .............. !#!#!#!#!#!#!# .............. #!#!#!#!#!#!#! Bonus: 55555555555555 5.5.5.5.5.5.ml 55555555555555 .5.5.5.5.5.5.5 55555555555555 5m5.5.5.5l5.5. 55555555555555 .5.5.5.5.5.5.5 55555555555555 5.5.5l5.5.5.5. 55555555555555 .5.5.5.5.5.5.5 55555555555555 5l5.5.5.5.5.5. 55555555555555 .5.5.5.5.5.5.5 55555555555555 5.5.5.5.5.5.5. Level: G It's A Big Plus! Bricks: @@..........@@ @....#..#....@ .....#..#..... ....z#..#z.... ...zz#..#zz... ..zzz#..#zzz.. .zzzz#..#zzzz. .#####..#####. .#zzzz..zzzz#. .#zzzz..zzzz#. .#####..#####. .....#..#..... .....#..#..... ....z#..#z.... ...zz#..#zz... ..zzz#..#zzz.. .zzzz#..#zzzz. ######..###### Bonus: .............. .............. .............. ....5....5.... ...55....55... ..555....555.. .5555....5555. .............. ..555l..l555.. ..555l..l555.. .............. .............. .............. ....5....5.... ...55....55... ..555....555.. .555m....m555. .............. Level: G Waste Of Time Bricks: #cccccccccccc# c#cccccccccc#c cc#cccccccc#cc ccc#cccccc#ccc cccc#cccc#cccc ccccc#cc#ccccc cccccc..cccccc cccccc..cccccc cccccc..cccccc cccccc..cccccc cccccc..cccccc cccccc..cccccc ccccc#..#ccccc cccc#cccc#cccc ccc#cccccc#ccc cc#cccccccc#cc c#cccccccccc#c #cccccccccccc# Bonus: .555555555555. 5.5555555555.5 55.55555555.55 555.555555.555 5555.5555.5555 55555.55.55555 555555..555555 555555..555555 555555..555555 555555..555555 555555..555555 555555..555555 55555....55555 5555.5555.5555 555.555555.555 55.55555555.55 5.5555555555.5 .555555555555. Level: G The End Bricks: @@@@@@@@@@@@@@ @vvv@@v@v@@vv@ @@v@@@v@v@@v@@ @@v@@@vvv@@vv@ @@v@@@v@v@@v@@ @@v@@@v@v@@vv@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @vvv@v@@v@vvv@ @v@@@vv@v@@v@v @vvv@v@vv@@v@v @v@@@v@@v@@v@v @vvv@v@@v@vvv@ @@@@@@@@@@@@@@ hhhhhhhhhhhhhh iiiiiiiiiiiiii gggggggggggggg !!!!!!!!!!!!!! Bonus: 55555555555555 5...55.5.55..5 55.555.5.55.55 55.555.m.55..5 55.555.5.55.55 55.555.5.55..5 55555555555555 55555555555555 5...5.55.5...5 5.555..5.55.5. 5...5.5..55.5. 5.555.55.55.5. 5...5.55.5...5 55555555555555 m~>W......W>~m ~~>W......W>~~ >>>W......W>>> WWWW......WWWW lbreakout2-2.6.5/client/levels/GreenWall20000664000175000017500000005505112140767201015164 00000000000000Version: 1.00 Level: Ade Back To The Bricks Bricks: ######xx###### #.....xx.....# #....xyyx....# #...xyzzyx...# #..xyzjjzyx..# #.xyzj##jzyx.# #xyzj#ff#jzyx# #xyzj#ff#jzyx# #.xyzj##jzyx.# #..xyzjjzyx..# #...xyzzyx...# #....xyyx....# #.....xx.....# ######xx###### ..jzyx..xyzj.. ..zyx....xyz.. ..yE......xy.. ..x........x.. Bonus: .............. .............. .............. .............. .............. .............. ......mm...... ......mm...... .............. .............. ....&....&.... .............. ......mm...... .............. .............. .............. .............. .............. Level: Ade Show No Mercy Bricks: @@@E@@EE@@E@@@ @@E@@E##E@@E@@ @E@@E#ff#E@@E@ E@@E#fxxf#E@@E @@E#fxffxf#E@@ @E#fxfxxfxf#E@ E#fxfxffxfxf#E EfxfxfxxfxfxfE EfxfxfxxfxfxfE E#fxfxffxfxf#E @E#fxfxxfxf#E@ @@E#fxffxf#E@@ EEE##fxxf##EEE #f####xx####f# .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. ......mm...... ......mm...... .............. .............. .............. .............. .m....44....s. .............. .............. .............. .............. Level: Ade Manhattan-Kaboul Bricks: ffff#...xyz... fff#...xyz...a ff#...xyz...ab f#...xyz...abc #...xyz...abc. ...xyz...abc.. ..xyz...abc... .xyz...abc.... xyz...abc..... xyz...abc..... .xyz...abc.... ..xyz...abc... ...xyz...abc.. #...xyz...abc. f#...xyz...abc ff#...xyz...ab fff#...xyz...a ffff#...xyz... Bonus: .............. .............. mm............ .............. .............. .............. .............. .............. .m......m..... .m......m..... .............. .............. .............. .....l........ ......l....... .......4...... ........4..... .............. Level: Ade Doors Bricks: ffffff##ffffff f....#aa#....f f...#abba#...f f..#abccba#..f f.#abcjjcba#.f f#abcj##jcba#f fabcj#xx#jcbaf fbcj#xyyx#jcbf !!!!#yzzy#!!!! !!!!#yzzy#!!!! fbcj#xyyx#jcbf fabcj#xx#jcbaf f#abcj##jcba#f f.#abcjjcba#.f f..#abccba#..f f...#abba#...f f....#aa#....f ffffff##ffffff Bonus: .............. .............. .............. .............. .............. .............. .............. ......44...... ......mm...... ......mm...... m.....44.....m .............. .............. .............. ....&b..b&.... .............. .............. .............. Level: Ade Windows Bricks: ......xx...... ......xx...... ......ff...... .###..ff..###. .#f#..xx..#f#. .###..xx..###. ......ff...... ......ff...... .xxxffxxffxxx. .xxxffxxffxxx. ......ff...... ......ff...... .###..xx..###. .#f#..xx..#f#. .###..ff..###. ......ff...... ......xx...... ......xx...... Bonus: .............. .............. .............. .............. ..4........4.. .............. .............. .............. ......mm...... ......mm...... .............. ......l4...... .............. ..&........&.. .............. .............. .............. .............. Level: Ade Here We Go Bricks: .............. .#x........x#. .#yx......xy#. .#zyx....xyz#. .#jzyx..xyzj#. .#!jzyxxyzj!#. .............. ####f####f#### #ff#f#ff#f#ff# #ff#f#ff#f#ff# ####f####f#### .............. .#!jzyxxyzj!#. .#jzyx..xyzj#. .#zyx....xyz#. .#yx......xy#. .#x........x#. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ......mm...... .l&.m.mm.m.&l. .............. .............. .....4**4..... .............. .............. .............. .............. .............. Level: Ade Trinitro Tolueno Bricks: .............. .............. .**...**...**. #xx#.#xx#.#xx# #xx#.#xx#.#xx# ####.####.#### .............. xxxxxxxxxxxxxx *x*x*x**x*x*x* *x*x*x**x*x*x* xxxxxxxxxxxxxx .............. ####.####.#### #xx#.#xx#.#xx# #xx#.#xx#.#xx# .xx...xx...xx. .............. .............. Bonus: .............. .............. .............. .............. .mm...mm...mm. .............. .............. *............. .............. .............. *............. .............. .............. ......mm...... ......44...... .............. .............. .............. Level: Ade Stars Bricks: ......!!...... .....!!!!..... ....!!!!!!.... .....!!!!..... ..####!!####.. ..#xxxxxxxx#.. ..#xyyyyyyx#.. .!#xyz!!zyx#!. !!!xy!!!!yx!!! !!!xy!!!!yx!!! .!#xyz!!zyx#!. ..#xyyyyyyx#.. ..#xxxxxxxx#.. ..####!!####.. .....!!!!..... ....!!!!!!.... .....!!!!..... ......!!...... Bonus: .............. .............. .............. .............. .............. .............. .....l44l..... .............. .............. .............. .*..........*. .............. ....mmmmmm.... .............. .............. .............. .............. ......**...... Level: Ade Boss Bricks: ########...... .x#....x#..... .xa#...xa#.... .xay#..xay#... .xayb#.xayb#.. .xaybz#xaybz#. .xaybzcxaybzc. .xaybzcxaybzc. .xaybzcxaybzc. .xaybzcxaybzc. .xaybzcxaybzc. .xaybzcxaybzc. .xaybz#xaybz#. .xayb#.xayb#.. .xay#..xay#... .xa#...xa#.... .x#....x#..... ########...... Bonus: .............. .............. .............. .............. .............. .............. .............. ............m. ............m. ............m. ............m. .............. .............. .............. .&&&...&&&.... .44....44..... .l.....l...... .............. Level: Ade Tetris Bricks: ......zz...... ......zz...... ......z....... .............. .............. .............. ...j......b... .f.j..x...b.k. .f.j.ax.e.bik. .f.jgax.e.bik. .fhjgaxde.bik. .fhjgaxdezbik. .fhjgaxdezbik. .fhjgaxdezbik. .############. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .*.*........*. .............. ........*..... .............. .......*...... ......**...... ...&4.**.4&... .............. .............. .............. .............. Level: Ade Clown Bricks: ff#aaaaaaaa#ff ff#jaaaaaaj#ff ff#jjaaaajj#ff f#jjjjaajjjj#f f#jjjjjjjjjj#f f#jjjjjjjjjj#f #jjggjjjjggjj# #jj!!jjjj!!jj# #jjggjjjjggjj# f#jjjjeejjjj#f f#jjjjeejjjj#f f#jjjjeejjjj#f ff#jjjjjjjj#ff ff#jjddddjj#ff ff#jjjddjjj#ff fff#jjjjjj#fff fff#jjjjjj#fff #####jjjj##### Bonus: .............. .............. .m..........m. .............. ......mm...... m............m .............. .............. .............. .............. .............. ......44...... .............. .............. .............. .............. ......**...... ......ww...... Level: Ade Mirror Bricks: #............. j#............ zj#........... yzj#.......... xyzj#......... #xyzj#........ a#xyzj#....... ba#xyzj#...... cba#xyzj#..... jcba#xyzj#.... #jcba#xyzj#... .#jcba#xyzj#.. ..#jcba#xyzj#. ...#jcba#xyzj# .............. ...#jcba#xyzj# ..#jcba#xyzj#. .#jcba#xyzj#.. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ....4.m4.&mb&. .............. ....mm44...... .............. .............. Level: Ade Whiskey Time Bricks: .jcba.#......# .cba.#......#. .ba.#.x....#.x .a.#.xx...#.xx ..#.xxx..#.xxx .#.xxxx.#.xxxx #.ccccc#.ccccc .bbbbbb.bbbbbb aaaaaaaaaaaaaa aaaaaaaaaaaaaa .bbbbbb.bbbbbb #.ccccc#.ccccc .#.xxxx.#.xxxx ..#.xxx..#.xxx .a.#.xx...#.xx .ba.#.x....#.x .cba.#......#. .jcba.#......# Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .m.m.m.m.m.m.. .............. .............. .............. .............. ......4....... ......4....... .............. .............. Level: Ade Twins Bricks: .############. .f.xxxxxxxx.f. .ff.yyyyyy.ff. .#ff.zzzz.ff#. .#.ff.jj.ff.#. .#a.ff..ff.a#. .#ab.ffff.ba#. .#abc.ff.cba#. .#abc.##.cba#. .#abc.##.cba#. .#abc.ff.cba#. .#ab.ffff.ba#. .#a.ff..ff.a#. .#.ff.jj.ff.#. .#ff.zzzz.ff#. .ff.yyyyyy.ff. .f.xxxxxxxx.f. .############. Bonus: .............. .............. ..m........m.. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ......ll...... .............. ..m........m.. ...&.&44&.&... .............. Level: Ade Inner Bricks: .jzyx#..#xyzj. jzyx#....#xyzj zyx#......#xyz yx#...!!...#xy x#...!!!!...#x #...!!!!!!...# x#...!!!!...#x yx#...!!...#xy zyx#......#xyz jzyx#....#xyzj .jzyx#..#xyzj. ..jzyx##xyzj.. ...jzyxxyzj... ....jzyyzj.... .....jzzj..... ......jj...... .............. .............. Bonus: .............. .............. .............. .&..........&. m............m .............. .............. m.....l......m .....&44&..... .............. .............. .............. ......mm...... .............. .............. ......**...... .............. .............. Level: Ade The Wall Bricks: .............. .............. xx##ff##ff##xx xx##ff##ff##xx ##xx##ff##xx## ##xx##ff##xx## xx##xx##xx##xx xx##xx##xx##xx ffxxffxxffxxff ffxxffxxffxxff xx##xx##xx##xx xx##xx##xx##xx ##xx##ff##xx## ##xx##ff##xx## xx##ff##ff##xx xx##ff##ff##xx .............. .............. Bonus: .............. .............. .............. ....&m..m&.... .............. .............. .............. .............. .............. .............. .............. .............. .............. ..4l..&&..l4.. .m..m...m...m. .............. .............. .............. Level: Ade Sabotage Bricks: x##........##x ##....##....## #....#xx#....# ....#xxxx#.... ...#xx##xx#... ..#xx#..#xx#.. .#xx#....#xx#. .xx#......#xx. ......ff...... ......ff...... .xx#......#xx. .#xx#....#xx#. ..#xx#..#xx#.. ...#xx##xx#... ....#xxxx#.... .....#xx#..... ......##...... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ......mm...... ......mm...... .............. .............. .............. .............. .............. ......44...... .............. .............. Level: Ade Cry Baby Bricks: .#..........#. x.#........#f. ax.#......#f!. xax.#....#f!f. axax.#..#f!f!. xaxax.#.f!f!f. axaxax.#!f!f!. xaxaxax.f!f!f. axaxaxa.!f!f!. xaxaxax.f!f!f. axaxax.#!f!f!. xaxax.#.f!f!f. axax.#..#f!f!. xax.#....#f!f. ax.#......#f!. x.#........#f. .#..........#. #............. Bonus: .............. .............. .............. ............*. .............. .............. .............. ............*. ......m..*.... .....l........ ....4......... ...m.......... ..b........... .4..........*. m............. .............. .............. .............. Level: Ade AW Bricks: .fff######fff. .fff######fff. .fff#ffff#fff. .fff#ffff#fff. .fff######fff. .fff######fff. .f#f#ffff#f#f. .f#f#ffff#f#f. .f#f#ffff#f#f. .f#ffffffff#f. .f#fff##fff#f. .f#ff####ff#f. .f##f####f##f. .ff###ff###ff. .fff#ffff#fff. .ffffffffffff. .............. .............. Bonus: .............. .............. .............. .....m..m..... .............. .............. .............. .............. .............. .............. .............. .............. ....m....m.... .............. .bbb.bbbb.bbb. .wwwwwwwwwwww. .............. .............. Level: Ade Half Time Bricks: #############. ......#######. .....#abc!!!!. ....#abcjjjjj. ...#abczzzzzz. ..#abcyyyyyyy. .#abcxxxxxxxx. #abcj########. #bcj#ffffffff. #bcj#ffffffff. #abcj########. .#abcxxxxxxxx. ..#abcyyyyyyy. ...#abczzzzzz. ....#abcjjjjj. .....#abc!!!!. ......#######. #############. Bonus: .............. .............. .............. .............. .............. .............. .....&........ .............. .m...m..*.*.*. .m...m..*.*.*. .............. .....&........ .............. .............. .............. ......44l..... .............. .............. Level: Ade Active Bricks: .......#f!f!f! .!!!!!..#f!f!f .!jjjj!..#f!f! .!jzzzj!..#f!f .!jzyyzj!..#f! .!jzyx.zj!..#f .!jzy...zj!..# .!jz..#..zj!.. .!j..#f#..zj!. .!jz..#f#..j!. ..!jz..#..zj!. #..!jz...yzj!. ##..!jz.xyzj!. ###..!jzyyzj!. ####..!jzzzj!. #####..!jjjj!. ######..!!!!!. #######....... Bonus: .............. .............. ..........m... .............. ............m. ....mm........ .............. .............. ......m....... .......m...... .............. .............. ........m..... ......4....... .......l...... .............. .............. .............. Level: Ade ET Bricks: ff###ffff###ff f#jjj#ff#jjj#f fggjggffggjggf f#jej#ff#jej#f f#jej#ff#jej#f f#djd#ff#djd#f ff#d#ffff#d#ff fff#ffffff#fff ff###ffff###ff f#f#f#ff#f#f#f fff#ffffff#fff fff#ffffff#fff fff#ffffff#fff ff#f#ffff#f#ff f#fff#ff#fff#f #fffff##fffff# .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ...m......m... .............. .............. ......44...... .............. .............. ..&........&.. ...m......m... .............. .............. .............. .............. Level: Ade Sleepless Bricks: .............. ......xx...... ....#x##x#.... ....x#ff#x.... ..#x#f##f#x#.. ..x#f#ff#f#x.. #x#f#f##f#f#x# x#f#f#xx#f#f#x #f#f#xffx#f#f# #f#f#xffx#f#f# x#f#f#xx#f#f#x #x#f#f##f#f#x# ..x#f#ff#f#x.. ..#x#f##f#x#.. ....x#ff#x.... ....#x##x#.... ......xx...... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ......mm...... ......mm...... .............. .m..........m. .............. .....4..4..... ......lb...... .............. .............. .............. Level: Ade High Density Bricks: .............. .!..........!. !!!...##...!!! .!...#xx#...!. ....#xyyx#.... ...#xy!!yx#... ....#xyyx#.... ..x..#xx#..x.. .xxx..##..xxx. xx!xx....xx!xx .xxx..##..xxx. ..x..#xx#..x.. ....#xyyx#.... ...#xy!!yx#... ....#xyyx#.... .....#xx#..... ......##...... .............. Bonus: .............. .............. .............. .............. .............. ......mm...... .............. .............. .............. ..m........m.. .............. .............. .............. ......mm...... ........l..... ......44...... .............. .............. Level: Ade Fox Glacier Bricks: .............. .xxx.####.xxx. .xfx.#ff#.xfx. .xxx.####.xxx. ..x..xxxx..x.. .xxx.####.xxx. .xfx.#ff#.xfx. .xxx.####.xxx. ..x..xxxx..x.. .xxx.####.xxx. .xfx.#ff#.xfx. .xxx.####.xxx. ..x..xxxx..x.. .xxx.####.xxx. .xfx.#ff#.xfx. .xxx.####.xxx. .............. .............. Bonus: .............. .............. ..m........m.. .............. .............. .............. ..4........4.. .............. .............. .............. ..m...mm...m.. .............. .............. .............. ..&........&.. .............. .............. .............. Level: Ade The Dark Side Bricks: xfxfxfxxfxfxfx fxfxfx..xfxfxf xfxfx....xfxfx fxfx..aa..xfxf xfx..abba..xfx fx..abccba..xf x..abcjjcba..x ..abcj##jcba.. .abcj#ff#jcba. .abcj#ff#jcba. ..abcj##jcba.. x..abcjjcba..x fx..abccba..xf xfx..abba..xfx fxfx..aa..xfxf xfxfx....xfxfx fxfxfx..xfxfxf xfxfxfxxfxfxfx Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ......mm...... ......mm...... .............. ....b.mm.b.... ....w4..4w.... .............. .............. .............. .............. .............. Level: Ade All The Things You Say Bricks: .....#jcbaxyzj ....#.#jcbaxyz ...#...#jcbaxy ..#.xx..#jcbax .#..yyy..#jcba #...zzzz..#jcb ....aaaaa..#jc ....abbbba..#j ....abccba...# #...abccba.... j#..abbbba.... cj#..aaaaa.... bcj#..zzzz...# abcj#..yyy..#. xabcj#..xx.#.. yxabcj#...#... zyxabcj#.#.... jzyxabcj#..... Bonus: .............. .............. .............. .........m.... .............. .............. ............m. .............. ......m.m..... .............. .............. .............. .............. .......&ll.... m.......44.... .............. .............. .............. Level: Ade Back To Life Bricks: xx..xxx.xx.x.x x.x.x.x.x..x.x xx..xxx.x..xx. x.x.x.x.x..x.x xx..x.x.xx.x.x .............. ...xxx..xxx... ....x...x.x... ....x...x.x... ....x...x.x... ....x...xxx... .............. ..x..x.xx.xx.. ..x..x.x..x... ..x..x.xx.xx.. ..x..x.x..x... vvxxvxvxvvxxvv .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..b..b.bb.bb.. ..b..b.b..b... ..b..b.bb.bb.. ..b..b.b..b... wwwwwwwwwwwwww .............. Level: Electra Bricks: ffffffffffffff ############## .............. .............. .............. .............. xaxaxaaaaxaxax axaxab##baxaxa xaxaxccccxaxax axaxaccccaxaxa xaxaxccccxaxax axaxaccccaxaxa xaxaxb##bxaxax axaxaaaaaaxaxa xaxa#....#axax axa#......#axa xa#........#ax a#..........#a Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. ......mm...... .............. .............. .............. &m4ml....lm4m& .............. .............. .............. .............. Level: Ade 30 Bricks: ffffffffffffff f####fff#####f f#####ff#####f ffff##ff#fff#f ffff##ff#fff#f ff###fff#fff#f ff###fff#fff#f ffff##ff#fff#f ffff##ff#fff#f f#####ff#####f f####fff#####f ffffffffffffff xxxxxxxxxxxxxx ffffffffffffff xxxxxxxxxxxxxx ffffffffffffff .............. .............. Bonus: .............. .............. .............. .............. .............. ..........l... ......mm..&... ..........4... ...&.....m4m.. .............. .............. .............. .............. .............. .............. ..*...**...*.. .............. .............. Level: Ade Songs From The Wood Bricks: .############. .#f##f##f##f#. .############. .a....xx....a. .ab..yxxy..ba. .abczyxxyzcba. .abczyxxyzcba. .abczyxxyzcba. .abczyxxyzcba. .abczyxxyzcba. .ab..yxxy..ba. .a....xx....a. .############. .#f##f##f##f#. .############. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ...m......m... .............. .*..........*. .............. ...m......m... .............. ......44...... .............. ..m..m..m..m.. .............. .............. .............. .............. Level: Ade Long Distance Bricks: .............. .............. #xyzj....jzyx# x#xyzj..jzyx#x yx#xyzjjzyx#xy zyx#xyzzyx#xyz jzyx#xyyx#xyzj .jzyx#xx#xyzj. ..jzyx##xyzj.. ..jzyx##xyzj.. .jzyx#xx#xyzj. jzyx#xyyx#xyzj zyx#xyzzyx#xyz yx#xyzjjzyx#xy x#xyzj..jzyx#x #xyzj....jzyx# .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ......ll...... ......44...... .............. ...m......m... ......mm...... .............. .............. .&....*.....&. .............. .............. .............. .............. Level: Ade Prinz Bricks: .x....##....x. ..x...ff...x.. #..x..##..x..# a#..x....x..#a xa#..x..x..#ax bxa#..xx..#axb ybxa#....#axby cybxa.##.axbyc jcybx.ff.xbycj jcybx.ff.xbycj cybxa.##.axbyc ybxa#....#axby bxa#..xx..#axb xa#..x..x..#ax a#..x....x..#a #..x..##..x..# ..x...ff...x.. .x....##....x. Bonus: .............. ......mm...... .............. .............. .............. .............. .............. .............. .............. .............. .............. ...&......&... ..m........m.. .m..........m. .............. .............. ......44...... .............. Level: Ade Money For Nothing Bricks: ......##...... .....#xx#..... ....#xxxx#.... ...#xxxxxx#... ..#xxx!!xxx#.. .#xxx!zz!xxx#. .xxx!zffz!xxx. .xx!zf##fz!xx. .x!zf#xx#fz!x. .x!zf#xx#fz!x. .xx!zf##fz!xx. .xxx!zffz!xxx. .#xxx!zz!xxx#. ..#xxx!!xxx#.. ...#xxxxxx#... ....#xxxx#.... .....#xx#..... ......##...... Bonus: .............. .............. .............. .............. .............. .............. .*....lb....b. .*..........b. .*..........b. .*..&.mm.&..b. .*..........b. .*....44....b. .............. ......mm...... .............. .............. .............. .............. Level: Ade Time To Drink Water Bricks: ff#xaxaaxax#ff f#xaxaxxaxax#f #xaxaxaaxaxax# xaxaxaxxaxaxax axaxa#aa#axaxa xaxa#affa#axax axaxafaafaxaxa xa#afaxxafa#ax axafaxaaxafaxa #afaxaxxaxafa# #xafaxaaxafax# #axafaxxafaxa# #x#x#faaf#x#x# xaxax#ff#xaxax axaxa#aa#axaxa xaxaxaxxaxaxax .............. .............. Bonus: .m..........m. .............. ......&l...... m...m.44.m...m .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. bbbbb.ww.bbbbb bwbwbwbbwbwbwb .............. .............. Level: Ade Dead Fish Bricks: !!!*!!!#xxxxxx !jjjjjj.#yyyyx *jccccc..#zzyx !jcbbbb...jzyx !jcbaaa...#zyx *jcba......#yx !jcba.......#x !jcba........# !jcba......... .........abcj! #........abcj! x#.......abcj* xy#....aaabcj! xyz#...bbbbcj! xyzj...cccccj* xyzz#..jjjjjj! xyyyy#.!!!*!!! xxxxxx#....... Bonus: ........m..... .........&.... .............. ..........m... ...........m.. ............m. .............& .............. ....*......... .............. .........b.... .........l.... .........4.... .........p.... ...m...*...... .............. .............. .............. Level: Ade Chance Master Bricks: .............. .............. .............. .............. xxxxxxxxxxxxxx #xxxxxxxxxxxx# #x*x*xffx*x*x# #fxfxffffxfxf# #fxfxfxxfxfxf# #fxfxfxxfxfxf# #fxfxffffxfxf# #x*x*xffx*x*x# #x#x#x##x#x#x# xxxxxxxxxxxxxx .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ..m.m....m.m.. .............. .............. .............. .............. .............. .............. ......44...... .p.p.p..p.p.p. .....w..w..... .............. .............. .............. .............. Level: Ade One More Beer Bricks: xjjjjj...##### xyzzzzz...#fff xyzyyyyy...#ff xyzjxxxxx...#f xyzjc........# .yzjcb.####### ..zjcba....... ...jcbaa...... ....cbaab..... .....baabc.... ......aabcj... .......abcjz.. #######.bcjzy. #........cjzyx f#...xxxxxjzyx ff#...yyyyyzyx fff#...zzzzzyx #####...jjjjjx Bonus: .............. ...........m.. .....*........ .*.....m.....m .............. ...*.......... .............. .....*........ .............. .............. .......*..*... .............. .............. .............. m............. .............. ..m.....*....* .............. Level: Ade Cast Away Bricks: ......ff...... .....ffff..... ....ffzzff.... ...ffzxxzff... ..ffzxaaxzff.. .ffzxaxxaxzff. ffzxaxzzxaxzff fzxaxzxxzxaxzf zxaxzxaaxzxaxz zxaxzxaaxzxaxz fzxaxzxxzxaazf ffzxaxzzxaxzff .ffzxaxxaxzff. ..ffzxaaxzff.. ...ffzxxzff... ....ffzzff.... .....ffff..... ......ff...... Bonus: .............. .............. .............. .............. .............. .............. .............. *............* ......mm...... ......mm...... *............* .............. .............. .............. .............. .............. .............. .............. Level: Ade Cast Away Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/NES0000664000175000017500000001325512140767201013647 00000000000000Version: 1.00 Level: Nester Mario Bricks: ............hh .....*****..hh ....*********h ....dddhhdh.dd ...dhdhhhdhhdd ...dhddhhhdhhh ...ddhhhhddddd .....hhhhhhhd. .ddddd*ddd*d.. ddddddd*ddd*.. hdddddd*****.d hh.**d**h**h*d h.d**********d .ddd*********d ddd*******.... d..****....... .............. .............. Bonus: ............22 ............22 .............. ......>..-.... .........?..-. ....+.&.....s. ..........w... ........}..... .............. .~..{......... 0............! *0......1..1.. 0............c .<...>........ .........~.... -............. .............. .............. Level: Nester Luigi Bricks: aaa..aaaaa.... hhhaafffffa... hhaffffffffa.. afaaahahhaaa.. afhhhhahaahha. afhhhahhaahha. .aaaaaahhhaa.. .afhhhhhhaa... ..afafffafffa. aaaafffafffaaa ffahaahaffahhh fffaaaaaafahhh affaaaaaaaaafa affaaaaaaaafff .aa...aaaaaaff ........aaa.aa .............. .............. Bonus: .............. 22.....l...... 22............ ......-..c.... -.....?....g.. .s............ .............. ..b....W...... ....j....+.... .............. <..1..1....0*0 ............0. .....+.>...~.. .f.......{.... .............. ............>. .............. .............. Level: Nester Link Bricks: ....ffffff.... ...ffffffff... .e.fddddddf.e. .e.dddddddd.e. .eedefeefedee. .eededeededee. ..eeeeeeeeeed. ..ffeeddeeffd. .ddddeeeeffddd ddedddfffffedd deeededdffeeed ddeddefddddeee ddeddeddffffe. ddeddefffff... ddddde..ddd... eeeeed........ ...ddd........ .............. Bonus: .............. .............. .~.+........l. ......--..-... .....+..+..... .j...?..?...b. ...&......&... ......ff...... ..........W... ..0..!.....2.. .0w0........*. ..0...s.<..2.2 ..0........... ~.0.~..+...... .........>.... .............. ....>......... .............. Level: Nester Dragon Warrior Bricks: j.j...gggg...j j.jjjggggggjjj j..jjgjjjjgjj. j...gggggggg.. j...gegeegeg.. j.ggeegeegeegg jggggeeeeeeggg ggjggggeeggjjj eejjggggggjggg eej.jgjjjjjgeg j...ggggggjgeg ....gjggggjggg ....jjggggjjjj ....eee.jjjj.. ....ggg.eeee.. ........gggg.. .............. .............. Bonus: *............. ..0..........0 ...f...wj...f. .............. ......-..-.... ....+.?..?.+.. .............. ............l. .+<........... ....}.>!>b..4. >...........4. .......s...>.> ....-.......c. .....~...<.... ........~..~.. .............. .............. .............. Level: Nester Megaman Bricks: .............. .............. ......aaa..... ....aaa!!a.... ...aggga!!a... ..agggggaaaa.. ..aggggga!!ga. .a!ggggggaaga. .a!gghjjjggja. .a!ghjjaahaja. ..aghjjaahaja. ..aghhjjjhjha. ...aghaaaahaa. ....ahhhhha... .....aaaaa.... .............. .............. .............. Bonus: .............. .............. .............. .......W...... .............. ....j..m..-... .............. .....+.....b.. ..c.......<... .....f.22l.f.. .....s.2?..... ..->......~.-. ........c..... .....p.p.p.... ......>.+..... .............. .............. .............. Level: Nester Bomberman2 Bricks: ...aaddddaa... ..adddddddda.. .addeeeeeedda. .adeeEeeEeeda. .adeeEeeEeeda. .adeeEeeEeeda. .addeeeeeedda. ..adddddddda.. addaeeeeeeadda addaeeeeeeadda eaaeeeeeeeeaae eeEEEE**EEEEee aaaeeeeeeeeaaa ..adddaaddda.. ..adddaaddda.. ..aaaaaaaaaa.. .aaeeeaaeeeaa. aaaaaaaaaaaaaa Bonus: .............. .....2..2..... ...?......?.~. ......22...... ..>.2.gj.2.+.. .~....22...... ..&........... .....?..?..... ...-.......&.- -.w.....&..... ....&0000..... W.....**.....W .....0000..... ...&..s....... .......+...<.. ....>....>.... ..<...-.....f. .f............ Level: Nester Red Elf Is About To Die Bricks: ..........aaa. aaaaaa.aaaada. daaddaaadaadaa aaddddada.aada addddaa@a..ada .addaa@@a..ada ..ada@@@a.aad@ ..aaa@@aaa@@@@ .adddaaaa@@ada adaadddadaaada aa@addaaa.aada a@@@aa@da.adaa .a@@@@@a..ada. ..aaaaaa..aaa. .addadda...... .addaada...... .............. .............. Bonus: .............. .0.0.0.....b.. 4...c...l..p.. .............. ..c........... .....?......-. ...1........b. .........&.... ............b. .w..-.~.j...-. +............. .......{...p.. ...........b.. .............. ....s.>....... ..>........... .............. .............. Level: Nester Lolo Bricks: ...aagggaa.... .agjjjgjggga.. agjjgggggggga. aggggggggggga. ggjjjgggjjjgga gjjjjjgjjjjjga gjjjvvgvvjjjga ajjjvvgvvjjjaa ajjjjjgjjjjjaj aajjjgggjjjgaj jagggggggggaja jjaagggggaajja aaaaaaaaaaaaa. .ajjja.ajjja.. .aaaaa.aaaaa.. .............. .............. .............. Bonus: .............. .....p.l...... ...b.......-.. .............. .-.0.c.-.0.... ..0.......0.c. .0..22.22..0.. w.0.2?{?2.0... .0.0.....0...& ..0.0+.+0.0... ..-.......-... b...~.s.W...b. .............. .....>f<... .............. .............. .............. .............. Level: Nester Super Offroad Bricks: ...jeea....... ....aeaaeeee.j eejjeaeaeeeeej aajjeaaeeeeeej eeeeeeeeeaaeej eaaeeeeaaaaavj aaaaaaavaajavv ajaavvvvvaavvv vaavvvvvjavvvv vvvvvviiijjvvv vvvvvaiiijjaaa vviiiaiaajijii jiiiiiaaiiiiaa jiiiiiiiiiiaaa jiiiaaiiiiaaaj jiiaaaaaaa..aa ..iaaja....... ....aa........ Bonus: ...l.......... ..........{... .+....m..s.... ..f&+c..+..+.w j..c..s......b ..+.}....+..?. ..W&......2... .2...?.>>.<-?> .<.>?>-?..>.>? >>-?.?.....?.> ?.?>>....&f... >?....g.....+. ...+....c.{... b.&.s......+W. w..}.c.{.&...2 ..+.+........< .....2........ .....<........ Level: Nester Tetris Bricks: ############## #..........c.. #..........cjj #..........cjj #........jjcjj #j.......jjc.. #j.......ggccc #j.......ggccc #j.....g.ggcg. #......ggggcgg #......jgjjc.g #.j.g.gjjjjccc #.jggggjaggccc #.jgjgaaaagcjj #.jjjaajjagc.j #.gjjagjaaac.j #.gjjggjggac.j #.ggjgjjjggccc Bonus: .............. .............. ............bb ...........!bb ............bb .w.......g.?.. .2........j... .2..........+. .2.......c.+.. .......}....ml .........-.... ..W.......-!.? ...<.{..~..... ....W..&..&.-. ...f.+...{.W.. ..?.?.~.-.s..c .....!.f.>.-.. ..+~.-.?.....p lbreakout2-2.6.5/client/levels/TrickShot0000664000175000017500000002313112140767201015126 00000000000000Version: 1.00 Level: G Four Corners Bricks: !.!f......f!.! ...f......f... !.@f......f@.! ffff...hhhffff ...hhhhh...h.. ...h...h.!.h.. ...h.!.....h.. ...h....!.hh.. ...hh.!...h... ...h...!.hh... ..hh.!....h... ..h.....!.h... ..h.!.h...h... ..h...hhhhh... ffffhhh...ffff !.@f......f@.! ...f......f... !.!f......f!.! Bonus: .5..........5. 555........555 .5..........5. .............. ........555... ....555.5.5... ....5.55555... ....5555.5.... .....5.555.... ....555.5..... ....5.5555.... ...55555.5.... ...5.5.555.... ...555........ .............. .5..........5. 555........555 .5..........5. Level: G Easier Than It Looks Bricks: .............. .iii.......... .@@@......kkk. ..........@@@. ....hhh....... ....@@@....... .......ggg.... .......@@@.... .............. .fff.......... .@@@.......... .......jjj.... .......@@@.... ....eee....... ....@@@...ddd. ..........@@@. .............. .............. Bonus: .............. .555.......... ..........555. .............. ....444....... .............. .......333.... .............. .............. .222.......... .............. .......111.... .............. ....000....... .............. .............. .............. .............. Level: G A Bit Tricky Bricks: .....#..#..... .!.!.#!!#.!.!. ..@..#..#..@.. .!...#!!#...!. ....z....z.... ####.#..#.#### d#d#......#d#d d#d#......#d#d d#d#......#d#d .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: 55555.11.55555 5.5.5....5.5.5 55.55.11.55.55 5.5........5.5 555.5.bb.5.555 .............. w.w........w.w .............. >.>........>.> .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Skill Shots Bricks: !...#!..!#...! ..#........#.. .##..####..##. .#!..#..#..!#. .#!..#!!#..!#. .##..#..#..##. ....!#..#!.... #...#!..!#...# !...!#..#!...! ......!!...... .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .5....55....5. 55..555555..55 ...5......5... ...5......5... ...5......5... ...55....55... ...5......5... .5.5......5.5. .5.5..55..5.5. 55.555..555.55 .....5555..... .............. .............. .............. .............. .............. .............. .............. Level: G The "Matrix" Bricks: .............. #.#.#.#.#.#.#. h.h.h.h.h.h.h. .............. .............. .#.#.#.#.#.#.# .h.h.h.h.h.h.h .............. d.d.d.d.d.d.d. #.#.#.#.#.#.#. d.d.d.d.d.d.d. .............. .h.h.h.h.h.h.h .#.#.#.#.#.#.# .............. .............. h.h.h.h.h.h.h. #.#.#.#.#.#.#. Bonus: .............. .............. l.5.5.5.5.5.l. .............. .............. .............. .5.5.5.5.5.5.5 .............. 5.5.5.5.5.5.5. .............. 5.5.5.5.5.5.5. .............. .5.5.5.5.5.5.5 .............. .............. .............. 5.5.5.5.5.5.5. .............. Level: G Up N Down Bricks: .............. .............. ..@..@..@..@.. .............. .............. .#h#d#j#f#g#i# .#h#d#j#f#g#i# .#h#d#j#f#g#i# .############# .############# .#i#g#f#j#d#h# .#i#g#f#j#d#h# .#i#g#f#j#d#h# .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ..5.5.5.5.5.5. ..5.5.5.5.5.5. ..5.5.5.5.5.5. .............. .............. ..5.5.5.5.5.5. ..5.5.5.5.5.5. ..5.5.5.5.5.5. .............. .............. .............. .............. .............. Level: G Puzzle I Bricks: !#..#!!!!#..#! ##..#!!!!#..## h.h.#!!!!#.h.h .h..#!!!!#..h. h.h.######.h.h ....#!!!!#.... ....#!!!!#.... ....#!!!!#.... ....#!!!!#.... ....######.... .###......###. .#!#......#!#. .###......###. .............. .............. .............. .............. .............. Bonus: m5..555555..5m 55..555555..55 f.f.555555.f.f .m..555555..m. f.f.555555.f.f .....5555..... .....5555..... .....5555..... .....5555..... .............. .............. ..l........l.. .............. .............. .............. .............. .............. .............. Level: G Puzzle II Bricks: !............! .@..........@. .....####..... ....#!zz!#.... ....#z@@z#.... ###.#z@@z#.### #c#.#z@@z#.#c# #c#.#!zz!#.#c# ###..####..### #c#.#!zz!#.#c# #c#.#z@@z#.#c# ###.#z@@z#.### ....#z@@z#.... ....#!zz!#.... .....####..... .............. .............. .............. Bonus: m............m .............. .............. .............. ......55...... 555...55...555 5m5...55...5.5 5.5........5.5 5.5........5.5 5.5........5.5 5.5...55...5m5 555...55...555 ......55...... .............. .............. .............. .............. .............. Level: G Tough Entry Bricks: @............@ ..#.!.!!.!.#.. .##........##. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .############. Bonus: ...55555555... ...5.5..5.5... ...55555555... ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. .............. Level: G Target Scope Open Bricks: .............. ......@@...... .............. ..####..####.. ..#........#.. ..#.*####*.#.. ..#.#*zz*#.#.. ..#.#z**z#.#.. ..#.#*zz*#.#.. ..#.#*zz*#.#.. ..#.#z**z#.#.. ..#.#*zz*#.#.. ..#.*####*.#.. ..#........#.. ..####..####.. .............. ......@@...... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G CrazyBounce Bricks: .............. .@.@...@.@.... ..!.....!..... .@.@...@.@.... .............. ....@.@...@.@. .....!.....!.. ....@.@...@.@. .............. .@.@...@.@.... ..!.....!..... .@.@...@.@.... .............. ....@.@...@.@. .....!.....!.. ....@.@...@.@. .............. .............. Bonus: .............. ..5.....5..... .5.5...5.5.... ..5.....5..... .............. .....5.....5.. ....5.5...5.5. .....5.....5.. .............. ..5.....5..... .5.5...5.5.... ..5.....5..... .............. .....5.....5.. ....5.5...5.5. .....5.....5.. .............. .............. Level: G Symmetry Bricks: ......EE...... .............. ....cEccEc.... ....EEhhEE.... .....EhhE..... ...E.EiiE.E... .....EiiE..... ..EEcEccEcEE.. ..EggEiiEggE.. ..EggEiiEggE.. ..EggEhhEggE.. ..EccEhhEccE.. ..EEEEccEEEE.. .............. ......EE...... .............. .............. .............. Bonus: .............. .............. .............. ......55...... ......55...... ......55...... ......55...... ....j.jj.j.... ...55.55.55... ...55.55.55... ...55.55.55... ......55..l... .............. .............. .............. .............. .............. .............. Level: G Symmetry II Bricks: EEE#..jj..#EEE Ehj#......#jhE Ehj#.!..!.#jhE EhjE......EjhE EhjEjE..EjEjhE EhjEjE..EjEjhE EhjEjE..EjEjhE Eh.###..###.hE Eh..........hE Eh.###..###.hE EhjEjE..EjEjhE EhjEjE..EjEjhE EhjEjE..EjEjhE EhjE......EjhE EhjE.!..!.EjhE Ehj#......#jhE Ehj#..jj..#jhE EEEE......EEEE Bonus: .............. .55.555555.55. .55.5.55.5.55. .55.555555.55. .55........55. .55........55. .55........55. .5..........5. .m..........5. .5..........5. .55........55. .55........55. .55........55. .55.555555.55. .55.5.55.5.55. .55.555555.55. .55...55...55. .............. Level: G Symmetry III Bricks: @@@@@...!@@@@@ @...@.!..@...@ @.!.@..!.@.!.@ @...@!...@...@ @@.@@@..@@@.@@ k@.@k....k@.@k .............. k@..........@k @@..........@@ .............. .@..........@. d@..........@d @@..........@@ .............. .............. .............. .............. .............. Bonus: .....555...... .555.5.55.555. .5.5.55.5.5.5. .555..555.555. ......5....... 5...+....+...5 .............. 5............5 .............. .............. .............. m............l .............. .............. .............. .............. .............. .............. Level: G Symmetry Finale Bricks: e............e @@@@.@hh@.@@@@ e..@.@@@@.@..e @............@ @@@@.@@@@.@@@@ e..@.@ee@.@..e @............@ @@@@......@@@@ e..@......@..e @............@ @@@@.!..!.@@@@ e..@......@..e @............@ @@@@......@@@@ e..@.!..!.@..e @............@ @@@@......@@@@ #####.##.##### Bonus: l............l ......mm...... 5............5 .............. .............. 5.....55.....5 .............. .............. 5............5 ....555555.... ....5.55.5.... 5...555555...5 .............. ....555555.... 5...5.55.5...5 ....555555.... .............. .............. Level: G Puzzle Finale Bricks: ###.###.###.## #!#.#!#.#!#.#! ###.###.###.## ...j...j...j.. ###.###.###.## #!#.#!#.#!#.#! ###.###.###.## ...j...j...j.. ###.###.###.## #!#.#!#.#!#.#! ###.###.###.## ...j...j...j.. ###.###.###.## #!#.#!#.#!#.#! ###.###.###.## .............. .............. .............. Bonus: .............. m............. .............. .......m...... .............m .............. .............. .............. .............. .............. .............. .......m...... .............. .............. .............. .............. .............. .............. Level: G The End Bricks: ############## #ccc##c#c#ccc# ##c###c#c#c### c#c#c#ccc#ccc# .#c#.#c#c#ccc# .#c#.#c#c#c### .#c#.#c#c#ccc# .###.######### .............. ############.. ccc#c###cc##.. c###cc##c#c#.. ccc#c#c#c#c#.. ccc#c#c#c#c#.. c###c#c#c#c#.. ccc#c#c#cc##.. ###########... .............. Bonus: .............. .555..5.5.555. ..5...5.5.5... m.5.m.555.555. ..5...5.5.555. ..5...5.5.5... ..5...5.5.555. .............. .............. .............. 555.5...55.... 5...55..5.5... 555.5.5.5.5... 555.5.5.5.5... 5...5.5.5.5... 555.5.5.55.... .............. .............. lbreakout2-2.6.5/client/levels/Abc0000664000175000017500000004511012140767201013702 00000000000000Version: 1.00 Level: Ademir ABC For Fun Bricks: aaaaaaaaaaaaa. a...aaaaaaaaa. a.a.aaaaaaaaa. a.a.a..aaaaaa. a...a.a.aaaaa. a.a.a.a.a...a. a.a.a..aa.aaa. a.a.a.a.a.aaa. aaaaa.a.a.aaa. aaaaa..aa.aaa. caaaaaaaa.aaa. .caaaaaaa...a. ..caacaaaaaaa. ...ca.caaaaaa. ....c..cacaaa. ........c.caa. ...........ca. ............c. Bonus: .............. ......2..0.... ...........1.. .............. j............. .............. ....j......... ........+..... +..........5.. ..0........... ....2.w.j..... ...b...1...... ..........}... ........m..... ...........s.. .............. .............. .............. Level: Ademir For Fun Bricks: jjjjjjjjjjjjjj jaaajaaajaaajj jajjjajajajajj jajjjajajajajj jaajjajajaaajj jajjjajajaajjj jajjjajajajajj jajjjaaajajajj jjjjjjjjjjjjjj jajajajaajjaaa jajajajajajajj jajajajajajajj jaajjajajajaaa jajajajajajjja jajajajajajjja jajajajaajjaaa jjjjjjjjjjjjjj .............. Bonus: .............. .............. .j..5..51..... .............. ...?..j....... ....+......... ........l...g. ..+...1....... ..........b... .j....g.....j. ..1.5......... .......?...... ..........s... ..}.b..b...j.. .............. ....m.?....... .w.......w.... .............. Level: Ademir Ade Bricks: hjhhhhhhhhhhjh jh..........hj hj.ffffffff.jh jh.ffffffff.hj hj.ffffffff.jh jh.ff....ff.hj hj.ff....ff.jh jh.ff....ff.hj hj.ff....ff.jh jh.ffffffff.hj hj.ffffffff.jh jh.ffffffff.hj hj.ff....ff.jh jh.ff....ff.hj hj.ff....ff.jh jh.ff....ff.hj hj..........jh jhhhhhhhhhhhhj Bonus: .............. .............. ......0....... ...5...?.l.... .............. .5............ ....0......... .........0.... ...j.......... .?..&...4.j... .....+........ ......gw.&.... ...5}....s.... .j............ ...bj....b.... .............. .............. .............. Level: Ademir Brasil Bricks: .............. .!.jjjjjjjj.!. ...jggggjjj... ..jjgggggjjj.. .jjjggjjggjjj. ..jjggjjjgjjjj ...jggjjjgjjj. .!.jggjjggjj.. ...jggjggjj... ...jggggjjj..! !..jggjggjjj.. ...jggjjggjjj. .!.jggjjjgjjjj ...jggjjjgjjj. ..jjggjjggjj.. .jjjgggggjj... ..jjggggjjj..! ...jjjjjjjj... Bonus: .............. .............. .....1..j..... .............. ..2...+....... ....j.....<... .....1.*...1.. ......?....... .............. ....b......... ........&.>... .......?...... .....}........ .......?...... .....j1...*... ...2.......... ....*..w.b.... .............. Level: Ademir C... Bricks: hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhh......hhhh hhhh......hhhh hhhh......hhhh hhhh..hhhhhhhh hhhh..hhhhhhhh hhhh..hhhhhhhh hhhh..hhhhhhhh hhhh..hhhhhhhh hhhh..hhhhhhhh hhhh..hhhhhhhh hhhh..hhhhhhhh hhhh......hhhh hhhh......hhhh hhhh......hhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh Bonus: .............. .3...?......?. .............. ...........5.. .b?........... ...........j.. .........3..3. .j-........... ......5.b.l... .............. .5.3..>....... ........<..g3. ..g........... }..........b.j ...b.......... .............. .m.....+..w.m. ..w........... Level: Ademir D... Bricks: .aaaaaaaaaaaa. .aaaaaaaaaaaa. .aaiiiiiaaaaa. .aaiiiiiiaaaa. .aaiiiiiiiaaa. .aaiiaaaiiiaa. .aaiiaaaaiiaa. .aaiiaaaaiiaa. .aaiiaaaaiiaa. .aaiiaaaaiiaa. .aaiiaaaaiiaa. .aaiiaaaaiiaa. .aaiiaaaiiiaa. .aaiiiiiiiaaa. .aaiiiiiiaaaa. .aaiiiiiaaaaa. .aaaaaaaaaaaa. .aaaaaaaaaaaa. Bonus: .............. ..0........... ....5..5..5... ...<.......... ..>....b...... ..........j... .0...b..g..... .0......g..... ..0.s......... ......?..<.*.. .*.......<.... .....>.....b.. .....>.gj..... ..0?....js.... ...?..&...5.b. ..}...m&...... ...w&b..b.b... .............. Level: Ademir E... Bricks: jjbbbbbbbbbbjj jbbbbbbbbbbbbj jjbbjjjjjjbbjj jbbbjjjjjjbbbj jjbbjjjjjjbbjj bbbbjjbbbbbbbb jjbbjjbbbbbbjj jbbbjjbbbbbbbj jjbbjjjjbbbbjj jbbbjjjjbbbbbj jjbbjjjjbbbbjj bbbbjjbbbbbbbb jjbbjjbbbbbbjj jbbbjjbbbbbbbj jjbbjjjjjjbbjj jbbbjjjjjjbbbj jjbbjjjjjjbbjj bbbbbbbbbbbbbb Bonus: .............. .............. .............. .....>.5.....0 j...3......... .............. ....5......... .............l 3...j......... .....+*<...... .............. ....}......... .............. ....g......... .*...*..-....0 j......+...... ....b.&w&..... .............. Level: Ademir F... Bricks: b!b!b!b!b!b!b! b!b!b!b!b!b!b! !b!#eeeeee#b!b !b!#eeeeee#b!b b!b#eeeeee#!b! b!b#ee#####!b! !b!#ee#b!b!b!b !b!#ee#b!b!b!b b!b#ee###!b!b! b!b#eeee#!b!b! !b!#eeee#b!b!b !b!#eeee#b!b!b b!b#ee###!b!b! b!b#ee#!b!b!b! !b!#ee#b!b!b!b !b!#ee#b!b!b!b b!b####!b!b!b! b!b!b!b!b!b!b! Bonus: .............. .............. .*..m.w.m..... .w.....}...... b.&..+......b. ....2.......&. .....j........ .*..?......*.. .............. .....b........ .?..2.?....?.. ....2......... b....j....b... ..&.........&. ....b......... .*.......&.*.. w.........w... .............. Level: Ademir Guilherme Bricks: .............. .jjjjjjjjjjjj. .jjddddddddjj. .jjddddddddjj. .jjddddddddjj. .jjddjjjjjjjj. .jjddjjjjjjjj. .jjddjjjjjjjj. .jjddjjjjjjjj. .jjddjjddddjj. .jjddjjddddjj. .jjddjjddddjj. .jjddjjjjddjj. .jjddjjjjddjj. .jjddddddddjj. .jjddddddddjj. .jjddddddddjj. .jjjjjjjjjjjj. Bonus: .............. .............. ......?...?... .............. ........3j.... ...?.j.....<.. .....3...1.... .......+...... ..5.......f~.. ....s...&..... ......1...l... .......-.>.<.. ..jf..g....... ....+..}.s.... .....?..j..... ..5.&.m....... ..b........w.. ....w...b..... Level: Ademir Lets Play Bricks: jjjjjjjjjjjjjj j#jjjjjjjjjjjj j#j##jjjjjjjjj j#j#j###jjjjjj j#j##j#j##jjjj j###jj#j#jjjjj jjj##j#j##jjjj jjjjjj#jj#jjjj j###jjjj##jjjj j#j##jjjjjjjjj j####j###jjjjj j#jj#j#j##j#jj j#jj#j######jj jjjj###j#j#jjj jjjjjj#j#j#jjj jjjjjjjjjj#jjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ...w.......... .............. ..mbbbbbbm.... .w........w... Level: Ademir H... Bricks: xbbbbbbbbbbbbx bxbbbbbbbbbbxb xbbxxbbbbxxbbx bxbxxbbbbxxbxb xbbxxbbbbxxbbx bxbxxbbbbxxbxb xbbxxbbbbxxbbx bxbxxxxxxxxbxb xbbxxxxxxxxbbx bxbxxxxxxxxbxb xbbxxxxxxxxbbx bxbxxbbbbxxbxb xbbxxbbbbxxbbx bxbxxbbbbxxbxb xbbxxbbbbxxbbx bxbxxbbbbxxbxb xbbbbbbbbbbbbx bbbbbbbbbbbbbb Bonus: .............. .5.....*...... ...?.w........ ....b.....j... .............. .1.+..&...c... .............1 ....b..>.b.... ...c.?*....&.. ........+j.... ....5......... .1.p......}... .............1 ...*w.&...*... .............. ..&........... ..w........w.. .............. Level: Ademir I... Bricks: .....jjjj..... ....jj!!jj.... ...jjjjjjjj... ..jjjjaajjjj.. .jjjjjaajjjjj. jjjjjjaajjjjjj jjjjjjaajjjjjj jjjjjjaajjjjjj jjjjjjaajjjjjj jjjjjjaajjjjjj jjjjjjaajjjjjj jjjjjjaajjjjjj jjjjjjaajjjjjj .jjjjjaajjjjj. ..jjjjaajjjj.. ...jjjaajjj... ....jjaajj.... .....jjjj..... Bonus: .............. .............. .............. ....?......... .....j..1111.. .............. ...3.......... .....3333...l. >.......&..... ...&...j..j&.. ..}.?.......s. .............. ...?bbbbbb.... .............. ...g.....m.... .....w.w...... .....dddd..... .............. Level: Ademir J... Bricks: .jjjjjjjjjgjg. .jjjjjjjjjjgj. .jjjjjggjjgjg. .jjjjjggjjjgj. .jjjjjggjjgjg. .jjjjjggjjjgj. .jjjjjggjjgjg. .jjjjjggjjjgj. .jjjjjggjjgjg. .jjjjjggjjjgj. .jjjjjggjjgjg. .jjjjjggjjjgj. .jjjjjggjjgjg. .jjjjjggjjjgj. .jjjjgggjjgjg. .jjggggjjjjgj. .jjgggjjjjgjg. .jjjjjjjjjjgj. Bonus: .............. .........?.... .......b...... ...b4...*..5.. .....j........ .......d?.d... ....{......... .....b...~.... ...b...b..c5.. .............. ....}..gj..?.. ..w.b...j..... ..........b... ....b.4.b..... .........*.... ...*...d...... .....w..?w.... .............. Level: Ademir K... Bricks: .............. .!!!!!!!!!!!!. .!!aa!!!!!a!!. .!!aa!!!!aa!!. .!!aa!!!aaa!!. .!!aa!!aaa!!!. .!!aaaaaa!!!!. .!!aaaaa!!!!!. .!!aaaaa!!!!!. .!!aaaaa!!!!!. .!!aaaaa!!!!!. .!!aaaaaa!!!!. .!!aa!!aaa!!!. .!!aa!!!aaa!!. .!!aa!!!!aa!!. .!!aa!!!!!a!!. .!!!!!!!!!!!!. .!!!!!!!!!!!!. Bonus: .............. .............. ..}........... .......1.3.... ..?........... ....b3.....s.. ..j...m..&.... ....?......... ....?.j.>..l.. ....13....?... ..}..g...b.... ...j...&.b.s.. .............. ..m.b.>.j..... .............. .............. ..w..1.m.ww.m. .............. Level: Ademir L Breakout Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj ajjjaajjjjjjja ajjjaajjjjjjja ajjjaajjjjjjja aajjaajjjjjjaa jjjjaajjjjjjjj ajjjaajjjjjjja ajjjaajjjjjjja ajjjaajjjjjjja aajjaajjjjjjaa jjjjaajjjjjjjj ajjjaajjjjjjja ajjjaaaaaajjja ajjjaaaaaajjja aajjaaaaaajjaa jjjjjjjjjjjjjj .............. Bonus: .......>...... .0.*.....0.... .0...dj.?..... .d.........++. ....b.....&... .0j...<.b..... ..........+... ..>.&b.j.>.... .d...b..*?..0. .dw.d...d..... ...<.g.}..b... .............. g..}b...j..... ..&....?...&d. ........j.*... ..*...w....d.. .............. .............. Level: Ademir M... Bricks: .............. aaaaaa..aaaaaa a!!!aaaaaa!!!a a!!!!aaaa!!!!a a!!!!aaaa!!!!a a!!!!!aa!!!!!a a!!a!!aa!!a!!a a!!aa!!!!aa!!a a!!aa!!!!aa!!a a!!aaa!!aaa!!a a!!aaaaaaaa!!a a!!aaaaaaaa!!a a!!aaaaaaaa!!a a!!aaaaaaaa!!a a!!aaa..aaa!!a a!!aa....aa!!a aaaa......aaaa .............. Bonus: .............. d............. ...s........&. ..l...555..... ..........j?.. .dj.}.s......1 1............1 1.........}.j1 1..bbbbbb....1 1.?.d......l.. ...j.g.g.j..s. .d..........&& ...b.md}d.b... .j..........m. ...?}w..w.d... .............. .&............ .............. Level: Ademir New York Bricks: yyyyyyyyyyyyyy y............y y.ddd.....dd.y y.ddd.....dd.y y.dddd....dd.y y.dddd....dd.y y.dd.dd...dd.y y.dd.dd...dd.y y.dd..dd..dd.y y.dd..dd..dd.y y.dd...dd.dd.y y.dd...dd.dd.y y.dd....dddd.y y.dd....dddd.y y.dd.....ddd.y y.dd.....ddd.y y............y yyyyyyyyyyyyyy Bonus: .............. .............. .............. ..2*......l4.. .............. ...4.}....j... ..2........2.. ..........*... ..&*..b....... ..........bb.. .............. ..b&.......... d.......g..b.. ..*}......j..d .............. .........b.s.. .............. .sw*.b.sb.w... Level: Ademir O... Bricks: .............. ..aaaaaaaaaa.. ..aaaaaaaaaa.. ..aa******aa.. ..aa*....*aa.. ..aa*....*aa.. ..aa*....*aa.. ..aa*....*aa.. ..aa*....*aa.. ..aa*....*aa.. ..aa*....*aa.. ..aa*....*aa.. ..aa*....*aa.. ..aa*....*aa.. ..aa******aa.. ..aaaaaaaaaa.. ..aaaaaaaaaa.. .............. Bonus: .............. ..5...55...5.. .............. .............. .............. ..jd......dj.. .............. ..........0... ...0.......... ..?........?.. .............. ...&......&... ..0........... .............. ..g.......pg.. ....d.}}.d.... .............. .............. Level: Ademir P... Bricks: .............. .............. .##gggggggg##. .##gggggggg##. .##gggggggg##. .##gg####gg##. .##gg####gg##. .##gggggggg##. .##gggggggg##. .##gggggggg##. .##gg########. .##gg########. .##gg########. .##gg########. .##gg########. .##gg########. .############. .............. Bonus: .............. .............. ..........w... .......m...... ....b....b.... .............. ...5.....5.... .............. ....?.j.5?.... .............. .............. ....1......... .............. ...11......... .............. .............. .............. .............. Level: Ademir Q... Bricks: .jjjjjjjjjjjj. .jjjjjjjjjjjj. .jjaaaaaaaajj. .jjaaaaaaaajj. .jjaaaaaaaajj. .jjaajjjjaajj. .jjaajjjjaajj. .jjaajjjjaajj. .jjaajjjjaajj. .jjaajjjjaajj. .jjaajjjjaajj. .jjaajjjjaajj. .jjaaaaaaaajj. .jjaaaaaaaajj. .jjaaaaaaaajj. .jjjjjaajjjjj. .jjjjaajjjjjj. .jjjjjjjjjjjj. Bonus: .............. .........j.... ..b.......j... ..b........... ..b.<..+...... ..b..j.....>.. ..b........... ..m...3.g..... ..........5... .......+...... ....3....>&... .w...w.4...... ...&.......... ......j...-s.. .m.w.dj..d.... ........?..... ...?.......<.. .............. Level: Ademir R... Bricks: .............. .............. ...bbbbbbbb... ...bbbbbbbb... ...bbbbbbbb... ...bb.....b... ...bb.....b... ...bbbbbbbb... ...bbbbbbbb... ...bbbbbbbb... ...bbbb....... ...bbbbb...... ...bb.bbb..... ...bb..bbb.... ...bb...bbb... ...bb....bb... .............. .............. Bonus: .............. .............. .............. ....b......... .......5..b... ...5.......... ..........&... ....3.0....... ....?...j.*... ...&..j....... ....0?........ ...b.......... .......5...... ....}....s.... ...*.......... .............. .............. .............. Level: Ademir S... Bricks: .............. ..yyyyyyyyyy.. ..yiiiiiiiiy.. ..yiiiiiiiiy.. ..yiiiiiiiiy.. ..yiiyyyyyyy.. ..yiiyyyyyyy.. ..yiiyyyyyyy.. ..yiiiiiiiiy.. ..yiiiiiiiiy.. ..yiiiiiiiiy.. ..yyyyyyyiiy.. ..yyyyyyyiiy.. ..yyyyyyyiiy.. ..yiiiiiiiiy.. ..yiiiiiiiiy.. ..yiiiiiiiiy.. ..yyyyyyyyyy.. Bonus: .............. .............. .............. .....+.&...... ....b....j.... ....1......... ...d*&........ .........+.... ...&1..b...... ....1.s.d..... .........?l... .............. ..........<... ...&.+........ ...*1....j.... ......?....... ....b..w.p.... .............. Level: Ademir Tiago Bricks: aaaaaaaaaaaaaa a............a a.!!!!!!!!!!.a a.!!!!!!!!!!.a a.!!!!!!!!!!.a a.....!!.....a aaaaa.!!.aaaaa aaaaa.!!.aaaaa aaaaa.!!.aaaaa aaaaa.!!.aaaaa aaaaa.!!.aaaaa aaaaa.!!.aaaaa aaaaa.!!.aaaaa aaaaa.!!.aaaaa aaaaa.!!.aaaaa aaaaa.!!.aaaaa aaaaa....aaaaa aaaaaaaaaaaaaa Bonus: .............. .............. .............. ............+. d............. ..}.....+..... ........d..... .s........2.2. .............. ..j2dd..d.j.s. g.........+... g..2.}........ .....}...w.&&. ..&&.......... .b..b...}.b.b. ..m........m.. ....}......... ......w....... Level: Ademir U... Bricks: jcjcjcjcjcjcjc cjcjcjcjcjcjcj jcj##cjcj##cjc cjc##jcjc##jcj jcj##cjcj##cjc cjc##jcjc##jcj jcj##cjcj##cjc cjc##jcjc##jcj jcj##cjcj##cjc cjc##jcjc##jcj jcj##cjcj##cjc cjc##jcjc##jcj jcj##cjcj##cjc cjc########jcj jcj########cjc cjc########jcj jcjcjcjcjcjcjc cjcjcjcjcjcjcj Bonus: .............. ..+..5.d...l5. .............. .j....2.2...+. .............. ?.2...b.j..... .....d..j...b. .b............ ..2...&5...... ............}5 .}....d<...... ........j..&.. ..?...5....... .&...........b }............. .b............ ..m.........m. .....w...w.... Level: Ademir V... Bricks: dddddddddddddd dddddddddddddd ddhhddddddhhdd ddhhddddddhhdd ddhhddddddhhdd ddhhddddddhhdd ddhhddddddhhdd ddhhddddddhhdd ddhhddddddhhdd ddhhddddddhhdd ddhhddddddhhdd ddhhddddddhhdd ddhhhddddhhhdd dddhhhddhhhddd ddddhhhhhhdddd dddddhhhhddddd ddddddhhdddddd dddddddddddddd Bonus: .............. ....?......... ..?...g.j..2.. ...2.......... .2s......db.s. ....2b.?...... .?......?....2 ...2*......*.2 .d....?2.j.... s.j...?.p..... ..........4.s. .+.bbbbbbb.... ...........&.. ..&.......d... .b...?..+...2. .......g...... ..*...p....*.. ....w....w.... Level: Ademir W... Bricks: .............. .............. .............. .bb........bb. .bb........bb. .bb........bb. .bb........bb. .bb........bb. .bb........bb. .bb........bb. .bb...bb...bb. .bb..bbbb..bb. .bb.bbbbbb.bb. .bbbbb..bbbbb. ..bbb....bbb.. ...b......b... .............. .............. Bonus: .............. .............. .............. .............. ..p........p.. .3..........3. .............. ..j........1.. .............. .1?.........+. ......s....j.. .3............ ..&...*g.?..s. ....&...b..... ..w......&.w.. .............. .............. .............. Level: Ademir X... Bricks: a............a ba..........ab aba........aba .aba......aba. ..aba....aba.. ...abaaaaba... ....abbbba.... .....aaaa..... .....abba..... ....abaaba.... ...aba..aba... ..aba....aba.. .aba......aba. aba........aba ba..........ab a............a .............. .............. Bonus: .............. .3..........b1 .............. ..?........?.. ...dj.....<... .......1.s.... .....*5.d..... .......s...... .....b<....... .....b.w+..... ....*....j.... .........?.... ...3.......5.. .b............ .............. .............. .............. .............. Level: Ademir Y... Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jj##jjjjjj##jj jj##jjjjjj##jj jj###jjjj###jj jj####jj####jj jjj########jjj jjjj######jjjj jjjjj####jjjjj jjjjjj##jjjjjj jjjjjj##jjjjjj jjjjjj##jjjjjj jjjjjj##jjjjjj jjjjjj##jjjjjj jjjjjj##jjjjjj jjjjjj##jjjjjj jjjjjjjjjjjjjj Bonus: .............. .............. .....5555..... 1............1 1............1 .............. d............d d.s........s.d .............. ....+....+.... .............. .jj..g..g..jj. ...&......&... .....<..<..... .bbb.}..}.bbb. .............. ..m........m.. ....w....w.... Level: Ademir Z... Bricks: .............. ..bbbbbbbbbb.. ..byyyyyyyyb.. ..byyyyyyyyb.. ..byyyyyyyyb.. ..bbbbbbyyyb.. ..bbbbbbyyyb.. ..bbbbbyyyyb.. ..bbbbyyyybb.. ..bbbyyyybbb.. ..bbyyyybbbb.. ..byyyybbbbb.. ..byyybbbbbb.. ..byyybbbbbb.. ..byyyyyyyyb.. ..byyyyyyyyb.. ..byyyyyyyyb.. ..bbbbbbbbbb.. Bonus: .............. .............. ...*.0..0..... ....05.5...... .........g.... .............. ........?1b... .............. ......0..w.... .......*...... .....1........ ...b.......... ....?......... ....?......... ...*.&........ ....b.w.+b.... ...w...b*.w... .............. Level: Ademir ABC For Fun Bricks: .............. jjj.j.j.jjj... .j..j.j.j..... .j..jjj.jj.... .j..j.j.j..... .j..j.j.jjj... .............. jjj.j...j.jj.. j...jj..j.j.j. jj..j.j.j.j.j. j...j..jj.j.j. jjj.j...j.jj.. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. ..........b... .............. .............. .............. .b......b..... .............. .............. .............. .............. .............. .............. Level: Ademir ABC For Fun Bricks: cccccc..!..aaa ###cccc..!..aa c#cccccc..!..a c###ccccc..!.. c##ccccccc..!. c##c#c#cccc..! cc#c#c#ccccc.. cc########ccc. .ccc#c##c#cccc ..cc#c#####c#c !..cccc#c##c#c .!..ccc#c##c#c ..!..ccccc#c#c a..!..cccc###c aa..!..ccccccc aaa..!..cccccc aaaa..!..ccccc .............. Bonus: .............. .............. ....b......... .......m...... .............. .............. j............. ..........b... .............. ..b........... .....m........ .............. ......j.+..... .............. .............. .m.....ww..m.. .............. .............. Level: Ademir ABC For Fun Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Ademir ABC For Fun Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Hans0000664000175000017500000002641512140767201014115 00000000000000Version: 1.00 Level: Hans easy Bricks: *!*!*!*!*!*!*! cbbbbbbbbbbbbc !*!*!*!*!*!*!* cbaaaaaaaaaabc *!*!*!*!*!*!*! cbaaaaaaaaaabc !*!*!*!*!*!*!* cbaaaaaaaaaabc *!*!*!*!*!*!*! cbaaaaaaaaaabc !*!*!*!*!*!*!* cbaaaaaaaaaabc *!*!*!*!*!*!*! cbbbbbbbbbbbbc !*!*!*!*!*!*!* c!c!c!c!c!c!c! !c!c!c!c!c!c!c c!c!c!c!c!c!c! Bonus: b.b.b.b.b.b.b. w************w .............b w*..........*w b............. w*..........*w .............b w*..........*w b............. w*..........*w .............b w*..........*w b............. w************w wbwbwbwbwbwbwb bwbwbwbwbwbwbw wbwbwbwbwbwbwb bwbwbwbwbwbwbw Level: Hans looks hard Bricks: !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z !z!z!z!z!z!z!z Bonus: w5b5w5b5w5b5w5 b5w5b5w5b5w5b5 w5b5w5b5w5b5w5 b5w5b5w5b5w5b5 w5b5w5b5w5b5w5 b5w5b5w5b5w5b5 w5b5w5b5w5b5w5 b5w5b5w5b5w5b5 w5b5w5b5w5b5w5 b5w5b5w5b5w5b5 w5b*w5b*w5b*w5 b5w*b5w*b5w*b5 w5b*w5b*w5b*w5 b5w*b5w*b5w*b5 w5b*w5b*w5b*w5 b5w*b5w*b5w*b5 w*b*w*b*w*b*w* b*w*b*w*b*w*b* Level: Hans not hard Bricks: czczczczczczcz z*zc*cz*zc*cz* czczczczczczcz zcz!!!!!!!!!zc c*c!*!!*!!*!c* zcz!!!!!!!!!zc czc!!!!!!!!!cz z*z!*!!*!!*!z* czc!!!!!!!!!cz zcz!!!!!!!!!zc c*c!*!!*!!*!c* zcz!!!!!!!!!zc czc!!!!!!!!!cz z*z!*!!*!!*!z* czc!!!!!!!!!cz zczczczczczczc c*cz*zc*cz*zc* zczczczczczczc Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 bwb555555555bw w*w555555555w* bwb555555555bw wbw555555555wb b*b555555555b* wbw555555555wb bwbwbwbwbwbwbw w*wb*bw*wb*bw* bwbwbwbwbwbwbw Level: Hans find them Bricks: vvvvvvvvvvvvvv v!*vvvvvvvv*!v v*!*vvvvvv*!*v vv*!*v**v*!*vv vvv*!!!!!!*vvv vvvv!!!!!!vvvv vv*!!!!!!!!*vv v*!!!!!!!!!!*v *!!!!!!!!!!!!* v*!!!!!!!!!!*v vv*!!!!!!!!*vv vvvv!!!!!!vvvv vvv*!!!!!!*vvv vv*!*v**v*!*vv v*!*vvvvvv*!*v v!*vvvvvvvv*!v vvvvvvvvvvvvvv ddeehhffggiikk Bonus: .............. .5..........5. ..5........5.. ...5......5... ....555555.... ....555555.... ...55555555... ..5555555555.. .555555555555. ..5555555555.. ...55555555... ....555555.... .*..555555.*.* *..5......5.*. ..5..*.*.*.5.* *5..*.*.*.*.5. .*.*.*.*.*.*.* wbwbwbwbwbwbwb Level: Hans score lots Bricks: vvvvvvvvvvvvvv v!!!!!vv!!!!!v v!zzz!vv!zzz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zfz!vv!zfz!v v!zzz!vv!zzz!v v!!!!!vv!!!!!v *v*v*v*v*v*v*v v*v*v*v*v*v*v* Bonus: 55555555555555 5.*.*.55.*.*.5 5.....55.....5 5*...*55*...*5 5.....55.....5 5.....55.....5 5*...*55*...*5 5.....55.....5 5.....55.....5 5*...*55*...*5 5.....55.....5 5.....55.....5 5*...*55*...*5 5.....55.....5 5.....55.....5 5*.*.*55*.*.*5 bwbwbwbwbwbwbw wbwbwbwbwbwbwb Level: Hans tricky Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !*vvvvvvvvvv*! !vccccccccccv! !vc*bbbbbb*cv! !vcbaaaaaabcv! !vcba*!!*abcv! !vcba!!!!abcv! !vcba*!!*abcv! !vcbaaaaaabcv! !vc*bbbbbb*cv! !vccccccccccv! !*vvvvvvvvvv*! !!!!!!!!!!!!!! !!!!!!**!!!!!! ######vv###### vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. .............. .5..........5. .............. ...5......5... .............. .....5..5..... .............. .....5..5..... .............. ...5......5... .............. .5..........5. .............. ......55...... ......bb...... *.*.*.**.*.*.* w.w.w....w.w.w Level: Hans find it Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .......v...... .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Hans aim straight Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............z .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Hans shoot! Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 55555555555555 jpjpjpjpjpjpjp pjpjpjpjpjpjpj 55555555555555 5j5j5j55j5j5j5 55555555555555 j5j5j5jj5j5j5j 5p5p5p55p5p5p5 p5p5p5pp5p5p5p .............. jwjwjwjwjwjwjw .............. pppppppppppppp .............. wjwjwjwjwjwjwj .............. pppppppppppppp .............. Level: Hans gray Bricks: kkkkkkkkkkkkkk kaaaaaaaaaaaak kajjjjjjjjjjak kajbbbbbbbbjak kajbaaaaaabjak kajbakkkkabjak kajbakjjkabjak kajbakbbkabjak kajbakjjkabjak kajbakbbkabjak kajbakjjkabjak kajbakbbkabjak kajbakkkkabjak kajbaaaaaabjak kajbbbbbbbbjak kajjjjjjjjjjak kaaaaaaaaaaaak kkkkkkkkkkkkkk Bonus: ll>jj{{{{jj>ll >ll.}jjjj}.ll> bw>>>>>>>>>>wb wb>55555555>bw bw>5ll>>ll5>wb wb>5>llll>5>bw bw>5jj55jj5>wb wb>5{}55}{5>bw bw>5{.55.{5>wb wb>5{}55}{5>bw bw>5{.55.{5>wb wb>5{}55}{5>bw bw>5>llll>5>wb wb>5ll>>ll5>bw bw>55555555>wb wb>>>>>>>>>>bw bwbwbwbbwbwbwb wbwbwbwwbwbwbw Level: Hans blow up Bricks: .....*dd*..... .....d**d..... .....*dd*..... ....*d**d*.... ....d*dd*d.... ....*d**d*.... ...*d*dd*d*... ...d*d**d*d... ...*d*dd*d*... ..*d*d**d*d*.. ..d*d*dd*d*d.. ..*d*d**d*d*.. .*d*d*dd*d*d*. .d*d*d**d*d*d. .*d*d*dd*d*d*. *d*d*d**d*d*d* d*d*d*dd*d*d*d *d*d*d**d*d*d* Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Hans eye of ra Bricks: .....hhhh..... ......hh...... .............. .............. ......ee...... ......ee...... .....eeee..... .....eeee..... ....eeeeee.... ....eeeeee.... ...eeeeeeee... ...eeeeeeee... ..eeeeeeeeee.. ..eeeeeeeeee.. .eeeeeeeeeeee. .eeeeeeeeeeee. eeeeeeeeeeeeee e############e Bonus: .....mmmm..... ......mm...... .............. .............. ......55...... ......55...... .....5jj5..... .....5jj5..... ....5jjjj5.... ....5j..j5.... ...5j....j5... ...5j....j5... ..5j......j5.. ..5j......j5.. .5j...ww...j5. .5j..wwww..j5. +jjjwwwwwwjjj+ +............+ Level: Hans id4 Bricks: zzzzffffffzzzz zzzzzffffzzzzz vzzzzzffzzzzzv vvzzzz!!zzzzvv vvvvvv!!vvvvvv vvvvvv!!vvvvvv ......!!...... ......!!...... ......!!...... ......!!...... ......!!...... ......!!...... ......!!...... ......!!...... ......!!...... ......!!...... ......!!...... ......!!...... Bonus: *jww555555wwj* **jww5555wwj** >**jww55wwj**> >>****++****>> >>>>>>pp>>>>>> >>>>>>pp>>>>>> ......jj...... ......pp...... ......pp...... ......++...... ......pp...... ......pp...... ......jj...... ......pp...... ......pp...... ......++...... ......pp...... ......pp...... Level: Hans rainbow Bricks: dddddddddddddd eeeeeeeeeeeeee dddddddddddddd eeeeeeeeeeeeee hhhhhhhhhhhhhh ffffffffffffff hhhhhhhhhhhhhh ffffffffffffff gggggggggggggg iiiiiiiiiiiiii gggggggggggggg iiiiiiiiiiiiii dehfgijjigfhed dehfgijjigfhed dehfgijjigfhed jjjjjjjjjjjjjj kkkkkkkkkkkkkk .............. Bonus: j...jj..jj...j +..+..++..+..+ gggggggggggggg gggggggggggggg j...jj..jj...j +..+..++..+..+ gggggggggggggg gggggggggggggg j...jj..jj...j +..+..++..+..+ gggggggggggggg gggggggggggggg ......bb...... .............. ......bb...... .b.b.b..b.b.b. wwwwwwwwwwwwww .............. Level: Hans tree Bricks: ......zz...... .....zzzz..... ....zzzzzz.... ...zzzzzzzz... ..zzzzzzzzzz.. ...zzz@@zzz... ....zz@@zz.... .....z@@z..... ......@@...... ......@@...... ......@@...... ......@@...... ......@@...... ccccc@@@@ccccc cccccccccccccc cccccccccccccc .............. .............. Bonus: ......55...... .....5..5..... ....5....5.... ...5......5... ..5........5.. ...5......5... ....5....5.... .....5..5..... .............. .............. .............. .............. .............. m>m>l....l>m>m mwmwmwmmwmwmwm +>+>+>++>+>+>+ .............. .............. Level: Hans we are da world Bricks: .............. .vvvvvvvvvvvv. .vzzzzzzzzzzv. .vzzzzzzzzzzv. .vzzffffffzzv. .vzzffffffzzv. .vzzff!*ffzzv. .vzzff*!ffzzv. .vzzff!*ffzzv. .vzzff*!ffzzv. .vzzff!*ffzzv. .vzzff*!ffzzv. .vzzff!*ffzzv. .vzzffffffzzv. .vzzffffffzzv. .vzzzzzzzzzzv. .vzzzzzzzzzzv. hhhhhhhhhhhhhh Bonus: .............. .5.b5.ww.5b.5. ..b........b.. .w.*.*..*.*.w. .5..........5. .b..........b. ...*..5...*... .5.....5....5. .b....5.....b. ...*...5..*... .5....5.....5. .bb....5...bb. ...*..5...*... .5..........5. ..b........b.. .w.*.*..*.*.w. .5b........b5. 5w*w*w++w*w*w5 Level: Hans dominos Bricks: ****cccccc**** *bc*cc***c*cb* *ba*aa***a*ab* *ba*cc*c*c*ab* *ba*bb*bbb*ab* *ba*ac**ca*ab* *ba*acb*ca*ab* *ba*aca*ca*ab* *ba*****ca*ab* *babacccca*ab* *babacaaca*ab* ********ca*ab* cbabacc*ca*ab* cbabbbb*bb*ab* ********cc*ab* *baaaaaaaa*ab* *bcccccccc*cb* ***********cc* Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Hans dominos II Bricks: .............* .............* .############* .#***cc****cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c*cc*cc*cc* .#*c****cc**** .############# Bonus: .............5 .............5 .............. ..5.5..5..5... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..5........... ..5.5..5..5..5 .............. Level: Hans dominos II Bricks: ......**...... ......**...... .#####**#####. .#**********#. .#*zzzzzzzz*#. .#*zzzzzzzz*#. .#*zz*zz*zz*#. .#*zz*zz*zz*#. .#*zz*zz*zz*#. .#*zz*zz*zz*#. .#*zz*zz*zz*#. .#*zz*zz*zz*#. .#*zz*zz*zz*#. .#*zz*zz*zz*#. .#*zz*zz*zz*#. .#*zz*zz*zz*#. .#****zz****#. .############. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Hans domnios III Bricks: ......**...... ......**...... .EEEEE**EEEEE. .E!!!!**!!!!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!*!!**!!*!E. .E!********!E. .EEEEEEEEEEEE. Bonus: ......**...... ......**...... ......bb...... ..bjjbbbbjjb.. ..5b55bb55b5.. ..5bb*bb*bb5.. ..bb*b**b*bb.. ..5b55**55b5.. ..5*b****b*5.. ..b**b**b**b.. ..b*555l55*b.. ..5*b*l5*b*5.. ..5w*b5lb*w5.. ..bw55l555wb.. ..jwb*ww*bwj.. ..jw*bwwb*wj.. ..bjjjjjjjjb.. .............. lbreakout2-2.6.5/client/levels/OpenSource0000664000175000017500000002133612140767201015303 00000000000000Level: warbird-at-aaahawk.com Free-Software-foundation Bricks: EEE*!*!*!*!*!* E!*!*!*!*!*!*! E*!*!*!*!*!*!* EE*!*!*!*!*!*! E*!*!*!*!*!*!* E!*!*EEE*!*!*! E*!*!E!*!*!*!* E!*!*E*!*!*!*! E*!*!E!*!*!EEE *!*!*EEE*!*E*! !*!*!*!E!*!E!* *!*!*!*E*!*E*! !*!*!*!E!*!EE* *!*!*EEE*!*E*! !*!*!*!*!*!E!* *!*!*!*!*!*E*! !*!*!*!*!*!E!* *!*!*!*!*!*E*! Bonus: .............. .............. ........g..... .............g ..g........... .............. ....g......... .............g .............. .............. ..g.....g..... .............. .............. .............. .............. .............. b}b}b}b}b}b.b} gwgwgwgwgwgwgw Level: warbird-at-aaahawk.com SuSE Bricks: .............. ......fff..... .....fffff.... ....ffffffff.. ...ffffffffff. ..ffffffffffzf .ffffffffff@ff ffffffffffff@@ fffffffffffff. f...fffffff... f.f..ff..ff... f..f.ff..ff... f..f.ff..ff... .ff.EEEEEEEE.. .............. .............. .............. .............. Bonus: .............. ......2....... ......&.>..... .........j<... ...W.b2.{..b.. .......+....5. ..2w<.....2..m .>....lc.2p... .....g...&.~.. ....?}.sW.>... ......+....... >....b...2<... ...~.55..5!... ..f........... .............. .............. .............. .............. Level: warbird-at-aaahawk.com Gentoo Bricks: ......j....... .....jjj...... ....jjjjj..... ...jjjjjjj.... ...jjjjjjj.... ..jjjjEjjjj... ..jjjEEEjjj... ..jjjjEjjjj... ...jjjjjjjj... ....jjjjjjj... ......jjjjj... .....jjjjj.... ....jjjjj..... ....jjjj...... ...jjjj....... ..jjjj........ ..jjj......... ..jj.......... Bonus: ......l....... .....d........ .....f........ .............. ......3pm..... .....5.5...... ..?.3...3.?... .....5.5...... ......3....... ....b...&..... ......c...d... .............. .....!.j-..... .............. ......{....... .....+........ .............. ...g.......... Level: warbird-at-aaahawk.com Slackware1 Bricks: cc...cc....c.. c.....c....c.c cc.c.cc.cc.cc. .c.c.cc.c..cc. cc.c....c..c.c ...cc...cc.c.c .............. .c.c.c........ .c.c.c........ ..c.c......... ..c.c.cc...... EE.E.E.c...... ......cc.cc... ......cc.c..cc .........c..cc .........c..c. ............cc .........E..EE Bonus: 55...55....5.. .............* ...l........&. ............?. +.......c..... ...?.......... .............. .}.+.>........ .............. ..p.+......... .............. .............. ......g{..?... ......-.....-. .........-.... .........f..!. .............m .............. Level: warbird-at-aaahawk.com debian Bricks: .............. ......dd...... .....dddd..... ....dd##dd.... ...dd###dd.... ...d#####dd... ..dd##d###d... ..dd#ddd##d... ..d##d#d##d... ..d##d###dd... ..d##dd##dd... ..dd##dddd.... ..dd###dd..... ...dd###...... ...ddd##...... ....ddd#...... .....ddd...... ......dd...... Bonus: .............. ......11...... .....1111..... ....11..12.... ...11...22.... ...1.....22... ..11..5...2... ..01.55l..2... ..0..5.l..2... ..0..d...32... ..0..44..33... ..00..m333.... ..00...33..... ...00......... ...000........ ....000....... .....000...... ......0w...... Level: warbird-at-aaahawk.com Mandrake1 Bricks: ......aa...... .....aaaa..... ....aaaaaa.... ...aajaajaa... ...ajEjjEja... ...ajjjjjja... ...aeeeeeea... ...aaeeeeaa... ....aeeeea.... .....aeea..... .....aaaa..... ....aaaaaa.... ....aajjaa.... ...aajjjjaa... ...ajjjjjja... ..aajjjjjjaa.. ..ajjjjjjjja.. ..ajjjjjjjja.. Bonus: .............. ......<....... .........>.... .....l..m.s... ....?.??.?.... ..........-... ...>445544p... .........~.... .............. ......j....... .....Wb&+..... ....s......... .....-........ ........w..... ......+...j... .............. ....-..s.+b... ..fb.<.....c.. Level: warbird-at-aaahawk.com Mandrake2 Bricks: ........h..... ........h..... .......hhh.... .......hhh..@. ...b..hhhhh..@ ..bbhhhhhhhhh. .bb..hhhhhhh.@ .b.....hhh..@. bb....hhhhh... bb....hhhhh... Eb...hhh.hhh.. .b...hh...hh.. .bb..h.bb..h.. .Eb....bb..... ..bb..bb...... ..Ebbbb....... ....EE........ .............. Bonus: ........1..... ........1..... .......5?5.... .......555.... ...c..!...s... ....111111111. .+...?.2.2d?.. .......2s2.... s.....12j21... ......12p21... .....112.211.. .....11...11.. .f...1.+~..1.. ..-.....>..... ..d{..f-...... ...&>db....... .............. .............. Level: warbird-at-aaahawk.com Caldera Bricks: ......**.....@ @....***g....@ @...***ggg...@ @..***ggggg..@ @..**gggggg..@ @.**gggggggg.@ @.**gggggggg.@ @***ggggggggg@ @**gggggggggg@ @**gggggggggg@ @***ggggggggg@ @.**gggggggg.@ @.**gggggggg.@ @..**gggggg..@ @..***ggggg..@ @...***ggg...@ @....***g....@ @.....**.....@ Bonus: ......44...... .....4..5..... ....4..d...... ...4..5j...... ...4.>...<.... ..4.5.?...+... ..4.c-..g..... .4..5..~...... .4.?>......?.. .4.l>-.*.~.... .4..W.+....... ..4.5.....d... ..4.>-..?..... ...4.5&....... ...4..f&...... ....4..5~..... .....4..{..... ......44...... Level: warbird-at-aaahawk.com Red Hat Bricks: .....aaaa..... ....aaaaaa.... ...aadddEaa... ..aadddddaaa.. .aaadddddEaaa. .aa##dddddaaa. aad#ddddddaaaa add####dddddaa adddddddddddaa aaajjddddddaaa aaaajjjjjjaaaa aaaajjjjjjaaaa .aaaajjEjaaaa. .ajjjjjjjajja. .ajjjjjjjjjjj. ..jjjjjjjjjj.. ...jjjjjjjj... .....jjjj..... Bonus: .............. ......f.3..... ....3......... .....5...3.... .w............ ...55....~.... ...5lm....d.5. .?.5555?.....? ....s....W.... b............w ..5........... ...>!..j...... ......f....... .......>...... ...d......5.~. ......s....... ...b......b... .....w..<..... Level: warbird-at-aaahawk.com Slackware2 Bricks: ......bbb..... .....bbbbb.... ....bEEEEEb... ...bEEEEEEbb.. ...bEbbbbEbb.. ..bbEbbbbbbbb. ..bbEbbbbbbbb. .bbbEEEEEbbbbb .bbbbEEEEbbbbb .bbbbbbbbEbbbb .bbbbbbbbEbbbb ..bbbbbbbEbbb. ..b@EbbbbEbbb. ...@EEEEEbbb.. ...@zEEEEzbb.. ...@@@@@@@@... .....bbbbb.... ......bbb..... Bonus: ......ddd..... .....?>l>?.... .............. ...*.......*.. .....55....... .....55.f..... .....5m....... .............. .{c.........c{ .&.....}5....& .+......5....+ ..g...f}5.f... ..+3....5...-. ...3.......... ...35....4.+.. ...33333333... .....b>p>>2..... Level: warbird-at-aaahawk.com Ximian Bricks: ......xx...... .....xhhx..... ....xhhhhx.... ...xhhhahhx... ..xhhahhahhx.. .xhhahhhhahhx. .xhahhaaaahhx. xhhahaaaaaaahx xhhhaaaaaaaahx xhhhhahhahaahx xhhhahahahhhhx .xhahhahhahhx. .xahhahhhhahx. ..xhahhhhhhx.. ...xhhhhhhx... ....xhhhhx.... .....xhhx..... ......xx...... Bonus: ......mw...... .............. .............. ......&4.+.... .....g..4..b.. .b..4.-!d4.... ...4..4444.... ...4.444445l.. .-..44444455.. .*.s.4.j4!55.. {...4.4.4.-+.. ...4..4~.4.... ..4.pc....4... ....4....&.... .............. .....>........ ......w<...... .............. Level: warbird-at-aaahawk.com Use the Source Bricks: E.E##@@....ggg E.E#.@.....g.. E.E##@@....gg. EEE.#@.....g.. jjj##@@.##.ggg j..EEE..#.hhh. jjj.E@.@##h... ..j.E@@@#.h... jjj.E@.@##h... ..fff@.@ddhhh. ..f.f...d.d... ..f.f...dd.... ..f.f...d.d... ..fffe.ed.d... .....e.e...... .....e.e...... .....e.e...... .....eee...... Bonus: ...........555 ...........5.. ...........55. ...........5.. 555........555 5.........555. 555.......5... ..5.......5... 555.......5... ..555...55555. ..5.5...5.5... ..5.5...55.... ..5.5...5.5... ..w555.55.w... .....5.5...... .....5.5...... .....5.5...... .....bwb...... Level: warbird-at-aaahawk.com BSOD Bricks: vvggvvvggggg!* vgvgvvvgggg!*! vgvgvggggg!*!g vvvgvvvgg!*!gg vvggvvvg!*!ggg vgvgggvg*!gggg vgvgvvvggggggg vvvgvvvggggggg gggggggggggggg gggggggggggggg gggggggvvvgvvg gggg!*gvgvgvgv ggg!*!gvgvgvgv gg!*!ggvgvgvgv g!*!gggvgvgvgv !*!ggggvgvgvgv *!gggggvvvgvvg gggggggggggggg Bonus: 55<.555-...m.. 5?5+555....... 5?5.5Wc......j 55?w555....... 55p.555....... 5?5.??5f...... 5?5.555.g..+.. 555.555......} ...d..??..w-.. .+....??...... ....jg.555!55< .{.....5c5.5p5 ......>5?5.5?5 w......5?5.5?5 .......5?5.5?5 ....-..5?5+5?5 ......<555.55s .............w Level: warbird-at-aaahawk.com USA-fireworks Bricks: ..!!!!!ddddd.. ..!!!!!ggggg.. ..!!!!!ddddd.. ..!!!!!ggggg.. ..!!!!!ddddd.. ..!!!!!ggggg.. ..dddddddddd.. ..gggggggggg.. ..dddddddddd.. ..gggggggggg.. ..dddddddddd.. ..gggggggggg.. ..dddddddddd.. c..c.cccc..cc. c..c.c....c..c c..c.cccc.cccc c..c....c.c..c cccc.cccc.c..c Bonus: ..j555j44444.. ..5555533333.. ..5555544444.. ..55j5533333.. ..5555544444.. ..j555j33333.. ..4444444444.. ..3333333333.. ..4444444444.. ..3333333333.. ..4444444444.. ..3333333333.. ..4444444444.. *..*.*jj*..**. w..w.w....w..w >..>.>}}>.>bb> j..j....}.j..j wbbw.wbbw.w..w lbreakout2-2.6.5/client/levels/FatalDoomsday0000664000175000017500000005530012140767201015746 00000000000000Version: 1.00 Level: Nethippy Hard Walls Bricks: .............. .............. .............. .............. .............. cccccccccccccc dddddddddddddd cccccccccccccc .............. cccccccccccccc jjjjjjjjjjjjjj cccccccccccccc .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. l....*..<..... .............. ...?.b........ .............. b............. ........s..... ...<.?........ .............. .............. .............. .............. .............. .............. Level: Nethippy Brick Bounce Bricks: f.e.d.f.g.f.e. c.c.c.c.c.c.c. .............. .d.g.h.h.d.h.g .c.c.c.c.c.c.c .............. f.e.g.d.e.e.d. c.c.c.c.c.c.c. .............. .h.d.g.e.d.h.f .c.c.c.c.c.c.c .............. d.h.f.d.f.h.f. c.c.c.c.c.c.c. .............. .............. .............. .............. Bonus: .............. ..b.s.......?. .............. .............. .....-...b.... .............. ..>.......>... ......-....... .............. .............. .....s........ .............. .............. ?.......>...+. .............. .............. .............. .............. Level: Nethippy BigGray Bricks: .............. cccccccccccccc cddc......cddc cddc......cddc cddc......cddc cddc......cddc cddccc..cccddc cddchc..chcddc cddchc..chcddc cddchc..chcddc cddchc..chcddc cddchc..chcddc cccchc..chcccc cffchc..chcffc cffchc..chcffc cffchc..chcffc cffchc..chcffc cccccc..cccccc Bonus: .............. p333333333333p .............. .............. .............. .............. l....l..l....l .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Nethippy Tricky Bricks: .............. .............. .............. gggggggggggggg EjjjjjjjjjjjjE dddddddddddddd .............. gggggggggggggg EjjjjjjjjjjjjE dddddddddddddd .............. gggggggggggggg EjjjjjjjjjjjjE dddddddddddddd .............. .............. .............. .............. Bonus: .............. .............. .............. 55555555555555 ......ll...... b............b .............. b............b .............. .............. .............. .............. .............. p.....>>.....p .............. .............. .............. .............. Level: Nethippy Arrrgh! Bricks: iiiiiiiiiiiiii .............. iiEEEEEEEEEEEE .............E gggggggggggggg E............. EEEEEEEEEEEEgg E............. hhhhhhhhhhhhhh .............E hhEEEEEEEEEEEE .............. dddddddddddddd E............. EEEEEEEEEEEEdd .............. .............. .............. Bonus: .............. .............. b............. .............. l5555555555555 .............. .............b .............. 4444444444444> .............. b............. .............. >............. .............. .............. .............. .............. .............. Level: Nethippy Hard Shot Bricks: .E..........gg .............g .E............ .E............ .E.....hh..... .E....iiii.... .E...ajjjja... .E..ijcbbcji.. .E.hijbvvbjih. .E.hijbvvbjih. .E..ijcbbcji.. .E...ajjjja... .E....iiii.... .E.....hh..... .E............ .Eg..........g .Egg........gg ..EEEEEEEEEEEE Bonus: .............l .............. .............. .............. .............. ......2222.... .....333333... ....23444432.. ...b23455432b. ...b23455432b. ....23444432.. .....333333... ......2222.... .............. .............. .............. ..l..........l .............. Level: Nethippy Madness Bricks: E............E EggggE..EggggE EggggE.vEggggE EggggE..EggggE EEEhEEv.EEgEEE EhhhhE..EhhhhE EhhhhE.vEhhhhE EhhhhE..EhhhhE EchccEv.EcchcE EddddE..EddddE EddddE.vEddddE EddddE..EddddE EzzzzEv.EzzzzE .............. .............. .............. .............. .............. Bonus: .............. .5555....5555. .5555..l.5555. .5555....5555. ...p..w...p... .>>>>....>>>>. .>>>>..>.>>>>. .>>>>....>>>>. ..b...>....b.. .2222....2222. .2222..w.2222. .2222....2222. ......f....... .............. .............. .............. .............. .............. Level: Nethippy Devilish Bricks: .............. .............. ggggg@..@ggggg ggzgg@..@ggzgg ggzzg@..@gzzgg zzzzz@..@zzzzz zzzzz@..@zzzzz ddzzd@..@dzzdd ddzdd@..@ddzdd ddddd@..@ddddd ddddd@..@ddddd ddddd@..@ddddd EEEEE@..@EEEEE .............. .............. .............. .............. .............. Bonus: .............. .............. >>>>>....>>>>> >>l>>....>>l>> >>++>....>-->> +++++....----- +++++....----- ..++......--.. ..f........f.. .............. 55555....55555 55555....55555 .............. .............. .............. .............. .............. .............. Level: Nethippy Bricks Ahoy! Bricks: .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. Bonus: .............. 5.5.5.5.5.5.5. .............. .5.5.5.5.5.5.5 .............. ?............. .............. .............? .............. >.>.>.>.>.>.>. .............. .>.>.>.>.>.>.> .............. l...........l. .............. .............. .............. .............. Level: Nethippy Boom Boxes Bricks: .............. zzz.zzz.zzz... z*z.z*z.z*z... zzz.zzz.zzz... .............. .zzz.zzz.zzz.. .z*z.z*z.z*z.. .zzz.zzz.zzz.. .............. ..zzz.zzz.zzz. ..z*z.z*z.z*z. ..zzz.zzz.zzz. .............. ...zzz.zzz.zzz ...z*z.z*z.z*z ...zzz.zzz.zzz .............. .............. Bonus: .............. fff.???.555... f.f.?.?.5.5... fff.???.555... .............. .+++.44l.ggg.. .+.+.4.4.g.g.. .+++.444.ggg.. .............. ..WWW.bbb.-+-. ..W.W.b.b.+.+. ..WWW.bbb.-+-. .............. ...>>>........ ...>.>........ ...>>>........ .............. .............. Level: Nethippy Hell-O-Ween Bricks: .............. ......yy...... ......yy...... ...eeeyyeee... ..eeeeeeeeee.. .eeeeeeeeeeee. .eee@eeee@eee. .ee@@@ee@@@ee. .eeeee@@eeeee. .e@e@e@@e@e@e. .e@@@eeee@@@e. .ee@@@@@@@@ee. .eee@e@@e@eee. ..eeeeeeeeee.. ...eeeeeeee... .....eeee..... .............. .............. Bonus: .............. ......ll...... .............. ......mm...... .............. .............. .....f..f..... ......>>...... ...555..555... ...5.5..5.5... .....5555..... .............. ..>..f..f..>.. ...>>>>>>>>... .............. .............. .............. .............. Level: Nethippy Wiggly Bricks: dEEEEEEEEEEEEE dEhEgEiEgEhEdE dEhEgEiEgEhEdE dEhEgE...EhEdE dEhEgE...EhEdE dE...E.E.EhEdE dE...E.E.EhEdE dE.E.E.E...EdE dE.E...E...EdE ...E...EgE.EdE ...EgEiEgE.EdE .EhEgEiEgE.EdE .EhEgEiEgE.EdE .EhEgEiEgE.EdE .EhEgEiEgE...E .EhEgEiEgE...E .EhEgEiEgEhE.E .EEEEEEEEEEE.E Bonus: .............. ..5.5.l.l.5.5. ..5.5.5.5.5.5. ..>.........5. ..>.>.......5. ..........>... >.........>... >............. >............. ........>..... ....>.>....... ..>........... ..>.........>. ............>. .............. ..5.5.5.5..... ..5.5.5.5.5... .............. Level: Nethippy Diag-Wall Bricks: .............. gg............ ddgg.......... iiddgg........ hhiiddgg...... v@hhiiddgg.... ..v@hhiiddgg.. ....v@hhiiddgg ......v@hhiidd ........v@hhii ..........v@hh ............v@ .............. .............. .............. .............. .............. .............. Bonus: .............. 55............ l.55.......... ....55........ .p....55...... >.......55.... ..>.?.....55.. ....>.b.....55 ......>..*.... ........>.d... ..........>... ............>. .............. .............. .............. .............. .............. .............. Level: Nethippy Pot-O-Gold Bricks: .............. .............. .............. .cccc......... EhhhhE........ EggggE........ EddddE........ EeeeeE........ .EEEE......... .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .5555......... .5555......... .5555......... .5555......... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Nethippy Not Pretty Bricks: .............. .............. .............. jjjjjjjjjjjjjj jjjjjjjjjjjjjj EEEEcEEEEcEEEE EddE..EE..EddE E............E E............E E............E EiiEii..iiEiiE EccEEE..EEEccE .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. l555555555555l <555555555555< ....>....>.... .>>........>>. .............. .............. .............. .>>.>>..>>.>>. .>>........>>. .............. .............. .............. .............. .............. .............. Level: Nethippy 2 Close 4U Bricks: .............. cccccccccccccc c............c c.cccccccccc.c c.c........c.c c.c.iiiiii.c.c c.c.i....i.c.c ..c.i.@@.i.c.. E.c.i....i.c.E .............. hhhhhhhhhhhhhh .............. E.!.!.!.!.!..E .............. !.!.!.!.!.!.!. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. 444444ll444444 4............4 4............4 4............4 4...555555...4 l...5....5...l ....5....5.... ..p.5....5.p.. .............. .............. .............. ..>.>.>.>.>... .............. >.>.>.>.>.>.>. .............. .............. .............. Level: Nethippy Misery Bricks: .............. .............. .............. EEEEEEEEEEEEEE .....iEEi..... ......EE...... ....E.EE.E.... hhhhE.EE.Ehhhh hhhEE.EE.EEhhh hhhEi.EE.iEhhh hhhE..EE..Ehhh EEEE.EEEE.EEEE i.....@@.....i ......@@...... ......ii...... .............. .............. .............. Bonus: .............. .............. .............. .............. .....>..>..... .............. .............. >5>5......5>5> 5>5........5>5 >5>.>....>.>5> 5>5........5>5 .............. >............> .............. ......>>...... .............. .............. .............. Level: Nethippy Evil Face Bricks: .............. .............. .E.E......E.E. .EhE......EhE. .EhE......EhE. .EEE......EEE. .....hhhh..... .....gggg..... .....ffff..... .............. .............. .............. .dddddddddddd. .dddddddddddd. .............. .............. .............. .............. Bonus: .............. .............. .............. ..f........f.. ..f........f.. .............. .............. .............. .............. .............. .............. .............. .>>>>>>>>>>>>. .>>>>>>>>>>>>. .............. .............. .............. .............. Level: Nethippy I.M.I. Bricks: .............. .............. d.EEiiiiiiEE.d d.EgEiiiiEgE.d d.E..EiiE..E.d d.E...zz...E.d d.E...dd...E.d d.E...dd...E.d d.E........E.d d.E........E.d d.E........E.d d.E........E.d d.E........E.d d.E........E.d d.Eg......gE.d dEEE......EEEd v............v .............. Bonus: .............. .............. 3...555555...3 3....5555....3 3.....55.....3 3............3 3.....>>.....3 3.....--.....3 3............3 3............3 3............3 3............3 3............3 3............3 3............3 3............3 f............f .............. Level: Nethippy Easy My Butt Bricks: .............. .............. .............. .............. aaaaaaaaaaaaaa ************** aaaaaaaaaaaaaa .............. aaaaaaaaaaaaaa ************** aaaaaaaaaaaaaa .............. aaaaaaaaaaaaaa ************** aaaaaaaaaaaaaa .............. .............. .............. Bonus: .............. .............. .............. .............. ffffffff..ffff .............. ffffff...fffff .............. ffff...fffffff .............. fff...ffffffff .............. ffffff...fffff .............. ffff...fffffff .............. .............. .............. Level: Nethippy Nitey Nite! Bricks: .............. a.a...a.a..... ...........a.. ..a.a.a..a...a ........a..... .a....a..a.a.. ...a......a... .a...a.a.....a ...a......a... .a......a..... ...a...a..a.a. .a...a........ .......a...... ..a........a.. .a..a.a..a...a .............. ...a.......... .............. Bonus: .............. >.d...d.5..... ...........d.. ..5.>.d..d...> ........5..... .d....d..d.d.. ...d......5... .d...>.d.....d ...d......d... .5......d..... ...5...>..d.d. .>...d........ .......d...... ..5........d.. .d..d.d..d...> .............. ...>.......... .............. Level: Nethippy Megawall Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj dddddddddddddd dddddddddddddd .............. .@.@.@.@.@.@.@ .............. hhhhhhhhhhhhhh hhhhhhhhhhhhhh iiiiiiiiiiiiii iiiiiiiiiiiiii .............. !.!.!.!.!.!.!. .............. ffffffffffffff ffffffffffffff gggggggggggggg gggggggggggggg Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 .............. .............. .............. l............l wffffffffffffw wffffffffffffw l............l .............. 5.5.5.5.5.5.5. .............. ?.....bb.....? ?.....bb.....? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: Nethippy Spiral Doom Bricks: EEEEEEEEEEEEEE Ea..........bE Ea..........bE E.EEEEEEEEEE.E E.Ev.......E.E E.Ev.......E.E E.E.EEEEE..E.E E.E.Ehhhh..E.E E.E.Ehddh..E.E E.E.Ehddh..E.E E.E.Ehddh..E.E E.E.Ehddh..E.E E.E.Ehddh..E.E E.E.Ehhhh..E.E E.E.EEEEEEEE.E E.Ec........cE E.Ec........cE E.EEEEEEEEEEEE Bonus: .............. .>..........>. .>..........>. .............. ...>.......... ...>.......... .............. .....4444..... .....4554..... .....4554..... .....4554..... .....4554..... .....4554..... .....4444..... .............. ...>........>. ...>........>. .............. Level: Nethippy 0-1-0 Bricks: g.....gg.....g EEEEE.EE.EEEEE E...E.hh.E...E E...E.hh.E...E E.E.E.hh.E.E.E E.E.E.hh.E.E.E h.E.i.hh.i.E.h h.E.i.hh.i.E.h h.E.i.hh.i.E.h h.E.i.hh.i.E.h E.E.E.hh.E.E.E E.E.E.hh.E.E.E E...E.hh.E...E E...E.hh.E...E EEEEE.EE.EEEEE .............. .............. .............. Bonus: l.....55.....l .............. ......>>...... .............. .............. .............. 5............5 5.....>>.....5 5.....>>.....5 5............5 .............. .............. .............. ......>>...... .............. .............. .............. .............. Level: Nethippy In Reverse Bricks: .............. .............. .............. .E..........E. .E..........E. .E..........E. .EggggggggggE. .EhhhhhhhhhhE. .EiiiiiiiiiiE. .EddddddddddE. .E..........E. .E..........E. .EEEEEEEEEEEE. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ..>>>>>>>>>>.. ..3333333333.. ..4444444444.. ..5555555555.. .............. .............. .............. .............. .............. .............. .............. .............. Level: Nethippy Booomb! Bricks: .............. .............. .......jjjj... .......j..jj.. ......EjE..j.. ......E*E..jj. .....EE*EE..j. ....Ezz*zzE.j. ...Ezz***zzEjj ...Ez**c**zE.j ...Ez*c!c*zE.d ...Ez**c**zE.. ...Ezz***zzE.. ....Ezz*zzE... .....EzzzE.... ......EEE..... .............. .............. Bonus: .............. .............. .............. .............. .......l...... .............. .............. .....ff.ff.... ....ff...ff... ....f.....f... ....f.....f... ....f.....f... ....ff...ff... .....ff.ff.... ......fff..... .............. .............. .............. Level: Nethippy Crazywall Bricks: ...hhh!!hhh... @..h.d..d.h..@ ...h.d!!d.h... iihh.d..d.hhii .....d!!d..... @@...d..d...@@ .....d!!d..... iiiddd..dddiii .....z!!z..... @@@..z..z..@@@ .....z!!z..... iiii.zzzz.iiii ......cc...... @@@@c.cc.c@@@@ ....cccccc.... ....g....g.... ggggg....ggggg .....vvvv..... Bonus: ...555..555... ...5.5..5.5... ...5.5..5.5... 5555.5..5.5555 .....5..5..... .....5..5..... .....5++5..... l..555..555..l .....b--b..... .....b..b..... .....bggb..... .....bbbb..... .............. .............. .............. ....>....>.... >>>>>....>>>>> .....dddd..... Level: Nethippy Diamondeath Bricks: vvvvvvvvvvvvvv vvvvvv..vvvvvv vvvvv....vvvvv vvvv......vvvv vvv........vvv vv..........vv v............v .............. ......dd...... ......dd...... .............. v............v vv..........vv vvv........vvv vvvv......vvvv vvvvv....vvvvv vvvvvv..vvvvvv vvvvvvvvvvvvvv Bonus: 555555ll555555 555555..555555 55555....55555 5555......5555 555........555 55..........55 5............5 .............. ......pp...... ......pp...... .............. >............> >>..........>> >>>........>>> >>>>......>>>> >>>>>....>>>>> >>>>>>..>>>>>> >>>>>>>>>>>>>> Level: Nethippy Big Ass Bricks: .............. .............. .............. .............. ...bbbbbbb.... ..EhfffffhE... .EihfjjjfhiE.. EihhfffffhhiE. EiheeeeeeehiE. Eihe@ddd@ehiE. Eihee@d@eehiE. Eihhee@eehhiE. .Eihhh@hhhiE.. ..Eiih@hiiE... ...EEh@hEEh... ..Ehhh@hhhE... ..Edgg@ggdE... ...EEE@EEE.... Bonus: .............. .............. .............. .............. ...0000000.... ....WWWWW..... ..>.WdddW.>... .>..WWWWW..>.. .>.bbbbbbb.>.. .>.b.222.b.>.. .>.bb.2.bb.>.. .>..bb.bb..>.. ..>.......>... ...>>...>>.... ..........l... .............. ...555.555.... .............. Level: Nethippy Fargin A Bricks: .............. zz.EEEccEEE.zz zz.Egv..vgE.zz zz.E.v..v.E.zz ...E.v..v.E... zEEE.v..v.EEEz ...E.v..v.E... hh.EvvEEvvE.hh hh....EE....hh hh....vv....hh hh.EvvvvvvE.hh ...E......E... EEEEvvvvvvEEEE .............. .............. .............. .............. .............. Bonus: .............. 55....++....55 55..l....l..55 55..........55 .............. .............. .............. 44..........44 44..........44 44....++....44 44..-....-..44 .............. ....>>>>>>.... .............. .............. .............. .............. .............. Level: Nethippy Pac Attack Bricks: .............. .............. .............. .............. ..hh.......... .hhhhh..ccccc. hhhhh..ccvccvc hhhh...cvvcvvc hhh....ccccccc hhhh...ccccccc hhhhh..ccccccc .hhhhh.ccccccc ..hh....c.c.c. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ..bb.......... .bbbbb..55l55. bbbbb..55.55.5 bbbb...5..5..5 bbb....5555555 bbbb...>>>>>>> bbbbb..>>>>>>> .bbbbb.~f~f~f~ ..bb....~.~.~. .............. .............. .............. .............. .............. Level: Nethippy Channels Bricks: .dE.gEhhEg.Ed. .dE.gEhhEg.Ed. .dE.gEhhEg.Ed. .dE.gEhhEg.Ed. .dE.gEhhEg.Ed. .dE.EE..EE.Ed. .EE.E....E.EE. .E..E....E..E. .E.iE.EE.Ei.E. .E.EE.EE.EE.E. .E.E..EE..E.E. .E.E..EE..E.E. .E.E..EE..E.E. .E.E..EE..E.E. .E.E.EiiE.E.E. .E.E.E..E.E.E. .E.E......E.E. .E..........E. Bonus: .3..4.ll.4..3. .3..4.55.4..3. .3..4.55.4..3. .3..4.55.4..3. .3..4.55.4..3. .3..........3. .............. .............. ...>......>... .............. .............. .............. .............. .............. ......>>...... .............. .............. .............. Level: Nethippy Graybar Bricks: v............v .............. .............. .............. vvvvvvvvvvvvvv .............. vvvvvvvvvvvvvv .............. zzzzzzzzzzzzzz vvvvvvvvvvvvvv cccccccccccccc bbbbbbbbbbbbbb aaaaaaaaaaaaaa .............. .............. .............. .............. .............. Bonus: l............l .............. .............. .............. 55555555555555 .............. ?............? .............. 55555555555555 >>>>>>>>>>>>>> f............f ff..........ff >>>>>>>>>>>>>> .............. .............. .............. .............. .............. Level: Nethippy Spider Bricks: @@..........@@ @............@ .............. .............. .aaa......aaa. a...a....a...a .....a..a..... .aaa..cc..aaa. a...bbhhbb...a ......cc...... ....bbhhbb.... .aaa..hh..aaa. a...bbhhbb...a ......cc...... ....bb..bb.... .aaa......aaa. a............a @@..........@@ Bonus: .............. .............. .............. .............. .555......555. 5...5....5...5 .....5..5..... .>>>..ll..>>>. >............> ......ff...... .............. .>>>......>>>. >............> .............. .............. .>>>......>>>. >............> .............. Level: Nethippy O.M.F.G. Bricks: .............. .EEEEEhhEEEEE. .EgggEhhEgggE. .EgggEhhEgggE. .EiiiEhhEiiiE. .EiiiEhhEiiiE. .E...EEEE...E. .E..........E. .E..........E. .E...E..E...E. .E...E..E...E. .EzzzE..EzzzE. .EzzzE..EzzzE. .EhhhE..EhhhE. .EhhhE..EhhhE. .EdddE..EdddE. .EdddE..EdddE. .EEEEE..EEEEE. Bonus: .............. ......55...... ..~f~.55.~f~.. ......55...... ..>>>.55.>>>.. ..>>>.ll.>>>.. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..555....555.. ..555....555.. .............. Level: Nethippy Bonus Round Bricks: eeeeeeeeeeeeee iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh Bonus: ljljljlljljljl 55555555555555 j555555555555j 55555555555555 55555555555555 j444444444444j 44444444444444 44444444444444 j444444444444j 33333333333333 33333333333333 j333333333333j 33333333333333 22222222222222 j222222222222j 11111111111111 11111111111111 j000000000000j Level: Nethippy Boom Bang Bricks: .g...EEEE...g. .E.!******!.E. .E...*..*...E. .EEEE*..*EEEE. .E...*..*...E. .E.!**..**!.E. .E...*..*...E. .EEEE*..*EEEE. .E...*..*...E. .E.!**..**!.E. .E...*..*...E. .EEEE*..*EEEE. .E...*..*...E. .E.!**..**!.E. hE...*..*...Eh EEEEE*..*EEEEE .............. .............. Bonus: .g..........g. ...5......5... .............. .............. .............. ...5......5... .............. .............. .............. ...5......5... .............. .............. .............. ...5......5... l............l .............. .............. .............. Level: Nethippy Stars Bricks: .............. .............. ..E...E...E... .EgE.EeE.EdE.. .ggg.eee.ddd.. .EgE.EeE.EdE.. ..E...E...E... ....E...E..... ...EiE.EjE.... ...iii.jjj.... ...EiE.EjE.... ....E...E..... ......E....... .....EhE...... .....hhh...... .....EhE...... ......E....... .............. Bonus: .............. .............. .............. ..5...5...5... .555.5l5.555.. ..5...5...5... .............. .............. ....5...5..... ...555.555.... ....5...5..... .............. .............. ......5....... .....555...... ......5....... .............. .............. Level: Nethippy 142 Bricks: .............. cccccccccccccc c............c c..c.c.c.ccc.c c.cc.c.c...c.c c..c.c.c...c.c c..c.c.c.ccc.c c..c.ccc.c...c c..c...c.c...c c..c...c.c...c c.ccc..c.ccc.c c............c cccccccccccccc .............. .............. .............. .............. .............. Bonus: .............. >>>>>>>>>>>>>> >............> >..5.5.5.555.> >.55.5.5...5.> >..5.5.5...5.> >..5.5.5.555.> >..5.555.5...> >..5...5.5...> >..5...5.5...> >.555..5.555.> >............> >>>>>>>>>>>>>> .............. .............. .............. .............. .............. Level: Nethippy The End Bricks: .............. ddddd.d.d.dddd d.d.d.d.d.d... ..d...ddd.ddd. ..d...d.d.d... ..d...d.d.dddd .............. dddd.d..d.ddd. d....dd.d..d.d ddd..d.dd..d.d d....d..d..d.d dddd.d..d.ddd. .............. .............. !...!...!...!. ..!...!...!... .............. vvvvvvvvvvvvvv Bonus: .............. fffff.f.f.ffff f.f.f.f.f.f... ..f...fff.fff. ..f...f.f.f... ..f...f.f.ffff .............. ffff.f..f.fff. f....ff.f..f.f fff..f.ff..f.f f....f..f..f.f ffff.f..f.fff. .............. .............. ~...~...~...~. ..~...~...~... .............. >>>>>>>>>>>>>> lbreakout2-2.6.5/client/levels/Choices0000664000175000017500000002222412140767201014573 00000000000000Version: 1.10 Level: tfry left is right Bricks: ***z*zzzz*z*** *z*z**zz**z*z* *z*z*zzzz*z*z* *z*z**zz**z*z* *z*z*zzzz*z*z* *z*z**zz**z*z* *z*z*zzzz*z*z* *z*z**zz**z*z* *z*z*zzzz*z*z* *z*z**zz**z*z* *z***zzzz***z* *@@@@@@@@@@@@* *@zzzzzzzzzz** *z**********z* *EEEEEEEEEEEE* cba........abc zzzzzzzzzzzzzz ************** Bonus: l++++wjd~----~ ++++wjgfd~---- +++wjgb-fd~--- ++wjgb&&-fd~-- +wjgb&pW&-fd~- wjgb&pm>W&-fd~ jgb&pm}{>W&-fd gb&pm}j>{>W&-f b&pm}j00>{>W&- &pm}j0000>{>W& pm}j000000>{>W mbbbbbbbbbbbb> }b{{{{{{{{{{{{ j.!!!!!!!!!!!! .............. {{{........{{{ 0{0{0{0{0{0{0{ w++{+w+w+{++w{ Level: tfry which size are you on Bricks: ************** z@**********@z z@**********@z z@**********@z z@**********@z z@**********@z z@**********@z z@zzzzzzzzzz@z z@zzzzzzzzzz@z z@@@@@@@@@@@@z zzzzzzzzzzzzzz ************** *ff*g*hh*g*dd* *ff*g*hh*g*dd* ************** bbbbbbbbbbbbbb zzzzzzzzzzzzzz ************** Bonus: .............. ......bb...... .....bbbb..... .....bbbb..... .....bbbb..... ......bb...... .............. ..jmmmllmmmj.. .............. .............. ffffffffffffff +++fffggfff--- +++fffggfff--- ffffffffffffff .............. .............. pjpjw+jj+wjpjp jjjjjjjjjjjjjj Level: tfry keep cool Bricks: **@@@@@@@@@@@@ **zzzzzzzzzzzz **zzzzzzzzzzzz **@@@@@@@@@@@@ **zzzzzzzzzzzz **zzzzzzzzzzzz **@@@@@@@@@@@@ **zzzzzzzzzzzz **zzzzzzzzzzzz **@@@@@@@@@@@@ **zzzzzzzzzzzz **zzzzzzzzzzzz **@@@@@@@@@@@@ **zzzzzzzzzzzz **zzzzzzzzzzzz c############# zzzzzzzzzzzzzz ************** Bonus: .f............ mff....bmbbbbb mff....bbbbbbb wf............ jff....bbmbbbb {ff....bbbbbbb Wf............ {ff....bbbmbbl Wff....bbbbbbl {f............ Wff....bbbbmbb {ff....bbbbbbb Wf............ {ff....bbbbbmb Wff....bbbbbbb .............. .............. jwj+j+jj+j+jwj Level: tfry easy to see through Bricks: zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz ************** ************** ************** ************** ************** ************** ************** bbbbbbbbbbbbbb zzzzzzzzzzzzzz ************** Bonus: ......ll...... .............. .............. .............. .............. .............. bbbbbbbbbbbbbb bjbbjbbjbbjbbj jbbjbbjbbjbbjb !!!!!!!!!!!!!! ffffffffffffff ddfccf55f~~f++ ddfccf55f~~f++ ffffffffffffff --f--f--f--f-- .............. wwwwwwwwwwwwww wjwjwjwjwjwjwj Level: tfry think ahead Bricks: geee.aEEa.eeeg *eee.E**E.eee* *eee.aEEa.eee* *eee......eee* ************** hhhhhhhhhhhhhh ffffffffffffff dddddddddddddd ************** *h*d***f*j***g h***d*f***j*g* *h*d***f*j***g h***d*f***j*g* ************** bbbbbbbbbbbbbb zzzzzzzzzzzzzz j*j*j*j*j*j*j* *j*j*j*j*j*j*j Bonus: !............! ......ll...... .............. .............. .............. &&&&&&&&&&&&&& .............. ++f++f++f++f++ ffffffffffffff ssf**fbbfppfmm ssf**fbbfppfmm ffffffffffffff --f--f--f--f-- .............. .............. .............. wwwwwwwwwwwwww wjwjwjwjwjwjwj Level: tfry feeling blue Bricks: ***c**cc*ccc** z@*c*c***c**@z z@*c*c***c**@z z@*c*c***c**@z z@*c*c****c*@z z@*c*c***c**@z z@*c*c***c**@z z@*c**cc*ccc@z z@**********@z z@@@@@@@@@@@@z ************** ************** ************** ************** ************** cccccccccccccc zzzzzzzzzzzzzz ************** Bonus: ffff..ll..ffff .!ffffffffff!. .!ffffffffff!. .!ffffffffff!. .!ffffffffff!. &!ffffffffff!& &!ffffffffff!& &!ffffffffff!& &!f!!!!!!!!f!& .!!!!!!!!!!!!. f+ff+ff+ff+ff+ fjffpffWffmffg fjffpffWffmffg fjffpffWffmffg ffffffffffffff .............. -w-w-w-w-w-w-w w-w-w-w-w-w-w- Level: tfry the good and the bait Bricks: *@**********@* z@*zzzzzzzz*@z z@*z******z*@z z@*z*zzzz*z*@z z@*z*zzzz*z*@z z@*z*z****z*@z z@*z*zzzzzz*@z z@*z*****zz*@z z@*zzzzz*zz*@z z@*****z****@z z@@@@@*z@@@@@z ************** bbbbbbbbbbbbbb bbbbbbbbbbbbbb ************** bbbbbbbbbbbbbb zzzzzzzzzzzzzz ************** Bonus: l.++++++++++.l +.++++++++++.+ +.++++++++++.+ +.++++++++++.+ +.++++++++++.+ +.++++++++++.+ +.++++++++++.+ +.++++++++++.+ +.++++++++++.+ +.++++++++++.+ ......++...... ...++++++++... +..+++..+++..+ .............. .}}...}}...}}. .............. -p-p-p-p-p-p-p w-w-w-w-w-w-w- Level: tfry black hole bonus Bricks: ***********.** ...........*@* *********..*@* .........*.*@* *******..*.*@* .......*.*.*@* *****..*..*.@* .....*.*.*..@* ***..*.*..*.@* .*.*.*..*..*@* *..*.*...**.@* *..*..*..*..@* *...*..*..*.@* *..*...*...*@* *.*..*..***.@* *.*.*.*....*@* #..*...****.@* j############* Bonus: 555dddddddd... ...........d.. 444dddddd..d.. .........d.d.. 333dddd..d.d.. .......d.d.d.. 222dd..d..d... .....d.d.d.... jjj..d.d..d... .d.d.d..d..d.. d..d.d...dd... d..d..d..d.... d...d..d..d... d..d...d...d.w d.d..d..ddd..w d.d.d.d....d.w ...d...dddd..w .............j Level: tfry the good and the bait(2) Bricks: @z@z@z@z@z@z@z zzzzzzzzzzzzzz zzzzzzzzzzzzzz ************** jjjjjjjjjjjjjj ************** bbbbbbbbbbbbbb zzzzzzzzzzzzzz ************** *zzzzzzzzzzzz* *zzzzzzzzzzzz* ************** bbbbbbbbbbbbbb bbbbbbbbbbbbbb ************** bbbbbbbbbbbbbb zzzzzzzzzzzzzz ************** Bonus: fbfbfbfbfbfbfb bfbfbfbfbfbfbf fbfbfbfbfbfbfb bfbfbfbfbfbfbf ffffffffffffff !!!!!!!!!!!!!! }}}}}}}}}}}}}} .............. ffffff~~ffffff ffffffffffffff ffffffffffffff f++ffffffff++f .............. .............. {{..{{{{{{..{{ .............. w>w>w>w>w>w>w> -w-w-w-w-w-w-w Level: tfry the middle of the road Bricks: zzzz#zzzz#zzzz zzzz#zzzz#zzzz zzzz#zzzz#zzzz zzzz#zzzz#zzzz zzzz#zzzz#zzzz zzzz#zzzz#zzzz zzzz#zzzz#zzzz zzzz#zzzz#zzzz zzzz#zzzz#zzzz zzzz#zzzz#zzzz #..###..###..# ************** ************** bbbbbbbbbbbbbb bbbbbbbbbbbbbb ************** .............. .............. Bonus: .....bjjb..... .....bmmb..... .....bjjb..... .....bmmb..... WWWW.bjjb.WWWW WWWW.bmmb.WWWW WWWW.bjjb.WWWW WWWW......WWWW WWWW......WWWW WWWW......WWWW .............. &&&&&&&&&&&&&& {*{*{*{*{*{*{* .............. ggggggwwgggggg +j+j+j+j+j+j+j .............. .............. Level: tfry all the world's riches Bricks: **zzzzhzhzzz** **zzzhhhhhzz** **zzhhhhhhzz** **zzhzhzhzzz** **zzhzhzhzzz** **zzhzhzhzzz** **zzhhhhhhzz** **zzzhhhhhhz** **zzzzhzhzhz** **zzzzhzhzhz** **zzzzhzhzhz** **zzzhhhhhhz** **zzzhhhhhzz** **zzzzhzhzzz** ************** bbbbbbbbbbbbbb bbbbbbbbbbbbbb ************** Bonus: 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 22fbbbbbbbbf22 !!fbbbbbbbbf!! ffffffffffffff .............. .............. wwwwwwjjwwwwww Level: tfry don't be fooled Bricks: zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz ************** ************** ************** ************** ************** zzzzzz**zzzzzz zzzzzz**zzzzzz ************** bbbbbbbbbbbbbb zzzzzzzzzzzzzz ************** Bonus: bbbbbbbbbbbbbl bbbbbbbbbbbbbb 00000000000000 00000000000000 00000000000000 &&&&&&&&&&&&&& ffffffffffffff }ss}f!mm!f<&&< }++}f!bb!f+w+s Level: tfry killing me softly Bricks: EEE#E#E#E#E#E# Ej............ E............. EEEE#E#E#E#EE. E*g*E*g*E*g*#. g*E*g*E*g*E*#. *g*g*g*g*g*gE. E*g*E*g*E*g*#. *gEg*gEg*gEg#. g*g*g*g*g*g*E. Eg*gEg*gEg*g#. g*E*g*E*g*E*#. E**g*g*g*g*gEb *EEEEEEEEEEE#z ************** bbbbbbbbbbbbbb zzzzzzzzzzzzzz ************** Bonus: ...-.-.-.-.-.- .............. .............. ....-.-.-.-... ............-. ............-. .............. ............-. ............-. .............. ............-. ............-. .............. ............-. WWW-WWWmmmjmmm .............. 00000000000000 w+-jjjwwjjj-+w Level: tfry the feint Bricks: zzzzzzzzzzzzzz z#z#z#zz#z#z#z zzzzzzzzzzzzzz *z*z*z**z*z*z* z*z*z*zz*z*z*z *z*z*z**z*z*z* z*z*z*zz*z*z*z *z*z*z**z*z*z* z*z*z*zz*z*z*z *z*z*z**z*z*z* z*z*z*zz*z*z*z *z*z*z**z*z*z* z*z*z*zz*z*z*z zzzzzz**zzzzzz ************** bbbbbbbbbbbbbb zzzzzzzzzzzzzz ************** Bonus: &l&&&&&&&&&&&& &.&.&.&&.&.&.& .............. WWWWWWWWWWWWWW .............. ************** .............. 00000000000000 .............. 00000000000000 .............. 00000000000000 .............. .............. ......{{...... .............. +w+w+w+w+w+w+w jjjjjjjjjjjjjj Level: tfry juxta bonus Bricks: z@z@z@z@z@z@z@ zzzzzzzzzzzzzz g*g*g*g*g*g*g* ************** gggggg*ggggggg ************** ggggggg*gggggg ************** gggggg*ggggggg ************** ggggggg*gggggg ************** gggggg*ggggggg ************** ggggggg*gggggg ************** gggggg*ggggggg ************** Bonus: w.w.w.w.w.w.w. *bbbbbbbbbbbb* jjjjjjjjjjjjjj !f!f!f!f!f!f!f wgwgwgwgwgwgwg f!f!f!f!f!f!f! w>w>w>w>w>w>w !f!f!f!f!f!f!f +w+w+w+w+w+w+w w+w+w+w+w+w+w+ lbreakout2-2.6.5/client/levels/Lapis0000664000175000017500000001223412140767201014266 00000000000000Level: Armish M$ Ruins :] Bricks: .aaaaaaaaaa... .aiiiafffa.a.. .aiiiafffaa.a. .aiiiafffa.a.. .aiiiafffaa.a. .aaaaaaaaa.a.. .agggahhhaa.a. .agggahhha.a.. .agggahhhaa.a. .agggahhha.a.. .aaaaaaaaaa.a. ...........a.. ............a. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Armish Explosive Bricks: EEEEEEEEEEEEEE cccccccccccccc c************c c*cccccccccc*c c*c********c*c c*c*cccccc*c*c c*c******c*c*c c*cccccccc*c*c c**********c*c cccccccccccc*c EEEEEEEEEEEEcE .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Armish Wanna play basket? Bricks: .............. .............. .............. ....EghigE.... ....EghigE.... ....EghigE.... ....EghigE.... ....Eg**gE.... ....EghigE.... ....EghigE.... ....EghigE.... ....EghigE.... ....EEEEEE.... .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Armish Time's important! Bricks: .............. .....aaa...... ....afxfa..... ...affxffa.... ..afffxfffa... ..afffxfffa... ..agxxxffga... ..afffffffa... ..afffffffa... ...afffffa.... ....afgfa..... .....aaa...... .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Armish TuRKiSH FLaG Bricks: .............. .iiiiicciiiii. .iiiicccciiii. .iiicciiiiiii. .iiiciiiiiiii. .iicciiiiiiii. .iicciiiiciii. .iicciiicccii. .iicciiiiciii. .iicciiicicii. .iiiciiiiiiii. .iiicciiiiiii. .iiiicccciiii. .iiiiicciiiii. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Armish What the hell...? Bricks: .....vvvv..... .....vvvv..... .....vvvv..... .....vvvv..... .....v**v..... .....v**v..... .....vvvv..... .....vvvv..... .....vvvv..... .....vvvv..... .............. .....vvvv..... .....vvvv..... .....vvvv..... .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Armish Ready for football? Bricks: ffffffjfffffff jjxfffjfxffjjj ffjffjjjfffxff #fjfjfjfjffjf# zfjfxfjfjffjfz *xjfjfjfjffjf* *fjfjfxfjffjx* zfjfjfjfjffjfz #fjffjjjfffjf# ffxfffjffffjff jjjfxfjfxffxjj ffffffjfffffff .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Armish Cigarette kills you... Bricks: ........k.k.k. .........k.kk. ..........kk.. ..........kk.. ...eejjjjj.k.. ...eejjjjj.... ...#.#.#.#.... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Armish www.linux-sevenler.de Bricks: ************** *............* *..!!....!!..* *..!!....!!..* *............* *.....!!.....* *.!...!!...!.* *.!!......!!.* *..!!....!!..* *...!!!!!!...* *.......!!...* *.......!!...* *............* ************** .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/GreenWall30000664000175000017500000005511212140767201015163 00000000000000Version: 1.00 Level: Ade Back To The Hell Bricks: xx#xx#xx#xx#xx xxfxxfxxfxxfxx xx#xx#xx#xx#xx ..f..f..f..f.. xx#xx#xx#xx#xx xxfxxfxxfxxfxx xx#xx#xx#xx#xx ..f..f..f..f.. xx#xx#xx#xx#xx xxfxxfxxfxxfxx xx#xx#xx#xx#xx ..f..f..f..f.. xx#xx#xx#xx#xx xxfxxfxxfxxfxx xx#xx#xx#xx#xx .............. .............. .............. Bonus: .............. .............. .............. .....&..&..... .............. ..m..m..m..m.. .............. .............. .............. ..m..m..m..m.. .............. .....4..4..... .............. .............. p.....pp.....p .............. .............. .............. Level: Ade Another Day In Paradise Bricks: .z..#ffff#..z. .yz..#ff#..zy. .xyz..##..zyx. .#xyz....zyx#. .x#xyz..zyx#x. .yx#xyzzyx#xy. .zyx#xyyx#xyz. ..zyx#xx#xyz.. ...zyx**xyz... ...zyx**xyz... ..zyx#xx#xyz.. .zyx#xyyx#xyz. .yx#xyzzyx#xy. .x#xyz..zyx#x. .#xyz....zyx#. .xyz..##..zyx. .yz..#ff#..zy. .z..#ffff#..z. Bonus: .............. ......mm...... .............. .............. .............. .............. .............. ......ll...... .....m..m..... .....m..m..... ....&.44.&.... .............. .............. .............. .............. .............. ......**...... .....****..... Level: Ade The Million Show Bricks: jjjjjjjj#..... jzzzzzz#...#.. jzyyyy#...xf.. jzyxx#...#f#.. jzyx#...xf#f.. jzy#...#f#f#.. jz#...xf#f#f.. j#...#f#f#fx.. #...xf#f#f#... ...#f#f#fx...# ..xf#f#f#...#j ..f#f#fx...#zj ..#f#f#...#yzj ..f#fx...#xyzj ..#f#...#xxyzj ..fx...#yyyyzj ..#...#zzzzzzj .....#jjjjjjjj Bonus: .............. .............. .............. .............. .............. ..m........... .m............ m.......m..... .............. ......&..4.... .....m........ .......l.....m ...&.......... ..*..4........ .............. ...l.......... .............. .............* Level: Ade Made In Heaven Bricks: .............. .............. #..#!#..#!#..# f##!x!##!x!##f f##!x!##!x!##f #..#!#..#!#..# .............. #..x!x..x!x..# f##!x!##!x!##f f##!x!##!x!##f #..x!x..x!x..# .............. #..#!#..#!#..# f##!x!##!x!##f f##!x!##!x!##f #..#!#..#!#..# .............. .............. Bonus: .............. .............. .............. ....m....m.... .............. .............. .............. .............. .............. ....m....m.... ....l....l.... .............. .............. m..***..***..m m..*4*..*4*..m ....*....*.... .............. .............. Level: Ade Monsters Bricks: x............x #x....xx....x# a#x..xaax..x#a xa#xxaxxaxx#ax axa#axaaxa#axa #axaxa..axaxa# x#axa.vv.axa#x .x#a..##..a#x. ..x..#ff#..x.. ..x..#ff#..x.. .x#a..##..a#x. x#axa.vv.axa#x #axaxa..axaxa# axa#axaaxa#axa xa#xxaxxaxx#ax a#x..xaax..x#a #x....xx....x# x............x Bonus: .............. .............. .............. ......ll...... ......44...... .............. ......mm...... .............. ......mm...... ..m...mm...m.. .............. .............. .............. .............. .............. ......pp...... ......pp...... .............. Level: Ade Stars Bricks: .y..........y. y!y...cc...y!y .y...czzc...y. ....cz!!zc.... .a...czzc...a. a!a...cc...a!a .a..y....y..a. ...yby..yby... ..yb!byyb!by.. ..yb!byyb!by.. ...yby..yby... .a..y....y..a. a!a...cc...a!a .a...czzc...a. ....cz!!zc.... .y...czzc...y. y!y...cc...y!y .y..........y. Bonus: .............. .............. ......&&...... .............. .............. .m..........m. .............. .............. ......mm...... ......mm...... .............. .............. .p....44....p. .............. .............. .............. .............. .............. Level: Ade Another Day Bricks: a###az**za###a ab#baxzzxab#ba vbcbvxaaxvbcbv #vcv#zaaz#vcv# a#v#a*zz*a#v#a ab#bax**xab#ba vbcbvxaaxvbcbv #vcv#zaaz#vcv# a#v#a*zz*a#v#a ab#bax**xab#ba vbcbvxaaxvbcbv #vcv#zaaz#vcv# .#v#..zz..#v#. ..#........#.. .............. .............. .............. .............. Bonus: .....m..m..... .............. .............. .............. ......44...... .....p..p..... .............. .............. ......ll...... m............m .............. ..m........m.. .............. .............. .............. .............. .............. .............. Level: Ade Show Me The Money Bricks: .zzzz#zz#zzzz. .z##########z. .z##########z. .z#zz#zz#zzzz. .z#zz#zz#zzzz. .z#zz#zz#zzzz. .z#zz#zz#zzzz. .z#zz#zz#zzzz. .z##########z. .z##########z. .zzzz#zz#zz#z. .zzzz#zz#zz#z. .zzzz#zz#zz#z. .zzzz#zz#zz#z. .zzzz#zz#zz#z. .z##########z. .z##########z. .zzzz#zz#zzzz. Bonus: .............. .............. .............. .............. .............. .............. .............. .*.......m..*. .............. .............. ......44...... .*..........*. .............. .............. ....m.mm.mm... .............. .............. .*..........*. Level: Ade Bloody Sunday Bricks: j...#ffff#...j zj...#ff#...jz yzj...##...jzy xyzj......jzyx yxyzj....jzyxy zyxyz....zyxyz jzyxy.jj.yxyzj .jzyx.zz.xyzj. ..jzy.yy.yzj.. ...jz.xx.zj... #...j.yy.j...# f#....zz....#f ff#...jj...#ff fff#......#fff ffff#....#ffff ######..###### .............. .............. Bonus: .............. ......mm...... .............. .............. .............. .............. .............. .............. ......ll...... ......mm...... ......44...... .............. .............. .............. .m.&......&.m. .............. .............. .............. Level: Ade Twenty Bricks: ...xyzjjzyx... ...xyzzzzyx... ...xyyyyyyx... ...xxxxxxxx... .............. xxxx......xxxx yyyx......xyyy zzyx.xxxx.xyzz jzyx.xffx.xyzj jzyx.xffx.xyzj zzyx.xxxx.xyzz yyyx......xyyy xxxx......xxxx .............. ...xxxxxxxx... ...xyyyyyyx... ...xyzzzzyx... ...xyzjjzyx... Bonus: ......mm...... .............. .............. .............. .............. .............. .............. .............. 4.....mm.....4 m.....mm.....m .............. .............. .............. .............. .............. .............. .............. .............. Level: Ade Chocolate Bricks: .............. .............. .............. aaaaaaaaaaaaaa aaa#aaaaaa#aaa aa#x#aaaa#x#aa a#x.x#aa#x.x#a #x...x##x...x# x.....xx.....x x.....xx.....x #x...x##x...x# a#x.x#aa#x.x#a aa#x#aaaa#x#aa aaa#aaaaaa#aaa aaaaaaaaaaaaaa .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ......44...... .............. .............. .............. .............. ..m.&.mm.&.m.. .............. .............. .............. .............. .............. .............. Level: Ade MicroHard Bricks: a.....#....... za....a#...... aza...xa#..... yaza..axa#.... ayaza.#axa#... xayaza##axa#.. axayaza##axa#. #axayaza##axa# ##axayaza##axa ##axayaza##axa #axayaza##axa# axayaza##axa#. xayaza##axa#.. ayaza.#axa#... yaza..axa#.... aza...xa#..... za....a#...... a.....#....... Bonus: .............. .............. .............. .............. .............. m.......m..... m........m.... ..........m... ........m..... ........m..... .............. .............. ll44*......... .............. ..*........... ......*....... *............. .............. Level: Ade Enigma Bricks: ....#f!f!fx... ...xf!f!f#.... ..#f!f!fx....# .xf!f!f#....xf #f!f!fx....#f! f!f!f#....xf!f !f!fx....#f!f! f!f#....xf!f!f !fx....#f!f!f# f#....xf!f!fx. x....#f!f!f#.. ....xf!f!fx... ...#f!f!f#.... ..xf!f!fx..... .#f!f!f#...... xf!f!fx....... f!f!f#........ ####x......... Bonus: .............. ........m..... .............. ...4..m....... .............. ....m......... ...4.......... ..m........... .............. m............. .............. .........*.... ........*..... .......*...... ......*....... .....*........ ....*......... .............. Level: Ade GT Bricks: xxxxxxx....... xaaaaaa....... xaxxxxx....... xax........... xax..xxxxxxxxx xax..aaaaaaaaa xax..xxxxaxxxx xax.....xax... xax.xax.xax... xax.xax.xax... xax..ax.xax... xaxxxax.xax... xaaaaax.xax... xxxxxxx.xax... ........xax... ........xax... ........xax... .............. Bonus: .............. ..*...*....... .............. .............. *............. ..l......*.... ..l........... .............. ..*......4.... *........4.... .............. ..*........... .........*.... .............. .............. .............. .............. .............. Level: Ade The Final Cut Bricks: vvvvvvvv...### vxxxxxxv...#f# vxvvvvvv...### vxv........... vxv........... vxv.vvvvvv.... vxv.v####v.... vxv.v#xx#v.... vxv.v#xx#v.vvv vvv.v####v.vxv ....vvvvvv.vxv ...........vxv ...........vxv ###...vvvvvvxv #f#...vxxxxxxv ###...vvvvvvvv .............. .............. Bonus: .............. .m..........m. .............. .............. .............. ......**...... .............. ......mm...... ......mm...... *.*........... ......44...... .............. .............. .............. .m..........*. .............. .............. .............. Level: Ade Too Old To Rock Bricks: .............. ....######.... ...x#!!!!#x... ..y##!##!##y.. .z#x#!##!#x#z. j#yx#!!!!#xy#j jz#x######x#zj jzy##ffff##yzj jzyx#f##f#xyzj jzyx#f##f#xyzj jzy##ffff##yzj jz#x######x#zj j#yx#!!!!#xy#j .z#x#!##!#x#z. ..y##!##!##y.. ...x#!!!!#x... ....######.... .............. Bonus: .............. .............. .............. .............. .............. m............m .............. .............. .............. .............. .....m..m..... ...l......l... ..m........m.. ...4......4... .............. .............. .............. .............. Level: Ade Too Young To Die Bricks: .###.####.###. .#v#.#ff#.#v#. .###.####.###. .............. .xxx.xxxx.xxx. .xvx.xffx.xvx. .xxx.xxxx.xxx. .............. .###.####.###. .#v#.#ff#.#v#. .###.####.###. .............. .xxx.xxxx.xxx. .xvx.xffx.xvx. .xxx.xxxx.xxx. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ..m...mm...m.. .............. .............. .............. ......44...... .............. .............. .............. .............. .............. .............. .............. .............. Level: Ade Hole In The Sky Bricks: .............. vvvvvvffvvvvvv v############v v#xxxxxxxxxx#v v#x########x#v v#x#vvvvvv#x#v v#x#vvvvvv#x#v v#x#vvvvvv#x#v f#x#vv##vv#x#f f#x#vv##vv#x#f v#x#vvvvvv#x#v v#x#vvvvvv#x#v v#x#vvvvvv#x#v v#x########x#v v#xxxxxxxxxx#v v############v vvvvvvffvvvvvv .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .....4..4..... m............m .............. .............. ....lm&&ml.... .............. ..m........m.. .............. ......**...... .............. Level: Ade Machine Messiah Bricks: xxxxxxxxx..... ##.......x.... .xx.......x... ..##.......x.. ...xx.......x. ....#########. ....a......### ############aa xxxxxxxxxx#a.. xxxxxxxxxx#a.. ############aa ....a......### ....#########. ...xx.......x. ..##.......x.. .xx.......x... ##.......x.... xxxxxxxxx..... Bonus: .............. .............. .............. .............. .............. .............. ....m......... .............. .............. .m.4m..m.4.m.. .............. ....m......... .............. .............. .............. .............. .............. .............. Level: Ade 20 Bricks: zzzzzzzzzzzzzz zzz##zzzz###zz zz####zz#####z z##zz##z#zzz#z z#zzzz#z#zzz#z z#zzzz#z#zzz#z zzzzzz#z#zzz#z zzzzz##z#zzz#z zzzz##zz#zzz#z zzz##zzz#zzz#z zz##zzzz#zzz#z z##zzz#z#zzz#z z######z#####z z######zz###zz zzzzzzzzzzzzzz .............. .............. .............. Bonus: .............. .............. .............. .............. .............. m............m .............. .............. .............. .............. ....&.....&... ...l4l.4.m&m.. .............. .............. *....*..*....* .............. .............. .............. Level: Ade You Never Be Alone Bricks: ..######....## .#jzyx#....#xy #jzyx#....#xyz jzyx#....#xyzj zyx#....#xyzj. yx#....#xyzj.. x#....#####... #............. .............. .............. #............. x#....#####... yx#....#xyzj.. zyx#....#xyzj. jzyx#....#xyzj #jzyx#....#xyz .#jzyx#....#xy ..######....## Bonus: .............. .............. ....m......... .............m .............. .m............ .............. .............. .............. .............. .............. .............. .............. .............. ...4.......... .m..m......m.. ..&4........4. .............. Level: Ade Always On My Mind Bricks: #.....##.....# f#...#zz#...#f ff###zaaz###ff f#xxx#zz#xxx#f #xaaax##xaaax# xazzzaxxazzzax #xaaax##xaaax# f#xxx#zz#xxx#f ff###zaaz###ff f#xxx#zz#xxx#f #xaaax##xaaax# xazzzaxxazzzax #xaaax##xaaax# f#xxx#zz#xxx#f ff###zaaz###ff f#vvv#zz#vvv#f #v...v##v...v# .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. m...4lmml4...m .............. .............. .m..........m. ...m......m... .............. .............. Level: Ade Sin Bricks: ......##...... .....xxxx..... ....##..##.... ....x....x.... ...xx.aa.xx... ..##.a!!a.##.. ..x.a!zz!a.x.. .xxa!zaaz!axx. ##a!za!!az!a## .xxa!zaaz!axx. ..x.a!zz!a.x.. ..##.a!!a.##.. ...xx.aa.xx... ....x....x.... ....##..##.... .....xxxx..... ......##...... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. ...m......m... ....&....&.... .....m..m..... ......44...... .............. .............. .............. .............. .............. Level: Ade Empty Spaces Bricks: ..v...##...v.. fvvvf#..#fvvvf ..v..v##v..v.. ..v...vv...v.. ..v...vv...v.. ..v..v##v..v.. fvvvf#..#fvvvf ..v..v##v..v.. ..v...vv...v.. ..v...vv...v.. ..v..v##v..v.. fvvvf#..#fvvvf ..v..v##v..v.. ..v...vv...v.. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ......**...... .............. *.*.*....*.*.* .............. .............. .............. .............. l...4....4...l .............. .............. .............. .............. .............. .............. Level: Ade Waiting For You Bricks: ##..........## ax#........#xa .ay#......#ya. ..az#....#za.. ...aj....ja... ....a....a.... .............. ##.##.##.##.## xx.xx.xx.xx.xx xx.xx.xx.xx.xx ##.##.##.##.## .............. ....a....a.... ...aj....ja... ..az#....#za.. .ay#......#ya. ax#........#xa ##..........## Bonus: .............. m............m .............. .............. .............. .............. .............. .............. .............. ......44...... .............. .............. .............. .............. .............. .............. mm..........mm .............. Level: Ade Endless Bricks: v###v####v###v .#x#.#xx#.#x#. .###.####.###. .#x#.#xx#.#x#. .###.####.###. .#x#.#xx#.#x#. .###.####.###. .#x#.#xx#.#x#. .............. .............. .#x#.#xx#.#x#. .###.####.###. .#x#.#xx#.#x#. .###.####.###. .#x#.#xx#.#x#. .###.####.###. .#x#.#xx#.#x#. .###.####.###. Bonus: m...m....m...m .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ......ll...... .............. ..m...44...m.. .............. Level: Ade Deep Purple Bricks: ...#aaxxaa#... ..#aax..xaa#.. .#aax....xaa#. #aax..xx..xaa# aax..x!!x..xaa ax..x!!!!x..xa x..x!!xx!!x..x a.x!!x##x!!x.a ax!!x#zz#x!!xa ax!!x#zz#x!!xa a.x!!x##x!!x.a x..x!!xx!!x..x ax..x!!!!x..xa aax..x!!x..xaa #aax..xx..xaa# .#aax....xaa#. ..#aax..xaa#.. ...#aaxxaa#... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .m..m....m..m. ......mm...... .............. .............. .............. .............. ...4......4... .............. .............. .....*..*..... Level: Ade Yesterday Bricks: .............. .............. vvvv.####.vvvv v##v.#vv#.v##v vvvv.####.vvvv .............. vvvv.####.vvvv v##v.#vv#.v##v ......**...... ......**...... v##v.#vv#.v##v vvvv.####.vvvv .............. vvvv.####.vvvv v##v.#vv#.v##v vvvv.####.vvvv .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ****......**** ......mm...... .............. .............. ......mm...... .............. .............. .............. ......44...... ****......**** .............. .............. Level: Ade Today Bricks: .............. .vvvvvxxvvvvv. #............# .vvvvvxxvvvvv. .v#........#v. .v.vvvxxvvv.v. .v.v#....#v.v. .v.v.vvvv.v.v. .x.x.vxxv.x.x. .x.x.vxxv.x.x. .v.v.vvvv.v.v. .v.v#....#v.v. .v.vvvxxvvv.v. .v#........#v. .vvvvvxxvvvvv. #............# .vvvvvxxvvvvv. .............. Bonus: .............. .............. .............. .*..........*. .............. ......**...... .............. .............. .............. .*.*..**..*.*. .............. .............. ......ll...... .............. .*....44....*. .............. ......**...... .............. Level: Ade Tomorrow Bricks: .............. .............. xxxx.xxxx.xxxx xvvx.xvvx.xvvx xvvx.xvvx.xvvx xxxx.xxxx.xxxx .............. xxxx.xxxx.xxxx xvvx.xvvx.xvvx xvvx.xvvx.xvvx xxxx.xxxx.xxxx .............. xxxx.xxxx.xxxx xvvx.xvvx.xvvx xvvx.xvvx.xvvx xxxx.xxxx.xxxx .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .**...**...**. .**...**...**. .............. .............. ...p.4..4.p... .............. .............. p..p.p..p.p..p .............. .............. Level: Ade Back To Back Bricks: xxv.xxx.xx.xvx xvx.xvx.xv.xvx xxv.xxx.xv.xxv xvx.xvx.xv.xvx xxv.xvx.xx.xvx .............. ...xxx.xxx.... ...vxv.xvx.... ...vxv.xvx.... ...vxv.xxx.... .............. xx..xxx.xx.x.x x.x.x.x.x..x.x xx..xxx.x..xx. x.x.x.x.x..x.x xxvvxvxvxxvxvx .............. .............. Bonus: .............. .............. .............. .............. bb..b.b..b.b.b .............. ...b.b........ .............. .............. .............. .............. .b....b.bb.... ..b...b.b..... ....bbb.b..... ..b.b.b.b..b.b wbwbwww.www.ww .............. .............. Level: Ade Terminator Bricks: xx..........xx .xx........xx. ..xx......xx.. x..xx*##*xx..x xx..xx##xx..xx .xx..xxxx..xx. ..xx..xx..xx.. x..xx*##*xx..x xx..xx##xx..xx .xx..xxxx..xx. ..xx..xx..xx.. x..xx*##*xx... xx..xx##xx..xx .xx..xxxx..xx. ..xx..xx..xx.. ...xx*##*xx... ....xx##xx.... .....xxxx..... Bonus: bb..........bb .bb........bb. ..b*......*b.. w..**....**..w .w..**..**..w. .....*..*..... ......**...... ....*....*.... ....*....*.... .............. ......**...... .............. ....*....*.... .............. ......44...... .............. .............. .....pppp..... Level: Ade Killing Time Bricks: !############# f!....czf!fz.. zf!....czf!fz. fzf!....czf!fz !fzf!....czf!f f!fzf!....czf! zf!fzf!....czf czf!fzf!....cz .czf!fzf!....c .czf!fzf!....c czf!fzf!....cz zf!fzf!....czf f!fzf!....czf! !fzf!....czf!f fzf!....czf!fz zf!....czf!fz. f!....czf!fz.. !############# Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .......4...... .............. m.m.m....m.m.m ....4......... .............. .............. .............. Level: Ade Dib Lib Bricks: #####zaaz##### #cbazabbazabc# #bazabccbazab# #azabcjjcbaza# #zabcjffjcbaz# zabcjffffjcbaz abcjffffffjcba abcjffffffjcba zabcjffffjcbaz #zabcjffjcbaz# #azabcffcbaza# #bazabffbazab# #cbazaffazabc# ######ff###### ......ff...... ......ff...... ......ff...... ......ff...... Bonus: ......mm...... .............. .............. .............. .............. .............. .............. .....lppl..... .m..........m. .............. .............. .............. ...m......m... .............. ......pp...... ......pp...... ......pp...... .............. Level: Ade Gol Bricks: ############## #xxxxxxxxxxxx# #xaaaaaaaaaax# #xazzzzzzzzax# #xazaaaaaazax# #xazaxxxxazax# #xazax..xazax# #xazax..xazax# #xazax..xazax# #xaza....azax# #xaz......zax# #xa..x..x..ax# #x..ax..xa..x# #..zax..xaz..# ..azax..xaza.. .xazax..xazax. .############. .............. Bonus: .............. .............. .............. .............. .............. ..m..m..m..m.. .............. .............. .....4..4..... .............. .............. .............. .............. .............. .............. ....mm..mm.... .............. .............. Level: Ade Dead Fish Bricks: ......zz...... ....#zaaz#.... ...#zazzaz#... ..#zazaazaz#.. .#zazazzazaz#. .zazazaazazaz. zazazazzazazaz .............. .............. .............. .............. zazazazzazazaz .zazazaazazaz. .#zazazzazaz#. ..#zazaazaz#.. ...#zazzaz#... ....#zaaz#.... ......zz...... Bonus: .............. .............. .............. .............. ...m.m..m.m... .............. .............. .............. .............. .............. .............. .............. .............. ...m.m..m.m... ......44...... .............. .............. .............. Level: Ade Freedom Bricks: xxxaaaaaazazaz xaaaaaaaaazaza xaaxxxaaaaazaz xxaxaxaaaaaaza xaaxaxaxxxaaaz xaaxxaaxaaaaaa xaaxxaaxaaaxxx aaaxaxaxxaaxaa zaaxaxaxaaaxaa azaaaaaxaaaxxa zazaaaaxxxaxaa azazaaaaaaaxaa zazazaaaaaaxxx azazazaaaaaaaa z#z#z#zz#z#z#z .............. .............. .............. Bonus: .............. .............. .***......***. .............. ....*...*..... .............. .............. ..*...*...*... .............. .............. .*...*.*...*.. .............. .............. .............. ..p...pp...p.. .............. .............. .............. Level: Ade Day By Day Bricks: ......zz...... .....z!!z..... ....z!zz!z.... ...z!z..z!z... ..z!z....z!z.. .z!z..zz..z!z. z!z..z!!z..z!z !z..z!zz!z..z! z..z!z..z!z..z ..z!z.##.z!z.. .z!z.#xx#.z!z. z!z.#x!!x#.z!z .z!z.#xx#.z!z. ..z!z.##.z!z.. ...z!z..z!z... ....z!zz!z.... .....z!!z..... ......zz...... Bonus: .............. ......mm...... .............. ....m....m.... .............. ..m........m.. .............. .............. .............. .............. .............. ......mm...... .............. .............. .............. .............. .............. .............. Level: Ade The End Bricks: .#.v..##..v.#. .#.v..##..v.#. #x#v##xx##v#x# #x#v##xx##v#x# .#.v..##..v.#. v#vvvv##vvvv#v .............. .............. .#....##....#. .#....##....#. #x#.##xx##.#x# #x#.##xx##.#x# .#....##....#. .#....##....#. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ...m......m... .............. .............. .............. .............. .............. .............. .m....mm....m. .............. .............. .............. .............. .............. .............. Level: Ade The End Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Bertrand0000664000175000017500000001004312140767201014753 00000000000000Version: 1.03 Level: Bertrand GRONDIN Big Gummer Bricks: @@c...@@..c.@@ dzdzdzdzdzdzdz .............. cccccccccccccc cccccccccccccc zhhhhhhhhhhhhh zh**h**h**h**h zh**h**h**h**h zhhhhhhhhhhhhh zhhhhhhhhhhhhh ##v##v##v##v## !!!!!!!!!!!!!! !!!!!!!!!!!!!! x.....yy.....x .............. .............. .............. .............. Bonus: l.5.......5..l .5.5.5.5.5.5.5 .............. f............f f............f ...-...c...-.. ......mc....m. ..m....c.m.... .......c...... .....m.cm..... ..l..?..?..l.. +*++++**++++*+ wbwbwbwbwbwbwb p.....<<.....p .............. .............. .............. .............. Level: Bertrand GRONDIN Big Gummer Bricks: zzvvvvvvvvvvcv zzvvvvvvvvvvcv zz@@@@@@@@@@cv zzcg#!!#!!#!cv zzcg#!!#!!#!cv zzcg#!!#!!#!cv zzcg#!!#!!#!cv zzcg#!!#!!#!cv zzcg#!!#!!#!cv zzcg#!!#!!#!cv zzcg#!!#!!#!cv **cg#!!#!!#!** zzEEEEEEEEEEzz jjj#vvvvvv#jjj .............. .............. .............. .............. Bonus: *c5555555555c* dcmmmmmmmmmmcd WW...--.--..WW ..*p.22.22.p.w ..*p.22.22.p.w ..*p.22.22.p.w ***p.22.22.p.w ..*f.22.22.f.w ..*f.22.22.f.w gg*+.22.22..gg {{*+.22.22..{{ mml+.22.22.lmm <<..........<< www.<<<<<<.www .............. .............. .............. .............. Level: Bertrand GRONDIN Serpentin Bricks: !************! !############! !#ighhcchjjdh! !#igh*cc*jj*h! !#ighhcchjjdh! !############! !z*cz*cz*cb!#! !z*cz*cz*cb!#! !z*cz*cz*cb!#! !z*cz*cz*cb!#! !z*cz*cz*cb!#! !############! !!#aaaaaaaa#!! zzzaaaaaaaazzz .............. .............. .............. .............. Bonus: m...wwwww....m ..?...mm...?.. ..54433322210. ..544l33l2210. f.54433322210f ......mm...... ?..b......b-.? ...bw..w..b-.. ...bw.mw.mb-.. f..b......b-.f w..bl.jj.lb-.w m.?..****..?.m *p..gWWWWg..p* }ww*wj<..f...f.-.> .m.-...g....m. .....&...&.... ...*..*..*..*. .c........c... ...l..?..?.l.. m............m .....+..+.&... .............. ....g....g.... ......j....... .............. l....g..g....l ..&.......&... ......j...jjj. .p.&p.}p&.p..p .w&..w..w.&w.. w&wjjjb&bb*&** lbreakout2-2.6.5/client/levels/LBreakout20000664000175000017500000003455112140767201015176 00000000000000Version: 1.00 Level: Michael Speck Late At Night Bricks: .............. .............. .............. .............. bbbbbbbbbbbbbb aaaaaaaaaaaaaa affaaaaafafffa aaafaaaffaaafa aaafafaafaaafa aafaaaaafaafaa afaaafaafaafaa afaaaaaafafaaa afffaaaafafaaa aaaaaaaaaaaaaa bbbbbbbbbbbbbb .............. .............. .............. Bonus: .............. .............. .............. .............. ....>......... ..?..!.0.*.... 0.......w...b. ....d1.....-.. .&.....p..?... ...+..b..~.... 1...?..s.1..0. ..W..-..c.}1+. ...0..f..-.... .b.....{.....? ....+.......>. .............. .............. .............. Level: Michael Speck Enter Bricks: ....f.gg.f.... ...f.g..g.f... ..f.g.ee.g.f.. .f.g.e..e.g.f. f.g.e.dd.e.g.f .g.e.d..d.e.g. g.e.dccccd.e.g .e.d.chhc.d.e. e.d.fchhcf.d.e #d.f.chhc.f.d# .#f.hhhhhh.f#. ..#h......h#.. ...#......#... ....#vvvv#.... .............. .............. .............. .............. Bonus: .............. ...~.......... .......-.&.... .w.1.0....?.l. ..d....1...... ........{.0... ....?........m .!.j..+.b.+.1. ..0.}1.....-.. .......c...... ......b.1..... .............. .............. .....W+>?..... .............. .............. .............. .............. Level: Michael Speck Fate Bricks: .............. .....jjjj..... ....jjkkjj.... ...jjk..kjj... ..jjk....jjj.. ..jjk.....jk.. ..jk......jk.. ..........jk.. .........jjk.. ........jjk... .......jjk.... ......jjk..... ......jj...... ......jk...... ......jk...... .............. ......jk...... ......jk...... Bonus: .............. .....?.?...... ......?.?..... ....?....?.... ...?......?... ..?........?.. ...?......?... ...........?.. ..........?... .........?.... ........?..... .......?...... ......?....... .......?...... ......?....... .............. .......?...... ......?....... Level: Michael Speck Schielded Targets Bricks: .............. .vvvvvvvvvvvv. .v*vv*vv*vv*v. .vvvvvvvvvvvv. .............. .vvvvvvvvvvvv. .v*vv*vv*vv*v. .vvvvvvvvvvvv. .............. .vvvvvvvvvvvv. .v*vv*vv*vv*v. .vvvvvvvvvvvv. .............. .vvvvvvvvvvvv. .v*vv*vv*vv*v. .vvvvvvvvvvvv. .............. .............. Bonus: .............. ..b...f...b... ..0..0..0..0.. ....W....?.... .............. ......<....... ..0b.1..1>.0.. .>..l..W....-. .............. .......f..<... ..0-.1..1..0.. ....b..?..W... .............. ....f.+....... ..0..0..0..0.. ...W......+... .............. .............. Level: Michael Speck Narrow Streets Bricks: .i.f.e..e.f.i. .i.f.e..e.f.i. di.f.e..e.f.id .idf.e..e.fdi. .i.fde..edf.i. .i.f.edde.f.i. .i.f.e..e.f.i. hi.f.e..e.f.ih .ihf.e..e.fhi. .i.fhe..ehf.i. .i.f.ehhe.f.i. .i.f.e..e.f.i. .............. a#.#.#..#.#.#a .#b#.#cc#.#b#. .#.#c#..#c#.#. .#.#.#..#.#.#. .............. Bonus: .............. .............. 1............1 ..1........1.. ....1....1.... ......22...... .............. ?............? ..?........?.. ....?....?.... .............. ...b.b..b.b... .............. .............. .............. .............. .............. .............. Level: Michael Speck Minefields Bricks: .............. .............. .jggggg*ggggj. .kjg*ggggggjk. .kijgggg*gj*k. .ki*jg*ggjiik. .*iiijggjiiik. .kii*ijjiiiik. .kiiiii*i*i*k. .kiiiiiiiiiik. .ki*iijjiiiik. .k*ii*g*jiiik. .kiijgggg*ii*. .kijggggggjik. .kjgg*ggggg*k. .*gggggg*gggj. .............. .............. Bonus: .............. .............. .....<........ ..j........>.. ..?...-.s..0.. ..........+... ...w-..c-..... ......+...p... ..-..l.0.1.2.. .+..~......-.. ...1..d..fb... .>2..0.1...... ...+........1. ..........?... ...b...+...1<. .1......b..... .............. .............. Level: Michael Speck Spaceship Bricks: .............. ......jj...... .....jkkj..... ....jkggkj.... ...jkkggkkj... ..jkkkggkkkj.. .j####cc####j. .j#.ffffff.#j. .j#.ffffff.#j. .j#.bbbbbb.#j. .j#.******.#j. ..#.******.#.. ..##########.. ...hh#dd#hh... .hhed#ed#dehh. ...###he###... ......he...... .......h...... Bonus: .............. .............. ......?....... ....-.0....... .......w.c.... ..b..s........ ......ff....0. .0.......?.... .....<......+. .>............ ....1.1.1..... .....1.1.1.... .............. ....b.m....... ..+.......-.>. .......2...... .............. .............. Level: Michael Speck Pointers Bricks: .............. .............. .............. .............. cccccc###ccccc aaaeeee#ffffaa affaeee#fffaee afffaee#ffaeee affffae#faeeee afffffa#aeeeee affffae#faeeee afffaee#ffaeee affaeee#fffaee aaaeeee#ffffaa cccccc###ccccc .............. .............. .............. Bonus: .............. .............. .............. .............. .2........+... ....<.1....... ..b........s.< w....f..?..... ...-.....-..+. .->...l....j.. 2...........1. ..+..1.....b.- ...?....p..... -....+........ ...b......>.+. .............. .............. .............. Level: Michael Speck Linux Rocks! Bricks: ....ee........ d.....ee...... d.e.....ee.... d.ef......ee.. d.eff.fg....ee d.eff.fg.gh... ddef.ffg.gh.h. ..ef.ffg.gh.h. ...f..fg.gh.h. ee....fg.g.h.. ..ee....g.h.h. ....ee....h.h. ......ee..h.hd ........ee...d cccaaacca.accd c.ca.ac.aa.c.d cc.a.ac.aa..c. c.caaacca.accd Bonus: .............. .......1...... .............. >.2.......j... ....<......... ...-..>-...... +....w....+.?. .......f.1.... ...b..+....... .......1...<.. ........b...2. .....f....b... .............b .............. 2-.?.......-.. .........?.... ......1.+...>. ....+......... Level: Michael Speck Diggin' Bricks: .............. ...........dee .....ff...dgde .....ff...dgde ......f.@@@gde ......ffff@gde ......ffgg@gde .....#fg#dgdee ..eee#fg#edee. .eede#gf#eee.. eedgd#gf#..... edg@ggff...... edg@ffff...... edg@@@.f...... edgd...ff..... edgd...ff..... eed........... .............. Bonus: .............. .............l ......w.....1. .....d.....?.. ............W. ......2..1.... .......+.....2 ...........+.. ..?...!.....>. ...}......-... .......1...... .-..p......... ......?....... .2............ 1.+.....>..... .......b...... .............. .............. Level: Michael Speck Death And Rebirth Bricks: .............. .............. .............. .............. ...!..!!..!... ..*.*....*.*.. .!...!**!...!. ..*.*....*.*.. ...!..!!..!... ..*.*....*.*.. .!...!**!...!. ..*.*....*.*.. ...!..!!..!... ..*........*.. .!..........!. .............. .............. .............. Bonus: .............. .............. .............. ......>...1... ....+......... .......2c..... ...........+<. .+.-.2..+.~... ..1..-........ ......s.-.w.3. ..b.d......... .>.-.<..f.?.-. ......b....... ...1+..?..b... .............. .............. .............. .............. Level: Michael Speck Modern Art Bricks: .............. ggggggggggiiid ggggggjjggggid kkkkkgjjggg#id keeeeg#jjjg#id keddeg#jjjg#id ke#dee#jjjg#id ke#dee#jjfg#id ke#dee#jffg#id ke#deeefff##id ke#dddffffiiid kk##ddf#hhhiid kjjdddf#hhhiid jjjdddf#hhhhhd jjjjdd##hhhhhd ##........###. .............. .............. Bonus: .............. ...........j.. ..<.0...-<.... ....-.1.....1. .c........d... ...+.f.......b ....b...~+.... 0...........0. .>..w...s1.... -...3..?....-. ...l..p..+.... .2..........>. .....-..0..+.. .+..?.....b..2 ...b.......... .............. .............. .............. Level: Michael Speck LePrechaun's Treasure Bricks: .....fff...... ....fffff..... ....fffff..... ....fffff..... ....fffff..... ....fffff..... .fff.fff.fff.. fffffffffffff. fffffffffffff. fffffffffffff. fffffffffffff. fffffffffffff. .fff.fffffff.. ....ffffff.... ....fffff.f... ....fffff..f.. ....fffff..ff. .....fff.....f Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. ......5....... .............. .............. ..g.......g... .............. .............. .............. ......m....... ......g....... Level: Michael Speck Trenches Bricks: ...ddddddddd.. ..eeeeeeeeeee. !.fffffffffff. ..gggkgggkggg. ..gggkgggkggg. !..g.k.g.k.g.. .....k...k.... .....k...k.... !............. .......x...... ...***.x.***.. !.#*#*#x#*#*#. ..#*#*#x#*#*#. ..#*#*#x#*#*#. !.#*#*#x#*#*#. ..#*#z#x#z#*#. ###*###x###*## .............. Bonus: ...s.......*.. .............. .?..l......... .............. ......>.>..... .?.w...p...c.. .............. .....f...f.... .?............ .............. ...1.1...1.1.. .?............ ...1.1...1.1.. .............. .?.1.1...1.1.. .....b.+.b.... ...1...+...1.. .............. Level: Michael Speck Fortress Bricks: .............. .EEEbbbbbbEEE. .Edd......ddE. .Ed!......!dE. .E....!!....E. .b..hh#ff@..b. .b..hh#fff..b. .b..hh#fff..b. .b.!###fff..b. .b..ggg###!.b. .b..ggg#ee..b. .b..ggg#ee..b. .b..@gg#ee..b. .E....!!....E. .Ed!..zz..!dE. .Edd.yyyy.ddE. .EEExxxxxxEEE. .............. Bonus: .............. ........-..... ..3........3.. .....-..?..... ...........?.. ....<......... .W......>..... ...+.j........ .......-.w.... .<...d........ ....>.....+.b. .....b..m..... ......c..{.... .............. .............. ..3..+..s..3.. .....W.f...... .............. Level: Michael Speck Knock Knock Bricks: .............. .*............ .............. EEEEEEE.ffffff ......#.fddddf ......#.eeeeee f....f#.eeeeee fggggf#.fdzzdf fddddf#.fdzzdf fdzzdf.#fddddf fdzzdf.#fggggf eeeeee.#f....f eeeeee.#...... fddddf.#...... ffffff.EEEEEEE .............. ............*. .............. Bonus: .............. .5............ .............. ........!c.... ...........{.. ........1.?.l. ........>....1 ...W.....*.m.. .1...b......+. w...-...1-.... ..m.........b. .?..&......... ..}..1........ 1..+.......... .....>........ .............. ............5. .............. Level: Michael Speck Drill Bricks: .#............ .e#h.......!.. .ee#h.....!... .eed#h........ .eedd#h...#### .eeddg#h..bakj .eeddgg#h.bakj .eeddggi#.bakj .eeddggii.bakj .eeddggii.bakj .eeddggi#.bakj .eeddgg#h.bakj .eeddg#h..bakj .eedd#h...#### .eed#h........ .ee#h.....!... .e#h.......!.. z#............ Bonus: .............. ...b.....b.... .............. ..*........... ......!....... .+............ ......1......1 ...1.+.....-.. ......w.?..... ..f.W...?.j... .2...2.-....+. ....*...0..1.. ...-...0..c... .b....>....... ....b0....d... ....0......... ...0.......... g............. Level: Michael Speck Against All Odds Bricks: .............. .............. .jkgi#........ .jkgi#........ .jkgi#........ .jkgi#...!*!.. .kkgi#...*!*.. .gggi#...!*!.. .iiii#........ .#####........ ........#####. ........#dddd. ..!*!...#deee. ..*!*...#deff. ..!*!...#defj. ........#defj. ........#defj. ........#defj. Bonus: .............. .............. .d..>......... .............. .-.d....~.b.c. .............. ..c........... .............. .>..f...~...c. .............. .............. .c...~...f..>. .............. ...........c.. .............. .c.b.~....d.-. .............. .........>..d. Level: Michael Speck Insane In The Brain Bricks: .............. .............. .............. ....@@@@@@.... ....@kkkk@.... ...g@kkkk@g... ..@@@jjjj@@@.. ..@kjeeeejk@.. ..@kjeddejk@.. ..@kjeddejk@.. ..@kjeeeejk@.. ..@@@jjjj@@@.. ...g@....@g... ....@zzzz@.... ....@zzzz@.... .............. .............. .............. Bonus: .............. .............. .............. .............. ......s....... ...3...?..3... .....&........ ........d..... ......~....... ....+..-..>... ....>.}....... .....b..>..... ...3......3... ......1.1..... .....+.W...... .............. .............. .............. Level: Michael Speck Alien Bricks: ......gg...... .d....gg....d. .dd...gg...dd. .ddd..gg..ddd. .ddddggggdddd. .####gggg####. .#eegg!!ggee#. .#eegg!!ggee#. .#eeg*@@*gee#. .#eeef@@feee#. .#eeeffffeee#. .#eeff..ffee#. .fff.f..f.fff. .....#..#..... ....#h..h#.... ...#h!..!h#... ..#h!....!h#.. .#hh......hh#. Bonus: .......<...... ......?....... ...........1.. ..1....W...... ...*....w.s.-. .....-........ ..b........... ....}.l..>.1.. .....c..f.-... ...+.....2.... ..........j... ..<......?.... ...1.......+.. .............. ........b..... ......>....... ....+....3.... ..2........... Level: Michael Speck Tricky Bricks: .............. .####....####. .#dd#....#ff#. .#dd#....#ff#. .#dd#....#ff#. .#dd#....#ff#. .#dd#....#ff#. .####....####. .............. .####....####. .#ii#....#gg#. .#ii#....#gg#. .#ii#!..!#gg#. .#ii#....#gg#. .#ii#....#gg#. .####....####. .............. .............. Bonus: .............. .............. .............. ..2........+.. ..........2... ...2.......... ..?........2.. .............. .............. .............. ..?.......b... ...2.m..m..-.. ..+.......2... .....m..m..... ..2........2.. .............. .............. .............. Level: Michael Speck Be Smart! Bricks: hh.zzzzzzzzzzz hh.zzxzxzxzxzz hh.zzxzxzxzxzz hh.zzxzxzxzxzz ee.zzxxxzxzxzz ee.zzxzxzxzxzz ee.zzxzxzxzzzz dd.zzxzxzxzxzz dd.zzzzzzzzzzz .............. ###zzzzxzzzzzz jj#zzzxzzzzzzz kk#zzxxxxxxxzz jj#zzzxzzzzzzz vv#zzzzxzzzzzz .............. .............. .............. Bonus: ....1......... .l.....?1.b... 4..>........&. .....&...1.... .4....c......1 ........~.&... ....&.......}. 4......p.?.... .*...1..&....! .............. ....{......... **......1>.1.. ...1..&.....&. ....b.....+..1 .....+........ .............. .............. .............. Level: Michael Speck Two Glasses Bricks: .............. .............. .............. .............. .............. .#..#....#..#. .#gg#....#gg#. .#gg#....#gg#. .#gg#....#gg#. .#gg#....#gg#. .#gg#....#gg#. .#gg#....#gg#. .#gg#....#gg#. .#gg#....#gg#. .#gg#....#gg#. .@gg@....@gg@. .@@@@....@@@@. .............. Bonus: .............. .............. .............. .............. .............. .............. ..s1......1+.. .............. ..1b......*1.. .............. ..b2......>2.. .............. ..1-......1?.. .............. ..?5......-5.. .............. .............. .............. Level: Michael Speck Corners Bricks: .............. #jj....#hh.... #jj....#hh.... #*j....#*h.... @##....@##.... ....#ee....#ff ....#ee....#ff ....#*e....#*f ....@##....@## .#dd....#gg... .#dd....#gg... .#*d....#*g... .@##....@##... .....#kk...... .....#kk...#ii .....#*k...#ii .....@##...#*i ...........@## Bonus: .............. .-......<..... ..>......?.... .2......2..... .............. .....+......l. ......W......b .....2......2. .............. ..+........... ...c......<... ..2......2.... .............. ......m....... .......>...... ......2......- ............2. .............. Level: Michael Speck Magnet Bricks: ....kkkkkk.... ...kkkkkkkk... ...kkkkkkkk... ..kkk....kkk.. ..kk......kk.. ..kk......kk.. ..kk......kk.. ..gg......dd.. ..gg......dd.. ..gg......dd.. ..gg......dd.. ..gg......dd.. ..gg.....@dd#. .#gg......dd.# .@gg#...#.ddE. ..gg@....Edd@. .#gg.#....dd.. .Egg......dd#. Bonus: ....d..?...... ...>..~..>.... .....{.b{..... ....!....W?... ...-.......w.. ..W.......>... ...>.......c.. .............. ..?.......{... ...{.......W.. ..&........-.. ...b......?... ..+........... ...&......b... ...........+.. ..>........... ..........{... ...{.......>.. lbreakout2-2.6.5/client/levels/OurWorld0000664000175000017500000002652312140767201015001 00000000000000Version: 1.10 Level: Capoll Big Bang Bricks: ......**...... .....****..... ....******.... ...********... ..**********.. .************. .************. .************. ************** ************** .************. .************. .************. .v**********v. ...********... ....******.... .....****..... ......**...... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .{..........{. .......{...... .............. .............. .............. Level: Capoll Live Bricks: ..........hhe* ..f........hhe .fff.......hhh fffff......hhh .yyy........hh yy@dy......... yd@xy......... .x@x.......... xx@.x......... f.@.x......... ..@........... ..@........... ..@....g..g..g eeeeeegggggggg eeeeeeggEggggg eeeeeegggggEgg ......gggggggg .............. Bonus: ...........>{g ............-* .............. s............. ..?........... .-?~.......... .-..+......... .............. .............. }............. .............. .............. .......&...... .............. .............. .p....m....... ...........!.. .............. Level: Capoll Dinosaur Bricks: .............. ......fx*..... ......fxxx.... .....fxxxx.... .....fxff..... .....fxx...... ....fxxx...... ....fxxff..... ....fxxxffv... ....xxxxxf*... ...fxffx...... ...fxffx...... ...fxfff...... ...f*fff...... ...f.fff...... ...f.ffff..... .fff.ffff@.... .............. Bonus: .............. .......-...... .......-j-.... .............. .............. .............. .............. .............. .............. .......>..*... .............. ...w.......... .....+}....... ....d......... .............. ......s....... .............. .............. Level: Capoll Human Bricks: .............. ...aaaaaaaa... ...addddddaa.. ..aadaaeaada.. ..addcceccdda. ..addcgegcdda. .aaddddedddda. .aa*ddeeddd*a. ..a*ddedd*d*aa .aadddeeedddaa .aadddddddddaa .aadddddddddaa .a.d**ddd**daa a..dd**v**dd.a a...dd***dd..a .....ddddd.... ......dddd.... .............. Bonus: .............. .............. ....???????... .............. .........p.... ......d.d...f. .....&........ ..d..*........ .............. ..........c... ......}s}.!... ..f..........f .............. ....W..+...... .............. .............. .............. .............. Level: Capoll Paleolitic Bricks: .............. ............jj ...........jjj ..........kkjj .........kkkk. .........kkkk. .........@kk.. ........@@k... .......@@..... ......@@...... .....@@....... ....@@........ ...@@......... ..@@.......... .@@........... .............. .............. .............. Bonus: .............. .............. .............. .............W ..........f... .........w.<.. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Capoll Paleolitic - Fire Bricks: .............. .............. ......dd...... ......dd...... ......dd...... ..d...dd...... ...d.dddd..... ...dddddd..d.. ....ddddd.d... ....ddddddd... ..d.ddddddd... ..d.ddeedd..d. ..ddddeeddddd. .dddddeedddd.. .ddddieeiddd.. .dddieeeeidd.. .ddddeeeedddd. .............. Bonus: .............. .............. .............. .............. .............. .............. .......*...... ...b.......~.. .............. .....-.>...... .........!.... .....??....... .............. .<.&c......... .......p...... .........+*... ..{........... .........-.... Level: Capoll Neolitic Bricks: .............. .............. .............. .............. .............. ..f.f.......#. .fffff#*#.#.*. .f*fzfy.y*y.y. ..#.z*y.y.y*y. ..#.z.y.y.y.y. ee#ezeyeyeyeye eeeeeeeeeeeeee eeeeeeeeeeeeee eeeeeeeeeeeeee eeeeeeeeeeeeee .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ..j.j......... .......-...... ..{..w...{.... ....+*.....}.. .............. ........m.+..p .............. ..b.p......... .......b..<... .............. .............. .............. .............. Level: Capoll Stone Age Bricks: .............. ..........bb.. .........bbb.. ........bbbb.. .......bbbbb.. .......bbbb... .......*bbb... ......@**b.... ......@....... .....@........ ....@@........ ...@@......... ...@.......... ..@@.......... .@@........... @@............ .............. .............. Bonus: .............. ...........>.. .........m.... .............. ........>>!... .......+...... ........->+... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Capoll Ancient Bricks: .............. .............. .............. .....vvvv..... .....vvvv..... ......**...... ......hh...... ......hh...... .....hhhh..... .....hhhh..... ....hhhhhh.... ....hhhhhh.... ...hhhhhhhh... ...hhhhhhhh... ..hhhhhhhhhh.. ..hhhhhhhhhh.. .hhhhhhhhhhhh. .............. Bonus: .............. .............. .............. ......bb...... ......ww...... .............. ......00...... ......00...... .....0000..... .....&jj&..... ....??00??.... ....??gg??.... ...00000000... ...dddddddd... ..0000000000.. ..!f}{ss{}f!.. .000000000000. .............. Level: Capoll Ancient Bricks: .............. .......jj.v... ......jjjj.... ....jjjjjjjj.. ...jjjjjjjjjj. ..jjjjjjjjjjjj ...c..c..c..c. ...c..c..c..c. ...c..c..c..c. ...c..c..c..c. ...c..c..c..c. ...c..c..c..c. ...c..c..c..c. ...c..c..c..c. ...c..c..c..c. ..bbbbbbbbbbb. .bbbbbbbbbbba. aaaaaaaaaaaaa. Bonus: .............. .......0...... .............. .......g.&.... ......W....}.. .............. ...-..-..-..-. .............. ......*....... .............. ...+..+..+..+. .............. .............. .............. ...-..-..-..-. ..........w... .1.d...*...... .............. Level: Capoll Middle Age Bricks: vvvvv****vvvvv v.....@@.....v v....*@@*....v v.....@@.....v v..@@@@@@@@..v v..@@@@@@@@..v v..@@@@@@@@..v v.....@@.....v v.....@@.....v v.....@@.....v v.....@@.....v v.....@@.....v v.....@@.....v v.....@@.....v v.....@@.....v v.....@@.....v v.....@@.....v vvvvvvvvvvvvvv Bonus: l....3333....b .............. .....1..1..... .............. m............m .............. .............. .............. .............. .............. .............. .............. d............d >............> .............. .............. .............. ..p.......*... Level: Capoll Modern Era Bricks: ..vv....vvvv.. ......hh...... v.....h*...... v..hhhhhhhh... v..hhh*h*h*... v..h*h*hhh*... v.....hh.....v ......hh.....v ......hh.....v ......hh.....v ......hh.....v ......*h...... ......h*...... ......hh...... ......hh...... ......hh...... ......*h...... .vvvvvvvvvv... Bonus: ........--+... ......00...... ......0....... *..00001000... ...000.0.0.... ...0.0.l00.... ......20...... ......40...... ......20.....b ......20...... ......20.....! .......2...... ......2....... ......32...... ......22...... ......22...... .......2...... .p.---*.-+.... Level: Capoll Capitalism Bricks: ......f..f.... ....xxfxxfxxx. ...xx.f..f.... ...x..f..f.... ..x...f..f.... ..x...f..f.... ..x...f..f.... ..x...f..f.... ..xxxxfxxfxxx. ......f..f..x. ......f..f..x. ......f..f..xx ......f..f...x ......f..f..xx ......f..f..x. ......f..f..x. ..xxxxfxxfxxx. ......f..f.... Bonus: ......5..5.... ....445445444. ...44.5..-.... ...4..>..-.... ..f...>..-.... ..f...5..-.... ..f...5..5.... ..4...5..5.... ..4{445445444. ......5..5..4. ......-..5..4. ......-..5..44 ......-..5...4 ......5..5..4! ......5..5..4. ......5..5..4. ..4dd45445ddd. ......5..5.... Level: Capoll Revolution Bricks: .....*xx*xx... ...xx*..*..... ..xx.*..*..... ..x..*..*..... ..x..*..*..... ..x..*..*..... ..x..*..*..... ..xx.*..*..... ...xx*xx*xxx.. .....*..*..xx. .....*..*...x. .....*..*...x. .....*..*...x. .....*..*...x. .....*..*...x. .....*..*..xx. .....*..*..x.. ..xxx*xx*xxx.. Bonus: .....*44*d4... ...44*..*..... ..>4.*..*..... ..4..*..*..... ..4..*..*..... ..4..*..*..... ..4..*..*..... ..bd.*..*..... ...d0*d4*444.. .....*..*..44. .....*..*...d. .....*..*...d. .....*..*...d. .....*..*...d. .....*..*...d. .....*..*..44. .....*..*..4.. ..555*55*544.. Level: Capoll Comunism Bricks: .....*d....... ......ddd..... .......vdd.... .......vvd.... .........dd... ......d...d... .....vddv.d... .....d*d..d... ....vd*d..d... ....vddddvd... ...d.dv.dd*... ...d.....dd... ..dd....dddd.. .d*d*ddddvvd*. .ddvvv.....**. .d*........... .d............ .............. Bonus: .............. .......0...... .............. .............. .............. .............. ......50..0... ......5....... ......5....... ......3....... ........-..... ...>.......... ..........+0.. .w.0..+....+.. .}p........... .............. .0............ .............. Level: Capoll Fascism Bricks: ......a....... .....aa....... ....aa..va.... ....a..vvaaa.. ...a...vav.a.. ...a..vvav.aa. ...aa.vaav..a. ....aa*a*v.... .....*aavv.... .....*aaa..... ....vva*aa.... .a..vvav.aa... .aa.vavv..a... ..aavav...a... ...aaav..a.... ....avv..a.... .........a.... ........a..... Bonus: ......p....... .....--....... ....--........ ....-...&p.-.. ...p...&p..-.. ...p....d&.-c. ...&d..dd...c. ....dp.d.&.... ........&..... ......d*-..... .....&d.--.... .d....*...-... .dd.&d.d..-... ..dd.d>...c... ...d-d>..d.... ....d&>..d.... .........p.... ........p..... Level: Capoll NeoLiberalism Bricks: .............. .............. ......hh...... .....hhgg..... ....hhgggf.... ...hh#gggff... .vhh##ggffg... ..hhhhhhffgg.. ..hgg#ggffgg.. ..hg#ggggggg.. ..hhhhhhgggg.. ..hhggggzegg.. ...hzzggeegg.. ...hhzgge@g... ....hhgg@@.... .....hhg@..... ......hh...... .............. Bonus: .............. .............. ......55...... .....55....... ....55........ ...55.*....... ..55.......... ..555555...... ..5........... ..5.....m..... ..555555...... ..55ppp....... ...5.......... ...55......... ....55........ .....55....... ......55...... .............. Level: Capoll NeoLiberalism Bricks: .....****..... ....**gg**.... ...**ghhg**... ...*gghhhg*... ..**hhhhgg**.. ..*ghghhxxg*.. v**ghghhxxg**v v*gghhhhxggg*v **ggyghhhhgg** *ggggghhyhggg* **gggyhhyhgg** v*ggyyhhghgg*v vv*gyyhhyhg**v vv*gyyhhhhg*vv vv**yhhhhg**vv vvv*yghhgg*vvv vvvvvggggvvvvv vvvvvvggvvvvvv Bonus: .............. .............. ......55...... ......555..... ....5555...... ....5-55...... d...5.55.-...d d...5555..-..d ......5555.... ..*-W.55.5.... ..f...55.5.-.. d.....55.5...d dd..-.55-5s..d dd....5555..dd dd...5555...dd ddd..&W5.s.ddd -d-dd.5..d-d-d dddwddwwdddddd Level: Capoll Future? Bricks: .............. .....d..d..... .....d..d..... .....d..d..... .....d..d..... ...d......d... ...dd....dd... ....d....d.... ....dd..dd.... .....dddd..... .............. .............. .............. .............. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv .............. Bonus: .............. .....?..?..... .....g..g..... .............. .............. .............. .............. .............. .............. ......++...... .............. .............. .............. .............. .............. ...d....d.2d.. 0.-...{......! .............. Level: Capoll Our Posible Future Bricks: ......**...... .....****v.... ....******.... ...********... ..**********.. ..***!***!***. .************. .*****hh****** ******ee***!** ***!**hh*!**** .************* .************. ..**!********. ..*****!****.. ...********... ....******.... .....****..... ......**...... Bonus: .............. .............. .............. .............. .............. .....g...g.... .............. ......55...... ......55...g.. ...g..55.g.... .............. .............. ....g......... .......g...... .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/R-World0000664000175000017500000003307412140767201014511 00000000000000Level: riffraff Begin Bricks: h............h h............h h.#ffkkkkff#.h h.#@@kjjk@@#.h h....kjjk....h h....kkkk....h .............. .............. .............. .............. ccccv!v!v!cccc bbbb!v!v!vbbbb aaaaheddehaaaa .............. ffff........jj !!!!ggggeeee!! !!!!ddddiiii!! xxxx........jj Bonus: p............3 .............. ...g?...+??... .............. ......m....... ......--{..... .............. .............. .............. .............. *..w.........* .............j .............. .............. .............. ????........?? .*..........*. .............. Level: riffraff blocks Bricks: !!..aavveecc.. !!..aavveecc.. !@..a##veecc@. !!..aa###!cc.. ..ii.**..#.dd. ..ii.**hh.#dd. ggii.#*hh.#dd. ggii.#*hh.#dd. gg...#.hh.kk.. gg..#...iikk.. ff##.ff#iikkbb ffjj.ff.#ikkbb ffjj.@fd#i..bb ffjj.ffdd###bb ..jjxx.dd..gg. ....xx.dd..gg. ....xx.....gg. ....xx.....gg. Bonus: ?*..?*..?*?*.. .............. .5.....m....5. .............. ..?*.?*....?*. .......?*..... ?*............ .............. ..........?*.. ........?*.... ?*...?*.....?* ..?*.......... .......?*..... .............. ....?*.....?*. .............. .............. .............. Level: riffraff colors Bricks: .ddddddvvvvvvE .ddddiigggggvE .ddddiigggggvE ..vvvgggggggvE E.hhhffffgggvE E.hhhffffgggvE E.hhhffffgggvE E.hhhffffgggvE E.hhhffffgggvE E.hhhffffgggvE E.hhhffffgggvE E.hhhhhhhvvvvE E.hhhhhhhvvvvv E.hhhheeeddddv E.hhhheeeddddv E.vvvvdddddddv EEEEEvdddddddv EEEEEvdddddddv Bonus: .*....*.....g. .....?.....*.. .*.2..?....... ..........2... ..*.....?..... .............. ...2.....f.... ......33...... ......33..2... ...c.......... .....?.....*.. .............. .............. ....2.?.....*. ..*.....?..... ..........2... .............. ......*.....*. Level: riffraff girders Bricks: ..j..j#..k..kk bbbbbb#bbbbb#b .i.......i.i#d bbb#bbbbbbbb#. ggg#....h..h#. #bb#bb#bbbbb#. #.e#.d#....f#d #e.#..#.....#. #..#d.#f....#. #bb#bb#.....#. #....f#bb#bb#d #.....#gg#.e#. #.f...#gg#bb#b #bbbbb#bb#i..i #h....h.h#.... #hh..h..h#.... #bbbbbbbb#bbbb .............. Bonus: ..?..!...?...! W....W.W...W.W .?.......?.!.! W.W.Wm.....W.. gg?.....?..!.. .WW.WW.W...W.. ..!..!.....!m{ .?.m.......... ....?..?...... .WW.WW........ .....!mWW.WW.? m......g?..?.. ..?....gg.WW.W .W...W.WWm?..! .3....?.3..... .3?..3..3..... .W......W.W..W .............. Level: riffraff girders 2 Bricks: .............. .............. .............. ....cccccccca. ....ak.....ka. ....a.......a. ....a.......a. ....ak.....ka. .ccccccccccaa. .ak.kak..kaka. .a...a....a.a. .a...a....a.a. .ak.kak..kaka. .aaaacccccccc. .ak.ka........ .ak.ka........ .ccccc........ .............. Bonus: .............. .............. .............. ....d......... .....?........ .............. .............. .....j........ ....44....4.~. ...........w.. .............. .............. .........-.... .<...4........ ..>........... .............. .............. .............. Level: riffraff bullseye Bricks: ###........### ##..........## #............# .............. ...dddddddd... ..ddvvvvvvdd.. ..dvvddddvvd.. ..dvddvvddvd.. ..dvdv!!vdvd.. ..dvdv!!vdvd.. ..dvddvvddvd.. ..dvvddddvvd.. ..ddvvvvvvdd.. ...dddddddd... .............. .............. .............. .............. Bonus: 5............5 .............. .............. .............. ...p...?...... ..........?... .....?........ .............. ...j..44...?.. ..?...44...... ........&g.... ...W.......... ..1........1.. ...f..->...... .............. .............. .............. .............. Level: riffraff lines Bricks: .............. .............. .v.......v.... .h.......hv.v. .a.......a..h. .#.......#..a. .#...v...#..#. ...v.h......#. ...h.a........ ...a.#...v.... ...#.#...h.... ...#.....a.... .v.......#..v. .h.......#..h. .a..........a. .#..........#. .#..........#. .............. Bonus: .............. .............. .?.......?.... .3.......3m.?. ............3. .............. .....?........ ...?.3........ ...3.......... .........?.... .........3.... .............. .?..........?. .3..........3. .............. .............. .............. .............. Level: riffraff separate Bricks: hhh#.....d.... hhh#e.fhk.j.!i hhh#.!j..zfgd. hhh#k..eg*...k hhh#fhz.j.k!.g hhh#..*i!...i. hhh#.id..eh.zf hhz.z.kgd..j*. ###.########## ....ee#ffff#ii .f..ie#eeee#ei fff#ie#eeee#ei fff#ie#eeee#ei f.f#ie#eeee#ei f.f#ieeeeeeeei fff#iiiiiiiiii ...########### .............. Bonus: 222........... 222....2...... 222........... 2*2.....?..... 222..2.......? 222........... 222.......2... 22..m......... .............. .....w.......l .*......&m.... .............. ....g.......~. .............. ..+....g.+?... ....m......... .............. .............. Level: riffraff remote Bricks: ##..........## #....zzzz....# kkk..z**z..kkk kkk.EzzzzE.kkk h...Ez**zE...h h..!EzzzzE!..h h.!!Ez**zE!!.h h.EEEzzzzEEE.h iiii......iiii iiii......iiii ffff......ffff ffff..@@..ffff .###vv@@vv###. jj*ggg..ggg*jj jjjgg#..#ggjjj jjzg#....#gzjj j*##......##*j #*..........*# Bonus: 5............5 .............. ?............? .&W........W.. 2............2 2............2 2..*......*..2 2............2 ...*......*.{. .!............ .............. ..{...??....c. ......??...... .....m..m..... ..<.......>... .............. f............f .............. Level: riffraff spiral Bricks: vvvvvvvvvvvvvv .............. .#g##@##@####. .#k#hfeddigj#. .#d#d###@##d#. .#f#g#gcjf#h#. .#e#i@e##k#f#. .#j#e#f*#h#g@. .@c#f#*f#c#e#. .#i#c#z*#e#i#. .#h@i#*f#i#c@. .#e#g#f*#d@k#. .#f#d#@##g#d#. .#g#hedghe#j#. .@d###@####e#. .#afcaaaecaf#. .#######@##@@. .............. Bonus: .............. .............. ...m.......... ..........4... ............m. ........?..... ..m...4....... ....s......... ..b........*.. ..g..m...*.... .......?...... ....4.5.m..4.. .m..?.....m... ....+....f.b.. .............. ..?.*jw...-... ............m. .............. Level: riffraff groups Bricks: kkkkkkkjjjjjjj kkk*kkkj*jjjjj kkkk*kkj*j#jjj k*k#**kj#jj*jj #k**kkkjjjj*jj iiiiiiih*h**hh i*i**iih*hh**# iii*#i*h*hhhhh iiiiii*hhhhhhh #g##g*gf##f### g****ggf**f**f gggg**gff*f**f ggggg**ffff**f d#*ddddeeee**e dd*d#ddee#eee* dd*dd*d**eeeee ddd****e***eee .............. Bonus: !....{....5... ..>.........4. 5..4..fs.....j ........*.3... ..g.p..c.....< .m..d.-..W+... .....0.1b.~... ........2?}... ...lj..&.....! .............. ..*.+.p...{.w. &............. ..w1.W..>.g... d.......c..... .g.?s2}f.m<... 0....b3..-...~ ............l. .............. Level: riffraff platforms Bricks: .............. .............. ........a..... .......hhh.... .......h*h.... ..g....###.... .fff.......... .f*f.......... .###.......... ............k. .....e.....jjj ....ddd....j*j ....d*d....### ....###....... .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ........4..... .............. .............. ..3........... .............. .............. .............. ............2. .....5........ .............. .............. .............. .............. .............. Level: riffraff drip drip Bricks: .#.......###.. c#b.......#... c#b......ccccc c#bdd...cccccc c#bddd..cccccc .#..dd..cc.... .....d.####... ....dd..hh.... ....d...hh.... ....d...hh.... .....d...h.... .....d...h.... ....dd..h..... ....d...h..... .....d..hh.... ....d....h.... .............. .............. Bonus: .............. .............. .............. c........3...l ..&..*........ ........??.... .............. .........g.... ....3......... .............. .............. .....>........ .............. .............. .............. .............. .............. .............. Level: riffraff flow Bricks: ..gg.......... ..gg.......... ggggggggg..hhh g##ggg##g..vvv g.#####.g..... g.......g..... g.......g..... g.....gggggg.. g.....g####g.. g.....g....g.. g.....g....g.. ggggggggg..g.. gg######g..g.. gg......g..g.. gg....gggggggg gg....g######g gg....g......g gg....g......g Bonus: .............. .............. ...........333 ...333........ .............. .............. .............. ........?..... .............. .............. .............. b..*..?....... .............. .............. ........?..?.. .............. .............. .............. Level: riffraff clock Bricks: .............. .....cccc..... ....chhhhc.... ...chhhahhc... ..chhhhahhhc.. .chhhhhahhhhc. .chhhhhahhhhc. .chhhhhahhhhc. .chhhhhahhhhc. .chhhhhahhhhc. .chhhhahhhhhc. .chhhahhhhhhc. ..chhhhhhhhc.. ...chhhhhhc... ....chhhhc.... .....cccc..... .............. .............. Bonus: .............. .............. ......gW...... ......j-c..... ...mf0...1.... ...d..b}..{l.. .~+.!<&..42... ....W.sw..*... ....3.>.?..5.. .bj?.......... ..&.f...!g<... ..-w..d*..3l.. ...0}m.2c..... ........{4s... ....~1+....... ........>..... .............. .............. Level: riffraff diagonal Bricks: eeddxx##****** !!eeddx*##**** kk!!eeddxx##** jjkk!!eeddxx## iijjkk!!eeddxx hhiijjkk!!eedd gghhiijjkk!!ee ffgghhiijjkk!! ##ffgghhiijjkk vv##ffgghhiijj aavv##ffgghhii bbaavv##ffgghh ccbbaavv##ffgg .............. .............. .............. .............. .............. Bonus: .............. *?............ ..*?.......... ....*?........ ......*?...... ........*?.... ..........*?.. 00..........*? ..00.......... ....m0........ ......m0...... ........00.... ..........00.. .............. .............. .............. .............. .............. Level: riffraff xxx Bricks: .............. z*..!z*....... !#..#!#...*z!. #!..!#!...#!#. ..........!#!. .............. .......!z*.... .!z*...#!#.... .#!#...!#!.... .!#!.......!z* ....*z!....#!# ....#!#....!#! ....!#!....... ........!z*... *z!.....#!#... #!#.....!#!... !#!........... .............. Bonus: ....*......... W...?W......&. 1W..W2W....W?. W?..?W?...W4W. ..........?W?. .......p...... .w.....?W..... .?W....W3W.... .W0W...?W?.*.. .?W?*.*......<..<...>. .............. ..dddddddddd.. .............. .............. ...3......3... .............. W............W W............W W............W .cws-g&&g-swc. .............. .............. Level: riffraff green Bricks: .!!!!....!!!!. .!!!!....!!!!. .!!!!....!!!!. .!!!!....!!!!. .#!!#....#!!#. .#ff#.dd.#ff#. .#ff#.dd.#ff#. .#ff#....#ff#. .#ff#....#ff#. .#ff#....#ff#. .#zzzzzzzzzz#. .#yyyyyyyyyy#. .###cxhhxc###. ....cxhhxc.... ....cxxxxc.... ....c####c.... .............. .............. Bonus: w....*..*....w w............w w............w w....*..*....w .............. ......**...... ......**...... .............. ...5......5... .............. .............. ....b....b.... ......44...... ......44...... .............. .............. .............. .............. Level: riffraff square Bricks: .............. .............. zzzzzzzzzzzzzz zkkkkkkkkkkkkz zkjjjjjjjjjjkz zkjiiiiiiiijkz zkjiggggggijkz zkjigffffgijkz zkjigfhhfgijkz zkjigfhhfgijkz z************z zkjiggggggijkz zkjiiiiiiiijkz zkjjjjjjjjjjkz zkkkkkkkkkkkkz zzzzzzzzzzzzzz .............. .............. Bonus: .............. .............. .............. .0..........0. ..1........1.. ...2......2... *...3.**.3.... .....4??4..... .....?55?..... .&&&&?55?&&&&. >>>>?4dd4?>>>> ....3....3.... ...2......2... ..1........1.. .0..........0. w.wbwbwbwbw.w. .............. .............. Level: riffraff foo Bricks: kk...v....v.kk kk#....v...#kk kk#i##..##i#kk dd##hggggh##dd ..v@ghgghg@v.. ..v@gghhgg@v.. ..v@gghhgg@v.. ..v@ghgghg@v.. dd##hggggh##dd ...vvv##vv..v. vv...c..c....v ..v.#..v.#.v.. v..#......#... ..#..v..v..#v. .#...v......#. ....v...cvc... v.vc...v.....v .............. Bonus: .............. .............. ...m......m... .....????..... ..m.?....?.m.. ....?.33.?.... ....?.33.?.... ....?....?.... bb...????...bb .............. .............. .......w...... .............. .....w..w..... .....w........ ....w....ww... w.w....w.....w .............. Level: riffraff stairs Bricks: !#..........#! #*....h.....*# ..h...#h...... ..#h...#h..... ...#h...#h.... ....#h...#h... .....#....#... ............h. ...........h#. ......h...h#.. .....h#..h#... ....h#..h#.... ...h#..h#..... ..h#...#...... ..#........... .............. .............. .............. Bonus: *............m .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: riffraff green 2 Bricks: .............. .............. .............. .............. .fzf......fzf. .fzf......fzf. .fzf......fzf. .fzf......fzf. .fzf......fzf. .fzf......fzf. .fzf......fzf. .fzf......fzf. .............. .............. ....ffffff.... ....xxxxxx.... ....ffffff.... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ....******.... .............. .............. lbreakout2-2.6.5/client/levels/Twilight0000664000175000017500000003556012140767201015020 00000000000000Version: 1.10 Level: Twilight Bomb Klaus Bricks: c*cc**c*c*c*cc c*cc*c*cc*cc** cc*c*c*cc*ccc* cc*c*cccc*c**c c*cc*c*cc*c**c c*cccc*c*c*cc* .............. .............. .............. @!@!@!!!!@!@!@ .............. .............. .............. .............. .............. .............. .............. .............. Bonus: ..cb?.~.b?g.5b +W.~.f.5+~cf.. f5W.?..b...b5. ..?.?+..gW+.?. b5c..c.5..5..+ ...+...b.~..f. .............. .............. .............. .w...g>>b...w. .............. .............. .............. .............. .............. .............. .............. .............. Level: Twilight Boooom on Bricks: ############## @.@..#d#...... ....#ddd#.*.@. .@.#ddddd*.... ...#*ddd*#.@.@ ..#cc*d*dd#... @.#cdd*ddd#.@. ..#d*****d#... ..#ddd*ddd#@.@ .@#dd*d*dd#... ...#*ddd*#..@. ...#ddddd#.... @...#ddd#..@.@ .....#d#...... ......#....... ************** .............. .............. Bonus: .............. ......5....... .....555...... ....m......... ......w.l..... .............. .............. .............. .............. ...m.....5.... ......w....... ......5.m..... .............. ......5....... .............. 2f.s2.f.2df2.s .............. .............. Level: Twilight Cause I'm TNT Bricks: zzzzzzzzzzzzzz z*z*z*zz*z*z*z zvzvzvzzvzvzvz .............. .............. .############. ..v.v.vv.v.v.. .d.d.dddd.d.d. ...v.v..v.v... .v..v.vv.v..v. .............. ...d.d.....d.. ..d.d...dd..d. .....ddd..d... .ddd.dd...dd.d .............. .............. dddddddddddddd Bonus: 5...?.55...?l5 .............. ..?......?.... .............. .............. .............. ..?.2..2...... ...?.+....g... .............. .w.....s...... .............. ...c.p........ ..2.g......... .......2..c... ...........2.. .............. .............. .fd..f.d..f..d Level: Twilight Catch me, if you can Bricks: .............. .............. .....#.#...... ....##.##..... ...###c###.... ....##.##..... .....#.#...... .............. .............. .............. .............. ************** .............. ************** .............. ************** .............. ************** Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. c>c>c>l>c>c>c> .............. ddddd>5>dddddd .............. dd>dd>5>dd>ddd .............. dddddb5bdddddd Level: Twilight Climb up... Bricks: ddd.......*d@. dd*.!.....d#.. d*d....!..#... *dd.#....#.... ddd#....#..... dd#....#.***** d#....#.!*ddd* @....#...***** .!............ ......!....... .............. .......#.....@ ..!...#.....#. .....#..!..#.. ....#.....#... ...#.....#.... ..#.....#..... @#............ Bonus: ..........??.. ....m.....?... .......w...... .............. .............. 55............ 5.......+.>5>. .............. .5b...b....... ......+....... .............. .............. .bs........... ........wb.... .............. .............. .............. .............. Level: Twilight Hommage to Ultima online Bricks: ...hdddddh.... ...hhdddhh.... .##hhdddhh##.. ...hhdddhh.... ...hhdddhh.... ...hhdddhh.... .##hhdddhh##.. ....hhdhh..... ccccchhhcccccc ....hhdhh..... ...hhdddhh.... ...hhdddhh.... .##hhdddhh##.. ...hhdddhh.... ...hhdddhh.... ....hhdhh..... .....hhh...... ......h....... Bonus: ...W.?5.lw.... ....W......... .22.....b.22.. ...>.p.p...... ...{?...??.... .....s........ .22.b..W{.22.. ......?.d..... .<>..5+5..><.> .............. ...c>d.s.c.... ...b...?...... .22..{...?22.. ...+Wjcb.+.... ....?...>..... ........c..... .............. ......w....... Level: Twilight Faster ! Bricks: @@@@@@@@@@@@@@ jjjjjjjjjjjjjj jdddjdjjdjdddj jdjjdjddjdjdjj jdjjdjddjjjdjj jddjdjdjdjjdjj jdjjdddjjdjdjj jdjjdjddjdjdjj jdjjdjdjdjjdjj jjjjjjjjjjjjjj .............. .............. vvvvvvvvvvvvvv cccccccccccccc bbbbbbbbbbbbbb aaaaaaaaaaaaaa .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ......?....... ......l....... b.g...5....g.b ......w....... .............. .............. &&&&&&&&&&&&&& &&&&&&&&&&&&&& >>>>>>>>>>>>>> +>>>+>>>+>>>+> .............. .............. Level: Twilight The Finals Bricks: .....j##j..... ....jjjjjj.... ...jj##jjj#... ...j####j##... ..#j####j###.. ..#j####j###.. ..jj!##jjj##.. ..jjjjjjjjjj.. ..#jjj##jjj#.. ..##j####j##.. ..##j####j##.. ..##j####j#j.. ...jjj##jjj... ...jjjjjjjj... ....jjj##j.... .....j###..... .............. .............. Bonus: .............. ......?*.?.... ...??..?...... .....55.+.5... .....55.?.55.. .....55...55.. ...?...2.?.... .....?22...... .....w...?.... ..5.p.55...5.. ..5...55...5.. ..5...55.+.... ....??........ ...?...?.?.... .............. .......55..... .............. .............. Level: Twilight A plus! Bricks: ffffff##ffffff fffffc##cfffff fffff####fffff f#ffccccccff#f f#ffccccccff#f ###f##ff##f### f#fcccffcccf#f f#fcccffcccf#f fff##ffff##fff ffcccffffcccff ffcccffffcccff ff##ffffff##ff fcccc####ccccf fcccc####ccccf f##cc####cc##f cccffffffffccc cccffffffffccc ##ffffffffff## Bonus: m....5..5....m .???.l..l.???. .............. 5.?.*c++c*.?.5 5.?...!!...?.5 .5....??....5. ?.?sbc??cbs?.? ?.?.+.??.+.?.? ......??...... ..?...w.>>.w...> ......??...... ?*b?c0000c?b*? ?...+0000+...? ...>p0000p>... .<..........<. 5.w........w.5 .............. Level: Twilight 10 Bricks: ##..........## .............. !............! ...gg..gggg... ##.gg..gggg.## ...gg..gzzg... !..gg..gzzg..! ...gg..gzzg... ##.gg..gzzg.## ...gg..gzzg... !..gg..gzzg..! ...gg..gzzg... ##.gg..gzzg.## ...gg..gggg... !..gg..gggg..! .............. ##..........## .............. Bonus: .............. .+..........+* .............. *..c...w?.?... ....?...?c.... .+.w...?l.?.+. ...gc..b.b.... ...?p......... .......???w... .+.?......*.+g ...?....j?.... ...c.....?g... ...b...w..c... g+..w.......+. ........??.... *............* .............. .............. Level: Twilight Expect no Help! Bricks: @@@@@@@@@@@@@@ @............. @.eee.eee.eee. @.e!e.e!e.e!e. @.eee.eee.eee. @.eee.eee.eee. @.e!e.e!e.e!e. @.eee.eee.eee. @.eee.eee.eee. @.e!e.e!e.e!e. @.eee.eee.eee. @.eee.eee.eee. @.e!e.e!e.e!e. @.eee.eee.eee. @.eee.eee.eee. @.e!e.e!e.e!e. @.eee.eee.eee. @............. Bonus: 55555555555555 5............. 5..0....0...0. 5.........00.. 5..0.......... 5.0.0.......0. 5.0....0....0. 5.....0....... 5..0.......0.. 5..?..0?...?.. 5.0...0...0... 5.0.......00.. 5......0...... 5.0.0.......0. 5..0.......... 5......00.00.. 5...0.....0... 5............. Level: Twilight Fun in the Sun! Bricks: hhhh..h....... hhhhhh........ hhhh.........i hhh.h.......gi hhh..h.....igg hh.h..h...giig hh..h....iig.i hh...h...gi..# h.h......i...# h..h.........# h............# .............# .............# .............j ............j# .......jjjjj.# ......j.j..j.# gggggyyyyyyyyy Bonus: ?..c..l....... wb.j?......... .>-........... ?...........g< ..?..?......fg .{........gb.g >...?.....?g.p .?.......g.... .............. .............. c............. .............. .............. .............w .............. .......-..-?.. ........?..+.. .f.f.......... Level: Twilight Just drink it! Bricks: j....eeee....j j....evve....j ##...@jj@...## j....@jj@....j j....@jj@....j j##.@jjjj@.##j j...@hhhh@...j j...@hhhh@...j j.##@hhhh@##.j j...@hhhh@...j j...@hhhh@...j j##.@hhhh@.##j j...@hhhh@...j j...@hhhh@...j ##..@hhhh@..## j...@hhhh@...j j....@@@@....j j##........##j Bonus: +............+ ......mm...... ......gg...... c.....gg.....c .............. w............w b....??......b b......??....b b.......?....b b....?.......b b.....?......b w......?.....w ........?..... .....?........ .......?...... ......?....... .............. .............. Level: Twilight Feed the Donkey! Bricks: ee@@@@@@@@@ee@ eee.......eee@ eee.......eee@ @.ee.....ee..@ @..e.eee.e...@ @@@@eeeee@@@@@ @..eeeeeee...@ @..ejjejje...@ @..ejjejje...@ @..eeeeeee...@ @..eeeeeee...@ @..eeeeeee...@ @..eeeeeee...@ @@@@edede@@@@@ @...eddde....@ @....dde.....@ @...ddd......@ @@@@dd@@@@@@@@ Bonus: ...........mb. ...........+.. mb............ ..........*... .............. ....w..*...... .....+........ ...p.......... .....l.b...... .............. .......+.w.... .............. ...b.....b.... .....*j....... ....w......... .....+........ .............. .............. Level: Twilight Try one more ball! Bricks: *z#jjjjjjjjjjj *z#jjjjjjjjjjj *z#j#########j *z#jaaaaaaaa@j *z#jaaaaaaaa@j *z###########j *zjjjjjjjjjjjj *zjjjjjjjjjjjj *z###########j *z#jdddddddd@j *z#jdddddddd@j *z#j#########j *z#jjjjjjjjjjj *z#jjjjjjjjjjj *z#j#########j *z#jhhhhhhhh@j *z#jhhhhhhhh@j *z############ Bonus: bb.??????????? bb............ bb............ bb............ bb............ bb............ bb............ bb............ bb............ bb............ bb............ bb............ bb.!!!!!!!!!!! bb.{{{{{{{{{{{ ww............ ww............ ww............ ww............ Level: Twilight No Speed no fun! Bricks: .v...v*..vv..v vvvv....v...v. ..**.*vv.v*.v. .vv*v*v.*..*vv *..v..v*.v.v.. ..vvv..v..*.v* ..v.v*.v.v...* ..vv.*v.*.v*.. .*vvv......... v*...v...v.... ..vv..*v.vv.vv .v.v..*..v.*.. .....*.v*..vv. v**vv*..*.vvv. ..*.v...vv...v .v*..vvvv*.vvv vvvvv.......vv .vv........... Bonus: .>...>d..>>..> >>>>....>...>. ..dd.d>>.>+.>. .>>d>d>.d..d>> d..>..>d.>.>.. ..>>>..>..d.>l ..>.>d.>.>...d ..>>.d>.d.>d.. .+>>>......... >d...>...>.... ..>>..d>.>>.>> .>.>..d..>.d.. .....d.>d..>>. >dd>>d..d.>>>. ..d.>...>>...> .>d..>>>>d.>>> >>>>>.......>> .>>........... Level: Twilight Try two more balls ! Bricks: ghhhhhhhhhhh#g hhhhhhhhhhhh## hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh Bonus: mbbbbbbbbbbb55 bbbbbbbbbbbb55 bbbbbbbbbbbb55 bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb >>>>>>>>>>>>>> wwwwwwwwwwwwww Level: Twilight V minus! Bricks: ##ffffffffff## cccffffffffccc cccffffffffccc f##ffffffff##f fcccffffffcccf fcccffffffcccf ff##ffffff##ff ffcccffffcccff ffcccffffcccff fff##ffff##fff fffcccffcccfff fffcccffcccfff ###f##ff##f### ffffccccccffff ffffccccccffff fffff####fffff fffffc##cfffff ffffff##ffffff Bonus: ..l..c.....l.. 5?m........m?5 .?..........?. .............. ..?.s0000cw?.. ..?.j0000!.?.. c............. ...?...c..?.c. ..w?......?..p .............. ....?0..0?+... .?..?0..0?..?. ......c....... .?..+????...?. ..p..????..... .............. c............. .............. Level: Twilight Not as hard as it looks ! Bricks: cccccccccccccc cccccccccccccc cc##########cc cc....vv....cc cc....vv....cc ######vv###### cccccccccccccc cccccccccccccc cc##########cc cc....vv....cc cc....vv....cc ######vv###### cccccccccccccc cccccccccccccc cc##########cc cc....vv....cc cc....vv....cc ######vv###### Bonus: ...*..ll..*... .*...*mm*...*. .b..........b. .*....55....*. ......bb...... .............. ccc*ccbbcc*ccc c*ccc*cc*ccc*c .............. .*....ss....*. ......bb...... ......<<...... ccc*ccbbcc*ccc c*ccc*ww*ccc*c .............. .*....++....*. ......ww...... .............. Level: Twilight Deja Vu? Bricks: c*c#c*c#c*c#c* c*c@c*c@c*c@c* c#c#c#c#c#c#c# c#j#c#c#j#c#c# c@j#c@c#j@c#c@ c#j#j#c#j#j#c# c#j#j#j#j#j#c# c@j#j@j#.@j#j@ j#j*j#j*.#j*j# j#j*j#j*.#j*j# j@.#j@j#.@j#j@ j#.#j#j#.#j#j# j#.#j#.#.#j#j# j@.#j@.#.@j#j@ j#.#.#.#.#.#j# j#.#.#.#.#.#j# .*.@.*.@.*.@j* .*.#.*.#.*.#j* Bonus: ?.?.?m?.?m?.?. ?w?.?.?.?.?.?w ?.?.?.?.?.?.?. ?.f.?.?.f.?.?. ?.f.?.?.f.?.?. ?.f.f.?.f.f.?. ?.f.f.f.f.f.?. ?.f.f.f...f.f. f.flf.fl..flf. f.f5f.f5..f5f. f...f.f...f.f. f...f.f...f.f. f...f.....f.f. f...f.....f.f. f...........f. f...........f. .p...+...w..f+ .w...w...w..fw Level: Twilight You like chaos? Bricks: ...#e#e#e#.... dddddddddddddd ffffffffffffff ....#ccc#..... ....#c*c#..... ...#######.... .............. #.#.#.##.#.#.# gggggggggggggg .#ccc#..#ccc#. .#c*c#..#c*c#. .#####..#####. hhhhhhhhhhhhhh #j#j#j#j#j#j#j ************** .............. .............. .............. Bonus: ....!.l.!..... .............. bbb..m..m..bbb .....555...... .....>>>...... .............. .............. .............. cccccccccccccc ..???....???.. ..?.?....?.?.. .............. cccccccccccccc .............. fwfwfwfwfwfwfw .............. .............. .............. Level: Twilight Recursion ! Bricks: aaaaaaaaaaaaaa adddadddadddad adddadddadddad aaaaaaaaaaaaaa eeaeeeaeeeaeee eeaeeeaeeeaeee aaaaaaaaaaaaaa .............. .............. .............. .....j........ ....jjj....... .....j........ .............. .............. .............. ......deed.... ......deed.... Bonus: ?????????????? ?????????????? j?????j???j??j ??j??????????? pp..>.b.>pl.b. ..b..>......b. ...b....b....> .............. .............. .............. .....w........ .....w........ .............. .............. .............. .............. .......++..... .............. Level: Twilight Bullseye ! Bricks: .....aaaa..... ....a####a.... ...a#eeee#a... ..a#ehhhhe#a.. .a#eh....he#a. a#eh.#jj#.he#a eeh.#****#.hee hh.#j*cc*j#.hh ...@j*cc*j@... jj.#j*cc*j#.jj a#j.#****#.j#a .a#j.#jj#.j#a. ..a#j....j#a.. ...a#jjjj#a... ....a#@@#a.... .....aaaa..... .............. .............. Bonus: .....c..+..... .....0000..... ...+0...b0s... ...0.wb...0... ..0?s....+?0.. ?0...0550...0c ..c.0....0.... .+.05.ll.50.w. ...05.mm.50... s..05.++.50.b. .0..0....0..0s .b0..0550..0.. ..+0.....j0... ....0c.?.0+... .....0000..... ......w.s..... .............. .............. Level: Twilight No sun at all! Bricks: bcEEEEEccabbbc bcEaabbbcEbbcc bbEaaEEbEEbbca cbccccEaEbbcEE caEacg.abbcEEc .cag...g.ccaac ......g...cccc .g.g.gg..gg... g...gg.g...g.. g.g...g.g..g.g ....g...gg..g. g.g...g...g.g. g....g.g.g...g gg.g....g..g.g ..........g.gg .g.gg.g.g..... .gg.....ggg.g. .gg.g.g..g.... Bonus: ?.........???. ?..?????..??.. ??.??..?..??.? .?.....?.??... .?.?...???.... ..?........??. ......?....... .............. ?...??.....?.. ..?........... ........??..?. ?.?...?....... ?......?.?...? ?.......?....? ..........?..? .?.??.?....... ..?.....??.... .?............ Level: Twilight Snake! Bricks: .............. .............. ..E#E#E#E#E#E. ..#.........#. ..E.........E. ..#..#####..#. ..E..#!*##..E. ..#..#.#*#..#. ..E..#e#*#..E. ..#..#e#*#..#. ..E..#e#*#..E. ..#..###*#..#. ..E.....*#..E. ..#......#..#. ..E#E#E#E#..E. ............#. ............E. #E#E#E#E#E#E#. Bonus: .............. .............. .............. .............. .............. .............. ......mw...... ......m.w..... ......5....... ......5....... ......5....... .............. .............. .............. .............. .............. .............. .............. Level: Twilight Cya ! Bricks: vvvvvvvvvvvvvv vvvveevvvvvvvv vveeevvvvvvvvv veevvvvvvvvvvv vevvvvvvvveevv vevvvvvvvevvev vevvvvvvvevvev vevevvvveevvev veveevvveevvev vevvevvveevvev vevveevveevvev veevveveeeeeev vveeeevevevvev vvvvveeevevvev vvvvvveevevvev vvvvvvevvvevee vvevveevvvvvve vvveeevvvvvvvv Bonus: 55555555555555 5555**55555555 55***555555555 5**55555555555 5*55555555**55 .*.......*..*. .*.......*..*. .*.*....**..*. .*.**...**..*. .*..*...**..*. .*..**..**..*. .**..*.******. ..bbbb.b.b..b. .....bbb.b..b. ......ww.w..w. ......w...w.ww ..w..ww......w ...www........ lbreakout2-2.6.5/client/levels/WTF0000664000175000017500000004737712140767201013676 00000000000000Version: 1.00 Level: Mench Checkers Bricks: .............. .!.!.!.!.!.!.! @x@x@x@x@x@x@x d............. d.v.v.v.v.v.v. d@.@.@.@.@.@.@ d.v.v.v.v.v.v. d............. @*@*@*@*@*@*@* d............. d.v.v.v.v.v.v. d@.@.@.@.@.@.@ d.v.v.v.v.v.v. d............. @x@x@x@x@x@x@x .............. .............. .............. Bonus: .............. .>.~.>.~.>.~.> .w...........w 5............. 5.d.d.d.d.d.d. 5............. 5.f.f.f.f.f.f. 5............. .b.b.b.b.b.b.b 5............. 5.d.d.d.d.d.d. 5............. 5.{.{.{.{.{.{. 5............. .?.?.?.?.?.?.? .............. .............. .............. Level: Mench PineApple Bricks: @@@ff@@@@ff@@@ @@fyyf@@fyyf@@ @fyffyffyffyf@ fyfxxfyyfxxfyf yfx##xffx##xfy fx####xx####xf x####hhhh####x @###hhhhhh###@ @##hhhhhhhh##@ @#hhxfhhfxhh#@ @#hhfxhhxfhh#@ @#hhhhhhhhhh#@ @#hhhhhhhhhh#@ @#hhhhhhhhhh#@ @#hhhhhhhhhh#@ @##hhhhhhhh##@ @###hhhhhh###@ @@@@@hhhh@@@@@ Bonus: ...55....55... ..5..5..5..5.. .5.55.55.55.5. 5.5.g5pp5g.5.5 .5...b55b...5. 5.....bb.....5 .....llll..... ....~~~~~~.... .............. ..g.b5<<5b.g.. ....5bffb5.... ...WfWWWWfW... .............. .............. ..~~~~~~~~~~.. ...c++gg++c... ....{{gg{{.... .....d>>d..... Level: Mench Bunny Chow Bricks: vxxEEEEEEEExxv .............. ..vv@@xx@@vv.. .v..vEvvEv..v. .....vvvv..... .....@xx@..... xE..@xvvx@..Ex .@.@x*vv*x@.@. .@.@xvvvvx@.@. xE.@xvxxvx@.Ex .@.@xvvvvx@.@. .@..@xvvx@..@. xE...@xx@...Ex ....EEEEEE.... ......vv...... EEE........EEE .............. .............. Bonus: *>b........b>* .............. ..55..>>..55.. .5..5.WW.5..5. .....5WW5..... .....0550..... ~...055550...~ ...05W55W50... ...05555550... ~..055>>550..~ ...05555550... ....055550.... ~.....55.....~ .............. ......dd...... .............. .............. .............. Level: Mench Longhorn Bricks: @@@@@@@@@@@@@@ @v...!!!!...v@ @v...!!!!...v@ @v...@vv@...v@ @v...@vv@...v@ @v...@xx@...v@ @v...@@@@...v@ @vvv......vvv@ @EEv......vEE@ @@Ev......vE@@ @@Ev......vE@@ @@EvvvvvvvvE@@ @@EEEEvvEEEE@@ @@@@@EvvE@@@@@ @@@@@EvvE@@@@@ @@@@@EvvE@@@@@ @@@@@EvvE@@@@@ @@@@@@vv@@@@@@ Bonus: .............. .*..........*. .p..........p. ......55...... .w....55....w. .b....55....b. .b..........b. .ccc......ccc. .............. ...~......~... .............. ...gddllddg... ......ff...... ......ff...... ......44...... ......>>...... ......>>...... ......>>...... Level: Mench Bucket Bricks: *v...@@@@...v* vv..........vv ..vvvvvvvvvv.. ..vvvvvvvvvv.. ..vv!!!!!!vv.. ..vv@!!!!@vv.. ..vv@!!!!@vv.. ..vv#!!!!#vv.. ..vv@!!!!@vv.. ..vv#!!!!#vv.. ..vv@!!!!@vv.. ..vv#!!!!#vv.. ..vv@!!!!@vv.. ..vv#!!!!#vv.. ..vv@!!!!@vv.. ..vvEEEEEEvv.. .............. .............. Bonus: 5g..........g5 g............g ..fb*>.b.*.f.. ...>.......>.. ..........b... ..b........... .....gg...>b.. ...b.g.dd..... .......dw.b... ..{....dd..... ..>>.f>f..>{.. .....~w~...... .....f~f...... ..b........>.. .....5555..... ..{d......d{.. .............. .............. Level: Mench 2 Easy Bricks: vxvxvxvxvxvxvx .............. *!*!*!*!*!*!*@ @*@*@*@*@*@*@* *!*!*!*!*!*!*! @*@*@*@*@*@*@* *!*!*!*!*!*!*! @*@*@*@*@*@*@* *!*!*!*!*!*!*! @*@*@*@*@*@*@* *!*!*!*!*!*!*! @*@*@*@*@*@*@* *!*!*!*!*!*!*@ vvvvvvvvvvvvvv xxxxxxxxxxxxxx vvvvvvvvvvvvvv .............. .............. Bonus: .l.l.l.l.l.l.l .............. *!*!*!*!*!*!*. .............. .............. .............. W.W.W.W.W.W.W. .~.~.~.~.~.~.. >.>.>.>.>.>.>. .b.b.b.b.b.b.b f.f.f.f.f.f.f. .{.{.{.{.{.{.{ dgdgdgdgdgdgd. cccccccccccccc bbbbbbbbbbbbbb cccccccccccccc .............. .............. Level: Mench Time Bricks: EEEE@@@@@@EEEE EEE@vvvvvv@EEE EE@vvv@vvvv@EE E@vvvv@vvvvv@E @vvvvv@vvvvvv@ @vvvvv@vvvvvv@ @vvvvv@vvvvvv@ @vvvvv@vvvvvv@ @vvvvv@vvvvvv@ @vvvvvv@vvvvv@ @vvvvvvv@vvvv@ @vvvvvvvv@vvv@ @vvvvvvvvv@vv@ E@vvvvvvvvvv@E EE@vvvvvvvv@EE EEE@vvvvvv@EEE EEEEddddddEEEE .............. Bonus: .............. ....5>5df*.... ....>*.5555... ..>d.d.fdfd... ...~>..d.~.d.. .>*..>.*{.f~f. .~>d....f...*. ...~>..f.~fd~. .>5.d~.5d.w*.. .d{~.....5d.f. ..d.5>.5.f.d{. .>.>.d~d..f... .{5...5.>{.5f. ..f5f.f5f.f5.. ...d5d5d5dd... ....*g{g*g.... ......{.c..... .............. Level: Mench Layers Bricks: xyzxyzEEEEEEEE @xyzxyzEEEEEEE dexyzxyzEEEEEE gd@xyzxyzEEEEE hgdexyzxyzEEEE jhgd@xyzxyzEEE kjhgdexyzxyzEE fkjhgd@xyzxyzE @fkjhgdexyzxyz @@fkjhgd@xyzxy @@@fkjhgdexyzx @*@@fkjhgd@xyz @**@@fkjhgdexy @*v*@@fkjhgd@x @*vv*@@fkjhgde @*vvv*@@fkjhgd @******@@fkjhg @@@@@@@@@@fkjh Bonus: .p.p.l........ .4???4........ .??!!??p...... 4...??d?...... d.???d???..... ..?.?!!~?.p... pp????4???.4.. ..?4??~????~.. b!d??.???!!?.. bbd!??.?!d4.~p dbb!!~??.!?!?. ~5bb!!?!??.4p? d55bb.4.!.!4d? ~555bbd?p.4d.? d5555bbd.?dd?d ~55555bbd4??pm d555555bb.dddd ~d~d~d~dbbcccc Level: Mench Confusion Bricks: @@@@@@@@@@@@@@ @ve.!!@@!!.ev@ @ze.!!@@!!.ez@ @ze.!!@@!!.ez@ @ze@@@@@@@@ez@ @ze.**@@**.ez@ @ze.**@@**.ez@ @ve.**@@**.ev@ @@@@..@@..@@@@ @v!@g@@@@g@!v@ @!!@.g@@g.@!!@ @!!@g@@@@g@!!@ @!!@.g@@g.@!!@ @!!@g@@@@g@!!@ @@..........@@ @............@ @............@ @............@ Bonus: .............. .b..55..55..b. .l..55..55..l. .<..55..55..<. ...>..WW. .b~.f....f.~b. .!d..>..>..d!. .dd.w....w.dd. .............. .............. .............. .............. Level: Mench Peppermint Bricks: @@@@@@@@@@@@@@ zx...vxxv...xz zx...xvvx...xz @!...@@@@...!@ zx...xvvx...xz @!...vxxv...!@ zx..z@@@@z..xz @!..@yyyy@..!@ zx.!x....x!.xz @!.!x....x!.!@ zx..@.xx.@..xz @!..@....@..!@ zx!x@....@x!xz @z@z@y..y@z@z@ .............. .............. .............. .............. Bonus: .............. .....d55d..... .....5bb5..... .............. d....5bb5....d .....d55d..... d&..?....?..&d .....>....~? .~..........~. !{~{......{~{! .f.f.f..f.f.f. .............. .............. .............. .............. Level: Mench Top Vs Bottom Bricks: EEEEExxxxEEEEE EEEExyyyyxEEEE EEExyzzzzyxEEE EExyzzzzzzyxEE ExyyyyyyyyyyxE xxxxxxxxxxxxxx .....EEEE..... ......vv...... !*!*.@@@@.*!*! !*!*..zz..*!*! .....EEEE..... vvvvvvvvvvvvvv @vvvvvvvvvvvv@ @@vvvvvvvvvv@@ @@@vvvvvvvv@@@ @@@@vvvvvv@@@@ @@@@@vvvv@@@@@ .............. Bonus: .....5dd5..... ....5d..d5.... ...5d....d5... ..5d..<<..d5.. .5dfd>dd>d>~.. ...0f0ff0f0... ....>dddd>.... .....bWWb..... .............. Level: Mench Smiley Bricks: @vvvvvvvvvvvv@ v....iiii....v v...iivviii..v v..iivvvvvi..v v..ivvvvvvii.v v..iv**v**vi.v v..iv**v**vi.v @..ivvvvvvvi.@ v..i.vv@vv.i.v v..i...@...i.v v..i.......i.v v..ii!!!!!ii.v v...i.....i..v v...ii...ii..v v....iiiii...v @............@ .............. .............. Bonus: .************. w....dddd....d w...dd**ddd..d w..dd55555d..d w..d5555555d.d w..p5..p..5p.d w..d5..p..5d.d ...d5555555p.. d..d.55.55.d.w d..p.......d.w d..d.......d.w d..ddbbbbbdd.w d...j.....p..w d...dd...dd..w d....ddddd...w .............. .............. .............. Level: Mench Dark Days Bricks: @zzzzzzzzzzzz@ @.@..vvvv..@.@ @.v..@@@@..v.@ @.v..xxxx..v.@ @.v..xxxx..v.@ @.@..xxxx..@.@ @.z..xxxx..z.@ @.z..x@@x..z.@ @.z..@vv@..z.@ @.z..vvvv..z.@ E.EEEEvvEEEE.E xxxxxxxxxxxxxx ************** yyyyyyyyyyyyyy ************** zzzzzzzzzzzzzz ************** .............. Bonus: .bbbbbbbbbbbb. .............>.. ..>..dddd..>.. ..>..d55d..>.. .....d55d..... ..d..d55d..d.. ..d..d..d..d.. ..d...WW...d.. ..d..WllW..d.. ......WW...... fdddddffdddddf .............. ?{{{{{ff{{{{{? .............. ?>>f>f??f>f>>? dddddddddddddd .............. Level: Mench ???????? Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj xxxxxxxxxxxxxx z.vvvvvvvvvv.z z.vvzzzzzzvv.z z*vvz*zz*zvv*z z.vv@@@@@@vv.z z.v........v.z z.v........v.z z*v........v*z z.v........v.z EEEEEvvvvEEEEE .............. .............. .............. Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?d?d?d?d?d?d?? ?.5555555555.? ?.5.dcdddc55.? ?.5.cddddc.5.? ?.5b......b5.? ?.5........5.? ?.5........5.? ?.w........w.? ?.s........s.? .....>>>>..... .............. .............. .............. Level: Mench Blue Wall Bricks: ExEyExEyExEyEx !x!y!x!y!x!y!x !x!y!x!y!x!y!x !x!y!x!y!x!y!x !x!y!x!y!x!y!x !x!y!x!y!x!y!x ExEyExEyExEyEx ExEyExEyExEyEx @xEyEx@yExEy@x @xEyEx@yExEy@x ExEyExEyExEyEx .v.v.v.v.v.v.v v.v.v.v.v.v.v. .v.v.v.v.v.v.v .............. .............. .............. .............. Bonus: ...d.d.d.d.... WpWpWpWpWpWpWp .}.p.{.p.p.p.p cwc!cwc!cwc!cw +b+b+blblblblb fbfbfbfbmbfbfb .?.{.?.?.?.d.? .?.?.?.?.{.?.? .d.d.d.d.d.d.d .f.{.f.{.f.{.f .w.w.w.w.w.w.w .>.b.~.b.d.>.d f.c.d.c.d.{.f. .j.b.j.b.~.>.j .............. .............. .............. .............. Level: Mench U cant c me Bricks: @@@@@....*vvvv @v......#.*vvv @vv....*...*v# @vvv..#.....*. @vvvv*.....#.v vvvv#.....*.v. vvv*.....#.v.. vv#.....*.v... v*.....#.v.... #.....*.v..... vvv..#.v...... vvv.*.v....... vvv#.v........ vv*.v......... v#.v.......... *.v........... .v............ v............. Bonus: ..........5555 .5........?... ..5....?....b. ...5........?. ....b........> ..........?.>. ...?.......>.. .b........>... b........>.... ......?.>..... 555....>...... 555...>....... 555..>........ 55?.>......... 5..>.......... ..>........... .>............ >............. Level: Mench Off Centre Bricks: c@yyyy@yyyyy@c cE....E.....Ec x.dddddddddd.x x..E......E..x x..@......@..x x....***.....x x....*!*.....x xE...!E!....Ex x@...*@*....@x x...*****....x x..*..!..*...x !!!E..!..E!!!! ...@..!..@.... ......!....... ......!....... .E....E.....E. .@....@.....@. .............. Bonus: l..5......5..l s............s ......*....... ?............? .............. 5....b.b.....5 5.....p......5 .............. .............. !...?.w.?....! w.....d......w ddd...f...dddd ......f....... ......p....... ......f....... .............. .............. .............. Level: Mench Black & Blue Bricks: xcc!E!!!!E!ccx c..!E****E!..c c..!E****E!..c c..!!!!!!!!..c c..!EEEEEE!..c c..vvvxxvvv..c c..vvv@@vvv..c xvvvvv@@vvvvvx EEEEvv@@vvEEEE idefvv@@vvfedi def.vv@@vv.fed ef..vvxxvv..fe f..vEEEEEEv..f ...v......v... ...v......v... @@@v......v@@@ .............. .............. Bonus: bgg........ggb >....~W~W....> >....W~W~....> >............> >............> >.....df.....> >.....dd.....> b.....ld.....b {...g.dd.g.... {dbgg.fl.ggbd{ {db.g.dd.g.bd{ {d..g.ld.g..d{ {..d......d..{ ...d......d... ...m......m... d~dW......Wd~d .............. .............. Level: Mench 8 tiles Bricks: @.!........!.@ @.#........#.@ @.#........#.@ @.!...!!...!.@ @@@!@@@@@@!@@@ ......@@...... .............. .............. @...@....@...@ .............. .............. .............. ..@...@@...@.. .............. .............. .............. .............. .............. Bonus: ..?........?.. .............. .............. ..w...bb...w.. ...b......b... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Mench Rain Bricks: @@*!*@@@@@@@@@ @!!*!*!!!!!!!@ @!*!*!*!!!!!!@ @!!*!*!*!!!!!@ @!!!*!*!*!!!!@ @!!!!*!*!*!!!@ @!!!!@*!*!*!!@ @!!!!@!*!*!*!@ @!!!!@!!*!*!*@ @!!!!@!!!!!zzz @!!!!@!!!!!zzz @!!!!@!!!!!zzz @!!!!@!!!!!zzz @!!!!@!!!!!zzz @@@@@@@@@@@@@z @@@@@@@@@@@@@z .............. .............. Bonus: ..dgd......... .gglf~g{dd.Wb. ..bdlf~g555.-. .5?bdlf~{d*5.. .-d{gdlf~dd.5. .5.5{bdlf~.-*. ..{-..gdlf~... .W?5d..bglf~.. .d55d.-5b{l... ..5W{..W{-.{{{ .*-{..d..55ff> ....-.+-5{.>.W ..*d..d*..-.{f .b..?.d.-*.>>b .............w .............b .............. .............. Level: Mench Rainbow Bricks: zzzz@@@@@@zzzz fghje....ejhgf fghje....ejhgf fghje....ejhgf fg!*E.vv.E*!gf f!*@e.vv.e@*!f !*Eje....ejE*! *@hje....ejh@* Eghje@@@@ejhgE fghje....ejhgf fghje....ejhgf fg!*EvvvvE*!gf f!*@......@*!f !*EvvvvvvvvE*! *@..........@* E............E .............. .............. Bonus: c.c........cf. ?..f......f..d .wb?d....d.b.. ddf.?.....?dw. ......5l....df f.....l5...... ...d?....d.... ..d.......f... ...d.....d.?.. .wdd?....f?d?d d.f!!....!!dfc .fd..b>b<..... b...........db ...bWb>bWb>... .............. .............. .............. .............. Level: Mench 2 Towers Bricks: @@@@@@vv@@@@@@ @@zc@@vv@@cz@@ ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc..vv..cz.. ..zc@@vv@@cz.. ..zc@@@@@@cz.. .............. .............. Bonus: ......55...... ......55...... ...b..55..b... ...d..55..d... ..>?..55..?>.. ...b..55..b... ...d..55..d... ..>?..55..?>.. ...b..55..b... ..{d..55..d{.. ..>?..55..?>.. ...b..55..b... ...d..55..d... ..>?..55..?>.. ..cb..??..bc.. .............. .............. .............. Level: Mench Pyramids Bricks: EEEEEEEEEEEEEE xxxxxxxxxxxxxx @.@.@*@*@.@.@. iiiiiiiiiiiiii iiiiiiiiiiiiii f@ggggccgggg@f zf@gggccggg@fz ff*@*gccg*@*ff fzff@gggg@ffzf fffff@..@fffff zfzff....ffzfz fffff@..@fffff fzff@....@ffzf ff*@......@*ff ff@........@fz f@..........@f @............@ .............. Bonus: .............. m.>.>m..>m..>m .............. .b..b?..b?.b.. ?.d.d..d..d.d? .......... .............. ??.??..>.????? .............. .~~~~.c..~~~~. .............. .......>...... wwwww....bbbbb jddjj.>..5j555 .............. .............. .............. .............. Level: Mench Get up There Bricks: x@x@ffffff@x@x .@.@ffffff@.@. .@.@ffffff@.@. x@x@ffEEff@x@x .@.@!!!!!!@.@. .@.@!v**v!@.@. x@x@!!!!!!@x@x .@.@EExxEE@.@. .@.@vvvvvv@.@. x@x@......@x@x .@.@......@.@. .@.@..EE..@.@. x@x@......@x@x f@f@......@f@f f@f@EE..EE@f@f .............. .............. .............. Bonus: l............l ....bbbbbb.... ....W.WW.W.... b.b.ww..ww.b.b ....ffffff.... ....!d..d!.... w.b.bf!!fb.b.w ......bb...... ....g>g>g>.... >.>........>.> .............. .............. d.d........d.d f.c........c.f f.f........f.f .............. .............. .............. Level: Mench The Hole Bricks: ........x.x.x. ..@x.x.x.x.x.x ..E.x.x.x.x.x. ..@x.x.x.x.x.x ..E.x.x.x.x.x. ..@x.x.x.x.x.x ..E.x.x.x.x.x. ..@x.x.x.x.x.x ..E@E@E@E@E@E@ .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: ........>.5.b. ...5.5.5.5.5.5 ....5.5.b.5.5. ...b.>.?.5.>.5 ....5.5.5.b.5. ...5.5.c.5.5.5 ....5.b.5.5.5. ...>.5.5.b.5.5 .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Mench Green Hell Bricks: xxxxxxxxxxxxxx z@@@@@yy@@@@@z z.f.f.yy.f.f.z z.f.f.yy.f.f.z z@@@@@yy@@@@@z z...x@yy@x...z z.@.xf@@fx.@.z z...x@yy@x...z z@@@@@yy@@@@@z z.f.f.yy.f.f.z z.f.f.yy.f.f.z z@@@@@yy@@@@@z xxxxxxxxxxxxxx .............. .............. .............. .............. .............. Bonus: 001005cc500100 c............c g.b.b....b.b.g ..b.b....b.b.. .............. ....w.55.w.... l...>l..l>...l ....w.55.w.... ......**...... g.b.b....b.b.g d.b.b....b.b.d d.....ff.....d +>>>>>++>>>>>+ .............. .............. .............. .............. .............. Level: Mench How the F@#$ Bricks: .**.vvvvvv.**. .E!!!!!!!!!!@. .@!********!E. .E!*!!!!!!*!@. .@!*!****!*!E. .E!*!*!!*!*!@. .@!*!*!!*!*!E. .E!*!****!*!@. .@!*!!!!!!*!E. .E!********!@. .@!!!!!!!!!!E. .Ezzzzzzzzzz@. .@@z@@@@@@z@E. ....@....@.... ...@......@... .............. .............. .............. Bonus: .??.!!!!!!.??. ..<<<<<<<<<<.. ..ddffdfdd>.. ..c..ddfd..c.. ..5555555555.. .............. .............. .............. .............. .............. .............. Level: Mench Swiss Roll Bricks: ddd*x**x**x**! ddd*x**x**x**! d@@@@@@@@@@@@! d@ihhhhhhhhh@! d@ihhhhhhhhh@! *@i@@@@@@@@h@! *@i@hhhhhh@h@! *@i@h@hhhh@h@! *@i@h@hhhh@h@! *@i@h@@@@@@h@! x@i@hhhhhhhh@! x@i@hhhhhhhh@! x@i@@@@@@@@@@! x@icjjjjjjjjjj x@icjjjjjjjjjj x@@@@@@@@@@@@@ .............. .............. Bonus: cddwfwwfwwfww~ cddwfwwfwwfww~ c............~ c.?bbbbd>>>>.~ c.?bbbbdf>f>.~ f.?........>.. f.?.>>>>>>.>.~ f.?.>.***f.>.~ 5.}.>.ffff.>.~ j.}.>......>.~ b.}.>>****f>.~ b.{.>>*****f.~ b.{..........~ <.{.?????????? ?.}.?????????? <............. .............. .............. Level: Mench PM II Bricks: @@@@@@@@@@@@@@ @...xyzzyx...@ @.v.xyzzyx.v.@ @...xyzzyx...@ @xxx@@@@@@xxx@ @...yxvvxy...@ @.v.yxvvxy.v.@ @...yxvvxy...@ @yyy@@@@@@yyy@ @...zyxxyz...@ @.v.zyxxyz.v.@ @...zyxxyz...@ @zzz@@@@@@zzz@ @....@..@....@ @............@ @...@@..@@...@ .............. @............@ Bonus: .............. ....s.&&.s.... ..w.b.bb.b.w.. ....&.**.&.... .~~~......~~~. .....?55?..... ..b.-.ll.-.b.. .....?55?..... .f{f......f{f. ....WddddW.... ..w.gggggg.w.. ....W????W.... .ddd......ddd. .............. .............. .............. .............. .............. Level: Mench Irratation Bricks: zzz@@@@@@@@zzz zzz@vv@@vv@zzz zz@v......v@zz z@vvvvvvvvvv@z z@vvvvvvvvvv@z zz@v......v@zz zzz@..@@..@zzz zzz@..@@..@zzz zz@v......v@zz z@vvvvvvvvvv@z z@vvvvvvvvvv@z zz@v......v@zz zzz@..@@..@zzz zzz@..@@..@zzz zz@v......v@zz z@v........v@z .............. .............. Bonus: b.l........l.b ....55..55.... dddg......g.dd ....>>dd>>.... ....>dWWd>.... +c.g......g.++ ..b........b.. ++b........bc+ f..g......g..f f...WWWWWW...f f.*>d>dd>d>*.f f..g......g..f .db........bd. d.b........b.d .d.w......w.d. {.g........g.{ .............. .............. Level: Mench Ying Yang Bricks: @@@@jjjjj@@@@@ @@@@a@jjjj@@@@ @@@aaa@jjjj@@@ @@aaaaa@jjjj@@ @aaajjaa@jjjj@ aaajjjja@jjjjj aaajjjja@jjjjj aaaajjaa@jjjjj aaaaaaa@jjjjjj aaaaaa@jjjjjjj aaaaa@jjkkjjjj aaaaa@jkkkkjjj aaaaa@jkkkkjjj @aaaa@jjkkjjj@ @@aaaa@jjjjj@@ @@@aaaa@jjj@@@ @@@@aaaa@j@@@@ @@@@@aaaaa@@@@ Bonus: .....>>.f..... ........fd.... ...>f..>.dd... ..dd....d>dd.. .d~df{~d..g>.. dd>f55ld.>fddd f~d{55~~..gdfd *fd~gfdd.gffd> d>>dg~d..>fdd. dd~ff~..>d{d>f >gddd.{{.>df{f dfg~~.{f55.{{d dff.>.fl55>.f. .~ddg.{~f.~{.. ..~>~g.dd~{{.. ...d{d{.d{d... ....d{dd.d.... .....d{d{d.... Level: Mench X Bricks: ccc@@@@@@@@xxx cccc@@@@@@xxxx #cccc@@@@xxxx# ##cccc@@xxxx## ###cccxcxxx### ####ccxcxx#### #####cxcx##### ######xc###### ######xc###### ######cx###### ######cx###### #####xcxc##### ####xxcxcc#### ###xxxcxccc### ##xxxx@@cccc## #xxxx@@@@cccc# xxxx@@@@@@cccc xxx@@@@@@@@ccc Bonus: 555........555 5555......5555 .............. .....~..~..... .....~bb~..... .....~WW~..... .....~WW~..... ......WW...... ......ll...... ......ll...... ......WW...... .....{WW{..... ....{.WW.{.... ...{..bb..{... ..{..c..c..{.. .++.c....c.++. dddd......cccc ddd........>>> Level: Mench In & Out Bricks: E.@@@@@@@@@@.E @.@xxxxxxxx@.@ E.@........@.E @.@........@.@ E.@.xxxxxx.@.E @.@.@@@@@@.@.@ E.....EE.....E @.@...@@...@.@ E.@vvvxxvvv@.E @.@vvvxxvvv@.@ E.@vvvxxvvv@.E @.@...@@...@.@ E.....EE.....E @.@.@@@@@@.@.@ E.@........@.E @.@........@.@ E.@xxxxxxxx@.E @.@@@@@@@@@@.@ Bonus: .............. ...b>.cc.>b... .............. .............. ....dddddd.... .............. .............. .............. ......dd...... ....d.bb.d.... ......{{...... .............. .............. .............. .............. .............. ...b>5555>b... .............. Level: Mench Frozen Time Bricks: @@@@@@@@@@@@@@ .vvv...vvv.vvv .vvv...vvv.vvv .vvv...vvv.vvv .@@@...v@v.@@@ .@vv...@@v.@v@ .@vv.@.v@v.@v@ .@vv.@.v@v.@v@ .@@@.v.v@v.@c@ .vv@.v.v@v.@v@ .vv@.@.v@v.@v@ .vv@.@.v@v.@v@ v@@@v.v@@@v@@@ .............. .............. .............. .............. .............. Bonus: ffffffffffffff .{g....>g..{dm .>.>....{>.d{d .d{....>dd.{{m .fff....fg.fff .f.d...ff{.f5f .f>g.f..f..d5d .f.{.f.gf..f5f .fff.>.{f>.d5d .g.f.g..f..f5f .{gf.f.>f{.d5d .>{f.f..fd.f{f .fff...fdf.fff .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Lattsville0000664000175000017500000005511712140767201015350 00000000000000Level: Latts LBreakout2 Bricks: v.v.v.v.v.v.v. .v.v.v.v.v.v.v v.v.v.v.v.v.v. .............. j....jjj...jj. j....j..j.j..j j....j..j....j j....j..j....j j....j..j...j. j....jjjj...j. j....j..j..j.. j....j..j..j.. j....j..j.j... j....j..j.j... jjjj.jjj..jjjj .v.v.v.v.v.v.v v.v.v.v.v.v.v. .v.v.v.v.v.v.v Bonus: 0.....+.....0. ...<.0.....p.. ..0.....W.0.l. .............. j....?......}. ..........0... 0....0..0..... .....~........ .............. -.....+.-...-. .....0.....!.. ........0..<.. .............. ........~..... -.0...W....0.. .0.-.{...?.... ..W.....<.d.0. ...<.>.~.....d Level: Latts Double Zero Bricks: hghghghghghghg .............. .............. vvvvvv..vvvvvv v....v..v....v v....v..v....v v....v..v....v v....v..v....v v....v..v....v v...xv..vx...v v...xv..vx...v v...xv..vx...v v@@@#v..v#@@@v v....v..v....v v....v..v....v v....v..v....v v....v..v....v vvvvvv..vvvvvv Bonus: c...w.0l.f.p.. .............. .............. s..0......b..0 0....?........ ........0..... .............+ .............. m............. ........0..... ....jc...?.... .............. 0.0........0.. .............s <............. .....+........ ........0..... ...f.......<.. Level: Latts Expansion Bricks: !...!....!...! !!..!!..!!..!! @!!..!..!..!!@ .@!..!!!!..!@. ..!...!!...!.. ..@!..!!..!@.. ..c!......!c.. ..c!......!c.. ..c!!....!!c.. ...@!!..!!@... ....@!..!@.... .....!!!!..... .....@!!@..... ......!!...... ......@@...... .............. .............. .............. Bonus: ....>....-.... .s.......f.... ...........W0. .....c>+...?.. .0?...~.-.0&.. ...p.......!.. ..f00.....0f.. ...?......>... ..fW....c..f.. ....b0...s.... .....>........ .....f..f+.... .......m0..... ......j....... .............. .............. .............. .............. Level: Latts Rainbow Cross Bricks: .............. ...########... .............. .@gggggggggg@. .g#dddddddd#g. .gd#ffffff#dg. #gdf#hhhh#fdg# #gdfh#jj#hfdg# #gdfhj##jhfdg# #gdfhj##jhfdg# #gdfh#jj#hfdg# #gdf#hhhh#fdg# .gd#ffffff#dg. .g#dddddddd#g. .@gggggggggg@. .............. ...########... .............. Bonus: .............. .............. .............. ...0..0....... ....W...>.0... ......b-...... ..b?.......?.. .0..l..s....+. ....c......... ..0..m....~.~. ..-.>.0...0... .......j..0... .....?........ .W..w...0>.... ...........s.. .............. .............. .............. Level: Latts Where Are They? Bricks: .....v....v... .............. v............. .............v .............. .............. ........v..... v............. .............. .............. .............. .............. .............. .............. .v........v... .............. .............. .............. Bonus: .....0....0... .............. 0............. .............0 .............. .............. ........0..... 0............. .............. .............. .............. .............. .............. .............. .0........0... .............. .............. .............. Level: Latts Up & Down Bricks: dd..jE..Ej..dd dd..E....E..dd ...E......E... ...E.jjjj.E... ..E..jjjj..E.. ..E..jjjj..E.. .E...jjjj...E. .....E..E..... .....E..E..... v...E....E...v v...E....E...v v..E......E..v v..E......E..v ..E........E.. ..E........E.. .E..........E. E............E E............E Bonus: ....0....0...b ............w. .............. ......??...... .....bbbb..... .............. ......ww...... .............. .............. +............. w............c 0............0 0............0 .............. .............. .............. .............. .............. Level: Latts No Smoking Bricks: .kddddddddddd. d.kd........dd dk.........ddd dkk.......dd.d d.k......dd..d dkk.....dd...d dk.....dd....d d.djjjjjjeeeed d.djjjjjjeeeed d.djjjjjjeeeed d.....dd.....d d....dd......d d...dd.......d d..dd........d d.dd.........d ddd..........d dd...........d .dddddddddddd. Bonus: ...<.-0W..+.f. b............. .f............ ..........?..0 .............0 .........f.... .?............ W...?..~.0.W.. 0.{.....0..... 0..0f......?-. ......+....... 0....l........ -....d........ ...>.........> .............. .0............ .............0 .d.<..f>.<.~.. Level: Latts Meow Bricks: .jjjj####jjjj. .jjj#....#jjj. .jj#......#jj. vj#........#jv .#..aa..aa..#. .#..aa..aa..#. .#..........#. .#..........#. .#..........#. .#....##....#. .#....##....#. .#....dd....#. .#....dd....#. v#..d.dd.d..#v ..#..dddd..#.. ...#......#... ....#....#.... .....####..... Bonus: ..0........0.. .~..0....0..-. ..m0......0... Ws..........?+ .............. .0...0...s..~. .............. .............. .............. ......0....... .?..........0. ......11...... ......b-...... c0...........W .......?0..... ..........-... .............. .............. Level: Latts Shakin' Bricks: ....j@@@@j.... ...j@....@j... ..j@......@j.. .j@..cccc..@j. .@...@@@@...@. ....@....@.... ...@......@... ..@..bbbb..@.. .@...@@@@...@. ....@....@.... ...@......@... ..@..aaaa..@.. .@...@@@@...@. ....@ffff@.... ...@iiiiii@... ..@........@.. .@..........@. .............. Bonus: ....0..0.f.... ...c.......... .............. ..f..>0b...... ............0. .............. ...0......0... ......m<-..... .............. .............. .............. .....-.>c..... .0............ .....0.0...... ....f.wb.00... .............. .............. .............. Level: Latts Balls Bricks: vvvvvvvvvvvvvv v............v v............v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v v.....hh.....v Bonus: 0W+W+WWWW+W+W0 W............W 0............0 +.....bb.....+ <.....bb.....< 0.....bb.....0 W.....WW.....W 0.....WW.....0 W.....ww.....W 0.....>>.....W W.....>>.....0 <.....++.....< 0.....>>.....0 W.....ww.....< W.....ff.....W 0.....WW.....0 +.....ff.....+ +.....++.....+ Level: Latts Beer Bricks: .............. ...jjjjjj..... ...jjjjjj..... ...cjjjjc..... ...cjjjjc..... ...ceeeeccc... ...ceeeec.c... ...ceeeec.c... ...ceeeec.c... ...ceeeec.c... ...ceeeec.c... ...ceeeec.c... ...ceeeec.c... ...ceeeeccc... ...ceeeec..... ...ceeeec..... ...cccccc..... .............. Bonus: .............. ........+..... ...0...W...... .....0.<0..... ....~......... .............. ....-0..~..... ......<0...... ...0......p... .....0..0..... ........l..... .....W.0...... ...b....w..... ....s..!...... ....0......... ......0.0..... .....0........ .............. Level: Latts Chaos Bricks: .g.###g.#..#.e ...#...ie.i.h. #.g.i.j..#.#.# i.j##.###hij#. ....h##f.#i.#. e#i..d..i##did ..##.i.j...#.. .jg.f###dg..j. h.i#...#.j.#.h .#h.hi...#d... .d.#.dj.#..if# gj#j#f.i.g.j.. .#.i#.j.#.h#.. #..#.he##....f .gj###.i.di#.. #.e.h#g.g.j.#e #j##.....h.##e ....fd.jh.e... Bonus: ....0........< ..........p.m. ....f......... ..........*... .........00... 0.W..c..W...0< .......d...... ....m0..0...c. d.<........... ..0........... ......f.....+. .-..*W.c.0.... ...d..-...l... ......0d0..... .~.......~.... ..f.0d....0..c .............. ....f...0..... Level: Latts Hardball Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv hhhhhhhhhhhhhh jjjjjjjjjjjjjj Bonus: W.W.W0.W.WW.W. W>.W.W<....>.W ..W.W.W.W0W... 0WW0+WW.?WW.0 0WW<..W.WW..WW .0..W..0W.Wd0. W.W.+WW.....-W .W.WW..0WW.W.W .+0?.0WW..+.0< WW..W.<.-W0W.. ..WW.0.W.W..WW bbbbbb.bbbbbbb w.w.w.w.w.w.w. Level: Latts The Cell Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# #.#.#.##.#.#.# jjjjjjjjjjjjjj Bonus: *....0.......* ......~.<.0... 0............. ......&....0.. .......0...... .............. 0...0.~....0.. d............. .........0.... ......0....... 0............< ....~....0.... ...........~.. .............0 ..-.-.d0...p.. 0............. .............. ..0f.m-0f0.0.. Level: Latts Dice Bricks: aaaaaa........ aaaada........ aaaada........ aaaaaa........ aaaaaa........ aaaaaa........ aaaaaa........ adaaaa.aaaaaa. adaaaa.adaada. aaaaaa.adaada. .......aaaaaa. .......aaaaaa. .......aaaaaa. .......aaaaaa. .......adaada. .......adaada. .......aaaaaa. .............. Bonus: .....0........ ~-0?.......... .............. .dW*.......... f0.0W......... <.-........... .{..Wd........ ...<0..~.0.... .0f.f....{-... .............. .........f..0. .......0?0.s.. ..........W... .......W...... .........f~... .........0.Wf. ........p..... 0..-.......... ......f....... .....0........ .............. ......<0.d.0.l ......+...0.-. ......?.0~~... .............. .....~........ .............. .0.> .............. ?............s .............. 0............0 ............?. .............. ....0......... .............. Level: Latts Get In There! Bricks: eeeeeeeeeeeeee eeeeeeeeeeeeee e@e@e@ee@e@e@e .............. .............. ############## ffffffccgggggg ######..###### ddddd....hhhhh #####....##### jjjj......iiii ####......#### iii........jjj ###........### hh..........dd ##..........## g............f #............# Bonus: 0....0.....j.0 ......{..0.... ..0..0-..>.... .............. .............. ....-......... 0..m.>??d0..*0 ..-........... ...{.....0*.-. .0............ .+.b......d>0. ..*........... .md........... ...........0.l .<...........0 0............. c............. .............. Level: Latts Potion Bricks: ........c..... .............. ..EEEE..EEEE.. .....Ec.E..... ....EE..EE.... ...E......E... ..E.c.c....E.. .E......c.c.E. .E..c.......E. .Ec...c..c..E. .EiiiiiiiiiiE. .EiiiiiiiiiiE. .EiiiiiiiiiiE. .EiiiiiiiiiiE. .EiiiiiiiiiiE. ..EiiiiiiiiE.. ...EiiiiiiE... ....EEEEEE.... Bonus: ........s..... .............. .............. ......?....... .............. .............. ....?.?....... ........?.?... ....?......... ..-...0..?.... ...0....>.{... ...00.0.0..0.. ..pppppppppp.. ..b.>..s.f0... ..0..+0....0.. ...0{......... .....f.0.-.... .............. Level: Latts Boomerang Bricks: ....xx....xx.. ...xx....xx... ..xx....xx.... .xx....xx..... xx....xx...... x....xx....... ....xx....v..v ...xx.....v..v ...xx.....v..v ...xx.....v..v ....xx....v..v .....xx...v..v x.....xx..vvvv xx.....xx..... .xx.....xx.... ..xx.....xx... ...xx.....xx.. ....xx.....xxx Bonus: ....W.....bW.. ...l.....m.... ..b......0.... .0.....*...... {<.....W...... .....w........ .....d........ ....0.....0..0 ....-......... ....>.....0..0 ....?-.......0 ..........0..0 0.....<....00. W.......0..... ..w.....W..... ..{......0.... ...d.......-.. .............. Level: Latts Round The Corner Bricks: b.!....v...... b.!....v...... ##kkkkkkkk##.. ##kkkkkkkk##.. ############.. ############.. ##jjjjjjjj##.. ##jjjjjjjj##.. ############.. ############.. ##dddddddd##.. ##dddddddd##.. ############.. ############.. ##gggggggg##.. ##gggggggg##.. ############.. ############.. Bonus: b.-....?...... m......?...... ....W......>.. ..&..0........ ?...>W...0f... .......0..0... ...0.......... .0f..<0....... !............. .....c.0...... ..?......c.0.. ...*W......... 0.....~.-..... .....>.0...... .~.....0...... ..0...c....... ..........!... ...f....W..... Level: Latts What The? Bricks: !.*..!.*@....! ...@.......*.. .....*...!.... *@*...!....... !...!..*..*.!. ..!..*...@..@. .......!.!.... .!.*.@......*! ......*!@..!.. *...!....*.... @.*.......@..@ ...@.*.*.!.!.. .!.!..@.....*. ....*..!@..... *.*@.....*.*.. .....!....@..! !..!..*.!...@. .*.....@...!.. Bonus: .c..........d. dc..d{..{..d{{ .......c.c{... ...ccd...{.c.. ......{d....d{ {{.d.d..c.{d.. .dcc...d..d... c.....{.c.c... .{c{.d{c.....c ...cd.c.{d.... ...{c......... c...c...{c.c{. {dc....{..{c.. .{....c....... d...{{.c...dd{ ..{.d...d..... .dd.{.c..{.... ........{...{. Level: Latts Compact Bricks: ....EEEEEE.... ....EddddE.... ....EddddE.... ....EhhhhE.... ....jjjjjj.... ....kkiikk.... ....kkiikk.... ....kkiikk.... ....kkiikk.... ....kkiikk.... ....kkiikk.... ....kkiikk.... ....kkiikk.... ....jjjjjj.... ....EhhhhE.... ....EddddE.... ....EddddE.... ....EEEEEE.... Bonus: .............. ......0s...... .....?..f..... ........0..... .........+.... .......W...... ........0..... .....0.{...... ......f..W.... .....b..0..... ....0..s...... ....0....-.... ......W~...... ....-...b0.... .............. .....+.f...... .....f..-..... .............. Level: Latts Alcatraz Bricks: j@@@@@@@@@@@@@ .@............ .@..........@. .@..........@. .@..........@. .@..........@. .@..........@. .@..........@. .@...aaaa...@. .@...vvvv...@. .@...aaaa...@. .@..........@. .@..........@. .@..........@. .@..........@. .@..........@. ............@. @@@@@@@@@@@@@. Bonus: 5............. .............. .............. .............. .............. .............. .............. .............. .....wwbb..... .....0000..... .....bbww..... .............. .............. .............. .............. .............. .............. .............. Level: Latts Round & Round Bricks: EEEEEEEEEEEEEE E............E E............E EaEEEEEEEEEE.E E.E........E.E E.E........E.E E.EaEEEEEE.E.E E.E.Ev...E.E.E E.E.Ev...E.E.E E.E.EEEEaE.E.E E.E......E.E.E E.E......E.E.E E.EEEEEEEEaE.E E..........E.E E..........E.E EEEEEEEEEEEE.E .............E ..EEEEEEEEEEEE Bonus: .............. .............. .............. .b............ .............. .............. ...b.......... .....2........ .....2........ ........b..... .............. .............. ..........b... .............. .............. .............. .............. .............. Level: Latts X Games Bricks: .j..........j. .hj........jh. .#hj......jh#. .d#hj....jh#d. .gd#hj..jh#dg. ..gd#hjjh#dg.. ...gd#hh#dg... ....gd##dg.... ....gd##dg.... ....gd##dg.... ....gd##dg.... ...gd#hh#dg... ..gd#hjjh#dg.. .gd#hj..jh#dg. .d#hj....jh#d. .#hj......jh#. .hj........jh. .j..........j. Bonus: ............~. ..0........... ...........0.. .f.cW.....>... ...0<.......0. ....!.0.m..... .......c...... .....p.?0..... ......0..0.... ....0-..!..... .......0.d.... ...W.>.<.l.... ....f0........ ..0......-.s.. ...0+......0.. .............. .............. .............. Level: Latts Latts Bricks: .............. .............. .............. d..ddddddddddd d..d.d.d..d.d. d..ddd.d..d.dd d..d.d.d..d..d dddd.d.d..d.dd h..hhhhhhhhhhh h..h.h.h..h.h. h..hhh.h..h.hh h..h.h.h..h..h hhhh.h.h..h.hh k..kkkkkkkkkkk k..k.k.k..k.k. k..kkk.k..k.kk k..k.k.k..k..k kkkk.k.k..k.kk Bonus: .............. .............. .............. ...W..0.f..0.. 0............. ...-.......... ...0...0..W..f *d............ .....0..s.0... .............. ...0.........0 f....~.?..~..0 .....0........ ...f......0.0. 0......0...... ...{...<..d... ...0.........! .......-..0... Level: Latts Purple Star Bricks: @@@@@@ii@@@@@@ f.....ii.....f .g....ii....g. EEd...ii...dEE ...x..ii..x... ....j.ii.j.... .....eiie..... .....h##h..... iiiii####iiiii iiiii####iiiii @@@..h##h..@@@ .....eiie..... ....j.ii.j.... ...x..ii..x... ..d...ii...d.. .g....ii....g. f.....ii.....f ......ii...... Bonus: ......0....... 0............. .......0....0. .......>...>.. ......+...0... ....0......... .......0...... ........c..... 0........?...0 .?0>.0....0+.. ......0....... .......f!..... .............. ...f...0..0... .............. .0....0>...... .............. .............. Level: Latts Playstation2 Bricks: .............. .............. .............. aaaavaaaa.aaaa a..ava.......a a..ava.......a a..ava.......a a..ava.......a a..ava.......a aaaavaaaavaaaa a.......ava... a.......ava... a.......ava... a.......ava... a....aaaavaaaa .............. .............. .............. Bonus: .............. .............. .............. ..0..0>>>.0.-. .............d {...0........0 -..>-........> ....0s.......{ 0....!........ fff.~fff0.0fff .........+.... d.......{..... 0.......-.s... .........0.... .....fff.....0 .............. .............. .............. Level: Latts In Like Flynn Bricks: .............. .EEEEEEEEEEEEE .Eh.......!eeE .Eh.@vcbaa...E kEh@.v.......E kE@..v.......E .....v.......E .Eg..v...i..!E .Eg..vk..i...E .....vk......E kE@..v......!E kEh@.v.......E .Eh.@vcbaa...E .Eh..........E .Eh..........E .Eh..........E .Eh..iii..!eeE .EEEEEEEEEEEEE Bonus: .............. .............. ..0........0!. .....m.0-b.... w............. .....0........ ............0. ..0..0...0.... ......b.....0. .....-b....... w....0.....0.. .............. ..0..?.0.b.... .............. ..W........... ..0......0.... .....0.0..00p. .............. Level: Latts C'mon Bricks: @............. @.@@@.@@@.@@@. @.@g@.@g@.@g@. @.@g@.@g@.@g@. @.@g@.@g@.@g@. @.@g@.@g@.@g@. @.@g@.@g@.@g@. @.@.@.@.@.@.@. @.@.@.@.@.@.@. @.@.@.@.@.@.@. @.@.@.@.@.@.@. @.@.@.@.@.@.@. @g@.@g@.@g@.@. @g@.@g@.@g@.@. @g@.@g@.@g@.@. @g@.@g@.@g@.@. @g@.@g@.@g@.@. @@@.@@@.@@@.@. Bonus: .............. .............. ...0...0...0.. .............. ...0...0...0.. ...b...b...b.. ...w...w...w.. .............. .............. .............. .............. .............. .w...w...w.... .b...b...b.... .0...0...0.... .............. .0...0...0.... .............. Level: Latts Mirror Image Bricks: ......kk...... ...!..kk..!... .EEEEEEEEEEEE. .##jj#EE#jj##. .##hj#EE#jh##. .hhhj#EE#jhhh. .giijjEEjjiig. .gi#ejEEje#ig. .gi##jEEj##ig. .gi##jEEj##ig. .gi##jEEj##ig. .gi#ejEEje#ig. .giijjEEjjiig. .hhhj#EE#jhhh. .##hj#EE#jh##. .##jj#EE#jj##. .EEEEEEEEEEEE. .............. Bonus: ...-...0...... ......m...j... .............. .........*.... ...0....0.f... .0..~......... ........?!.0.. ....b......0.. .{0l....c..... .....0..0..W0. .............. .0..........~. ..0..&..0..... ..........>... .0..c....0.... ....W......... .............. .............. Level: Latts Spiral Bricks: cccccccccccccc c............c c.cccccccccc.c c.c........c.c c.c.cccccc.c.c c.c.c....c.c.c c.c.c.cc.c.c.c c.c.c.cc.c.c.c c.c.c.cc.c.c.c c.c.c.c..c.c.c c.c.c.c..c.c.c c.c.c.cccc.c.c c.c.c......c.c c.c.cccccccc.c c.c..........c c.cccccccccccc c............. cccccccccccc.. Bonus: d.f....<..0-d. .............. 0.....0....... .............> ..0.?...d..... W..........&.. ....+.j....... ..d......f.0.W -.....b0...... .........-.>.. ..>......?...~ ....{....W.d.. .............. ..~....l.0...0 &............. .....0.d...... .............. ..0f..<0...... Level: Latts Tip Top Bricks: ivvvvvvvvvvvvi i............i i............i @@@@......@@@@ h............h h.....dd.....h h....dggd....h @@@..d..d..@@@ h....d..d....h h...dg..gd...h h...d....d...h @@.dg....gd.@@ i.vd......dv.i i.dg......gd.i i.d........d.i .dg........gdi dgg........ggd @@@........@@@ Bonus: +..0.?.0p.0.b. 0............0 .............. .............. 0............. -.....0<.....0 ~....?.......+ .............. ........>..... <...b0.......> ....0........0 ....-....+0... f............~ 0.0>.........0 ...........~.. ..f..........0 .0.........0.. .............. Level: Latts Pyramid Bricks: .............. .............. ......EE...... ......ii...... .....iiii..... .....EEEE..... .....kkkk..... ....kkkkkk.... ....EEEEEE.... ....vvvvvv.... ...vvvvvvvv... ...EEEEEEEE... ...gggggggg... ..gggggggggg.. ..EEEEEEEEEE.. ..hhhhhhhhhh.. .hhhhhhhhhhhh. .EEEEEEEEEEEE. Bonus: .............. .............. .............. ......00...... .............. .............. .....?..?..... .....0..0..... .............. .....0..0..... ....0....0.... .............. .............. ...0.bbbb.0... .............. ...0.wwww.0... ..0........0.. .............. Level: Latts Solid Bricks: #############k ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ######dd###### vvvvvvvvvvvvvv Bonus: ....cc.....m.. cc....cc.c.... ..c..c..c.ccc. cm..c...c.c.c. ..c.........c. ......c....... cc+.c+.c.jc.cc c..c..c.c...c. ....cc.c.c.c.c c.c..........c ....c.....c.c. c.+c...c.+c..c .c.c.c..c....c .....c........ c...j.+..cc..c c...c..m.....c ..cc......cc.. m.....--..+... Level: Latts This Won't Be Easy Bricks: .............. #####.######## kkkkk..kkkkkkk ######.####### jjjjjj..jjjjjj #######.###### iiiiiii..iiiii ########.##### hhhhhhhh..hhhh #########.#### ggggggggg..ggg ##########.### ffffffffff..ff ###########.## eeeeeeeeeee..e ############.# dddddddddddd.. #############. Bonus: .............. .............. 0c..w..c.b.0.. .............. 0...c0...?w*.0 .............. ..m0......0f.. ...l.......... ..c..*.c..0.m. .............. ..?.0.bw...b.. .............. 0...0....... .........j<... ...W.b2.{..b.. .......+....5. ..2w<.....2..m .>....lc.2p... .....g...&.~.. ....?}.sW.>... ......+....... >....b...2<... ...~.55..5!... ..f........... .............. .............. .............. .............. Level: mos19k-at-ecsis.net Gentoo Bricks: ......j....... .....jjj...... ....jjjjj..... ...jjjjjjj.... ...jjjjjjj.... ..jjjjEjjjj... ..jjjEEEjjj... ..jjjjEjjjj... ...jjjjjjjj... ....jjjjjjj... ......jjjjj... .....jjjjj.... ....jjjjj..... ....jjjj...... ...jjjj....... ..jjjj........ ..jjj......... ..jj.......... Bonus: ......l....... .....d........ .....f........ .............. ......3pm..... .....5.5...... ..?.3...3.?... .....5.5...... ......3....... ....b...&..... ......c...d... .............. .....!.j-..... .............. ......{....... .....+........ .............. ...g.......... Level: mos19k-at-ecsis.net Slackware1 Bricks: cc...cc....c.. c.....c....c.c cc.c.cc.cc.cc. .c.c.cc.c..cc. cc.c....c..c.c ...cc...cc.c.c .............. .c.c.c........ .c.c.c........ ..c.c......... ..c.c.cc...... EE.E.E.c...... ......cc.cc... ......cc.c..cc .........c..cc .........c..c. ............cc .........E..EE Bonus: 55...55....5.. .............* ...l........&. ............?. +.......c..... ...?.......... .............. .}.+.>........ .............. ..p.+......... .............. .............. ......g{..?... ......-.....-. .........-.... .........f..!. .............m .............. Level: mos19k-at-ecsis.net debian Bricks: .............. ......dd...... .....dddd..... ....dd##dd.... ...dd###dd.... ...d#####dd... ..dd##d###d... ..dd#ddd##d... ..d##d#d##d... ..d##d###dd... ..d##dd##dd... ..dd##dddd.... ..dd###dd..... ...dd###...... ...ddd##...... ....ddd#...... .....ddd...... ......dd...... Bonus: .............. ......11...... .....1111..... ....11..12.... ...11...22.... ...1.....22... ..11..5...2... ..01.55l..2... ..0..5.l..2... ..0..d...32... ..0..44..33... ..00..m333.... ..00...33..... ...00......... ...000........ ....000....... .....000...... ......0w...... Level: mos19k-at-ecsis.net Mandrake1 Bricks: ......aa...... .....aaaa..... ....aaaaaa.... ...aajaajaa... ...ajEjjEja... ...ajjjjjja... ...aeeeeeea... ...aaeeeeaa... ....aeeeea.... .....aeea..... .....aaaa..... ....aaaaaa.... ....aajjaa.... ...aajjjjaa... ...ajjjjjja... ..aajjjjjjaa.. ..ajjjjjjjja.. ..ajjjjjjjja.. Bonus: .............. ......<....... .........>.... .....l..m.s... ....?.??.?.... ..........-... ...>445544p... .........~.... .............. ......j....... .....Wb&+..... ....s......... .....-........ ........w..... ......+...j... .............. ....-..s.+b... ..fb.<.....c.. Level: mos19k-at-ecsis.net Mandrake2 Bricks: ........h..... ........h..... .......hhh.... .......hhh..@. ...b..hhhhh..@ ..bbhhhhhhhhh. .bb..hhhhhhh.@ .b.....hhh..@. bb....hhhhh... bb....hhhhh... Eb...hhh.hhh.. .b...hh...hh.. .bb..h.bb..h.. .Eb....bb..... ..bb..bb...... ..Ebbbb....... ....EE........ .............. Bonus: ........1..... ........1..... .......5?5.... .......555.... ...c..!...s... ....111111111. .+...?.2.2d?.. .......2s2.... s.....12j21... ......12p21... .....112.211.. .....11...11.. .f...1.+~..1.. ..-.....>..... ..d{..f-...... ...&>db....... .............. .............. Level: mos19k-at-ecsis.net Caldera Bricks: ......**.....@ @....***g....@ @...***ggg...@ @..***ggggg..@ @..**gggggg..@ @.**gggggggg.@ @.**gggggggg.@ @***ggggggggg@ @**gggggggggg@ @**gggggggggg@ @***ggggggggg@ @.**gggggggg.@ @.**gggggggg.@ @..**gggggg..@ @..***ggggg..@ @...***ggg...@ @....***g....@ @.....**.....@ Bonus: ......44...... .....4..5..... ....4..d...... ...4..5j...... ...4.>...<.... ..4.5.?...+... ..4.c-..g..... .4..5..~...... .4.?>......?.. .4.l>-.*.~.... .4..W.+....... ..4.5.....d... ..4.>-..?..... ...4.5&....... ...4..f&...... ....4..5~..... .....4..{..... ......44...... Level: mos19k-at-ecsis.net Red Hat Bricks: .....aaaa..... ....aaaaaa.... ...aadddEaa... ..aadddddaaa.. .aaadddddEaaa. .aa##dddddaaa. aad#ddddddaaaa add####dddddaa adddddddddddaa aaajjddddddaaa aaaajjjjjjaaaa aaaajjjjjjaaaa .aaaajjEjaaaa. .ajjjjjjjajja. .ajjjjjjjjjjj. ..jjjjjjjjjj.. ...jjjjjjjj... .....jjjj..... Bonus: .............. ......f.3..... ....3......... .....5...3.... .w............ ...55....~.... ...5lm....d.5. .?.5555?.....? ....s....W.... b............w ..5........... ...>!..j...... ......f....... .......>...... ...d......5.~. ......s....... ...b......b... .....w..<..... Level: mos19k-at-ecsis.net Slackware2 Bricks: ......bbb..... .....bbbbb.... ....bEEEEEb... ...bEEEEEEbb.. ...bEbbbbEbb.. ..bbEbbbbbbbb. ..bbEbbbbbbbb. .bbbEEEEEbbbbb .bbbbEEEEbbbbb .bbbbbbbbEbbbb .bbbbbbbbEbbbb ..bbbbbbbEbbb. ..b@EbbbbEbbb. ...@EEEEEbbb.. ...@zEEEEzbb.. ...@@@@@@@@... .....bbbbb.... ......bbb..... Bonus: ......ddd..... .....?>l>?.... .............. ...*.......*.. .....55....... .....55.f..... .....5m....... .............. .{c.........c{ .&.....}5....& .+......5....+ ..g...f}5.f... ..+3....5...-. ...3.......... ...35....4.+.. ...33333333... .....b>p>>2..... Level: mos19k-at-ecsis.net Ximian Bricks: ......xx...... .....xhhx..... ....xhhhhx.... ...xhhhahhx... ..xhhahhahhx.. .xhhahhhhahhx. .xhahhaaaahhx. xhhahaaaaaaahx xhhhaaaaaaaahx xhhhhahhahaahx xhhhahahahhhhx .xhahhahhahhx. .xahhahhhhahx. ..xhahhhhhhx.. ...xhhhhhhx... ....xhhhhx.... .....xhhx..... ......xx...... Bonus: ......mw...... .............. .............. ......&4.+.... .....g..4..b.. .b..4.-!d4.... ...4..4444.... ...4.444445l.. .-..44444455.. .*.s.4.j4!55.. {...4.4.4.-+.. ...4..4~.4.... ..4.pc....4... ....4....&.... .............. .....>........ ......w<...... .............. Level: mos19k-at-ecsis.net Use the Source Bricks: E.E##@@....ggg E.E#.@.....g.. E.E##@@....gg. EEE.#@.....g.. jjj##@@.##.ggg j..EEE..#.hhh. jjj.E@.@##h... ..j.E@@@#.h... jjj.E@.@##h... ..fff@.@ddhhh. ..f.f...d.d... ..f.f...dd.... ..f.f...d.d... ..fffe.ed.d... .....e.e...... .....e.e...... .....e.e...... .....eee...... Bonus: ...........555 ...........5.. ...........55. ...........5.. 555........555 5.........555. 555.......5... ..5.......5... 555.......5... ..555...55555. ..5.5...5.5... ..5.5...55.... ..5.5...5.5... ..w555.55.w... .....5.5...... .....5.5...... .....5.5...... .....bwb...... Level: mos19k-at-ecsis.net BSOD Bricks: vvggvvvggggg!* vgvgvvvgggg!*! vgvgvggggg!*!g vvvgvvvgg!*!gg vvggvvvg!*!ggg vgvgggvg*!gggg vgvgvvvggggggg vvvgvvvggggggg gggggggggggggg gggggggggggggg gggggggvvvgvvg gggg!*gvgvgvgv ggg!*!gvgvgvgv gg!*!ggvgvgvgv g!*!gggvgvgvgv !*!ggggvgvgvgv *!gggggvvvgvvg gggggggggggggg Bonus: 55<.555-...m.. 5?5+555....... 5?5.5Wc......j 55?w555....... 55p.555....... 5?5.??5f...... 5?5.555.g..+.. 555.555......} ...d..??..w-.. .+....??...... ....jg.555!55< .{.....5c5.5p5 ......>5?5.5?5 w......5?5.5?5 .......5?5.5?5 ....-..5?5+5?5 ......<555.55s .............w Level: mos19k-at-ecsis.net USA-fireworks Bricks: ..!!!!!ddddd.. ..!!!!!ggggg.. ..!!!!!ddddd.. ..!!!!!ggggg.. ..!!!!!ddddd.. ..!!!!!ggggg.. ..dddddddddd.. ..gggggggggg.. ..dddddddddd.. ..gggggggggg.. ..dddddddddd.. ..gggggggggg.. ..dddddddddd.. c..c.cccc..cc. c..c.c....c..c c..c.cccc.cccc c..c....c.c..c cccc.cccc.c..c Bonus: ..j555j44444.. ..5555533333.. ..5555544444.. ..55j5533333.. ..5555544444.. ..j555j33333.. ..4444444444.. ..3333333333.. ..4444444444.. ..3333333333.. ..4444444444.. ..3333333333.. ..4444444444.. *..*.*jj*..**. w..w.w....w..w >..>.>}}>.>bb> j..j....}.j..j wbbw.wbbw.w..w lbreakout2-2.6.5/client/levels/Composers0000664000175000017500000001547512140767201015202 00000000000000Version: 1.00 Level: gmaestro Bach Bricks: ############## hh###c#####x#x hhh#ccc#i!#x#x h#h#c#c!ggix#x h#h#c#ci###x#x h#h#c#cg###x#x hhh#aaci###xzx hh##aaag###xzx h#h#a#ai###x#x h#h#a#ag###x#x h#h#a#ai###x#x h#h#a#a!ggix#x hhh#a#a#i!#x#x ************** .............. .............. .............. .............. Bonus: .............. .............. .............. ..4...4...4..4 ....m......... .............. .............. b............. .............. .............. w............m .............. .g..g.g.g....g 55555555555555 .............. .............. .............. .............. Level: gmaestro Mozart Bricks: ############## ######hh###### @vvv@hhhh@@!@@ @vvv@hEEh@@@@@ @vvv@hEEh@@@@@ @vvv@hEEh@!@!@ @vvv@hggh@v@v@ @vvv@hggh@vvv@ @v@v@hvvh@vvv@ @!@!@hvvh@vvv@ @@@@@hvvh@vvv@ @@@@@hvvh@vvv@ @@!@@hvvh@vvv@ .**...**...**. .............. .............. .............. .............. Bonus: 53234555543235 .............. l...........f. .............. .............. ........m..... .....g..g..... ..W........... ......44...... ......43...... ......33...... ......11...... .f...g00g....l .............. .............. .............. .............. .............. Level: gmaestro Schoenberg Bricks: zzzzzzzzzzzzzz z*!!**!!!!*##z z*!!*!!!!!!*#z z*!!******!!*z z*!!*####*!!*z z*!!*####*!!*z z*!!*####*!!*z z*!!******!!*z z*!!**!!!!!*#z z*!!*!!****##z z*!!*!!*#####z z*!!*!!*#####z z*!!*!!******z z*!!**!!!!!!*z z*!!***!!!!**z zzzzzzzzzzzzzz v.v...vv...v.v .............. Bonus: l.....m......l .............. .............. .............. b....bbbb....b b....bbbb....b b....bbbb....b b............b b............b b............b b............b .............. .............. .&&&&&&&&&&&&. .............. .w.w.w**w.w.w. p............p .............. Level: gmaestro Beethoven Bricks: #*#*#*#*#*#*#* *gvivvvvikkkv# #gvivvvvikkkk* *gvivvvvikvvk# #gvivvvvikvvk* *gvivvvvikvvk# #gviivviikkkk* *gvvivvivkkkv# #gvvivvivkkkk* *gvvivvivkvvk# #gvviiiivkvvk* *gvvviivvkkkk# #ggggiivvkkkv* ededededededed dedededededede .............. .............. .............. Bonus: 555555l5555555 4444444444444l l3333333333333 .2222222222222 11111m11111111 .0000000000000 .............. ..........s... .............. .............. .............. ...b......b... ...p......p... .......w...... .w...*...*..w. .............. .............. .............. Level: gmaestro Cage Bricks: E.yyyh.h#cc.eh k#bvvd.gv..ee. h..ky@jjve.aah .g#*y.a.e.k#k. dbh..yaE.d.g!c ...fdj...dh.vv ihcf.efhx.!j#! .#.!he.g.a..c. hd!vvfh@vi.*.v ...xx...v.d.ev @iyg#f.hhf.!.! avyg..*fg#k.i. .v.j.j.!b.i!.h .fcax.f.#E..d. d.c..@.b.!xvv. kh..j@eef..ih! ..hiva...yki.. ....v.ki.vv..k Bonus: ...?.j.d..5..? 0...m......4.. ....5..&.p.f.! .l.-.......gm. p.f..d!....... ...{m......+.. ..w....~..}..? .w.......l.... d...d?..>>>>>>>>>>>>> bwbwbwbwbwbwbw wbwbwbwbwbwbwb Level: gmaestro Symphonie Fantastique Bricks: v@@@@@@@@@@@@v v@@@@@@@@@@@@v v@@kkkkkkkk@@v v@@kkkkkkkk@@v v@@kkkkkkkk@@v v@@kkkkkkkk@@v v@@kkkkkkkk@@v v@@kkkkkkkk@@v v@@dkkkkkkk@@v v@@ddkkkkkk@@v v@@.ddkkkkk@@v v@@..ddkkkk@@v v@@...ddkkk@@v v@@...vddkk@@v v@@.....ddk@@v v@@......dd@@v v@@.......d@@v v@@........@@v Bonus: .5l5l5.5l5l5.. ..5.5.5.5.5.5. .....>!m>..... ...&.......... ....>...>..... .............? ...W.?.W.w.... .............. .............. ...~......W... ....-......... .....>!....... ......w....... ......gw...... ........>..... .........-.... ..........~... ...........&.. Level: gmaestro Smetana Bricks: gggggg@@yyxxxx ggggggg@@yxxxx gggggggg@yxxxx ggggEggg@@yxxx ggggggggg@yxxx @@ggggggg@yxxx x@ggggggg@@yxx x@@@gggggg@yxx xyy@gggggg@yyx xyy@gggggg@zyx xxy@gggEgg@zyx xxy@gggggg@@yy xxx@@gggggg@zy xxxy@@ggggg@zy xxxy@@ggggg@zy xxxxy@@ggggg@z xxxxyy@ggggg@@ xxxxxy@gggggg@ Bonus: ......33...... s.?....33..... ....m...3..... ........33.... ....+....3.... 33.......3.... .3.w.....3l... .333.pf}..2... ...3..{...2... ...3...+..2... ...3......2... ...3...m.?22.. ...l2.....w2.. ....25.....2.. ....22.....2.. .~*..22.~...1. ......1..>..11 .w.w..1-w.w.-1 Level: gmaestro Wagner Bricks: .............. .............. ......##...... j.....##.....j jjj..####..jjj .jj..#kk#..jj. .jjj##kk##jjj. .jjj#kkkk#jjj. .jj#kkkkkk#jj. .jj#kkkkkk#jj. ...#kkkkkk#... ..#kkkkkkkk#.. ..#kkkkkkkk#.. ..#k#k##k#k#.. ..#kkkkkkkk#.. ..#kkkkkkkk#.. ..#kkkkkkkk#.. ..##########.. Bonus: .............. .............. ......+....... m............m .............. ......<>...... .............. ...b......b... ....s....s.... .............. .............. .............. ....-.~~.-.... .............. ......ll...... .............. ...*......*... ..5d......d5.. Level: gmaestro Varese Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjj**jjjjjj jjjjj*ff*jjjjj jjjj*ffff*jjjj jjjj*ffff*jjjj jjjj*fjjf*jjjj jjj*ffjjff*jjj jjj*fjjjjf*jjj jj*ffjjjjff*jj jj*fjjjjjjf*jj jj*fjjjjjjf*jj jj*fjjjjjjf*jj jj*fjjjjjjf*jj j*fjjjjjjjjf*j **fjjjjjjjjf** ffjjjjjjjjjjff Bonus: .............. .............. ......~>...... .....>gg~..... ....~5..5>.... ...>g.++.g~... ...~5....5>... ...fg.++.g~... ..>g......g>.. ..~5......5~.. .>g........g>. .~5........5~. .>g........g>. .~5........5~. .>g........g>. ~5..........5~ gg..........gg -............- Level: gmaestro Paganini Bricks: vv@@@akka@@@vv v@@@@akka@@@@v @@@@@akka@@@@@ @@@@@akka@@@@@ @@@@@akka@@@@@ @@@@@@kk@@@@@@ @@@##@kk@##@@@ @@@#@@kk@@#@@@ v@###@kk@###@v @@@#@@kk@@#@@@ @@@#@@kk@@#@@@ @@@#@@kk@@#@@@ @@##@@kk@@##@@ @@@@@@kk@@@@@@ @@@@@@kk@@@@@@ @@@@@aaaa@@@@@ v@@@@aaaa@@@@v vv@@@@aa@@@@vv Bonus: .....m..m..... .............. .......p...... .............. .............. .............. ...55....55... ...5......5... ..555.w..555.. ...5......5... ...5......5... ...5...l..5... ..55......55.. .............. .......&...... ......++...... .............. ......w....... lbreakout2-2.6.5/client/levels/LBreakout10000664000175000017500000004217412140767201015175 00000000000000Version: 1.00 Level: Michael Speck Wall Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. .dddddddddddd. .dddddddddddd. .eeeeeeeeeeee. .ffffffffffff. .ffffffffffff. .eeeeeeeeeeee. .dddddddddddd. .dddddddddddd. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ..s..0.>..m... ..1...+....0.. .<.-.1..-.l... .?.0..-.0..w.. ...+..1.<.+... ..0..b..-..0.. ..-.f.+..0.... ..0+...b.>.p.. .............. .............. .............. .............. Level: Michael Speck Breakthrough Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. gggggggggggggg gggggggggggggg eeeeeeeeeeeeee eeeeeeeeeeeeee dddddd..dddddd ddddd....ddddd iiii......iiii iii........iii ff..........ff f............f .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .0...1...-..m. ...b......2..0. ..0......+.?.. 1..+.......>+. ..b........w.. .............. .............. .............. .............. Level: Michael Speck Level 02 Bricks: .............. .............. .............. EEEEEEEEEEEEEE ..heggggggeh.. ...heeeeeeh... ....hhhhhh.... hhh........hhh eeeh......heee gggeh....heggg dddgeh..hegddd dddgeh..hegddd dddgeh..hegddd gggeh....heggg eeeh......heee hhh........hhh .............. .............. Bonus: .............. .............. .............. .............. ..1..l...+.0.. ....-...w..... ....f.b..-.... .+.........p.. b............. .<..-.......0. ...1......1..> .0..>...+..... ...+.f....<.b. ..1........0.. .?........+... ..-.........1. .............. .............. Level: Michael Speck U.F.O. Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. ......bb...... .....bkkb..... ....kkkkkk.... ...gkggggkg... ..kkkkkkkkkk.. .cccccccccccc. ..kkkkkkkkkk.. ...gkggggkg... ....kkkkkk.... .....bkkb..... ......bb...... .............. Bonus: .............. .............. .............. .............. .............. .............. ......l....... .......-...... ....1..0...... ...-..+..>.... ..<.?...1..... ...b.1.<..+... ....-..w.0.... ....>...-.?... .....+.0...... .....0..+..... ......b....... .............. Level: Michael Speck Pyramid Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. .....eeee..... .....ehhe..... ....ehhhhe.... ....eheehe.... ...ehheehhe... ...ehheehhe... ..bb######bb.. ..hhhhhhhhhh.. ..eeeehheeee.. .hhhheeeehhhh. .aaaaaaaaaaaa. .............. Bonus: .............. .............. .............. .............. .............. .............. ......-.f..... .....1.b...... .....-..1..... ........>..... ...1.<.?...... ...+......+... .............. ..m...-...0... ....+...0.-<.. ..-.1.0.+..0.. .0.+.>w.1.b... .............. Level: Michael Speck Bubbles Bricks: .............. .............. .............. EEEEEEEEEEEEEE .........gg... ..gg....gjgg.. .gjgg...gggg.. .gggg...gggg.. .gggg....gg... ..gg.......... ......gg...... .....gjgg..... .....gggg..... .gg..gggg..gg. gjgg..gg..gjgg gggg......gggg gggg......gggg .gg........gg. Bonus: .............. .............. .............. .............. .............. ...1....+.1... ..+......?.-.. .>.p....0.<... .-.......w.... ...0.......... ......f....... ........1..... .....-.l...... .s....+....... ..0....>....-. .-........b.1. ........b... ..?.........-. 1..+......+.<. .............. .............. .............. ....0.+.>0.... ....0-.f.0.... ....0..1.0.... .............. .............. Level: Michael Speck Mushroom Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .....ddd...... ...ddddddd.... ..ddddddddd... ..ddddddddd... ..ddddddddd... ..dd.eee.dd... .....eee...... f....eee...... .f..feeee.f.f. .f.f.eeee..f.. ffffffeeeeffff ffffffeeeeffff .............. Bonus: .............. .............. .............. .............. .............. ......1....... ...b..-.<..... ..-.....-..... ..+.f..<..b... ..1..l..1..... ...2..0..+.... .......-...... .....p........ ....>.+....... .....-.1...... .+..0.+..-..>. ...b.1.?..+... .............. Level: Michael Speck Level 08 Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. gggg#....#gggg geeg#....#geeg geeg#....#geeg geeg#....#geeg geeg#....#geeg gggg#....#gggg .............. aaaabbbbbbaaaa aaaabffffbaaaa ....bffffb.... ....######.... .............. Bonus: .............. .............. .............. .............. .............. .............. +.2.........b. ...-......-... 1...........1. ..>........... ..+........0.. .b.-........+. .............. .>.w.1...-..<. ..0...-.p..b.. .....<.2.+.... .............. .............. Level: Michael Speck Chest Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. .cccccccccccc. .cddddddddddc. .cdeeeeeeeedc. .cdeffffffedc. .cdefggggfedc. .cdefggggfedc. .cdeffffffedc. .cdeeeeeeeedc. .cddddddddddc. .cccccccccccc. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .101010101010. .0-..<.+...m1. .1.p......-.0. .0..+..>.?..1. .1....-...>.0. .0.l.....+..1. .1....+...-.0. .0.-.....w..1. .1<..s...+..0. .000101010101. .............. .............. Level: Michael Speck Level 10 Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. ..d#ffffff#d.. ..d#ffffff#d.. .dd#ffffff#dd. .dd#gggggg#dd. ddd#gggggg#ddd ddd#gggggg#ddd .dd#gggggg#dd. .dd#ffffff#dd. ..d#ffffff#d.. ..d#ffffff#d.. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ..<...1....... ......b..>.... .-..-...+..... .....0..1..-.. ..p...+......b .+..f...?...+. .....>.1.-.<.. .1...-.....m.. .......0...... .....+..b..... .............. .............. Level: Michael Speck Level 11 Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. cccc.cccc.cccc ceec.cddc.ceec ceec.cddc.ceec ceec.cddc.ceec cccc.cccc.cccc .............. cccc.bbbb.cccc cddc.bffb.cddc cddc.bffb.cddc cddc.bffb.cddc cccc.bbbb.cccc .............. Bonus: .............. .............. .............. .............. .............. .............. .0....+....m.. ........-..-.. ..+...0.>....+ .<.........b.. -.1...p...0... .............. .......-...<.. ..0..?..b...1. l.....1.....b. .+...s....-... ..>....+...... .............. Level: Michael Speck Egg Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. ......gg...... ....gggggg.... ...ghhhhhhg... ..ghiiiiiihg.. ..ghiiiiiihg.. .fhiiiiiiiihf. .fhhhhhhhhhhf. .ffffffffffff. .ffffffffffff. ..eeeeeeeeee.. ..dddddddddd.. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. ......0....... .....m..<.b... ....1.-..2.... ..0...1..-.... ...+.f..+..-.. ..1.-..2..p... .+..>.+....>.. ..b....b.+.-.. ....?...2.<... ..-..0..w..+.. .............. Level: Michael Speck Web Bricks: .............. .............. .............. EEEEEEEEEEEEEE b...b....b...b .b...b..b...b. ..b...bb...b.. ...b..cc..b... ....cc..cc.... bb..cd..dc..bb ..bcddddddcb.. ...cddddddc... ..bcddddddcb.. bb..cddddc..bb ....ccddcc.... ...bb.cc.bb... .bb........bb. b............b Bonus: .............. .............. .............. .............. .............. ........-..... ..2....f...... ......+....... ....1....2.... -...+...<...2. ...2.?...+.... ...<..-.1..... ....b.+..-.... .-...p.l....>. ....+..-...... ...>..1..+.... ..b.........2. .............. Level: Michael Speck Level 14 Bricks: .............. .............. .............. EEEEEEEEEEEEEE .eeeeeeeeeeee. ..eeeeeeeeee.. ...gggggggg... ....gggggg.... ....iiiiii.... ...iiiiiiii... ..hhhhhhhhhh.. .hhhhhhhhhhhh. .............. ffffffffffffff #f#f#f#f#f#f#f dddddddddddddd dddddddddddddd .............. Bonus: .............. .............. .............. .............. .>.-...+...2.. ....2.l..-.... ...+.....<.... .....-.1.+.... .............. ...b..2....... ......p.+.1... .1..+.<..-.... .............. ..-.s....-.2.. .?.?.?.?.?.?.? ....+...b...-. ..b...>...+... .............. Level: Michael Speck Bowl Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. .c..........c. .cggggggggggc. .cggggggggggc. .cddddddddddc. .c#ffffffff#c. ..#ffffffff#.. ..##dddddd##.. ...##eeee##... ....##ee##.... .....####..... .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. ..2.b.<+..1... ...+..s..b.... ....>.f.w.-... ...2..+.1-.... ....-.-..+.... .....+..2..... .....-.?...... .............. .............. .............. .............. Level: Michael Speck Hill Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. .............. .............. .............. .............. .............. ......hh...... .....gggg..... ....ffffff.... ...eeeeeeee... ..dddddddddd.. b############b .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .......+...... .....b-.1..... ....b2<.-..... ...+..2m.>+... ...2.-b.1..b.. 4............4 .............. Level: Michael Speck Symmetry Bricks: .............. .............. .............. EEEEEEEEEEEEEE ..i.h.g.f.e.d. .i.h.g.f.e.d.b i.h.g.f.e.d.b. .h.g.f.e.d.b.. h.g.f.e.d.b... .g.f.e.d.b..i. g.f.e.d.b..d.i .f.e.d.b..g.d. f.e.d.b..f.g.d .e.#.b..c.#.g. e.#.b....c.#.g .#.b......c.#. #.b........c.# .b..........c. Bonus: .............. .............. .............. .............. ....l.....s... .2.....2...<.. ....-...+...?. .-.....f.s.... w...b.....-... .....-...2.... ..+.>...+..b.. .2...f........ ..-........-.. .....b..+...>. ....1....+.... ...<.......... ...........1.. .2............ Level: Michael Speck Rainbow Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. .........ddddd .....ddddeeeee ..dddeeeehhhhh ddeeehhhhfffff eehhhffffiiiii hhfffiiiiggggg ffiiigggg..h.. iiggg....h.... gg..h..h...h.. ..h..h......h. .h.....h.h.... ....h.......h. Bonus: .............. .............. .............. .............. .............. .............. ...........-.. ......<....... ...-....+..<.. .w....f..-.+.. ..>.-..b....>. .-...+...+.... ..?.m......2.. .+..b....2.... ....2..4...2.. ..2..2......2. .2.....2.2.... ....2.......2. Level: Michael Speck House Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. ....dddddd.... ...dddddddd... ..dddddddddd.. .dddddddddddd. .jjj#....#jjj. .jjj#....#jjj. .jjj#gege#jjj. .jjj#egeg#jjj. .jjj#gege#jjj. .jjj#egeg#jjj. .jjj#gege#jjj. .jjj#egeg#jjj. .ffffffffffff. Bonus: .............. .............. .............. .............. .............. .....2.+...... .....f...>.... ....1.<..-?... ..+...-..2..m. .............. ...-........+. ......-.....2. ..-....>..-... .s.2..l.....b. .......2..w... .b...+..f..+.. ...+.......... ..<...?...2... Level: Michael Speck 'Fat Boy' Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. ....hhhhhh.... ..hhhhhhhhhh.. .hhhheeeehhhh. .hheeeeeeeehh. .hheeeeeeeehh. .hhhheeeehhhh. ..hhheeeehhh.. ....hheehh.... .....heeh..... .....heeh..... .....heeh..... ...hheeeehh... .hheeeeeeeehh. Bonus: .............. .............. .............. .............. .............. .......s...... ...3.+..-..... ....p.2...>... .?.-.2..<.-... ...<...+...+.. ..-..f...-.... ...+......2... .....2..+..... ......>....... ........p..... .....-........ ....2..w.+.... ...+..-..2.... Level: Michael Speck Twins Bricks: .............. .............. .............. EEEEEEEEEEEEEE ......##...... ......##...... ......##...... eeeeee##eeeeee dddddd##dddddd iiiiii##iiiiii iiiiii##iiiiii hhhhhh##hhhhhh gggggg##gggggg ffffff##ffffff eeeeee##eeeeee dddddd##dddddd .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. ..-......<.l.. ...2.....f...2 3.p.......2.-. .........m..>. +.2.f.......f. f...<...2..... .>.f......+... ..b.2.......3. .3.......2.f.. .............. .............. Level: Michael Speck Crusher Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. ffffffffffffff ffffffffffffff ggggggffgggggg cccccgffgccccc ....cgffgc.... ###.cgffgc.### ddd.cgffgc.ddd ddd.cgffgc.ddd ddd.cgffgc.ddd ddd.cgffgc.ddd ###.cggggc.### ....cccccc.... .............. Bonus: .............. .............. .............. .............. .............. .-...<..2...+. ....+.....p... .f.2....-..2.. ..w..3..b.>+.. ......2....... .....-..3..... .......?...... .+...+..2..<.. ......f.-..-.. b...>.3......? .......-...... .....b........ .............. Level: Michael Speck Dead End Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. eeeeeeeeeeeeee dddddddddddddd ddd########ddd ...#gggggg#... hhh#gggggg#hhh eee#ffffff#eee eee#ffffff#eee ...#......#... ggg#ee..ee#ggg ggg#dddddd#ggg ggg#dddddd#ggg .............. Bonus: .............. .............. .............. .............. .............. .............. .+..b..-...+.. ..2..+.>.-..1. .-...........- ....f..-...... ..<........+.. -.....+.>..... .2...2......2. .............. ..-.....<...+. ......b....3.. .+...2.f...+.. .............. Level: Michael Speck Level 24 Bricks: .............. .............. .............. EEEEEEEEEEEEEE ....gg.ff.dd.f ...gg.ff.dd.ff ..gg.ff.dd.ff. .gg.ff.dd.ff.g gg.ff.dd.ff.gg g.ff.dd.ff.gg. .ff.dd.ff.gg.e ff.dd.ff.gg.ee f.dd.ff.gg.ee. .dd.ff.gg.ee.. dd.ff.gg.ee... b.b.b.b.b.b.b. .b.b.b.b.b.b.b b.b.b.b.b.b.b. Bonus: .............. .............. .............. .............. .......?...... .........3.... ..2..-...+.... ....?..b...-.. .p....-...2... ...+........f. .-......b.+... ...b..+......s .....l...2.... .+..2.....-... ......f...w... 2............. ...>.....>.... .............. Level: Michael Speck Level 25 Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. .............. aaaaa....aaaaa eeeeaddddaeeee hhhhaddddahhhh eeeeabbbbaeeee eeeea....aeeee .............. .............. ffff#....#ffff kkkk#eeee#kkkk kkkk#eeee#kkkk ffff#aaaa#ffff #####....##### Bonus: .............. .............. .............. .............. .............. .............. 2.s........-.. ......?.b...2. .+.........m.. -.>...+.....<. 2.b.........+. .............. .............. .?........b.<- 2.+...l....2.. -.>.....+...-. ..3...f....1.. .............. Level: Michael Speck Barrier Bricks: .............. .............. .............. EEEEEEEEEEEEEE .....#..#..... .ddd.#ff#.ggg. .dgd.#ff#.gdg. .ddd......ggg. .............. ####......#### .............. .bbbbb..bbbbb. .bhhhb..bfffb. .biiib..bhhhb. .bhhhb..bfffb. .bbbbb..bbbbb. .............. ###aaaaaaaa### Bonus: .............. .............. .............. .............. .............. .......?...... ..5...+....5.. ...-......<... .............. .............. .............. ..+.2....+.>.. .>..-.......+. ..-..+..p...2. .2.-......1... ...w.....-.+.. .............. ....f.f..f.... Level: Michael Speck Butterfly Bricks: .............. .............. .............. EEEEEEEEEEEEEE .....i..i..... .hh...ii...hh. .hfhh.ii.hhfh. .hfffh##hfffh. .hfggf##fggfh. .hfggf##fggfh. ..hfgf##fgfh.. ..hfgf##fgfh.. ..hfgf##fgfh.. .hfggf##fggfh. .hfggf##fggfh. .hfffh##hfffh. .hfhh.##.hhfh. .hh........hh. Bonus: .............. .............. .............. .............. .............. .2....-....... ..<....f...1.. ...+......-... ....2....2..>. .+..-.....+... ...l....2..... ..s..3.....-.. ...+.....-.... ..2.......w... ....?...2...+. .-.>.......<.. .1.+.....b.... .............. Level: Michael Speck Chamber Bricks: .............. .............. .............. EEEEEEEEEEEEEE ..#........#.. ..#ffffffff#.. ..#dddddddd#.. gg#gggggggg#gg gg#gggggggg#gg ..#dddddddd#.. ..#........#.. e.###cccc###.e ee..........ee .ee.iiiiii.ee. ..eeffffffee.. ...effffffe... ....iiiiii.... .####....####. Bonus: .............. .............. .............. .............. .............. ...f..3....... ....-..>.3.... .-...3..?..... <.....f...>..+ ....>..-.f.... .............. .............. +...........+. .2..1.s..-.2.. ...+..<1.-f... .....f.+..1... .....2..b..... .............. Level: Michael Speck The Final Bricks: .............. .............. .............. EEEEEEEEEEEEEE .............. eeeeeeeeeeeeee cceeeeeeeeeecc iccffffffffcci iiccffffffccii iiicccccccciii iiiib....biiii ....b....b.... ddddb....bdddd ddddbggggbdddd hhhaaggggaahhh hhaaggggggaahh haa........aah ##....##....## Bonus: .............. .............. .............. .............. .............. ..w.2....?.... 2....+.2..b.-. ..-..<...l...b .b..p.f....2.. ..+..-..>.+... 2.>.-.......s. .........-.... ...2.......?.. .?...b...+...2 ..-..+.2...-.. .+..2.>.f.>.3. ..b........+.. .............. lbreakout2-2.6.5/client/levels/Vader0000664000175000017500000001344312140767201014262 00000000000000Version: 1.04 Level: Bertrand GRONDIN le mur vert Bricks: akkaaaaaaaaaaa kkkkkkkkkkkkkk @d@v@d@kv@k@vv @d@v@d@vv@d@vv @d@v@d@vv@d@vv @@@v@@@vv@@@vv vv***v****v*** vvEEEvEEEEvEEE vvjjjvjjjjvjjj iiiiiiiiiiiiii cc**cccc*ccc** **###**###*### iiiiiiiiiiiiii xxxxxxxxxxxxxx xxxxxxxxxxxxxx .............. .............. .............. Bonus: 55555555555555 .mm.d..mmd.... ..m.m...mj..mm ........m..... ....m.~.mm.~.. ..j.+..mm+.j.. .............. &&............ .............. w~mmm~m..~mm.. wb..<b+b.. ..bbbwp.wbbb.. ..bbbwwwwbbb.. .............. .............. .............. .............. Level: B&Z Bucket Bricks: ......@EEEEEEE .......E@..... .......E...... .......E...... .EEEE..E....E. .E@gEggEggggE. .EggEggEggggE. .EggEggEggggE. .EggEggEggggE. .EgggggEggggE. .EgggggEggggE. .EggggggggggE. .EggggggggggE. .EggggggggggE. .Eggggggggg@E. .Eggg@@gggggE. .E@gg@@gggggE. .EEEEEEEEEEEE. Bonus: .............. .............. .............. .............. .............. ...........w.. ...-.?b.bb.... ..?b..b..bbb.. ..bb.>b.?.b?.. ..bbb.b.-bbb.. ..bfbbb.bbbb.. ..bc.b.bb.bb.. ..b..gbb.>bb.. ..b.>.?.c.b... ..bbbbbb.bb... ..-bb..bbbbf.. ...w...m.?bb.. .............. Level: B&Z Visualization Bricks: ############## #f##e#dd#e##f# #f##e#dd#e##f# #f##e#dd#e##f# #f##e#dd#e##f# #f##e#dd#e##f# #f##e#dd#e##f# #f##e#dd#e##f# #f##e#dd#e##f# #f##e#dd#e##f# #f##e#dd#e##f# #f##e#dd#e##f# ######dd###### fffee#ddeeefff fffee#ddeeefff fffee#ddeeefff ###########... .............. Bonus: .............. .b..b.bb.b..b. .b..b.bb.b..b. .b..b.bb.b..b. .b..b.bb.b..b. .b..b.bb.b..b. .b..b.mm.b..b. .b..b.bb.b..b. .b..b.bb.b..b. .b..b.bb.b..b. .b..b.bb.b..b. .b..b.bb.b..b. ......bb...... bWlbb.cjbwW..w !bb&p.b+b.bwb. bfbbb.bb~.w..w .............. .............. Level: B&Z Temple Bricks: ......aa...... ......aa...... ......EE...... ......gg...... .....EEEE..... ....gggggg.... ....EEEEEE.... ...gggggggg... ...EEEEEEEE... ..gggggggggg.. ..EEEEEEEEEE.. .gggggggggggg. .EEEEEEEEEEEE. gggggggggggggg ############## aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa Bonus: .............. .............. .............. ......wf...... .............. ....bbbbbb.... .............. ...bbwb-bbb... .............. ..bbbbjbbbbb.. .............. .bbb+bbbwbbbb. .............. bbfbbbbbbbbbbb 0000000>000000 bbcbbbwbbbbbbb bmbmbmbmbmbmbm wbbwbbwbwbbbbw Level: B&Z Cross Bricks: a.a.a.aa.a.a.a .@.E.@aa@.E.@. a.a.a.aa.a.a.a ......@#...... ......#@...... EEEE..E#..EEEE ......#E...... ..a...@#...a.. .aca.a#@a.aca. acacacE#cacaca .aca.a#Ea.aca. ..a...@#...a.. ......#@...... ......E#...... zzzzzz#Ezzzzzz zzzzzz@#zzzzzz ......#@...... ......E#...... Bonus: b.b.b.bb.b.b.b ......bb...... b.b.b.bb.b.b.b ......5....... ......&5...... .......&...... ......+....... ..m...c+...m.. .bbb.b+cb.bbb. mbbbmb.+bmbbbm .wbb.b>.b.bbw. ..w...>>...w.. ......>>...... .......>...... bbbbbb155bbbbb wmpmpj11mmpmpw ......11...... .......1...... Level: B&Z Therm Bricks: aaaaaaaaaaaaaa aEEEaEEEEaEEEa aEdEaEEdEaEdEa aEdEaEddEaEdEa aEdEaEddEaEdEa aEdEaEddEaEdEa aEdEaEddEaEdEa aEdEaEddEaEdEa aEdEaEdEEaEdEa aEdEaEddEaEdEa aEdEaEddEaEdEa aEdEaEddEaEdEa aEdEaEEdEaEdEa aEdEaEddEaEdEa aEdEaEddEaEdEa aEdEaEddEaEdEa aEdEaEddEaEdEa aEdEaEdEEaEdEa Bonus: bbbbbbbbbbbbbb b...b....b...b b.b.1..p.1.b.b b.b.1....1.b.b b.b.f.p..1.b.b b.b...>}.?.b.b b.b.?.?..+.b.b b.b....m...b.b m.b.}....c.b.? ?.b.>....>.b.m 1.b.p.l..1.b.+ +.b.p....1.b.f f.b.+..?.m.b.? ?.b.m....?.b.1 1.b.1.?c.p.b.1 w.b.?..>.p.b.w w.b.}.mm...b.w w.b...m..}.b.w Level: B&Z Random Bricks: Exekgkgxekejxg *Ejfejkgj*ik*! h*Ehi!h!hddhd* gkkEdjfgeh*gdh !gjdEd*kfg!xfa fjkikEai*iaga* ieEkjkEejaiaf* *feEdgeEkfg*ha Eei*EdfxEd*ddg jE*c!EeixEe*j* x*Ei*dExg*Ekkd g!fdj!eEdxdE*k dh!hxhf!Edg*Ek f*gejEjgeEkeEj i*dh!iEe*i*iEa hfj*gkfEkegaEg *j*iajgaEfafEa .............. Bonus: ...mw..wwm.?bb ..g.bbbbbbbbbb -....bmww....b -bg..-bm.b.wb. .bw....b?b..b- .b.m...bbb.-b. wb..w...gbm.b. bb...cc..bm.b- bbmw........b. b..w..c.....bb b..m.........b wg*.wmm......b b4.b..m..c...b bw.bb..mm.w..b b.w4b...m..m.b bb4.bbb..wmm.b wb.wbwwb...m.. .............. Level: B&Z Bobble Bobble Bricks: fzzzzzzzzzzzzf fEzzzzzzzzzzEf fEzzzzzzzzzzEf fEzEzzzzzzEzEf fEzzzzzzzzzzEf fEzzzzzzzzzzEf fEzEzzzzzzEzEf fEzzzzzzzzzzEf fEzzzzzzzzzzEf fEzEzzzzzzEzEf fezzzzzzzzzzef fezzzzzzzzzzef feEEEEEEEEEEef feeeeeeeeeeeef feeeeeeeeeeeef EEEaaaaaaaaEEE fffaaaaaaaafff fffaaaaaaaafff Bonus: -c-ccc?ccc?ccc ....-...&..f.. f.......f....f ....4bbbb4.... ...-4bbbb4.}.m &.g.4bbbb-.... ....4bbbb4...f f.}.fbbbb4.m.. .....bbbbf...g ..0..bbbb....c ..&.-.&.&0.0.. &..0...f..s..c .g............ mmmmmmmmmmmmmm bbbbbbbbbbbbbb ...>>>>>>>>... bbbbbbbbbbbbbb wwwwwwwwwwwwww Level: B&Z Fly invisibly Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. ...........<.. ...~.......... .............. .f.....f...... ...c......c.~. .....}..<..... ...........}.. .<............ bbbbbbbcbbbbbb bbbb~bbbb~bbbb bbbbbbbbbbbbbb bbb}b&bbb}bfbb bfbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb www.4....g4.ww Level: B&Z FLy BoOom Bricks: ajdjjjjjdjajdj a*ddjaajjdja*d ddajdjjajdjaaj jdaajdjjajjjaj ajdajjdjajdjja ajjdajjdjaadja dajjdajddjajdj ddajjjajjdjadd j*jajdaajddj*d jjdajjdjajddaa ajjdajjjajjdda aajjaajdjjjjda aajjjajjdjajdd daajjdaadjjajj d*aajjdaaddj*j dddaajddaaddja jddjjjjdjjjjdd jjjddjjjjjjjjj Bonus: .......f...... ...0.<........ ...........~.. ...!.....b.... .<...f.~..w.b. ..~........... .......b....>. ...b.{...1.... ....w...!..... &...s.....s... .............. p.s.d.....b.!. ....>..b...... ...s..f....... .............. .............. *.*..*.*.*..*. .....w........ Level: B&Z Fly architect Bricks: @@@EEEE@@@@... @@@E@eE@@..... EEEEeeE@@..... EeeeeeE@@..... EeeeeeEEE..EE. EeeeeeEeeeeeE. EeeeeeEeeeeeE. EeeeeeEeeeeeE. EeeeeeeeeeeeE. EeeeeeeeeeeeE. EeeeeEEEeeeeE. E@eeeE.EeeeeE. EEeeEE.EeeeeE. #eee#..EeeeeE. #eee#..EeeeeE. #eee#..EeeeeE. #eee#..EeeeeE. #####..EEEEEE. Bonus: .............. .....5........ .............. .............. .............. .?..?....wwb.. ...m.....bbb.. .......>.wwb.. ....?....bb>.. ..?m.g.>.wwb.. .........bbb.. .........bbb.. .........bbb.. .............. .............. .............. .............. .............. Level: B&Z Fly Bricks: ..aaaaaaaaaa.. ..aEaaaaaaEa.. ..EdEaaaaEdE.. ..EdEEaaEEdE.. ..EeEdEEdEeE.. ..EeEdEEdEeE.. ..EeeeEEeeeE.. ..EeeeEEeeeE.. ..EeeeEEeeeE.. ..EaaaEEaaaE.. ..EaaaEEaaaE.. ..EaEaEEaEaE.. ..EeeeEEeeeE.. ..EeeeEEeeeE.. .............. .............. .............. .............. Bonus: ..bbbb000bbb.. ..b.b..w>w... ...bbb..www... .............. .............. .............. .............. Level: B&Z ButterFly Bricks: .............. vvvvvvvvvvvvvv eev#vvvvvv#vee veev#vvvv#veev vehev#vv#vehev ve!ievEEvei!ev vehfieEEeifhev vveifdEEdfievv vvveidEEdievvv vvvefhEEhfevvv vvefidEEdifevv vehi!eEEe!ihev veheevEEveehev veevvvvvvvveev evvvvvvvvvvvve vvvvvvvvvvvvvv .............. .............. Bonus: .............. .............. ?............? .............. ..?0..lg..0?.. ...0......0... ..?..W..W..?.. .....5..5..... ...~......~... w...b>b>b>b>b>b+ wbwbwbwbwbwbwb .............. .............. Level: B&Z Snake Bricks: EEEEEEEEEEEEEE E!EfdfEEdfdE!E EdEdfdEEfdfEfE EfEfEfEEdEdEdE EdEdEdEEfEfEfE EfEfEfEEdEdEdE EdEdEdEEfEfEfE EfEfEfEEdEdEdE EdEdEdEEfEfEfE EfEfEfEEdEdEdE EdEdEdEEfEfEfE EfEfEfdfdEdEdE EdEdEdfdfEfEfE EfEfEfdfdEdEdE EdEdEdfdfEfEfE EfdfEfdfdEdfdE EdfdEdfdfEfdfE EEEEEfdfdEEEEE Bonus: .............. .............. ..........~... .....?..>..... ...}.......... .?...>......?. ........~.j... .>.j....g...>. ..........>... ...f....?..... .l..........}. .....bbbb.f... ...>.bbbb..... .....wbwb..... .....bwbw..... .....wbwb..... .cm..bwbw..mc. .....wbwb..... Level: B&Z Sad Clown Bricks: EeeeeeeeeeeeeE EEeeEEeeEEeeEE e@ee@eeee@ee@e e@**@eeee@**@e e@gg@eeee@gg@e e@**@eeee@**@e e@@@@e@@e@@@@e eeeeee@@eeeeee eeaeee@@eeeaee eeeeeeeeeeeeee eeae@dddd@eaee eeee@****@eeee eeae@dddd@eaee eeee@****@eeee eeee@@@@@@eeee .............. .............. .............. Bonus: .bbbb.??.bbbb. .............. b............b b............b b.mm..cc..mm.b b....wwww....b b....w..w....b b..b......b..b b.db-....-bd.b bj.b......b.jb b.}b......bc.b b..b......b..b b.Wb......b!.b b..b......b..b wwww......wwww .............. .............. .............. Level: B&Z Barbarian Bricks: eeeedxxxxdeeee eddEdxxxxdEdde eddEdxxxxdEdde eddEdxxxxdEdde eEEEdxxxxdEEEe dddddEEEEddddd xxxxxEddExxxxx xxxxxEddExxxxx xxxxxEddExxxxx xxxxggggggxxxx xEEEgeggegEEEx xEddgeeeegddEx xEddgeeeegddEx xEddgeeeegddEx xEddgEEEEgddEx .............. .............. .............. Bonus: w.....ww.....w .............. .............. .............. .............. ..w........w.. bbbbb....bbbbb b...b....b...b b...b....b...b bbbbb....bbbbb b...b....b...b b.bbb....bbb.b b.bbb....bbb.b b.bbb....bbb.b w.bwb....bwb.w .............. .............. .............. Level: B&Z Barbarian2 Bricks: aaaaaaaaaaaaaa aaaaaaaaaaaaaa aEEEEEEEEEEEEa aEddddEEddddEa aEddddEEddddEa aEiiidEEdiiiEa aEidEEEEEEdiEa aEddEdEEdEddEa aEdeeeEEeeedEa aEdegeEEegedEa aEdeeeEEeeedEa aEddddEEddddEa aEEEEddddEEEEa aaaaddddddaaaa aaaaEEEEEEaaaa aaaadeiiedaaaa aaaaEEEEEEaaaa aaaaaddddaaaaa Bonus: b..c+....c...b ......j....... b............b .............. b...+........b +....m..m..... b............b .............c b.........c..b ...+.........+ b........c.+.. ..c..........b b............. cb.b.b.b.b.b.b b.bc......b.b. .b.b.b.b.bcb.b bcb.......b.b. wbwbwbwbwbwbwb Level: B&Z Invisible2 Bricks: EEE@@@@@@@@EEE EEEvvvvvvvvEEE EEvvvvvvvvvvEE EEvvEE@@EEvvEE EvvvvvvvvvvvvE EvvvEvvvvEvvvE vvvEEvEEvEEvvv vvEEvvvvvvEEvv @vEvv@vv@vvEv@ @vEvv@vv@vvEv@ vvEEvvvvvvEEvv vvvEEvEEvEEvvv EvvvEvvvvEvvvE EvvvvvvvvvvvvE EEvvEE@@EEvvEE EEvvvvvvvvvvEE EEEvvvvvvvvEEE EEEvE@@@@EvEEE Bonus: .............. ......cc...... .............. .............. ..f........f.. .............. c............c c............c ......>>...... ......>>...... bb..bbbbbb..bb bbb..b..b..bbb .bbb.bbbb.bbb. .mmbbbbbbbbmm. ..mm......mm.. ..bbbbbbbbbb.. ...wwbbbbww... ...w......w... lbreakout2-2.6.5/client/levels/Megadoomer0000664000175000017500000006041412204167627015307 00000000000000Version: 1.10 Level: Luke madness Bricks: @@@@@@@@@@@@@@ .gggggggggggg. .gggggggggggg. .gggggggggggg. .gggggggggggg. .gggggggggggg. .gggggggggggg. .gggggggggggg. .@@@@@@@@@@@@. .............. .............. ##.........### cc#.......#ccc ccc###..##cccc cccccccccccccc cccc......cccc ccc........ccc cc..........cc Bonus: .............. .bbb55m555bbb. .bbb.5555mbbb. .bbb..55..bbb. .bbb......bbb. .wbbbbbbbbbbw. .wbbbbbbbbbbw. .wwbbbbbbbbww. .............. .............. .............. .............. ??.........??? ???.......???? ?????????????? ????......???? ???........??? ??..........?? Level: luke show me the money! Bricks: dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd EEEEEE##EEEEEE .............. .............. EE#EEEEEE#EEEE .............. .............. #EEEEEEEEEEEE# ############## cccccccccccccc .h.h.h.h.h.h.h h.h.h.h.h.h.h. .h.h.h.h.h.h.h gggggggggggggg kkkkkkkkkkkkkk Bonus: 22222222222222 22222222222222 22222222222222 22222222222222 ......bb...... .............. .............. ..b......b.... .............. .............. b............b bbbbbbbbbbbbbb mbmbbbmmbbbbbm .0.0.0.0.0.0.0 0.0.0.0.0.0.0. .0.0.0.0.0.0.0 bbbbbbbbbbbbbb ww....w...bww. Level: luke Fast break Bricks: #************* #************* #EEEEEEEEEEE** #Ee.e.e.e.eE** #E.e.e.e.e.E** #Ee.e.e.e.eE** #E.e.e.e.e.E** #Ee.e.e.e.eE** #E.e.e.e.e.E** #Ee.e.e.e.eE** #E.e.e.e.e.E** #Ee.e.e.e.eE** #E.e.e.e.e.e** #Ee.e.e.e.e.** #EEEEEEEEEEEEE ############## iiiiiiiiiiiiii gggggggggggggg Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. b.b..b.b..bb.b .....m.....m.. w...w......w.w Level: luke smile Bricks: .............. .............. ......hh...... .....hhhh..... ....hhhhhh.... ...hhhhhhhh... ..hhvvhhvvhh.. .hhhvvhhvvhhh. .hhhhhhhhhhhh. .hhhhhhhhhhhh. .hhhhhhhhhhhh. ..hhvhhhhvhh.. ...hhvhhvhh... ....hhvvhh.... .....hhhh..... ......hh...... .............. .............. Bonus: .............. .............. ......w....... .......+...... ....-...?c.... ...s..c-..-... ..d.55..55.... ..+.5m.f25.s.. .............. .c-...-.l..+-. ..?+l.....cc.. ....2....2.... ...-.2..2.-... ......22...... .......+...... ......lc...... .............. .............. Level: luke cheaters don't win Bricks: #.hh......hh.# ..hh......hh.. ..hh!!!!!!hh.. ..hh!!!!!!hh.. ..hhjkjkjkhh.. ..##kjkjkj##.. ..##dddddd##.. ..##eeeeee##.. ..##gggggg##.. ..##iiiiii##.. ..##ffffff##.. ..##########.. ..##########.. ..##########.. ..##########.. .............. .............. .............. Bonus: {.........m..{ ..+........+.. ....w.....g... ..m...+....... .............. ..c?.....m??.. ..?f...l..-{.. ..{c..+...&c.. ..-c......{-.. ..?{.m..w.-f.. ..>d......~W.. ..W&W~->f{c?.. ..c~-{{c-?d-.. ..?-fd-?---?.. ..-{>c&-{?c?.. .............. .............. .............. Level: luke Nuke Bricks: d...j..j..jjjj .d..jjjjjjjjjj .dd..jjjj.jjjj .ddd...j..jjjj .#########..j. deh*******#... hde********#.. ehh*********#. deh*********#. ehh********#.. deh*******#... .#########.... .ddd...j..jj.j .dd.....jjj.j. .d....j.jjjjj. d......jjjj... ........jjjj.. .........jj... Bonus: ............md .>...>...+-... .......*....s{ ..+........... .ddddddddd..j. -..dddddddd... ..5ddddddddd.. 5..dddddddddd. ...dddddddddd. m.5ddddddddd.. ...dddddddd... .ddddddddd.... .>w........-.. .........+.... .+......>...+. -.........}... .........p.... .............. Level: luke Maze Bricks: ...*******#gg# ...jjjjjjj#gg# .#######..#gg# .#fff#....#gg# .#fff#....#gg# .#...#..###gg# j#...#........ *#............ j#........##.. j#f#####..###. *#f#***#...hhh .#f#ff.#...hhh .#####.####### ***........... iii........... #############. .............. .............. Bonus: ...bbbbbb..... ...ww.wwbb.... .............. .............. .............. .............. b............. .............. b............. b............. w..........555 .....w.....555 .............. .............. ..w........... .............. .............. .............. Level: luke columns Bricks: ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj ff*gg*hh*ii*jj ff*gg*hh*ii*jj ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj ffEggEhhEiiEjj .............. .............. Bonus: ....l........l .........s.... w..c.......... ......4+..+.+4 *...*.......+. .f.*...s..w..s 4...>..*...... .*.+......4.&~ &.....cj.><..- +..s{..f..{.<. .j..-....g-... -d.w4.&.....+. ...!..}-.*.... .+.....-.+&..w s..++.......c. .<............ .............. .............. Level: luke krazy koulmns Bricks: ff@gg@dd@ee@hh ff@gg@dd@ee@hh ff@gg@dd@ee@hh ff@gg@dd@ee@hh ff@gg@dd@ee@hh ff@gg@dd@ee@hh ff@gg@dd@ee@hh ff@gg@ddeeeehh ffggggdd****hh ff****ddeeeehh ffggggdd@@@@hh ff@@@@dd@ee@hh ff@gg@dd@ee@hh ff@gg@dd@ee@hh ff@gg@dd@ee@hh ff@gg@dd@ee@hh .............. .............. Bonus: ..?55?..?55?.. ..?55?.c?55?.. .c?..?.+?..?+. ..?l.?-.?.-?.. ..?.+?.*?~l?.> ~!?>.?m.?.+?-. ..?.p?..?f.?!. .-?.c?.c.....* +.....c.....+. .*~.......&... ......-.????.m ..????*+?.-?!. m+?.w?!.?..?.. ..?f.?.w?p.?.+ +.?-.?>-?.+?w. .p?.*?.!?c~?.. .............. .............. Level: luke what you can't see... Bricks: v.v.v.v.v.v.v. .v.v.v.v.v.v.v v.v.v.v.v.v.v. .v.v.v.v.v.v.v v.v.v.v.v.v.v. .v.v.v.v.v.v.v .............. vvvvvvvvvvvvvv .............. vvvvvvvvvvvvvv .............. .............. vvvvvvvvvvvvvv .............. .............. vvvvvvvvvvvvvv .............. .............. Bonus: !.5........... .f.b.&.5.b.... 5.......?.3.3. .W.w.3.*...W.b -.3...3...3... .3.{.5.3.5.... .............. .b.?....&.. ......m.5..... ..+-..m....c+. ...-.....d5-.. .-.5.......-.. ..>c..jc...+f. .+............ .....+5.p...-. ....w....g.... ....-..+.w.... .............. .............. .............. Level: luke Box Bricks: .............. .............. .####.@@.####. .#ddd....ddd#. .#dkkkkkkkkd#. .#dkc....ckd#. .#dk.c..c.kd#. .#dk..cc..kd#. .#dkcccccckd#. .#hk.c..c.kh#. .#hkciiiickh#. .#hkiiiiiikh#. .#hkiiiiiikh#. .#hkiiiiiikh#. .#hkkkkkkkkh#. .#hhhhhhhhhh#. .############. .............. Bonus: .............. .............. .............. .............. ...*..c3+..... ....?.....c... .....?........ ......3...3... ...+...c...... ..........>... ...>.c....?... ...3..>..>?3.. ..3.????c.?... .....>??..3... ..cc.>..cc.... .......+.3.... .............. .............. Level: luke Lukcy 13 Bricks: ffffffffffffff .@............ fffff@ff!ff@ff .!............ ffffffffffff!f ..@..!..@..... ffffffffffffff @....@......@. fffffffff@ffff .!.....!...... .............. @.@.@.@.@.@.@. .............. .............. .@.@.@.@.@.@.@ .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: luke Not my cup o' tea Bricks: .............. vvvvvvvvvvvvvv vddddddddddddv vdhhhhhhhhhhdv vdhhhhhhhhhhdv vdhhhhhhhhhhdv vdhhhhhhhhhhdv vdhhhhhhhhhhdv vdhhhhhhhhhhdv vjggggggggggjv vjggggggggggjv vjggggggggggjv vjggggggggggjv vjggggggggggjv vjggggggggggjv vjjjjjjjjjjjjv vvvvvvvvvvvvvv .............. Bonus: .............. .....????..... ???.??..???... ..??......?... ..??.......?.. .?..?......?.. .?..?......??. .?..........?. ??5555555555?. ?...........?. ???...??.....? .??.??.?.....? .????.?...?.?. .??.???...?.?. .......???.?.. .............. .............. .............. Level: luke blitz 1 Bricks: ffffffffffffff ************** gggggggggggggg .............. .............. .............. jjjjjjjjjjjjjj hhhhhhhhhhhhhh eeeeeeeeeeeeee dddddddddddddd iiiiiiiiiiiiii ffffffffffffff gggggggggggggg kkkkkkkkkkkkkk aaaaaaaaaaaaaa gggggggggggggg ************** ffffffffffffff Bonus: .............. .............. .............. .............. .............. .............. .............. ....?.....?... .?............ ......?..?..?. ....?......... ...?.......... .............. .?.?.w.?..?.?. .w............ &&&&&&&&&&&&&& >>>>>>>>>>>>>> ++++++++++++++ Level: luke blitz2 Bricks: ...!.......... ............!. ...!.......!.. ....!...!..... .!.!.!...!.!.. !.v.v.!.!.v.!. .v.!.!.v.v.v.v v.!.!.!.!.!.!. .!.!.!.!.!.!.. !.!.!.!.!.!.!. .!.!.!.!.!.!.! !.!.!.!.!.!.!. .!...!.!.!.!.! !.!.!.!.!.!.!. xxxxxxxxxxxxxx gggggggggggggg ************** ffffffffffffff Bonus: .............. .............. ...&.......... .............. ...l.......... ........c.&... .............. ..c.d.&.l.d... .&.......c.... ............&. .d...d.c...c.. ..&...&.&.&... .c...l.c...d.. ......c....... .............. &&&&&&&&&&&&&& >>>>>>>>>>>>>> ++++++++++++++ Level: luke blitz 3 Bricks: .............. kkkkkkkkkkkkkk .............. kkkkkkkkkkkkkk .............. kkkkkkkkkkkkkk .............. kkkkkkkkkkkkkk ************** kkk*#jjjj#kkkk ***#......#*** kk#iiiiiiii#kk *#..........#* #hhhhhhhhhhhh# .............. gggggggggggggg ************** ffffffffffffff Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. &&&&&&&&&&&&&& >>>>>>>>>>>>>> ++++++++++++++ Level: luke blitz 4 Bricks: ************** *vvvvvvvvvvvv* *............* *vvvvvvvvvvvv* *............* *vvvvvvvvvvvv* *............* *vvvvvvvvvvvv* *............* *vvvvvvvvvvvv* *............* *vvvvvvvvvvvv* *............* .vvvvvvvvvvvv. ************** gggggggggggggg ************** ffffffffffffff Bonus: .............. .??........?.. .............. ..???...???.?. .............. ...????????.?. .............. .?.?.?.??.?.?. .............. ...?..?..????. .............. .....?.???.... .............. .&&&&&&&&&&&&. cccccccccccccc &&&&&&&&&&&&&& >>>>>>>>>>>>>> ++++++++++++++ Level: luke blitz 5 Bricks: iiiiiiiiiiiiii ************** !!!!!!!!!!!!!! .............. ..##########.. ..k#**hh**#k.. ..k*#*hh*#*k.. ..kk#*hh*#kk.. ..kk#*hh*#kk.. ..kkk#**#kkk.. ..kkk#**#kkk.. ..kkk#**#kkk.. ..kk**##**kk.. ..##########.. gggggggggggggg ************** ************** ffffffffffffff Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. -------------- &&&&&&&&&&&&&& >>>>>>>>>>>>>> ++++++++++++++ Level: luke CPU Test Bricks: xxxx#!!!#xxx#x xxxx#!!##xxx#x xx#x#!#x#x#x#x x#xx##xx#x#x#x x#xx#xxx#x#x#x x#xx#xxx#x#x#x x#xx#x#x#x#x#x x#xx#x#x#xxxxx x#xx#x#x#xxxxx x#xx#x#x#xxxxx x#xx#x#x#x#x#x x#xx#x#x#x#x#x x#xx#x#x#x#x#x x#xx#x#x#x#x#x x#xx#x#x#x#x#x x#xxxx#xxx#x#x x#xxxx#xxx#xxx x############# Bonus: wbwb.....bbb.m bwww.....bbb.b bw.b...b.b.b.b w.bw..bb.b.b.b b.wb.bbb.b.b.b w.bb.bbb.b.b.b b.bb.b.b.b.b.b w.bb.b.b.bwbwb b.bb.b.b.bwbwb w.bb.b.b.bwbwb b.bb.b.b.b.b.b w.bb.b.b.b.b.b b.bb.b.b.b.b.b w.bb.b.b.b.b.b b.bb.b.b.b.b.b w.bbbb.bbb.b.b b.bbbb.bbb.bbb w............. Level: luke CPU Test II Bricks: ExExxExxExxExE xxxxxxxxxxxxxx E#E##E##E##E#E ccc*********** ccc*********** ############** ************** ************** **############ ************** ************** ############** ************** ************** **############ ************** ************** ############** Bonus: .............. .............. .............. bbbbbbbbbbbbbb mbbbbbbbbbbbbb ............bb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bb............ bbbbbbbbbbbbbb bbbbbbbbbbbbbb ............bb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bb............ bbbbbbwwwwwwww bbbbbbwwwwwwww ............ww Level: luke spiral Bricks: cccccccccccccc cccccccccccccc c###########cc c#ccccccccc#cc c#ccccccccc#cc b#cc#####cc#cc b#cc#ccc#cc#cc b#cc#ccc#cc#cc b#cc#c###cc#cc b#cc#cccccc#cc b#cc#cccccc#cc a#cc#ccccc##cc a#cc######!#cc a#ccccccc#!#cc a#cccccccc##cc a#######cccccc *******#cccccc *******####### Bonus: bbbbbbb*bbbbbb bbbbbbbbbbbbbb b...........bb b.bbbbbbbbb.bb b.bbbbbbbbb.bb b.bb.....bb.bb b.bb.bbb.bb.bb b.bb.bbm.bb.bb b.bb.b...bb.bb b.bb.bbbbbb.bb b.bb.bbbbbb.bb w.bb.bbbbb..bb w.bb........bb w.bbbbbbb...bb w.bbbbbbbb..bb w.......bbbbbb bwwbwww.bbbbbb bwwwwww....... Level: luke columns 3 Bricks: f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de f#g#h#i#j#k#de .............. .............. .............. .............. .............. Bonus: m.m.m.m.m.m..m .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: luke Teeth o' Doom Bricks: dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd kdjjkdjjkdjjkd k.jjk.jjk.jjk. k.jjk.jjk.jjk. k.jjk.jjk.jjk. j.jjk.jjk.jjk. ...j...j...j.. .j...j...j...j jjj.jjj.jjj.jj kjj.kjj.kjj.kj kjj.kjj.kjj.kj kjj.kjj.kjj.kj kjjdkjjdkjjdkj dddddddddddddd dddddddddddddd Bonus: .............. .m-..--.&.*... ........+...p. .-..........-. ...*..-...*... .......>...... ..>........... .......w...-.. ...+....+..... .......>...... .f...f...f...f .............. .............. ......<....... ..+..-..-+.... .............. <....+...-<... ..-..........- Level: luke not happy anymore :( Bricks: .............. .............. ....hhhhhh.... ...hhhhhhhh... ..hhhhhhhhhh.. .hhhhhhhhhhhh. .hhvhvhhvhvhh. .hhvvvhhvvvhh. .hhhvhhhhvhhh. .hhhhhhhhhhhh. .hhhhhhhhhhhh. .hhhvhhhhvhhh. .hhvhvhhvhvhh. ..hhhvvvvhhh.. ...hhhvvhhh... ....hhhhhh.... .............. .............. Bonus: .............. .............. .............. .....>.-...... .......>...... ..---......-.. ..-0.0..0.0... ...000..000.>. .>..m..>.m.... ..>...>....>.. ...--....-->-. ....0-...0..-. ...0.0.>0.0... ...->0000..... ......00.-.... .......>...... .............. .............. Level: luke WHHHHHHHHHHYYYYYY Bricks: ...kkkkkkkk... ....kkkkkk.... ....######.... ....jjjjjj.... .....####..... .....gggg..... ......##...... .....ffff..... .....####..... ....hhhhhh.... ....######.... ...iiiiiiii... ...########... ..eeeeeeeeee.. ..##########.. .dddddddddddd. .############. .............. Bonus: ...+b.-.b.c... .....b........ .............. ........c..... .............. .....cb....... .............. ......+....... .............. .....-.b...... .............. ...+.b....c... .............. ...+.c.b.-.+.. .............. ...b..w..-.+.. .............. .............. Level: luke Invader Bricks: .............. .....d..d..... ....d....d.... ...d......d... ...d......d... ...dddddddd... ..dd..dd..dd.. ..d.dd..dd.d.. ..d.dd..dd.d.. ..dd..dd..dd.. ...dddddddd... ....dddddd.... ....dddddd.... .....dddd..... .....dddd..... .....dddd..... ......dd...... ......dd...... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: luke stairway from hell Bricks: cccccccccccccc cccccccccccccc ####cccccccccc cccc###ccccccc ccccccc###cccc cccccccccc###c cccccccccccccc cccccccccccccc cccccccccc#### ccccccc###cccc cccc###ccccccc c###cccccccccc cccccccccccccc .......ccccccc ####......cccc cccc###....... bbbbbbb###.... aaaaaaaaaa###. Bonus: .............. .............. ....m......... .b............ .bb........... bwwbbb........ .bbbb.bbb..... .b.bwb.bwb.b.. b.b.b.b....... .bb.......bbb. b.......bbb.bb ....b...bbbbbb bbbbbbbbbbbb.. .......bbbbbb. ..........bb.. wwwb.......... wbwwbww....... wwwwwwwwww.... Level: luke Tacco! Bricks: .............. .............. .............. ....f...f..... ....efeede.... ..eedfddffef.. .fdfhhhhhhde.. .efhhhhhhhhfef .dhhhhhhhhhhde .fhhhhhhhhhhf. .hhhhhhhhhhhh. .hhhhhhhhhhhh. .hhhhhhhhhhhh. .hhhhhhhhhhhh. .hhhhhhhhhhhh. .............. .............. .............. Bonus: .............. .............. .............. .............. ....?????..... ..?????.?..... ..?ccc*c?..... ..?mcc??cc.... ..?cc??cccc??. .?cc???ccc.c?. .?cc?w?c.c.c?. .?ccccccc..?c. .?.ccccccc??.. .???cc..??.... ...??????..... .............. .............. .............. Level: luke stripe Search Bricks: gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev gvivjvfvdvivev g.i.j...d.i.e. g.i.....d.i.e. ..i.....d.i.e. ........d...e. ............e. Bonus: .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .?.?.?.?.?.?.? .............. .............. .............. .............. .............. Level: luke Error Reading Level: ok Bricks: v#aajbjjjaaa#v v#aajbjjjaaa#v v#aajbjjjaaa#v v#aajjjjjaaa#v .#aaaaaaaaaa#. .#aaaaaaaaaa#. .#aaaaaaaaaa#. .#aaaaccaaaa#. .#aaaccbcaaa#. .#aaaccccaaa#. .#aaaaccaaaa#. .#aaaaaaaaaa#. .#aaaaaaaaaa#. .#aaaaaaaaaa#. .#aaaaaaaaaa#. .#aaaaaaaaaa#. .############. .............. Bonus: m............m m............m m............m m............m .............. .............. .............. ......55...... .....5555..... .....5555..... ......55...... .............. .............. .............. .............. .............. .............. .............. Level: luke encyclopedia enthropia Bricks: ............f. hhfc.f.ffcf.fh cc.c*cd*gc*h.h .*fchc.dg.*h*f c!.*..*dhg..cf g!hcgc.hc.!**. .c.c.*ffffg..h .**ff...**fgf* f.gcdh*c.!h!.. ..!h*d..g!*!.g d!.!!dfg.f*ff. h!*.fd.g*c..*! h..g.cc..cgdc! hccggd*hh!.*c! .ff..f*d.*!d.h ...*g..gg.cdhh *hcc!!g.....f. !.ghh!g.ff.g.. Bonus: .............. .............. ??.?.......... ?..???.??..... ?........????. ....??.?...... .....??......? ........?????? ...????...?... ..??.......... ?..?..?...?... ??..?....?.... .?....?.?..... ..?......?.... ..?..?........ .....?....?.?. ...?.?........ ...??......... Level: luke Purple Monkeis Bricks: j..jjjj.f....@ jjjjjj.fff...@ .jjjjjffiiff.@ jjj.j.ff@i@@@@ j.....ffiff..@ ....i..fif.i.@ ..ii....fi.i.@ ..i.i.....i..@ .i.ii...ii.i.i ..ii.......i.i ...i..i...iii@ i..i.i...i.ii@ .iiii...i.ii.i ...i..i...i.ii ...i.i.i...ii@ ..i.i......i.@ ..i.i........@ .ii.ii.......@ Bonus: .............. .............. .<.<.......... .............. .............. .........<.... .............. .............. .............. .............. ...........<.. ...<.......... .............. .............. .............. .............. .............. .............. Level: luke monkey riding dishwasher Bricks: kkkkkkkkkkkkkk kkkkkkkkkkkkkk kkkkkkkkkkkkkk ........a....a ..i........a.. .i.i.....a...a i.i.j..a..a.a. .ii.j....a.a.. .i.ij.......aa .ii.jjjjjaa... .i..jjjjj.a.a. .i..jjjjj..a.. ii..jjjjja.j.a i.i.jjjjj..j.. i..ijjjjjaj... .i..jjjjj.ja.. ..i.jjjjjj...a .i..jjjjj..... Bonus: .............. ......<....... .............. .............. .............. .........<.... .......<...... ...........0.. .............. .<.......<.... ............<. .............. .............. ......<....... .............. .............. .............. .............. Level: luke Firecracker Bricks: ***********#*# *########*#*#* #******#**##*# *######*#*#*#* #******#**##*# #*########*##* *##*******##*# **###########* *****#*****#*# *###*#*######* #****#******** **############ *#************ ***####@@@@@@. ###........... ***........... ***..#........ ####.######### Bonus: .............. .............. .............. .............. .2222222...... .2............ 2..2222222.... 22............ 22222......... 2...2......... .2222......... 22............ 2.222222222222 222........... .............. 222........... 222........... .............. Level: luke begenning of the end Bricks: .............. jjjjjjjjjjjjjj jjjjjjjjjjjjjj iiiiiiiiiiiiii iiiiiiiiiiiiii dddddddddddddd ddddd#dd#ddddd hhhh#hhhh#hhhh hhh#hhhhhh#hhh gg#gggggggg#gg gggggggggggggg ffffffffffffff ff#ffffffff#ff #vv#......#vv# ....#....#.... .....#vv#..... .............. .............. Bonus: .............. .....-........ .*......-.w.>. ..>c.>....>... .....d.c.b.... >>.-..&....p.. .......>...-.. ..d........... c.....>>>..d>. .....c........ .p...........c ...-.>.p.-.... ......+.}...>. ..>........... .............. .......+...... .............. .............. Level: luke one last break Bricks: .............. .!.!.!.!.!.!.! !.!.!.!.!.!.!. .!.!.!.!.!.!.! !.!.!.!.!.!.!. .!.!.!.!.!.!.! !.!.!.!.!.!.!. .!.!.!.!.!.!.! !.!.!.!.!.!.!. .!.!.!.!.!.!.! !.!.!.!.!.!.!. .!.!.!.!.!.!.! !.!.!.!.!.!.!. .!.!.!.!.!.!.! !.!.!.!.!.!.!. .!.!.!.!.!.!.! .............. .............. Bonus: .............. ...m.......m.. .............. .............. .............. .m.m...m...m.. .............. .m.......m.... ....m......... .......m.....m ..m........... ...........m.. ......m....... m............. .............. .....m.....m.. .............. .............. Level: luke Die Die My Darling Bricks: ..@@.......... ..@........... ..@kkkkkkkkk.. @@@kkkkkkkkkk. @@@jjjjjjjjjd. ..@jjjjjjjdd.. ..@........d.. ..@@.......d.. ........dddddd gggggggdgddddg ggggggdgdgdddd #g#g#d#d#d#d#d #g#g#g#g#d#d#d gggggggddddddd ggggggdggddgdd .#.#.#.#d#d#d# .#.#.#.#d#.#d# .#.#.#.#.#.#d# Bonus: .............. .............. ...>.......... .............. .....>........ ...>....!..... .............. .............. .............. ..-......--... >-!.-.!->..>-. ...>.......... ...........-.- .-..>.....>... >.-...-.--..-. .............. .............. .............. Level: luke Almost there... Bricks: hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh .....v.v.v.v.v ####v.v.v.#### .v.v.v.v.v.v.v v.v.v.v.v.v.v. .v.v.v.v.v.v.v v.v#v.v.v.#.v. .v.v#v.v.#.v.v v.v.v#v.#.v.v. .v.v.v##.v.v.v v.v.v.v.v.v.v. .v.v.v.v.v.v.v v.v.v.v.v.v.v. .v.v.v.v.v.v.v v.v.v.v.v.v.v. .............. Bonus: 55>55555555555 55555}5?}5>5>5 555>5555555555 .........l.... ....*......... .l...?.-.}.... ..-.}.c.....-. .....-.*.-.... {.....f.....c. .+.l...>...?.{ ......g.....+. .?.*.{........ ..c.......+.*. .{.}.f.f...... ..+...?...{.?. ...c.....c.... ..........+... .............. Level: luke MEGADOOMER Bricks: ************** !!!!!!!!!!!!!! jjjjjjjjjjjjjj jj@hhhhhhhh@jj j@ghhhhhhhhg@j @gghhhhhhhhgg@ ggghhh##hhhggg ggghh#ii#hhggg gggh#iiii#hggg ff#hiiiiiih#ff ff#ihhhhhhi#ff ff#i#hhhh#i#ff ff#ii#hh#ii#ff ff#iii##iii#ff ff#iiiiiiii#ff ff#iiiiiiii#ff ###iiiiiiii### xxxxxxxxxxxxxx Bonus: 5....-..5....5 ...5...f...f-. 5-.f.5..-~5.5. ....{.5...?..? ...?...W55.... ..?.5--.?5d... .5.5s....~-.5. ..WWf..5...{.d d-....W.>.f.-. .5...>>~.5...W W..{.5..5??.-- --...p>5...... .f.?..W...W..5 .-.-.5...5..~5 ~..~..{5d.f... ....5?.f.-.... .........?.... .............. lbreakout2-2.6.5/client/levels/Holidays0000664000175000017500000002177012140767201014777 00000000000000Level: Martin Moeller 1st Day of X-Mas Bricks: ghg........... ghg!..!..!..!. ghg........... ghg........... ###kkkkkkkkkkk **#vvvvvvvvvkk cc#vdddjdddvkk cc#vdddjdddvkk cc#vdddjdddvkk cc#vjjjjjjjvkk cc#vdddjdddvkk cc#vdddjdddvkk cc#vdddjdddvkk cc##########kk ............... ............... ............... ............... Bonus: ............... ..?.s..4..w..?. ............... ..w............ .....f.f.c.c.3. ....b.~.s.>.b>. .....1.1.1.1..< ....-.g.2.l.~.1 ....?1.1.1.1?<> ....+.2.j.2.+1. .....1.1.1.1-.< ....?.m.2.p..>. .....1.1.1.1>.1 ............... ............... ............... ............... ............... Level: Martin Moeller 2nd Day of X-Mas Bricks: hhh*cccccccccc ggh#cccccccccc hhhvc!cc!!cc!c hgg#cccccccccc hhhvcccccccccc #c#*###*##*### vvvvvvvvvvvvvv v**vvvvvvvvvvv vvvvvvvvvvvvvv ###**######### bb#bb#bbbbbbbb ffffffffffffff eeeeeeeeeeeeee ............... ............... ............... ............... ............... Bonus: ...sl...?.....? ..4.5j......... ......w..gp..m. ...45.........m w...?.l.l.?.l. ..5...5.?.?.?.? 3+3-3+3-3+3-3+ ?2?2?2?2?2m2?2 1~1c1>1d1>1c1~ ~.d.<.>.d.~.c. ............... ?....l...l...? ............... ............... ............... ............... ............... ............... Level: Martin Moeller 3rd Day of X-Mas Bricks: hhh#ff!eddiijk ggh#!feeddiijk ghhvff!eddiijk gghv!feeddiijk hhh#ff!eddiijk ####!feeddiijk !f!fff!eddiijk ffffffeeddiijk e!e!e!eeddiijk ddddddddddiijk ddddddddddiijk iiiiiiiiiiiijk iiiiiiiiiiiijk jjjjjjjjjjjjjk ************** ##v###vv###v## ............... ............... Bonus: l..5..?......g ....5>......... .......>....... ....w?......... ....5..-..<.... 5555-......... +.?...+....j.. ............... ..-.+.>........ .........j..... ............... .....<......... cf............ m~............ ..s.43....34.w. ...>...??...b.. ............... ............... Level: Martin Moeller 4th Day of X-Mas Bricks: hgh#!k!j!cbakj hgh#f!k!jcbakj hhh*!f!k!cbakj ggh#e!f!kcbakj ggh#!e!f!cbakj #v##d!e!fcbakj !j!i!d!e!cbakj k!j!i!d!ecbakj !k!j!i!d!cbakk e!k!j!i!dcbaaa !e!k!j!i!cbbbb cccccccccccccc ............... ............... ............... ............... ............... ............... Bonus: .....4.4.?..... ......4.?..?... ..m..4.?.b...?. ......?.b...5.. .....?.b.b....? ......?.b..?... 1.0.3.?.b...?. ..0.3.3.?...... 0.3.3.3.?..... ..0.3.3.?..?... 1.0.3.?.s....? ............... ............... ............... ............... ............... ............... ............... Level: Martin Moeller 5th Day of X-Mas Bricks: hhh#dddddddddd hgg#eeeeeeeeee hhhcf#ffffffff gghcg##ggggg#g hhh#hhhhhhh##h ####iiiiiiiiii jjjjjjjjjjjjjj kkkkkkkkkkkkkk jjjjjjjjjjjjjj iiiii##iiiiiii hhhhhh#hhhhhhh gg#ggggggggggg f##fffffffffff eeeeeeeee#eeee dddddddd##dddd vvvvvvvvvvvvvv ............... ............... Bonus: ............... ......3..3..3.. ..?..?.b....... ............p.? ............... ......>........ ......1..1..1.. ............... ..c...m.?...d.. ............... ............... ..l.?.0..0..0.. ............... ......f..w.?... ............... ..~..<..+..-..? ............... ............... Level: Martin Moeller 6th Day of X-Mas Bricks: hhh#cccccccccc hgg#bbbbbbbbbc hhh#aaaaaaaabc hgh#vvvvvvvabc hhh#feijdkvabc v###feijdkvabc cbavfeijdkvabc cbavfeijdkv##c #bavfeijdkvabc cbavvvvvvvvabc cbaaaaaaaaaabc *##**##**##**# cccccccccccccc ............... ............... ............... ............... ............... Bonus: ............... ......+.<>.+... ............... ..m............ .............m. .......?......g .....f?d?...... s...?~.c?-.... ..........?.... ............... ......j.......w ............... ............... ............... ............... ............... ............... ............... Level: Martin Moeller 7th Day of X-Mas Bricks: hhhjjjjjjkkkkk gghjjjjjjkkkkk gghj####jkkkkk gghj#gg#j####j gghj#gg#jiiiii ###j#gg#jiiiii jjjj#gg#jjjjii j####gg####j#i j#eefeefee#j#i j#eeeeeeee#j#i j####dd####j#i jjjjddddjjjjii iiiiddddiiiiii bbbb#dd#bbbbbb cccc####cccccc ............... ............... ............... Bonus: .......m....... ..1........0.1. 0............. ....04m.4.....w g............. ......j...1.0.f ..1..4.p4...... -..........-.1 p...s..<...... 1.+......+.... -..........-.0 ............... ..b~.+..+.d..b. ..?........?... ............... ............... ............... ............... Level: Martin Moeller 8th Day of X-Mas Bricks: hhh#.......... hgh!.......... hhh#..#fffff#. hgh!..#fffff#. hhh#..#fffff#. #!#!..#######. .......jjj#iii. .......jjj#iii. .......jjj#iii. ####..#######. #ddd..#eeeee#. #ddd..#eeeee#. #ddd..#eeeee#. #ddd.......... #ddd.......... ####.......... ............... ............... Bonus: ............... ..l.+.......... ............... ..m.-...3.?.3.. ..........3.... ..-.+.......... .......3.....3. ........?...?.. .........3.3... ............... ..2.2...3...3.. ...?.....?3?... ..?4?.......... ...?........... ..2.2.......... ............... ............... ............... Level: Martin Moeller 9th Day of X-Mas Bricks: hhh!*......... hgh!c......... hhh!cj#jdddd.. ggh!cj#jdddd.. ggh!cj#jdddd.. !!!!*j#jdddd.. *cc*cj#jdddd.. ..ddddj#jdddd.. ..jjjjj#jjjjj.. ..###########.. ..jjjjj#jjjjj.. ..ddddj#jdddd.. ..ddddj#jdddd.. ..ddddj#jdddd.. ..ddddj#jdddd.. ..ddddj#jdddd.. ..ddddj#jdddd.. ............... Bonus: ....+.......... ..m.-.......... ....>.......... ....<.......... ....b....1?1... -+bp.......... ..........1?... ..1?1l...l..... ...j..4.4..j... ............... ...j..4.4..j... .....l...l..... ...?1.....1?... ............... ...1?1...1?.... ...........1... ............... ............... Level: Martin Moeller 10th Day of X-Mas Bricks: ghgviiifffjjjj hghviiifff#jjj hhhviii#fff#jj hghvii#fffff#j hghvi#efffffff vvvv#eeeffffff iii#eeee#fffff ii#eeeeee#ffff i#eeeeeeee#fff eeeeeeeeeee#ff eeeeee#eeeeeff eeeee#d#eeeeef eeee#ddd#eeeee eee#ddddd#eeee ee#ddddddd#eee e#ddddddddd#ee #dddddddddddee ............... Bonus: ........m...... .............s. ..m......1....1 ...........0... ............1.. .........0.j... ......4...1.0.. ............... .......0....... ....4.j..0..... ...1........... .......s...0..g ..4............ 1.....?.....1. ......+.+...... m...-.-.-..... ............... ............... Level: Martin Moeller 11th Day of X-Mas Bricks: hhg........... hgh........... hhg..vvvvvvv.. hgh..vdddddd.. hhg..vjjjjjj.. ......viiiiii.. ......veeeeee.. ..#vvvvffffff.. ..#vddddddddd.. ..#vjjjjjjjjj.. ..#viiiiiiiii.. ..#veeeeeeeee.. ..#vfffffffff.. ############.. ............... ............... ............... ............... Bonus: ...w........... ..m............ ...b..g-c.f-+.. ..s.....1...... ...+..+........ ......>.?.0?... ......-1....... ...+.~+..?..1.. ...>....0...... ...-.l.?.1?0... ............... ...c.?.1.0.?... ...-........j.. ............... ............... ............... ............... ............... Level: Martin Moeller 12th Day of X-Mas Bricks: ghg#dddddddddd hgh#dddddddddd hgg#########ee hgh#kkkkkkf#ee ghg#kkkkkkf#ee ########j####e eed#ggh#jjf#ee eed#ggh#jjf#ee eed#ggh#jjffee eed#gg##jjffee e###g#h#####ee eeddgghhj#ffee eeddgghhj#ffee eeddgg####f##e ............... ............... ............... ............... Bonus: 5.j...?>0.c..? ..s...0..m..0.. ..+b..........1 ..p..5.0d.?...> b.g.m..c0...c. ............... ...1.?.m...?.d. cd....1.1.>.1. ..?...c...?...? 1.5.......1... .....1.>.....>. .....0..?..?..1 ...1.....0..... ............... ............... ............... ............... ............... Level: Martin Moeller Happy New Year Bricks: hhhhhhhhhhhhhh hh*hhh*hhh*hhh *hhhhhhhhhhh*# !*hh*hhh*hh*!* *#*hhhhhhh*#*v v*!*hh*hh*!*vj dv*#*hhh*#*vjj ddv*!*h*!*vjjj dddv*#*#*vjj*j d*ddv*!*vjjjjj dddddv*vjj*jjj ddd*ddvjjjjjjj *dddddvjjjjjj* vvvvvvvvvvvvvv ............... ............... ............... ............... Bonus: 33333333333333 22222222222222 1111111111111. 00000000000000 4.444444444.44 33333333333333 222.22222.2222 11111111111111 00000.0.000000 55555555555555 33333333333333 22222222222222 11111111111111 00000000000000 ............... ............... ............... ............... Level: Martin Moeller Easter Bricks: ............... ..hhhkkhhkkhhh. ..h####..####h. ..h#ffffffff#h. ..k#ffdhhdff#k. ..k#fdjhhjdf#k. ..h.fjjjjjjfvh. ..h.ijjjjjjivh. ..h.ijjjjjjivh. ..h.ijjjjjjivh. ..h.ijjjjjjivh. ..h.fijjjjifvh. ..k#ffjjjjff#k. ..k#fffjjfff#k. ..h#ffffffff#h. ..h####vv####h. ..hhhkkhhkkhhh. ............... Bonus: ............... ............... ............... ....f>.dd.>f... ....>......>... ......?..?..... .....p?..... ....f>.--.>f... ............... ............... ............... Level: Martin Moeller Grand Finale Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj j###jj#h#j###j j#gg#j#h#j#ddj j#gg#j#h#j#ddj j#g#jj#h#j##dj j#g#jjj#jj##dj j#gg#jj#jj#ddj j#gg#jj#jj#ddj j###jjj#jj###j jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj ##vv##..##vv## ............... ............... ............... ............... Bonus: ..?.....?.....? m...?...-.?.3. ..........+.... ?..3.......... ......+.....b.. ...3.3..l...... ...3.........3c .......3..<.b.. 3..3....+..... .....-j........ ...?....?...?.. .....c...-p...g ...........c... ............... ............... ............... ............... ............... lbreakout2-2.6.5/client/levels/Yoda0000664000175000017500000000337012140767201014113 00000000000000Version: 1.04 Level: Bertrand GRONDIN Ligne rouge Bricks: iiiiiiiiiiiiii iiiiiiiiiiiiii cccccccccccccc cccccccccccccc @@@@@@@@@@@@@e jjjjjjjjjjjjjj jjjjj****jjjjj dddddddddddddd dddddddddddddd vvvvvvvvvvvvvv !!!!!!!!!!!!!! vvv*vvv*vvvv*v vvvvvvvvvvvvvv vv###v###vv### xxxxxxxxxxxxxx .............. .............. .............. Bonus: .............. .............. .............. ...m..m...m... ..l..l..l..l.m wwww......wwww ccc.......cccc ....+....+.... .............. ....d~~~~d.... .............. .............. *....*....*... ++...+...++... bwbwbpp*bwbwb* .............. .............. .............. Level: Bertrand GRONDIN Murs rouges Bricks: hhhhhhhhhhhhhh !!!!!!!!!!!!!! *@*@*@*@*@*@*@ cccccccccccccc cccccccccccccc @d@d@d@d@d@d@d gddddddddddddg gddvvvvvvvvddg g@@vzzzzzzv@@g g@@vz****zv@@g g@@vz****zv@@g g@@vz****zv@@g g@@vz****zv@@g g@@vz****zv@@g g@@vz****zv@@g !!!!!!!!!!!!!! xxxxxxxxxxxxxx .............. Bonus: 55555555555555 33333333333333 ...l.....l.... 4..w......w..4 .............. .m.mWm.m.mWm.. 2............2 2..11111111..2 2~~1w.>>.w1~~2 2g-1......1g-2 2..1..++..1..2 2>>1>....>1>>2 2ff1..**..1ff2 2..1......1..2 2j.1..jj..1j.2 00000000000000 w.bp}w.pbwpb{w .............. Level: Bertrand GRONDIN Alveoles Bricks: v*vv*vv*vv*vv* !!!!!!!!!!!!!! vvvvvvvvvvvvvv v!@!!!!@!!!@!v v@!@!!@!@!@!@v v*!*!!*!*!*!*v v@!@!!@!@!@!@v v!@!!!!@!!!@!v vvvvvvvvvvvvvv hhzz!!cc!!zzhh hhzz!!cc!!zzhh hhzz*!cc*!zzhh hhzz!*cc!*zzhh hhzz!!cc!!zzhh hhzz!!cc!!zzhh hEEEEEEEEEEEEh .............. .............. Bonus: ...5..5m.5..5. .............. ...4.c4.c4..4. .............. .............. ...3.p3..3..3p .............. .*.2*.2..2..2. ?????????????? 1*l1..gg.1.l*1 .............. .............. .............. 0...0...0..0.. ww..........ww w............w .............. .............. lbreakout2-2.6.5/client/levels/Cool0000664000175000017500000004522012140767201014113 00000000000000Version: 1.00 Level: noname untitled Bricks: .............. .............. ffffffffffffff gcgggcgggcgggc hhhhhhhhhhhhhh iiiiiiiiiiiiii dddcdddcdddcdd eeeeeeeeeeeeee jjjjjjjjjjjjjj kckkkckkkckkkc .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. 4.4.4.4l4.4.4. .....b...?.... 3.3.3.3.3.3.3. .?.2.2...2.2.. ...........b.. .1.1...1.1.?.1 0.0.0.0.0.0.0. ............?. .............. .............. .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff .............. .............. gcgggcgggcgggc hhhhhhhhhhhhhh iiiciiiciiicii jjjjjjjjjjjjjj kckkkckkkckkkc .............. .............. .............. .............. .............. .............. Bonus: .............. .............. ?......l...... .2.2.2.2.2.2.2 .......b.....? .............. .............. ?............. .1.1.1.1.1.1.1 ...b.........? 0.0.0.0.0.0.0. ...........?.. .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff .............. .............. gcgggcgggcgggc hhhhhhhhhhhhhh iiiciiiciiicii .............. .............. jcjjjcjjjcjjjc kkkkkkkkkkkkkk dddcdddcdddcdd .............. .............. .............. Bonus: .............. .............. .........?.... 2.2.2.2l2.2.2. .?.....b...... .............. .............. ?............. .1.1.1.1.1.1.1 .............? .............. .............. ......?..b.... 0.0.0.0.0.0.0. .............? .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg .............. .............. .............. hchhhchhhchhhc iiiiiiiiiiiiii jjjcjjjcjjjcjj kkkkkkkkkkkkkk .............. .............. .............. .............. .............. Bonus: .............. .............. ?............. .3.3.3l3.3.3.3 .......b.....? 2.2.2.2.2.2.2. .............. .............. .............. ..?........... .1.1.1.1.1.1.1 ...........b?. 0.0.0.0.0.0.0. .............. .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee .............. .............. fffcfffcfffcff gggggggggggggg .............. .............. hchhhchhhchhhc iiiiiiiiiiiiii .............. .............. jjjcjjjcjjjcjj kkkkkkkkkkkkkk .............. .............. Bonus: .............. .............. .........b..?. .3.3.3.l.3.3.3 .............. .............. .............? 2.2.2.2.2.2.2. .............. .............. ...........?.. .1.1.1.1.1.1.1 .............. .............. ...b........?. 0.0.0.0.0.0.0. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff .............. gggggggggggggg .............. hchhhchhhchhhc iiiiiiiiiiiiii jjjcjjjcjjjcjj .............. kkkkkkkkkkkkkk .............. .............. .............. .............. .............. Bonus: .............. .............. .........?.... .3.3.3.3l3.3.3 .?.....b...... .............. 2.2.2.2.2.2.2. .............. ............?. .1...1.1.1.1.1 ....?......b.. .............. 0.0.0.0.0.0.0. .............. .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff .............. .............. .............. gcgggcgggcgggc hhhhhhhhhhhhhh iiiciiiciiicii .............. .............. .............. jcjjjcjjjcjjjc kkkkkkkkkkkkkk gggcgggcgggcgg .............. Bonus: .............. .............. .........?.... 2.2.2.2l2.2.2. ....?..b...... .............. .............. .............. ...........?.. .1.1.1.1.1.1.1 ?............. .............. .............. .............. .....b.?...... 0.0.0.0.0.0.0. ...........?.. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc .............. eeeeeeeeeeeeee .............. fffcfffcfffcff .............. gggggggggggggg .............. hchhhchhhchhhc .............. iiiiiiiiiiiiii .............. jjjcjjjcjjjcjj .............. kkkkkkkkkkkkkk .............. Bonus: .............. .............. .........?.... .............. 3.3.3.3l3.3.3. .............. ....?......b.. .............. .2.2.2.2.2.2.2 .............. .b.........?.. .............. .1.1.1.1.1.1.1 .............. ...?.......... .............. 0.0.0.0.0.0.0. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff .............. gggggggggggggg hchhhchhhchhhc .............. iiiiiiiiiiiiii .............. .............. jjjcjjjcjjjcjj kkkkkkkkkkkkkk .............. .............. .............. .............. Bonus: .............. .............. .........?.... .3.3.3l3.3.3.3 .?.....b...... .............. 2.2.2.2.2.2.2. ...........?.. .............. .1.1.1.1.1.1.1 .............. .............. ?..........b.. 0.0.0.0.0.0.0. .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee .............. .............. .............. fffcfffcfffcff gggggggggggggg .............. .............. .............. hchhhchhhchhhc iiiiiiiiiiiiii .............. .............. .............. .............. Bonus: .............. .............. ?............. .2.2.2.2.2.2.2 .............. .............. .............. .........?.... 1.1.1.1.1.1.1. .............. .............. .............. ....?......... .0.0.0.0.0.0.0 .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc .............. eeeeeeeeeeeeee fffcfffcfffcff .............. gggggggggggggg hchhhchhhchhhc iiiiiiiiiiiiii .............. jjjjjjjjjjjjjj kkkckkkckkkckk dddddddddddddd eceeeceeeceeec .............. .............. .............. Bonus: .............. .............. ............?. .............. 4.4.4.4l4.4.4. .?............ .............. .3.3.3.3.3.3.3 ........?b.... 2.2.2.2.2.2.2. .............. .1.?.1.1...1.1 ...b.......... 0.0...0.0...0? .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee .............. .............. fffcfffcfffcff .............. .............. gcgggcgggcgggc hhhhhhhhhhhhhh .............. .............. iiiciiiciiicii .............. .............. jcjjjcjjjcjjjc kkkkkkkkkkkkkk Bonus: .............. .............. ?........b.... 2.2.2.2l2.2.2. .............. .............. .?............ .............. .............. .............. .1.1...1?1...1 .............. .............. ...........b?. .............. .............. ....?......... 0.0.0.0.0.0.0. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc .............. .............. .............. eeeceeeceeecee .............. .............. .............. fcfffcfffcfffc .............. .............. .............. gggcgggcgggcgg .............. .............. .............. Bonus: .............. .............. .3.3.3.3.?3.3b .............. .............. .............. .2.2.2.2.?2.2. .............. .............. .............. 1?1.1..1.1.1.1 .............. .............. .............. .0.0?0.0.0..0. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg .............. .............. hchhhchhhchhhc iiiiiiiiiiiiii jjjcjjjcjjjcjj kkkkkkkkkkkkkk .............. .............. fcfffcfffcfffc gggggggggggggg .............. .............. Bonus: .............. .............. ?............. 4.4.4.4.4.4.4. .?.....bl..... .3.3.3.3.3.3.3 .............. .............. ...........?.. 2.2.2.2.2.2.2. ...b........?. .1.1.1.1.1.1.1 .............. .............. .?............ 0.0.0.0.0.0.0. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee .............. .............. fffcfffcfffcff gggggggggggggg hhhhhhhhhhhhhh iciiiciiiciiic jjjjjjjjjjjjjj .............. .............. kkkckkkckkkckk gggggggggggggg .............. .............. .............. Bonus: .............. .............. ......?......b 4.4.4.4l4.4.4. .............. .............. .?............ .3.3.3.3.3.3.3 2...2.2...2?2. .....b........ .1.?.1.1...1.1 .............. .............. .........?.... 0.0.0.0.0.0.0. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg hchhhchhhchhhc .............. .............. .............. iciiiciiiciiic jjjjjjjjjjjjjj kkkckkkckkkckk ffffffffffffff gcgggcgggcgggc .............. .............. .............. Bonus: .............. .............. .........?.... .3.3.3.3.3.3.3 ..?....b...... 2.2.2.2.2.2.2. ............?. .............. .............. .............. ...?.......... .1.1.1.1.1.1.1 .......b.....? 0.0.0.0.0.0.0. ...........?.. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg hchhhchhhchhhc iiiiiiiiiiiiii .............. .............. jjjcjjjcjjjcjj kkkkkkkkkkkkkk .............. .............. fcfffcfffcfffc gggggggggggggg hhhchhhchhhchh .............. Bonus: .............. .............. .........?.... 4.4.4.4.4.4.4. ....?..bl..... .3.3.3.3.3.3.3 ...........?.. 2.2.2.2.2.2.2. .............. .............. ............?. .1.1.1.1.1.1.1 .............. .............. .?.......b.... 0.0.0.0.0.0.0. ..?........... .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc .............. eeeeeeeeeeeeee fffcfffcfffcff .............. .............. gcgggcgggcgggc hhhhhhhhhhhhhh iiiciiiciiicii jjjjjjjjjjjjjj kckkkckkkckkkc .............. .............. ffffffffffffff gggcgggcgggcgg .............. Bonus: .............. .............. ............?. .............. 3.3.3.3.3.3.3. ...........b.? .............. .............. .............. 2...2.2...2?2. ........l..... .1.?.1.1...1.1 .....b........ .............. .............. 0.0...0.0.?.0. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg hchhhchhhchhhc iiiiiiiiiiiiii .............. .............. .............. jcjjjcjjjcjjjc kkkkkkkkkkkkkk dddcdddcdddcdd eeeeeeeeeeeeee fcfffcfffcfffc gggggggggggggg .............. Bonus: .............. .............. .......?...... .5.5.5.5.5.5.5 ..?....b...... 4.4.4.4.4.4.4. ............?. .3.3.3.3.3.3.3 .............. .............. .............. ........?..... 2.2.2.2.2.2.2. ....?......b.. .1.1.1.1.1.1.1 ............?. 0.0.0.0.0.0.0. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee .............. fffcfffcfffcff gggggggggggggg .............. hchhhchhhchhhc iiiiiiiiiiiiii .............. jjjcjjjcjjjcjj kkkkkkkkkkkkkk .............. fcfffcfffcfffc hhhhhhhhhhhhhh .............. .............. Bonus: .............. .............. ?........b.... .4.4.4.4.4.4.4 .............. .?............ 3.3.3.3l3.3.3. .............. ...........?.. 2.2.2.2.2.2.2. .............. ...?...b...... .1.1.1.1.1.1.1 .............. ....?......... 0.0.0.0.0.0.0. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc .............. .............. eeeceeeceeecee .............. .............. fcfffcfffcfffc gggggggggggggg .............. hhhchhhchhhchh iiiiiiiiiiiiii .............. .............. jcjjjcjjjcjjjc .............. kkkkkkkkkkkkkk Bonus: .............. .............. .........?.... .............. .............. ....?......b.. .............. .............. .....?.l...... 2.2.2.2.2.2.2. .............. ............?. .1.1.1.1.1.1.1 .............. .............. .....b.......? .............. 0.0.0.0.0.0.0. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg .............. .............. .............. hchhhchhhchhhc iiiiiiiiiiiiii jjjcjjjcjjjcjj .............. .............. .............. kckkkckkkckkkc hhhhhhhhhhhhhh .............. Bonus: .............. .............. ........?..... 3.3.3.3.3.3.3. .?.....b...... .2.2.2.2.2.2.2 .............. .............. .............. .........?.... 1.1.1.1.1.1.1. .?..........b. .............. .............. .............. .........?.... .0.0.0.0.0.0.0 .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff .............. gggggggggggggg hchhhchhhchhhc iiiiiiiiiiiiii .............. jjjjjjjjjjjjjj kkkckkkckkkckk ffffffffffffff .............. dcdddcdddcdddc eeeeeeeeeeeeee iiiciiiciiicii .............. Bonus: .............. .............. ............?. .5.5.5.5.5.5.5 .............? .............. 4.4.4.4.4.4.4. .....?.l.b.... .3.3.3.3.3.3.3 .............. .2...2?2...2.2 .............. .?.1.1...1.1.. .............. ....b......... 0...0.0...0.0. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg .............. hchhhchhhchhhc iiiiiiiiiiiiii jjjcjjjcjjjcjj kkkkkkkkkkkkkk .............. fcfffcfffcfffc iiiiiiiiiiiiii dddcdddcdddcdd gggggggggggggg .............. .............. Bonus: .............. .............. ......?....... .5.5.5.5.5.5.5 .?.......l.... 4.4.4.4.4.4.4. .............. .........b.?.. .3.3.3.3.3.3.3 ?............. 2.2.2.2.2.2.2. .............. .............? .1.1.1.1.1.1.1 ....b?........ 0.0.0.0.0.0.0. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff .............. .............. .............. gcgggcgggcgggc hhhhhhhhhhhhhh .............. .............. .............. fffcfffcfffcff iiiiiiiiiiiiii jcjjjcjjjcjjjc .............. .............. Bonus: .............. .............. ..........?... 4.4.4.4.4.4.4. .?.....b...... .............. .............. .............. ...........?.. .3.3.3.3.3.3.3 .............. .............. .............. .?.........b.. 2.2.2.2.2.2.2. ....?......... .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg hchhhchhhchhhc .............. iiiiiiiiiiiiii jjjcjjjcjjjcjj kkkkkkkkkkkkkk dcdddcdddcdddc eeeeeeeeeeeeee .............. ffffffffffffff gggcgggcgggcgg hhhhhhhhhhhhhh .............. Bonus: .............. .............. ............?. 5.5.5.5.5.5.5. .?.....bl..... .............. ..?........... .............. ?4...4.4...4.4 .............. ...3.3...3?3.. .........b.... 2.?.2.2...2.2. .............. .1.1.1.1.1.1.1 ............?. 0.0.0.0.0.0.0. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg hchhhchhhchhhc iiiiiiiiiiiiii .............. jjjjjjjjjjjjjj kkkckkkckkkckk dddddddddddddd eceeeceeeceeec ffffffffffffff gggcgggcgggcgg .............. hchhhchhhchhhc iiiiiiiiiiiiii Bonus: .............. .............. ............?. 5.5.5.5.5.5.5. .?.b.......... 4.4.4.4.l.4.4. ..?........... .3.3.3.3.3.3.3 .............. 2.2.2...2.2.?. ...........b.. .1.1?1.1.1.1.. .............. 1.1.1?1.1.1.1. .............. .............. ...?.......... .0.0.0.0.0.0.0 Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc .............. .............. .............. eeeceeeceeecee ffffffffffffff .............. .............. .............. gcgggcgggcgggc hhhhhhhhhhhhhh iiiciiiciiicii .............. .............. .............. cccccccccccccc Bonus: .............. .............. ...?.......... .............. .............. .............. .......b...... ..5.5.5.5.5?5. .............. .............. .............. ...?.....b.... .4.4.4.4.4.4.4 ............?. .............. .............. .............. .............. Level: noname untitled Bricks: .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg hchhhchhhchhhc iiiiiiiiiiiiii jjjcjjjcjjjcjj .............. .............. dcdddcdddcdddc eeeeeeeeeeeeee fffcfffcfffcff gggggggggggggg hchhhchhhchhhc iiiiiiiiiiiiii jjjcjjjcjjjcjj Bonus: .............. .............. .........?.... .5.5.5.5.5.5.5 .?.....bl..... 5.5.5.5.5.5.5. ...........?.. .4.4.4.4.4.4.4 ......?....... .............. .............. .?............ 3.3.3.3.3.3.3. .....?.....b.. .2.2.2.2.2.2.2 .........?.... 1.1.1.1.1.1.1. .......?...... Level: noname untitled Bricks: .............. .............. .............. dddddddddddddd eeeeeeeeeeeeee ffffffffffffff gggggggggggggg hhhhhhhhhhhhhh iiiiiiiiiiiiii jjjjjjjjjjjjjj cccccccccccccc dddddddddddddd eeeeeeeeeeeeee ffffffffffffff gggggggggggggg hhhhhhhhhhhhhh iiiiiiiiiiiiii jjjjjjjjjjjjjj Bonus: .............. .............. .............. .............. .........g.... .............. ..g.....l..... .............. ......g.....g. .............. .............. .............. .............. ....g......g.. .............. .............. ..g........... ........g..... Level: noname untitled Bricks: .............. dddddddddddddd .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. hhhhhhhhhhhhhh .............. Bonus: .............. jjjjjjjjjjjjjj .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. jjjjjjjjjjjjjj .............. Level: noname untitled Bricks: .............. .............. gggggggggggggg .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. 55555555555555 .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: noname untitled Bricks: ...a......a... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: ...}......}... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/IoriYagami0000664000175000017500000002022412140767201015246 00000000000000Version: 1.00 Level: Ukog-Nos Takeuchi Tengu Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: wwwwwwwwwwwwww wwwwwjwwpwwwww wwwwjwjpwpwwww wwwjwwpjwwpwww wwjwwpwwjwwpww wjwwpwwwwjwwpw wwjpwwwwwwjpww wwpjwwwwwwpjww wpwwjwwwwpwwjw wwpwwjwwpwwjww wwwpwwjpwwjwww wwwwpwpjwjwwww wwwwwpwwjwwwww wwwwwwwwwwwwww wwwwwwwwwwwwww wwwwwwwwwwwwww wwwwwwwwwwwwww wwwwwwwwwwwwww Level: Ukog-Nos Takeuchi Der Gouki Bricks: .............. .zzzzzzzzzzzz. .z!!v!!!v!!!z. .z*!v!*!v!*!z. .z!!!!!!!!!!z. .zv!*!v!*!vvz. .z!!!!!!!!!!z. .z*!v!*!v!*!z. .z!!!!!!!!!!z. .zv!*!v!*!vvz. .z!!!!!!!!!!z. .z*!v!*!v!*!z. .z!!!!!!!!!!z. .zv!*!v!*!vvz. .z!!!!!!!!!!z. .z*!v!*!v!*!z. .zzzzzzzzzzzz. .............. Bonus: .............. .............. ....*...*..... ....*...*..... .............. ..*...*...**.. .............. ....*...*..... .............. ..*...*...**.. .............. ....*...*..... .............. ..*...*...**.. .............. ....*...*..... .............. .............. Level: Ukog-Nos Takeuchi BMX XXX Bricks: @@@@@@@@@@@@@@ @*gggggggggg*@ @g@@@@@@@@@@g@ @g@*cccccc*@g@ @g@c@@@@@@c@g@ @g@c@*zz*@c@g@ @g@c@z@@z@c@g@ @g@c@z@@z@c@g@ @g@c@z@@z@c@g@ @g@c@z@@z@c@g@ @g@c@z@@z@c@g@ @g@c@z*@z@c@g@ @g@c@@zz*@c@g@ @g@c*@@@@@c@g@ @g@@cccccc*@g@ @g*@@@@@@@@@g@ @@gggggggggg*@ *@@@@@@@@@@@@@ Bonus: jmmmmmmmmmmmmj mmmmmmmmmmmmmm mmjmmmmmmmmjmm mmmmmmmmmmmmmm mmmmjmmmmjmmmm mmmmmmmmmmmmmm mmmmmmjjmmmmmm mmmmmmmmmmmmmm mmmmmmmmmmmmmm mmmmmmmmmmmmmm mmmmmmmmmmmmmm mmmmmmjjmmmmmm mmmmmmmmmmmmmm mmmmjmmmmjmmmm mmmmmmmmmmmmmm mmjmmmmmmmmjmm mmmmmmmmmmmmmm mmmmmmmmmmmmmj Level: Ukog-Nos Takeuchi GONGhead Bricks: .....d...dd... ....dd...dd... ...dd.d.ddd... ...d..d.d..d.. ....ddd.ddd... ...d.dd.d.dd.. ...dd.d.dddd.. ...dd.d.dd.d.. .............. ......d....... .....ddd...... ......d....... .....ddd...... ......d.d..... .......d...... .....dd....... ....dd.dd..... ...dd....dd... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .....??....... ....??.??..... ...??....??... Level: Ukog-Nos Takeuchi Afrocalypse now! Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> ++++++++++++++ Level: Ukog-Nos Takeuchi Suchst du was bestimmtes Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. ......v....... .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: DerPups@arschgas.de Bricks: @jjj.......... jj@jjjj....... .jj@j@jjj..... ..jjjjj@jjj... ......jjj@j... .jjjjjjj@jj... jj@@jj@jjj.... j@jjjjjj...... j@jjjj........ jjj@@j.jjjjj.. ..jjjjjj@j@jj. ..jj@j@jjjj@j. ..j@jjjjj@@jj. ..j@jjj.jjjj.. ..jjj@jjjj.... ....jjjj@j.... .......j@j.... .......jjj.... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .......ggg.... Level: Ukog-Nos Takeuchi Error Inside ____ 1+1=3? Bricks: .............. .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz .zzzzzzzzzzzzz Bonus: .............. .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? .????????????? Level: Ukog-Nos Takeuchi It's hip to be a square Bricks: ##defghijkd### ##defghijkd### ##kdefghije### ##kdefghije### ##jkdefghkf### ##jkdefghkf### ##ijkdefidg### ##ijkdefidg### ##hijk!gjeh### ##hijk!gjeh### ##ghijihkfi### ##ghijihkfi### ##fghgfedgj### ##fghgfedgj### ##efedkjihk### ##efedkjihk### ##dkjihgfed### ##dkjihgfed### Bonus: ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... ..555555555... Level: Ukog-Nos Takeuchi Orega kowai no ka? Bricks: .............. EEEEEEEEEEEEEE @iEiEi.......E @.E.EEE.E.EE.E @.E.Ei..E.E..E @.E.EEEEE.E.EE @.E.......E.iE @.E.EEE.EEEEEE @.E.Ei.......E @.E.EEE.EEEE.E @.E..iE.Ei...E @.EEEEE.@@@@@@ @.Ei.........@ @.EEEEE.@@@@.@ @.Ei....@i...@ E.EEEEEEEEEE.@ E............@ E.EEEEEEEEEEE@ Bonus: .............. .............. .l.l.l........ .............. .....l........ .............. ............l. .............. .....l........ .............. .....l...l.... .............. ...l.......... .............. ...l.....l.... .............. .............. .............. Level: Ukog-Nos Takeuchi Sylvester-Stallone Bricks: *E..........E* E*E........E*E E*E........E*E .E*E......E*E. ..E*E....E*E.. ...E*E..E*E... ...E*E..E*E... ....E*EE*E.... .....E**E..... .....E**E..... ....E*EE*E.... ...E*EddE*E... ...E*EeeE*E... ..E*EhhhhE*E.. .E*EffffffE*E. E*EggggggggE*E E*EiiiiiiiiE*E *E..........E* Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Ukog-Nos Takeuchi Die Gadouken Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv EEEEEEEEEEEEEv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vEEEEEEEEEEEEE vvvvvvvvvvvvvv vvvvvvvvvvvvvv EEEEEEEEEEEEEv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vEEEEEEEEEEEEE vvvvvvvvvvvvvv vvvvvvvvvvvvvv EEEEEEEEEEEEEv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vEEEEEEEEEEEEE Bonus: bbbbbbbbbbbbbb bbbbbbbbbbbbbb .............m bbbbbbbbbbbbbb bbbbbbbbbbbbbb m............. bbbbbbbbbbbbbb bbbbbbbbbbbbbb .............m bbbbbbbbbbbbbb bbbbbbbbbbbbbb m............. bbbbbbbbbbbbbb bbbbbbbbbbbbbb .............m bbbbbbbbbbbbbb bbbbbbbbbbbbbb m............. Level: Ukog-Nos Takeuchi Die Kohryuuken Bricks: vvvEvvvEvvvEvv vvvEvvvEvvvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvEvEvEvEvEvv vEvvvEvvvEvvvv vEvvvEvvvEvvvv vEEEEEEEEEEEEE Bonus: bmb.bmb.bmb.bb bmb.bmb.bmb.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.b.b.b.b.b.bb b.bmb.bmb.bmbb b.bmb.bmb.bmbb m............. Level: Ukog-Nos Takeuchi DROGENKONSUM Bricks: ************** .............. .************. .............. ..**********.. .............. ...********... .............. ....******.... .............. .....****..... .............. ......**...... .............. .....****..... .............. ....******.... .............. Bonus: f>c~Wf>c~Wf>c~ .............. .~Wf>c~Wf>c~W. .............. ..~Wf>c~Wf>c.. .............. ...f>c~Wf>c... .............. ....Wf>c~W.... .............. .....f>c~..... .............. ......~W...... .............. .....-f>c..... .............. ....{{{{{{.... .............. lbreakout2-2.6.5/client/levels/Kevin0000664000175000017500000002636612140767201014305 00000000000000Level: Kevin Robot Bricks: .............. jjjjjjjjjjjjjj j.jjj.**.jjj.j j............j j............j j..jjjjjjjj..j j..jddddddj..j j..jd!dd!dj..j jjjjddddddjjjj j..jddddddj..j j..jhhhhhhj..j jjjjh.ee.hjjjj hhhhh.ee.hhhhh !..!..ee..!..! ..**.**ee**.** .......ee..... .............. .............. Bonus: .............. .............. ...l........l. .............. .............. ......+..+.... .....454454... .....5.55.5... .....454454... .....555555... .....gg..gg... .............. ....m......m.. .......++..... g..p......p... .............. .............. .............. Level: Kevin Easy as it gets Bricks: .............. iiiiiiiiiiiiii .............. hhhhhhhhhhhhhh .............. gggggggggggggg .............. ffffffffffffff .............. eeeeeeeeeeeeee .............. dddddddddddddd .............. jjjjjjjjjjjjjj .............. kkkkkkkkkkkkkk .............. .............. Bonus: .............. .............. .............. ..2m...2.22... .............. ....2.3+3.3.b. .............. ...2.+.....3b. .............. ..2.+.......33 .............. ..23+.l.....l. .............. ..3.....222... .............. 3.........2.w. .............. .............. Level: Kevin # 3 Bricks: ......chhc.... ......#hh#.... ......#hh#.... ......#hh#.... .....######... ....#fcffcf#.. ...#ffccccff#. ..#ffggggggff# ccfggggggggfcc cjjjjjjjjjjjjc jjjjjjjjjjjjjj cjjjjjjjjjjjjc ccfggggggggfcc ..#ffggggggff# ...#ffccccff#. ....#ccffcc#.. .....######... .............. Bonus: .......22m.... .......33..... .......44..... .......55..... .............. .......55..... .............. .............. .............. .............. g.3+..??..+3.g .............. ...+........+. .............. .............. .......ll..... .............. .............. Level: Kevin Probe Bricks: .............. .............. .............. .............. .......gg..... ......g##g.... .....ghheeg... ....g#hhee#g.. ...f##eehh##f. ..#.f#eehh#f.# #...f####f...# ......f!!f.... ..####!ff!#### ......ffff.... .....fbccbf... .....bbbbbb... ..c..........c .............. Bonus: .............. .............. .............. .............. .......ll..... .............. .............. .............. ......5..5.... ......3443.... .....m....m... ......b++b.... .......22..... .......11..... .....p.++.p... .....000000... ..g..........g .............. Level: Kevin Shaft Bricks: ccccchhccccccc ccccchhccccccc ccccchhccccccc ......hh...... ccccchhccccccc ccccchhccccccc ......hh...... ccccchhccccccc ccccchhccccccc ......hh...... ccccchhccccccc ccccchhccccccc ......hh...... ccccchhccccccc ccccchhccccccc ......hh...... cccccccccccccc cccccccccccccc Bonus: .......m...... 5..5..+..5.+5. .....>..>..... .............. ....?..+.5.... ..3....c...pm. .............. ?.m...+....>.. ..p........4.. .............. ...........?.. ..b.33c+.3.... .............. ....>.....3m.. ..4-......p.-b .............. ....+.w+...... 0.0.b...0..0.. Level: Kevin Stary Night Bricks: ....!.....!... !.....!.....!. .............. ...!.!...!.!.! .......!...... ..!.!.....!.!. ......!.!..... ...!.......!.! .....!.!.!.... .............. .............. ffffffffffffff ffffffffffffff gggggggggggggg ####gggggg#### hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh Bonus: .............. .............. ........5..... ..5......5.... .............. ............1. ......1....... .............. ............5. .............. .............. ...+........3. ..1111..1111.. bm.3.1....gm3. ......1...+... ..3g1..1....+1 ....+...1111.. .....11....1.. Level: Kevin Smiley Bricks: ....vvvvvvvv.. ...vvhhhhhhvv. ..vvhh....hhvv ..vhh......hhv vvh..h..h..hvv vh...h..h...hv vh..........hv vh..........hv vh..h....h..hv vh..hh..hh..hv vvh..hhhh..hvv ..vhh......hhv ..vvhh....hhvv ...vvhhhhhhvv. ....vvv..vvv.. .............. .............. .............. Bonus: .............. ....5......5.. .............. ..+........... ......5..5.... ......5..5...+ .............. .............g ..s........... .....m....m... ..l........... ............s. ...g.......... .............. ....4+p..p+4.. .............. .............. .............. Level: Kevin Night Bricks: ..vvv...vvv... v...vvv...vvv. v...vvv...vvv. v...vvv...vvv. v...vvv...vvv. ..vvv...vvv... ..vvv...vvv... ..vvv...vvv... ..vvv...vvv... v...vvv...vvv. v...vvv...vvv. v...vvv...vvv. v...vvv...vvv. ..vvv...vvv... ..vvv...vvv... ..vvv...vvv... ..vvv...vvv... .............. Bonus: ..dm5...dd5... d...dld...dld. d...ddd...ddd. d...ddd...d+d. 5...dd5...dd5. ..d+d...dld... ..ddd...ddd... ..ddd...ddd... ..dd5...dd5... d...dmd...ddd. d...ddd...dd+. d...ddd...ddd. 5...dd5...5dd. ..ddd...dld... ..d+d...ddd... ..ddd...ddd... ..dd5...dd5... .............. Level: Kevin trao Bricks: .............. .............. jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjj#v##jjjjj fffff#ff#fffff fffff#ff#fffff fffff#ff#fffff fffff##f#fffff ggggg#gg#ggggg ggggg#gg#ggggg ggggg#gg#ggggg ggggg#g##ggggg hhhhh#hh#hhhhh hhhhh#hh#hhhhh hhhhh#hh#hhhhh hhhhh##h#hhhhh ######..###### Bonus: .............. .............. g............g .............. 1...g.m..g...1 .....2....2... .............. .......+...... 2......c.....2 .....4....4... .............. .......c+..... 4.....w......4 .....5....5... ...b........b. .......+...... 5......w.....5 .............. Level: Kevin Pedastal Bricks: .....vvvvvv... .....vvvvvv... .....j#ee#j... .....j#ee#j... .....j#ee#j... .....j#gg#j... .....j#gg#j... .....j#gg#j... .....j#gg#j... .....j#ff#j... .....j#ff#j... .....j#ff#j... ..iiiiiiiiiii. ..iifhiiiihfi. ..ifhed##dehf. ..fhedccccdehf fhedvvvvvvdehf gggggggggggggg Bonus: .....5555m5... .....555555... ......5445.... ......5445.... ......5445.... ......5335.... ......5335.... .....+5335+... ......m335.... ......5445.... ......5445.... ......5445.... ..55555555555. .....g.+.+g... .......55..... ......5555.... ..gp........pg ....+..+..+... Level: Kevin Got Blue Balls? Bricks: .......#h#.... .......#e#.... ..!..!.#h#.!.! .......#e#.... .......#h#.... ..!..!.#e#.!.! .......#h#.... .......#e#.... ..!..!.#h#.!.! .......#e#.... .......#h#.... ..!..!.#e#.!.! .......#h#.... ########e##### .............. .............. .............. .............. Bonus: ........m..... .............. ....5.......5. .............. .............. ..........5... ..5........... .............. ............5. .....5..l..... .............. ........p.5... ..5........... ........+..... .............. .............. .............. .............. Level: Kevin TNT Bricks: !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* *!*!*!*!*!*!*! !*!*!*!*!*!*!* ####*!*!*!*!*! ####!*!*!*!*!* ####*!*!*!*!*! ###.!*!*!*!*!* ##..*!*!*!*!*! #...!*!*!*!*!* ....#*!*!*!*!* ...##!*!*!*!*! ..###*!*!*!*!* ...##!*!*!*!*! ....#*!*!*!*!* ....#!*!*!*!*! ....########## Bonus: 55555351515355 555545250b2545 55555341>14345 55554424042>45 5555g3b14143b5 .....4>2g0p234 .....533131333 .....432303234 .....+3p1>1b32 .....422202224 .....+32121232 .....412101214 .....51b1w1131 .....412101214 .....>3j1g1w35 .....452505254 .....b3515153j .............. Level: Kevin Two Rooms Bricks: ...#.......... ...#!*!*!*!*!! ...#.......... ...#!*!*!*!*!* ...*.......... ...*!*!*!*!*!* ...#.......... ...#!.!.!.!.!. ...########### ...#!.!.!.!.!. ...*.......... ...*!*!*!*!*!* ...#.......... ...#!*!*!*!*!* ...#.......... ...#!*!*!*!*!* ...#.......... ...########### Bonus: .....ggggg.... .............. ......???..... ..........>... ....bw.44..... ...wbw.>...4.. ....bb4.4..... ....>...4..... ...........4.. ......?.?..... ....bw??4.444. ...wbw?.....4. ....bb..4..p.. .....>.l..lp.. ......??w.4.j. ....>.wp??j... ........j..... .............. Level: Kevin Face Bricks: hhhhhh..hhhhhh hhhhhh..hhhhhh hhhhhh..hhhhhh hh####vv####hh ###ggg..ggg### ggggjg..gjgggg ggggjg..gjgggg ggggff..ffgggg ffffff..ffffff ffffff..ffffff ....fff..fff.. .....df..fd... .....dddddd... ......iddi.... ......iiii.... .......ii..... .......ii..... .............. Bonus: .............. ............4. .............. m.5555ll5555.m 555........555 .....4....4... .....4....4... .............. ..g........... .............g .............. .............. .............. .............. ........l..... .............. .............. .............. Level: Kevin USA Bricks: .............. .............. ..#.########## ..#gggggddddd# ..#gggggjjjjj# ..#gggggddddd# ..#gggggjjjjj# ..#gggggddddd# ..#gggggjjjjj# ..#dddddddddd# ..#jjjjjjjjjj# ..#dddddddddd# ..#jjjjjjjjjj# ..#dddddddddd# ..#jjjjjjjjjj# ..#dddddddddd# ..############ .............. Bonus: .............. .............. .............. ...b.......... .....g........ .........+.... ....+..2...... .........2.... .....2....22.. .............. ...1..11...... .............. .........1.... ......22+...m. ....1.2...1... .............. .............. .............. Level: Kevin Tiger Bricks: .............. .............. .............. .............. .....ee.ee.... .....ee.ee.... .....ee.ee.ee. ..ee.......ee. ..ee..eee..ee. ..ee.eeeee.... ....eeeeeee... ....eeeeeee... ....eeeeeee... ....eeeeee.... .....eeee..... .............. .............. .............. Bonus: .............. .............. .............. .............. ......l.4..... .....54....... .............. ...4........5. ...+.......... .......g4..... .....4........ .........+.... ....b...4..... ........b..... .............. .............. .............. .............. Level: Kevin easy Bricks: .............. ggg.g.g.g.ggg. ..g..g.g.g.g.. ..g..ggg.g.ggg ..g..g.g.g...g ..g..g.g.g.ggg .............. ......g.ggg... ......g.g..... ......g.ggg... ......g...g... ......g.ggg... .............. gg.ggg.ggg.g.g g..g.g.g...g.g gg.ggg.ggg.ggg g..g.g...g..g. gg.g.g.ggg..g. Bonus: .............. .......p...... ..2........5.. .....2.l.4..4. ..c........... .............. .............. ......l....... ........c..... .........g2... ......4....... .........2>... .............. l............. .............. ..4..4>..2...5 .............. c...........w. Level: Kevin U SUCK Bricks: .............. ..d.d.ddd.d.d. ..d#d.d.d.d.d. ..ddd.d#d.d#d. ...d..d.d.d.d. ...d..ddd.ddd. .............. .............. ...###.###.### ddd.d.d.dd.d.d d##.d.d.d..d.d ddd.d.d.d..dd. ##d.d#d.d##dd. ...d.d.d.d..d. ddd.ddd.dd.d.d #######..##### .............. .............. Bonus: .............. .............. ............3. ..5...5....... .............. ........3..m.. .............. .............. .............. .............. +............. .........l.... .............5 .............. .......+.5.... ......+....... .............. .............. Level: noname Stairs Bricks: iiiiiiiiiiiiii iiiiiiiiiiiiii ###*######*### gggggggggggggg gggggggggggggg #####*##*##### ffffffffffffff ffffffffffffff ######**###### hhhhhhhhhhhhhh hhhhhhhhhhhhhh #.##*####*##.# eeeeeeeeeeeeee eeeeeeeeeeeeee ##*########*## dddddddddddddd dddddddddddddd ..############ Bonus: 5........3.... ...b...3....3. .............. 5............4 ...3.......... .............. 4.........3... m.3........... .............. .....>........ .....2+...b... .............. 5.....3.....>m 3...g.....<..4 .............. ...+.3....+... 3..b.+..j....w .............. Level: Kevin Rainbow Bricks: jkghifdedfihgj jkghifdedfihgj jkghifdedfihgj jkghifdedfihgj jkghifdedfihgj jkghifdedfihgj jkghif#e#fihgj jkghif#e#fihgj jkghif#e#fihgj jkghi#...#ihgj jkghi#...#ihgj jkghi#...#ihgj jkgh#.....#hgj jkgh#.....#hgj jkgh#.....#hgj jkg#.......#gj ###.........## .............. Bonus: .............. .....?........ ......gggggg.. ....gggb5...g? >.g.5+55ggg.g. ..5..5gg..5.g. g5.5g....?..g. g..g......55gg 5.5l.......... ...5b........g 55.........5m. ...g+........g 5554.......5.g ..5........... 5>...........g 5............g .............. .............. lbreakout2-2.6.5/client/levels/Lord0000664000175000017500000005520112140767201014117 00000000000000Version: 1.00 Level: SpocklLord Hol die Blaue Bricks: icc.bb..##dddd c.cx....#####d ccc.....#####d .a.x....##ff#d cccx....##ff#d .x...bb.##ff#d x.x.....##ff#d ........#####d .....bb.###### .E.E....###### .dd...@....... .dd........... vddvvv.vvvvvvv .............. .............. .............. .............. .............. Bonus: mww.........{} ...W.......... WWW........... .........b55b. ..b.......ww.. ......b......- ..........p..- ..........jj.p .....b....bb.. .............. .............. .............. g..w.......w.g .............. .............. .............. .............. .............. Level: Lord BA BOOM Bricks: ***...xxx..*** ***...xxx..*** ******xxx***** ***EEExxxEE*** E*EE.ExxxE.E*E E*E...EcE..E*E E*E...EcE..E*E E*E...EcE..E*E E*E...EcE..E*E E*E...EcE..E*E E*E...EcE..E*E EvE..!EkE!.EvE .............. .*..........*. .............. .............. .............. .............. Bonus: +......p.....+ .......*...... ....-.....-... .w..........w. .............. .......w...... .............. .............. .............. .......m...... .............. .............. .............. .............. .............. .............. .............. .............. Level: Spockl Hoehle Bricks: EeeeiEE@@gg### E*EE*EEeeEg### EeeE**eeeEE### Eee@E@e*.eEeEE Ee.e*e....eeEE Ee.eEe.i...eeE Ee.e*e.Ei*..e@ Ee.eEe.EE.*.eE Ee.eEe.EE*..EE Ee.eEi.Ei.*EEE Ee.vi..E.*..EE Ee....EE..*.eE Ee....EE.eeee@ Ee.E.v.E.eEecc Ee.E.*.E.eEEcc Ev.E.v.i*eEEcc E..EE....EEEcb E..EE....EEEzz Bonus: .{{{m..55bfb5l .f.....--.{b5l ..f...!df..j5l .!db.bd..d.... .c.df+....d!.. ...+.d.f...d!. .!.dj!..f...b5 .d.w.w....c.w. .d.d.!...{.... .d.g.f..f.w... .j.>f......... .g..........!. .d.......{f{dd .>...!...!.f.m .d.......w..dm .>...d.f.>...m ............!. ............d. Level: Lord NO Bricks: .............. .............. .............. ......dd...... .....d**d..... ...*d****d*... ddddd****ddddd E.E*Ed**dE*E.E ..vvvvddvvvv.. ......xx...... .E.E..xx..E.E. ......xx...... ......xx...... .............. .............. .............. .............. .............. Bonus: .............. .............. .............. ......ww...... .............. ...!......!... ...m......m... .............. .....!..!..... ......ff...... ......ff...... ......ff...... ......ff...... .............. .............. .............. .............. .............. Level: Spockl Karies Bricks: ijjjijjjijjjij ij*jij*jij*jij aaaaaaaaaaaaaa aaaaaaaaaaaaaa bbbbbbbbbbbbbb bbbbbbbbbbbbbb cccccccccccccc cccccccccccccc cccccccccccccc eeeeeeeeeeeeee bbbbbbbbbbbbbb bbbbbbbbbbbbbb aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa jjjjjjjjjjjjjj jjjjjjjjjjjjjj jj..jj..jj..jj Bonus: .blb.bbb.blb.l .>.>.>.>.>.>.> ffffffffffffff f!f!f!f!f!f!f! {!!{!{!{!{!{!{ ffffffffffffff {!??!!!!!!??!{ !{!!++!!++!!{! 44}444}}33}333 ssc{c{c{c{c{ss bbffffggffffbb {.ff.{..{.ff.{ !!!!!!gg!!!!!! !!!!!!!!!!!!!! ??!!*!!!!?!!?? >>>>>>gg>>>>>> w???w????w???w ??..??..??..?? Level: Spockl Rock Me Bricks: i@@@j@@@j@@@ji j.@..v@ggg@..@ @....v..g...@@ @@..#v.....k.@ @..###...#...j jvkv#vkv###vv@ @....v...#..@@ @@.k.vv......@ @vvvvvvvvvvkvj j....#..k....@ @...###.....@@ @@vvv#vvvvvvv@ @....v...#...j j.v.vvv.###..@ @..k....h#h.@@ @@....k......@ @.cc.......c.j jv..cba.bcc.v@ Bonus: m.......&....m .......5.5.... .....d........ .............. ....m........! !..fb.wf.l.f.. .........b.... ...w..g....... .~f.??!??dfg~! !............. ....jl........ ..+-+.--W+{--. .....!.......w w.{.fwW..mj... ..........s... ......{....... ..>-.......>.. .w..f-g.gff.w. Level: Lord THE SKUL Bricks: bvvvvvvvvvvvbv vb.........bvv v*b.......b*vv v*.bbbbbbb.*vv v*..bbbbb..*vv v*..b*b*b..*vv v*..b*b*b..*vv v*..b*b*b..*vv v*..bbbbb..*vv v*..bbbbb..*vv v*.b.bbb.b.*vv v*b..bbb..b*vv vb...bbb...bvv b...........bv .............b .............. .............. .............. Bonus: wmmmmmmmmmmmw. .w.........w.. ..w.......w... ...wwwwwww.... ....fffff..... ....fffff..... ....f.f.f..... m...f.f.f...mm ....fffff..... ....fffff..... ...f.fff.f.... ..f..fff..f... .f...fff...f.. f...........f. .............f .............. .............. .............. Level: Spockl Grixprlm Bricks: iiiiiiiiiiiiii id.##...###.di i#ggg#.#dddd#i .#ffg#v#eeed#i .#jfg#vxe##d#. .#jfg..#e#ed#. i#jfg#v###e.#. .#jfg#.#e#e#gi .#jfg#v#e#ed#i .#jfg#v#e#ed#i i#jfg#.#e#ed#i i#jfg#v#eeed#i i#####v#.ddd#i i.##########.i .i..........i. .v..v....v..v. .............. .............. Bonus: 55c55555555c55 5c..........c5 5.!mf...bbmb.5 ..!!!.c.!!!!.* ......c!b..!.. ..b.....b.lb.. *...f.c....... ............*5 ..b...c......5 ......*.+.++.5 5............5 5.m...c......5 5.....b....m.5 5............5 .5..........5. .w..w....w..w. .............. .............. Level: Spockl Superbowl Bricks: ############## ###@ciiic.@### ##.cii*iic..## #.ciiv*viic..# .ciidv*vdiic.. ciiddv*vddiic. civvvv*vvvvic. iiiiiv*viiiiic iijjicccijjiic iigjjckcjjgiic cigggcccgggic. ciihhhjhhhiic. .ciiddjddiic.. ..ciizjziic... #..ciijiic...# ##...iii....## .##@......@##. .###......###. Bonus: ffffffffffffff f{{&4l4l4.&{{f f{.40jbj04..{f f.400!m!004..f .40{.!b!.{04.. 40}!s!m!s!}04. 4+++++b+++++4. fj}}}!m!}}}jf? &f...}b}...f&? ..f.d.m.d.f..? ->fff...fff>-. {-5>>!w!>>5-{. .{-5>!>!>5-{.. ..{-5g!g5-{... w..{5!w!5{...w .....>?>...... .............. .............. Level: Lord Kugeln wo denn Bricks: *****gggg***** *****g**g***** *****g**g***** ****gg**gg**** ***ggg**ggg*** ***ggg**ggg*** **g********g*. .*gggg**gggg*. .*.ggg**ggg.*. .*.ggg**ggg.*. .*..gg**gg..*. .*..gg**gg..*. .************. ......**...... ......**...... ......**...... ......**...... gggg..**..gggg Bonus: bbbbb....bbbbb bbbbb.bb.bbbbb bbbbb.bb.bbbbb bbbb..bb..bbbb bbb...bb...bbb bbb...bb...bbb bb.bbbbbbbb.b. .b....bb....j. .b....bb....b. .j....bb....b. .b....bb....b. .b....bbbb..b. .bbbbbbbbbbbb. ......bb...... ......bb...... ......bb...... ......bb...... ......wj...... Level: Spockl Ballterror Bricks: !!!Ei!!!E!!!!! !!!!i!!!!!!!!@ !!E!zE!!!!E!!! !!!!!E!!!EEEE# EE!EE#EEE###E# !*EEE!***!**E# !*!!*!!!*!!!E# !!**!!**!!**E# !*!!!!*!*!!Eg# !**!*!***!*Eg# E!!!!!!!!!!Eg# E*!**!EEE!!EE# *!!!*!*!!!*!E# E*!**!*!*!*!E# zjEEjjjjjjjEEz yggggggggggggy yggggggggggggy xggggEEEEggggx Bonus: <+.+.+.+.+.+.> >............> >...g....g...> Level: Lord Die Monsterschneke Bricks: .............. .............. ..fff......... ..fff......... ..f*f......... ..f*f......... ..fff......... ...h.......... ...h.......... .hhh.hhh...... ..hhhhhhhh.... ...hhhhhhhh... ...hhhhhhhh... ....hhhhhhhh.. ...hhhhhhhhh.. ...hhhhhhhhh.. ..hhhhhhhhhhhh .hhhhhhhhhhhhh Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .....bbbbb.... .....bpppb.... .....bpbpb.... .....bpppb.... .....bbbbb.... .............. .w~~~{{---!!!! Level: Spockl Stirb Pups Bricks: eeeeeee#eeeeee e#g#gje#e####v e#gggje#ee#eee e.##g#e#ee#vev e#g.g#e#ee#eee e.##g#*#ee#*#x e#g#g#e#ee#eex e#g.g#e#ee#eex e#g#g#e#ee#eex e.##g#e#ee#eex e#g#g###ee##ex e#g#g#jjeeeee# e#g#gijj##eeex e####ijj####.x e....#iiiiii#f e...########.f e#eeeeeeeeeeee ##avv########v Bonus: ffffffffbffff5 .w.b.........m ..?.?...b..... ...b.....4...m ..w.....b..... ...b.....4.... ....p......... .w......WW..W. ..w.w.c.cd.... g.d.d......m4. .............. ddddddddmddddd ......d}...... g.m...{j...... .............w .............w 333+++>+>+>+>. .............w Level: Lord Die Kaffetase Bricks: .............. .............. .............. .............. .....cEfEc.... ...cccEfEcf... ...c.cEfEcff.. ...c.cEfEcff*. ...c.cEfEcff.. ...c.cEfEcff.. ...c.cE*Ecff.. ...cccEEEcff.. .....cccccf... ...eeeeeeeeee. ...eeeeeeeeee. ...ee......ee. ...ee......ee. ...ee......ee. Bonus: .............. .............. .............. .............. .......0...... .......0...... .......0...... .......0....f. .....m.0...... .......0...... ...m.......... .............. .............. .....bbbbbb... .....ffffff... .............. .............. ...}s......s}. Level: Spockl Umpf Bricks: #fffffff*fcfff #xxxffffffcfff #xxx#gvgvgcfff #vvv#vgfggc!ff #fff#gggfgc!ff #fff####f#c#ff #*ff##*#fcc##f #fff#ccfcc##ff #fff#cccf###ff #fff#f##ff##ff #fff#f!!!f##ff #fff#fvvvf##ff #####fffff#dff aaaaafvf####*f #f##!f!#####ff #fff#f##dddfff #ff###d#####ff ##ffffffffaaaf Bonus: .*..*.....j..m .....00.....00 .........g.... .l.l..b...&... .mmm.bbb.g..!. .mmm....c..... .mmm....c.&... .mmm.*.......! .mmm..&.c...s. .mmm....c0..++ .mmm.>...0..++ .mlm.bwww0.... .....>bbbs.www .....>......j. .{............ .....{........ .}............ ...}..>>...... Level: Lord Die Bombe Bricks: x............x xddddddddddddx xd##########dx xd#v******v#dx xd#v##**##v#dx xd#v#****#v#dx xd#v#*vv*#v#dx xd#v#*vv*#v#dx xd#v#*vv*#v#dx xd#v#*vv*#v#dx xd#v#*vv*#v#dx xd#v#*vv*#v#dx xd#v######v#dx xddv######vddx ......!!...... ......!!...... .....!ee!..... .............. Bonus: .............. .............. .............. .............. .............. ...c......c... .............. .............. .....?..?..... +m.f......f.m+ +............+ ......ff...... -p.j....c.j.p- -p..........l- .............. .............. .....0000..... .............. Level: Spockl Urrga Bricks: EEE#ee**ee#EE. !!E#eeeeee#EE. .!E#e####e#d!. .!E#eeeeee*d!E .!E#eeeeee!!!E *!E#ee#!#e*d!E E!E#ee.!.e#d!E *!E#ee#!#e.E!E E!E#ee.!.e#E!E *!E#ee#!#e.E!E E!d#ee.!.e#E!E .!d*ee#!#e.E!E .!!!ee.!.e#E!E EEd*eeeeee.E!E EEd.eeeeee#EEa ####eedddeiiii eeeeeeeeeeeeee aaaaaaaaaaaaaa Bonus: ....55..55.... ml..5*55*5.... .m.c5....*.dm. .b..55>>>*.dl. .b..f{>p>5..b. .b..&w.d.wgdb. .b..-}.p.-.db. .W.c-wdddw..b. .<..W-.c.-..<. .W..Ww...w..m. .wd.*-.c.-..<. .l 4..1110001.c~4 4..>!1{1{4ff>l !.>1f!1<44.c~4 4>1f!.1114f.>l 41fb..222244s4 1fb........4>l fb.**.......gc b............j .............. !.!.!......... 55j.p......... ffffff!w!www.. +c+c+c+c---w.. 4444ffc+cffw.. wwwwwwwwwwwwww Level: SpocklLord Burgsau Bricks: @@@@@#!!!#@@@@ @iijj#!#!#jij@ @iijj#####jji@ @jj*.#####ijj@ @jj..#bbb#*..@ @EEEE.@*@.EE.@ @.....@x@...v@ @....e@x@e..v@ @....e@x@e..v@ @.....xxx...v@ @.....@x@...v@ @.....@z@....@ @c....xyx...c@ .c....@x@...c. .ggggg@z@gggg. .eeee@@y@eeee. .aaaa@@x@@aaa. .aaaa@@v@@aaa. Bonus: .............. .5555.f....f.. ..........s... ............m. ......mmm..... .......f...... .......b...... .....b.b.b.... .....b.-.b.... ......+-+..... .......-...... .............. .}....+.+...W. .......g...... ..c.c0...0.j.. .f.>.....ffw.. .w<....w..w.w. .s.ww.....<... Level: Spockl Vulkan uahhh Bricks: ###..E....#### .#...j*j...### .....#*#....## #...EEiE....## #...E##E..a..f ##..EddEE.a..f ...EEdd##....f ...EddEEe...#. ...EddEEEe.... ..EEdgddEe...x ..hddggdEEe..x ..EdddgddEee.. jEEggggggEee.. jEEE**ddddEe.. jEgg***dddEee. jEgEEE#EEEEeee eEEggEEggEEeee eeeeeeeeeeeeee Bonus: b&f.......ffm> .....m.m....&b ......m......m m.....m......b ..........b..c .....bb...b..> .....bb0m....c ....5j..0..... ....>c...0.... ....55>5.0...f ..w!m55m..}..{ ...l?m.ml.f<.. <..24b4b4.w-.. >...p.}!b?.f.. <.bbww2b4g.j.. >.*mm.+....s}b <..ww..ww..f.. >*f..f}f.++..s Level: Spockl Grummel Bricks: @@@@@@@@#d#@@@ @eeeeeee#d#ee@ @eicaaaa#d#ae@ @ecccca#####e@ @eaccca#####e@ @ecccaad###ae@ @@@aaaadd#dae@ @eaaaaadd#dae@ @e@.@*@@ddd@@@ @eabbbbbdddae@ @*abgggbdddae@ @eabbcbb.aaae@ @eaeeeeejaaae@ @ea@@jeej@@ae@ @eajjjjjjkkae@ @eaggjggkkaaee @eaaaaaavkeeee @eavvvvv.v@@@e Bonus: mffffffbclcbff f0f1f1f1clcfff b0mfwfffwlwf2b f0}{fff.sjs.2f f0wfw{fc&.&c2{ f0f*ffff.}.{}f m0>ffffffpf>2b {0wwff*ffcfW2{ fff.f.ffffff}f b0{gfjwg{ff>3f b0ffwgwf{{fW3f +wfgfwfg.wWW{b +0{ff<0+5+0>..b +.}}-fs+>w-{.} +.w.-+-+-+-.w} Level: LordSpockl Blumenzauber Bricks: ############## EEiiiiiiiiiii# #iii!iiiEEEiiE #ii!!!iii#iii# #i!!*!!jiiijj# #ji!!!jjii..j# #jjj!.jjj..!jj #jjjh.jj..!!!j Ejjbh..j.!!*!! ..j.hb....!!!. ....h..EE..!.. ..EEE...#..h.. #..#......bh#. E..........hhb E...........h. E.E.....EE..E. hhhhhhhhhhhhhh hhhhhhhhhhhhhh Bonus: 5mlbblbbblbbml ..???????????5 m???4???...??. 5??4f4???m???5 5?4.m.4??????5 5?.4&4????..?5 5???4.???..2?? 5???b.??..2m2? .??b+..j.2wmw2 ..j.wj....2w2. ....b......2.. ........b..f.. b..b......+>b. ...........wbb ............b. .............. ?w??????????w? cccccccccccccc Level: Spockl Die Tonne Bricks: EEEEEEEjjEEEcE Ejjjjjjjjjjjjc Ejjjjjjjjjjjjj E*##E@@E##*@jj EE##EEEE##EEjj EE##EEEE##E.jj EE##EiiE##EEjj EE##EiEE##EEjj EE##EggE##@.jj EE##EggE##EEjj EE##EggE##EEjj EE##EggE##EE.. EE########EE.. EE########EE.. .cEEEEEEEEE... .EEEEEEEEEE... .............. ggg...ggg..g.. Bonus: .......>l...c. .c...~.....f.. .l.c.....>.... .mbj....jbm.w. ..b5....db.... ..b5....5b.... ..bd.ww.5b...w ..b5.w..5b.... ..b5.+-.5b..f. ..b5.><.5b.... ..b5.}{.5b..>~ ..b5.&*.5b.... ..b555l55b.... ..bg++++gb.... .w............ .............. .............. w......w...... Level: Spockl Pinball Bricks: @@!!!ege###g@@ @....gEg#g#.g@ !.z..ege###..g .zcz.........g czizz.b.b..g.g jczzE#....xxxE jczE#..@@.g!g. ec.#...@@.xxx. jc...@.....g.. ec....b....... jc......b....! ecf.b....@.c.. jc@f......cf.! jc@@f....cf@.. *cE@@...cf@E.. dd.EEE..cEEc.. dd............ zE.EEE...E..E. Bonus: ..wff4.4blbb.m ........blb.>. c....4>4+j+..f ..5..........> b5m5..0.0..f.. 0.5..0........ f{..0..--.{bf. 4..0...--..g.. 0}.........f.. 4.....s....... f{......{....W 4.2........{.. 0}12......f2.j 0.012....f21.. c..01...g21... {>............ fW............ &............. Level: Lord was ist das Bricks: .............. .......e...... ......vvv..... .....vvvvv.... .....vvvvv.... .....vvvvv.... ....ev*v*ve... .....vvvvv.... .....vvvvv.... .....vvvvv.... ......vvv..... ......vvv..... ......vvv..... .......e...... .............. .............. ...E.......... .............. Bonus: .............. .......j...... .............. .....b........ .............. .............. ....{....sm... .......3...... .............. .....~........ .......m...... .............. .............. .............. .............. .............. .............. .............. Level: Lord Der Tempel Bricks: .............. .............. ......**...... .....yyyy..... ....zzzzzz.... ...zzzzzzzz... *.zzzzzzzzzz.* a.*.*.**.*.*.a a.*.*.**.*.*.a a.*.*.**.*.*.a a.*.*.**.*.*.a a.*.*.**.*.*.a a.zzzzzzzzzz.a a.z*a*aa*a*z.a vvz*a*aa*a*zvv vv**********vv .............. .............. Bonus: .............. .............. .............. ......55...... ......55...... ...55555555... ......55...... b............b b........s...b b............b b............b b............b b.....mm.....b b..b+bbbb+b..b ..mbbbbbbbbm.. **bbwbjjbbwb** .............. .............. Level: Spockl Oh Mann !! Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv @@@j@@@@@@@@j@ vvjjjjvjjjjjvv vvjvvjvvjvvjjv jvjvjjjjjvvjjv j@@vj@@@@vvvj@ jvjvvjvvvjjjjv jjjvvjvjvjvvjj vvvvjjjjvjjvvv jjjvjvjvvvvvvv vjvvvvjvvvjjjv vjvj@@jj@@jvjv j@@jvjjvjjvvjj jvjjv@@vjvvvvj jvjjjjvjjvvvvj vvvjvvvjvvvjjj vvvjvvvjvvvvvv Bonus: ld??!?dld??dl? ????!??dd?!dd? d??d!d????!??? ????!?????!?d? !!!!!!!!!!!!!! ???!??????!??? ???!??????!!?? .?.!?.????.!.? !!!!!!!!!!!!!! ????!!!.?!.?.. ?????????????? ..?.??.??!.?.? ???!??????.?.? !!!??!!!!!!!!! ?????????????? ?????????????? ??..???.???.?? ..?.???..??... Level: Spockl Spinner Bricks: E************E *****#******** *****#*#****** ***#i#i#i##*** ***#i#i#i##*** *###iiiiii###* ***#iiiiii#*** ***#iiiiii#*** *###iiiiii###* ***#iiiiii#*** **E########E** ****#****#**** ****#****#**** ****#****#**** aaaaaaaaaaaaaa bbbbbbbbbbbbbb .cccccccccccc. ..vvvvvvvvvv.. Bonus: !!!!!!!!!!!!!! ?????????????? ??!!!!!!!!!!?? ??!.!.!.!..!?? !!!.!.!.!..!!! ???.!!ll!!.??? ???.!!ll!!.??? ???.!!ll!!.??? !!!.!!ll!!.!!! ???.!!!!!!.??? ???........??? ???????j?????? ?????????????? ?????????????? g????????????g .............. .............. .............. Level: Spockl Irrsinn Bricks: iiiiiiiiiiiiii ii@#@iiic###ci c@iiicEciii#ic iiiii#i#iii#ii !!@!!#!#!!!#!! jj#j*#j#j#j#jc jj#jj#j#j#*#j# jj#jj#j#j#j#j# @##jjcj#j#j#*# gg#gggg#g#ggg# gg#gggg#g#ggg# gg###cg#gg###c ggggggg#gggggg gggggggcgggggg #####cbbc##bbb eeeeeeeeeee@ee @eeeeeeeeee#eh EjjEEhhEEhhhhE Bonus: l55l5555555l5l 55!.!555!...!5 *!!!!!0!!!*!!* w.fww.b.w....w ......b.!f!.!{ !f....b.f.f.f. w..f..!.w...f. ....w.f.....w. ...*!.*.w.*... 22.22ff.2.2!2. ff.w+22.2.2+w. 22....{.!!.... 222f{22.!*!{22 2222222.!!!2*2 ......*+...g+. !w*!+!w.!w+.w! ....*.p......! .............. Level: Spockl Emporio Bricks: EEE*dcEggEjjjj dddddcEggEjjjE dddddcEEgEj*jj EEEEdcEggEjjjj ccccccEggEjjjj iiiiiiiiiEiiEE iiiiiiiiiiiiii EEEEEiiiiiiiii iiiiii@@iiiiii eeeeeeee@eeEEE ........@eeeee eeeeeee.ee...e EEEEEEe...eeee kkkkkkkkkkEEEE kkkkkkkkkkkkkk kkkkkkkkkkkkkk EEEEEEEkkkkkkk kkkkkkkkkEEEEE Bonus: .......55.?bll ll?b...55.???. ???b....5....b .......55..... .......55..... .............. !!!!!!!!!!!!!! .............. c.c.c~..&&&~.. ffffffgf.+c... .........+ffff w>gw>>>.ff.... ......>...>w.w >>>>>w>g{>.... !!~.!!!{g!w>!! *>>*>......... .......***>>>* .......+g..... Level: Spockl Durchgeknallt Bricks: @EjjgE!!ghhhh@ vEjjgE!!gEEEhv jvjjgEE!gvvEhg j*jjgvv!g*hEhg EEEjg!!!gEhvhg vvvjg!!!gEhhhg jjjjg!E!gE@hhg ggggg!E!gEvhhg jjEgg@E!gEhhEE jjEg!!E!gvhhvv ccEg!*E!ghhhgg jjEg!!v!gh@hhg jjvg!!!!gEEEhg gggggggggvvvhg hhhhEEEhhhhhhg jjjjvvvjjjjjjj @jjjjjjjjjjjjj EEExxxxxxxxxx@ Bonus: ..44b.!!b????. l.44b.!!b...?l 4*44b..!b{{.?0 4.44b**!b.?.?0 ...4.!!!..?{?0 ***4&!!!&.???0 4444s!.!s..??0 +p...!.!j.{??0 44.....!..??.. 44..!!.!.{??{{ 44.+!..!+???.g 44.>!!}!>?.??> 44*w!!!!w...?w !!.......!!!?0 .......??????0 d...wWbg.}.{.d .....p.......0 ...W555555555. Level: Spockl Bonusfinale Bricks: !!!!!!!!!!!!!! !eeee###eeeee! !fffffffffffe! !!!!!!ggg***** ###hh!hhhh!!!* !j!jj*****!!!* !k!kk*****!!!* !d!dd*****!!!! ###dd*****!!!! !d!dd*****###! !d!dd*****gfe! !k!kk*****!!e! !j!jj*****!!e! !h!hh*****!!e! !g!ggggggg!!e! @f!fffffffffe! @!!!!!!!!!!!!! @###cccccc@@@@ Bonus: bbb5ll5g5g5gbb >>>>>>>>>>>>>> !+f+!+f+!+f!+! 55433333333455 55432222223455 554>5555555>55 554>+jjjjj+>55 554>+g555g+>55 554>+55555+>55 554>+5lll5+>55 554>+w&&&w+>55 lll>lwbbbwl>ll l5>>2wjbjw3>5l l54>2wwjww3>5l l54>>>ggg>>>5l l544444444445l l555555555555l l555......555l Level: Spockl Absolute War Bricks: E*!!E*!!E*!!E! E*E!E*E!E*!!E! E*E!E*E!E*E!E! E*E!E*E!E*E!E! EEE!EEE!EEE!E! eeeeeeeeeeeeee !!EE!!EEE!EEEE !!*E!!!*E!!!*E !!*E!!!*E!!!*E !!*E!!!*E!!!*E EEEE!EEEE!!EEE gggggggggggggg iiiEiiEEEi#iEE EEEEdEE*ddEddd #*!!!E**!!E!!! @*!!!@#EE!E!!! g*!EbbbbEbEbbb EfEEbbbbEbEEEz Bonus: .b...b...b...l .b...b...b...l .b...b...b.... .l...l...l.... ...w...w...w.w .............. .............. ..5....5....5. ..5....5....5. ..5....5....5. .............. >.>.>.>.>.>.>. .............. .............. .w.....w...... ....g....g...g .............. .5............ Level: Lord Inuyasha hoho Bricks: ######EE###### @***iiiiii***@ @ddiiiiiiiidd@ @ddiiiEEiiidd@ E#diEEEEEEiddE @ddiEEEEEEidd@ @ddijgEEgjid#@ @ddijaEEajidd@ @ddijjEEjjidd@ zddfffEEfffddz zddffEEEEffddz zddEffEEffEddz #dddeeEEeedddz zdddeeeeeedddz zdd*ffEEff*ddz zdddffEEffdddz EEEEeeeeeeEzEE @.....EE.....@ Bonus: .............. .m!wffffffw!m. .4.ffffffff.4. l4.fff..fff.4l .4.{555555{.4. .4.{......{.4. .4..!b..b!..4. .4..!l..l!..4. .4!&}&..&}&!4j 54...w..w...45 54..........45 54*..w..w..*45 54..........45 54....jg....45 54w.g....g.w45 54!........!45 ....{.gj.}.... .............. Level: Spockl No Chance! Bricks: @@@@@@@!.!.!zz @ddd#g#.....ci @ddd#g#...@.zi @ddd#g#..@@.cz @##d###.@@.jzz if#d#jj.@!.jcz @f#d#jj@@..jjj #f###jj@!....e #f#jjj@@...EEE ###jjj@!...ee@ f##jj@@....ee@ f##jj@!....ee@ f#jj@!.....ee@ f#j@@......@@@ ##@@!..!@...@@ #@@!...@@!.... @@!....@@@.... @!.....@@@.... Bonus: .......*.&.+.4 .3l3.l.......m .3d3.d.......m .3-3.-.......4 ..53.......1.4 m453..1..s.... .45g.1!....>>> .45...1......g .j.1.1.......+ ....1..s...ff. 5..1.......... 5..+1......ww. 5.11.......~~. 5.+........... .............. .............. .............. .............. Level: Spockl Putputput Bricks: ceezeeeeezeeee ceecEEeeeceeee ceezEE***Eeeee ceeEEE*E*Eeeee ceeEEE*h*EEEcc ceeEEE*E*EEccc ccEEEE*h*Ecccc cccccE*E*E!!!i i!!!iE*!*Eiiii iiiiiE*!*Eiiii !!!!!Ee!eE!!!! !!!!!Ee!eE!!!! !!!!!EE*EE!!!! !!!!!!EEE!!!!! iiiiiiiEiiiiiE !ggggggEggggg! ...E...!!..... E........E...# Bonus: --w.!----!.w-- ......---.!--- .>>!...g..--b- .b!...-.-.-!-g .>>...g!g..... d>>...-.-..... .......!..---- -----.!...bg>b b>b>......>>>b fffff.....ffff g!>g!.....b!!b bb--b.l.l.>++> b{bwb.....bwb{ >>>>>>...>b>>> -------.-----. w------.-----w .......wg..... .............. Level: Spockl F I N A L E Bricks: gggggggggggggg gggggggggggggg gggEEgaagEEggg gggggEaaEggggg ggEEEEaaEEEEgg gEggggbbggggEg ggggggbbgggggg gEggggccggggEg ggg!hEccEh!ggg gEgEdEccEdEgEg ggg!EvccvE!ggg gEgEEg..gEEgEg gEEggg..gggEEg gh!Eg....gE!hg ghEg......gEhg g!Eg......gE!g EEg........gEE zEi......E.iEz Bonus: l5..g.}}.g..5l .5.w.&&&&.w.5. &5....gg....5& &5*}}.&&.}}*5& .b....*&....b. w.&lww&&wwl&.w .b&&lw&&wl&&b. *.&&&lw&l&&&.* .*+.+.}p.+.+*. ....?.p}.?.... }b.&.5gg5.&.b} .....5..5..... ...40+..s03... .5..0....0..5. w5.0......0.5w w..0......0..w ..0........0.. w.+........+.+ lbreakout2-2.6.5/client/levels/FatalDoomsday20000664000175000017500000002335112140767201016031 00000000000000Version: 1.00 Level: Nethippy R.I.P. Bricks: ....h......h.. .............. .h.h..ee.h.... ......ee...hh. ....eeeeee.... ..h.eeeeee.... ......ee..h..h ....h.ee...h.. .h....ee.....h ......ee...... aaaaaaaaaaaaaa bbbbbbbbbbbbbb cccccccccccccc .............. .............. ffffffffffffff dddddddddddddd kkkkkkkkkkkkkk Bonus: ....m......m.. .............. .m.m..55.m.... ......55...mm. ....555555.... ..m.555555.... ......55..m..m ....m.55...m.. .m....55.....m ......55...... l555555555555l }555555555555} }555555555555} .............. .............. fbf~fcfdf~fbfb bfbfbfdfcfbfbf >>>>>>>>>>>>>> Level: Nethippy Huge Invisible Wall Bricks: hhhhhhhhhhhhhh vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 wbwbwbwbwbwbwb bwbwbwbwbwbwbw }}}}}}}}}}}}}} >>>>..++..>>>> Level: Nethippy Half There? Bricks: iiiiiiiiiiiiii !.!.!.!kv.v.v. ......kk...... .!.!.!kv.v.v.v ......kk...... !.!.!.!kv.v.v. ......kk...... .!.!.!kv.v.v.v ......kk...... !.!.!.!kv.v.v. ......kk...... .!.!.!kv.v.v.v ......kk...... !.!.!.!kv.v.v. ......kk...... .!.!.!kv.v.v.v ......kk...... !.!.!.!kv.v.v. Bonus: ffffffffffffff *.5.5.555.5.5. ......55...... .5.5.555.5.5.* ......55...... l.5.5.555.5.5. ......55...... .5.5.555.5.5.l ......55...... 5.5.5.555.5.5. ......55...... .5.5.555.5.5.5 ......55...... 5.5.5.555.5.5. ......55...... .5.5.5{{.5.5.5 ......{{...... ~.~.~.~~~.~.~. Level: Nethippy Bonus Round Bricks: iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh gggggggggggggg gggggggggggggg gggggggggggggg ffffffffffffff ffffffffffffff ffffffffffffff eeeeeeeeeeeeee eeeeeeeeeeeeee eeeeeeeeeeeeee dddddddddddddd dddddddddddddd dddddddddddddd Bonus: .............. .............. 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 l555555555555l llwwwwwwwwwwll }}}}}}}}}}}}}} bbbbbbbbbbbbbb >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: Nethippy Wall Of Wonderment Bricks: @iiiiiiiiiiii@ hhhhhhhhhhhhhh gggggggggggggg dddddddddddddd jjjjjjjjjjjjjj @............@ gggggggggggggg dddddddddddddd jjjjjjjjjjjjjj @............@ hhhhhhhhhhhhhh gggggggggggggg dddddddddddddd jjjjjjjjjjjjjj @............@ vvvvvvvvvvvvvv .............. !!!!!!!!!!!!!! Bonus: .............. 55555555555555 55555555555555 55555555555555 55555555555555 .............. ?????????????? ?????????????? ?????????????? .............. ?????????????? ?????????????? ?????????????? ?????????????? .............. >>>>>>>>>>>>>> 55555555555555 55555555555555 Level: Nethippy Yucky Slime Bricks: zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzz. .z.zzzzzzzzz.. .z.zz.zzzz.z.. ...z...z.z.... .......z...... .............. .............. .............. .............. .............. .............. zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz Bonus: .............. 55555555555555 55555555555555 5555555555555w w5w555555555w. .5.55w5555w5.. .w.5w.w5w5.w.. ...w...5.w.... .......w...... .............. .............. .............. .............. .............. .............. bbbbbbbbbbbbbb >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: Nethippy Se7en Bricks: @@@@@@@@@@@@@. jjdddddddddj@. jjdddddddddj@. jjdddddddddj@. jjjjjjjjdddj@. jjjjjjjjddjj@. jjjjjjjdddjj@. jjjjjjjddjjj@. jjjjjjdddjjj@. jjjjjjddjjjj@. jjjjjdddjjjj@. jjjjdddjjjjj@. jjjddddjjjjj@. jjjdddjjjjjj@. jjjddjjjjjjj@. jjjdjjjjjjjj@. .............. .............. Bonus: .............. ll555555555l.. g.555555555g.. ..555555555w.. .....bbb555... .....bbb55.w.. ......b555.... .......55..w.. ......555..... ......55...w.. .....555...... ....555....w.. ...5555....... ...555.....w.. g.}55}.....g.. ><>5><><><>w.. .............. .............. Level: Nethippy Octuple Plusungood Bricks: d.g.dgggd.g.d@ .###.###.###.@ .#d#.#d#.#d#.@ .#d#.#d#.#d#.@ .ddd.ddd.ddd.@ .ddd.ddd.ddd.@ .#d#.#d#.#d#.@ .#d#.#d#.#d#.@ i###i###i###i@ hh.ihi.ihi.hh@ i###i###i###i@ .#d#.#d#.#d#.@ .#d#.#d#.#d#.@ .ddd.ddd.ddd.@ .ddd.ddd.ddd.@ .#d#.#d#.#d#.@ .#d#.#d#.#d#.@ .###.###.###.@ Bonus: l.m.lmmml.m.l5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 >555>555>555>5 }}.>}>.>}>.}}5 >555>555>555>5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 Level: Nethippy Frigid Surprise! Bricks: !!!!!!!!!!!!!! .............. ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** Bonus: 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..{{{{{{{{{{{{ Level: Nethippy Symmetric Death Bricks: .............. .............. .!....vv....!. .....vvvv..... ....vvvvvv.... ddd.EEEEEE.ddd ddd........ddd dddd......dddd ddddE....Edddd ddddEEa.EEdddd hhhhhE..Ehhhhh hhhhhE.aEhhhhh hhhhhE..Ehhhhh hhhhhEa.Ehhhhh hhhhhE..Ehhhhh hhhhhE.aEhhhhh hhhhhE..Ehhhhh EEEEE@a.@EEEEE Bonus: .............. 5l5........5l5 5m5........5m5 555...mm...555 .....mmmm..... 555........555 555........555 5555......5555 5555......5555 5555..&...5555 55555....55555 55555..f.55555 55555....55555 55555.c..55555 55555....55555 55555..W.55555 55555....55555 ......>....... Level: Nethippy Symmetric Death II Bricks: iehgcddddcghei eehhEddddEhhee eehhhdEEdhhhee eEghEdEEdEhgEe iiEghddddhgEii iiiEEEddEEEiii iiEgEkddEEgEii jEggEkddkEggEj jjggEEjjjEggjj jjggEEEEjEggjj jjggEEddkEggjj EjgEEjddkEEgjE kjkkEkjjEEkkjk vvvvEkEEEEvvvv vEEvEkddEEvEEv vvvvEkddkEvvvv kkkkEEjjkEkkkk EEEEEEEEkEEEEE Bonus: l}}}l5555l}}}l 5555.5555.5555 555555..555555 5.*555..555*.5 55.*55}}55*.55 55*...}}...*55 55.*.>}}..*.55 5.55.>}}<.55.5 5555..ll<.5555 5555....<.5555 5555..ll<.5555 .55..>55<..55. *55*.>ll..*55* 5555.>....5555 5..5.>55..5..5 5555.>55<.5555 ......55<..... ........<..... Level: Nethippy Boom! Bang! Pow! Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 bbbbbbbbbbbbbb wwwwwwwwwwwwww }}}}}}}}}}}}}} 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 w555555555555w ww5555555555ww }}}}}}}}}}}}}} >>>>>>>>>>>>>> dddddddddddddd {{{{{{{{{{{{{{ Level: Nethippy Don't Drop The Ball! Bricks: jjj#********** ***#*########* *#*#*#******#* *#*#*#*####*#* *#*#*#*#**#*#* *#*#*#*#*##*#* *#*#*#*#**#*#* *#*#*#*##*#*#* *#*#*#*#**#*#* *#*#*#*#*##*#* *#*#*#*#**#*#* *#*#*#*##*#*#* *#*#*#*#**#*#* *#*#*#*#*##*#* *#*#*#*#****#* *#***#*######* *#***#******** *############# Bonus: lll.j555j5555j 555.5........5 5.5.5........5 5.5.5........5 5.5.5........5 5.5.5........5 j.5.5........5 5.5.5........j 5.j.j.j......5 5.5.5.5......5 5.5.5.5......5 5.5.5.5......5 5.5.5.5......5 5.5.5.5......5 }.5.5.5......5 }.555.5......5 }.55j.j555j555 >............. Level: Nethippy Tree Of Doom Bricks: .............. .............. .......xx..... ....x.x....... ..x..x....x... ...x..x..xx... ...x.x.x.x.x.. ..xx..xx.x.... .xx.x.xx.xxxx. .x...xxxx.x..x x...x.xxx..x.. ....x.xx.x.... ......xx.x.... ......xx...... ......xx...... ......xx...... eeeeeeeeeeeeee eeeeeeeeeeeeee Bonus: .............. .............. .......f5..... ....5.f....... ..5..f....5... ...f..5..ff... ...f.5.5.f.5.. ..ff..55.f.... .ff.f.55.ffff. .f...5555.f..5 5...f.555..5.. ....5.55.f.... ......55.5.... ......55...... ......mm...... ......mm...... w>>>>>>>>>>>>w >>>>>>>>>>>>>> Level: Nethippy Boxed In! Bricks: E@EEEE@@EEEE@E EfffffkkfffffE EjffffkkffffjE EejfffkkfffjeE EiejffkkffjeiE EgiejfkkfjeigE EggiejkkjeiggE EgggiejjeigggE EggggieeiggggE EgggggiigggggE EggggggggggggE EiiiiiiiiiiiiE EdddddiidddddE Edh@hdiidh@hdE EdhhhdiidhhhdE EdhhhdiidhhhdE Ed@h@diid@h@dE EE.v.E@@E.v.EE Bonus: .............. .b..........b. .555555555555. .555555555555. .>5555555555>. .555555555555. .555555555555. .>5555555555>. .555555555555. .555555555555. .>5555555555>. .555555555555. .555555555555. .>}.}5555}.}>. .w}w}5555}w}w. .w}}}5555}}}w. .b.l.5mm5.l.b. ...>......>... Level: Nethippy Bogus Round Bricks: dddddddddddddd dhh.dhhhdhhhdd dh.hdh.hdh..dd dhh.dh.hdh.hdd dh.hdh.hdh.hdd dhh.dhhhdhhhdd dddddddddddddd dddh.hdhhhdddd dddh.hdh..dddd dddh.hdhhhdddd dddh.hd..hdddd dddhhhdhhhdddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd Bonus: {{{{{{{{{{{{{{ {jW.WWWWWWWWj{ {W.>>>.>>>..W{ {W>.cc.ccc.>W{ {W.cj~.~~j.>W{ {W>.~jddj~c>W{ {W>c~djjd~c>W{ {W>c.d--d~c>W{ {W>c.d--..c>W{ {W>c.d--d~c>W{ {W>c.d-..~c>W{ {W>c~djj.~c>W{ {W>c~jddj~c>W{ {W>cj~~~~jc>W{ {W>jccccccj>W{ {Wj>>>>>>>>jW{ {jWWWWWWWWWWj{ {{{{{{{{{{{{{{ Level: Nethippy The End Bricks: zzz.z.z.zzz.@@ .z..z.z.z....@ .z..zzz.zzz... .z..z.z.z..... .z..z.z.zzz... .............. .zzz.z...z.zz. .z...zz..z.z.z .zzz.z.z.z.z.z .z...z..zz.z.z .zzz.z...z.zz. .............. z..z....zz.... zz@@@zz@@@@zz@ zzz@zzzzz@zzzz z@zzz@@@zzz@@z ...z..z..z.... .............. Bonus: 555.5.5.555... .5..5.5.5..... .5..555.555... .5..5.5.5..... .5..5.5.555... .............. .555.5...5.55. .5...55..5.5.5 .555.5.5.5.5.5 .5...5..55.5.5 .555.5...5.55. .............. *..*....**.... }}...}}....}}. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Alex0000664000175000017500000001103012140767201014100 00000000000000Version: 1.00 Level: Daddy Number 1 Bricks: **..........** **......**..** ........**.... ..v...v....v.. ..v...v....v.* ..v...v....v.* ..v...v....v.* ..vvvvvvvvvv.* ..v..........* ..v........... ..v........... ..v........... *.v..vvvvvvvvv *.v..v........ *.v..v.......* *.v..v.......* *.v..vvvvvvv.* *.v..........* Bonus: ww..........ww ww......ww..ww ........ww.... ..0...0....0.. ..0...0....0.+ ..0...0....m.+ ..0...m....0.+ ..0m000000b0.+ ..0..........+ ..0........... ..0........... ..0........... +.0..1l11111m1 +.0..1........ +.0..m.......+ +.0..1.......+ +.b..1l111bb.+ +.b..........+ Level: Daddy Number 2 Bricks: vvvvvvvvvvvvvv vxvvxvvxvvxvvx vvvvvvvvvvvvvv .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! ************** Bonus: 55555555555555 5l55l55l55l55l 55555555555555 .............. 44444444444444 wwwwwwwwwwwwww .............. 33333333333333 ++++++++++++++ .dddddddddddd. 22222222222222 wwwwwwwwwwwwww bbddddddddddbb 11111111111111 ++++++++++++++ bb.dddddddd*bb 00000000000000 wwwwwwwwwwwwww Level: Daddy Number 3 Bricks: ####*####*#### #.!#*#vv#*#!.# #..#*#vv#*#..# #..#*#vv#*#..# #!.#*#vv#*#.!# #..#*#vv#*#..# #..#*#vv#*#..# #.!#*#vv#*#!.# #..#*#vv#*#..# #..#*#vv#*#..# #!.#*#vv#*#.!# #..#*#vv#*#..# #..#*#vv#*#..# #.!#*#vv#*#!.# #..#*#vv#*#..# #..#*#vv#*#..# #!.#*#vv#*#.!# #..#*####*#..# Bonus: 2222&2222&2222 2}&2m2~~2m2&}2 2}}2.2}}2.2}}2 2{{2.2~~2.2{{2 2&{2.2}}2.2{&2 2{{2.2~~2.2{{2 2}}2.2}}2.2}}2 2}&2.2552.2&}2 2}}2w2ll2w2}}2 2{{2w2ll2w2{{2 2&{2w2552w2{&2 2{{2w2}}2w2{{2 2}}2w2~~2w2}}2 2}&2w2}}2w2&}2 2}}2w2~~2w2}}2 2bb2w2}}2w2bb2 2&+2w2~~2w2+&2 2++2d++++d2++2 Level: Daddy Number 4 Bricks: iiivivviivivvi ivivivvivvivvi ivivivvivvivvi ivivivvivvviiv iiivivviivviiv ivivivvivvviiv ivivivvivvivvi ivivivvivvivvi iviviiviivivvi vvvvvvvvvvvvvv ..v..v..v..v.. *.v..v..v..v.* *.v..v..v..v.* *.v..v..v..v.* *.v..v..v..v.* *.v..v..v..v.* *.v..v..v..v.* *.v..v..v..v.* Bonus: .............. .............. .............. .............. .............. .............. .l...l..l...l. -------------- g*g*gg*gg*g**g wwgwwgwwgwwgww ..}..}..}..}.. +.}..}..}..}.+ +............+ +.b..}..}..b.+ +.b..}..}..b.+ +.w..w..w..w.+ +.w..w..w..w.+ +.w..w..w..w.+ Level: Daddy Number 5 Bricks: ************** ************** ************** ************** ************** *****....***** *****.zz.***** *****.zz.***** *****.zz.***** *****.zz.***** *****.zz.***** *****.zz.***** *****....***** ************** ************** ************** ************** ************** Bonus: 0bb00++++00bb0 01111111111110 0ll22222222ll0 01233333333210 01234444443210 01234....43210 01234.ll.43210 01234.mm.43210 01234.**.43210 01234.mm.43210 01234.**.43210 01234.mm.43210 01234....43210 01234555543210 01234555543210 wwwwwwwwwwwwww wwwwwwwwwwwwww +++dddddddd+++ Level: Daddy Number 6 Bricks: ************** *!!!!!!!!!!!!* ****!.......!* EEE*!...!!!!!* **E*!!!.****** **E***!.!!!!!* **EEE*!.....!* ****E*!!!...!* *!!*E***!...!* *!!*EEE*!...!* *!!***E*!!!.!* *!!!!*E***!.!* *!..!*EEE*!.!* *!..!***E*!!!* *!..!!!*E***!* *!!!!!!*EEE*!* *****!!***E*!* ######!!!*E*!# Bonus: 00000000000000 0.....bbb....0 ll00.........0 ...0.........0 00.0.++.000000 00.00s+.ll...0 00...s.......0 0000.sggg....0 0pp0.ssmg....0 0p.0...mg....0 0p.00s.mggg..0 0pbbbs.mmmg..0 0p..+s...mg..0 0p..+sss.mgg+0 0p..+++w.mww+0 0ppppp+w...w+0 mmmmmp+www.w+0 l5555l+++w.w+l Level: Daddy Number 7 Bricks: hhhvhhhhhhvhhh hihvhihhihvhih hhhvhhhhhhvhhh vfvvvfvvfvvvfv vfv.vfvvfv.vfv vfv.vfvvfv.vfv vfv.vfvvfv.vfv vfv.vfvvfv.vfv vfvvvfvvfvvvfv vvhhhvvvvhhhvv .vhihv..vhihv. .vhhhv..vhhhv. .vvfvv..vvfvv. ..vfv....vfv.. ..vfv....vfv.. *.vfv.**.vfv.* *.vfv.**.vfv.* *.vfv.**.vfv.* Bonus: &&&5&&&&&&5&&& 4*454*44*454*4 44454444445444 1w151w11w151w1 1w1.1w11w1.1w1 lw1.1wllw1.1wl 1w1.1w11w1.1w1 1w1.1w11w1.1w1 1w1b1w11w1b1w1 134443ll344433 .34*43..34*43. .34443..34443. .30w03..30w03. ..0w0....0w0.. ..0w+....+w+.. +.+w+.++.+w+.+ +.+w+.++.+w+.+ +.+w+.++.+w+.+ Level: Daddy Last One 8 Bricks: zzzvzvzvzzvvvv vzvvzvzvzvvvvv vzvvzzzvzzvvvv vzvvzvzvzvvvvv vzvvzvzvzzvvvv vvvvvvvvvvvvvv vvzzvzvvvzvzzz vvzvvzzvvzvzvz vvzzvzvzvzvzvz vvzvvzvvzzvzvz vvzzvzvvvzvzzz vvvvvvvvvvvvvv ############## .............. !!!!!!!!!!!!!! ************** .............. !!!!!!!!!!!!!! Bonus: m55.5.5.55...m .5..5.5.5..+.. .5..555.55..+. .5..5.5.5..... .5..5.5.55+.jj ..jj....jj.... ..55.5...5.555 +.5..55..5.5.5 ..55.5.5.5.5.5 ..5..5..55.5.5 .+55+5.+.5.555 jj...jj...jj.. &&&&&&&&&&&&&& }lll}mm}lllll} .............. wwwff-WW-ffwww ++}+++++++}+++ llbbbbbbbbbbll lbreakout2-2.6.5/client/levels/Symmetry0000664000175000017500000001221412140767201015045 00000000000000Version: 1.00 Level: Leo Gruyters Soft Start Bricks: .............. .............. ajjjjjjjjjjjja ja@gggggggg@aj jgav@v@@v@vagj jgva......avgj jg@.avEEva.@gj jgv.vaaaav.vgj jg@.Ea**aE.@gj jg@.Ea**aE.@gj jgv.vaaaav.vgj jg@.avEEva.@gj jgva......avgj jgav@v@@v@vagj ja@gggggggg@aj ajjjjjjjjjjjja .............. .............. Bonus: .............. .............. ..m..b..b..m.. .............. >..g..mm..g..> .b..........b. 1...j....j...1 .~....lg....~. ..}...55...{.. f.....55.....f .w..........w. >.?........?.> 1-..........-1 .*..........*. 0..0..00..0..0 ..~.-.ff.-.~.. .............. .............. Level: Leo Gruyters Wrong side Bricks: .............. .....jjj...... ...EhEhEhE.... .............. eeedddddddeeev .............v ..#b#b#b#b#..v .!iiiiiiiii!.v .kkkkkkkkkkk.v djdjdjdjdjdjdv eEeEeEeEeEeEev ffffaaaaaafffv hhhhhhhhhhhhhv ggggg*g*gggggv #.#v#v#v#v#v#v .............. .............. .............. Bonus: .............. .....555...... ....p.j.~..... .............. w...m.1.*...w. .............. .........g.... ..~.!.g.s.~... ...-....-..... .............. W.W.W.W.W.W.W. +f.f.......f+. bs1.cb1gc..1.. mmm-2f2.2f2-m. .............. .............. .............. .............. Level: Leo Gruyters Nuclear Bricks: .....gggg..... ....gg**g..... ...gg*gg*gg... ..gg*gggg*gg.. .gg*ggddgg*gg. gg*ggeeeegg*gg g*ggbbbbbbgg*g *gg#@hhhh@#gg* *gffffffffffg* *giiddddddiig* *gddddddddddg* *gggggddggggg* g*gggjddjggg*g gg**ggjjgg**gg gggg*!jj!*gggg @@vvEj@@jEvv@@ .............. .............. Bonus: .....ffff..... ....ff00f..... ...ff0~~0ff... ..fw0~dd~0wf.. .ff0~d55d~0ff. ff0~d.ff.d~0ff w0~.j3333g.~0w 0~...f..f...~0 0............0 0.4..p-.-m.4.0 0.f........f.0 0.+..+bb+..+.0 ~0..........0~ w~00~.....00~w ..~~0-..-0~~.. ..w4.>..>.4w.. .............. .............. Level: Leo Gruyters Eratic Bricks: .............. hhhhhhhhhhhhhh j#vvvvvvvvvv#j j#E!eeeeee!E#j j#..@.@@.@..#j j#..ffffff..#j *#bbffffffbb#* iiggggggggggii iijjjj@@jjjjii iigggg@@ggggii *#bbffffffbb#* j#..ffffff..#j j#..@.@@.@..#j j#E!eeeeee!E#j j#vvvvvvvvvv#j dddddddddddddd .............. .............. Bonus: .............. 1.4.fm55mf.4.1 .............. ....>gppl>.... .............. 1...-.ff.-...1 ...g......g... .............. .c..........c. .*...!..!...*. .............. 0...-....-...0 w............w 0...>3333>...0 >............> +.~>f.~~.f>~.+ .............. .............. Level: Leo Gruyters Mine Bricks: .............. .ffffffffffff. .@@@@@bb@@@@@. .iiii#bb#iiii. .bbbb#bb#bbbb. .Ekfb#bb#bfkE. .Ekeb#bb#bekE. .Ekeb#bb#bekE. .Eke@#bb#@ekE. .Eke@#bb#@ekE. .Ekej#bb#jekE. .#####bb#####. .EEEEEaaEEEEE. .aaaaaaaaaaaa. .aaaaaaaaaaaa. .############. .############. .............. Bonus: .............. ..4.4m44}4.4.. .0?0w0?0?040?. .~..........~. .0~...p....~0. ..0.m...m..... .............. ....g.5..{.... .............. .............. ....*....*.... .............. ..0w..jj..w0.. .fm.mf..fm.mf. .sb-.++++.-bs. .+???+??+???+. .............. .............. Level: Leo Gruyters Volcano Bricks: .............. gggEjjjjjjEggg ggggjjjjjjgggg gggg!EjjEggggg ggggggjjgggggg aaaaa!**!aaaaa aaa..!**!..aaa aa...!@@!...aa a....!@@!....a .....v@@v..... ....va@@av.... ...va#EE#av... ..va#E###Eav.. .va########av. vaE#E#EEE#E#av a############a #ffffffffffff# .............. Bonus: .............. .............. ..*2.m..m.2*.. .2..l....g..2. ..p........p.. ......55...... .............. .............. .............. .............. .............. .............. .............. .............. .............. ..-.~f..f~.-.. .>m+..mm..+>m. .............. Level: Leo Gruyters Ufo Bricks: .............. .............. ......zz...... .....zjjz..... ....zj**jz.... ...xjEddEjx... ..xjddddddjx.. .xjeeeeeeeejx. xjhaahhhhaahjx jhEEahEEhaEEhj zjhaahhhhaahjz .zjEeeeeeeEjz. ..zjddddddjz.. ...@jddddj@... ...@vj**jv@... ...@.vjjv.@... ...@.v@@v.@... .............. Bonus: .............. .............. .............. ......55...... .............. .............. ...-p.ww.p-... ..>~......~>.. .0m.f.**.f.m0. 00...g..l...00 .0+3......3+0. ..3.bf..fb.3.. .....2ff2..... ......44...... .............. .............. .............. .............. Level: Leo Gruyters Black Hole Bricks: .............. .!!keEEEEek!!. .!kk******kk!. .dekkeggekked. .dekkggggkked. .dee######eed. .dee#aaaa#eed. .deE#avva#Eed. .deE#avva#Eed. .deE#avva#Eed. .deE#avva#Eed. .dee#aaaa#eed. .dee######eed. .dekkggggkked. .dekkeggekked. .!kk******kk!. .!!keEEEEek!!. .............. Bonus: .............. .............. ..3.ffffff.3.. .W..111111..W. ...wmmmmmmw... .~.*......*.~. .>....l!....>. .fg..!55!...f. ..f...55...f.. ......55...... .fp...55...jf. .>00......00>. .............. .W*~000000~*W. ..+.wffffw.+.. .-..-.+..-..-. .............. .............. Level: Leo Gruyters Tough Bricks: .............. .............. bbbbbbbbbbbbbb e...EEeeEE...e ee...ieei...ee .eeaaaeeaaaee. .vee##ee##eev. .v@ee!vv!ee@v. gghhed**dehhgg gghhed**dehhgg .v@ee!vv!ee@v. .vee##ee##eev. .eeaaaeeaaaee. ee...ieei...ee e...EEeeEE...e bbbbbbbbbbbbbb ..v..v..v..v.. .............. Bonus: .............. .............. ...d......d... f.....pg.....f .............. ..22m5..5m22.. ..2...bb...2.. ...j......*... fw...}..{...wf .+..........+. ....s......... ..~........~.. .-2........2-. fb....ff....bf .............. >~>~>~>~>~>~>~ .............. .............. lbreakout2-2.6.5/client/levels/TheEnd0000664000175000017500000002076012233752103014366 00000000000000Version: 1.10 Level: G Fun City End Bricks: !!!.!.!.!!!... .!..!.!.!..... .!..!!!.!!!... .!..!.!.!..... .!..!.!.!!!... .............. .............. .!!!.!..!.!!.. .!...!!.!.!.!. .!!!.!.!!.!.!. .!...!..!.!.!. .!!!.!..!.!!.. .............. .............. .............. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: ...5.5.5...5.. 5.55.5.5.555.. 5.55...5...5.. 5.55.5.5.555.. 5.55.5.5...5.. 555555555555.. 5555555555555. 5...5.55.5..55 5.555..5.5.5.5 5...5.5..5.5.5 5.555.55.5.5.5 5...5.55.5..55 5555555555555. .............. .............. .............. ffffffffffffff >>>>>>>>>>>>>> Level: G Fatal Doomsday End Bricks: .............. ddddd.d.d.dddd d.d.d.d.d.d... ..d...ddd.ddd. ..d...d.d.d... ..d...d.d.dddd .............. dddd.d..d.ddd. d....dd.d..d.d ddd..d.dd..d.d d....d..d..d.d dddd.d..d.ddd. .............. .............. !...!...!...!. ..!...!...!... .............. vvvvvvvvvvvvvv Bonus: .............. fffff.f.f.ffff f.f.f.f.f.f... ..f...fff.fff. ..f...f.f.f... ..f...f.f.ffff .............. ffff.f..f.fff. f....ff.f..f.f fff..f.ff..f.f f....f..f..f.f ffff.f..f.fff. .............. .............. ~...~...~...~. ..~...~...~... .............. >>>>>>>>>>>>>> Level: G Wonder Walls End Bricks: ccc.c.c.cccc.. .c..c.c.c..... .c..ccc.ccc... .c..c.c.c..... .c..c.c.cccc.. .............. .ccc.c...c.cc. .c...cc..c.c.c .cc..c.c.c.c.c .c...c..cc.c.c .ccc.c...c.cc. .............. cccccccccccccc cccccccccccccc cccccccccccccc vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. .5..5.5.5..... .5..555.555... .5..5.5.5..... .5..5.5.5555.. .............. .555.5...5.55. .5...55..5.5.5 .55..5.5.5.5.5 .5...5..55.5.5 .555.5...5.55. .............. 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: G TrickShot End Bricks: ############## #ccc##c#c#ccc# ##c###c#c#c### c#c#c#ccc#ccc# .#c#.#c#c#ccc# .#c#.#c#c#c### .#c#.#c#c#ccc# .###.######### .............. ############.. ccc#c###cc##.. c###cc##c#c#.. ccc#c#c#c#c#.. ccc#c#c#c#c#.. c###c#c#c#c#.. ccc#c#c#cc##.. ###########... .............. Bonus: .............. .555..5.5.555. ..5...5.5.5... m.5.m.555.555. ..5...5.5.555. ..5...5.5.5... ..5...5.5.555. .............. .............. .............. 555.5...55.... 5...55..5.5... 555.5.5.5.5... 555.5.5.5.5... 5...5.5.5.5... 555.5.5.55.... .............. .............. Level: G T.C.S. End Bricks: ############## #!!!#!#!#!!!## ##!##!#!#!#### ##!##!!!#!!!## ##!##!#!#!#### ##!##!#!#!!!## ############## #!!!#!###!#!!# #!###!!##!#!#! #!!!#!#!#!#!#! #!###!##!!#!#! #!!!#!###!#!!# ############## ############## ###@###@###@## ############## #@###@###@###@ g############g Bonus: gggggggggggggg >5555555555f55 555555555f5555 555f555>555555 5f555f55555555 55>5555f555f>5 5555>555555555 55555555555555 jjjjjjjjjjjjjj 55555555555555 55f55555555555 55555>5f5f5>55 55555555555555 f555f5555555f5 555555555>5555 55555555555>55 555555f5555555 m5f5>55555555m Level: G Fatal Doomsday II End Bricks: zzz.z.z.zzz.@@ .z..z.z.z....@ .z..zzz.zzz... .z..z.z.z..... .z..z.z.zzz... .............. .zzz.z...z.zz. .z...zz..z.z.z .zzz.z.z.z.z.z .z...z..zz.z.z .zzz.z...z.zz. .............. z..z....zz.... zz@@@zz@@@@zz@ zzz@zzzzz@zzzz z@zzz@@@zzz@@z ...z..z..z.... .............. Bonus: 555.5.5.555... .5..5.5.5..... .5..555.555... .5..5.5.5..... .5..5.5.555... .............. .555.5...5.55. .5...55..5.5.5 .555.5.5.5.5.5 .5...5..55.5.5 .555.5...5.55. .............. *..*....**.... }}...}}....}}. .............. .............. .............. .............. Level: G Patience End Bricks: @@@@@@@@@@@@@@ @vvv@@v@v@@vv@ @@v@@@v@v@@v@@ @@v@@@vvv@@vv@ @@v@@@v@v@@v@@ @@v@@@v@v@@vv@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @vvv@v@@v@vvv@ @v@@@vv@v@@v@v @vvv@v@vv@@v@v @v@@@v@@v@@v@v @vvv@v@@v@vvv@ @@@@@@@@@@@@@@ hhhhhhhhhhhhhh iiiiiiiiiiiiii gggggggggggggg !!!!!!!!!!!!!! Bonus: 55555555555555 5...55.5.55..5 55.555.5.55.55 55.555.m.55..5 55.555.5.55.55 55.555.5.55..5 55555555555555 55555555555555 5...5.55.5...5 5.555..5.55.5. 5...5.5..55.5. 5.555.55.55.5. 5...5.55.5...5 55555555555555 m~>W......W>~m ~~>W......W>~~ >>>W......W>>> WWWW......WWWW Level: G P.I.T.A. END Bricks: ************** hhh*h*h*hhh*** *h**h*h*h***** *h**hhh*hhh*** *h**h*h*h***** *h**h*h*hhh*** ************** hhh*h**h*hhh** h***hh*h**h*h* hh**hh*h**h*h* h***h*hh**h*h* hhh*h**h*hhh** ************** EEEEEEEEEEEEE* ************** *******E****** EEEEEEE*EEEEEE .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. f.f.f.f..f.f.f f.f.f.f..f.f.f .............. .............. Level: G Weirdness End Bricks: eeeeeeeeeeeeee @@@@@e@e@e@@@e @e@e@e@e@e@eee ee@eee@@@e@@ee ee@eee@e@e@eee ee@eee@e@e@@@e eeeeeeeeeeeeee @@@@e@ee@e@@ee @eeee@@e@e@e@e @@@ee@e@@e@ee@ @eeee@ee@e@ee@ @@@@e@ee@e@@@e eeeeeeeeeeeeee .............. .............. .............. .............. .............. Bonus: f.f.f.f.f.f.f. 55555.5.5.555. 5m5.5.5m5.5m.. ..5...555.55.. ..5...5.5.5... ..5...5.5.555. .f.f.f.f.f.f.f 5555.5..5.55.. 5....55m5.5.5m 555..5.55.5..5 5m...5..5.5..5 5555.5..5.555. f.f.f.f.f.f.f. .............. .............. .............. .............. .............. Level: G Jedi Adventure End Bricks: vvvvvvvvvvvvv@ v***v*v*v***v@ vv*vv*v*v*vvv@ @v*vv***v***v@ @v*vv***v***v@ @v*vv*v*v*vvv@ @v*vv*v*v***v@ vvvvvvvvvvvvvv v***v**v*v***v v*vvv**v*vv*v* v***v*v**vv*v* v***v*v**vv*v* v*vvv*vv*vv*v* v***v*vv*v***v vvvvvvvvvvvvvv .............. .............. .............. Bonus: .fff>...>...>. .555.5f5.555.. >.5f.5f5f5ff.. ..5..555.555.. ..5.>555>555.. ..5f.5f5.5ff.. ..5..5f5.555f. >...>....>.... .555.55f5.555. .5ff.55f5..5f5 .555.5f55.f5f5 .555>5f55>.5f5 .5ff.5..5..5f5 .555.5..5.555. >.f.>..f.>...f .............. .............. .............. Level: G AllNighter End Bricks: ccccccc@@@.... c..c..c.@..... c..c..c.@..... ...c....@@...@ ...c.c.c@@@@@@ ...c.c.c@ccc.@ @..c.ccc@c.... @@.c.c.c@cc... @@@c.c.c@c.... @@@@@@@@@ccc.@ cccc...@@@@@@@ c....c...c...@ c....cc..c.cc. ccc..c.c.c.c.c c....c..cc.c.c c....c...c.c.c cccc.c...c.cc. @@@@@@@@@@@@#. Bonus: 5555555....... 5..5..5....... 5..5..5....... ...5.......... ...5.5.5...... ...5.5.5.555.. ...5.555.5.... ...5.5.5.55... ...5.5.5.5.... .........555.. 5555.......... 5....5...5.... 5....55..5.55. m55..5.5.5.5.5 5....5..55.5.5 5....5...5.5.5 5555.5...5.55. .............. Level: G Madness End Bricks: hhhhhhhhhhhhhh EEEhEhEhEEEhhh hEhhEhEhEhhhhh hEhhEEEhEEhhhh hEhhEhEhEhhhhh hEhhEhEhEEEhhh hhhhhhhhhhhhhh hEEEhEhhEhEEEh hEhhhEEhEhhEEE hEEEhEhEEhhEEE hEhhhEhhEhhEEE hEEEhEhhEhEEEh hhhhhhhhhhhhhh .............. .............. .............. .............. .............. Bonus: ...55555...555 ...5...5...555 5.55...5..5555 5.55...5..5555 5.55.5.5..5555 5.55.5.5...555 55555555555555 5...5.55.5...5 5...5..5.55... 5...5.5..55... 5...5.55.55... 5...5.55.5...5 55555555555555 .............. .............. .............. .............. .............. Level: G Lattices End Bricks: d.d.d.d.d.d.d. .d.d.d.d.d.d.d h.h.h.h.h.hhh. .d.d.d.d.d.d.d d.h.d.h.h.h.d. .d.d.d.h.d.hhd d.h.d.h.h.h.d. .d.d.d.d.d.d.d d.h.d.h.h.hhh. .d.d.d.d.d.d.d hhh.h.dhdhdhd. .d.d.d.d.d.dhd h.d.hhdhd.h.d. .hhd.d.d.d.dhd h.d.h.hhd.h.d. .d.dd.d.dd.dhd hhhdhd.h.hdh.d d.d.d.d.d.d.d. Bonus: f.f.f.f.f.f.f. .f.f.f.f.f.f.f 5.5.5.5.5.555. .~.~.~.~.~.~.~ ..5...5.5.5... .......5...55. >.5.>.5.5.5.>. .............. ..5...5.5.555. .............. 555.5..5.5.5.. ............5. 5...55.5..5... .55.........5. 5...5.55..5... ............5. 555.5..5.5.5.. >.>.>.>.>.>.>. Level: G The End Bricks: vvvvvvvvvvvvvv .............v .@@@.@.@.@@@.v ..@..@.@.@...v v.@..@@@.@@@.v v.@..@.@.@...v v.@..@.@.@@@.v .............. .@@@.@..@.@@@. .@...@@.@..@.@ .@@@.@.@@..@.@ .@...@..@..@.@ .@@@.@..@.@@@. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: 55555555555555 .............5 .............5 .............5 5............5 5............5 5............5 .............. .............. .............. .............. .............. .............. .............. 55555555555555 55555555555555 55555555555555 55555555555555 lbreakout2-2.6.5/client/levels/X0000664000175000017500000001536612140767201013436 00000000000000Version: 1.01 Level: Xposya lines Bricks: i.i.y.*c.h.k.h *.#.!.*#.!.!.# ..#.#..#.h.*.i i.i*#i.#.!.k*# .*#.#i*#.h.!.e x.#.!y.c.i*#.# #.#.#y.#.h.!.# f.f.#**#.i.*.# #.i.#y.#*h.k*e *.#*!i.c.#.!.# i.*.#..#.h.k.e .*#.#i.#.#.!.# x.#.y..c.h*k.e i.i...*i.i.#** *.f.y..i.*.h.i #.*.y*.*.jkde. ....*..c...... .............. Bonus: 1.m.j....s...b .............. .........w.... W..........p.. .........?.... ....f..m.&.... .........?.... *.m........... ..2......m.... .......4...... .............d .....!........ .........b.... +.0........... ..g.l........{ .........}5.?. .............. .............. Level: Xposya entrance Bricks: j!jjjEjjjjjjjj aaaaaaaaaaaaEa dddddddddddddd .E...bbbE.!.E. ..E..bbb...... hhhhb**bhhhhhh aaaabb*baavaaa y!yE..*bb!v.E. yyyy...v...... .......v...... .......v..E... .E..........E. ....EE.vvvgEgg gggg...vv.*i*i iiii....v.zz!z vvvv.......... .....v....v... ...........v.. Bonus: c..b...}.{~p.} .............. ...!..~..>.&wd .............. .............. ps<...l...l.b. ....?......... .............. .&{s.......... .............. .............. .............. .............p .b.w.......&!. }.f~......sw.{ }............. .............. .............. Level: noname X Bricks: Ef............ gbf..........g .gEf........gE ..gbf......gbf ...gEf....gEf. ....gbf..gbf.. .....gEfgEf... ......gEbf.... ......hhhh.... ......hhhh.... ......fbEg.... .....fEgfEg... ....fbg..fbg.. ...fEg....fEg. ..fbg......fbg .fEg........fE fbg..........f Eg............ Bonus: .<............ !.2..........5 .w.W........p. ..5.m......b.! ...b.*....*.W. ....p.?..?.w.. .....}.2l.}... ......d..-.... .......2..-. .....3.1-b.... 1.w.......3... .s.l-0...&c... ...2..g.0.d..+ .5W.p0.b>....? b..m+.3g...... 0<*>.!fd.d.... ..1.......cw.m .<............ .............. .............. .............. .............. Level: Xposya platforms Bricks: .............. cccc...ggg.... @@@@...@@@.zzz cccc...iii.@@@ ...........hhh ..iiii........ ..@@@@........ ..vvvv..zzz... ........@@@... ........eee... ....jjj....... ....@@@....kkk ....fff....@@@ ccc........jjj @@@........... iii........... .............. .............. Bonus: .............. 55.......3.... ............55 .......3...... ...........2.2 ..3..2........ .............. ..2..3........ .............. ........???... ....???....... ...........??? ....???....... ???........??? .............. ???........... .............. .............. Level: Xposya breakout Bricks: ffffffffffffff gggggggggggggg hhhhhhhhhhhhhh iiiiiiiiiiiiii jjjjjjjjjjjjjj kkkkkkkkkkkkkk eeeeeeeeeeeeee dddddddddddddd zzzzzzzzzzzzzz cccccccccccccc kkkkkkkkkkkkkk jjjjjjjjjjjjjj iiiiiiiiiiiiii hhhhhhhhhhhhhh vvvvvvvvvvvvvv gggggggggggggg .............. .............. Bonus: .............? .............. .wf...w?...?.. .........w...? .?..........m. .....p....f... l......?...... ............?. .......?...... ......?....... ..m.......?... ...w.......... .?.....p?..... .....f....m... ..?........... .?...?......?. .............. .............. lbreakout2-2.6.5/client/levels/RichQuick0000664000175000017500000001235212140767201015101 00000000000000Version: 1.00 Level: El Pollo Grande Raining Points Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 5555bbbbbb5555 gggggggggggggg wwwwwwwwwwwwww Level: El Pollo Grande Tougher! (or maybe not) Bricks: hh##########ii hh##########ii ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ############## ff##########gg ff##########gg Bonus: m&5555555555&m &&5555555555&& 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 &&5555555555&& m&5555555555&m Level: El Pollo Grande Bucket o' bucks Bricks: E!!!!!!!!!!*.. E!!!!!!!!!!*.. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. E!!!!!!!!!!!E. EEEEEEEEEEEEE. Bonus: .55555555gg... .55555555gg... .55555555ggg.. .55555555ggg.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .55555555555.. .............. Level: El Pollo Grande Fountain o' Fortune Bricks: .....jjjj..... ....jgjjgj.... ...jggjjggj... ..jggggggggj.. ..jggggggggj.. .jggggggggggj. .gggggggggggg. .gggggggggggg. .gggg.gg.gggg. .ggg..gg..ggg. .gg...gg...gg. .gg...gg....g. .g....gg....g. ...@@.gg.@@... ..EEEEggEEEE.. .EEEEE##EEEEE. ...EEE##EEE... .....E##E..... Bonus: .....5555..... ....555555.... ...55555555... ..5555555555.. ..5555555555.. .555555555555. .555555555555. .555555555555. .5555.55.5555. .555..55..555. .55...55...55. .55...55....5. .5....55....5. ......55...... ......55...... .............. .............. .............. Level: El Pollo Grande Eyes on the ball! Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 ***gggggggg*** ************** Level: El Pollo Grande Fort Knox Bricks: @.**!!!!!!!!!! @.@*!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@!!!!!!!!!!! @.@@@@@@@@@@@@ Bonus: ..55gg55555555 ...5gg55555555 ...ggg55555555 ...ggg55555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 ...55555555555 .............. Level: El Pollo Grande one chance Bricks: E@@@E@@@E@@@Ea E@@@E@@@E@@@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@E@E@E@E@E@ E@E@@@E@@@E@@@ E@E@@@E@@@E@@@ E@EEEEEEEEEEEE E@aaaaaaaaaaaa Bonus: .555.555.555.5 .555.555.555.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.5.5.5.5.5.5 .5.555.555.555 .5.555.555.555 .5............ .5&&&&&&&&&&&m Level: El Pollo Grande Web of Lies Bricks: !vvvvvvvvvvvv! v!vvvvvvvvvv!v vv!vvvvvvvv!vv vvv!vvvvvv!vvv vvvv!vvvv!vvvv vvvvv!vv!vvvvv vvvvvv**vvvvvv vvvvvv**vvvvvv vvvvvv**vvvvvv vvvvvv**vvvvvv vvvvvv**vvvvvv vvvvvv**vvvvvv vvvvv!..!vvvvv vvvv!....!vvvv vvv!......!vvv vv!........!vv v!..........!v !............! Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 555555gg555555 55555g**g55555 55555g**g55555 555555**555555 555555**555555 555555**555555 555555**555555 555555..555555 55555....55555 5555......5555 555........555 55..........55 5............5 Level: El Pollo Grande Cherry Bomb Bricks: ......******.. ....##*###..*. ...#cc*ccc#... ...#cc*ccc#... ..#ccc*cccc#.. ..#ccc*cccc#.. .#cccc*ccccc#. .#cccc**cccc#. .#cccc**cccc#. .#cccc**cccc#. .#cccccccccc#. .#cccccccccc#. .#cccccccccc#. ..#cccccccc#.. ..#cccccccc#.. ...#cccccc#... ...#cccccc#... ....######.... Bonus: ......******.. ......*.....*. ....55*555.... ....55*555.... ...555*5555... ...555*5555... ..5555*55555.. ..5555**5555.. ..5555**5555.. ..5555**5555.. ..5555555555.. ..5555555555.. ..5555555555.. ...55555555... ...55555555... ....555555.... ....555555.... .............. lbreakout2-2.6.5/client/levels/Negundoid0000664000175000017500000002777512140767201015152 00000000000000Version: 1.00 Level: Rado Negundo Stage 01 Bricks: EEEEEEEEEEEEEE .............. .............. ..iiiiiiiiii.. ..gggggggggg.. ..gggggggggg.. ..hhhhhhhhhh.. ..hhhhhhhhhh.. ..ffffffffff.. ..ffffffffff.. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. ..333..3.33... ...2.3..3..... .............. .....3+.-2.... ....1......... ..2...0+.0.... ..++.......... .............. .............. .............. .............. .............. .............. .............. .............. Level: Rado Negundo Stage 02 Bricks: .............. .............. ..e...e...e... .e.e.e.e.e.e.e e...e...e...e. ..i...i...i... .i.i.i.i.i.i.i i...i...i...i. ..g...g...g... .g.g.g.g.g.g.g g...g...g...g. ..h...h...h... .h.h.h.h.h.h.h h...h...h...h. .............. .............. .............. .............. Bonus: .............. .............. ..2...w...-... .2.w...0.0.... 2...3...w...3. ..W...+....... ...0.......... ....+...3..... .............. ...w.0.....-.. W.......1...-. ..0...w....... .......+...... 2...1...1..... .............. .............. .............. .............. Level: Rado Negundo Stage 03 Bricks: cccccccccccccc cccccccccccccc .............. gggggggggggggg gggggggggggggg .............. iiiiiiiiiiiiii iiiiiiiiiiiiii .............. dddddddddddddd dddddddddddddd .............. eeeeeeeeeeeeee eeeeeeeeeeeeee .............. hhhhhhhhhhhhhh hhhhhhhhhhhhhh .............. Bonus: s5?.......5.?. s...5<<.<....s .............. ....4......4.. 4.....?.4..... .............. ..3.s..3333.3. 3..?.3<....... .............. 222.2..2.s22.. 2..2.2...2..2. .............. ....1.1.1.1... 1.1.11..1..... .............. 00...0.0...... ...0.....0.0.. .............. Level: Rado Negundo Stage 04 Bricks: vvvvvvvvvvvvvv .............. .............. ccccEccccEcccc ggggEbbbbEgggg ggggEbbbbEgggg ggggEbbbbEgggg ggggEbbbbEgggg ggggEbbbbEgggg ggggEbbbbEgggg ggggEbbbbEgggg ggggEbbbbEgggg ggggEbbbbEgggg ccccEccccEcccc .............. .............. .............. .............. Bonus: 33333333333333 .............. .............. ..0...?0...... 0..........*10 .2.s.2?s..?... p.w...1.0..1.. .....W.p..w.20 .1p..>w....ps. 001....1...... .0.....10..0.0 .0.w.......1.. ..2?..1......p .............. .............. .............. .............. .............. Level: Rado Negundo Stage 05 Bricks: @@@@@@@@@@@@@@ .............. .!!!!!!!!!!!!. .!!!!!!!!!!!!. .............. ffffffffffffff zffffffffffffz *@@vvvvvvvv@@* dddddddddddddd dccccccccccccd dddddddddddddd dddddddddddddd @@@@vvvvvv@@@@ .............. .............. .............. .............. .............. Bonus: .............. .............. .3w20<0<-4w-5. .wccc5550-225. .............. ..23.+.-....2. 0W<f..2 +p..W.--....22 ..+++.0..+.+.0 w.+..--.2..0.. .0w3-2{..w.+..0... Level: Mike Quinn Trap Bricks: .............. .#####..#####. .kkkkkvvkkkkk. .#####..#####. .jjjjz..zjjjj. .#####..#####. .iiiiivviiiii. .#####..#####. .eeeec..ceeee. .@@@@@..@@@@@. .dddddvvddddd. .#####..#####. .hhhhz..zhhhh. .EEEEE..EEEEE. .gggggvvggggg. .#####..#####. .ffffz..zffff. .#####..#####. Bonus: .............. .............. ...5..11..5... .............. ...4.+..w.4... .............. ...3..>-..3... .............. ...2.b..W.2... .............. ...2........c...>. ..+...>....-.. d..>.+..>.s.~. ......w....... -.~.w<.c...f.> .............. .............. .2.2.....2.2.. .............. .g.?.....+.?.. ..w.......l... ..4.......4... 1...?......... ..p......<.s.. ........w..... .............. .............. .............. Level: Mike Quinn Tight Squeeze Bricks: .............. .@.@.@.@.@.@.@ .@c@.@c@.@c@.c .@@@.@@@.@@@.@ .............. .@.@.@.@.@.@.@ .@c@.@c@.@c@.c .@@@.@@@.@@@.@ .............. .@@@.@@@.@@@.@ .@c...c@.@c@.b .@@@.@@@.@.@.@ .............. .@@@.@@@.@.@.@ ..c@.@c..@c@.z .@@@.@@@.@@@.@ .............. .............. Bonus: .............. .............. ......s......2 .............. .............. .............. ..........w... .............. .............. .............. ..l........... ......-....... .............. .............. ..g.......+..3 .............. .............. .............. Level: Mike Quinn Checker Bricks: .c.c.c.c.c.c.c .E.E.E.E.E.E.E c.c.c.c.c.c.c. E.E.E.E.E.E.E. .c.c.c.c.c.c.c .E.E.E.E.E.E.E c.c.c.c.c.c.c. E.E.E.E.E.E.E. .z.c.z.c.z.c.z .E.E.E.E.E.E.E z.z.z.z.z.z.z. E.E.E.E.E.E.E. .z.z.z.z.z.z.z .E.E.E.E.E.E.E z.z.z.z.z.z.z. E.E.E.E.E.E.E. .z.z.z.z.z.z.z .E.E.E.E.E.E.E Bonus: ...p.b.....+.s .............. &.....-.b..... .............. .?.b.f...d.>.+ .............. ..w...j....... .............. .3...2...3.-.2 .............. ..+...p...+.b. .............. .*...W...<...l .............. ..>...+.b.s... .............. .+.b.-...?...w .............. Level: Mike Quinn Crevices Bricks: .............. @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz @zEzEzEzEzEzEz .............. .............. Bonus: .............. .............. .3.<.l.g.l.b.3 .............. .<.d.W.c.>.w.l .............. .?.>.*.2.<.b.1 .............. .0.-.j.>.b.s.? .............. .p.+.+.b.c.d.+ .............. .s.~.&.w.?.&.- .............. .{.w.f.s.}.<.? .............. .............. .............. Level: Mike Quinn Pit Bricks: v.v.v.v.v.v.v. .............. .v.v.v.v.v.v.v ..@@@@..@@@@.. v.@zzzzzzzz@v. ..@zzzzzzzz@.. .v@zzzzzzzz@.v ..@zzzzzzzz@.. v.@zzzzzzzz@v. ..@zzzzzzzz@.. .v@zzzzzzzz@.v ..@zzzzzzzz@.. v.@zzzzzzzz@v. ..@zzzzzzzz@.. .v@zzzzzzzz@.v ..@zzzzzzzz@.. v.@zzzzzzzz@v. ..@@@@@@@@@@.. Bonus: d.....b.....+. .............. ...2.....c.... .............. p...b.<.&.s.~. .............. ....f.?.j.1... .............. ?...d.>.+.l.?. .............. ....f.3.?.b..w .............. >...s.+.-.{.+. .............. ....&.W.g.c... .............. w...l.b.?.w.-. .............. Level: Mike Quinn GreenAgain Bricks: ..@@@@@@@@@@.. .@@zzzzzzzz@@. .@zzzzzzzzzz@. .@zzzzzzzzzz@. .@zzzzzzzzzz@. @@zzzzzzzzzz@@ @zzz@@@@@@zzz@ @zzzzzzzzzzzz@ @zzzzzzzzzzzz@ @zzzzzzzzzzzz@ @@@@@@zz@@@@@@ @zzzzzzzzzzzz@ @zzzzzzzzzzzz@ @zzzzzzzzzzzz@ @zzz@@@@@@zzz@ @zzzzzzzzzzzz@ @zzzzzzzzzzzz@ @zzzzzzzzzzzz@ Bonus: .............. ......2....... ....fl..-<.2.. ...w.>.b...... ...?-.W.+.s... .........>.... ...+.......0.. ..<..+.w.f.<.. .0.>....W.s.+. ....<.<....... .............. ......f>....>. ...b-s.<.b..s. .-.......>b.. ....b..-....f. .0-..f+.sw.>.. ...s..<....... Level: Mike Quinn BeatThis Bricks: .zccccccccccz. .@@@@@@@@@@@@. .zzcczzzzcczz. .@@@@@zz@@@@@. .zzzcc@@cczzz. .@@@@zzzz@@@@. .zzzz@zz@zzzz. .@@@cc@@cc@@@. .zzz@zzzz@zzz. .@@zz@zz@zz@@. .zz@cc@@cc@zz. .@zz@zzzz@zz@. ..@zz@zz@zz@.. ...@cc@@cc@... ....@zzzz@.... .....@@@@..... .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Heroes0000664000175000017500000002122612140767201014444 00000000000000Version: 0.90 Level: Eric Jacobson Up Up And Away Bricks: ggggddddddgggg gggddddddddggg ggddddddddddgg gddddhhhhddddg dhddhhhhhdddhd dhddhhhhhdddhd dhddhhhhhhhhhd dhdddhhhhhhhhd dhhdddddddhhhd dhhhdddddddhhd dhhhhddddddhhd dhhhhhhhhddhhd gdhhddhhdddhdg ggdhhddddhhdgg gggddddddddggg gggggggggggggg vvvvvvvvvvvvvv .............. Bonus: 55lj.5555j.m55 55b.444444.b55 cf.33333333..c ..333j...333.. ..22....f222.. f>22..ll.222>f ..22.wggw..... f!111....>b.!p W-~1111111..j. .{..1111111... ..*..000000.b.00..000..> ..-..0000..-.. .~.>..dd..>.~. .............. +.w..b..b..w.+ .............. Level: Eric Jacobson Signal In The Sky Bricks: haahhahhahhaah hahhhahhahhhah aahahaaaahahaa aaaahaaaahaaaa aaaahaaaahaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaahaaaahaaaa aaaahaaaahaaaa aahahhaahhahaa hahhhhaahhhhah haahhhhhhhhaah hhhhhhhhhhhhhh vbvbvbvbvbvbvb bvbvbvbvbvbvbv .............. .............. Bonus: j55W?5jj5?W55j W5f?-5W~5-?f5W 44?4-4444-4?44 4444f4444f4444 4444W4444W4444 3j3333332222j2 3j3333222222j2 3j3332222222j2 1111f1111f1111 1111{1111~1111 00~0-~00{-0f00 c0{?f{00~?{c0c W00W~W?cWf?00f {?fc{?f?{c~W{d .>.-.>.-.>.-.> w.b.w.b.w.b.w. .............. .............. Level: Eric Jacobson Lantern's Light Bricks: jjxxxxxxxxxxjj jjxxxxxxxxxxjj jjvvxxxxxxvvjj jvvxxxxxxxxvvj jvxxxvvvvxxxvj jvxxvvvvvvxxvj jvxxvvvvvvxxvj jvxxvvvvvvxxvj jvxxvvvvvvxxvj jvxxvvvvvvxxvj jvxxxvvvvxxxvj jvvxxxxxxxxvvj jjvvxxxxxxvvjj jjxxxxxxxxxxjj jjxxxxxxxxxxjj jjjjjjjjjjjjjj vvvvvvvvvvvvvv .............. Bonus: 5.0l455554l0.5 ..0044444400.. .f.p000000p.f. ...00s**s00... ..00-1111-00.. b.0-113311-0.b .W0b134431b0W. .p0b145541b0p. >.0b134431b0.> ..0+113311+0.. ..00+1111+00.. ...00{~f>00... g..W000000W..s ..0p000000p0.. .f000>f00000f. .............. wwb-+-bb+-+bww .............. Level: Eric Jacobson Sonic Boom Bricks: dddddddhhhhhhe dddddddhhhhhhe ddddddhhhhhhed dddddhhhhhhedd ddddhhhhhheddd ddddhhhhhedddd dddhhhhheddddd ddhhhhhhhhhhed ddhhhhhhhhhedd ddeeeeehhheddd ddddddhhhedddd dddddhhheddddd ddddhhhedddddd ddddhheddddddd dddhhedddddddd ddhheddddddddd dhhedddddddddd vvvvvvvvvvvvvv Bonus: b......555555> ......j444444> ......444444>. ..b..333333>.b ....333333>... ....22222>.b.. ...22222j..... ..1111111111f. ..111111111f.. ..ffffj000f... ......000f...b b....000f..... ....>>>j...... ....>>f.b..b.. ...>>f........ ..>>f......... .>>f.......... wbwbwbwbwbwbwb Level: Eric Jacobson Hoping For A Sequel... Bricks: @@@@eehheee@@@ @@@eehjjh.ee@@ @@eeehjjhv.ee@ @eeeehjjh.vee@ @eee.vhh.v.vee eee.v.v.v.v.ee eeev.v.hhv.vee eev.v.hhh.v.ee ee.v.hhhhv.vee eev.vhhhh.v.ee ee.v.hhhhv.vee eev.vhhhh.v.ee ee.v.hhhhv.eee eev.vhhhheeee@ @eev.hhhheeee@ @ee.vhhhheee@@ @@eeehhhhee@@@ .............. Bonus: .....m44l..... .....4554..... .....4554<.... .....4554.~... .....*44.b.w.. ....+.d.-.{... ...W.W.44>.c.. ..~.<.444.g... ...p.3333j.f.. ..s.b3333.*... ...j.2222p.s.. ..}.c2222.d... ...g.1111+.... ..w.f1111..... ...>.0000..... ....-0000..... .....0000..... .............. Level: Eric Jacobson Web Of Doom Bricks: vvddddvvddddvv vvddvvddvvddvv ddvvddddddvvdd ddvvddvvddvvdd dvddvvddvvddvd vdddvvddvvdddv vddvddvvddvddv vddvddvvddvddv vdddvvddvvdddv dvddvvddvvddvd ddvvddvvddvvdd ddvvddddddvvdd vvddvvddvvddvv vvddddvvddddvv ddvddddddddvdd dddvddddddvddd ddddvvvvvvdddd .............. Bonus: l5....45....5l 40..44..44..04 ..04......40.. ..30..33..03.. .3..03..30..3. 3...30..03...3 2..2..55..2..2 2..2..55..2..2 2...20..02...2 .1..01..10..1. ..10..11..01.. ..01......10.. 10..11..11..01 00....00....00 ..0........0.. ...0......0... ....wbwbwb.... .............. Level: Eric Jacobson Eddie's Clubhouse Bricks: ggg.cgg..cg..g gg.cggvvggc.gg g.ccg..gg.ccg. vccc..gg..cccv .cjjcggvvcjjcg gcjjcg..gcjjcg gcjjjc.gcjjjc. vcjjjccccjjjcv .cjjjccccjjjcg gcjjjcvvcjjjcg gcjjjc.gcjjjcv .cjjjcggcjjjc. vcjjcggvvcjjcg ggcjcg..gcjcgg g.ccg..gg.ccg. vvgcvvggvvcgvv .gg..gg..gg..g .............. Bonus: 111.511..51..1 11.51133115.11 1...1..11...1. 3..?..11..?..3 .?...1133...?1 1.?.?1..1?.?.1 1......1...... 3.?.?.??.?.?.3 .?...gppg...?1 1.?bj?33?jb?.1 1..f>..1.>~..3 .?.?.?11?.?.?. 3....1133....1 11-.?1..1?.+11 1.?+1..11.-?1. 33bw331133wb33 .11..11..11..1 .............. Level: Eric Jacobson Coast To Coast Bricks: dddddvvvvddddd dddd.vvvv.dddd dddd..vv..dddd ddd........ddd ddd.cccccc.ddd ddd..c..c..ddd ddd........ddd ddd........ddd ddd........ddd ddd........ddd dd..........dd h............h .h..........h. ..h........h.. ...hvvvvvvh... v.v.hvvvvh.v.v .v.v.hvvh.v.v. v.v.v.hh.v.v.v Bonus: l..b.4554.b..l .....4554..... ..f...44...f.. .............. .p..3p33p3..p. f....3..3....f .............. b.f........f.b .............. .p..........p. .............. -............- .............. .............. ...-..pp..-... .............. .............. ..w.b.pl.b.w.. Level: Eric Jacobson The Cap'n Bricks: gggggggddddddd ggcccggddddddd gccgccgjjjjjjj gcgggcgjjjjjjj gcEEEcg@@@@@@@ gcccccgddddddd gcgggcgjjjjjjj gcgggcgjjjjjjj gggggggddddddd @@@@@@@ddddddd jjjjjjjjjjjjjj jjjjjjjjjjjjjj dddddddddddddd ddddddd@@@@@@@ jjjjjjjjjjjjjj jjjjjjjjjjjjjj dddddddddddddd @@@@@@@ddddddd Bonus: 5222222jw...?5 5244422..>bc.5 5442442.sg?..5 542m242f...W.5 54...42....... 5444442.b.*.w5 5422242..~...5 5422242.c.d..5 5222222.w.>b.5 .......!.sg.j5 5j..W........5 5..~.?..W..?.5 5...*..b.....5 5.w.c......... 5.?..d..~.W.cf 5W..s.>...g... 5........w.b?. .............. Level: Eric Jacobson Wonder Boy Bricks: EEEE@@@@@@EEEE EEE@dddddd@EEE hhhhhhhhhhh@EE hhhhhhhhhhhh@E @dddhhhddddhh@ @dddhhddddddh@ @ddhhddddddhh@ @ddhhdddddhhd@ @dhhhddddhhdd@ @dhhdddhhhddd@ @hhhddhhhdddd@ @hhdddhhddddd@ hhhdddhhhdddd@ hhdddddhhhddd@ hhddddddhhhd@E hh@ddddddhhhEE EEE@ddddddhhhE EEEE@dddd@EhhE Bonus: 55555555555555 5555?+bws?5555 44222222222555 42222222222255 5?.+222..?.225 5.b.22.?.-.?25 5ws22?.m.?.225 5.j22..m..22?5 5?222...?22..5 5.22.?.222...5 5222..222..?w5 522?..22..-b.5 222.+.222s.j.5 22..-.?222.+?5 42.s....222.55 445.?.gp?22255 5555..j..?2225 55555.wb.55225 Level: Eric Jacobson Green Men Bricks: ghhg.y.y.yghhg hhhhy.y.y.hhhh dhhd.y.y.yghhd gdddd.y.yddddg ggdddd.yddddgg g.yddddddddy.g .y.yddddddy.y. y.y.yddddy.y.y .y.yddddddy.y. y.yddddddddy.y .yddddy.ddddy. yddddy.y.ddddy ddddy.y.y.dddd dddy.y.y.y.ddd ddy.y.y.y.y.dd dddddhhhhddddd dddddhhhhddddd dddddhhhhddddd Bonus: 5....5.5.5...l .s.j5.5.5.j.s. ...f.4.4.4W+.. ......4.4..... ...wg..4.gw... ..3.?.jj.?.3.. .3.3..??..3.3. 3.3.3.+f.3.3.3 .2.2.?-.?.2.2. 2.2.p....p.2.2 .2.?c?1.?-?.2. 2s...1.1....s2 ..g.1.1.1..g.. +>.0.0.0.0..>+ ..0.0.0.0.0... Ww..b.+..b..wf ..?~..??..c?.. ?...?....?...? Level: Eric Jacobson Titans, Go! Bricks: ........hhhh.. aaaaaaahvvvvh. ccbccbchvvvvh. aaaaaaahhvvhh. EEEEEEEhhvvhh. ..aaa...hvvhe. ..EEE....hheee ..cbc....eaeee ..aaa.....aebe ..EEE.....Ecbe ..bcb.....acbe ..aaa....bacbe ..EEE....bacbE ..cbc....bEcba ggaaaggggbacba gxEEExxggxxxxx gxxxxxxxgggggg xxxxxxxxxggggg Bonus: ........?m.... 554422b.3553.. 5544220.3333.. l54422w>.11.?. ........?11... .........11.>. .........?.?.. ..?4?........s .............? ...........?-. ..-4+......... ...........g.. .........?..b. ..?4?......?.. p.....?.s?...? .?....w....... ?.?.b...-..~.. ..w.?.g..?...> Level: Eric Jacobson Transform! Bricks: vvvvddddddvvvv ddvdddvvdddvdd ddvvdvvvvdvvdd dvdvvdvvdvvdvd ddvdvvddvvdvdd dvddvvvvvvddvd vdvdvdvvdvdvdv vvddvvddvvddvv dvvvvvddvvvvvd dvvvdvddvdvvvd ddvddvddvddvdd ddvddvddvddvdd ddvddvddvddvdd ddvddvvvvddvdd vdvddddddddvdv vvvddvvvvddvvv vvvdvvddvvdvvv vvvvvddddvvvvv Bonus: ....555555.... 33.555..555.33 33..5....5..33 3.3..3..3..3.3 33.3..33..3.33 2.22......22.2 .2.2.2..2.2.2. ..22..22..22.. w.....??.....w ?...?.bb.?...? .?.?b.??.b?.?. ?..>?.ww.?>..? .?.?..??..?.?. ?...?....?...? .?.?.?..?.?.?. ....?....?.... ...?..bb..?... .....>ww>..... Level: Eric Jacobson Gen-X Bricks: @@@bbbbbbbbEEE @@bbhhhhhhbbEE @bbhhhhhhhhbbE bbcchhhhhhccbb bbccchhhhcccbb bggccchhcccggb bgggccccccgggb bggggccccggggb bgggggccgggggb bggggccccggggb bgggccccccgggb bggccchhcccggb bbccchhhhcccbb bbcchhhhhhccbb bbbhhhhhhhhbbb Ebbhhhhhhhhbb@ EEbbhhhhhhbb@@ EEEbbbbbbbb@@@ Bonus: ...11111111... ..11..f.?.11.. .11?.?.b...11. 1133.....?3311 11333.?..33311 1..333..333..1 1??.333333f?.1 1...p3333*..?1 1?b?..55...b.1 0....2222?..?0 0.?.222222...0 0..222..222?.0 00222..?.22200 0022..m...2200 000f?.-b.?.000 .00...wd...00. ..00>.W?.>00.. ...00000000... Level: Eric Jacobson Real Heroes Bricks: fffffff!.!.!.! ffxxxff.!j!.!. fxfffxf!j!j!.! fxfffxf.jjj.!. fxfffxf!j!jjj! fxxxxxf.!.!j!. fxfffxf!.!.jj! fxfffxf.!.!j!. fffffff!.!.!.! gggggggddddddd gcgggcgddhdhdd gccggcgdhdhdhd gcgcgcgdhdhdhd gcggccgdhdhdhd gcgggcgdhdddhd gcgggcgdhdddhd gcgggcgdhdddhd gggggggddddddd Bonus: .............. ..555....5j... .5.j.5..5.5... .5...5..555... .5...5..5.555. .55555....j5.. .5.j.5.....55. .5...5.....5.. ......mm...... .w.b.w...wbw.. *5...5...5.5.* .55..5..5.5.5. .5.5.5..5.5.5. .5.j55..5.5.5. .5.b.5..5.b.5. *5...5..5.j.5* .5...5..5...5. .w.b.w..w.b.w. lbreakout2-2.6.5/client/levels/Bombs0000664000175000017500000003460712140767201014270 00000000000000Level: noname flamable Bricks: ************** ******d******* ******d******* ******d******* ******dfffffff ******dfffffff ******dfffffff *****vdfffffff *****v*fffffff *****v*v@@@@@@ *****v*v****** *****v*v*zzzzz *****v*v*z**** *****v*v*z**** *****v*v*z**** !!!!!!!v*z**** *******v*z**** ............... Bonus: ............... ............... ............... ............... ............... ........W...... ........W.{.... ........W.{.... ............... ............... ............... .......*.....m. ............... ............... ............... &............. ...}..5W....... ............... Level: Bricks: *vv*******..v* **v*******..v* ***v******..v* ***vv*****..v* EEE*vv****..v* ...E*vvv***..v* ...E**vvv**..v* ...Ev*vvv**..v* ...Ev*v**v*..v* @@Ev*v*vvv*vv* v@vv**vvvv*vv* v@vvi*vvvv*vv* v@vvvivvvvvvv* v@viiivvvvvvv* v@ivvvvvvvvvv* v@ii@v@vvv@vv* vhiiivvvvvv*** @h@vv@jj@***@* Bonus: ..**........... ...*........... ....*.......... ....**......... .....**........ ......**....... .......**...... ........*...... .........*..... .........**.... ..........*.... ..........*.... ...........*... ...........*... ...........*... ............... ..m.**......... ..m.mm.mm...... Level: july 4 Bricks: ************** *vvvvvvvvvvvv* *v**********v* *v*vvvvvvvv*v* *v*v******v*v* *v*v*vvvv*v*v* *v*v*v**v*v*v* *v*v*v**v*v*v* *v*v*v**v*v*v* *v*v*v**v*v*v* *v*v*v**v*v*v* *v*v*v**v*v*v* *v*v*vvvv*v*v* *v*v******v*v* *v*vvvvvvvv*v* *v**********v* *vvvvvvvvvvvv* ************** Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: checkers Bricks: ggccgg**ggccgg ccggcc**ccggcc ************** *cfcfcfcfcfcf* *fcfcfcfcfcfc* *cfcfcfcfcfcf* ************** kckckc**kckckc ckckck**ckckck ************** *!c!c!c!c!c!c* *c!c!c!c!c!c!* *!c!c!c!c!c!c* ************** kckckc**kckckc ckckck**ckckck ************** ............... Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... .......mm...... ............... Level: brick Bricks: .....*bbbb*.... ...***aaaa***.. !.*zzzzzzzz*.! ...*yyyyyyyy*.. ...*xxxxxxxx*.. ***cccccccc*** *bbbbbbbbbbbb* *aaaaaaaaaaaa* *zzzzzzzzzzzz* ***yyyyyyyy*** ...*xxxxxxxx*.. ...*cccccccc*.. !.*bbbbbbbb*.! ...***aaaa***.. .....*zzzz*.... .....*yyyy*.... .....*xxxx*.... .....******.... Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ..........mm... ..........m.... ..........m.... ..........m.... ......**mmm.... Level: snow storm Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj ..j.jjj..jjjj.. .......j......j j.j.....j..j.. ......j.......j ..j.j...j..j... ..............j ..j.j.j..j..... ...........j.j. ..j.j.j.j...... ...........j..j ...j..j..j..... ............... ............... Bonus: ............... ............... ...W....*...... ...WW...*...... ....W...*...... .....W......... ............... ............... ......*........ ............... ............... ......*........ ............... ....W...*...... ............... ...W..W..*..... ............... ............... Level: the x Bricks: vv*vvv**vvv*vv v*c*vv**vv*c*v *zcb*v**v*bcz* k*cba****abc*k kk*bac**cab*kk kkk*ac**ca*kkk kkkk*c**c*kkkk kkkkk****kkkkk ************** ************** kkkkk****kkkkk kkkk*c**c*kkkk kkk*bc**cb*kkk kk*abc**cba*kk k*cab****bac*k *zca*v**v*acz* v*c*vv**vv*c*v vv*vvv**vvv*vv Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ........5...... ............... ............... ............... ....5.......... .......}....... ..5.*...j...... .......W....... Level: Bricks: vvvvvvvvvvvvvv ............... ............... *vvvvvvvvvvvv* v*..........*v v.*........*.v v..*vvvvvv*..v v..v*.**.*v..v v..v.*vv*.v..v v**v.v**v.v**v v**v.v**v.v**v v**v.v**v.v**v v..v.*vv*.v..v v..v*.**.*v..v v..*..**..*..v v.*vvvvvvvv*.v v*..........*v *vvvvvvvvvvvv* Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: v.....vv.....v vv....vv....vv ..vv...vv...vv. ...vv..vv..vv.. ....vv.vv.vv... .....vvvvvv.... ......vvvv..... .....vv..vv.... ....vv....vv... ...vv......vv.. ..vv........vv. vv..........vv vvv........vvv ...vv......vv.. ....vv....vv... ...vvvv..vvvv.. ..vv**vvvv**vv. vv****vv****vv Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... .........m..... Level: Bricks: #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #c**c#cc#c**c# #cccc#cc#cccc# #cccc#cc#cccc# #c**c#**#c**c# #c**c#**#c**c# ************** Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... .....W.....m... Level: Bricks: ........******* *******cccccc* *ccccccc****c* *c*******cc*c* *c*cccccccc*c* *c*c******c*c* *c*c*cccc*c*c* *c*c*c**c*c*c* *c*c*c**c*c*c* *c*c*c**c*c*c* *c*c*c**c*c*c* *c*c*cccc*c*c* *c*c******c*c* *c*cccccccc*c* *c*******cc*c* *ccccccc****c* *******cccccc* ........******* Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: ...*...*v*...*v ....*.*vvv*.*vv ...*.*vvvvv*vvv ..*...*vvv*.*vv *.....*v*...*v ..*.....*.....* ...*...*v*...*v ....*.*vvv*.*vv ...*.*vvvvv*vvv ..*...*vvv*.*vv *.....*v*...*v ..*.....*.....* ...*...*v*...*v ....*.*vvv*.*vv .....*vvvvv*vvv ....*.*vvv*.*vv *.*...*v*...*v ..*.....*.....* Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ........j...... ............... ............... ............... ..............} .....W..c...... ............... &............. ........c...... Level: Bricks: ############## **z*******z**# *######z###### **z*********** #############* **z*******z*** *############# **z*******z*** #############* **z*********** *############# **z*********** #############* **********z*** *############# **z****z****** #############* ************** Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............m.. Level: Bricks: ........*...... ........*...... vvvvvvv*vvvvvv v......*.....v v.....***....v v....*****...v v...*******..v v..*********.v vc***********c vc***********c v..*********.v v...*******..v vvvvv*****vvvv .......***..... ........*...... fffffff*ffffff *g*gggg*ggg*g* ************** Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* z#z#z#zz#z#z#z *#*#*#**#*#*#* *#*#*#**#*#*#* *#*#*#**#*#*#* ************** Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: ************** ***.**......** ***....vv..**. *****.....***. **vv********.. *vvvv******.vv *vvv*****..vvv **vv*..**..vvv **v*....***.vv **v*.vvv..**.. ****.vvv...*** *v*.vvvv...**v **.vv....**.*v **vv...**...*v *.v..**.....*v *..**.*.....*v ***...*******v *.....*vvvvvvv Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: ************** *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* ************** ************** *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* *yiiyz**zyiiy* ************** Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ...**......**.. ............... Level: Bricks: *............* ..v..........v. ..*v........v*. ...*v......v*.. ....*v....v*... .....*v..v*.... ......*vv*..... .......vv...... .......**...... .......**...... .......vv...... ......*vv*..... .....*v..v*.... ....*v....v*... ...*v......v*.. ..*v........v*. ..v..........v. *............* Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: vvvvvz**zvvvvv *****z**z***** vvvvvz**zvvvvv *****z**z***** vvvvvz**zvvvvv *****z**z***** vvvvvz**zvvvvv *****z**z***** zzzzzz**zzzzzz ************** zzzzzz**zzzzzz ************** .......**...... .......**...... .......**...... .......**...... .......**...... .......**...... Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: ************** ************** ************** ************** ************** ************** ************** *****cccc***** *****cccc***** *****cccc***** *****cccc***** *****cccc***** *****cccc***** *****cccc***** *****cccc***** *****cccc***** *****cccc***** *****cccc***** Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: !.....cc.....! !.....cc.....! !.....cc.....! !.....cc.....! ..!....cc....!. ...!...cc...!.. ....!..cc..!... .....!.cc.!.... ......*cc*..... cccccccccccccc ......*cc*..... .....!.cc.!.... ....!..cc..!... ...!...cc...!.. ..!....cc....!. !.....cc.....! !.....cc.....! !.....cc.....! Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: !.!........!.! ..!..........!. !............! ..!..........!. ...!........!.. ....!......!... .....!....!.... ......!..!..... .......!!...... .......!!...... ......!..!..... .....!....!.... ....!......!... ...!........!.. ..!..........!. !............! ..!..........!. !.!........!.! Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... .......*....... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: ************** cbbbbbbbbbbbbc ca.**.kk.**.ac cavvvvkkvvvvac ca.**.kk.**.ac cavvvvkkvvvvac ca.**.kk.**.ac cavvvvkkvvvvac ca.**.kk.**.ac cavvvvkkvvvvac ca.**.kk.**.ac cavvvvkkvvvvac ca.**.kk.**.ac cavvvvkkvvvvac ca.**.kk.**.ac cavvvvkkvvvvac cbbbbbbbbbbbbc ************** Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: v.v.v.v.v.v.v. ..............v v............. ..............v v............. .....#.#####..v v...#gg***#... .....#ggzzz#..v v...#gg***#... .....#zzzzz#..v v...#*****#... .....#zzzzz#..v v...#*****#... .....#######..v v............. ..............v v............. ..v.v.v.v.v.v.v Bonus: ............... ............... ............... ............... ............... ............... ......m........ ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... ............... Level: Bricks: !.!...cc...!.! ..!....cc....!. !.....cc.....! ..!....cc....!. ...!...cc...!.. ....!..cc..!... .....!.cc.!.... ......!cc!..... cccccccccccccc ************** ......!**!..... .....!.**.!.... ....!..**..!... ...!...**...!.. ..!....**....!. !.....**.....! ..!....**....!. !.!...**...!.! Bonus: ............... ............... ............... ............... ............... ............... ............... ............... ............... 55555555555555 .......55...... .......55...... .......55...... .......55...... .......55...... .......55...... .......55...... .......55...... lbreakout2-2.6.5/client/levels/AllNighter0000664000175000017500000047171412140767201015263 00000000000000Version: 1.01 Level: G One Brick Bricks: .............. .............. .............. ..v........... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G 72 Nova Bricks: ggggggggggghgg gggggggggghhhg ggggggggghhhhh gggggggggghhhg ggggggggggghgg gggggggggggggg gggggjjjgggggg ggggjvvvjggggg gjjjjvvvvjjjgg gjajjjjjjjajjg gaaajjjjjaaajg ggagggggggaggg bbbbbbbbbbbbbb .............. .............. .............. .............. .............. Bonus: .5.*....b..... ..>..b.5.....> ....0...b..+.. ....b.>....5.. 0......0...... .>..5.w.....5. ........5+.... ..5........0.* ......0....... .............. ..>.+.....>... ...0..5....... ...+.......... .............. .............. .............. .............. .............. Level: G Pattern II Bricks: .............. .............. ......!!...... ....!....!.... ..!...!!...!.. ...!!.!!.!!... ...!......!.!. .....!..!..... !.!!..!!..!!.! !.!!..!!..!!.! .....!..!..... ...!......!.!. ...!!.!!.!!... ..!...!!...!.. ....!....!.... ......!!...... .............. .............. Bonus: .............. .....2222..... ...222..222... .222.2222.222. .2.222..222.2. .22..3..3..222 ..2.333333.2.2 22233.55.33222 .2..35..53..2. .2..35..53..2. 22233.55.33222 ..2.333333.2.2 .22..3..3..222 .2.222..222.2. .222.2222.222. ...222..222... .....2222..... .............. Level: Nethippy Boom! Bang! Pow! Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 bbbbbbbbbbbbbb wwwwwwwwwwwwww }}}}}}}}}}}}}} 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 w555555555555w ww5555555555ww }}}}}}}}}}}}}} >>>>>>>>>>>>>> dddddddddddddd {{{{{{{{{{{{{{ Level: Nethippy Don't Drop The Ball! Bricks: jjj#********** ***#*########* *#*#*#******#* *#*#*#*####*#* *#*#*#*#**#*#* *#*#*#*#*##*#* *#*#*#*#**#*#* *#*#*#*##*#*#* *#*#*#*#**#*#* *#*#*#*#*##*#* *#*#*#*#**#*#* *#*#*#*##*#*#* *#*#*#*#**#*#* *#*#*#*#*##*#* *#*#*#*#****#* *#***#*######* *#***#******** *############# Bonus: lll.j555j5555j 555.5........5 5.5.5........5 5.5.5........5 5.5.5........5 5.5.5........5 j.5.5........5 5.5.5........j 5.j.j.j......5 5.5.5.5......5 5.5.5.5......5 5.5.5.5......5 5.5.5.5......5 5.5.5.5......5 }.5.5.5......5 }.555.5......5 }.55j.j555j555 >............. Level: G Bug Bricks: .............. .............. .#..........#. #.#.######.#.# ...##****##... .#.#******#.#. #.##*#..#*##.# ...#*.!!.*#... .#.#*.!!.*#.#. #.##*#..#*##.# ...#******#... ...##****##... ....#.##.#.... ....#....#.... ....##..##.... .............. .............. .............. Bonus: .............. .............. .............. .............. .....5555..... ....555555.... ....5.mm.5.... ....5l..l5.... ....5l..l5.... ....5.mm.5.... ....555555.... .....5555..... .............. .............. .............. .............. .............. .............. Level: Nethippy Se7en Bricks: @@@@@@@@@@@@@. jjdddddddddj@. jjdddddddddj@. jjdddddddddj@. jjjjjjjjdddj@. jjjjjjjjddjj@. jjjjjjjdddjj@. jjjjjjjddjjj@. jjjjjjdddjjj@. jjjjjjddjjjj@. jjjjjdddjjjj@. jjjjdddjjjjj@. jjjddddjjjjj@. jjjdddjjjjjj@. jjjddjjjjjjj@. jjjdjjjjjjjj@. .............. .............. Bonus: .............. ll555555555l.. g.555555555g.. ..555555555w.. .....bbb555... .....bbb55.w.. ......b555.... .......55..w.. ......555..... ......55...w.. .....555...... ....555....w.. ...5555....... ...555.....w.. g.}55}.....g.. ><>5><><><>w.. .............. .............. Level: G Puzzle II Bricks: !............! .@..........@. .....####..... ....#!zz!#.... ....#z@@z#.... ###.#z@@z#.### #c#.#z@@z#.#c# #c#.#!zz!#.#c# ###..####..### #c#.#!zz!#.#c# #c#.#z@@z#.#c# ###.#z@@z#.### ....#z@@z#.... ....#!zz!#.... .....####..... .............. .............. .............. Bonus: m............m .............. .............. .............. ......55...... 555...55...555 5m5...55...5.5 5.5........5.5 5.5........5.5 5.5........5.5 5.5...55...5m5 555...55...555 ......55...... .............. .............. .............. .............. .............. Level: Nethippy In Reverse Bricks: .............. .............. .............. .E..........E. .E..........E. .E..........E. .EggggggggggE. .EhhhhhhhhhhE. .EiiiiiiiiiiE. .EddddddddddE. .E..........E. .E..........E. .EEEEEEEEEEEE. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ..>>>>>>>>>>.. ..3333333333.. ..4444444444.. ..5555555555.. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Utter Chaos Bricks: .............. @.!.@.!.@.!.@. .............. .@.!.@.!.@.!.@ .............. @.!.@.!.@.!.@. .............. .@.!.@.!.@.!.@ .............. @.!.@.!.@.!.@. .............. .@.!.@.!.@.!.@ .............. @.!.@.!.@.!.@. .............. .@.!.@.!.@.!.@ .............. @.!.@.!.@.!.@. Bonus: .l.........l.. 5...5...5...5. .....m.m...... .5.g.5.g.5.g.5 ..w...w...w... 5.g.5.g.5.g.5. .............. .5.g.5.g.5.g.5 .....b.b...... 5.g.5.g.5.g.5. .f...b.b...f.. .5.g}5.g}5.g.5 ......w....... 5.g.5.g.5.g.5. .............. .5.g.5.g.5.g.5 .>.........>.. 5.g.m.g.m.g.5. Level: G Nooks & Crannies Bricks: ...!#....#!... .####.##.####. ....#.!!.#.... ...!#.##.#!... !#.##....##.#! ##..##..##..## ....#....#.... !...#!..!#...! #.#!#....#!#.# ..####..####.. ...#!#..#!#... ...#.#..#.#... .#!#.#..#.#!#. .###......###. ..!#......#!.. ...###..###... .............. .............. Bonus: ..55......55.. .....5..5..... ..55.5555.55.. 5555.5..5.5555 5.5........5.5 .............. 55...5555...55 5555.5555.5555 .5.5.5555.5.5. .............. ....5....5.... .55.5....5.55. ..5........5.. .............. .55........55. .55........55. .............. .............. Level: G Balls Vs. Timer Bricks: !!!!!!!!!!!!!! .............. .............. .............. .............. zzz@zz@zzzz@zz zzzz@zzz@z@zzz z@z@z@zzzzzz@z @@zzzz@z@z@zz@ .............. .............. .............. .............. @zzzz@zzz@zzzz zz@zzz@z@zz@z@ zzzzzzz@z@zz@z @zz@zz@zzzz@zz .............. Bonus: ffffffffffffff 55555555555555 .............. .............. .............. 555.55.5555.55 5555.555.5.555 5.5.5.555555.5 ..5555.5.5.55. .............. .............. .............. .............. .&bbb.&bb.bbb& bb.bbb.b.bb.b. bbbbbbb.b.bb.w .bb.bb.bbbb.ww .............. Level: Nethippy Level 13 Bricks: dddddddddddddd diiiiiiiiiiiid dihhhhhhhhhhid dihgggggggghid dihgg@gg@@ghid dihg@@ggg@ghid dihgg@gg@@ghid dihgg@ggg@ghid dihg@@@g@@ghid dihgggggggghid zzhhhhhhhhhhzz czziiiiiiiizzc cczzddddddzzcc ccczzddddzzccc cccczzddzzcccc ccccczzzzccccc cccccczzcccccc cccccczzcccccc Bonus: bbbbbbbbbbbbbb bbbbbbbbbbbbbb wwwwwwwwwwwwww >>>>>>>>>>>>>> 55555f55ff5555 5555ff555f5555 55555f55ff5555 55555f555f5555 5555fff5ff5555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 555555ll555555 55555555555555 }}}}}}}}}}}}}} pppppppppppppp Level: G Skull Bricks: .............. .............. ....v####v.... ..v########v.. ..##vv##vv##.. ..##vv##vv##.. ..##########.. ..####vv####.. ..v###vv###v.. ...v######v... ....######.... ....#vvvv#.... ....######.... .............. .............. .............. .............. .............. Bonus: .............. .............. ....m......... .............. ....55..55.... ...55555555... ...5..55..5... ...55.55.55... ..W.5.55.5.W.. ...W..55..W... ......55...... .....5555..... .............. .............. .............. .............. .............. .............. Level: G Asteroid Field Bricks: .............. .@.!.....@..!. .....@........ ........@..... .@..@......@.. .......!.....! ..!........... ..........!... ......@.....@. .!.......@.... ....@......... ......!....... ..@......@.... !...@......!.. .............@ ......@..!.... ..@........... ....!......... Bonus: ..555......555 ..555......555 ..555......555 .............. ......555...55 .555..555...55 .555..55555555 .555.....555.. 555......555.. 555........... 555..555...... .....555...... 55...555..555. 55........555. 55......55555. ........555... ...555..555... ...555........ Level: G Target Scope Open Bricks: .............. ......@@...... .............. ..####..####.. ..#........#.. ..#.*####*.#.. ..#.#*zz*#.#.. ..#.#z**z#.#.. ..#.#*zz*#.#.. ..#.#*zz*#.#.. ..#.#z**z#.#.. ..#.#*zz*#.#.. ..#.*####*.#.. ..#........#.. ..####..####.. .............. ......@@...... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Bonus Round Bricks: .............. !.!.!.!.!.!.!. .*.*.*.*.*.*.* !.!.!.!.!.!.!. .*.*.*.*.*.*.* !.!.!.!.!.!.!. .*.*.*.*.*.*.* !.!.!.!.!.!.!. .*.*.*.*.*.*.* !.!.!.!.!.!.!. .*.*.*.*.*.*.* !.!.!.!.!.!.!. .*.*.*.*.*.*.* !.!.!.!.!.!.!. .*.*.*.*.*.*.* !.!.!.!.!.!.!. .*.*.*.*.*.*.* !.!.!.!.!.!.!. Bonus: 55555555555555 .5.5.5.5.5.5.5 l.5.5.5.5.5.5. .5.5.5.5.5.5.l l.5.5.5.5.5.5. .5.5.5.5.5.5.l 5.5.5.5.5.5.5. .5.5.5.5.5.5.5 5.5.5.5.5.5.5. .5.5.5.5.5.5.5 5.5.5.5.5.5.5. .5.5.5.5.5.5.5 5.5.5.5.5.5.5. .5.5.5.5.5.5.5 b.5.5}5}5.5.b. .b.5.5.5.5.5.b w.5.5g5g5.5.w. .w.5.5.5.5.5.w Level: G DiagWall 2 Bricks: .............. .............. .............e ...........iii .........iidd@ .......iidd@hh .....iidd@hhhh ...iidd@hhhh@c .iidd@hhhh@c@c ddd@hhhh@c@c.. h@hhhh@c@c.... hhhh@c@c...... hh@c@c........ @c@c.......... @c............ .............. .............. .............. Bonus: .............. .............. .............5 ...........555 .........5555. .......5555.5* .....p555.555l ...5555.5555.> .5555.5555.>.f 555.5555.>.f.. 5.5555.>.f.... l555.>.}...... *5.>.f........ .>.f.......... .f............ .............. .............. .............. Level: Nethippy sMILE! Bricks: .............. .............. .....hhhh..... ....hhhhhh.... ...hvvhhvvh... ..hhvvhhvvhh.. .hhhhhhhhhhhh. .hhhhhvvhhhhh. .hhvhhhhhhhvh. .hhhvhhhhhvhh. ..hhhvvvvvhh.. ...hhhhhhhh... ....hhhhhh.... .....hhhh..... .............. .............. .............. .............. Bonus: .............. .............. .....****..... ....*>>>>*.... ...*55bb55*... ..*>55bb55>*.. .*>bbbbbbbb>*. .*>bbb55bbb>*. .*>5bbbbbbb5*. .*>b5bbbbb5>*. ..*>b55555>*.. ...*>bbbb>*... ....*>>>>*.... .....****..... .............. .............. .............. .............. Level: Nethippy Booomb! Bricks: .............. .............. .......jjjj... .......j..jj.. ......EjE..j.. ......E*E..jj. .....EE*EE..j. ....Ezz*zzE.j. ...Ezz***zzEjj ...Ez**c**zE.j ...Ez*c!c*zE.d ...Ez**c**zE.. ...Ezz***zzE.. ....Ezz*zzE... .....EzzzE.... ......EEE..... .............. .............. Bonus: .............. .............. .............. .............. .......l...... .............. .............. .....ff.ff.... ....ff...ff... ....f.....f... ....f.....f... ....f.....f... ....ff...ff... .....ff.ff.... ......fff..... .............. .............. .............. Level: Nethippy Spiral Bricks: .............. .............. kkkkkkkkkkkkkk k............k k.kkkkkkkkkk.k k.k........k.k k.k.kkkkkk.k.k k.k.k....k.k.k k.k.k.kk.k.k.k k.k.k..k.k.k.k k.k.kkkk.k.k.k k.k......k.k.k k.kkkkkkkk.k.k k..........k.k kkkkkkkkkkkk.k .............k kkkkkkkkkkkkkk .............. Bonus: .............. .............. ?????????????? ?............? ?.??????????.? ?.?........?.? ?.?.??????.?.? ?.?.?....?.?.? ?.?.?.??.?.?.? ?.?.?..?.?.?.? ?.?.????.?.?.? ?.?......?.?.? ?.????????.?.? ?..........?.? ????????????.? .............? ?????????????? .............. Level: G TCS #1 Bricks: .............. ############## hhhhhhhhhhhhhh hhhhhhhhhhhhhh ############## gggggggggggggg gggggggggggggg ############## dddddddddddddd dddddddddddddd ############## ffffffffffffff ffffffffffffff ############## !!!!!!!!!!!!!! !!!!!!!!!!!!!! ############## ......gg...... Bonus: .............. .............. .............. 55555555555555 .............. 44444444444444 44444444444444 .............. 33333333333333 33333333333333 .............. }222222222222} }222222222222} g............g 11111111111111 11111111111111 g............g ......mm...... Level: Nethippy Green Wall Bricks: zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz ffffffffffffff Bonus: ffffff{lffffff !5!5555!5555!5 555!5555!55!55 55!55!55555555 5555555555!!55 55!!5555555555 55555!5!555555 55555555555!5! !55!5555555555 555555!555!555 55!555555555!5 5555!555!55555 !5555555555!55 55!555!5555555 5555!5555!5555 >>>>>>>>>>>>>> bbbbbbbbbbbbbb wwwwwwwwwwwwww Level: G Death Flask Bricks: .............. .............. .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... ...###.####... ...#!...!!#... ...#!!!!!!#... ...#!!!!!!#... ...#!!!!!!#... ...########... .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. ....555555.... ....555555.... ....555555.... ....555555.... .............. .............. .............. .............. .............. Level: Nethippy White X Bricks: jjjj......jjjj jjjj......jjjj jjjj......jjjj jjj.j....j.jjj jj.j.j..j.j.jj j.j.j.jj.j.j.j .j.j.jjjj.j.j. ..j.jjjjjj.j.. ...jjjjjjjj... ...jjjjjjjj... ..j.jjjjjj.j.. .j.j.jjjj.j.j. j.j.j.jj.j.j.j jj.j.j..j.j.jj jjj.j....j.jjj jjjj......jjjj jjjj......jjjj jjjj......jjjj Bonus: ????......???? ????......???? ????......???? ???.?....?.??? ??.?.?..?.?.?? ?.?.?.??.?.?.? .?.?.????.?.?. ..?.??????.?.. ...????????... ...????????... ..?.??????.?.. .?.?.????.?.?. ?.?.?.??.?.?.? ??.?.?..?.?.?? ???.?....?.??? ????......???? ????......???? ????......???? Level: G Have "Fun" Bricks: z.!..h..h..!.z @.@.!@!!@!.@.@ z.y..h..h..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ z.y..x..x..y.z @.@..@..@..@.@ cccccccccccccc cccccccccccccc Bonus: 55555m55m55555 5555w5ww5w5555 5.5555555555.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 5.5..5..5..5.5 b>b>b>b>b>b>b> >b>b>b>b>b>b>b Level: G Tough Break Bricks: .............. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .cccccccccccc. .cccccccccccc. .cccccccccccc. .cccccccccccc. .............. .............. .............. .............. .............. Bonus: .............. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWWWWWWWWWWW. .WWWWWWWWWWWW. .WWWWWWWWWWWW. .{{{{{{{{{{{{. .............. .............. .............. .............. .............. Level: G Thick N Hard Bricks: .............. .............. .............. .............. .............. cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ......**.5.... .5.5..55...... .55.55.555..5. p.5.5......5.p 5....5..5..... .55..5555.5.5. .55..5........ .............. .............. .............. .............. .............. .............. Level: G Tractor Beam Bricks: .............. .......ha..... ......hhaa.... .....hh..aa... ....hh....a... ...hh.....a... hhhhhhhaaaaaaa hhhhhhhaaaaaaa ...hh.....a..a ....hh....a..a .....hh..aa..a ......hh.aa..a .......haa...a ........a....a .............a .............a .............a aaaaaaaaaaaaaa Bonus: .............. .......3...... ......33...... .....33....... ....33........ ...33......... 3333333....... 3333333....... ...33......... ....33........ .....33....... ......33...... .......3...... .............. .............. .............. .............. .............. Level: G Piece Of Cake Bricks: .............. i.i.i.i.i.i.i. .............. .i.i.i.i.i.i.i .............. i.i.i.i.i.i.i. .............. .i.i.i.i.i.i.i .............. i.i.i.i.i.i.i. .............. .i.i.i.i.i.i.i .............. i.i.i.i.i.i.i. .............. .i.i.i.i.i.i.i .............. i.i.i.i.i.i.i. Bonus: .............. 1.1.1.1.1.1.1. .............. .............. .............. 1.1.1.1.1.1.1. .............. .............. .............. 1.1.1.1.1.1.1. .............. .............. .............. 1.1.1.1.1.1.1. .............. .............. .............. 1.1.1.1.1.1.1. Level: G TCS #5 Bricks: g###!!!!!!###g .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .###!!!!!!###. .############. .############. .############. .############. .############. Bonus: m...555555...m ..g.555555.g.. ....555555.... ..g.555555.g.. ....555555.... ..}.555555.}.. ....555555.... ..}.555555.}.. ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... .............. .............. ......ll...... .............. .............. Level: G Randoom Bricks: ........aE.... e..d..d..E#.*. *............. ......!....... ....!......... ........*.*... ...@.#e.E.!@.. ...d......@..d ...*...d...... .a...........a ..#..a.#...@.. ea..E..e...... .....a..a!.@.. *....E........ ..*.....E..... .E.E........!. .!...d......e. ...@...*...... Bonus: ........5..... m..5..5.....5. .....555...... ...{{{.5...... ...{.{55...... ...{{{...f.f.. ......5..f.... ...5.....f.f.5 ...5...5...... .5...........5 .....5........ 55.....5WWW... .....5..5.W... 5.......WWW... ..5........~~~ >.>........~.~ >.>..5.....~5~ >>>....5...... Level: G CrazyBounce Bricks: .............. .@.@...@.@.... ..!.....!..... .@.@...@.@.... .............. ....@.@...@.@. .....!.....!.. ....@.@...@.@. .............. .@.@...@.@.... ..!.....!..... .@.@...@.@.... .............. ....@.@...@.@. .....!.....!.. ....@.@...@.@. .............. .............. Bonus: .............. ..5.....5..... .5.5...5.5.... ..5.....5..... .............. .....5.....5.. ....5.5...5.5. .....5.....5.. .............. ..5.....5..... .5.5...5.5.... ..5.....5..... .............. .....5.....5.. ....5.5...5.5. .....5.....5.. .............. .............. Level: Nethippy Red Maelstrom Bricks: .............. .....ddddddd.. ....d.......d. ...d..ddddd..d ..d..d.....d.. .d..d..ddd..d. .d.d..d...d..d .d.d.d..d..d.. .d.d..dd.d..d. .d..d.dd..d.d. ..d..d..d.d.d. d..d......d.d. .d..ddd..d..d. ..d.....d..d.. d..ddddd..d... .d.......d.... ..ddddddd..... .............. Bonus: .............. .....???????.. ....?.......?. ...?..?????..? ..?..?.....?.. .?..?..???..?. .?.?..?...?..? .?.?.?..?..?.. .?.?..??.?..?. .?..?.??..?.?. ..?..?..?.?.?. ?..?......?.?. .?..???..?..?. ..?.....?..?.. ?..?????..?... .?.......?.... ..???????..... .............. Level: G Hard Crunchy Center Bricks: .............. .............. .............. .............. ....EEEEEE.... ...aaaaaaaa... ..EabbbbbbaE.. ..EabbbbbbaE.. ..EabbccbbaE.. ..EabbccbbaE.. ..EabbbbbbaE.. ..EabbbbbbaE.. ...aaaaaaaa... ....EEEEEE.... .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ...22222222... ...23333332... ...23444432... ...23455432... ...23455432... ...23444432... ...23333332... ...22222222... .............. .............. .............. .............. .............. Level: G T.I.E. Fighter Bricks: .............. .............. d............d d............d d....iiii....d d..##....##..d d..#.g..g.#..d d.i.g#gg#g.i.d ddi..ghhg..idd ddi..ghhg..idd d.i.g#gg#g.i.d d..#.g..g.#..d d..##....##..d d....iiii....d d............d d............d .............. .............. Bonus: .............. .............. .............. .............. .....2222..... .............. .....3..3..... ..2.3.44.3.2.. ..2..4554..2.. ..2..4554..2.. ..2.3.44.3.2.. .....3..3..... .............. .....2222..... .............. .............. .............. .............. Level: Nethippy Orange Checkerboard Bricks: .............. ....eee...eee. ....eee...eee. ....eee...eee. ....eee...eee. .eee...eee.... .eee...eee.... .eee...eee.... .eee...eee.... ....eee...eee. ....eee...eee. ....eee...eee. ....eee...eee. .eee...eee.... .eee...eee.... .eee...eee.... .eee...eee.... .............. Bonus: .............. ....???...???. ....???...???. ....???...???. ....???...???. .???...???.... .???...???.... .???...???.... .???...???.... ....???...???. ....???...???. ....???...???. ....???...???. .???...???.... .???...???.... .???...???.... .???...???.... .............. Level: G Obi Wan Vs. Vader Bricks: ...........ggj ..........ggjj .........ggjjj ........ggjjjj .......ggjjjjc ......ggjjjjca .....ggjjjjcaa ....ggjjjjcaaa ...ggjjjjcaaaa ..ggjjjjcaaaad .ggjjjjcaaaadd ggjjjjcaaaadd. gjjjjcaaaadd.. jjjjcaaaadd... jjjcaaaadd.... jjcaaaadd..... jcaaaadd...... caaaadd....... Bonus: .............5 ............5. ...........5.5 ..........5.5. .........5.5.. ........5.5... .......5.5.... ......5.5...f. .....5.5...... ....5.5...f.W. ...5.5........ ..5.5...f.W... .5.5.......... 5.5...f.W..... .5............ 5...f.W....... .............. ..f.W......... Level: G Bonus Round! Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 5l555555555555 555555555555j5 55555555555555 5555555555j5j5 55555555555555 55555l5j555j55 55555555555555 55555555j55555 5555j555555555 55555555555555 555555j555l555 55555555555555 55j555555555l5 55555555555555 gggggggggggggg bbbbbbbbbbbbbb }}}}}}}}}}}}}} wwwwwwwwwwwwww Level: G Chao-Twist Bricks: .............. ....!.#....... ..#...##....!. ..#.....#..... ...#.!..g#.... ...#....#..!.. ...#...#...... ....#....!.... ..!.#.#....... ....#......... ...#h#.!...... ..#hh#........ ..#hhh#....... ..##hhh#...... ....#hhh#..... .....###h##h#. .......##hh##. .............. Bonus: ...222........ ...2.2.....222 ...222.....2.2 ....222....222 ....2.2.m.222. ....222...2.2. ........22222. .222....2.2... .2.2....222... .222..222..... ....5.2.2..... ...55.222..... ...555........ ....555....... .....555...... ........5..5.. .........55... .............. Level: G TCS #9 Bricks: g.@@@@@@@@@@.g ..@@@@@@@@@@.. ..@@@@!!@@@@.. ..@@@!!!!@@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@!!!!!!@@.. ..@@@!!!!@@@.. ..@@@@!!@@@@.. ..@@@@@@@@@@.. ..@@@@@@@@@@.. Bonus: m.l........l.m .............. ....g}55}g.... ....}5555}.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....555555.... ....}5555}.... ....g}55}g.... .............. .............. Level: G The "Matrix" Bricks: .............. #.#.#.#.#.#.#. h.h.h.h.h.h.h. .............. .............. .#.#.#.#.#.#.# .h.h.h.h.h.h.h .............. d.d.d.d.d.d.d. #.#.#.#.#.#.#. d.d.d.d.d.d.d. .............. .h.h.h.h.h.h.h .#.#.#.#.#.#.# .............. .............. h.h.h.h.h.h.h. #.#.#.#.#.#.#. Bonus: .............. .............. l.5.5.5.5.5.l. .............. .............. .............. .5.5.5.5.5.5.5 .............. 5.5.5.5.5.5.5. .............. 5.5.5.5.5.5.5. .............. .5.5.5.5.5.5.5 .............. .............. .............. 5.5.5.5.5.5.5. .............. Level: G TCS #12 Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! ############## ############## ############## #E####EE####E# ############## ############## ############## ############## g############g Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 }gggggggggggg} }............} }.....ll.....} }............} .............. .............. .............. .............. m............m Level: G A Bit More Interesting Bricks: ..d...d...d... d...d...d...d. .............. ..d.!.d.!.d.!. .............. d.!.d.!.d.!.d. .............. ..d.!.d.!.d.!. .............. d.!.d.!.d.!.d. .............. ..d.!.d.!.d.!. .............. d...d...d...d. ..d...d...d... .............. d...d...d...d. ..d...d...d... Bonus: .............. .............. ...333.333.333 ...3.3.3.3.3.3 .3333333333333 .3.3.3.3.3.3.. .3333333333333 ...3.3.3.3.3.3 .3333333333333 .3.3.3.3.3.3.. .3333333333333 ...3.3.3.3.3.3 ...333.333.333 .............. .............. .............. .............. .............. Level: Nethippy Chao-Wall Bricks: !..!.!..*...!! .**.!!***....! .***!******!.. *!**!!*!!**.@* *!.@!**.!.*.** ..!**!..*!!*.* .!!!!!*!**!*!. .!!!!****.!!!. .!!**@.!*!**!. .!!*!!*!!.*!@! .@!*!***.**!.! .*!!!!!*.!!.!. .!*!!!!!!*..!! .@*.@.*!*@*..! ..!.!!.**!*!.! !.*.!!**..**.* !!**!.*.*.*.** !!......!..!.. Bonus: .5555m5.m..5.. 5555..555.555. 5555.555555.55 5.55..5..555.5 5.5..555.55555 55.55.555..555 5.....5.55.5.5 5....55555...5 5..55.5.5.55.5 5..?..?.55?... 5..?.???5??.5. 5g.....?5..5.5 5.g......?55.. 5.g5.5g.g.g55. 55.5..5gg.g.5. }5g5..gg..gg5g }}gg.5g.g.g.gg }}5555........ Level: G All Green Bricks: .............. z.#.z.#.z.#.z. .............. #.z.#.z.#.z.#. .............. y.#.y.#.y.#.y. .............. #.y.#.y.#.y.#. .............. x.#.x.#.x.#.x. .............. #.x.#.x.#.x.#. .............. x.#.x.#.x.#.x. .............. #.x.#.x.#.x.#. .............. x.#.x.#.x.#.x. Bonus: .............. m.5...5...5.l. .............. 5.b.5.w.5.b.5. .............. ..5...5...5... .............. 5...5.g.5...5. .............. ..5...5...5... .............. 5...5.}.5...5. .............. ..5...5...5... .............. 5...5.~.5...5. .............. >.5.>.5.>.5.>. Level: Nethippy Fargin A Bricks: .............. zz.EEEccEEE.zz zz.Egv..vgE.zz zz.E.v..v.E.zz ...E.v..v.E... zEEE.v..v.EEEz ...E.v..v.E... hh.EvvEEvvE.hh hh....EE....hh hh....vv....hh hh.EvvvvvvE.hh ...E......E... EEEEvvvvvvEEEE .............. .............. .............. .............. .............. Bonus: .............. 55....++....55 55..l....l..55 55..........55 .............. .............. .............. 44..........44 44..........44 44....++....44 44..-....-..44 .............. ....>>>>>>.... .............. .............. .............. .............. .............. Level: Nethippy Kaboom! Bricks: .....!!!!..... ..!!!!**!..... ..!**!*!!!!!.. .!!********!.. .!******!!*!!. .!!!*!******!. ..!**!**!*!*!. ..!*!!**!*!*!. ..!*!!**!!!*!. ..!!!!**!.!!!. .....!**!..... .....!**!..... ....!!**!!.... ....!****!.... ..!!!****!!!.. !!!********!!! !************! ************** Bonus: .5555....5.... .5.......5555. 55..........5. 5...........55 5............5 5............5 55...........5 .5...........5 .5...........5 .5.......5...5 .5555....55555 ...55....55... ...5......5... .555......555. 55..........55 .............. .............. .............. Level: Nethippy Invisible Bricks: vvv.vvv.vvv..v v...v.v.v.v..v v...v.v.v.v.vv v.v.v.v.v.v.vv vvv.vvv.vvv.vv .............. v..v.v.vv.v..v v..v.v.v..v.v. v..v.v.v..vv.. v..v.v.v..v.v. vv.vvv.vv.v..v .............. .............. .v.v.v.v.v.v.v .............. .............. .............. .............. Bonus: ???.???.???..? ?...?.?.?.?..? ?...?.?.?.?.?? ?.?.?.?.?.?.?? ???.???.???.?? .............. ?..?.?.??.?..? ?..?.?.?..?.?. ?..?.?.?..??.. ?..?.?.?..?.?. ??.???.??.?..? .............. .............. .?.?.?.?.?.?.? .............. .............. .............. .............. Level: Nethippy Wall Of Wonderment Bricks: @iiiiiiiiiiii@ hhhhhhhhhhhhhh gggggggggggggg dddddddddddddd jjjjjjjjjjjjjj @............@ gggggggggggggg dddddddddddddd jjjjjjjjjjjjjj @............@ hhhhhhhhhhhhhh gggggggggggggg dddddddddddddd jjjjjjjjjjjjjj @............@ vvvvvvvvvvvvvv .............. !!!!!!!!!!!!!! Bonus: .............. 55555555555555 55555555555555 55555555555555 55555555555555 .............. ?????????????? ?????????????? ?????????????? .............. ?????????????? ?????????????? ?????????????? ?????????????? .............. >>>>>>>>>>>>>> 55555555555555 55555555555555 Level: Nethippy Boom Bang Bricks: .g...EEEE...g. .E.!******!.E. .E...*..*...E. .EEEE*..*EEEE. .E...*..*...E. .E.!**..**!.E. .E...*..*...E. .EEEE*..*EEEE. .E...*..*...E. .E.!**..**!.E. .E...*..*...E. .EEEE*..*EEEE. .E...*..*...E. .E.!**..**!.E. hE...*..*...Eh EEEEE*..*EEEEE .............. .............. Bonus: .g..........g. ...5......5... .............. .............. .............. ...5......5... .............. .............. .............. ...5......5... .............. .............. .............. ...5......5... l............l .............. .............. .............. Level: G Bonus Round Bricks: g!!!!!!!!!!!!! ##!!!#!!#!!!!! #!#!#!#!##!!!! ##!!#!#!#!#!!! #!#!#!#!#!#!!! ##!!!#!!#!#!!! !!!!!!!!!!!!!! !!#!#!###!!!!! !!#!#!#!!!!!!! !!#!#!#!!!!!!! !!#!#!######!! !!#!#!!!!!!#!! !!###!!!!!!#!! !!!!!!!!!!!#!! ############!! !!!!!!!!!!!!!# !!!!!!!!!!!!## #############g Bonus: m5555555555555 ..5j5.55.55555 .5.5.5.5..5555 ..55.5.5.5.555 .5.5.5.5.5.555 ..555.j5.5.555 55555555555j55 55.5.5...55555 55.5.5.5555555 5j.5.5.5555555 55.5.5......55 55.5.55j555.55 55...555555.55 55555555555.55 ............55 bbbj555555555. wwwwwww}}}}}.. .............m Level: G Symmetry Bricks: ......EE...... .............. ....cEccEc.... ....EEhhEE.... .....EhhE..... ...E.EiiE.E... .....EiiE..... ..EEcEccEcEE.. ..EggEiiEggE.. ..EggEiiEggE.. ..EggEhhEggE.. ..EccEhhEccE.. ..EEEEccEEEE.. .............. ......EE...... .............. .............. .............. Bonus: .............. .............. .............. ......55...... ......55...... ......55...... ......55...... ....j.jj.j.... ...55.55.55... ...55.55.55... ...55.55.55... ......55..l... .............. .............. .............. .............. .............. .............. Level: Nethippy Yucky Slime Bricks: zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzz. .z.zzzzzzzzz.. .z.zz.zzzz.z.. ...z...z.z.... .......z...... .............. .............. .............. .............. .............. .............. zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz Bonus: .............. 55555555555555 55555555555555 5555555555555w w5w555555555w. .5.55w5555w5.. .w.5w.w5w5.w.. ...w...5.w.... .......w...... .............. .............. .............. .............. .............. .............. bbbbbbbbbbbbbb >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: Nethippy Up The Middle! Bricks: ..!.!.gg.!.!.. .!.!.g..g.!.!. ..!.g.gg.g.!.. E!.g.g..g.g.!E ..h.g.gg.g.h.. .d.h.g..g.h.d. d.d.h.gg.h.d.d .d.d.h..h.d.d. d.d.d.hh.d.d.d .d.d..hh..d.d. d.d..!hh!..d.d .d..!.hh.!..d. d..!.!hh!.!..d ..!.!.hh.!.!.. @!.!.!hh!.!.!@ !.!.!.hh.!.!.! @!.!.!hh!.!.!@ xxxxxxxxxxxxxx Bonus: .5.5.5**5.5.5. ..5.5l..l5.5.. 55.5g.**.g5.55 ..5g.g..g.g5.. 55b.g.**.g.b55 .5.b.g..g.b.5. 5.5.b.**.b.5.5 .5.5.b..b.5.5. 5.5.5.bb.5.5.5 .5.555ww555.5. 5.5555ww.555.5 .55555}}5.555. 555555}}.5.555 555555}}5.5.55 555555}}.5.5.5 555555ww5.5.5. 555555ww.5.5.5 >>>>>>ww>>>>>> Level: G TCS #4 Bricks: ......ii...... ......##...... .....iiii..... .....####..... ....dddddd.... ....######.... ...dddddddd... ...########... ..hhhhhhhhhh.. ..##########.. ......hh...... ......##...... ......gg...... ......##...... ......gg...... ......##...... ......gg...... .....f##f..... Bonus: ......55...... ......55...... .....5555..... .....5ll5..... ....555555.... ....555555.... ...55555555... ...55555555... ..5555555555.. ..5555gg5555.. ......55...... ......}}...... ......55...... ......gg...... ......55...... ......}}...... ......55...... .....m55m..... Level: G Tough Entry Bricks: @............@ ..#.!.!!.!.#.. .##........##. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .#.!.!..!.!.#. .#..........#. .############. Bonus: ...55555555... ...5.5..5.5... ...55555555... ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. ..5.5.55.5.5.. ..5555555555.. .............. Level: G Reactor Shot Bricks: .............. .............. .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... ....#...#..... ...#..!..#.... ....#...#..... .....###...... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .....5.5...... .....5.5...... .....l5l...... .............. Level: Nethippy Tricky Bricks: .............. .............. .............. gggggggggggggg EjjjjjjjjjjjjE dddddddddddddd .............. gggggggggggggg EjjjjjjjjjjjjE dddddddddddddd .............. gggggggggggggg EjjjjjjjjjjjjE dddddddddddddd .............. .............. .............. .............. Bonus: .............. .............. .............. 55555555555555 ......ll...... b............b .............. b............b .............. .............. .............. .............. .............. p.....>>.....p .............. .............. .............. .............. Level: Nethippy Pac Attack Bricks: .............. .............. .............. .............. ..hh.......... .hhhhh..ccccc. hhhhh..ccvccvc hhhh...cvvcvvc hhh....ccccccc hhhh...ccccccc hhhhh..ccccccc .hhhhh.ccccccc ..hh....c.c.c. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ..bb.......... .bbbbb..55l55. bbbbb..55.55.5 bbbb...5..5..5 bbb....5555555 bbbb...>>>>>>> bbbbb..>>>>>>> .bbbbb.~f~f~f~ ..bb....~.~.~. .............. .............. .............. .............. .............. Level: G Four Corners Bricks: !.!f......f!.! ...f......f... !.@f......f@.! ffff...hhhffff ...hhhhh...h.. ...h...h.!.h.. ...h.!.....h.. ...h....!.hh.. ...hh.!...h... ...h...!.hh... ..hh.!....h... ..h.....!.h... ..h.!.h...h... ..h...hhhhh... ffffhhh...ffff !.@f......f@.! ...f......f... !.!f......f!.! Bonus: .5..........5. 555........555 .5..........5. .............. ........555... ....555.5.5... ....5.55555... ....5555.5.... .....5.555.... ....555.5..... ....5.5555.... ...55555.5.... ...5.5.555.... ...555........ .............. .5..........5. 555........555 .5..........5. Level: G TCS #2 Bricks: !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# !#!#!#!#!#!#!# ######gg###### Bonus: .l...........l 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. 5.5.5.5}5.5.5. 5.5.5g.}5g5.5. .....gmm.g.... Level: G Bust 'em Open! Bricks: .............. ......!!...... .@@##....##@@. .@hh#....#hh@. .@hh#....#hh@. .@@##....##@@. .............. .....##@@..... .....#hh@..... .....#hh@..... .....##@@..... .............. .@@##....##@@. .@hh#....#hh@. .@hh#....#hh@. .@@##....##@@. .............. .............. Bonus: ......mm...... .............. .4444....4444. .4..4....4.m4. .4..4....4..4. .4444....4444. .............. .....5555..... .....5l.5..... .....5..5..... .....5555..... .............. .4444....4444. .4m.4....4..4. .4..4....4..4. .4444....4444. .............. .............. Level: G Easier Than It Looks Bricks: .............. .iii.......... .@@@......kkk. ..........@@@. ....hhh....... ....@@@....... .......ggg.... .......@@@.... .............. .fff.......... .@@@.......... .......jjj.... .......@@@.... ....eee....... ....@@@...ddd. ..........@@@. .............. .............. Bonus: .............. .555.......... ..........555. .............. ....444....... .............. .......333.... .............. .............. .222.......... .............. .......111.... .............. ....000....... .............. .............. .............. .............. Level: G X Bricks: .............. .............. .............. .iii......iii. .i#ii....ii#i. .ii#ii..ii#ii. ..ii#iiii#ii.. ...ii#ii#ii... ....ii##ii.... ....ii##ii.... ...ii#ii#ii... ..ii#iiii#ii.. .ii#ii..ii#ii. .i#ii....ii#i. .iii......iii. .............. .............. .............. Bonus: .............. .............. .............. .b..........b. .............. .............. ......ww...... ......55...... .....m..m..... .....5..5..... ......55...... .............. .............. .............. .b..........b. .............. .............. .............. Level: G One Chance 4 Points Bricks: ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 j5555555555555 55555555555555 55555555555555 Level: G Tough Break II Bricks: .............. .............. .@.@.@@@@.@.@. .@z@.@zz@.@z@. .@@@.@..@.@@@. .............. .............. .............. cccccccccccccc ihhhihhhihhhih ihihihihihihih ihihihihihihih ihihihihihihih hhihhhihhhihhh vvvvvvvvvvvvvv .............. !!!!!!!!!!!!!! .............. Bonus: .............. .............. .............. ..m...mm...m.. .............. .............. .............. .............. l............l g...g...g...g. .............. .............. .............. ..g...g...g... .............. >>>>>>>>>>>>>> 55555555555555 >>>>>>>>>>>>>> Level: G Big X Bricks: ####zzzzzz#### #cb#zzzzzz#bc# #bb#zzzzzz#bb# #aa#zzzzzz#aa# #...#zzzz#...# #..!.#zz#.!..# ###.!.##.!.### zzz#.!..!.#zzz zzzz#.!!.#zzzz zzz##!..!##zzz zz#.!....!.#zz ##.!......!.## ..!.##..##.!.. ...#z#..#z#... aa#zz#..#zz#aa bb#zz#..#zz#bb cb#zz#..#zz#bc ######..###### Bonus: ....55ll55.... .m4.555555.44. .44.555555.44. .44.555555.44. ..33.5555.33.. ..323.55.323.. ...323..323... 555.323323.555 555m33223.m555 555.32.32..555 55.323.3323.55 ..323...3323.. .323......323. .33.5....5.33. 44.55....55.44 44.55....55.44 44.55....55.4m .............. Level: Nethippy Bonus Round Bricks: iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh gggggggggggggg gggggggggggggg gggggggggggggg ffffffffffffff ffffffffffffff ffffffffffffff eeeeeeeeeeeeee eeeeeeeeeeeeee eeeeeeeeeeeeee dddddddddddddd dddddddddddddd dddddddddddddd Bonus: .............. .............. 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 l555555555555l llwwwwwwwwwwll }}}}}}}}}}}}}} bbbbbbbbbbbbbb >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: G Up N Down Bricks: .............. .............. ..@..@..@..@.. .............. .............. .#h#d#j#f#g#i# .#h#d#j#f#g#i# .#h#d#j#f#g#i# .############# .############# .#i#g#f#j#d#h# .#i#g#f#j#d#h# .#i#g#f#j#d#h# .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ..5.5.5.5.5.5. ..5.5.5.5.5.5. ..5.5.5.5.5.5. .............. .............. ..5.5.5.5.5.5. ..5.5.5.5.5.5. ..5.5.5.5.5.5. .............. .............. .............. .............. .............. Level: G Symmetry III Bricks: @@@@@...!@@@@@ @...@.!..@...@ @.!.@..!.@.!.@ @...@!...@...@ @@.@@@..@@@.@@ k@.@k....k@.@k .............. k@..........@k @@..........@@ .............. .@..........@. d@..........@d @@..........@@ .............. .............. .............. .............. .............. Bonus: .....555...... .555.5.55.555. .5.5.55.5.5.5. .555..555.555. ......5....... 5...+....+...5 .............. 5............5 .............. .............. .............. m............l .............. .............. .............. .............. .............. .............. Level: Nethippy BigGray Bricks: .............. cccccccccccccc cddc......cddc cddc......cddc cddc......cddc cddc......cddc cddccc..cccddc cddchc..chcddc cddchc..chcddc cddchc..chcddc cddchc..chcddc cddchc..chcddc cccchc..chcccc cffchc..chcffc cffchc..chcffc cffchc..chcffc cffchc..chcffc cccccc..cccccc Bonus: .............. p333333333333p .............. .............. .............. .............. l....l..l....l .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G A Bit Tricky Bricks: .....#..#..... .!.!.#!!#.!.!. ..@..#..#..@.. .!...#!!#...!. ....z....z.... ####.#..#.#### d#d#......#d#d d#d#......#d#d d#d#......#d#d .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: 55555.11.55555 5.5.5....5.5.5 55.55.11.55.55 5.5........5.5 555.5.bb.5.555 .............. w.w........w.w .............. >.>........>.> .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Skill Shots Bricks: !...#!..!#...! ..#........#.. .##..####..##. .#!..#..#..!#. .#!..#!!#..!#. .##..#..#..##. ....!#..#!.... #...#!..!#...# !...!#..#!...! ......!!...... .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .5....55....5. 55..555555..55 ...5......5... ...5......5... ...5......5... ...55....55... ...5......5... .5.5......5.5. .5.5..55..5.5. 55.555..555.55 .....5555..... .............. .............. .............. .............. .............. .............. .............. Level: Nethippy Half There? Bricks: iiiiiiiiiiiiii !.!.!.!kv.v.v. ......kk...... .!.!.!kv.v.v.v ......kk...... !.!.!.!kv.v.v. ......kk...... .!.!.!kv.v.v.v ......kk...... !.!.!.!kv.v.v. ......kk...... .!.!.!kv.v.v.v ......kk...... !.!.!.!kv.v.v. ......kk...... .!.!.!kv.v.v.v ......kk...... !.!.!.!kv.v.v. Bonus: ffffffffffffff *.5.5.555.5.5. ......55...... .5.5.555.5.5.* ......55...... l.5.5.555.5.5. ......55...... .5.5.555.5.5.l ......55...... 5.5.5.555.5.5. ......55...... .5.5.555.5.5.5 ......55...... 5.5.5.555.5.5. ......55...... .5.5.5{{.5.5.5 ......{{...... ~.~.~.~~~.~.~. Level: Nethippy Madness Bricks: E............E EggggE..EggggE EggggE.vEggggE EggggE..EggggE EEEhEEv.EEgEEE EhhhhE..EhhhhE EhhhhE.vEhhhhE EhhhhE..EhhhhE EchccEv.EcchcE EddddE..EddddE EddddE.vEddddE EddddE..EddddE EzzzzEv.EzzzzE .............. .............. .............. .............. .............. Bonus: .............. .5555....5555. .5555..l.5555. .5555....5555. ...p..w...p... .>>>>....>>>>. .>>>>..>.>>>>. .>>>>....>>>>. ..b...>....b.. .2222....2222. .2222..w.2222. .2222....2222. ......f....... .............. .............. .............. .............. .............. Level: Nethippy Blue Wall Bricks: gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? Level: G Puzzle I Bricks: !#..#!!!!#..#! ##..#!!!!#..## h.h.#!!!!#.h.h .h..#!!!!#..h. h.h.######.h.h ....#!!!!#.... ....#!!!!#.... ....#!!!!#.... ....#!!!!#.... ....######.... .###......###. .#!#......#!#. .###......###. .............. .............. .............. .............. .............. Bonus: m5..555555..5m 55..555555..55 f.f.555555.f.f .m..555555..m. f.f.555555.f.f .....5555..... .....5555..... .....5555..... .....5555..... .............. .............. ..l........l.. .............. .............. .............. .............. .............. .............. Level: Nethippy Spider Bricks: @@..........@@ @............@ .............. .............. .aaa......aaa. a...a....a...a .....a..a..... .aaa..cc..aaa. a...bbhhbb...a ......cc...... ....bbhhbb.... .aaa..hh..aaa. a...bbhhbb...a ......cc...... ....bb..bb.... .aaa......aaa. a............a @@..........@@ Bonus: .............. .............. .............. .............. .555......555. 5...5....5...5 .....5..5..... .>>>..ll..>>>. >............> ......ff...... .............. .>>>......>>>. >............> .............. .............. .>>>......>>>. >............> .............. Level: Nethippy Slimey Purple Bricks: iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiii.iii iii.iiiiii.i.i ii..iiiii..i.. .i...iii...... .i...i.i...... .......i...... Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ??????????.??? ???.??????.?.? ??..?????..?.. .?...???...... .?...?.?...... .......?...... Level: G Bonus Round Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! ############## ############## ############## ############## gEEEEEEEEEEEEg Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 bjjjjjjjjjjjjb bggggggggggggb b}}}}}}}}}}}}b bwwwwwwwwwwwwb m............m Level: G Detention Block Bricks: #############. #aa#aa#aa#aa#. #..#..#..#..#. #..#..#..#..#. #..#..#..#..#. #..#..#..#..#. #############. .............. .!.!.!.!.!.!.. !.!.!.!.!.!.!. .............. #############. #..#..#..#..#. #..#..#..#..#. #..#..#..#..#. #..#..#..#..#. #aa#aa#aa#aa#. #############. Bonus: .............. .m......m..... .............. .............. .............. .............. .............. 5555555555>55. m.>.5.>.5.5.55 .5.>.5.5.5.5.5 >55555555>555> .............. .............. .............. .............. .............. .....m........ .............. Level: G Thru The Superstructure Bricks: ........j.j... #########.#### .............. !!!!!!!!!!!!!! .............. ##.########### .............. !!!!!!!!!!!!!! .............. ########.##### .............. !!!!!!!!!!!!!! .............. #####.######## .............. !!!!!!!!!!.... .............. #############. Bonus: ........l.l... .............. 55555555555555 .............. 55555555555555 .............. 55555555555555 .............. 55555555555555 .............. 55555555m55555 .............. 55555555555555 .............. 55555555555... ..........5... 55555555555... .............. Level: G 5 HELLpings Of Trouble Bricks: .............. .............. @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ .....@cc@..... .....@cc@..... .....@cc@..... .....@cc@..... .............. @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ @cc@......@cc@ .............. Bonus: .............. .............. .55........55. .55........55. .55........55. .55........55. .--........~~. ......55...... ......55...... ......55...... ......ff...... .............. .55........55. .55........55. .55........55. .55........55. .>>........dd. .............. Level: G S.L.O.W. Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! .............. .............. .............. .............. Bonus: <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< gggggggggggggg .............. .............. .............. .............. Level: G TCS #6 Bricks: .....####..... ....######.... ...##...g##... ...##....##... ...##....##... ...##....##... ...##......... ...##......... ...##......... ...######..... ...#######.... ...##!!!!##... ...##!!!!##... ...##!!!!##... ...##!!!!##... ...##!!!!##... ....######.... .....####..... Bonus: .......l...... .............. ........m..... .............. .............. .............. .............. .............. .............. .............. ....}......... .....5555..... .....5555..... .....5555..... .....5555..... .....5555..... .............. .............. Level: Nethippy Bricks Ahoy! Bricks: .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. Bonus: .............. 5.5.5.5.5.5.5. .............. .5.5.5.5.5.5.5 .............. ?............. .............. .............? .............. >.>.>.>.>.>.>. .............. .>.>.>.>.>.>.> .............. l...........l. .............. .............. .............. .............. Level: Nethippy Wiggly Bricks: dEEEEEEEEEEEEE dEhEgEiEgEhEdE dEhEgEiEgEhEdE dEhEgE...EhEdE dEhEgE...EhEdE dE...E.E.EhEdE dE...E.E.EhEdE dE.E.E.E...EdE dE.E...E...EdE ...E...EgE.EdE ...EgEiEgE.EdE .EhEgEiEgE.EdE .EhEgEiEgE.EdE .EhEgEiEgE.EdE .EhEgEiEgE...E .EhEgEiEgE...E .EhEgEiEgEhE.E .EEEEEEEEEEE.E Bonus: .............. ..5.5.l.l.5.5. ..5.5.5.5.5.5. ..>.........5. ..>.>.......5. ..........>... >.........>... >............. >............. ........>..... ....>.>....... ..>........... ..>.........>. ............>. .............. ..5.5.5.5..... ..5.5.5.5.5... .............. Level: Nethippy Misery Bricks: .............. .............. .............. EEEEEEEEEEEEEE .....iEEi..... ......EE...... ....E.EE.E.... hhhhE.EE.Ehhhh hhhEE.EE.EEhhh hhhEi.EE.iEhhh hhhE..EE..Ehhh EEEE.EEEE.EEEE i.....@@.....i ......@@...... ......ii...... .............. .............. .............. Bonus: .............. .............. .............. .............. .....>..>..... .............. .............. >5>5......5>5> 5>5........5>5 >5>.>....>.>5> 5>5........5>5 .............. >............> .............. ......>>...... .............. .............. .............. Level: G Rings Of Hell Bricks: .............. .............. ...###..###... ..#!!!!!!!!#.. .#!!......!!#. .#!.######.!#. .#!#......#!#. .#!#!!!!!!#!#. .#!#!####!#!#. .#!#!#!!#!#!#. .#!#!.!!.!#!#. .#!#!####!#!#. .#!#!!!!!!#!#. .#!#......#!#. .#!.##..##.!#. .#!!......!!#. ..#!!!!!!!!#.. ...########... Bonus: .............. .............. ..3........3.. .3.22222222.3. ..2233333322.. ..23......32.. ..2.555555.2.. ..2.444444.2.. ..2.4....4.2.. ..2.4.55.4.2.. ..2.455554.2.. ..2.4....4.2.. ..2.434444.2.. ..2.555555.2.. ..23......32.. ..22......22.. .3.22222222.3. ..3........3.. Level: Nethippy Devilish Bricks: .............. .............. ggggg@..@ggggg ggzgg@..@ggzgg ggzzg@..@gzzgg zzzzz@..@zzzzz zzzzz@..@zzzzz ddzzd@..@dzzdd ddzdd@..@ddzdd ddddd@..@ddddd ddddd@..@ddddd ddddd@..@ddddd EEEEE@..@EEEEE .............. .............. .............. .............. .............. Bonus: .............. .............. >>>>>....>>>>> >>l>>....>>l>> >>++>....>-->> +++++....----- +++++....----- ..++......--.. ..f........f.. .............. 55555....55555 55555....55555 .............. .............. .............. .............. .............. .............. Level: G Beat This... Bricks: .............. .....@..@..... .............. ....@.@@.@.... .............. ...@.@vv@.@... .....@vv@..... ...@.v@@v.@... .....@@@@..... ......vv...... ....@.@@.@.... .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ......55...... ......55...... .....5..5..... .............. ......55...... .............. .............. .............. .............. .............. .............. .............. .............. Level: G Boom Boxes II Bricks: .............. ..zzz.zzz.zzz. ..z*z.z*z.z*z. ..zzz.zzz.zzz. .............. .zzz.zzz.zzz.. .z*z.z*z.z*z.. .zzz.zzz.zzz.. .............. .............. .............. ..@..@..@..@.. .............. @.vvvvvvvvvv.@ .............. ..@..@..@..@.. .............. .............. Bonus: .............. ..555.bbb.555. ..5w5.bjb.5w5. ..555.bbb.555. .............. .bbb.555.bbb.. .bjb.5w5.bjb.. .bbb.555.bbb.. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G TCS #15 Bricks: !!!!!@@@@@@@@@ !!@@!@!!!!!!!@ !@@@!@!@@@@@@@ @@!@!@!@!!!!!! @!!@!@!@!!!!!! @!!@!@!@!!!!!! @@!@!@!@@@@@@@ !@!@!@!!!!!!!@ !@!@!@@@@@@!!@ !@!@!!!!!!@!!@ !@!@!!!!!!@!!@ !@!@!!!!!!@!!@ !@!@!!!!!!@!!@ @@!@@@!@@@@!!@ @!!!!@!@!!!!!@ @@@@@@!@!!!!!@ !!!!!!!@@@@@@@ #######g#####g Bonus: 55555......... 55..5.5555555. 5...5.5....... ..5.5.5.555555 .55.5.5.555555 .55.5.5.555555 ..5.5.5....... 5.5.5.5555555. 5.5.5......55. 5.5.555555.55. 5.5.555555.55. 5.5.555555.55. 5.5.555555.55. ..5...5....55. .5555.5.55555. ......5.55555. 5555555....... .......m.....m Level: Nethippy 2 Close 4U Bricks: .............. cccccccccccccc c............c c.cccccccccc.c c.c........c.c c.c.iiiiii.c.c c.c.i....i.c.c ..c.i.@@.i.c.. E.c.i....i.c.E .............. hhhhhhhhhhhhhh .............. E.!.!.!.!.!..E .............. !.!.!.!.!.!.!. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. 444444ll444444 4............4 4............4 4............4 4...555555...4 l...5....5...l ....5....5.... ..p.5....5.p.. .............. .............. .............. ..>.>.>.>.>... .............. >.>.>.>.>.>.>. .............. .............. .............. Level: Nethippy Bonus Round Bricks: eeeeeeeeeeeeee iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh Bonus: ljljljlljljljl 55555555555555 j555555555555j 55555555555555 55555555555555 j444444444444j 44444444444444 44444444444444 j444444444444j 33333333333333 33333333333333 j333333333333j 33333333333333 22222222222222 j222222222222j 11111111111111 11111111111111 j000000000000j Level: Nethippy Yellow Wall Bricks: .h.hhhhhhhh.h. h.h.h.hh.h.h.h .h.h.hhhh.h.h. h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh hhhhhhhhhhhhhh Bonus: .?.????????.?. ?.?.?.??.?.?.? .?.?.????.?.?. ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?????????????? Level: G Sideways Hourglass Bricks: .............. .............. !.@@cccccc@@.! !.@z@cccc@z@.! !.@zz@cc@zz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzzzzzzz@.! !.@zzz@@zzz@.! !.@zz@cc@zz@.! !.@z@cccc@z@.! !.@@cccccc@@.! .............. .............. Bonus: .............. .............. 23..444444..32 23.l.4444.l.32 23.55.mm.55.32 23.55555555.32 23.55555555.32 23.55555555.32 23.55555555.32 23.55555555.32 23.55555555.32 23.55555555.32 23.555..555.32 23.55.33.55.32 23.m.3333.m.32 23..333333..32 .............. .............. Level: Nethippy Symmetric Death Bricks: .............. .............. .!....vv....!. .....vvvv..... ....vvvvvv.... ddd.EEEEEE.ddd ddd........ddd dddd......dddd ddddE....Edddd ddddEEa.EEdddd hhhhhE..Ehhhhh hhhhhE.aEhhhhh hhhhhE..Ehhhhh hhhhhEa.Ehhhhh hhhhhE..Ehhhhh hhhhhE.aEhhhhh hhhhhE..Ehhhhh EEEEE@a.@EEEEE Bonus: .............. 5l5........5l5 5m5........5m5 555...mm...555 .....mmmm..... 555........555 555........555 5555......5555 5555......5555 5555..&...5555 55555....55555 55555..f.55555 55555....55555 55555.c..55555 55555....55555 55555..W.55555 55555....55555 ......>....... Level: Nethippy Evil Face Bricks: .............. .............. .E.E......E.E. .EhE......EhE. .EhE......EhE. .EEE......EEE. .....hhhh..... .....gggg..... .....ffff..... .............. .............. .............. .dddddddddddd. .dddddddddddd. .............. .............. .............. .............. Bonus: .............. .............. .............. ..f........f.. ..f........f.. .............. .............. .............. .............. .............. .............. .............. .>>>>>>>>>>>>. .>>>>>>>>>>>>. .............. .............. .............. .............. Level: G Utter Chaos Bricks: ..d.#@h.....d# .....#.@.d..d# .....h..#d...d d..#.@..d....d d..h...#.@...# .....@.##@..d. ...h..#d...d.# d....@#d....d. ...#..@......d d#hh..h#.#.... .#.h#h.#.###.. ...##@.h#d.#.. ....#..hd@h.h. .d...@.dd.d.dd .d.#.@d..hhhh. .dd.d.......d. ...#...#.....# ...#.#.......@ Bonus: ..5...5.....5. .........5..5. .....5...5...5 5.......5....5 5..5.......... ............5. ...5...5...5.. 5......5....5. .............5 5.55..l....... ...5.l........ .......5.5.... .......55.5.5. .5.....55.5.55 .5....5..5555. .55.5.......5. .............. .............. Level: G Green Spiral Bricks: zzzzzzzzzzzzzz z............z z............z z.zzzzzzzzzz.z z.z........z.z z.z........z.z z.z.zzzzzz.z.z z.z.z....z.z.z z.z.z....z.z.z z.z.z.z..z.z.z z.z.z.z..z.z.z z.z.z.zzzz.z.z z.z.z......z.z z.z.z......z.z z.z.zzzzzzzz.z z.z..........z z.z..........z z.zzzzzzzzzzzz Bonus: 44444444444444 4............4 4............4 4.4444444444.4 4.4........4.4 4.4........4.4 4.4.444444.4.4 4.4.4....4.4.4 4.4.4....4.4.4 4.4.4.4..4.4.4 4.4.4.4..4.4.4 4.4.4.4444.4.4 4.4.4......4.4 4.4.4......4.4 4.4.44444444.4 4.4..........4 4.4..........4 4.444444444444 Level: G Pure Evil Bricks: @@.cccccccc.@@ @..c......c..@ @..c.zzzz.c..@ @.cc.z!!z.cc.@ @.c..z!!z..c.@ @.c.zz!!zz.c.@ @.c.z!!!!z.c.@ @.c.z!!!!z.c.@ @.c.zz!!zz.c.@ @.c..z!!z..c.@ @.cc.zzzz.cc.@ @..c......c..@ @@.cccccccc.@@ z@..........@z .@@@@....@@@@. ...@......@... @..@......@..@ @@.@@.@@.@@.@@ Bonus: l.....mm.....l .............. .....4444..... .....4554..... .....4554..... ....445544.... ....455554.... ....455554.... ....445544.... .....4554..... .....4444..... .............. ...>>>>>>>>... .............. .............. .............. .............. .............. Level: G Death Star Explodes Bricks: .............. ......**...... .....****..... ....******.... ...********... ..**********.. .************. .*****.******. .****...*****. .*****.******. .************. .************. .************. ..**********.. ...********... ....******.... .....****..... ......**...... Bonus: .............. .............. .............. .............. .............. ...55555555... ..5555555555.. ..5555.55555.. ..555...5555.. ..5555.55555.. ..5555555555.. ..5555555555.. ..5555555555.. ...55555555... ....555555.... .....5555..... .....j........ .............. Level: G Guarded Center Bricks: .............. j.j.E.j.E.j.j. .............. .j.j.j.j.j.j.j .............. j.j.E.j.E.j.j. .............. .j.j.j.j.j.j.j .............. j.j.E.j.E.j.j. .............. .j.j.j.j.j.j.j .............. j.j.E.j.E.j.j. .............. .j.j.j.j.j.j.j .............. j.j.E.j.E.j.j. Bonus: .............. ......5....... .............. .....5.5...... .............. ......5....... .............. .....5.5...... .............. ......5....... .............. .....5.5...... .............. ......5....... .............. .....5.5...... .............. ......5....... Level: G Thirsty? Bricks: .............. .............. .............. .............. .............. ....#....#.... ...#iiiiii#.#. ..#ii#ii#i##v# ..#iiiiiii#vv# ..#i#iiii##vv# ..#ii####i#vv# ..#iiiiiii###. ...#iiiiii#... ....#iiii#.... .....####..... ......#.#..... .....##.##.... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. ............5. ...........55. ........m..55. .........5.55. ...3333445.... ....444455.... .....5555..... .............. .............. .............. .............. Level: G Puzzle Finale Bricks: ###.###.###.## #!#.#!#.#!#.#! ###.###.###.## ...j...j...j.. ###.###.###.## #!#.#!#.#!#.#! ###.###.###.## ...j...j...j.. ###.###.###.## #!#.#!#.#!#.#! ###.###.###.## ...j...j...j.. ###.###.###.## #!#.#!#.#!#.#! ###.###.###.## .............. .............. .............. Bonus: .............. m............. .............. .......m...... .............m .............. .............. .............. .............. .............. .............. .......m...... .............. .............. .............. .............. .............. .............. Level: Nethippy Hard Walls Bricks: .............. .............. .............. .............. .............. cccccccccccccc dddddddddddddd cccccccccccccc .............. cccccccccccccc jjjjjjjjjjjjjj cccccccccccccc .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. l....*..<..... .............. ...?.b........ .............. b............. ........s..... ...<.?........ .............. .............. .............. .............. .............. .............. Level: G TCS #20 Bricks: @@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@!!!!@@!!!!@@ @@@@@@@@@@@@@@ g@@@@@@@@@@@@g Bonus: jjjjjjjjjjjjjj }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }55555ll55555g }55555ll55555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g }555555555555g m555555555555m Level: Nethippy Pot-O-Gold Bricks: .............. .............. .............. .cccc......... EhhhhE........ EggggE........ EddddE........ EeeeeE........ .EEEE......... .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .5555......... .5555......... .5555......... .5555......... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Symmetry II Bricks: EEE#..jj..#EEE Ehj#......#jhE Ehj#.!..!.#jhE EhjE......EjhE EhjEjE..EjEjhE EhjEjE..EjEjhE EhjEjE..EjEjhE Eh.###..###.hE Eh..........hE Eh.###..###.hE EhjEjE..EjEjhE EhjEjE..EjEjhE EhjEjE..EjEjhE EhjE......EjhE EhjE.!..!.EjhE Ehj#......#jhE Ehj#..jj..#jhE EEEE......EEEE Bonus: .............. .55.555555.55. .55.5.55.5.55. .55.555555.55. .55........55. .55........55. .55........55. .5..........5. .m..........5. .5..........5. .55........55. .55........55. .55........55. .55.555555.55. .55.5.55.5.55. .55.555555.55. .55...55...55. .............. Level: G Chaotic Edges Bricks: .............. @.h.h.h.h.h.h. .............. .h.h.h.h.h.h.@ .............. @.h.h.h.h.h.h. .............. .h.h.h.h.h.h.@ .............. @.h.h.h.h.h.h. .............. .h.h.h.h.h.h.@ .............. @.h.h.h.h.h.h. .............. .h.h.h.h.h.h.@ .............. @.h.h.h.h.h.h. Bonus: .............. ..5.5.5.5.5.5. .............. .5............ .............. ..5.........5. .............. .5............ .............. ..5.........5. .............. .5............ .............. ..5.........5. .............. .5............ .............. ..5.........5. Level: Nethippy I.M.I. Bricks: .............. .............. d.EEiiiiiiEE.d d.EgEiiiiEgE.d d.E..EiiE..E.d d.E...zz...E.d d.E...dd...E.d d.E...dd...E.d d.E........E.d d.E........E.d d.E........E.d d.E........E.d d.E........E.d d.E........E.d d.Eg......gE.d dEEE......EEEd v............v .............. Bonus: .............. .............. 3...555555...3 3....5555....3 3.....55.....3 3............3 3.....>>.....3 3.....--.....3 3............3 3............3 3............3 3............3 3............3 3............3 3............3 3............3 f............f .............. Level: G Red Dragon Bricks: .............. ............d. ...........ddd ..........dd.d .......ddddddd .....h.ddddddd ......h.....d. .hhhhhhh....d. ......h.....d. .ggg.h.....dd. .ggg......ddd. .ggg.....ddddd .ggg.....dd.dd .........d...d .........dd.dd .........ddddd ...........d.. ...........ddd Bonus: .............. ............0. ...........0>0 ..........0>.> .......00000>0 .......0000000 ............0. .......j....0. ............0. ...........00. ..p.......000. ..p......00000 .........0?.?0 .........0...0 .........0?.?0 .........00000 ...........0.. ...........000 Level: G Columns Bricks: .............. .............. .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .............. .............. Bonus: .............. .............. .l.}.>.-.c.-.+ .s.3.1.W.1.}.} .>.c.s.2.3.c.s .1.2.3.}.s.3.0 .}.-.-.1.0.f.> .f.f.c.f.>.1.- .3.1.2.+.-.s.1 .{.b.b.3.b.b.f .c.s.0.s.2.0.3 .2.>.f.b.f.{.b .+.0.+.0.}.+.2 .-.W.}.>.{.2.c .b.+.{.c.+.>.{ .0.{.W.{.W.W.~ .............. .............. Level: G TCS #13 Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! @@@@@@@@@@@@@@ @@@E@@@@@@E@@@ @@@@@@EE@@@@@@ E@@@@@@@@@@@@E @@@@@@@@@@@@@@ g@@@@@@@@@@@@g Bonus: jjjjjjjjjjjjjj 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 .}}}}}}}}}}}}. ....gggggg.... .............. .............. .............. m............m Level: Nethippy Megawall Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj dddddddddddddd dddddddddddddd .............. .@.@.@.@.@.@.@ .............. hhhhhhhhhhhhhh hhhhhhhhhhhhhh iiiiiiiiiiiiii iiiiiiiiiiiiii .............. !.!.!.!.!.!.!. .............. ffffffffffffff ffffffffffffff gggggggggggggg gggggggggggggg Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 .............. .............. .............. l............l wffffffffffffw wffffffffffffw l............l .............. 5.5.5.5.5.5.5. .............. ?.....bb.....? ?.....bb.....? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: Nethippy Fire Away! Bricks: .............. !!!!!!!!!!!!!! cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc .............. Bonus: ffffffllffffff jjjjjjjjjjjjjj 55555555555555 55555555555555 44444444444444 44444444444444 33333333333333 f33333ff33333f 33333333333333 22222222222222 22222222222222 22222222222222 22222222222222 }&}&}&}&}&}&}& pppppppppppppp pppppppppppppp pppppppppppppp .............. Level: Nethippy Arrrgh! Bricks: iiiiiiiiiiiiii .............. iiEEEEEEEEEEEE .............E gggggggggggggg E............. EEEEEEEEEEEEgg E............. hhhhhhhhhhhhhh .............E hhEEEEEEEEEEEE .............. dddddddddddddd E............. EEEEEEEEEEEEdd .............. .............. .............. Bonus: .............. .............. b............. .............. l5555555555555 .............. .............b .............. 4444444444444> .............. b............. .............. >............. .............. .............. .............. .............. .............. Level: G Pursuing Vader's Fighter Bricks: .............. .............. .............. .............. .............. .............. .....c..c..... ....c....c.... ....c.cc.c.... ....cccccc.... ....c.cc.c.... ....c....c.... .....c..c..... .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .....{..{..... ....~....~.... ....W.>>.W.... ....ff>>ff.... ....W.>>.W.... ....~....~.... .....{..{..... .............. .............. .............. .............. .............. Level: G TCS #10 Bricks: ##!!##!!##!!## #!!##!!##!!##! !!##!!##!!##!! !##!!##!!##!!# ##!!##!!##!!## #!!##!!##!!##! !!##!!##!!##!! !##!!##!!##!!# ##!!##!!##!!## #!!##!!##!!##! !!##!!##!!##!! !##!!##!!##!!# ##!!##!!##!!## #!!##!!##!!##! !!##!!##!!##!! !##!!##!!##!!# ##!!##!!##!!## g############g Bonus: ..55..55..55.. .55..55..55..5 55..55..55..55 5..55..55..55. ..55..55..55.. .55..55..55..5 55..55..55..55 5..55..55..55. ..55..55..55.. .55..55..55..5 55..55..55..55 5..55..55..55. ..55..55..55.. .55..55..55..g 55..55..55..}g 5..55..55..}}. ..55..55..gg.. m............m Level: Nethippy R.I.P. Bricks: ....h......h.. .............. .h.h..ee.h.... ......ee...hh. ....eeeeee.... ..h.eeeeee.... ......ee..h..h ....h.ee...h.. .h....ee.....h ......ee...... aaaaaaaaaaaaaa bbbbbbbbbbbbbb cccccccccccccc .............. .............. ffffffffffffff dddddddddddddd kkkkkkkkkkkkkk Bonus: ....m......m.. .............. .m.m..55.m.... ......55...mm. ....555555.... ..m.555555.... ......55..m..m ....m.55...m.. .m....55.....m ......55...... l555555555555l }555555555555} }555555555555} .............. .............. fbf~fcfdf~fbfb bfbfbfdfcfbfbf >>>>>>>>>>>>>> Level: Nethippy Huge Invisible Wall Bricks: hhhhhhhhhhhhhh vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 wbwbwbwbwbwbwb bwbwbwbwbwbwbw }}}}}}}}}}}}}} >>>>..++..>>>> Level: G Aim Carefully! Bricks: g@....gg....@g @@...@gg@...@@ .....@@@@..... .!..@....@..!. ......@@...... .....@gg@..... .!..........!. ......@@...... .............. .!..........!. ...@......@... ..@..@..@..@.. @@..........@@ .....!..!..... .............. .............. ..!..!..!..!.. .............. Bonus: m.....mm.....m ......mm...... 555........555 5.5........5.5 555........555 555...ff...555 5.5........5.5 555........555 555........555 5.5........5.5 555........555 .............. ....555555.... ....5.55.5.... ....555555.... .555555555555. .5.55.55.55.5. .555555555555. Level: G CrazyFace Bricks: .............. .............. .....vvvv..... ..@@vvvvvv@@.. ..@@vvvvvv@@.. ..vvvv@@vvvv.. ..vvvv@@vvvv.. ..vvvv@@vvvv.. ..vvvv@@vvvv.. ..@@vvvvvv@@.. ..@@vvvvvv@@.. ...@@vvvv@@... ....@@@@@@.... .............. .............. .............. .............. .............. Bonus: .............. .............. .....5555..... ....555555.... ....555555.... ..5555..5555.. ..5555..5555.. ..5555..5555.. ..5555..5555.. ....55ll55.... ....55mm55.... .....5555..... .............. .............. .............. .............. .............. .............. Level: Nethippy Boxed In! Bricks: E@EEEE@@EEEE@E EfffffkkfffffE EjffffkkffffjE EejfffkkfffjeE EiejffkkffjeiE EgiejfkkfjeigE EggiejkkjeiggE EgggiejjeigggE EggggieeiggggE EgggggiigggggE EggggggggggggE EiiiiiiiiiiiiE EdddddiidddddE Edh@hdiidh@hdE EdhhhdiidhhhdE EdhhhdiidhhhdE Ed@h@diid@h@dE EE.v.E@@E.v.EE Bonus: .............. .b..........b. .555555555555. .555555555555. .>5555555555>. .555555555555. .555555555555. .>5555555555>. .555555555555. .555555555555. .>5555555555>. .555555555555. .555555555555. .>}.}5555}.}>. .w}w}5555}w}w. .w}}}5555}}}w. .b.l.5mm5.l.b. ...>......>... Level: G TCS #19 Bricks: @@@@@@@@@@@@@@ @@!!!!!!!!!!@@ @@!!!!!!!!!!@@ @@!@@@@@@@@!@@ @@!@!!!!!!@!@@ @@!@!!!!!!@!@@ @@!@!@@@@!@!@@ @@!@!@!!@!@!@@ @@!@!@!!@!@!@@ @@!@!@!!@!@!@@ @@!@!@!!@!@!@@ @@!@!@@@@!@!@@ @@!@!!!!!!@!@@ @@!@!!!!!!@!@@ @@!@@@@@@@@!@@ @@!!!!!!!!!!@@ @@!!!!!!!!!!@@ g@@@@@@@@@@@@g Bonus: ..jjjjjjjjjj.. g.5555555555.} g.5555555555.} g.5........5.} g.5.555555.5.} g.5.555555.5.} g.5.5....5.5.} g.5.5.55.5.5.} g.5.5.55.5.5.} g.5.5.55.5.5.} g.5.5.55.5.5.} g.5.5....5.5.} g.5.555555.5.} g.5.555555.5.} g.5........5.} g.5555555555.} ..5555555555.. m............m Level: Nethippy V-Boom! Bricks: .............. *!!!!!!!!!!!!* *!!!!!!!!!!!!* !*!!!!!!!!!!*! !*!!!!!!!!!!*! !!*!!!!!!!!*!! !!*!!!!!!!!*!! !!!*!!!!!!*!!! !!!*!!!!!!*!!! !!!!*!!!!*!!!! !!!!*!!!!*!!!! !!!!!*!!*!!!!! !!!!!*!!*!!!!! @@@@@@**@@@@@@ .............. .............. .............. .............. Bonus: lll...pp...lll 54...pmmp...45 553..f..f..355 554........455 4553......3554 3554......455. .4553....3554. .3554....455.. ..4553..3554.. ..355433455... ...45544554... .f.3555555..f. m...455554...m ......55...... .............. .............. .............. .............. Level: G Ridiculousness Bricks: ...@cccccc@... .z.@.bbbb.@.z. ...@..aa..@... .z.@......@.z. ...@......@... .@@@......@@@. .@..........@. .@...@vv@...@. .@.!.@..@.!.@. .@...@..@...@. .@.!.@vv@.!.@. .@...@..@...@. .@.!.@..@.!.@. .@...@vv@...@. .@.!.@..@.!.@. .@...@..@...@. .@@@@@vv@@@@@. .............. Bonus: ....l5mm5l.... .5...5jj5...5. ......55...... .5..........5. .............. .............. .............. ..555.~f.555.. ..5.5....5.5.. ..555....555.. ..5.5.f~.5.5.. ..555....555.. ..5.5....5.5.. ..555.~f.555.. ..5.5....5.5.. ..555....555.. ......f~...... .............. Level: G Invisible Bricks: .............. v.v.v.v.v.v.v. .............. .v.v.v.v.v.v.v .............. v.v.v.v.v.v.v. .............. .v.v.v.v.v.v.v .............. v.v.v.v.v.v.v. .............. .v.v.v.v.v.v.v .............. v.v.v.v.v.v.v. .............. .v.v.v.v.v.v.v .............. v.v.v.v.v.v.v. Bonus: .............. 5.5.5.5.5.5.5. .............. .5.5.5.5.5.5.5 .............. 5.5.5.5.5.5.5. .............. .5.5.5.5.5.5.5 .............. 5.5.5.5.5.5.5. .............. .5.5.5.5.5.5.5 .............. 5.5.5.5.5.5.5. .............. .5.5.5.5.5.5.5 .............. 5.5.5.5.5.5.5. Level: Nethippy Hell-O-Ween Bricks: .............. ......yy...... ......yy...... ...eeeyyeee... ..eeeeeeeeee.. .eeeeeeeeeeee. .eee@eeee@eee. .ee@@@ee@@@ee. .eeeee@@eeeee. .e@e@e@@e@e@e. .e@@@eeee@@@e. .ee@@@@@@@@ee. .eee@e@@e@eee. ..eeeeeeeeee.. ...eeeeeeee... .....eeee..... .............. .............. Bonus: .............. ......ll...... .............. ......mm...... .............. .............. .....f..f..... ......>>...... ...555..555... ...5.5..5.5... .....5555..... .............. ..>..f..f..>.. ...>>>>>>>>... .............. .............. .............. .............. Level: Nethippy Big Z Bricks: .............. .############. .!!!!!!!!!!!#. !!!!!!!!!!!!#. !!!!!!!!!!!!#. !!!!!!!!!!!#.. !!!!!!!!!!#... !!!!!!!!!#.... !!!!!!!!#...#! !!!!!!!#...#!! !!!!!!#...#!!! !!!!!#...#!!!! !!!!#...#!!!!! !!!#...#!!!!!! !!#...#!!!!!!! !#...#!!!!!!!! #...#!!!!!!!!! ...########### Bonus: .............. m............. m55555555555.. 555555555555.. 555555555555.. 55555555555.m. 5555555555.m.. 555555555.m..m 55555555.m..mm 5555555.m..m55 555555.m..m555 55555.m..m5555 5555.m..m55555 555.m..m555555 55.m..m5555555 5.m..m55555555 .m..m555555555 .............. Level: Nethippy Green Wall Bricks: ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? Level: G Got Balls? Bricks: zzzzzzzzzzzzzz ############## .!..!..!..!..! .#.#.#.#.#.#.# ...!..!..!..!. #.#.#.#.#.#.#. .............. @@@@..EE..@@@@ cccccccccccccc .............. cccccccccccccc .............. .............. .............. .............. .............. .............. .............. Bonus: 55555555555555 .............. .m..l.....l..m .............. .............. .............. .............. .............. wbbbbbbbbbbbbw .............. bbbbbbbbbbbbbb .............. .............. .............. .............. .............. .............. .............. Level: G Chaotic Order Bricks: .............. E.E.E.E.E.E.E. .............. .E.E.E.E.E.E.E .............. z.z.z.z.z.z.z. .............. .z.z.z.z.z.z.z .............. @.@.@.@.@.@.@. .............. .@.@.@.@.@.@.@ .............. #.#.#.#.#.#.#. .............. .#.#.#.#.#.#.# .............. #.#.#.#.#.#.#. Bonus: .............. .............. .............. .............. .............. m............. .............. .............m .............. 4.4.4.4.4.4.4. .............. .4.4.4.4.4.4.4 .............. 5.5.5.5.5.5.5. .............. .5.5.5.l.5.5.5 .............. 5.5.5.5.5.5.5. Level: G TCS #18 Bricks: g############g .#!!!!!!!!!!#. .#!!!!!!!!!!#. .#####!!#####. .#!!!#!!#!!!#. .#!!!#!!#!!!#. .###!#!!#!###. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .#!#!#!!#!#!#. .############. .############. Bonus: m............m ..5555555555.. ..5555555555.. ......55...... ..555.55.555.. ..555.55.555.. ....5.55.5.... ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5.55.5.5.. ..5.5g55g5.5.. ....}gggg}.... ....}}}}}}.... Level: G Layer By Layer Bricks: zzzzzzzzzzzzzz z************z z*..........*z z*.zzzzzzzz.*z z*.z******z.*z z*.z*....*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*....*z.*z z*.z******z.*z z*.zzzzzzzz.*z z*..........*z z************z zzzzzzzzzzzzzz Bonus: .............. .222222222222. .2..........2. .2..........2. .2..444444..2. .2..4....4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4....4..2. .2..444444..2. .2.WWWWWWWW.2. .2..........2. .222222222222. >>>>>>>>>>>>>> Level: G PaintBox Bricks: @@@@@@@@@@@@@@ @h@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@!!!!!!!!!!@ @.@@@@@@@@@@@@ Bonus: l......ll....l .m.}}555555gm. ...}5555555gg. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...5555555555. ...gg5555555}. ...mg555555}}. .............. Level: Nethippy Keep 'em Blue! Bricks: .............. ggggggggggggg. gE@EEEEEEE@Eg. g@hhhhhhhhh@g. gEh@@@@@@@hEg. gEh@iiiii@hEg. gEh@i@E@i@h@g. gEh@iEiEi@h@g. gEh@iE@Ei@hEg. gEh@iiiii@hEg. gEh@@@@@@@hEg. g@hhhhhhhhh@g. gE@EEEEEEE@Eg. ggggggggggggg. .............. .............. .............. .............. Bonus: .............. mm555555555mm. m...........m. 5.mm55555mm.5. 5.m...m...m.5. 5.5.mm5mm.5.5. 5.5.m...m.5.5. 5.5.5...5.5.5. 5.5.m...m.5.5. 5.5.mm5mm.5.5. 5.m.......m.5. 5.mm55555mm.5. m...........m. mm555555555mm. .............. .............. .............. .............. Level: Nethippy WonderWall Bricks: feggggggggggef fegddddddddgef fegdhhhhhhdgef fegdhiiiihdgef fegdhiiiihdgef fegdhiiiihdgef fegdhhiihhdgef fegddhiihddgef feggdhiihdggef feegdhiihdgeef ffegdhiihdgeff jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj jfegdhiihdgefj Bonus: .............. 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? Level: Nethippy Tree Of Doom Bricks: .............. .............. .......xx..... ....x.x....... ..x..x....x... ...x..x..xx... ...x.x.x.x.x.. ..xx..xx.x.... .xx.x.xx.xxxx. .x...xxxx.x..x x...x.xxx..x.. ....x.xx.x.... ......xx.x.... ......xx...... ......xx...... ......xx...... eeeeeeeeeeeeee eeeeeeeeeeeeee Bonus: .............. .............. .......f5..... ....5.f....... ..5..f....5... ...f..5..ff... ...f.5.5.f.5.. ..ff..55.f.... .ff.f.55.ffff. .f...5555.f..5 5...f.555..5.. ....5.55.f.... ......55.5.... ......55...... ......mm...... ......mm...... w>>>>>>>>>>>>w >>>>>>>>>>>>>> Level: Nethippy 142 Bricks: .............. cccccccccccccc c............c c..c.c.c.ccc.c c.cc.c.c...c.c c..c.c.c...c.c c..c.c.c.ccc.c c..c.ccc.c...c c..c...c.c...c c..c...c.c...c c.ccc..c.ccc.c c............c cccccccccccccc .............. .............. .............. .............. .............. Bonus: .............. >>>>>>>>>>>>>> >............> >..5.5.5.555.> >.55.5.5...5.> >..5.5.5...5.> >..5.5.5.555.> >..5.555.5...> >..5...5.5...> >..5...5.5...> >.555..5.555.> >............> >>>>>>>>>>>>>> .............. .............. .............. .............. .............. Level: Nethippy FreeZe BottOm Bricks: ..!!!!!!!!!!.. .c*........*c. .c*!!!!!!!!*c. .c*........*c. .c*!!!!!!!!*c. .c*........*c. .c*!!!!!!!!*c. .c*........*c. .c*!!!!!!!!*c. .c*........*c. .c*!!!!!!!!*c. .c*........*c. .c*!!!!!!!!*c. .c*........*c. .c*!!!!!!!!*c. .c!!!!!!!!!!c. .cccccccccccc. .cccccccccccc. Bonus: .............. .5.44444444.5. .5..........5. .5.44444444.5. .5..........5. .5.44444444.5. .5..........5. .5.44444444.5. .5..........5. .5.44444444.5. .5..........5. .5.44444444.5. .5..........5. .5.44444444.5. .5....mm....5. .5....mm....5. .fff..mm..fff. ....ffffff.... Level: G TCS #14 Bricks: !!!!#!!!!#!!!! #####!!!!##### !!!!#!!!!#!!!! !!!!######!!!! !!!!!!!!!!!!!! #!!!!!!!!!!!!# ##!!!!!!!!!!## ###!!!!!!!!### ####!!!!!!#### #####!!!!##### ######!!###### #!##########!# #!!########!!# #!!!######!!!# #!!!!####!!!!# #!!!!!##!!!!!# #!!!!!!!!!!!!# g############g Bonus: jjjj.5555.jjjj .....5555..... 5555.5555.5555 5555......5555 55555555555555 .555555555555. ..5555555555.. ...55555555... ....555555.... .....5555..... .....g55g..... .5...g55g...5. .55..g55g..55. .555.g}}g.555. .5555g}}g5555. .55555..55555. .555555555555. m............m Level: G Green Cheese Bricks: zzzzzzzzzzzzzz zzvzzzzzzzzvzz zzzzzzzzzzzzzz zzzzvzzzzzzzzz zzvzzzzzzzzzzz zzzzzzzzvzzzzz zzzzzzzzzzzzvz zzzvzzzzzzzzzz zzzzzzvzzzzzzz zzzzzzzzzzzzzz zvzzzzzzzzzzzv zzzzzzzzzzzzzz zzzzzzzzzzvzzz zzzzvzzzzzzzzz zzzzzzzzvzzzzz zvzzzzvzzzzvzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz Bonus: l.....ll.....l 55b55555555m55 55555555555555 5555w555555555 55b55555555555 55555555w55555 555555555555b5 555b5555555555 555555w5555555 55555555555555 5b55555555555b 55555555555555 5555555555b555 5555w555555555 55555555b55555 5w5555b5555w55 55555555555555 55555555555555 Level: Nethippy A Ton Of Points! Bricks: *************. *!.!*!.!*!.!*! *...*...*...*. *!.!*!.!*!.!*! *...*...*...*. *!.!*!.!*!.!*! *...*...*...*. *!.!*!.!*!.!*! *...*...*...*. *!.!*!.!*!.!*! *...*...*...*. *!.!*!.!*!.!*! *...*...*...*. *!.!*!.!*!.!*! *...*...*...*. *vvv*vvv*vvv*v .............. .............. Bonus: .............5 ..5...5...5... .555.555.555.5 ..5...5...5... .555.555.555.5 ..5...5...5... .555.555.555.5 ..5...5...5... .555.555.555.5 ..5...5...5... .555.555.555.5 ..5...5...5... .555.555.555.5 ..5...5...5... .555.555.555.5 .............l .............. .............. Level: Nethippy Spiral Bricks: !!!!!!!!!!!!!! !************! !*!!!!!!!!!!*! !*!********!*! !*!*!!!!!!*!*! !*!*!****!*!*! !*!*!*!!*!*!*! !*!*!*!**!*!*! !*!*!*!**!*!*! !*!*!*!**!*!*! !*!*!*!**!*!*! !*!*!*!**!*!*! !*!*!*!**!*!*! !*!*!*!!!!*!*! !*!*!******!*! !*!*!!!!!!!!*! !*!**********! !*!!!!!!!!!!!! Bonus: 00000000000000 0>>>>>>>>>>>>1 0>2222222222>1 0>2>>>>>>>>3>1 0>2>444444>3>1 0>2>4>>>>5>3>1 0>2>4>gl>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>gb>5>3>1 0>2>4>5555>3>1 0>2>4>>>>>>3>1 0>2>33333333>1 0>2>>>>>>>>>>1 0>111111111111 Level: G Secret Center Bricks: .............. .............. c.!.c@cc@c.!.c .....@cc@..... .!.!.@cc@.!.!. .....@cc@..... c.!.c@cc@c.!.c .....@cc@..... .!.!.@cc@.!.!. .....@cc@..... c.!.c@cc@c.!.c .....@cc@..... .!.!.@cc@.!.!. .....@cc@..... c.!.c@cc@c.!.c .....@cc@..... .@.@.@cc@.@.@. .............. Bonus: .............. .555......555. l5.5..55..5.5l 55555.55.55555 5.5.5.55.5.5.5 55555.55.55555 .5.5..55..5.5. 55555.55.55555 5.5.5.55.5.5.5 55555.mm.55555 .5.5..55..5.5. 55555.55.55555 5.5.5.55.5.5.5 55555.55.55555 .5.5..55..5.5. .555..55..555. ......55...... .............. Level: Nethippy Break On Thru! Bricks: ffffffffffffff ############## ############## ############## ############## ############## #######!###### ######!!!##### #####!!!!!#### ######!!!##### #######!###### ############## ############## ############## ############## ############## ############## gggggggggggggg Bonus: WWWWWWWWWWWWWW 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 mmmmmmmmmmmmmm mmmmmmmmmmmmmm Level: G TCS #8 Bricks: !!!!zEEEEz!!!! !!!!z!!!!z!!!! @@@@z!!!!z@@@@ !!!!z!!!!z!!!! !!!!zEEEEz!!!! !!!!z!!!!z!!!! @@@@z!!!!z@@@@ !!!!z!!!!z!!!! !!!!zEEEEz!!!! !!!!z!!!!z!!!! @@@@z!!!!z@@@@ !!!!z!!!!z!!!! !!!!zEEEEz!!!! !!!!z!!!!z!!!! @@@@z!!!!z@@@@ !!!!z!!!!z!!!! !!!!zEEEEz!!!! #####aaaa##### Bonus: 5555l....l5555 55555555555555 ....555555.... 55555555555555 55555....55555 55555555555555 ....555555.... 55555555555555 55555....55555 55555555555555 ....555555.... 55555gggg55555 55555....55555 55555555555555 ....}5555}.... 5555}5555}5555 5555}....}5555 .....mppm..... Level: Nethippy Easy My Butt Bricks: .............. .............. .............. .............. aaaaaaaaaaaaaa ************** aaaaaaaaaaaaaa .............. aaaaaaaaaaaaaa ************** aaaaaaaaaaaaaa .............. aaaaaaaaaaaaaa ************** aaaaaaaaaaaaaa .............. .............. .............. Bonus: .............. .............. .............. .............. ffffffff..ffff .............. ffffff...fffff .............. ffff...fffffff .............. fff...ffffffff .............. ffffff...fffff .............. ffff...fffffff .............. .............. .............. Level: Nethippy Balls A Plenty Bricks: hhhhhgffgddddd hhhhhgffgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhgjjgddddd hhhhhggggddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiggiddddd hhhhhiiiiddddd .............. Bonus: .............. 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} wwwwwwwwwwwwww 55555555555555 55555555555555 55555555555555 55555555555555 bbbbbbbbbbbbbb bbbbbbbbbbbbbb .............. Level: G Green Spiral II Bricks: ..z.z.z.z.z.z. .z.z.z.z.z.z.z .############. .#.z.z.z.z.z#. .#z.z.z.z.z.#. .#.########.#. .#.#.z.z.z#.#. .#.#z.z.z.#.#. .#.#.####.#.#. .#.#.#.z.z#.#. .#.#.#z.z.#.#. .#.#.######.#. .#.#z.z.z.z.#. .#.#.z.z.z.z#. .#.##########. .#.z.z.z.z.z.z .#z.z.z.z.z.z. .############# Bonus: ..2.2.2.2.2.2. .w.b.w.b.w.b.w .555555555555. .5.b.b.b.b.b5. .52.2.2.2.2.5. .5.55555555.5. .5.5.b.b.b5.5. .5.52.2.2.5.5. .5.5.5555.5.5. .5.5.5.b.m5.5. .5.5.52.2.5.5. .5.5.555555.5. .5.5b.b.b.b.5. .5.5.2.2.2.25. .5.5555555555. .5.w.b.w.b.w.b .52.2.2.2.2.2. .5555555555555 Level: G Pattern Bricks: .............. .............. .............. ......cc...... ...cc....cc... ...cc....cc... .............. ..c..c..c..c.. .cc...cc...cc. ..c...cc...c.. .....c..c..... .............. ...cc....cc... ...cc....cc... ......cc...... .............. .............. .............. Bonus: .............. .............. .............. ......ll...... ...bb....WW... ...b>....>W... .............. ..&..>..>..&.. .fw...55...wf. ..s...55...s.. .....>..>..... .............. ...W>....>b... ...WW....bb... ......??...... .............. .............. .............. Level: G Hard Middle Bricks: a.a.a.a.a.a.a. .............. .a.a.a.a.a.a.a .............. a.b.b.b.b.b.a. .............. .a.b.b.b.b.b.a .............. a.b.c.c.c.b.a. .............. .a.b.c.c.c.b.a .............. a.b.c.v.c.b.a. .............. .a.b.c.v.c.b.a .............. a.b.c.v.c.b.a. .............. Bonus: 2.2.2.2.2.2.2. .............. .2.2.2.2.2.2.2 .............. 2.3.3.3.3.3.2. .............. .2.3.3.3.3.3.2 .............. 2.3.4.4.4.3.2. .............. .2.3.4.4.4.3.2 .............. 2.3.4.5.4.3.2. .............. .2.3.4.5.4.3.2 .............. 2.3.4.5.4.3.2. .............. Level: Nethippy Not Pretty Bricks: .............. .............. .............. jjjjjjjjjjjjjj jjjjjjjjjjjjjj EEEEcEEEEcEEEE EddE..EE..EddE E............E E............E E............E EiiEii..iiEiiE EccEEE..EEEccE .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. l555555555555l <555555555555< ....>....>.... .>>........>>. .............. .............. .............. .>>.>>..>>.>>. .>>........>>. .............. .............. .............. .............. .............. .............. Level: G Chaos Bricks: ......df.....h g.i..dfk...h.. ..i.d.f.k.h..# .gi.df...k.... ..gd###h....#. .#.dfchc..k... #.dfihi..i.ki. ...fgi##....k. .#f###i..ii... ...hc#......k. ...h##g.....k. ..h..###g##... ..h......#gg.. ..h......####g .............. .............. .............. .............. Bonus: .............m .............. .............. .............. .............. .....5........ .............. .............. .............. ....5......... .............. .............. ..........5... .............. .............. .............. .............. .............. Level: G Stained Glass Bricks: cccccccccccccc chhhhhhcgggggc chhhhhhcgggggc chhhhhhcgggggc chhhhhhcgggggc chhhhhhcgggggc chhhhhhcgggggc chhhhhhcgggggc chhhhhccgggggc cccccccccccccc ciiiiicddddddc ciiiiicddddddc ciiiiicddddddc ciiiiicddddddc ciiiiicddddddc ciiiiicddddddc ciiiiicddddddc cccccccccccccc Bonus: .............. .bbbbbb.wwwww. .b5555b.w555w. .b5555b.w555w. .b5555b.w555w. .b5555b.w555w. .b5555b.w555w. .b555bb.w555w. .bbbbb}}wwwww. ......}}...... .fffff.>>>>>>. .f555f.>5555>. .f555f.>5555>. .f555f.>5555>. .f555f.>5555>. .f555f.>5555>. .fffff.>>>>>>. .............. Level: G Tricky! Bricks: ...#!....!#... .!.#......#.!. .!.#..##..#.!. .....#..#..... ##..##!!##..## .....#..#..... .###.#!!#.###. ...#......#... .!.#......#.!. ...#......#... .!.#......#.!. ...#......#... ####......#### @............@ .............. .............. .............. .............. Bonus: 555..5..5..555 5.5.55..55.5.5 5.5........5.5 555...55...555 .............. ......55...... .............. 555...55...555 5.5........5.5 555........555 5.5........5.5 555........555 .............. .............. .............. .............. .............. .............. Level: G Oddity Bricks: .#.d.d.dd.d.#. .............. #.#.d.dd.d.#.# .............. .#.#.d.dd.#.#. .............. .............. #.#.#.##.#.#.# .............. .............. .#.#.d.dd.#.#. .............. .............. #.#.d.dd.d.#.# .............. .............. .#.d.d.dd.d.#. .............. Bonus: ...5.5.55.5... .............. ....5.55.5.... .............. .....5.55..... .............. .............. .............. .............. .............. .....4.44..... .............. .............. ....4.44.4.... .............. .............. ...4.4.44.4... .............. Level: Nethippy Octuple Plusungood Bricks: d.g.dgggd.g.d@ .###.###.###.@ .#d#.#d#.#d#.@ .#d#.#d#.#d#.@ .ddd.ddd.ddd.@ .ddd.ddd.ddd.@ .#d#.#d#.#d#.@ .#d#.#d#.#d#.@ i###i###i###i@ hh.ihi.ihi.hh@ i###i###i###i@ .#d#.#d#.#d#.@ .#d#.#d#.#d#.@ .ddd.ddd.ddd.@ .ddd.ddd.ddd.@ .#d#.#d#.#d#.@ .#d#.#d#.#d#.@ .###.###.###.@ Bonus: l.m.lmmml.m.l5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 >555>555>555>5 }}.>}>.>}>.}}5 >555>555>555>5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 .555.555.555.5 Level: G Double Columns Bricks: #............. #!!!!!!!!!!!!! #!#d#d#d#d#d#! #!#d#d#d#d#d#! #!#d#d#d#d#d#! #!#d#d#d#d#d#! !!#d#d#d#d#d#! !!#d#d#d#d#d#! !############! !############! !#h#h#h#h#h#!! !#h#h#h#h#h#!! !#h#h#h#h#h#!# !#h#h#h#h#h#!# !#h#h#h#h#h#!# !#h#h#h#h#h#!# !#h#h#h#h#h#!# !!!!!!!!!!!!!@ Bonus: 5............. 52222222222222 52555555555552 52555555555552 52555555555552 52555555555552 22555555555552 225l555m555l52 25555555555552 25555555555552 25555555555522 25555555555522 25555555555525 25555555555525 25555555555525 25555555555525 25454545454525 22222222222225 Level: G Pink Floyd - The Wall Bricks: .............. .............. .............. bcbcbcbcbcbcbc cbcbcbcbcbcbcb bcbcbcbcbcbcbc cbcb@@cb@@cbcb bcb@@cbcb@@cbc cbc@c@cb@b@bcb bcbcbc@@bcbcbc cbcbcb@@cbcbcb bcbcb@bc@cbcbc cbcb@bcbc@cbcb bcb@bcbcbc@cbc cbcbcbcbcbcbcb bcbcbcbcbcbcbc .............. .............. Bonus: .............. .............. .............. ....5.5...55.5 .l.555555.5... ..5555........ .55....5..5... 5..5.m.5m5.... 5.555.55...... .5..5...5...5. 5...5.555.55.. 5....5.5.5...5 .555.5...5.l5. ..5....5.5...5 ....5...5...5. ..........55.. .............. .............. Level: Nethippy Frigid Surprise! Bricks: !!!!!!!!!!!!!! .............. ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** Bonus: 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..ffffffffffff ..{{{{{{{{{{{{ Level: G Yellow Demon Bricks: ......h....... .....hhhh...h. ........h..hhh .....hhhh.hh.. ....hhhhhhh... ....hhhhhhh.h. ....h.hhhhhhh. ....hdhhhhh..h ....hddhhh.... ....h.hhh.dd.h ....hhh.h.dd.h ...hj...hh..h. ...hj...jh.h.. ...hj...j.hh.. ...h.j.j..hh.. ...hh.hhhhh... ....hhh....... .............. Bonus: ......>....... ............*. ...........55> ..........55.. .........l5... .............. .............. .....f........ .....ff....... ..........ff.. ..........ff.. ....~......... ....~...~..... ....~...~..... .....~.~...... .............. .............. .............. Level: G Treasure Box Bricks: .............. !!!!!!!!!!!!!! !zzzzzzzzzzzz! !zccccccccccz! !zc########cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc#!!!!!!#cz! !zc########cz! !zccccccccccz! !zzzzzzzzzzzz! !!!!!!!!!!!!!! .............. Bonus: .............. 22222222222222 23333333333332 234}}}mm}}}432 234gggggggg432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234g555555g432 234gggggggg432 23444444444432 23333333333332 22222222222222 .............. Level: G Everything But The... Bricks: .............. .............. .............. cccccccccccccc dddddddddddddd cccccccccccccc .............. .............. cccccccccccccc gggggggggggggg cccccccccccccc .............. .............. cccccccccccccc hhhhhhhhhhhhhh cccccccccccccc .............. .............. Bonus: .............. .............. .............. *0g3>-l1s1c}1f .Wpd?1f0b.&w0. 0Wd+cf!}0<10>+ .............. .............. 3l}-1js3-5?>53 .W.b00d44b.~.. g?3&>+c<{2f2-* .............. .............. >}0143242-Wgf> b1-w..c.c.s.b. fj{0?2p2Wg......>... .............. .............. .............. .............. .............. ......>>...... .............. .............. .............. Level: Nethippy Boom Boxes Bricks: .............. zzz.zzz.zzz... z*z.z*z.z*z... zzz.zzz.zzz... .............. .zzz.zzz.zzz.. .z*z.z*z.z*z.. .zzz.zzz.zzz.. .............. ..zzz.zzz.zzz. ..z*z.z*z.z*z. ..zzz.zzz.zzz. .............. ...zzz.zzz.zzz ...z*z.z*z.z*z ...zzz.zzz.zzz .............. .............. Bonus: .............. fff.???.555... f.f.?.?.5.5... fff.???.555... .............. .+++.44l.ggg.. .+.+.4.4.g.g.. .+++.444.ggg.. .............. ..WWW.bbb.-+-. ..W.W.b.b.+.+. ..WWW.bbb.-+-. .............. ...>>>........ ...>.>........ ...>>>........ .............. .............. Level: Nethippy Graybar Bricks: v............v .............. .............. .............. vvvvvvvvvvvvvv .............. vvvvvvvvvvvvvv .............. zzzzzzzzzzzzzz vvvvvvvvvvvvvv cccccccccccccc bbbbbbbbbbbbbb aaaaaaaaaaaaaa .............. .............. .............. .............. .............. Bonus: l............l .............. .............. .............. 55555555555555 .............. ?............? .............. 55555555555555 >>>>>>>>>>>>>> f............f ff..........ff >>>>>>>>>>>>>> .............. .............. .............. .............. .............. Level: Nethippy Chaostars Bricks: .............. .h.h.h.h.h.h.. ..!.h!h.!.h!h. .h.h.h.h.h.h.. .............. ..h.h.h.h.h.h. .h!h.!.h!h.!.. ..h.h.h.h.h.h. .............. .h.h.h.h.h.h.. ..!.h!h.!.h!h. .h.h.h.h.h.h.. .............. ..h.h.h.h.h.h. .h!h.!.h!h.!.. ..h.h.h.h.h.h. .............. .............. Bonus: .............. .????????????. .????????????. .????????????. .............. .????????????. .????????????. .????????????. .............. .????????????. .????????????. .????????????. .............. .????????????. .????????????. .????????????. .............. .............. Level: G Tough Shoot Bricks: j............j EEEEEE..EEEEEE .............. !....E..E....! EEEEEE..EEEEEE j............j EEE........EEE E....E..E....E E.!.!E..E!.!.E E....E..E....E EEEEEE..EEEEEE dEdEhE..EhEdEd dEdEhE..EhEdEd dEdEhE..EhEdEd .............. .............. .............. .............. Bonus: l............l .............. 55..........55 .5..........5. .............. l............l .............. .5555....5555. .5.5......5.5. .5555....5555. .............. w.w.w....w.w.w w.w.>....>.w.w w.>.>....>.>.w .............. .............. .............. .............. Level: Nethippy 0-1-0 Bricks: g.....gg.....g EEEEE.EE.EEEEE E...E.hh.E...E E...E.hh.E...E E.E.E.hh.E.E.E E.E.E.hh.E.E.E h.E.i.hh.i.E.h h.E.i.hh.i.E.h h.E.i.hh.i.E.h h.E.i.hh.i.E.h E.E.E.hh.E.E.E E.E.E.hh.E.E.E E...E.hh.E...E E...E.hh.E...E EEEEE.EE.EEEEE .............. .............. .............. Bonus: l.....55.....l .............. ......>>...... .............. .............. .............. 5............5 5.....>>.....5 5.....>>.....5 5............5 .............. .............. .............. ......>>...... .............. .............. .............. .............. Level: G Baseball Bricks: .............. .............. .....jjjj..... ....djjjjd.... ...jjdjjdjj... ..jjjdjjdjjj.. ..jjjdjjdjjj.. ..jjjdjjdjjj.. ..jjjdjjdjjj.. ...jjdjjdjj... ....djjjjd.... .....jjjj..... .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. ....b....b.... .............. .............. ......ww...... .............. .............. .............. ....b....b.... .............. .............. .............. .............. .............. .............. .............. Level: G Yes, it's Tough! Bricks: .............. #!#!#!#!#!#!#! .............. !#!#!#!#!#!#!# .............. #!#!#!#!#!#!#! .............. !#!#!#!#!#!#!# .............. #!#!#!#!#!#!#! .............. !#!#!#!#!#!#!# .............. #!#!#!#!#!#!#! .............. !#!#!#!#!#!#!# .............. #!#!#!#!#!#!#! Bonus: 55555555555555 5.5.5.5.5.5.ml 55555555555555 .5.5.5.5.5.5.5 55555555555555 5m5.5.5.5l5.5. 55555555555555 .5.5.5.5.5.5.5 55555555555555 5.5.5l5.5.5.5. 55555555555555 .5.5.5.5.5.5.5 55555555555555 5l5.5.5.5.5.5. 55555555555555 .5.5.5.5.5.5.5 55555555555555 5.5.5.5.5.5.5. Level: G Dangerous Bricks: .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. Bonus: 5555555555555m .5.5.W.f.5.5.5 cj555g5j5bj5c5 5.f.w.b.W.5.5. 55g55{55*55555 .j.5.5.5.g.5.5 55gf5jb~*5Wbj5 5.5.w.5.5.5.5. 5bc55W5j{5b5bb .5.5.5.5.5.5.5 55j5gc555W5555 b.5.>.5.5.5.5. 555W55f555j555 .5.5.5.5.5.5.5 5b555{55555c55 5.j.>.5.5.f.5. W555555>555>55 .5.5.>.5.>.5.5 Level: Nethippy Hard Shot Bricks: .E..........gg .............g .E............ .E............ .E.....hh..... .E....iiii.... .E...ajjjja... .E..ijcbbcji.. .E.hijbvvbjih. .E.hijbvvbjih. .E..ijcbbcji.. .E...ajjjja... .E....iiii.... .E.....hh..... .E............ .Eg..........g .Egg........gg ..EEEEEEEEEEEE Bonus: .............l .............. .............. .............. .............. ......2222.... .....333333... ....23444432.. ...b23455432b. ...b23455432b. ....23444432.. .....333333... ......2222.... .............. .............. .............. ..l..........l .............. Level: G Stars! Bricks: .............. ..@.......@... .@h@.@a@.@h@.. ..@...@...@... .............. ..@...@...@... .@h@.@h@.@h@.. ..@...@...@... .............. ..@...@...@... .@h@.@h@.@h@.. ..@...@...@... .............. ..@...@...@... .@h@.@h@.@h@.. ..@...@...@... .............. .............. Bonus: .............. ..5.......5... .5l5.5m5.5l5.. ..5...5...5... .............. ..5...5...5... .5.5.5.5.5.5.. ..5...5...5... .............. ..5...5...5... .5.5.5.5.5.5.. ..5...5...5... .............. ..5...5...5... .5m5.5.5.5m5.. ..5...5...5... .............. .............. Level: G Crevices Bricks: .............. .............. .............. .............. .............. ....vvvvv..... ....v@g@v..... ....v@g@v..... .vvvv@@@vvvv.. .v@g@@g@@g@v.. .v@g@@g@@g@v.. .v@g@@g@@g@v.. .v@@@@g@@@@v.. .vvvvvvvvvvv.. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ....d...d..... .....555...... .....5m5...... .d..l555l..d.. ..555555555... ..555555555... ..555555555... ..555555555... .d.........d.. .............. .............. .............. .............. Level: G UUU Bricks: .............. .#.#.#..#.#.#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .#c#.#cc#.#c#. .###.####.###. .............. vvvvvvvvvvvvvv .............. vvvvvvvvvvvvvv .............. vvvvvvvvvvvvvv .............. vvvvvvvvvvvvvv .............. Bonus: .............. .............. ..5...55...5.. ..5...55...5.. ..5...55...5.. ..5...55...5.. ..5...55...5.. ..5...55...5.. .............. .............. l333333333333l .............. 33333333333333 .............. 33333333333333 .............. 22222222222222 .............. Level: G Maziac Bricks: cvcvcv..vcvcvc vcvcvc..cvcvcv ######..###### zzz#......#zzz zzz#......#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zzz#.#vv#.#zzz zz...#vv#...zz z....#vv#....z #####.vv.##### #............# #.#.#.##.#.#.# #...#....#...# ##.########.## Bonus: l.4.4....4.4.l m4.4.4..4.4.4m .............. 555........555 555........555 555...33...555 555...33...555 555...33...555 555...33...555 555...33...555 555...33...555 55....33....55 5.....33.....5 ......33...... .............. .............. .............. .............. Level: G It's A Big Plus! Bricks: @@..........@@ @....#..#....@ .....#..#..... ....z#..#z.... ...zz#..#zz... ..zzz#..#zzz.. .zzzz#..#zzzz. .#####..#####. .#zzzz..zzzz#. .#zzzz..zzzz#. .#####..#####. .....#..#..... .....#..#..... ....z#..#z.... ...zz#..#zz... ..zzz#..#zzz.. .zzzz#..#zzzz. ######..###### Bonus: .............. .............. .............. ....5....5.... ...55....55... ..555....555.. .5555....5555. .............. ..555l..l555.. ..555l..l555.. .............. .............. .............. ....5....5.... ...55....55... ..555....555.. .555m....m555. .............. Level: Nethippy Graybar Bricks: .............. .............. .............. .cccccccccccc. .cbbbbbbbbbbc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbbbbbbbbbbc. .cccccccccccc. .............. .............. .............. Bonus: .............. .............. .............. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .............. .............. .............. Level: G Waste Of Time Bricks: #cccccccccccc# c#cccccccccc#c cc#cccccccc#cc ccc#cccccc#ccc cccc#cccc#cccc ccccc#cc#ccccc cccccc..cccccc cccccc..cccccc cccccc..cccccc cccccc..cccccc cccccc..cccccc cccccc..cccccc ccccc#..#ccccc cccc#cccc#cccc ccc#cccccc#ccc cc#cccccccc#cc c#cccccccccc#c #cccccccccccc# Bonus: .555555555555. 5.5555555555.5 55.55555555.55 555.555555.555 5555.5555.5555 55555.55.55555 555555..555555 555555..555555 555555..555555 555555..555555 555555..555555 555555..555555 55555....55555 5555.5555.5555 555.555555.555 55.55555555.55 5.5555555555.5 .555555555555. Level: G Imperial Fleet Bricks: .....c........ ...ccc........ .cccccg....... .............. .............. .............. ........cc.... ......cccc.... ....ccccccg... .............. .............. ............c. ...cc.....ccc. .cccc...cccccg cccccg........ .............. .............. .............. Bonus: .....2........ ...222........ .22222f....... .............. .............. .............. ........22.... ......2222.... ....222222f... .............. .............. ............2. ...22.....222. .2222...22222f 22222f........ .............. .............. .............. Level: G Graybox Bricks: .............. .............. .!!!!!!!!!!!!. .!cccccccccc!. .!cccccccccc!. .!cchhhhhhcc!. .!cchhhhhhcc!. .!cchh**hhcc!. .!cchh**hhcc!. .!cchhddhhcc!. .!cchhddhhcc!. .!cchhddhhcc!. .!cccczzcccc!. .!cccczzcccc!. .!!!!!zz!!!!!. .............. .............. .............. Bonus: .............. j............j .............. ..5555555555.. ..5555555555.. ..55..mm..55.. ..55......55.. ..55......55.. ..55......55.. ..55......55.. ..55......55.. ..55......55.. ..5555..5555.. ..5555..5555.. .............. .............. .............. .............. Level: G Baskets Bricks: i............i ihh........hhi ihhi#....#.hhi ihhi#....#ihhi ihhi#....#ihhi ihhi#....#ihhi ihhi#....#ihhi zzzz#....#zzzz #####....##### .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: 4............4 4............4 4............4 4............4 4............4 4............4 4............4 5555......5555 .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Invisible Bricks: v.v........v.v ..v........v.. ..v........v.. ..v..v..v..v.. ..v..v..v..v.. .vvvvv..vvvvv. .....v..v..... .....v..v..... .v.vvv..vvv.v. .v..........v. .v..........v. .v..........v. .vvvvvvvvvvvv. ...v......v... ...v.v..v.v... ...v.v..v.v... vvvv.vvvv.vvvv .............. Bonus: w.5........5.w ..5........5.. ..5........5.. ..5..5..5..5.. ..5..5..5..5.. .55555..55555. .....5..5..... .....5..5..... .b.555..555.b. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Nethippy Spiral Doom Bricks: EEEEEEEEEEEEEE Ea..........bE Ea..........bE E.EEEEEEEEEE.E E.Ev.......E.E E.Ev.......E.E E.E.EEEEE..E.E E.E.Ehhhh..E.E E.E.Ehddh..E.E E.E.Ehddh..E.E E.E.Ehddh..E.E E.E.Ehddh..E.E E.E.Ehddh..E.E E.E.Ehhhh..E.E E.E.EEEEEEEE.E E.Ec........cE E.Ec........cE E.EEEEEEEEEEEE Bonus: .............. .>..........>. .>..........>. .............. ...>.......... ...>.......... .............. .....4444..... .....4554..... .....4554..... .....4554..... .....4554..... .....4554..... .....4444..... .............. ...>........>. ...>........>. .............. Level: G Linear Structure Bricks: .............. .#.#.#.#.#.#.# i.i.i.i.i.i.i. i.i.i.i.i.i.i. .#.#.#.#.#.#.# i.i.i.i.i.i.i. i.i.i.i.i.i.i. .#.#.#.#.#.#.# i.i.i.i.i.i.i. i.i.i.i.i.i.i. .#.#.#.#.#.#.# i.i.i.i.i.i.i. i.i.i.i.i.i.i. .#.#.#.#.#.#.# i.i.i.i.i.i.i. i.i.i.i.i.i.i. .#.#.#.#.#.#.# .............. Bonus: .............. .............. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. .............. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. .............. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. .............. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. .............. 5.5.5.5.5.5.5. 5.5.5.5.5.5.5. .............. .............. Level: G TCS #3 Bricks: ###!######!### #!#!#!##!#!#!# #!#!#!##!#!#!# #!#!#!##!#!#!# ###!######!### #!###!##!###!# #!#!#!##!#!#!# #!#!#!##!#!#!# #!#!#!##!#!#!# #!###!##!###!# #!!!######!!!# #!!!#!##!#!!!# #!!!#!##!#!!!# #!!!#!##!#!!!# ############## g............g .............. .............. Bonus: ...5..ll..5... .5.5.5..5.5.5. .5.5.5..5.5.5. .5.5.5..5.5.5. ...5......5... .5...5..5...5. .5.5.5..5.5.5. .5.5.5..5.5.5. .5.5.5..5.5.5. .5...5..5...5. .555......555. .555.5..5.555. .555g5}}5g555. .555g5}}5g555. ....g.}}.g.... m............m .............. .............. Level: Nethippy Symmetric Death II Bricks: iehgcddddcghei eehhEddddEhhee eehhhdEEdhhhee eEghEdEEdEhgEe iiEghddddhgEii iiiEEEddEEEiii iiEgEkddEEgEii jEggEkddkEggEj jjggEEjjjEggjj jjggEEEEjEggjj jjggEEddkEggjj EjgEEjddkEEgjE kjkkEkjjEEkkjk vvvvEkEEEEvvvv vEEvEkddEEvEEv vvvvEkddkEvvvv kkkkEEjjkEkkkk EEEEEEEEkEEEEE Bonus: l}}}l5555l}}}l 5555.5555.5555 555555..555555 5.*555..555*.5 55.*55}}55*.55 55*...}}...*55 55.*.>}}..*.55 5.55.>}}<.55.5 5555..ll<.5555 5555....<.5555 5555..ll<.5555 .55..>55<..55. *55*.>ll..*55* 5555.>....5555 5..5.>55..5..5 5555.>55<.5555 ......55<..... ........<..... Level: G V Section Bricks: ...hhhhhhhh... ###.hhhhhh.### ....hhhhhh.... .###.hhhh.###. g....hhhh....g g.###.hh.###.g gg....hh....gg gg.###..###.gg gggddddddddggg gggddddddddggg ###.dddddd.### ....dddddd.... .###.dddd.###. f....dddd....f f.###.dd.###.f ff....dd....ff ff.###..###.ff fff........fff Bonus: ...55555555... ....555555.... ....555555.... .....5555..... .....5555..... ......55...... f.....55.....f f............f ff..l....l..ff .....>>.>..... .....>.>...... .............. ......>....... .......>...... }............. ......>......{ .}...........{ }..........{.. Level: G Symmetric Death IV Bricks: cEEEEEEEEEEEEc cEcEcEccEcEcEc bEcEcEccEcEcEb aEbEbEbbEbEbEa ...E.EaaE.E... EE.E.EaaE.E.EE cE...EaaE...Ec cEEE.EaaE.EEEc bEbE.E..E.EbEb aEaE......EaEa .E.EEE..EEE.E. .E..........E. .EEEEE..EEEEE. .EEEEE..EEEEE. .............. EEEEEE..EEEEEE cba........abc EEEEEE..EEEEEE Bonus: 5............5 5.5.5.55.5.5.5 ..5.5.55.5.5.. >............> ......ff...... ......ff...... 5.....ff.....5 5.....ff.....5 .............. >.>........>.> .............. .............. .............. .............. .............. .............. 5.>........>.5 .............. Level: G TCS #16 Bricks: E!!!!!EE!!!!!E !!!!!!EE!!!!!! !!###!EE!###!! !!###!!!!###!! !!##########!! !!!########!!! E!!##E!!E##!!E !!!##!!!!##!!! !!!##!!!!##!!! !!!##!!!!##!!! !!!##!!!!##!!! E!!##!!!!##!!E !!!##E!!E##!!! !!!########!!! !!##########!! E!###g..g###!E #####....##### #####@..@##### Bonus: .55555..55555. 555555..555555 55.j.5..5.j.55 55...5555...55 55....jj....55 555j......j555 .55...55...55. 555..5555..555 555j.5555.j555 555..5555..555 555..5555..555 .55jg5555gj55. 555.g.55.g.555 555.gg}}gg.555 55...g}}g...55 .5...m..m...5. .............. .............. Level: G Arrow Bricks: @............. .@gggggggggggg .g@........... .g.@gggggggggg .g.g@......... .g.g.@gggggggg .g.g.g@....... .g.g.g.@gggggg .g.g.g.g@..... .g.g.g.g.@gggg .g.g.g.g.g@... .g.g.g.g.g.@gg .g.g.g.g.g.g@. .g.g.g.g.g.g.. .g.g.g.g.g.g.. .g.g.g.g.g.g.. .g.g.g.g.g.g.. .............. Bonus: .............. ..555555555555 .5............ .5..4444444444 .5.4.......... .5.4..33333333 .5.4.3........ .5.4.3..222222 .5.4.3.2...... .5.4.3.2..1111 .5.4.3.2.1.... .5.4.3.2.1..00 .5.4.3.2.1.0.. .5.4.3.2.1.0.. .5.4.3.2.1.0.. .5.4.3.2.1.0.. .5.4.3.2.1.0.. .............. Level: G Symmetry Finale Bricks: e............e @@@@.@hh@.@@@@ e..@.@@@@.@..e @............@ @@@@.@@@@.@@@@ e..@.@ee@.@..e @............@ @@@@......@@@@ e..@......@..e @............@ @@@@.!..!.@@@@ e..@......@..e @............@ @@@@......@@@@ e..@.!..!.@..e @............@ @@@@......@@@@ #####.##.##### Bonus: l............l ......mm...... 5............5 .............. .............. 5.....55.....5 .............. .............. 5............5 ....555555.... ....5.55.5.... 5...555555...5 .............. ....555555.... 5...5.55.5...5 ....555555.... .............. .............. Level: G Columns Bricks: .............. .............. .............. .............. vvvvvvvvvvvvvv vhhhhhhhhhhh#v viiiiiiiiii#hv vjjjjjjjjj#ihv vkkkkkkkk#jihv vaaaaaaa#kjihv vdddddd#akjihv veeeee#dakjihv vffff#edakjihv vggg#fedakjihv vii#gfedakjihv vh#igfedakjihv v#higfedakjihv vvvvvvvvvvvvvv Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Can U Do It? Bricks: vjzjzzzzzzjzjv #jzjzzzzzzjzj# jjjjjjjjjjjjjj jijijjjjjjijij jijijjjjjjijij jijijjjjjjijij jijijjjjjjijij ffffffffffffff fhhhhhhhhhhhhf fhgggggggggghf fhgddddddddghf fhgd!!!!!!dghf fhgd!!!!!!dghf ####!!!!!!#### ...#!!!!!!#... .#.##@zz@##.#. .....v..v..... ##.########.## Bonus: ..5.555555.5.. ..5.555555.5.. m............m .............. .............. .............. .............. .............. .............. .............. .............. ....555555.... ....555555.... ....555555.... ....555555.... ......ww...... .............. .............. Level: G Get The Corners! Bricks: !#!#!#!!#!#!#! ##!#!#!!#!#!## !!!#!#!!#!#!!! ####!#!!#!#### !!!!!#!!#!!!!! ######!!###### !!!!!!!!!!!!!! ############## !!!!!!!!!!!!!! ############## !!!!!!!!!!!!!! ############## !!!!!!!!!!!!!! ############## !!!!!!!!!!!!!! ############## !!!!!!cc!!!!!! ......cc...... Bonus: m555555555555m 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 gggggggggggggg 55555555555555 }}}}}}}}}}}}}} ......mm...... .............. Level: Nethippy Big Ass Bricks: .............. .............. .............. .............. ...bbbbbbb.... ..EhfffffhE... .EihfjjjfhiE.. EihhfffffhhiE. EiheeeeeeehiE. Eihe@ddd@ehiE. Eihee@d@eehiE. Eihhee@eehhiE. .Eihhh@hhhiE.. ..Eiih@hiiE... ...EEh@hEEh... ..Ehhh@hhhE... ..Edgg@ggdE... ...EEE@EEE.... Bonus: .............. .............. .............. .............. ...0000000.... ....WWWWW..... ..>.WdddW.>... .>..WWWWW..>.. .>.bbbbbbb.>.. .>.b.222.b.>.. .>.bb.2.bb.>.. .>..bb.bb..>.. ..>.......>... ...>>...>>.... ..........l... .............. ...555.555.... .............. Level: G TCS #11 Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! #!#!#!#!#!#!#! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !@!@!@!@!@!@!@ !!!!!!!!!!!!!! !!!!!!!!!!!!!! E!E!E!E!E!E!E! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !@!@!@!@!@!@!@ !!!!!!!!!!!!!! !!!!!!!!!!!!!! #!#!#!#!#!#!#! !!!!!!!!!!!!!! #!!!!!!!!!!!!# g############g Bonus: 55555555555555 55555555555555 .5.5.5.5.5.5.5 55555555555555 55555555555555 5.5.5.5.5.5.5. 55555555555555 55555555555555 .5.5.5.5.5.5.5 55555555555555 55555555555555 5.5.5.5.5.5.5. 55555555555555 55555555555555 .5.5.5}5}5.5.5 55555555555555 .555555555555. mgggg}}}}ggggm Level: G Spiral Blast Bricks: .............. .!!!!!!!!!!!!. .!**********!. .!*........*!. .!*.!!!!!!.*!. .!*.!****!.*!. .!*.!*..*!.*!. .!*.!*!.*!.*!. .!*.!*!.*!.*!. .!*.!*!.*!.*!. .!*.!*!.*!.*!. .!*.!*!.*!.*!. .!*.!*!**!.*!. .!*.!*!!!!.*!. .!*.!*.....*!. .!*.!*******!. .!*.!!!!!!!!!. .............. Bonus: *.5.b.pp.5.b.* .............. .............> b....5.f...... ...b......>... ..........b..f f..5...5...... ...>...>..f... .............5 5..f...f...... .......b..w..f b.........5... ...b.........b >.........5... ...5..w.f.b... f..f.......... .............. .............. Level: Nethippy Nitey Nite! Bricks: .............. a.a...a.a..... ...........a.. ..a.a.a..a...a ........a..... .a....a..a.a.. ...a......a... .a...a.a.....a ...a......a... .a......a..... ...a...a..a.a. .a...a........ .......a...... ..a........a.. .a..a.a..a...a .............. ...a.......... .............. Bonus: .............. >.d...d.5..... ...........d.. ..5.>.d..d...> ........5..... .d....d..d.d.. ...d......5... .d...>.d.....d ...d......d... .5......d..... ...5...>..d.d. .>...d........ .......d...... ..5........d.. .d..d.d..d...> .............. ...>.......... .............. Level: Nethippy Stars Bricks: .............. .............. ..E...E...E... .EgE.EeE.EdE.. .ggg.eee.ddd.. .EgE.EeE.EdE.. ..E...E...E... ....E...E..... ...EiE.EjE.... ...iii.jjj.... ...EiE.EjE.... ....E...E..... ......E....... .....EhE...... .....hhh...... .....EhE...... ......E....... .............. Bonus: .............. .............. .............. ..5...5...5... .555.5l5.555.. ..5...5...5... .............. .............. ....5...5..... ...555.555.... ....5...5..... .............. .............. ......5....... .....555...... ......5....... .............. .............. Level: G Big Tough Wall Bricks: hhhhhhhhhhhhhh !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! dddddddddddddd dddddddddddddd cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc Bonus: jjjjjjjjjjjjjj 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 }g}g}g}g}g}g}g g}g}g}g}g}g}g} {W{W{W{W{W{W{W W{W{W{W{W{W{W{ {W{W{W{W{W{W{W W{W{W{W{W{W{W{ {W{W{W{W{W{W{W W{W{W{W{W{W{W{ {W{W{W{W{W{W{W Level: G Maziac Bricks: #########ccccc ccc#c####ccccc ccc#c####c#### c#c#cccc#c#### c#c#cccc#c#ccc c#c###c##c#ccc c#c###c##c#c#c ccc#cccc#c#c#c ccc#cccc#c#c#c c#c####c#c#c## c#c####c#c#c## c#c#cccccccccc c#c#cccccccccc c#ccc########c c#ccc########c c#c#cccc#ccccc c#c#cccc#ccccc c############# Bonus: .........55555 1m1.l....45555 011.3....4.... 0.1.3333.4.... 0.1.33j3.4.555 0.1...3..4.445 0.1...3..4.4.5 0m1.3333.4.4.5 001.3333.4.4.l 0.1....3.4.4.. 0.1....2.3.3.. 0.1.22223j3344 0.1.2222233334 0.112........4 0.222........4 0.2.2222.55544 0.l.2222.55555 0............. Level: G TCS #17 Bricks: !!!@@!!!!@@!!! !!!@@!!!!@@!!! !!!@@!!!!@@!!! @@@@!!!!!!@@@@ @@@@!!!!!!@@@@ !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!@@!!@@!!!! !!!!@@!!@@!!!! !!!!@@!!@@!!!! !!!!@@!!@@!!!! !!!@@@!!@@@!!! !!!@@!!!!@@!!! !!!@@!!!!@@!!! !!!@@@!!@@@!!! !!@@@@!!@@@@!! @@@!!@@@@!!@@@ g@@@!@@@@!@@@g Bonus: jjj..5555..jjj jjj..5555..jjj 555..5555..555 ....555555.... ....555555.... 55555555555555 55555555555555 5555..55..5555 5555..55..5555 5555..55..5555 5555..55..5555 555...55...555 555..5555..555 555..5555..555 555...55...555 55}}}}55gggg55 ..}}}}..gggg.. m.}}}}..gggg.m Level: G Snake Bricks: .............. .............. ........zz..z. .......zzz..z. ......zz.z..z. ......z..z..z. .....zz.zz..z. ....zz..zz.zz. ....zz..z..z.. ....z..zz..z.. ..zzz..z...z.. .dzzz..z..zz.. .zzz..zz..z... .zzd..z..zz... .zz...zzzz.... .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .m............ .............. ...m.......... .............. .............. .............. .............. Level: Nethippy O.M.F.G. Bricks: .............. .EEEEEhhEEEEE. .EgggEhhEgggE. .EgggEhhEgggE. .EiiiEhhEiiiE. .EiiiEhhEiiiE. .E...EEEE...E. .E..........E. .E..........E. .E...E..E...E. .E...E..E...E. .EzzzE..EzzzE. .EzzzE..EzzzE. .EhhhE..EhhhE. .EhhhE..EhhhE. .EdddE..EdddE. .EdddE..EdddE. .EEEEE..EEEEE. Bonus: .............. ......55...... ..~f~.55.~f~.. ......55...... ..>>>.55.>>>.. ..>>>.ll.>>>.. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..555....555.. ..555....555.. .............. Level: G 600 Fluckin Dollars Bricks: .............. cccccccccccccc c@@@@c@@@c@@@@ c@cc@c@cccccc@ c@cc@c@cccccc@ c@cc@c@cccccc@ c@cc@c@cccccc@ c@cc@c@cccccc@ c@@@@c@@@c@@@@ c@cccccc@cccc@ c@cccccc@cccc@ c@cccccc@cccc@ c@cccccc@cccc@ c@cccc@@@c@@@@ cccccccccccccc .............. .............. .............. Bonus: .............. b.gb..f..b..w. ........f..!.. ..55....f..... w.55fb...b.w.. ..55..!f..p..b ..55.g........ .b55.....f.b.. ....!.bf....f. .............. .....f........ ...p....f.b.f! .....b........ b............. ...f..mm...g.. .............. .............. .............. Level: G Evil Face 2 Bricks: .............. .....vvvv..... ....vvvvvv.... ..vvvvvvvvvv.. ..vaavaavaav.. .vvaavaavaavv. .vvvvvaavvvvv. .vvvvvaavvvvv. .vvvvaaaavvvv. .vvavaaaavavv. .vvavvaavvavv. ..vaavvvvaav.. ..vvaavvaavv.. ...vvaaaavv... ....vvvvvv.... .............. .............. .............. Bonus: .............. .....5555..... ....555555.... ..5555555555.. ..5WW5ff5WW5.. .55Ww5ff5wW55. .55555ff55555. .55555ff55555. .5555ffff5555. .55{5ffff5{55. .55.55ff55.55. ..5{>5555>{5.. ..55>>55>>55.. ...55>{{>55... ....555555.... .............. .............. .............. Level: G Hamburger Bricks: .............. .............. .............. ....eeeeee.... ...eeeeeeee... ...hhhhhhhh... ...dddddddd... ...@@@@@@@@... ...eeeeeeee... ...ffffffff... ...@@@@@@@@... ...dddddddd... ...hhhhhhhh... ...eeeeeeee... ....eeeeee.... .............. .............. .............. Bonus: .............. .............. .............. .............. ...b......b... .............. ....>.>.>.>... .............. ...5.5.5.5.... ....5.5.5.5... .............. ...>.>.>.>.... ......ww...... ...b......b... .............. .............. .............. .............. Level: G Hard Shot II Bricks: .............. .EEEE@..@EEEE. .Ezzz....zzzE. .Ezcc.EE.cczE. .Ezch....hczE. .EzchdiidhczE. .EzchdiidhczE. .EzchdiidhczE. .EzchdiidhczE. .EzchddddhczE. .EzchhddhhczE. .EzcchddhcczE. .EzzchhhhczzE. .EEzcccccczEE. ..EzzzzzzzzE.. E.EEEEEEEEEE.E .............. .............. Bonus: .............. .............. ..555....555.. ..555....555.. ..555....555.. ..5555555555.. ..5555555555.. ..5555555555.. ..5555555555.. ..5555555555.. ..5555555555.. ..5555}}5555.. ..5555555555.. ...55555555... ...555mm555... .............. .............. .............. Level: G Hell Tree Bricks: ...!!!.!!!.... ..!!!!!!!!!... ..!!!!!!!!!!.. ..!!!!!c.!!!.. .!!!!!c!.!!!!. .!!!..!c.!!!!. ..!...c!..!!!. ......!c..!!.. ......c!...!.. ......!c...... ......c!...... ......!c...... ......c!...... ......!c...... ......c!...... ......!c...... .....!c!!..... .............. Bonus: .ff>j.f.j>ff.. .f.........ff. .fp........pf. ff....g5f...ff fj}...5gf...}f fl>lffg5fl.ljf ffjfff5gff...f .fff.fg5ff.>ff .....f5gfffjf. .....fg5f.fff. .....f5gf..... .....fg5f..... .....f5gf..... .....fg5f..... .....f5gf..... ....ffg5ff.... ....fg5ggf.... ....ffffff.... Level: G Column "Fun" Bricks: .............. .............. c@b@a@..@a@b@c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c c#b#a#..#a#b#c ######..###### .............. Bonus: .............. .............. p.f.f....f.f.p 5.5.f....f.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 5.5.5....5.5.5 l.5.5....5.5.l .............. .............. Level: G CrazyBounce Bricks: iiiihhhhhhiiii iiiivggggviiii iiiivvffvviiii iiiivvvvvviiii iiiivvvvvviiii iiiivvjjvviiii iiiiveeeeviiii iiiiddddddiiii iiiiiiiiiiiiii iiii......iiii iiii.@..@.iiii ......@@...... i@..@.@@.@..@i @..@..@@..@..@ .............. ..@..@..@..@.. i@..@....@..@i @..@..@@..@..@ Bonus: m...ffffff...m ....5ffff5.... ....55ff55.... ....555555.... ....555555.... ....55..55.... f...5....5...f ff..........ff fff........fff ffff......ffff ffff......ffff .............. .............. .............. .............. .............. .............. .............. Level: G Shoot & Dodge Bricks: zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz .............. .............. .............. .............. Bonus: f>p5f>p5f>p5f> >p5f>p5f>p5f>p p5f>p5f>p5f>p5 5f>p5f>p5f>p5f f>p5f>p5f>p5f> >p5f>p5f>p5f>p p5f>p5f>p5f>p5 5f>p5f>p5f>p5f f>p5f>p5f>p5f> >p5f>p5f>p5f>p p5f>p5f>p5f>p5 5f>p5f>p5f>p5f f>p5f>p5f>p5f> >p5f>p5f>p5f>p .............. .............. .............. .............. Level: G Chamber Bricks: EEEEEEEEEEEEEE EvvvvvvvvvvvvE E............E E.EEEEvvEEEE.E E.E..EvvE..E.E E.E.EEvvEE.E.E E.E.EccccE.E.E E.E.EchhcE.E.E E.E.EchhcE.E.E E.E.EchhcE.E.E E.E.EchhcE.E.E E.E.EchhcE.E.E E.E.EchhcE.E.E E.E.EchhcE.E.E E.E.EchhcE.E.E E.E.EccccE.E.E E.E.EEEEEE.E.E E.E@@@@@@@@E.E Bonus: .............. .555555555555. .............. ......bb...... ......bb...... ......bb...... .....5555..... .....5555..... .....5555..... .....5555..... .....5555..... .....5555..... .....5555..... .....5555..... .....5555..... .....5555..... .............. .............. Level: G Big Zero Bricks: .............. .EEEEEzzEEEEE. .EE........EE. .EE.zzzzzz.EE. .EE.zgggzz.EE. .EE.zgggzz.EE. .EE.zggzdz.EE. .EE.zggzdz.EE. .EE.zggzdz.EE. .EE.zggzdz.EE. .EE.zgzddz.EE. .EE.zgzddz.EE. .EE.zgzddz.EE. .EE.zgzddz.EE. .EE.zzdddz.EE. .EE.zzzzzz.EE. ..E........E.. ..EEEEEEEEEE.. Bonus: .............. .............. .............. ....555555.... ....5...55.... ....5...55.... ....5..5.5.... ....5..5.5.... ....5..5.5.... ....5..5.5.... ....5.5..5.... ....5.5..5.... ....5.5..5.... ....5.5..5.... ....55...5.... ....555555.... .............. .............. Level: G A Toughie Bricks: !!!!!!!!!!!!!! ###.########## kkkkkkkkkkkkkk #########k#### jjjjjjjjjjjjjj ######k####### ffffffffffffff ############k# eeeeeeeeeeeeee ##k########### dddddddddddddd #########k#### gggggggggggggg ####k######### iiiiiiiiiiiiii k############# hhhhhhhhhhhhhh #############. Bonus: 55555555555m55 ...5.......... 55555555555555 .........l.... 55555555555555 .............. 5555m555555m55 ............l. 55555555555555 .............. 55555555555555 .........l.... 55555555555555 .............. 55555555555555 l............. 5555mwwwwwwwww .............. Level: G Symmetric Death III Bricks: hh.hhhhhhhh.hh @@v@@hhhh@@v@@ @...@ihhi@...@ @.E.@iiii@.E.@ @...@giig@...@ EEvEEggggEEvEE E...EdggdE...E E.@.EddddE.@.E E...E.dd.E...E @@v@@.@@.@@v@@ @...@....@...@ @.E.@@vv@@.E.@ @...@....@...@ EEvEE.EE.EEvEE E...E....E...E E.@.EEvvEE.@.E E...E....E...E EE.EE.EE.EE.EE Bonus: l*.ffffffff.*l ..f..>>>>..f.. .....3>>3..... .....3333..... .....4334..... ..f..4444..f.. .....5445..... .....5555..... ......55...... ..5........5.. .............. ......55...... .............. ..5........5.. .............. ......55...... .............. .............. Level: Nethippy Diag-Wall Bricks: .............. gg............ ddgg.......... iiddgg........ hhiiddgg...... v@hhiiddgg.... ..v@hhiiddgg.. ....v@hhiiddgg ......v@hhiidd ........v@hhii ..........v@hh ............v@ .............. .............. .............. .............. .............. .............. Bonus: .............. 55............ l.55.......... ....55........ .p....55...... >.......55.... ..>.?.....55.. ....>.b.....55 ......>..*.... ........>.d... ..........>... ............>. .............. .............. .............. .............. .............. .............. Level: G I'll Finish You Here! Bricks: ....E...E...EE !!..........!E !E....E...E... E....E...E.... ....E...E...E. ..!E...E...E.. ..E!..E...E..! ...E!E...E.... E...E!..E...E. !E...E!E...E.. !.E...E!..E..! !..E...E!E.... E...E...E!..E. !E...E...E!E.. !.E...E...E!.E !..E...E...E.! E...E...E...E! !E...E...E...E Bonus: 555........5.. 555........55. 5.5........555 .5............ .555.......... ..5.5.......55 .5.555......55 ..5.5.5.....55 .5.5.555...... 5...5.5.5...55 55...5.555..55 55....5.5.5.55 .5.....5.555.. 5.......5.5.5. 55.......5.55. 55........5.ll .5...........l 5...........l. Level: G Window Pain Bricks: .............. .............. .............. ..hhhhhhhhhh.. ..h@@h@@h@@h.. ..h@@h@@h@@h.. ..hhhhhhhhhh.. ..hhhhjjhhhh.. ..h@@hjjh@@h.. ..h@@hjjh@@h.. ..hhhhjjhhhh.. ..hhhhhhhhhh.. ..h@@h@@h@@h.. ..h@@h@@h@@h.. ..hhhhhhhhhh.. .............. .............. .............. Bonus: .............. .............. .............. ..2222222222.. ..2..3..3..2.. ..2..3..3..2.. ..2334444332.. ..2334554332.. ..2..4554..2.. ..2..4554..2.. ..2334554332.. ..2334444332.. ..2..3..3..2.. ..2..3..3..2.. ..2222222222.. .............. .............. .............. Level: G Up N Down Bricks: .............. .....i........ .....i...i.... .i...i...i..@. .i@..i@..i..@. .i@..i@..i..@. .i@..i@i.i..@. @i@.@i@i@i.i@. @i@.@i.i@i.i@. @.@.@..i@i.i@i @.@i@..i@i@i@i @..i@..i..@i.i @..i@..i..@i.i @..i...i..@i.i ...i.......i.i ...i.......i.. ...i.......... .............. Bonus: .............. .............. .....5........ .....5...5.... .5...5...5.... .5...5...5.... .5...5...5.... .5...5.5.5.... .......5.5.5.. .......5.5.5.. .......5...5.5 ...5...5...5.5 ...5...5...5.5 ...5.......5.5 ...5.......5.. ...5.......... .............. .............. Level: G Incarnation of Devil Bricks: .............. ...d......d... ..d........d.. ..dd.dddd.dd.. ...dddddddd... ...dddddddd... ...d@@dd@@d... ..dd@@dd@@dd.. ..dddddddddd.. ..dddd@@dddd.. ..dddddddddd.. ..dddddddddd.. ...dd@@@@dd... ...dd@dd@dd... ...dddddddd... ....dddddd.... ....dddddd.... .....dddd..... Bonus: .............. ...l......l... ..5........5.. ..5{.5j{?.55.. ...55{>f>5{... ...5jd55555... ...5..f>..5... ..d5..{5..5?.. ..W55?55d55>.. ..{>>5..j55d.. ..55Wd5{5>W5.. ..?5f>555555.. ...j5....?{... ...5>.f5.55... ...555555W5... ....555555.... ....5>?{55.... .....W{fj..... Level: Nethippy Crazywall Bricks: ...hhh!!hhh... @..h.d..d.h..@ ...h.d!!d.h... iihh.d..d.hhii .....d!!d..... @@...d..d...@@ .....d!!d..... iiiddd..dddiii .....z!!z..... @@@..z..z..@@@ .....z!!z..... iiii.zzzz.iiii ......cc...... @@@@c.cc.c@@@@ ....cccccc.... ....g....g.... ggggg....ggggg .....vvvv..... Bonus: ...555..555... ...5.5..5.5... ...5.5..5.5... 5555.5..5.5555 .....5..5..... .....5..5..... .....5++5..... l..555..555..l .....b--b..... .....b..b..... .....bggb..... .....bbbb..... .............. .............. .............. ....>....>.... >>>>>....>>>>> .....dddd..... Level: G Frigid Surprise Bricks: .............. .............. .!..!..!..!..! .............. .............. !..!..!..!..!. .............. .............. ..!..!..!..!.. .............. .............. .!..!..!..!..! .............. .............. .............. .............. .............. .............. Bonus: .............. ffffffffffffff f5ff5ff5ff5ff5 ffffffffffffff ffffffffffffff 5ff5ff5ff5ff5f ffffffffffffff .ffffffffffff. .f5ff5ff5ff5f. .ffffffffffff. ffffffffffffff f5ff5ff5ff5ff5 ffffffffffffff .............. .............. .............. .............. .............. Level: G Terrible Trouble Bricks: ccccchhhhccccc ccccchhhhccccc ccccchhhhccccc @@@@@hhhh@@@@@ cccc@hhhh@cccc ccc.@.hh.@.ccc cc..@.hh.@..cc c...@.hh.@...c ....@.hh.@.... zz@...hh...@zz zz@.hhhhhh.@zz zz@.hhhhhh.@zz zz@.hhhhhh.@zz zz@........@zz zz@@@c@@c@@@zz zzzz@c@@c@zzzz zzzz@c@@c@zzzz @@@@#c##c#@@@@ Bonus: l5555....5555l 55555....55555 55555....55555 .............. m555......555m 555........555 55..........55 5............5 .............. 55..........55 55..........55 55..........55 55..........55 55..........55 55...>..<...55 5555.>..<.5555 5555.>..<.5555 .....>..<..... Level: G Bonus Round Bricks: cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc Bonus: j555555555555j 55555555555555 55j55555555j55 55555555555555 5555j5555j5555 55555555555555 l55555jj55555l 55555555555555 l55555jj55555l 55555555555555 5555j5555j5555 55555555555555 55j55555555j55 55555555555555 j555555555555j bwwbwwbbwwbwwb }}}}}}}}}}}}}} >>>>>>>>>>>>>> Level: G My God Its Full Of Balls Bricks: .............. .............. ......!!...... .....E..E..... ...##.!!.##... ...##.!!.##... ..E..a..a..E.. ..E..a..a..E.. .!.!!.@@.!!.!. .!.!!.@@.!!.!. ..E..a..a..E.. ..E..a..a..E.. ...##.!!.##... ...##.!!.##... .....E..E..... ......!!...... .............. .............. Bonus: .............. .....bbbb..... .....b55b..... ......bb...... .....b55b..... .....b55b..... .....5..5..... bb.bb5..5bb.bb b5b55....55b5b b5b55....55b5b bb.bb5..5bb.bb .....5..5..... .....b55b..... .....b55b..... .............. .....b55b..... .....bbbb..... .............. Level: G Triple Crossed Bricks: vv..........vv v....hhhh....v .....h@@h..... ...hhh@@hhh... ...h@@@@@@h... ...h@@@@@@h... ...h@@@@@@h... ...hhh@@hhh... .iii.h@@h.ggg. ii@iih@@hgg@gg i@@@ih@@hg@@@g ii@iih@@hgg@gg .i@i.h@@h.g@g. .i@i.h@@h.g@g. .i@i.h@@h.g@g. .iii.hhhh.ggg. .............. .............. Bonus: m............m .....5555..... .....5ff5..... ...555ff555... ...5ffffff5... ...5fddddf5... ...5ffffff5... ...555ff555... .444.5ff5.444. 44>445ff544W44 4>>>45ff54WWW4 44>445ff544W44 .4>4.5ff5.4W4. .4>4.5ff5.4W4. .4j4.5ff5.4j4. .444.5555.444. .............. .............. Level: Nethippy Brick Bounce Bricks: f.e.d.f.g.f.e. c.c.c.c.c.c.c. .............. .d.g.h.h.d.h.g .c.c.c.c.c.c.c .............. f.e.g.d.e.e.d. c.c.c.c.c.c.c. .............. .h.d.g.e.d.h.f .c.c.c.c.c.c.c .............. d.h.f.d.f.h.f. c.c.c.c.c.c.c. .............. .............. .............. .............. Bonus: .............. ..b.s.......?. .............. .............. .....-...b.... .............. ..>.......>... ......-....... .............. .............. .....s........ .............. .............. ?.......>...+. .............. .............. .............. .............. Level: G Bonus Round Bricks: jjjjjjj!!jjjjj j!!jjjjjjjj!hj j!hh!jhjjjjhhj jhh!!!hj!jjhjj jhhh!hhjhjjhjj jh!!jjjjjjjjjj !h!jj!hj!jhjjj !!!jhjjjjjjjhj !h!jj!jj!!jjjj jj!jj!jjjjjjjj !jhjj!jj!h!jhj !jhjj!jjh!hjhj hjhjjjj!jhhjhj hjhhhhj!jh!jjj hjhhhhj!jjjhjj !jhhhhj!hjjjjh jjh!!!jjjjjhj! !!hhhhhhh!hj!! Bonus: 55555555555555 55555555555555 55555555555555 j555555555555j 55555555555555 555555jj555555 55555555555555 j555555555555j 55555555555555 55555555555555 555555jj555555 55555555555555 j555555555555j 55555555555555 55555555555555 55555555555555 ggggg}}}}ggggg wwwwwbbbbwwwww Level: G Growing Pains Bricks: .............. .............. !!!!!!!!!!!!!! .............. .............. !!!!!!!!!!!!!! .............. .............. !!!!!!!!!!!!!! .............. .............. !!!!!!!!!!!!!! .............. .............. !!!!!!!!!!!!!! .............. .............. .............. Bonus: .............. 33333333333333 .............. 22222222222222 22222222222222 .............. 11111111111111 11111111111111 .............. 11111111111111 11111111111111 .............. 00000000000000 00000000000000 .............. .............. .............. .............. Level: Nethippy Diamondeath Bricks: vvvvvvvvvvvvvv vvvvvv..vvvvvv vvvvv....vvvvv vvvv......vvvv vvv........vvv vv..........vv v............v .............. ......dd...... ......dd...... .............. v............v vv..........vv vvv........vvv vvvv......vvvv vvvvv....vvvvv vvvvvv..vvvvvv vvvvvvvvvvvvvv Bonus: 555555ll555555 555555..555555 55555....55555 5555......5555 555........555 55..........55 5............5 .............. ......pp...... ......pp...... .............. >............> >>..........>> >>>........>>> >>>>......>>>> >>>>>....>>>>> >>>>>>..>>>>>> >>>>>>>>>>>>>> Level: G 3 Rooms Bricks: .............. .............. .............. .............. ############## #ggg#gggg#ggg# #g.g#g..g#g.g# #g.g#g..g#g.g# #g.g#g..g#g.g# #g.g#g..g#g.g# #g.g#g..g#g.g# #g.g#g..g#g.g# ##.###..###.## .............. .............. ..#...##...#.. .............. .............. Bonus: .............. .............. .............. .............. .............. .555.5555.555. .5.5.5..5.5.5. .5.5.5..5.5.5. .5.5.5..5.5.5. .5.5.5..5.5.5. .5.5.5..5.5.5. .5.5.5..5.5.5. .............. .............. .............. .............. .............. .............. Level: G Piece Of Cake? Bricks: .............. ...vvvvvvvv... ...vvvvvvvv... ...vvvvvvvv... ...vvveevvv... ...vvveevvv... ...vvvvvvvv... ...vvvvvvvv... ...vvvvvvvv... .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. ...{cccccc{... ...c>>>>>>c... ...c>5555>c... ...c>5555>c... ...c>5555>c... ...c>5555>c... ...c>>>>>>c... ...{cccccc{... .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Line Art Bricks: !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! !edvcbaabcvde! Bonus: ...5..55..5... ...5..55..5... .*.5..55..5.*. ..w5..55..5w.. ...5..55..5... ...5g.55.g5... ...5..55..5... ...5..55..5... .*.5..55..5.*. ..w5..55..5w.. ...5..55..5... ...5..55..5... ...5l.55.l5... ...5..55..5... ...5..55..5... .*.5..55..5.*. ..w5..55..5w.. ...5..55..5... Level: G Rainbow Bricks: .k.j.i.h.g.f.g e.k.j.i.h.g.f. .e.k.j.i.h.g.f d.e.k.j.i.h.g. .d.e.k.j.i.h.g e.d.e.k.j.i.h. .e.d.e.k.j.i.h k.e.d.e.k.j.i. .k.e.d.e.k.j.i j.k.e.d.e.k.j. .j.k.e.d.e.k.j i.j.k.e.d.e.k. .i.j.k.e.d.e.k h.i.j.k.e.d.e. .h.i.j.k.e.d.e g.h.i.j.k.e.d. .g.h.i.j.k.e.d f.g.h.i.j.k.e. Bonus: .l.....}.....g ......{.{..... .....f...f.g.. ....f.....f... ...~...w.g.~.. ............g. .......g...... b.b.b.b.b.g.b. .....g........ ..*.....g...*. ...g.......... ......g....... .g............ f...g.......f. .............. ..g........... .............l g.f.........f. Level: G Ramps Bricks: .............. EEEEiiiiiiii.. ...EEEEEEEEE.. .............. .....gggggggEE .gggggEEEEEEdd .EEEEEddddddd. .............. vvvvvv........ EEEEEvvvvv.... !!!!!EEEEvvvv. ....!!!!!EEEE. .............. .........hhhhh .....hhhhhEEEE ..hhhhEEEE.... .hhEEE........ .EE........... Bonus: .............. .........lll.. .............. .............. .....4444444.. .44444......22 ......2222222. .............. 111111........ .....11111.... 11111....1111. ....11111..... .............. .........00000 .....00000.... ..0000........ .00........... .............. Level: G Chaox Bricks: .............. .@..........@. .h..........h. .gh........hg. .hgh......hgh. ..hgh....hgh.. ...hgh..hgh... ....hg..gh.... .....h@@h..... .....h@@h..... ....hg..gh.... ...hgh..hgh... ..hgh....hgh.. .hgh......hgh. .gh........hg. .h..........h. .@..........@. .............. Bonus: .............. .............. .5..........5. .c5........5c. .5c5......5c5. ..5c5....5c5.. ...5c5..5c5... ....5c..c5.... .....5..5..... .....5..5..... ....5c..c5.... ...5c5..5c5... ..5c5....5c5.. .5c5......5c5. .c5........5c. .5..........5. .............. .............. Level: G Nothing Special Bricks: .............. .............. gggggggggggggg hhhhhhhhhhhhhh ffffffffffffff jjjjjjjjjjjjjj dddddddddddddd .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Bonus Round Bricks: .............. !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! zzzzzzzzzzzzzz vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv gggggggggggggg hhhhhhhhhhhhhh iiiiiiiiiiiiii iiiiiiiiiiiiii kkkkkkkkkkkkkk Bonus: .............. 555555ll555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 jjjjjjjjjjjjjj 555555}}555555 555555}}555555 555555}}555555 555555}}555555 gggggggggggggg wwwwwwwwwwwwww bbbbbbbbbbbbbb bbbbbbbbbbbbbb >>>>>>>>>>>>>> Level: G Survival Bricks: !!!!!!!!!!!!!! ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** Bonus: 55555555555555 .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ffffffffffffff ffffffffffffff Level: G Wiggly 2 Bricks: EEEEEEEEEEEEEE Eiiii.iiiiiiiE Eiiii.iiiiiiiE EEEEE.EEEEEEEE Ejjjj.....jjjE Ejjjj.....jjjE EEEEEEEEE.EEEE Eggggg....gggE Eggggg....gggE EEEEEE.EEEEEEE Eddddd.....ddE Eddddd.....ddE EEEEEEEEEE.EEE Ehh........hhE Ehh........hhE EEE.EEEEEEEEEE .............. .............. Bonus: .............. .>555.555555>. .>555.555555>. .............. .>555.....55>. .>555.....55>. .............. .>5555....55>. .>5555....55>. .............. .>5555.....5>. .>5555.....5>. .............. .l5........5>. .l5........5>. .............. .............. .............. Level: G TCS #7 Bricks: ############## #!!!!!!!!!!!!# #!##########!# #!#!!!!!!!!#!# #!#!######!#!# #!#!#!!!!#!#!# #!#!#!##!#!#!# #!#!#!#!!#!#!# #!#!#!#!##!#!# #!#!#!#!!#!#!# #!#!#!##!#!#!# #!#!#!#!!#!#!# #!#!#!#!##!#!# #!#!#!####!#!# #!#!#!!!!!!#!# #!#!########!# #!#!!!!!!!!!!# #############g Bonus: .............. .555555555555. .5..........5. .5.55555555.5. .5.5......5.5. .5.5.5555.5.5. .5.5.5..5.5.5. .5.5.5.55.5.5. .5.5.5.5..5.5. .5.5.5.55.5.5} .5.5.5..5.5.5} .5.5.5.55.5.5} .5.5.5.5..5.5} .5.5.5....5.5} .5.5.555555.5} .5.5........5} .5.5555555555} ....gggggg..mm Level: G Symmetry Again Bricks: EEE........EEE Edd.##..##.ddE Ed..#i..i#..dE Edd.#iiii#.ddE EEE.######.EEE Ejj.#iiii#.jjE Ej..#i..i#..jE Ejj.##..##.jjE EEE........EEE Egg........ggE Eg..##..##..gE Egg.#h..h#.ggE EEE.#hhhh#.EEE cc#.######.#cc cc#.#hhhh#.#cc cc#.#h..h#.#cc c#..##..##..#c #............# Bonus: .............. .55........55. .5...5..5...5. .55..5mm5..55. .............. .55..5555..55. .5...5..5...5. .55........55. .............. .55........55. .5..........5. .55..5..5..55. .....5555..... m............m .....5555..... .....5..5..... .............. .............. Level: G Wii Bricks: .............. hhhhhhhhhhhhhh EhhhhhEhhhhhhh EhhhhhEhEEhEEh EhhhhhEhEEhEEh EhhhhhEhhhhhhh EhhEhhEhhhhhhh EhhEhhEhEEhEEh EhhEhhEhEEhEEh EhhEhhEhEEhEEh EhhEhhEhEEhEEh EhhEhhEhEEhEEh EEhEhEEhEEhEEh hEhEhEhhEEhEEh hEEEEEhhEEhEEh hhhhhhhhhhhhhh .............. .............. Bonus: .............. ......m...b..p .55555........ .55555.w...... .55555.......b .55555....p... .55.55........ .55.55........ .55.55........ .55.55....b..b .55.55........ .55.55.b...... .............w p............. .............. ......b....... .............. .............. Level: G Fast & Weak Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! .............. .............. Bonus: 5W>g5W>g5W>g5W W>g5W>g5W>g5W> >g5W>g5W>g5W>g g5W>g5W>g5W>g5 5W>g5W>g5W>g5W W>g5W>g5W>g5W> >g5W>g5W>g5W>g g5W>g5W>g5W>g5 5W>g5W>g5W>g5W W>g5W>g5W>g5W> >g5W>g5W>g5W>g g5W>g5W>g5W>g5 5W>g5W>g5W>g5W W>g5W>g5W>g5W> >g5W>g5W>g5W>g g5W>g5W>g5W>g5 .............. .............. Level: G Xbox Bricks: .............. .............. ffffffffffffff ####f####f#### zzz#f#ffff#zz# zzz#f#ffff#zz# zzz#f#ffff#zz# ####f####f#zz# zzz#f#zz#f#zz# zzz#f#zz#f#zz# zzz#f#zz#f#zz# zzz#f#zz#f#zz# ####f####f#### ffffffffffffff .............. .............. .............. .............. Bonus: .............. .............. .............. >>>>.>>>>.>>>> 555>.>....>55> 555>.>mm..>55> 555>.>....>55> >>>>.>>>>.>55> 555>.>55>.>55> 555>.>55>.>55> 555>.>55>.>55> 555>.>55>.>55> >>>>.>>>>.>>>> .............. .............. .............. .............. .............. Level: G Chaos Spiral Bricks: ############## #j...........j #............. #.ii#######ii. #.ii#j...j#ii. #.###.....###. #.#j..###..j#. #.#..j#j#j..#. #.#.###j###.#. #.#.#i..###.#. #.#.#i..#j..#. #.#.#i.##..j#. #.#.##....###. #.#.i#j..j#ii. #.#.i######ii. #.#........... #.#j.........j #.############ Bonus: .............. .5...........5 .............. ..55.......55. ..55.5...5.55. .............. ...5.......5.. .....5...5.... .............. .....5........ .....5...5.... .....5.....5.. .............. ....5.5..5.55. ....5......55. .............. ...5.........5 .............. Level: G Hell Lattice Bricks: EE.EE.EE.EE.EE EE.EE.EE.EE.EE ..!..!..!..!.. ..!..!..!..!.. EE.EE.EE.EE.EE EE.EE.EE.EE.EE ..!..!..!..!.. ..!..!..!..!.. EE.EE.EE.EE.EE EE.EE.EE.EE.EE ..!..!..!..!.. ..!..!..!..!.. EE.EE.EE.EE.EE EE.EE.EE.EE.EE ..!..!..!..!.. ..!..!..!..!.. EE.EE.EE.EE.EE EE.EE.EE.EE.EE Bonus: .............. ..5..5..5..5.. .5>55.55.55>5. .5.55.55.55.5. ..5..5..5..5.. ..5..5..5..5.. .5.55>55>55.5. .5.55.55.55.5. ..5..5..5..5.. ..5..5..5..5.. .5.55>55>55.5. .5.55.55.55.5. ..5..5..5..5.. ..5..5..5..5.. .5>55.55.55>5. .5.55.55.55.5. ..5..5..5..5.. .............. Level: G Bonus Round Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! jjjjjjjjjjjjjj Bonus: 55555555555555 5j5555555555j5 555j555555j555 55555j55j55555 55555555555555 555555jj555555 55555555555555 55555j55j55555 555j555555j555 5j5555555555j5 55555555555555 ggggggllgggggg }}}}}}}}}}}}}} wwwwwwwwwwwwww 55555555555555 bbbbbbbbbbbbbb >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: G T.C.S. Revisited Bricks: @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e @ii@hh@gg@dd@e Bonus: ....55.555.... ..55.5555..5.. ..5.5.5555555. .555555555.555 .5.55555555555 .55.555.555555 5.55555.55.55. 5.5555..555555 ..55555..55555 5.5.55..555.5. .5.55555.5555. ..555.5..5.5.. ..555.55.5.5.. ..5.5.5.55.... ...5.55555.... ...555........ .............. .......m...... Level: G Checkerboard Bricks: .............. .vvvdddvvvddd. .vvvdddvvvddd. .vvvdddvvvddd. .vvvdddvvvddd. .dddvvvdddvvv. .dddvvvdddvvv. .dddvvvdddvvv. .dddvvvdddvvv. .vvvdddvvvddd. .vvvdddvvvddd. .vvvdddvvvddd. .vvvdddvvvddd. .dddvvvdddvvv. .dddvvvdddvvv. .dddvvvdddvvv. .dddvvvdddvvv. .............. Bonus: .............. .555...555.... .555...555.... .555...555.... .555...555.... ....555...555. ....555...555. ....555...555. ....555...555. .555...555.... .555...555.... .555.m.555.... .555...555.... ....555...555. ....555...555. ....555...555. ....555...555. .............. Level: G Puzzle From Hell Bricks: .............c .@@@.@@@.@@@.c .@b@.@b@.@b@.c .@@@.@@@.@@@.c .............. c.@@@.@@@.@@@. c.@b@.@b@.@b@. c.@@@.@@@.@@@. c............. cc.@@@.@@@.@@@ cc.@b@.@b@.@b@ cc.@@@.@@@.@@@ .............. .@@@.@@@.@@@.c .@b@.@b@.@b@.c .@@@.@@@.@@@.c .............c cccccccccccccc Bonus: .............. .555.555.555.. .5.5.5.5.5m5.. .555.555.555.. .............. ..555.555.555. ..5.5.5.5.5.5. ..555.555.555. .............. ...555.555.555 m..5.5.5.5.5.5 ...555.555.555 .............. .555.555.555.. .5.5.5.5.5.5.. .555.555.555.. .............. .............. Level: G P.I.T.A. Flashback Bricks: hhhhhhhhhhhh.h ############.# ggggggggggg..g ###########.## dddddddddd..dd ##########.### jjjjjjjjj..jjj #########.#### eeeeeeee..eeee ########.##### fffffff..fffff #######.###### kkkkkk..kkkkkk ######.####### aaaaa..aaaaaaa #####.######## iiii..iiiiiiii ####.######### Bonus: m............m 555555555555.5 .............. 55555555555.55 .............. 5555555555.555 .............. 555555555.5555 .............. 55555555.55555 .............. 5555555.555555 .............. 555555.5555555 .............. 55555.55555555 m............m 5555.555555555 Level: Nethippy Lattice Bricks: .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? Level: Nethippy Bogus Round Bricks: dddddddddddddd dhh.dhhhdhhhdd dh.hdh.hdh..dd dhh.dh.hdh.hdd dh.hdh.hdh.hdd dhh.dhhhdhhhdd dddddddddddddd dddh.hdhhhdddd dddh.hdh..dddd dddh.hdhhhdddd dddh.hd..hdddd dddhhhdhhhdddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd Bonus: {{{{{{{{{{{{{{ {jW.WWWWWWWWj{ {W.>>>.>>>..W{ {W>.cc.ccc.>W{ {W.cj~.~~j.>W{ {W>.~jddj~c>W{ {W>c~djjd~c>W{ {W>c.d--d~c>W{ {W>c.d--..c>W{ {W>c.d--d~c>W{ {W>c.d-..~c>W{ {W>c~djj.~c>W{ {W>c~jddj~c>W{ {W>cj~~~~jc>W{ {W>jccccccj>W{ {Wj>>>>>>>>jW{ {jWWWWWWWWWWj{ {{{{{{{{{{{{{{ Level: G Fun City End Bricks: !!!.!.!.!!!... .!..!.!.!..... .!..!!!.!!!... .!..!.!.!..... .!..!.!.!!!... .............. .............. .!!!.!..!.!!.. .!...!!.!.!.!. .!!!.!.!!.!.!. .!...!..!.!.!. .!!!.!..!.!!.. .............. .............. .............. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: ...5.5.5...5.. 5.55.5.5.555.. 5.55...5...5.. 5.55.5.5.555.. 5.55.5.5...5.. 555555555555.. 5555555555555. 5...5.55.5..55 5.555..5.5.5.5 5...5.5..5.5.5 5.555.55.5.5.5 5...5.55.5..55 5555555555555. .............. .............. .............. ffffffffffffff >>>>>>>>>>>>>> Level: G Fatal Doomsday End Bricks: .............. ddddd.d.d.dddd d.d.d.d.d.d... ..d...ddd.ddd. ..d...d.d.d... ..d...d.d.dddd .............. dddd.d..d.ddd. d....dd.d..d.d ddd..d.dd..d.d d....d..d..d.d dddd.d..d.ddd. .............. .............. !...!...!...!. ..!...!...!... .............. vvvvvvvvvvvvvv Bonus: .............. fffff.f.f.ffff f.f.f.f.f.f... ..f...fff.fff. ..f...f.f.f... ..f...f.f.ffff .............. ffff.f..f.fff. f....ff.f..f.f fff..f.ff..f.f f....f..f..f.f ffff.f..f.fff. .............. .............. ~...~...~...~. ..~...~...~... .............. >>>>>>>>>>>>>> Level: G Wonder Walls End Bricks: ccc.c.c.cccc.. .c..c.c.c..... .c..ccc.ccc... .c..c.c.c..... .c..c.c.cccc.. .............. .ccc.c...c.cc. .c...cc..c.c.c .cc..c.c.c.c.c .c...c..cc.c.c .ccc.c...c.cc. .............. cccccccccccccc cccccccccccccc cccccccccccccc vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. .5..5.5.5..... .5..555.555... .5..5.5.5..... .5..5.5.5555.. .............. .555.5...5.55. .5...55..5.5.5 .55..5.5.5.5.5 .5...5..55.5.5 .555.5...5.55. .............. 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} >>>>>>>>>>>>>> >>>>>>>>>>>>>> Level: G Lattices End Bricks: d.d.d.d.d.d.d. .d.d.d.d.d.d.d h.h.h.h.h.hhh. .d.d.d.d.d.d.d d.h.d.h.h.h.d. .d.d.d.h.d.hhd d.h.d.h.h.h.d. .d.d.d.d.d.d.d d.h.d.h.h.hhh. .d.d.d.d.d.d.d hhh.h.dhdhdhd. .d.d.d.d.d.dhd h.d.hhdhd.h.d. .hhd.d.d.d.dhd h.d.h.hhd.h.d. .d.dd.d.dd.dhd hhhdhd.h.hdh.d d.d.d.d.d.d.d. Bonus: f.f.f.f.f.f.f. .f.f.f.f.f.f.f 5.5.5.5.5.555. .~.~.~.~.~.~.~ ..5...5.5.5... .......5...55. >.5.>.5.5.5.>. .............. ..5...5.5.555. .............. 555.5..5.5.5.. ............5. 5...55.5..5... .55.........5. 5...5.55..5... ............5. 555.5..5.5.5.. >.>.>.>.>.>.>. Level: G Fatal Doomsday II End Bricks: zzz.z.z.zzz.@@ .z..z.z.z....@ .z..zzz.zzz... .z..z.z.z..... .z..z.z.zzz... .............. .zzz.z...z.zz. .z...zz..z.z.z .zzz.z.z.z.z.z .z...z..zz.z.z .zzz.z...z.zz. .............. z..z....zz.... zz@@@zz@@@@zz@ zzz@zzzzz@zzzz z@zzz@@@zzz@@z ...z..z..z.... .............. Bonus: 555.5.5.555... .5..5.5.5..... .5..555.555... .5..5.5.5..... .5..5.5.555... .............. .555.5...5.55. .5...55..5.5.5 .555.5.5.5.5.5 .5...5..55.5.5 .555.5...5.55. .............. *..*....**.... }}...}}....}}. .............. .............. .............. .............. Level: G Madness End Bricks: hhhhhhhhhhhhhh EEEhEhEhEEEhhh hEhhEhEhEhhhhh hEhhEEEhEEhhhh hEhhEhEhEhhhhh hEhhEhEhEEEhhh hhhhhhhhhhhhhh hEEEhEhhEhEEEh hEhhhEEhEhhEEE hEEEhEhEEhhEEE hEhhhEhhEhhEEE hEEEhEhhEhEEEh hhhhhhhhhhhhhh .............. .............. .............. .............. .............. Bonus: ...55555...555 ...5...5...555 5.55...5..5555 5.55...5..5555 5.55.5.5..5555 5.55.5.5...555 55555555555555 5...5.55.5...5 5...5..5.55... 5...5.5..55... 5...5.55.55... 5...5.55.5...5 55555555555555 .............. .............. .............. .............. .............. Level: G Jedi Adventure End Bricks: vvvvvvvvvvvvv@ v***v*v*v***v@ vv*vv*v*v*vvv@ @v*vv***v***v@ @v*vv***v***v@ @v*vv*v*v*vvv@ @v*vv*v*v***v@ vvvvvvvvvvvvvv v***v**v*v***v v*vvv**v*vv*v* v***v*v**vv*v* v***v*v**vv*v* v*vvv*vv*vv*v* v***v*vv*v***v vvvvvvvvvvvvvv .............. .............. .............. Bonus: .fff>...>...>. .555.5f5.555.. >.5f.5f5f5ff.. ..5..555.555.. ..5.>555>555.. ..5f.5f5.5ff.. ..5..5f5.555f. >...>....>.... .555.55f5.555. .5ff.55f5..5f5 .555.5f55.f5f5 .555>5f55>.5f5 .5ff.5..5..5f5 .555.5..5.555. >.f.>..f.>...f .............. .............. .............. Level: G Weirdness End Bricks: eeeeeeeeeeeeee @@@@@e@e@e@@@e @e@e@e@e@e@eee ee@eee@@@e@@ee ee@eee@e@e@eee ee@eee@e@e@@@e eeeeeeeeeeeeee @@@@e@ee@e@@ee @eeee@@e@e@e@e @@@ee@e@@e@ee@ @eeee@ee@e@ee@ @@@@e@ee@e@@@e eeeeeeeeeeeeee .............. .............. .............. .............. .............. Bonus: f.f.f.f.f.f.f. 55555.5.5.555. 5m5.5.5m5.5m.. ..5...555.55.. ..5...5.5.5... ..5...5.5.555. .f.f.f.f.f.f.f 5555.5..5.55.. 5....55m5.5.5m 555..5.55.5..5 5m...5..5.5..5 5555.5..5.555. f.f.f.f.f.f.f. .............. .............. .............. .............. .............. Level: G Patience End Bricks: @@@@@@@@@@@@@@ @vvv@@v@v@@vv@ @@v@@@v@v@@v@@ @@v@@@vvv@@vv@ @@v@@@v@v@@v@@ @@v@@@v@v@@vv@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @vvv@v@@v@vvv@ @v@@@vv@v@@v@v @vvv@v@vv@@v@v @v@@@v@@v@@v@v @vvv@v@@v@vvv@ @@@@@@@@@@@@@@ hhhhhhhhhhhhhh iiiiiiiiiiiiii gggggggggggggg !!!!!!!!!!!!!! Bonus: 55555555555555 5...55.5.55..5 55.555.5.55.55 55.555.m.55..5 55.555.5.55.55 55.555.5.55..5 55555555555555 55555555555555 5...5.55.5...5 5.555..5.55.5. 5...5.5..55.5. 5.555.55.55.5. 5...5.55.5...5 55555555555555 m~>W......W>~m ~~>W......W>~~ >>>W......W>>> WWWW......WWWW Level: G TrickShot End Bricks: ############## #ccc##c#c#ccc# ##c###c#c#c### c#c#c#ccc#ccc# .#c#.#c#c#ccc# .#c#.#c#c#c### .#c#.#c#c#ccc# .###.######### .............. ############.. ccc#c###cc##.. c###cc##c#c#.. ccc#c#c#c#c#.. ccc#c#c#c#c#.. c###c#c#c#c#.. ccc#c#c#cc##.. ###########... .............. Bonus: .............. .555..5.5.555. ..5...5.5.5... m.5.m.555.555. ..5...5.5.555. ..5...5.5.5... ..5...5.5.555. .............. .............. .............. 555.5...55.... 5...55..5.5... 555.5.5.5.5... 555.5.5.5.5... 5...5.5.5.5... 555.5.5.55.... .............. .............. Level: G P.I.T.A. End Bricks: ************** hhh*h*h*hhh*** *h**h*h*h***** *h**hhh*hhh*** *h**h*h*h***** *h**h*h*hhh*** ************** hhh*h**h*hhh** h***hh*h**h*h* hh**hh*h**h*h* h***h*hh**h*h* hhh*h**h*hhh** ************** EEEEEEEEEEEEE* ************** *******E****** EEEEEEE*EEEEEE .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. f.f.f.f..f.f.f f.f.f.f..f.f.f .............. .............. Level: G T.C.S. End Bricks: ############## #!!!#!#!#!!!## ##!##!#!#!#### ##!##!!!#!!!## ##!##!#!#!#### ##!##!#!#!!!## ############## #!!!#!###!#!!# #!###!!##!#!#! #!!!#!#!#!#!#! #!###!##!!#!#! #!!!#!###!#!!# ############## ############## ###@###@###@## ############## #@###@###@###@ g############g Bonus: gggggggggggggg >5555555555f55 555555555f5555 555f555>555555 5f555f55555555 55>5555f555f>5 5555>555555555 55555555555555 jjjjjjjjjjjjjj 55555555555555 55f55555555555 55555>5f5f5>55 55555555555555 f555f5555555f5 555555555>5555 55555555555>55 555555f5555555 m5f5>55555555m Level: G End Of The End Bricks: vvvvvvvvvvvvvv .............v .@@@.@.@.@@@.v ..@..@.@.@...v v.@..@@@.@@@.v v.@..@.@.@...v v.@..@.@.@@@.v .............. .@@@.@..@.@@@. .@...@@.@..@.@ .@@@.@.@@..@.@ .@...@..@..@.@ .@@@.@..@.@@@. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: 55555555555555 .............5 .............5 .............5 5............5 5............5 5............5 .............. .............. .............. .............. .............. .............. .............. 55555555555555 55555555555555 55555555555555 55555555555555 Level: G Secret Bonus Level! Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} bbbbbbbbbbbbbb wwwwwwwwwwwwww gggggggggggggg Level: G The End Bricks: ccccccc@@@.... c..c..c.@..... c..c..c.@..... ...c....@@...@ ...c.c.c@@@@@@ ...c.c.c@ccc.@ @..c.ccc@c.... @@.c.c.c@cc... @@@c.c.c@c.... @@@@@@@@@ccc.@ cccc...@@@@@@@ c....c...c...@ c....cc..c.cc. ccc..c.c.c.c.c c....c..cc.c.c c....c...c.c.c cccc.c...c.cc. @@@@@@@@@@@@#. Bonus: 5555555....... 5..5..5....... 5..5..5....... ...5.......... ...5.5.5...... ...5.5.5.555.. ...5.555.5.... ...5.5.5.55... ...5.5.5.5.... .........555.. 5555.......... 5....5...5.... 5....55..5.55. m55..5.5.5.5.5 5....5..55.5.5 5....5...5.5.5 5555.5...5.55. .............. lbreakout2-2.6.5/client/levels/Zooligan0000664000175000017500000002222612140767201015002 00000000000000Version: 1.02 Level: Morosoph Beginnings Bricks: .............. ..!..!..!..!.. ..y..y..y..y.. ..@..@..@..@.. .............. .xxxxxxxxxxxx. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..v..v..v..v.. .............. .............. Bonus: .............. .............. ..b..m..*..b.. ..w..l..p..w.. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..?..?..?..?.. .............. .............. Level: Morosoph Hidden Danger Bricks: ..*..*..*..*.. .............. yyyyyyyyyyyyyy yxxxxxxxxxxxxy .............. v.v...v..v.v.. ....v..v...... ..@..@..@..@.v .v.v..v..v..v. .............. .............. .............. .............. .............. .............. .............. .............. vvvvvvvvvvvvvv Bonus: ..5..*..m..4.. .............. ..?.?.jj.?.?.. .f.+.f>>f.+.f. .............. c.p...c..c.p.. ....c..c...... .............c .c.c..c..c..c. .............. .............. .............. .............. .............. .............. .............. .............. }{f}{!}{!}{f}{ Level: Morosoph The Blues Bricks: .............. .c..........c. .c.vvvvvvvv.c. .c..........c. .c..........c. .c.EEEEEEEE.c. .c..........c. .c..x....x..c. .c..........c. .c.E@#..#@E.c. .............. EEEE.EEEE.EEEE .............. .!!!.vvvv.!!!. .!*!.vvvv.!*!. .!!!.vvvv.!!!. .............. yyyyyyyyyyyyyy Bonus: .............. .m..........m. ...34544543... .............. .............. .............. .............. ....m....m.... .............. ...clc..clc... .............. .............. .............. .............. ..p...**...p.. .............. .............. ..w...>>...w.. Level: Morosoph Patience Bricks: z.z.E.vv.E.z.z z.z.@....@.z.z zazaEaccaEazaz zazaEaccaEazaz zazaEaccaEazaz zazaEaccaEazaz zazaEaccaEazaz zazaEaccaEazaz zazaEaccaEazaz zazaEaccaEazaz zazaEaccaEazaz zazaEaccaEazaz EaEaEa@@aEaEaE .............. .............. .............. .............. .............. Bonus: p.m...**...m.p ....l....l.... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Morosoph Green is Good Bricks: ......@@...... xxxxx.EE.xxxxx xyyyx.EE.xyyyx xyzyx.EE.xyzyx xyyyx.EE.xyyyx xxxxx.EE.xxxxx ......##...... ......##...... @@EEE.##.EEE@@ ..v........v.. ..v........v.. .EEE@@@@@@EEE. .............. *****.**.***** *...*.**.*...* *.d.*.**.*.d.* *...*.**.*...* *****.**.***** Bonus: ......ll...... b...g....g...b .}.+......+.}. ..m........m.. .+.}......}.+. j...?....?...j .............. ......ww...... cc..........cc ..&........&.. ..f........f.. ....cccccc.... .............. {{{{{.W~.{{{{{ {...{.{{.{...{ {.~.{.{{.{.W.{ {...{.{{.{...{ {{{{{.{{.{{{{{ Level: Morosoph Red and Green Bricks: ......xx...... .@....yy....@. ..y.@.xx.@.y.. ......yy...... ..@.E.xx.E.@.. .............. xEEE.@@@@.EEEx ....v....v.... #@@@.EEEE.@@@# .............. .............. .x.x.x..x.x.x. .............. .@.@.@..@.@.@. .............. y.y.y.yy.y.y.y .............. ..v..v..v..v.. Bonus: .............. .............. ..l........l.. .............. .............. .............. .............. ....m....m.... .............. .............. .............. ...+......+... .............. .............. .............. .............. .............. .............. Level: Morosoph Spiral Carpet Bricks: zzzzzzzzzzzzzz zv..........vz z............z z.zzzzzzzzzz.z z.zv......vz.z z.z........z.z z.z.zzzzzz.z.z z.z.z....z.z.z z.z.z.**.z.z.z z.z.b.**.z.z.z z.z......z.z.z z.zzzzzzzz.z.z z..........z.z zv........vz.z zzzzzzzzzzzz.z .............z ............vz vzzzzzzzzzzzzz Bonus: lddddddddddddm df..........wd d............d d.cddddddddc.d d.dw......fd.d d.d........d.d d.d.cddddc.d.d d.d.d....d.d.d d.d.d.*>.d.d.d d.d.f.>*.d.d.d d.d......d.d.d d.cddddddc.d.d d..........d.d df........wd.d cddddddddddc.d .............d ............fd wddddddddddddc Level: Morosoph Blind Man's Bluff Bricks: v...@..v.Ev..v ..v........... @....v.......@ v......v.v.v.. ...vE....@.... .............v Ev...v..v.v..E .............. ...v@..v.E..v. v........v.... @....v.......@ ..v.....v.v... ....E....@..v. .....v........ Ev.v...v..v..E .............v ....@....E.... v.v...v..v.v.. Bonus: m...b..d..d..m ..c........... &....-.......& >......c.>.{.. ...d.....w.... .............> .~...>..-.>... .............. ...-l..{....d. ~........~.... &....-.......& ..{.....d.~... .........p..c. .....~........ .d.c...d..c... .............c ....b......... {.c...{..c.~.. Level: Morosoph Security by Obscurity Bricks: .....z..z..... ...@......@... ..E........E.. v..@.E..E.@..v ..E........E.. ...@......@... ..E..E..E..E.. v..@......@..v ..E........E.. ...@.E..E.@... ..E........E.. v..@......@..v ..E..@..@..E.. .@.v......v.@. ..@.@....@.@.. .E!E.@..@.E!E. E............E .............. Bonus: .....m..m..... .............. .............. &............& .............. .............. .............. w............w .............. .............. .............. l............l .............. ...b......b... .............. .............. .............. .............. Level: Morosoph Monkey Traps Bricks: ......EE...... ..@........@.. .v.E!E..E!E.v. .#..E.vv.E..#. .....@..@..... ......EE...... ..E.E....E.E.. .E...E..E...E. .E.v.E..E.v.E. ..E!E....E!E.. .E.E.E..E.E.E. .............. .............. ..@.@....@.@.. .@...@..@...@. .@.v.@..@.v.@. ..@!@....@!@.. .@.@.@..@.@.@. Bonus: .............. .............. .4..........4. ...f.fllf.f... .............. .............. .............. .............. ...m......m... .............. ..f.f....f.f.. .............. .............. .............. .............. ...*......*... .............. ..f.f....f.f.. Level: Morosoph Red Curse Bricks: *............* *.!..!..!..!.* *............* ************** .............. bbbbbb..bbbbbb .............. @EcE@EccE@EcE@ .............. vEEE.EEEE.EEEv .............. ************** .............. @.@.@.@.@.@.@. .!.!.!.!.!.!.! .@.@.@.@.@.@.@ .............. ************** Bonus: -W-fW-fW-fW-f- *.?..?..?..?.* >f>Wf>Wf>Wf>W> {{{{{{{{{{{{{{ .............. W>->W-..-W>->W .............. ..m...ll...m.. .............. m............m .............. {{{{{{{{{{{{{{ .............. .~w~.~.~w~.~.~ W>W>W>W>W>W>W> f.f.fwf.f.fwf. .............. {{{{{{{{{{{{{{ Level: Morosoph Red or Dead Bricks: dddddddddddddd .............. .*.*.*..*.*.*. .*.*.*..*.*.*. .............. dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd .............. *.*.*.**.*.*.* *.*.*.**.*.*.* .............. dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd dddddddddddddd Bonus: WWWWWWWWWWWWWW .............. .*.*.*..*.*.*. .*.*.*..*.*.*. .............. cccccccccccccc ~~~~~~~~~~~~~~ -------------- {{{{{{{{{{{{{{ .............. *.*.*.**.*.*.* *.*.*.**.*.*.* .............. >>>>>>>>>>>>>> cccccccccccccc -------------- {{{{{{{{{{{{{{ .............. Level: Morosoph Hornets' Nest Bricks: .b*bb*bb*bb*b. .@###@##@###@. .*...*...*...* *.*@*.*@*.*@*. .@.*.@.*.@.*.@ *.*@*.*@*.*@*. .*...*...*...* .............. @.*.@.*.@.*.@. .*@*.*@*.*@*.* @.*.@.*.@.*.@. .*.*.*.*.*.*.* ....*...*...*. .*.@...@...@.. *@*.*@*.*@*.*@ .*.@.*.@.*.@.* *.*.*.*.*.*.*. ...*...*...*.. Bonus: ...ml....lm... .............. .>...c...-...> W.{c*.>.{.Wc*. ...-...*...{.. {.>.W.-c>.c.>. .c...{...W...{ .............. c.-...c...W.c. .{c*.W.{.-.*.m ..>.....c.>... ...{.c.*.{...{ ....-...-...W. .{.c.......c.. c.W.{.>.W.{.>. .-...-.c.>...{ ..{.W.{.-.W.c. ...>.......{.. Level: Morosoph Hot and Cold Bricks: @@@@@@@@@@@@@@ vvvvvvvvvvvvvv .............. aaaaaaaaaaaaaa vvvvvvvvvvvvvv .............. @.*..*..*..*.@ .............. vvvvvvvvvvvvvv xxxxxxxxxxxxxx vvvvvvvvvvvvvv @.E..E..E..E.@ .............. EE..@@@@@@..EE .............. vvvvvvvvvvvvvv @.*..*..*..*.@ vvvvvvvvvvvvvv Bonus: {{{{{{{{{{{{{{ ffffffffffffff .............. !!!!!!!!!!!!!! ffffffffffffff .............. l.*..*..*..*.l .............. ffmffwffwffmff .............. ffwffmffmffwff l............l .............. ....{{{{{{.... .............. ffffffffffffff *.*..*..*..*.* W.f..f..f..f.W Level: Morosoph Snowed Under Bricks: .!.!.!.!.!.!.! !v!v!v!v!v!v!v .!.!.!.!.!.!.! .............. @.@.@.@.@.@.@. .............. .@.@.@.@.@.@.@ .............. cccccccccccccc .............. E.E.E.E.E.E.E. .............. .E.E.E.E.E.E.E .............. !.!.!.!.!.!.!. .!.!.!.!.!.!.! !.!.!.!.!.!.!. .v.v.v.v.v.v.v Bonus: f~f~f~f~f~f~f~ c?c?c?c?c?c?c? fWfWfWfWfWfWfW .............. -.-.-.-.-.-.-. .............. .-.-.-.-.-.-.- .............. }p}w+m}!}l+<}s .............. .............. .............. .............. .............. cfcfcfcfcfcfcf fWfWfWfWfWfWfW >f>f>f>f>f>f>f .{.{.{.{.{.{.{ Level: Morosoph Nuclear Winter Bricks: ************** ....E....E.... vvvvvvvvvvvvvv ....E....E.... *********@**** ....E....E.... vvvvvvvvvvvvvv ....E....E.... ****@********* ....E....E.... vvvvvvvvvvvvvv ....E....E.... *********@**** ....E....E.... vvvvvvvvvvvvvv ....E....E.... ****@********* ....E....E.... Bonus: ffffffffffffff .............. !!!!m!!!!m!!!! .............. ffffffffffffff .............. !!!!?!!!!?!!!! .............. ffffffffffffff .............. !!!!&!!!!&!!!! .............. ffffffffffffff .............. !!!!.. .~..........?. ....>.....0... 2..j.........1 .-.....2....0. .....+........ .............. .......-..~.-. ?............. .........1.... ............1. ....1......... ...........0.. .1...0........ .w..+......... Level: Jacques Buffa Maradona Bricks: ..vv..gg..vv.. g....gffg....g gg..gfddfg..gg .gggfddddfggg. h!!!dd!!dd!!!h hheeii!!iieehh .hheei!!ieehh. ..hhei!!iehh.. ...hhe!!ehh... a...he!!eh...a .b..he!!eh..b. ..b..h!!h..b.. ..c..h!!h..c.. .czc.h!!h.czc. ..c..h!!h..c.. ......hh...... ......hh...... .............. Bonus: ...d.......... .............. .~....5l4..... ...3>......j>. j..?........b. .........f1.2. ....2<.~...... ..-...?...?... .......2...... .............. .1..0.>.-...-. .......+...... .....1........ .+.0...?..0... .......1...... .............. .............. .............. Level: Jacques Buffa Roger Federer Bricks: zhhh!!vv!!hhhz hh..h!!!!h..hh h....h!!h....h h.gg..hh..gg.h hgggg....ggggh jgbbgg..ggbbgj jb..bggggb..bj j....bggb....j j.dd..bb..dd.j jddddc!!cddddj kd..ddccdd..dk k.bb.dddd.bb.k kb..b.dd.b..bk f....b..b....f f.ff..bb..ff.f .f!!fccccf!!f. ..ff..cc..ff.. .............. Bonus: ...f.......3.. ............~. b.......4..... ...?..5l...j.. .............. ..2........2.1 ....>....d..-. ?.....*......b ..-....<...... 1....+..2.>?.. ....j..?.....2 ..2.......1+.. ....~....-.... .............. .............. .....1...1.... ..0w......w0.. .............. Level: Jacques Buffa Mickael Shumarer Bricks: vvahhhffffffff vabahhffffgggf abcbahhfffg!gf bcbcbahhffg!gf cbabcbahffgggf badabcbhhfffff bdddabcahffffh addddacbhhfffh ddddddbcahhfhh dd..ddacbhhhha d...dddbcahhhb d....ddacbahac .....dddbcbabc .......dabcbcb ........dabcba .........dabad ..........ddd. .............. Bonus: ....f...4..... ............3. ..~.2..>...... .............. +b2.?....3.5.. ...-.js......b ........+...?. ......<...>... ..1....?2..... .......1b..~.2 0.........j... .....0..-...-. .........?.... ...........+.. ........1.0... .............. ...........w1. .............. Level: Jacques Buffa Eddy Mercks Bricks: ccccccccvvvhhh cbbbbba...hhh. cbbba....hccc. cbba....heczce cbah....heccce cbhhh..heeeeee cahhh.heeeeeeh chheehheeehehh heeeeeeeehhhhh .ccceeeeh.hhhh .czcehee...hhh .ccch.ed...hh. ......dd....h. .....dddd..... ....dddddd.... ....daaaad.... ...dbbbbbbd... ...cccccccc... Bonus: ..3....3..d... ..l..*........ ...2......5.4. b.~.....?..... .............. +1..>...2..jb. ..-..........2 1...2.<..~..-. ..j....+..1..? ..?..f..0..>.. .1..........0. ......1....... .............. ......-....... .............. .......1...... ......?...w... .....0.+.0.... Level: Jacques Buffa Karl Lewis Bricks: *!gf!!vv!!fg!* !!.gf!!!!fg.!! .!!.gf!!fg.!!. ..!..gffg..!.. ..!!..gg..!!.. ...!!.!!.!!... e..!!!bb!!!..e he.!!bccb!!.eh che.!czzc!.ehc zch.!czzc!.hcz che.!bccb!.ehc he...!bb!...eh e....!!!!....e ....!!..!!.... ....!....!.... ...!......!... ...!......!... ..bbb....bbb.. Bonus: ..d........... .3......?4..>. .....j........ ......5l...b.. .......-...... ...2+.<...+... .............. ....fp>..j..~. ?..........2.? .-1.?..5.-.... 2.....~.2...1. .0...1........ .......0.....0 .............. ....0......... ..........1... .............. ..w0+....w.0.. Level: Jacques Buffa Tiger Woods Bricks: gkvvkcvvckvvkg hgk..kcck..kgh hhgk..cc..kghh hhhg..cc..ghhh hhhgk.bc.kghhh hhhhg.bb.ghhhe hehegkbbkgehee keeeegbbgeeeek gkeeegabgdedkg zgkedkaakddkgz zzgddgaagddgzz zzgdkgaagkdgzz zgddg.aa.gddgz gddkg..a.gkddg gdkg......gkdg gkg........gkg .g..........g. .............. Bonus: .~.f.3..4..d.. .............. ......5....... ......?.....~. 2.b....2...... ...2.....j.2.b ..-...-....... ...s......?... ?...>..>.+...+ ...1..1.0..... ..j...?...1... .2..........-. +..1...0.....1 .............. ..0.......0... .............. .............. .............. Level: Jacques Buffa Pel Bricks: zzbc!!vv!!cbzz zbc!.!aa!.!cbz bc!..!aa!..!cb c!..!!aa!!..!c !..!hhbbhh!..! ..!hhhbbhhh!.. .!hh!!bb!!hh!. !hh!.!cc!.!hh! hh!..!cc!..!hh h!..!cccc!..!h !..!c!!!!c!..! ..!c!....!c!.. .!c!......!c!. .!c!......!c!. !c!........!c! !c!........!c! c!..........!c cc..........cc Bonus: ..d..3..4..... .............. ..j...5....2~. b.....<....... ?...*..l+.b... ..2...-....... .~.?...p.>..-. .....s.....2.. ......2j.....f .....+>....... ...1...0.1...+ ...........?.. ..-........... .1.0........1. ...........0.. .0............ .............. w............w Level: Jacques Buffa Sergei Bubka Bricks: fb!!!!vv!!!!bf ffb!!!!!!!!bff .ffb!!!!!!bff. ..ffb!!!!bff.. ...ffb!!bff... ...hcfbbfch... ..hdcfzzfcdh.. .hddcfzzfcddh. .hddcf**fcddh. .hddcf**fcddh. .hddcfzzfcddh. ..hdcfzzfcdh.. b..hcccccch..b gbb........bbg bggbbbbbbbbggb .bbggggggggbb. ...bbbbbbbb... .............. Bonus: ...f.3..4..... ..+2.....j..2. ......5l...... ...j-.>..2.... .............. ...?2.p+.b.... ....*....-.>.. ...2....<..... ....s....?.1.. .1........~... .........1.... ....1......... ........?..... .............. ..0.......1..0 .............. ...+.0.w..0... .............. Level: Jacques Buffa Valentino Rossi Bricks: ..chggvvgghc.. ..b!hggggh!b.. .b!!bhgghb!!b. a!!bhg!!ghb!!a !!bhgg!!gghb!! !!ahgg!!ggha!! !ahggg!!gggha! ahgggg!!ggggha a!hggh!!hggh!a .a!gh!aa!hg!a. ..ah!baab!ha.. ..b!b!aa!b!b.. ...b!!bb!!b... ...b!!bb!!b... ....b!bb!b.... .....cccc..... ......cc...... .............. Bonus: .....3..4..... ..s........... .b....5....... ...2.......... .1.....p..b2f? .....j.2...... .+.......?.>-. ....2.>.-....0 ..1.......+... .......*...2.. ...-.......... ..0....j.1.1.. ....2......... ......w....... .....?.1.+.... .............. .............. .............. Level: Jacques Buffa John McEnro Bricks: vvccbbiibbccvv vc..!iiii!..cv c..!ii!!ii!..c b.!ii.!!.ii!.b a!ii..!!..ii!a zii...!!...iiz zhaabbccbbaahz zhh...hh...hhz z!hh.hhhh.hh!z z.!hhh!!hhh!.z z..!h!..!h!..z ag..!....!..ga bgg...gg...ggb c!gg.gggg.gg!c ..!ggg!!ggg!.. ...!!!..!!!... .............. .............. Bonus: .f.2.3?.4...d. ....~......... ......l5..>... ?.s....2.j...? .b....-.....b. .............. ....j2p.+.~..2 1.+.........-. .-....<...2... ....2........> 1............. .............. 0...........1. ...1...1..0..0 ......+....... ....w....w.... .............. .............. Level: Jacques Buffa Shaki ONeal Bricks: vfffjjjjjiivvv fffffjjjiiiivv fjjjfjjiijjiiv jjhhjfiijjjjii jhhhjfijjjjjji jhjjhifjjjjjjj hj.jhiffjjjjjj hj.jihjffgggjj j..jihjjfggggj ...ijjhggfjjgg ...i.jhgjfjjjg ..i..jghjjfjfj ..i..jghjjfffj .i...gjjhjjfjh .i...g.jhhjjjh i...g...jhhjhj i...g....jhhhj i...g.....jhj. Bonus: ..3.f......... ......3....... .b.~.......d.. ..?.s....?.... ...>..?.l..+.? .-............ 1.........3... .......j....~j ...+....-..... .....1g...>... ...0.......... ..........?... ......?..1..-. .0.....0...... .............1 .............. ............+. ...........w.. Level: Jacques Buffa Jhoan Cruiff Bricks: zzdddvvvvdddzz zdd...cc...ddz dd...cggc...dd d...cggggc...d d..cggggggc..d d.cggggggggc.d ..c!gggggg!c.. .ce!!gggg!!hc. .cee!!gg!!hhc. ceeee!!!!hhhhc ceeeec!!chhhhc ceeeec!!chhhhc ceeeec!!chhhhc !ceec!!!!chhc! !ceec!..!chhc! .!cc!....!cc!. ..!!......!!.. .............. Bonus: .f..........d. ......5l...2.. .2...3..4....b b...j......... ......2...?..+ ..~.2...-..... ......p....>.. ....s......... .-.?.*.<.j..~. .......2...... .....>.....-.2 ..+.1...+..... 1......1..?... ...........1.. ....0.......0. ..0.......0... ..w........w.. .............. Level: Jacques Buffa Ayrton Senna Bricks: eeeeeeeffggiii eaaaeehfffggii ea!aehhfffgggi ea!bhhaaabbcci da!bhha!!!!!ci db!bhha!!!!!ci db!bhhaabbbbcg db!bhhhfffgggg db!chahffggggg dc!chahffggggg dc!chahff..ggg dc!c.ahf....g. dccc.b.f....a. d....b...a..b. .....b...b..b. ..a..c...b..b. ..b..c...c..c. ..c..c...c..c. Bonus: ..f..........d ....3......... ...........>.j ?..~..<-.b5.3. ..*.2...2..... .2....?...+... ..s.....>.2.~? .j.+1......... ..1....1...... .-..........1. ...2...+...... .............. ..1........... w....1........ ............2. .........0.... .............. ..0..0...w..0. Level: Jacques Buffa John Borg Bricks: havvcczzccvvah hhb!!bbbb!!ahh ahhb!!aa!!bhha !ahhc!!!!bhha! .!bhhc!!chhb!. ..!bhhcchhc!.. ...!chhhhc!... d...!c!!c!...d dd..!c!!c!..dd dd..!c!!c!..dd d...!c!!c!...d ...!chhhhc!... ..!bhhcchhb!.. .!bhhc..chhb!. !ahhc....chha! ahhb......bhha hhb........ahh .............. Bonus: .f..........d. .....45l3..... ..........?.2. .?.+2.j....... .....*..2..~.. ..2...1...b1.. ....s....>.... .....p...j.... .-...-..1....? 1...2.+....... .....<..-....1 ....>....1.... ..~....1..+... ...1.......0.. ....0......... .0........0... w............w .............. Level: Jacques Buffa Mohamed Ali Bricks: vv..!zzzz!..vv gg..!.zz.!..gg ddg.!.!!.!.gdd dddg!.!!.!gddd a!!b!!cc!!b!!a iiddgeeeegddii ffiddgeegddiff fffiddggddifff a!!b!!cc!!b!!a hhffijjjjiffhh ..hffijjiffh.. ...hffiiffh... a!!b!!cc!!b!!a ....heeeeh.... .....heeh..... .....heeh..... ......hh...... .............. Bonus: .f..........d. .............. ......5l...... .2............ ....4..2.3...? .b.j.s.....b2. ..2.+..p..j... ........2..-.. .-.?..-<..+.~. ....1......1.. .....~.1.>.... ...1.......... ....0.>?..0... .............. ......0....... .......+0..... ......w....... .............. Level: Jacques Buffa David Douillet Bricks: cccbbbaabbbccc c............c c...!aaaa!...c c....ahha....c b.!!!ahha!!!.c b....bhha....b !!bbbbhhabbb!! b.biii!!dddb.b b.biii!!dddb.b a.ciii!!dddb.b a.ciii!!dddc.a !!cccceecccc!! a....ceec....a a.!!!ceec!!!.a a....ceec....a ....!cccc!.... .............. .............. Bonus: d.b..........f .............. ....3.5..4.... .............? ..>..s.....>.b ........j..... .-..2*<...2.-. 2.~...-....~.. ...+.?...2.+.. ?.j..........2 ....1......... .1........1... .....?.1?..... ...0.......0.. .............. ....w0.+.0.... .............. .............. Level: Jacques Buffa franz Beckenboer Bricks: cccvvvivveeeee c..c..i..ezzze c...c.i..ezzze b....ci..eeeee biiiiiic.j.j.j b.....cggggj!d b.!.!..g.j.jdj b.!.!.!g!j!d.j b.!!!.!g!jdj.j a.h!!!!g!d.j.j a..h!!!!dj.j.. a...h!!d.j.j.. a....hd..j.j.. a....hd....j.. .....hd....j.. .....hd....j.. .abbccccbbbaa. .............. Bonus: f............. ...2......d..b 2........?2... .....s.......? b-.>...l.j.... ......5....~2. .........+.... 1.~....?.....0 ........1>.-.. ...+.1-....... ?...j......1.. ......?....... .....0........ .............. .............. ......0....... .w.0....+0..0. .............. Level: Jacques Buffa Magic johnson Bricks: ..cccccccccc.. .cbbbbbbbbbbc. cbaaaaaaaaaabc cba........abc cba.z....z.abc cba........abc cba........abc cba...zz...abc cba...zz...abc cba........abc cba.z....z.abc cba..z..z..abc cba...zz...abc cba........abc cbaaaaaaaaaabc .cbbbbbbbbbbc. ..cccccccccc.. .............. Bonus: ..jb??j?jb?j.. .?+bl+b.+bl+?. b+0100100100-j ?l0........1l? jb1.g....g.0+j b+0........0b? ?b0........1lb j-1...gg...0+j b+0...gg...0b? ?l0........1lj jb1.g....g.0+? b+0..g..g..0-j ?l0...gg...1lb j-1........0+? b+0010010010bs .?l-+lb+b-+b?. ..?wb?.?bj?j.. .............. Level: Jacques Buffa Jacques Buffa Bricks: ....!......... .......!..!..! ..!........... !....!.!..!.!. .............. b.!.b.bbb...bb b...b.b....b.. .b.b..b..!.b.! .b.b..b....b.. ..b..!bb....b. !.b...b.!....b .b....b...!.!b .b.!..b......b b.....bbb..bb. .............. .............. .............. .............. Bonus: ....j......... .......j..j..j ..j........... j....j.j..j.j. .............. j.j.g.jjj...jj j...j.g....j.. .g.j..j..j.g.j .j.j..j....j.. ..j..jjj....j. j.j...j.j....j .g....g...j.jg .j.j..j......j j.....jjg..gj. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/StarWars0000664000175000017500000000772712140767201014777 00000000000000Version: 1.00 Level: Celine bonus Bricks: zzzzzzxxxxxxxx zzazzzxxxxxxxx zzzzzzxxxxxxxx @@@@@@@@@@@@@@ vvvvvvvvvvvvvv .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: wwwlwfwwwlwlww lwwww&&&f+l+wl }wwl++++++++lw .............. mmmmmmmmmmmmmm .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Celine untitled Bricks: zzzkkkeee***aa zzzkkkeee***aa zzzkkkeee***aa zzzkkkeee***aa zzzkkkeee***aa zzzkkkeee***aa zzzkkkeee***aa zzzkkkeee***aa zzzkkkeee***aa .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: pppbbppbbpbppb bbbbbbppbbbpbp pppbbbbbpbbbbb pbbbbppbbbpbbp pbbpppbbpppbpp ppbbpbbbppbbpp bbpbppppppbpbp ppppppppbbpppp wwwwwwwwwwwwww .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Celine untitled Bricks: ************** ************** ************** ************** ************** ************** ************** ************** ************** v*****v***v**v vvv***vv**v*vv .............. .............. .............. .............. .............. .............. .............. Bonus: .*.......*.f.. ..m...pp...*.. .....f*.f.pp.. ..fp.......pp. .*..f.....f... ....mm.fp..... f..f.mm....*m. .pb.pb..f*..m. .mb..*........ w..m..w...w..w www.b.ww..wwww .............. .............. .............. .............. .............. .............. .............. Level: Celine action Bricks: aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa ****dddddzzzzz .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: ww.f~.bpp.p.-- .+.ffp..pp..p. .+bb..fbp..l.j b+++bb.bj.l.p} wwpppjjpjpp{{} .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Celine untitled Bricks: *******xxxzzzz *******xxxzzzz *******xxxzzzz *******xxxzzzz *******xxxzzzz @@@@@@@@@@@@@@ vvvvvvvvvvvvvv .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: lllll~~---ffff lllll~~---ffff lllll~~---ffff lllll~~---ffff lllll~~---ffff .{{........... mmmmmmmmmmmmmm .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Celine untitled Bricks: a************x .a..........x. ..a........x.. ...a......x... ....a....x.... .....a..x..... ......ax...... ......xa...... .....x..a..... ....x....a.... ...x......a... ..x........a.. .x..........a. x............a ************** .............. .............. .............. Bonus: .....f..f..... ............p. .............. ...b......p... .............. ........p..... .............. ......p....... ........j..... ....p......... .............. ..p........+.. .............. p............. ...j...j....+. .............. .............. .............. Level: Celine untitled Bricks: aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaa ************** ************** .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .p&p......b.b. .p...&b..p.b.. p...bp.bw.p... .p&pp.&..w.b.b .lllllll...... plwwlwwl}}}}jj .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Runes0000664000175000017500000003304412140767201014314 00000000000000Level: armenius fehu Bricks: .............. .............. ..dddddeffff.. ..eee#ef#ddd.. ..efd#f#eeee.. ..efd#aeffff.. ..efd#efdddd.. ..efd#fd#eee.. ..efd#d#gggg.. ..efd##giiii.. ..efd#gihehi.. ..efd#gihehi.. ..efd#gihehi.. ..efd#gihehi.. ..efddgihehi.. ..efffgihehi.. .............. .............. Bonus: .............. .............. ....+......... ..........-... ...-..5....... .......+...... ......0>s..... ...1..5....... ......l....... .........0.... ..s........... .............. ......f..-.... .............. ...-......+... .............. .............. .............. Level: armenius uruz Bricks: .............. .............. ...ffffffff... ...e#gghhhd... ..fe##ghhhdg.. ..fe##gghhdg.. ..fe#i#ghhdg.. ..fe#i#gghdg.. ..fe#ii#ghdg.. d.fe#if#ggdg.h cdfe#ifi#gdghc .cfe#iff#gdgc. ..fe#iffi#dg.. ...e#ifff#d... ...hhhhhhhh... .............. .............. .............. Bonus: .............. .............. ....+......... .............. .............. .......f..5... .....2........ .............. ...s..5....<.. .....-..0..... >............. .........-.... .............. .............. .............. .............. .............. .............. Level: armenius thurisaz Bricks: .............. .....ei....... ....f#gi...... ...hf#gfi..... ..chf##ffi.... ..chf##effi... ..chd#f#eff... ..chdaff#ef... ..chdaeee#e... ..chdagg#ed... ..chd#g#edd... ..chf##eddi... ..chf##ddi.... ...hf#gdi..... ....f#gi...... .....ei....... .............. .............. Bonus: .............. .............. .............. ......-....... .............. .......1...... ......l....... ......-....... ..0.....3.<... ......f....... ....5......... .........b.... .............. ......f....... .............. .............. .............. .............. Level: armenius ansuz Bricks: .............. .............. .............. ....d#gggd.... ....d#gggd.... ..c.d##ggd.c.. ..e.d#g#gd.h.. ..c.d#gc#d.c.. ....d#gcfd.... ....d##cfd.... ....d#h#fd.... ....d#hh#d.... .ehhh#hhhhhhe. .eeii#iiiiiee. .eeee#eeeeeee. .cccccccccccc. .............. .............. Bonus: .............. .............. .............. .............. ........5..... ..5........0.. ..+...+..-.f.. .............. ......2....... .............. .............. .............. ....-......... .........5.... .............. .....-.....b.. .............. .............. Level: armenius raidho Bricks: .............. .............. ..fff#afffff.. ..ccc#c#cccc.. ..ddd#dd#ddd.. ..eee#eee#ee.. ..ggg#ggg#gg.. ..hhh#hh#hhh.. ..iii#i#iiii.. ..fff##fffff.. ..ccc#c#cccc.. ..ddd#d#dddd.. ..eee#ee#eee.. ..ggg#gg#ggg.. ..hhh#hhh#hh.. ..iii#iii#ii.. .............. .............. Bonus: .............. .............. .......+...... ...........0.. ...-.......... ......b.p..... ........l.f... .............. ....>.4....... .......+...b.. ...s..1....... .........-.... .............. ...f.......... .............. .............. .............. .............. Level: armenius kaunaz Bricks: .............. .............. cccccccccccccc fdeihgfc#eihgf fdeihgfc#eihgf fdeihgf#deihgf fdeihgf#deihgf fdeihg#cdeihgf fdeihg#cdeihgf fdeih#fcdeihgf fdeih#fcdeihgf fdeihg#cdeihgf fdeihg#cdeihgf fdeihgf#deihgf fdeihgf#deihgf fdeihgfc#eihgf fdeihgfc#eihgf cccccccccccccc Bonus: .............. .............. .0.......w.... .............. .......1.....+ .-............ .............. .............. b....f........ ......2.-..... ......+.....f. .............. .............. .............. .............. +......-....0. .......p...... ...w.....s.... Level: armenius gebo Bricks: .............. .............. ..ddddddddd... .fd#ggggg#df.. .fd#ggggg#dfc. .fdg#bcb#gdfd. .fdg#bcb#gdfc. .fdgb#e#bgdfg. .fdgb#e#bgdfc. .fdgce#ecgdfe. .fdgce#ecgdfe. .fdgb#e#bgdfc. .fdgb#e#bgdfg. .fdg#bcb#gdfc. .fdg#bcb#gdfd. .fd#ggggg#dfc. .fd#ggggg#df.. ..ddddddddd... Bonus: .............. .............. ......-....... .+.........+.. ......f....... ..-.........>. .......5...... .p............ ...<..2.5.-... .......2...... .b...2.....b.. ......2....... ....5......... .+....l5...+.. ..>........... ..........>... ..-...f....... .......-...... Level: armenius wunjo Bricks: f............f c............c ..ee......ii.. ..ee.#....ii.. ..ee.##...ii.. .ccc.#g#..ccc. .....#gga..... .....#gg#..... .....ag#...... .....##....... ..efe#hheife.. ..efi#heigfe.. .cdfg#eighfdc. .cdfh#ighffdc. ..cdd#dddddc.. ...cccccccc... .............. .............. Bonus: 5............5 .............. ...-......s... .............. ..b........b.. ..5...f....5.. .......+...... ......3....... ......l....... .............. ......>....... .............. .............. ...+...f..+... ...-......-... ....5......... .............. .............. Level: armenius hagalaz Bricks: .............. .............. cchd#cccc#ficc ..dh#bbbb#if.. ..hd#aaaa#fi.. ..dh#eeee#if.. ..hd##ggg#fi.. ..dh#f#dd#if.. cchd#dd#f#ficc ..dh#ggg##if.. ..hd#eeee#fi.. ..dh#aaaa#if.. ..hd#bbbb#fi.. ..dh#cccc#if.. .............. .............. .............. .............. Bonus: .............. .............. <..>..-.s.5.>. .............. ...+.......... .............. .......b...b.. .....1........ f.......2....- ..5.......<... ......5....... .............. ......-...+... .......>...... .............. .............. .............. .............. Level: armenius naudhiz Bricks: .............. ffggiiiiiiieeg aaggbb#bbaaeeg ffccdd#bbddcce geehbb#bbhhffd geehbb#bbhhffd hccg#b#eeccggd effab##bbddaad effabb##bddaad eddabb#b#aaiid eddabb#bbaaiid fcceeb#bbffcch aggffb#bbeeffe aggffb#bbeeffe addcch#ggccdde .............. .............. .............. Bonus: .............. ..f...p......s .......5.>.... .+...-.....l5. .............. .......-...... .....1...g.... ............-. s....l..1..... ...>...0...... .............. .5............ ....+......+.. .............. .-.....f.>.... .............. .............. .............. Level: armenius jera Bricks: .............. .............. eeeeeee#cccccc gggggg#ddddddd ddddd#gggggggg ffff#eeeeeeeee iiii#ggggggggg hhhh#cc#dddddd iiii#deg#fffff fffff#fhi#iiii dddddd#cc#hhhh ggggggggg#iiii eeeeeeeee#ffff gggggggg#ddddd ddddddd#gggggg cccccc#eeeeeee .............. .............. Bonus: .............. .............. ..........-..0 .............. ..>........... +............. .....<........ .....-........ .......l.....b ..b...2....... ........0..w.. .............. .....s......+. ..........>... ........<..... ...-.......... .............. .............. Level: armenius isa Bricks: .....dccd..... ......cc...... chifd#eghifdcc .ghifd#eghifd. .ghifd#eghifd. .ghifd#eghifd. .ghifd#eghifd. .ghifd#eghifd. .ghifd#eghifd. .ghifd#eghifd. .ghifd#eghifd. .ghifd#eghifd. .ghifd#eghifd. .ghifd#eghifd. ccghifd#eghifc .............. .............. .............. Bonus: ......+5-..... .............. 5..>..2......5 ....+f........ ...........b.. .-............ .........1..-. .............. .......+...... ..0......s.... ............>. .<............ .....-........ ........f..+.. ...b..>....... .............. .............. .............. Level: armenius eihwaz Bricks: .............. .............. .cefii#iigeca. .fcfi##digcgb. .cff#h#hdggca. .dcfhi#fhgcdb. .cffie#dfgfca. .gcfei#fdgcgb. .cifie#dfgica. .dcfei#fdgcdb. .cefie#dfgeca. .icfei#fdgcib. .cfffe#dggfca. .gcfdf#g#gcgb. .cdfhd##hgdca. .ecfhh#hhgceb. .abababababab. .............. Bonus: .............. .............. .....>........ ...f.....-.... .....2......-. ..+......<.... .......+...... .....-........ ..><....s.b.5. .-............ .........f..>. .....5........ ...s.......... .......l..+... ..b.....>...-. .............. ...f...-...... .............. Level: armenius perthro Bricks: .............. .............. .hhh##ccc#hhh. .i..#d#g#...i. .i..#di#....i. .i.d#diecd..i. .i..#diec...i. .gg.#ciec..gg. .cch#cieahhcc. .ee.#ciec..ee. .i..#fiec...i. .i.d#fiecd..i. .i..#fi#....i. .ddd#f#g#.ddd. .ccc##ccc#ccc. .ffffffffffff. .............. .d..d....d..d. Bonus: .............. .............. .5.....5....5. .....3.>...... .............. .....<........ ......s.5..... ............s. .<.b.....b.... .....j-....... ........<..... .............. .............. .....l.f...... ..5....5...5.. ....>....>.... .............. .-..+....+..-. Level: armenius elhaz Bricks: .............. .............. .............. .bb#bb#bb#bbb. .cc#cc#cc#ccc. .gg#gg#gg#ggg. .ddd#d#d#dddd. .eee#e#e#eeee. .iiii###iiiii. .ccccc#cccccc. .hhhhh#hhhhhh. .fffff#ffffff. .ggggg#gggggg. .ccccc#cccccc. .ddddd#dddddd. .eeeee#eeeeee. .ccccc#cccccc. .bbbbbbbbbbbb. Bonus: .............. .............. .............. .....-.f...... ..+........+.. ....<...p..... .....>.>...... .....2.2...... ..b........b.. .......l...... .............. ..+.s....s.+.. .......<...... .............. ...>.....>.... .............. .............. ..-.<.f.b..-.. Level: armenius sowilo Bricks: .............. .............. .............. .icicici#icic. .cdcdcd#dcdcd. .ecece#ececec. .cfcf#fcfcfcf. .gcgc#cgcgcgc. .chch#hchchch. .icici#icicic. .cdcdcd#dcdcd. .ececece#ecec. .cfcfcfc#cfcf. .gcgcgcg#gcgc. .chchch#hchch. .icici#icicic. .cdcd#dcdcdcd. .............. Bonus: .............. .............. .............. .............. ....>...>.-.5. .............. ..1...+....... .f.....b.f.<.. ......0....... .....5...b.... ..-...-....... .......0.5.1.. ....+.....+... ...<...f...... .b............ ...5.......... ..........-.>. .............. Level: armenius tiwaz Bricks: .............. .............. .cccgf#gfcccc. .cfgf###gfgfc. .cgf#d#d#gfgc. .cf#di#id#cfc. .cg#id#di#cgc. .cfcdi#idccfc. .cgcid#cccfgc. .cfcdi#fgfgfc. .cgcic#gfgfcc. .cfcce#fcccec. .cgfge#gfgfec. .cfgfe#fgfgec. .cccce#ccccec. .............. .............. .............. Bonus: .............. .............. ....f>.p..-... .............. .-.b.>.3.l.w.. .............. .....<........ ........>..... .......b...... ...-.1....f.-. .............. .s.........>.. ..>........... ...f........b. ...-....<..... .............. .............. .............. Level: armenius berkano Bricks: .............. .............. .cccc#ccccccc. ..b.b##b.b.b.. .hhhh#e#hhhhh. .b.b.#de#.b.b. .dddd#ed#dddd. ..b.b#d#.b.b.. .ffff#affffff. .b.b.#d#b.b.b. .iiii#ed#iiii. ..b.b#de#b.b.. .eeee#e#eeeee. .b.b.##.b.b.b. .gggg#ggggggg. .............. .............. .............. Bonus: .............. .............. .............. .........s.f.. ...>..4....>.. ............s. ......b...b... ....<......... ..+...w.+..+.. .............. .b.....l....>. ....w....w.... ......4....... ...s.......... ...>...f...<.. .............. .............. .............. Level: armenius ehwaz Bricks: dc..........cd dc..........cd cc..#cccc#..cc ....##ee##.... ....#d##d#.... ....#c##c#.... ....#hhhh#.... ....#cccc#.... ....#iiii#.... cc..#cccc#..cc ec..#ffff#..ce ec..#cccc#..ce cc..#gggg#..cc ....#cccc#.... .............. .............. .............. .............. Bonus: .............> -...........+5 ......<....... ......+l...... .....2..>..... .............. ......5.f..... .............. ........-..... .b............ >....>......-. .............< .-....+....... ........5..... .............. .............. .............. .............. Level: armenius mannaz Bricks: .............. .............. .............. ..e#f.f.f#d.d. .ec##fcf##.dc. ..e#h#f#h#d.d. .e.#.h#h.#.d.. ..e#h.a.h#d.d. .ebach#hcabd.. ..eah#g#had.d. .ec##gcg##cd.. ..e#g.g.g#d.d. .e.#.g.g.#.d.. ..e#g.g.g#d.d. .ec#bgcgb#cd.. ..e#g.g.g#d.d. .............. .............. Bonus: .............. .............. .............. ..5.+...>..... ......f....b.. ..>.l.-.4..... .....>........ ............+. .-.b...b...... ..+...w.....5. ..........5>.. ........+..... .....<........ ..5........... .......b...-.. ....-......... .............. .............. Level: armenius laguz Bricks: .............. .............. .c.eg#fhdie.c. ...eg##fdie... .c.eg##fdie.c. ...eg#g#fie... .c.eg#g#fie.c. ...eg#fg#ie... .c.eg#fg#ie.c. ...eg#fhgie... .c.eg#fhgie.c. ...eg#fhdie... .c.eg#fhdie.c. ...eg#fhdie... .cccc#ccccccc. .............. .cccccccccccc. .............. Bonus: .............. .............. .>..-...f..... .............. .........<..-. ...b..2....... .-....+.1..... .............. ....s..b..p.>. .............. .........b.... ...+..<....... .f.....>..+... .............. ..-.....f..-.. .............. ...<.-....>... .............. Level: armenius ingwaz Bricks: .............. .............. ..c.c.##c.c.c. .cgcfcaahcdce. .e.d.#g.#f.g.. ..g.f#.g#.d.e. .e.d.#g.#f.g.. ..g.#.cc.#d.e. .e.d#ecce#.g.. ..g.#.cc.#d.e. .e.d.#g.#f.g.. ..g.f#.g#.d.e. .e.d.#g.#f.g.. ..g.f.aah.d.e. .e.d.h##.f.g.. .cgcfc.chcdce. ..c.c.c.c.c.c. .............. Bonus: .............. .............. .............. ..f.+.s...-... ...-.....+.f.. .......0...... ......<..b.... .............. ...>..2l...... .............. ......<....... ....b..0..>... .............. .......s...... ...-.....+.f.. ..f.+.....-... .............. .............. Level: armenius dagaz Bricks: ...c.....c.... f..c.e.e.c...h .f.c.e.e.c..h. f.f#e.e.e#.h.h .f.#e.e.e#h.h. f.f##e.e##.h.h .f.##e.e##h.h. f.f#h#e#f#.h.h .f.#iaeai#h.h. f.f#hiaif#.h.h .f.#ih#fi#h.h. f.f#h#d#f#.h.h .f.#i#d#i#h.h. f.f##dgd##.h.h .f.##dgd##h.h. f.f#dgdgd#.h.h ccc#dgdgd#cccc .............. Bonus: .........>.... -..5.<........ .............. ......+....<.+ .b..>......... .............. .+............ ......5.b....> .>..-.b....... 5.....l....+.. .......+...... ..<...-......5 ....4...2.b... +............. ......5....... .....<.<.....- b...>...-..>.. .............. Level: armenius odhala Bricks: .............. .............. cccccc#ccccccc eeeeeeaeeeeeee ccccc#b#cccccc fffffabaffffff dddd#bbb#ddddd iiii#bbb#iiiii ggggg#b#gggggg ababa#b#ababab bababa#abababa gggggg#ggggggg iiiii#i#iiiiii ddddd#d#dddddd ffff#fff#fffff ccc##ccc##cccc eeeeeeeeeeeeee cccccccccccccc Bonus: .............. .............. b......s..f.5. ...>.......... ..5...b..+..>. .+......p..... ......>....5.. ......g....... s.....+..s..+. ...b..4....... .f.5.........b .....1.0...f.. ......s....... ..>........>.. +............. ......w....... .....5.....>.. ..>.....+.5..b lbreakout2-2.6.5/client/levels/Pabelo0000664000175000017500000001324712140767201014425 00000000000000Level: PabelO Bombs Of Norway Bricks: !!!!!!!!!!!i*E !***jgj***!*E* !***jgj***!i*E !***jgj***!*E* !***jgj***!i*E !jjjjgjjjj!*E* !ggggggggg!i*E !ggggggggg!*E* !jjjjgjjjj!i*E !***jgj***!*E* !***jgj***!i*E !***jgj***!*E* !***jgj***!i*E !!!!!!!!!!!*E* *i*i*i*i*i*i*E i*i*i*i*i*i*E* *i*i*i*i*i*i*E .............. Bonus: ???????????... ?5555*&????... ?5555*&????... ?5555*&????... ?5555*&????... ?5555*&&&&?... ?5555*****?... ?5555+mmmm?... ?5555+pppp?... ?5555+pppp?... w5555+p+++w... w5555bbbbbw... wbbbbbbbbbw... wlwlllllllw... .............. .............. .............. .............. Level: PabelO Not That Easy Bricks: gggg......gggg gggg......gggg gggg......gggg gggg......gggg gggg......gggg gggg......gggg gggg......gggg ggggvvvvvvgggg ggggjjjjjjgggg ggggjjjjjjgggg ggggjjjjjjgggg gggvjjjjjjvggg ggvv......vvgg vvvv......vvvv ....vvvvvv.... .............. .............. .............. Bonus: &***......**** &pp>......jjjj &pp>.......... &pp>......!!!! &pp>.......... &..>......pppp &..>.......... &ff>ffffff.... &.!>......!!!! &.!>.......... &.!.......gggg &.!mdddddd~ggg &.mm......~~gg wwww......bbbb ....444444.... .............. .............. .............. Level: PabelO Only 4 Fun Bricks: hhhhhhhhhhhhhh jhhhhhhhhhhhhj jjhhhhhhhhhhjj jjjhhhhhhhhjjj jjjjhhhhhhjjjj jjjjjhhhhjjjjj jjjjjjhhjjjjjj jjjjjjddjjjjjj jjjjjddddjjjjj jjjjddddddjjjj jjjddddddddjjj jjddddddddddjj jddddddddddddj dddddddddddddd .............. .............. .............. .............. Bonus: .............. 5............5 55..........m5 555........m!! gggg......jjjj gggg?....?cccc ppppp?..?&&ccc ??????..++++++ bbbb?....?bbbb bbbb......bbbb www........www ww..........ww w............w .............. .............. .............. .............. .............. Level: PabelO The Bomb Level Bricks: fff*ffff*fffff fff*ffff*fffff fff*ffff*fffff ****ffff****** @@@@@fff@@@@@@ #####*f*###### gggg#*f*#ggggg gffg#fff#gfffg g**g#fffEgf*fg gffg#*f*#gf*fg gffg#*f*#gf*fg gffg#*f*#gfffg gffg#*f*#gg*gg .............. .............. .............. .............. .............. Bonus: ???5....5????? ???5....5????? ???5mmmm5????? ~~~5....55~~~~ .............. .....fff...... ..&..fff..&&.. b....fff..???. b....fff..p... b??..fff..p... .??.......p... .??.......pp.. .??........... .............. .............. .............. .............. .............. Level: PabelO Bricks: ffffffffffffff fg@g@g@g@g@g@f fggggggggggggf fgbbbbbbbbbbgf fgb********bgf fgb********bgf fgb********bgf fgb********bgf fgbbbbbbbbbbgf fg@@@@@@@@@@gf fghhhhhhhhhhgf fg!!!!!!!!!!gf fgvvv!!!!vvvgf fggggggggggggf fg@gggggggg@gf f@@@gggggg@@@f ffffffffffffff .............. Bonus: b.<<<<<<<<<..b .b...........b ..bbbbbbbbbbb. .............. ...55555555... ...55555555... ...55555555... ...55555555..~ .+..........+~ .+..........+~ .+..........+~ .+ddd<<<<...+~ .+ddd<<<...222cgj dp.w>...222cgj dp~w>>d.222c.j !p~w>>d.222cgj +p~w>>d.222cgj +p~w>>d.222cgj +.~w>>d..22c.j +.~.>>...22cgj +.~......22cgj +.~ffffff....j +.~~~~~~~~~~.j +.....ssssssss wwbbbbwwwwwwww Level: PabelO The Cool One Bricks: ************** *jjjj*dddd*ee* *jjjj*dddd*ee* *jjjj*dddd*ee* *jjjj*dddd*ee* *jjjj*dddd*ee* ************** ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff f#f#f#f#ff#ff# f*f*f*f*f*f*f* f*f*f*f*f*f*f* .............. .............. Bonus: .....d.....~.+ mmmm..d<<<.~.+ .w.<.<.d..<~.+ ..>>>>>>>bbbb dddddddddddddd dddddddddddddd wwwwwwwwwwwwww .............. .............. Level: Pabelo The Hard One Bricks: iiiiivvvviiiii iiiiivvvviiiii iiiiivvvviiiii iiiiivvvviiiii iiiiivvvviiiii iiiiivvvviiiii @@@@@vvvv@@@@@ hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh gggggggggggggg gggggggggggggg gggggggggggggg ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff Bonus: d.dff....>>>>> .?ffs....>WW.> .?--s....>.W.> .?-.s....>.WW> d?.ds....>.ff> .?fff....>ff.> .............. ?ff....f.WWW.. ?...ss.WW-..d~ ?..pd.~..-sp.~ ?WWWW.~.d-s..~ ?.....~..-s..~ ?bd..d...-s..~ ?..d..b..-sp.~ ?.d.......s..? ?b...p..b.s..? ?..l.ld..ps.b? ?...d..d?ds??? lbreakout2-2.6.5/client/levels/NewOERG10000664000175000017500000004105612140767201014511 00000000000000Version: 1.00 Level: oerg Welcome to newOerg v1.0a Bricks: .............. .fi.g.g....ed. .fi.g.g....ed. .fi.ggg....ed. .fi.g.g....ed. .fi.g.g....ed. .fi.g.g....ed. .fi........ed. .fi....h...ed. .fi....h...ed. .fi....h...ed. .fi.*..h...ed. .fi..*.h...ed. .fi.*..h...ed. .fi..*.hh..ed. .fi........ed. .fi........ed. .............. Bonus: .............. .5.........5.. ....!.b.....5. ..g........... ....b......... ....b......55. ....b......... .5............ .......4...... .......4...5.. ..5....4...... ..5.w......... .............. ..5.}.......5. ........4..... ...........55. .............. .............. Level: oerg zomglol Bricks: .............. iii..g..ggg.g. ..i..g..g.g.g. .i...g..g.g.g. i....g..g.g.g. iii..gg.ggg.gg ...i.......... ..i.i......... ..i.i......... ..i.i......... ..i.i......... ...i.iiiii.... .....i.i.i..ii .....i.i.i.i.i .....i.i.i..ii .............i ...........i.i ************i* Bonus: .............. g....5..444.5. .....5..4.4.5. .....5..4.4.5. .....5..4.4.5. .....55.444.55 ...{.......... ..2.2......... ..2.2......... ..2.2......... ..2.2......... ...}.mmmmm.... .....b.2.b.... .....b.2.b.... .....b.2.b.... .............. .............. ............W. Level: oerg some kinda hole xD Bricks: .....ggg...... ....ggjjgg.... ....jjjjjgg... ...gjiiiijg... ...gji**ijgg.. ...gji**ijjg.. ...gji**iijg.. ...gjii**ijg.. ...gjii**ijg.. ...gjji*iijg.. ....gjiiijjg.. ....gjjiijgg.. ....ggjjjjg... .....ggjjgg... .......ggg.... .............. .............. .............. Bonus: .............. .............. .............. .....55....... ...m.5........ ...m.5........ ...m.5....w5.. ....35.w...5.. ....3......5.. ....33........ .....3........ ....w33..bb... .....>>..b.... .....>>>>b.... .......bbb.... .............. .............. .............. Level: oerg AK47 (terrors) Bricks: ..e..e.e...... .e.e.e.e...... .eee.ee....... .e.e.e.e...... .e.e.e.e...... .............. ...........e.k eeeeekkkkkkekk eeee.k.k.kk... ee...kk..kk... ....k.....kk.. ....k.....kkk. ...........kk. ......*.*.***. ......*.*...*. ......****.*** ........*...*. ........*...*. Bonus: ..5..w.m...... .5.5.w.m...... .555.w{....... .5.5.w.m...... .5.5.w.m...... .............. .............p {{{{{ppppbb.pp {{{{.c.c.bb... {{...}}..bb... ....}.....bb.. ....}.....bbb. ...........bb. .............. .............. .............. .............. .............. Level: oerg Diz iz a MP5 Bricks: .............. .............. ...........j.. .j.jjjjjjjjj.. .jjjjjjjjjjjj. .j...j.jj..jj. .j...jj.j..... .j..jj..j..... ....jj...j.... ....j....j.... ....j.....j... ..........j... .............. .............. E***********.. *.*.***.***... *.*.******.*.. *.*.***..***.. Bonus: .............. .............. .............. ....ccc....... .....{{{....m. .....{..w...m. ........w..... ....b...w..... ....b....w.... ....b....w.... ....b......... .............. .............. .............. 55555.555.55.. 5.5.5.5.5.5... 5.5.5.555..5.. 5.5.5.5...55.. Level: oerg Breakout-in-the-Breakout Bricks: .............. .............. dddddddddddddd dddddddddddddd ffffffffffffff ffffffffffffff ggggggggg..ggg ggggggggg..ggg iiiiiii....iii iiiiiii....iii hhh..hh..hhhhh hhh..hh..hhhhh .............. .............. .....z........ .............. .dccd......... .............. Bonus: .............. .............. 55............ 55............ ...{{....bb... ...{{....bb... .............. .............. mm............ mm............ .....55.....mm .....55.....mm .............. .............. .............. .............. .............. .............. Level: oerg Something odd Bricks: .............. .iiiiiiiiiiii. .i****!*!***i. .i***!*!****i. .ig........gi. .igg......ggi. .ig.g....g.gi. .ig..g..g..gi. .ig.jjjjjj.gi. .ig.j****j.gi. .ig.j****j.gi. .ig.j****j.gi. .ig.jjjjjj.gi. .ig.g....g.gi. .igg......ggi. .ig........gi. .iiiii@@iiiii. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ....555555.... ....5....5.... ....5....5.... ....5....5.... ....555555.... .............. .............. .............. .mbbmmbbmmbbm. .............. Level: oerg Can you break out? Bricks: .............. .............. .............. .@@@@@@@@@@@@. .@@jjjjjjjj@@. .@@@jjjjjj@@@. .@@@@@@@@@@@@. .............. .............. .............. .............. .............. .............. .............. ....aaaaaa.... .............. .............. .............. Bonus: .............. .............. .............. .............. ...55555555... ....555555.... ..mm......mm.. .............. .............. .............. .............. .............. .............. .............. ....mmmmmm.... .............. .............. .............. Level: oerg OHNOEZ THE MUSHROOM Bricks: .............. .............. .....dddd..... ....dddddd.... ...*dddjjd*... ...*jjdjjd*... ..**jjdjjd**.. ..**jddjjd**.. ..**dddjjdj*.. ..**ddddddj*.. ..**dddddd**.. ...*dddddd*... ....jkjjkj.... ....jkjjkj.... ....jjjjjj.... ....jkkkkj.... .....jjjj..... .............. Bonus: .............. .............. .............. .............. .............. .............. ......*....... .........m.... .....~~....... ....*......... ....*.b.b..... ......bbb..... ........-s.... ....>.W..-.... ....>.Wpp-.... ....>>...p.... .....----..... .............. Level: oerg www.wh-forum.de r0x Bricks: .............. .............. .............. .............. .............. .zzzzzzzzzzzz. .dhhhhhhhhhhd. .d!!!!!!!!!!d. .dddddddddddd. .............. .............. .c...c.c.c.cc. .c...c.c.c.c.. .c...c.ccc.cc. .c...c.c.c.c.. .c.c.c.c.c.c.. .cc.cc.c.c.c.. .............. Bonus: .............. .............. .............. .............. .............. ..bb.W.mm4444. .............. ..5555555555.. ...mm......... .............. .............. .*.......p.... .*.....p.p.... .*.....-pp.... .}...{.-...... .}.+.{.-.>.... .}*.+{.-.>.+.. .............. Level: oerg Microsoft Bricks: .............. ..*.......*... ..***....**... ...**ddf***... ...***df**.... ....**d**f.... ....d****f.... ....d***ff.... ....g****h.... ....g*****.... ....g*g***.... ....**gh***... ....*gghh**... ...**......... ...*.*..***.*. .....*..*.*.*. .....*..*.*.*. .....**.***.** Bonus: .............. .............. .............. ....555333.... ....555333.... ....555333.... ....555333.... ....555333.... .............. .............. .............. .............. ....b......... ....b......... ...m.>..---.W. .....>..-.-.W. .....>..-.-.W. .....>>.---.WW Level: oerg friend or enemy? Bricks: ghijfdek*..... hijfdek**..... ijfdek**...... jfdek**....... fdek**........ dek**......... ek**.......... k**........... **............ *....jjjj..... .............* ............** ...........*** ..........**** .........***** ........****** .......******* ......******** Bonus: 555wwmm5...... 55wwmm5....... 5wwmm5........ wwmm5......... wmm5.......... mm5........... m5............ 5............. .............. .....****..... .............- ............-> ...........->{ ..........->{{ .........->{{~ ........->{{~~ .......->{{~~~ ......->{{~~~~ Level: oerg zer0 Bricks: .............. .............. .............. .............. ....xxxxx..... ...xxxxxxx.... ...xxx.xxx.... ...xx...xx.... ...xx..xxx.... ...xx.x.xx.... ...xxx..xx.... ...xx...xx.... ...xx...xx.... ...xx...xx.... ...xxx.xxx.... ...xxxxxxx.... ....xxxxx..... .............. Bonus: .............. .............. .............. .............. ....2..2...... ...2.......... ........2..... .............. ...w2..5...... ......5....... .....5...w.... ...2w....m.... ...w.....m.... ........wm.... ....-..pwm.... ....--pp.m.... .....-........ .............. Level: oerg just smile ;) Bricks: .............. .............. .*...fffff.... .*..fffffff... .*.ffafffaff.. .*.fafafafaf.. .*.fffffffff.. .*.fffffffff.. .*.faaaaaaaf.. .*.fajkjkjaf.. .*.fajkjkjaf.. .*.fakkkkkaf.. .*.fajkjkjaf.. .*.ffakjkaff.. .*..ffaaaff... .*...fffff.... .............. .............. Bonus: .............. .............. ......5555.... .5............ .5...5...5.... .5..5.5.5.5... .5....p.p.p... .5.........p.. .5..-..{...... .-..-......... .-..-......... .-............ .-.........m.. .-.>>......m.. .-..>>**...... .-...>>....... .............. .............. Level: oerg Big hard xD Bricks: .............. .............. .............. .............. .............. .eeeeeeeeeeee. .eehhh**dddee. .eehhh**dddee. .eehhh**dddee. .eekkk**jjjee. .eekkk**jjjee. .eekkk**jjjee. .eekkk**jjjee. .eeggg**fffee. .eeggg**fffee. .eeggg**fffee. .eeeeeeeeeeee. k@@@@@@@@@@@@k Bonus: .............. .............. .............. .............. .............. .>..........m. ..>.b.55...m.. ...>..55..m... ...p>.55.m.... .bbpp>55mg.... .b.ppj>mgg.... .b.ppjm>gg..b. .b.ppm..>g.... ...pm..b.>.... ...mb.b...>... ..m........>.. .m..........>. m............> Level: oerg something... Bricks: .............. .............. .............. ..jjjjjjjjj... ..*********... ..*jjjjjjj*... ..*j*****j*... ..*j*jjj*j*... ..*j*****j*... ..*jjjjjjj*... ..*********... ..jjjjjjjjj... ..jjjjjjjjj... ..jjjjjjjjj... ..jjjjjjjjj... ..jjjjjjjjj... ..jjjjjjjjj... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..>>5...5>>... ..{{5...5{{... ..{-5...5-{... ..b-5...5-b... ..b-5...5-b... ..mm55555mm... .............. Level: oerg Counter Strike Logo! Bricks: .............. .h....cc...... h.....cc...... h.....cc...... .h...ccccccc.. .....cc.cc.... .d...ccc.c.... d....cc...c... .d...cc....... d....ccc...... .....c.c...... ....cc.c...... ....c...c..... ....c...c..... ...c....c..... ...cc...c..... .........c.... .............. Bonus: .............. ......50...... ......50...... ......00...... .....0000000.. .....00.00.... .....000.0.... .....00...0... .....00....... .....000...... .....0.0...... ....00.0...... ....0...0..... ....0...0..... ...0....0..... ...00...0..... .........0.... .............. Level: oerg unbeleivable Bricks: d.....**.....g .d....**....g. ..d...**...g.. ...d..**..g... ....d.**.g.... .....d**g..... ******dg****** ******gd****** .....g!!d..... ....gv!!vd.... ...g.v!!v.d... ..g..v!!v..d.. .g...v!!v...d. g..##xxxx##..d .a...aaaa.a... .a...axxa.a... .aaa.aaaa.aaa. .............. Bonus: m............. .............. .............. .............. .............. .............. 555555..000000 .............. .....b........ ....b......... ...b.......... ..b........... .b............ b............. .....>>>>..... .....>..>..... .....>>>>..... .............. Level: oerg so you think you're good Bricks: .............. .xxx.xx.x.x... ..x..x..xxx... ..x..x....x... ..x..x..xxx... .............. x.x..x..xx.xx. x.x.x.x.x..x.x xxx.xxx.x..x.x x.x.x.x.x..x.x x.x.x.x.x..xx. .............. .............. ************** cccccccccccccc .............. acacacacacacac cacacacacacaca Bonus: .............. .....22....... .....2........ .....2........ .....2........ .............. ........22.... ........2..... ........2..... ........2..... ........2..... .............. .............. .............. .............. .............. mbbbwmmmmmmmmm mbbbwmmmmmmmmm Level: oerg fuck this windows Bricks: .............. .............. ....d......... ...ddd.f.f.... ..*ddd.fff.*.. ..**dd.fff**.. ...**d.ff**... ...d**.f**.... ....g****..... ...ggg**.h.... ...gg****h.... ...g**.h**.... ...**g.hh**... ..**.g.hhh**.d ..*.....h..*.d ....dd...d...d ....d.d.d.d... ....d.d..d...d Bonus: .............. .............. ....5......... ...555.5.5.... ..b555.555.m.. ..bb55.555mm.. ...bb5.55mm... ...5bb.5mm.... ....5bmmm..... ...555mm.5.... ...55mmmb5.... ...5mm.5bb.... ...mm5.55bb... ..mm.5.555bb.> ..m.....5..b.> ....>>...>...> ....>.>.>.>... ....>.>..>...> Level: oerg wtf... Bricks: *g...........* *g...g.....g.* *g...g....g.g* *g.g.g......g* *gg.gg.....g.* *g...g.....g.* *............* *..ggggg...g.* *....g.......* *....g.....g.* *....g.....g.* *....g.ggg.g.* *....g.g...g.* *......g...g.* *......ggg...* *......g...g.* *......g.....* *@@@@@@@@@@@@* Bonus: 0m...........3 0....!.....5.3 0.........5.53 0...........53 0..........5.3 0..........5.3 0............3 0..........5.3 0............3 0............3 0............3 0............3 0............3 0............3 0............3 0............3 0............3 0............3 Level: oerg lool Bricks: dddddddddddddd dddddddddddddd d************d d************d d************d d************d d************d d************d d************d d************d d************d d************d d************d d************d d************d ddddddddddddd* ddddddddddddd* .............. Bonus: 55555555555555 w............. w............. w.....55...5.. w.....5.5..5.. ..5.5.5.5..5.. ..5.5.5.5..5.. ...5..5.5..5.. ..5.5.5.5..5.. ..5.5.5.5..5.. ......55...5.. .............. .............. .............. .............. ...>>WWW----bm 5555555555555m .............. Level: oerg C-C-C-CHAIIIN REACTION!! Bricks: ************** *gghhhhhhhhee* *gg********ee* *gg*iiiiiiiee* *gg*iiiiiiiee* *gg********ee* *ggfffffff*ee* *ggfffffff*ee* *gg********ee* *gg*aaaaaaaee* *gg*aaaaaaaee* *gg********ee* *jjjjjjjjj*ee* *jjjjjjjjj*ee* ***********ee* EEEEEEEEEEEEE* eeeeeeeeeeeee* ************** Bonus: .............. .......----... ......-b.b-... .....--...-... ....5-....-... ....--....-... ....-...55-... ...5-....5-... ...5-....-b... b..5-5..--.... -b55-555-b.bb. -----b-------. ....55----b.b. .......----b.. ..........--.. ..........--.. -----WWWWWW--- wwwwwwwwwwwwww Level: oerg dont think its easy! Bricks: .............. .............. .............. .............. .............. .............. ..EEEEEEEEEE.. .............. ..dddddddddd.. ..dddddddddd.. ..dddddddddd.. .............. ..EEEEEEEEEE.. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ...55555555... ..5555555555.. ..mmmmmmmmmm.. .............. .............. .............. .............. .............. .............. .............. Level: oerg Raresoft logo Bricks: ..ggggggggg... ..ggggggggg... ..ghhhhhhgg... ..ggghhhhgg... ..gggghhhgg... ..ggggghhgg... ..ggggghhgg... ..ggggghhgg... ..gggghhhgg... ..ggghhhhgg... ..ghhhhhhgg... ..gghhhhhgg... ..ggghhhhgg... ..gggghhhgg... ..ggggghhgg... ..gggggghgg... ..ggggggggg... ..ggggggggg... Bonus: .............. .....5........ .....5555..... ...gg..55c.... ....g..55c.... ....g...5c.... .....g........ .............. .............. ..>>.......... ...>.....-.... ..b>>....-.... ..b......-.... ..b......-.... ........~-.... ..~~~~~~.w.... ....mm.www.... ...mm.www..... Level: oerg Untitled level xD Bricks: ************** *............* *............* *.j..........* *.j..........* *.jjj........* *.j.jj.......* *.j..jj...jj.* *.j...jjjjj..* *.j....jj....* *.j..........* *.j..........* *.j..........* *.jjjjjjjjjj.* *............* *............* *zzzzzzzzzzzz* ************** Bonus: .............. .............. .............. .............. .............. ...55......... ....55........ .....55...55.. +.....55555... +......55..... +............. +............m +............m .............m .............m .............m .............m .............m Level: oerg lbreakout2 logo ;))))))) Bricks: ........fff... ........jjf... .......fjfff.. .......fjfff.. .......ffffk.. .......ffffk.. .......fffkk.. ........ffk... ........kkk... .............. .............. .............. .............. .............. .dhhhhhhd..... ddjjjjjjdd.... .deeeeeed..... .............. Bonus: .............. ..........w... .............. .............. .........w.... .......sp-s... .............. .........-.... .............. .............. .............. .............. .............. .............. .WW..-.mm..... .W555555...... ...w.-.-...... .............. Level: oerg minimize button of winXP Bricks: ...jjjjjjjj... ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jggggggggj.. ..jgjjjggggj.. ..jgjjjggggj.. ..jggggggggj.. ...jjjjjjjj... .............. Bonus: .............. ..5555555555.. ..5555555555.. ..5555555555.. ..5555555555.. .............. .............. .............. ....*......... ....*......... ..w.**........ ..w........... ..w........... .............. ..~~~~~~~~~~.. ..{{{{{{{{{{.. ...cccccccc... .............. Level: oerg final, thx4playin! Bricks: .............. .EEEEEEEEEEEE. .EzzzzzzzzzzE. .EzzzzzzzzzzE. .EzzzzzzzzzzE. .Ed..!!!!..dE. .Ed..!!!!..dE. .Ed..!!!!..dE. .Ed..!!!!..dE. .Ed..!!!!..dE. .Ed..!!!!..dE. .Ed..!!!!..dE. .Ed..!!!!..dE. .Ed..!!!!..dE. .Ed........dE. .Eddd....dddE. .EEEE....EEEE. .............. Bonus: .............. .............. .............. ...55555555... .............. .............. .............. .............. ..c........~.. ..c........~.. ..c........~.. ..c........~.. ..c........~.. ..c..mmmm..~.. ..c........~.. ..{mm....m>>.. .............. .............. lbreakout2-2.6.5/client/levels/GreenWall0000664000175000017500000005506712140767201015111 00000000000000Version: 1.00 Level: Ade Green Wall Bricks: ffcfffcfffcfcf fccfcfcfcccfcf ffcfffcfffccfc fccfcfcccfccfc ffcfcfcfffccfc cccccccccccccc ############## xxxxxxxxxxxxxx yyyyyyyyyyyyyy zfzfzfzzfzfzfz fzfzfzffzfzfzf zfzfzfzzfzfzfz fzfzfzffzfzfzf zfzfzfzzfzfzfz yyyyyyyyyyyyyy xxxxxxxxxxxxxx .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. ....&.44.&.... .............. .............. .............. ......&&...... .&..........&. .............. .....m..m..... .............. .............. Level: Ade Dont Lose The Ball Bricks: .............. .............. .............. .....#ff#..... .....####..... ......aa...... ......##...... xaxax.aa.xaxax a###a.##.a###a x#f#x.aa.x#f#x a###a.##.a###a xa#ax.aa.xa#ax ax#xa.##.ax#xa xa#ax.aa.xa#ax ax#xa.##.ax#xa xa#ax.aa.xa#ax axxxa.##.axxxa .............. Bonus: .............. .............. .............. ......mm...... .............. .............. .............. .............. .............. ..&........&.. .............. ......&b..&... .............. .............. ...4......4... .............. .............. .............. Level: Ade No Name Bricks: ############## ############## .............. ....xxxxxx.... ...yyyyyyyy... ##zzzzzzzzzz## abc.......cba# abc#######cba# abc#fffff#cba# abc#fffff#cba# abc#fffff#cba# abc#fffff#cba# abc#######cba# abc.......cba# ##zzzzzzzzzz## ...yyyyyyyy... ....xxxxxx.... .............. Bonus: .............. .............. .............. .............. .............. .....m..m..... .............. .............. .&..........&. .....4..4..... .....l..l..... .............. .............. .............. .....m..m..... .............. .............. .............. Level: Ade Stairway to Heaven Bricks: .............. f............f #f..........f# f#f........f#f .f#f......f#f. ..f#f....f#f.. ...f#f..f#f... ....f#ff#f.... .....f##f..... .....f##f..... ....f#ff#f.... ...f#f..f#f... ..f#f....f#f.. .f#f......f#f. f#f........f#f #f..........f# f............f .............. Bonus: .............. .............. .............. .............. .............. .............. .....m..m..... ......44...... .....l..l..... .............. ......m....... .............. .............. .............. .............. .............. .............. .............. Level: Ade One Way Bricks: .............. .............. .............. ..a........a.. .aba......aba. a###a....a###a c#f#c.vv.c#f#c b#f#b####b#f#b c#f#c#ff#c#f#c c#f#c#ff#c#f#c b#f#b####b#f#b c#f#c....c#f#c a###a.aa.a###a .aba.a..a.aba. ..a.a....a.a.. ...a......a... ..a........a.. .a..........a. Bonus: .............. .............. .............. .............. ..b........b.. .............. ..b...m4...b.. .............. .............. .............. .............. ..&........&.. ......**...... .............. .............. .............. .............. .............. Level: Ade Many Chances Bricks: .............. ############## #aaaaaccaaaaa# #a##########a# #acacaaaacaca# #a#a######a#a# #a#a#ffff#a#a# #aca#f##f#aca# #aca#f##f#aca# #a#a#ffff#a#a# #a#a##xx##a#a# #acaaaaaaaaca# #a###xxxx###a# #aaacaccacaaa# ####xxxxxx#### .............. .............. .............. Bonus: .............. .............. .b...s.&l...b. .............. .............. .............. .....b..b..... .............. ...+......+... ......mm...... .............. .............. .............. .&..........&. .......*...... .............. .............. .............. Level: Ade Use R to Restart Bricks: jcba......abcj cba........abc ba....##....ab a....#aa#....a ....#f##f#.... ...#f#ff#f#... ..#f#f##f#f#.. .#f#f#ff#f#f#. #a#f#f##f#f#a# #a#f#f##f#f#a# .#f#f#ff#f#f#. ..#f#fxxf#f#.. ...#fxffxf#... ....#fxxf#.... a....#zz#....a ba..........ab cba........abc jcba......abcj Bonus: .............. .............. .............. .............. .............. ....b....b.... .............. .............. .............. .............. ..&...m4...&.. .............. .............. .............. .............. .............. .............. .............. Level: Ade Lifeless, Take Some... Bricks: .............. .............. .............. #####xxxx##### #fff#ffff#fff# #fff#ffff#fff# #####ffff##### .afff....fffa. .afff.ff.fffa. .afff.ff.fffa. .afff....fffa. #####ffff##### #fff#ffff#fff# #fff#ffff#fff# #####xxxx##### .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ......&&...... ......&m...... ..l........l.. ......44...... .............. ..l........l.. ......m....... .............. ..&........&.. .............. .............. .............. .............. Level: Ade Dont Worry Bricks: ......##...... ......##...... .....#aa#..... .....#aa#..... ....#aaaa#.... ....#abba#.... ...#abccba#... ...#abccba#... ..#f#abba#f#.. ..#f#aaaa#f#.. .#f#f#aa#f#f#. .#f#f#aa#f#f#. #f#f#f##f#f#f# #f#f#f##f#f#f# f#f#f#ff#f#f#f f#f#f#ff#f#f#f .............. .............. Bonus: .............. .............. ......ss...... .............. .............. ......b&...... .............. .............. .............. ......m....... .............. .............. .............. .&.b......b.&. ......m4...... .............. .............. .............. Level: Ade Twins Bricks: jzyx......xyzj zyx...##...xyz yx...#cc#...xy x...#bbbb#...x ...#aaaaaa#... ...#aaaaaa#... x...#bbbb#...x yx...#cc#...xy zyx...##...xyz zyx...##...xyz yx...#cc#...xy x...#bbbb#...x ...#aaaaaa#... ...#aaaaaa#... x...#bbbb#...x yx...#cc#...xy zyx...##...xyz jzyx......xyzj Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. m............m ......44...... ....&.mm.&.... ......ll...... .............. .............. p............p Level: Ade By The Way Bricks: ......aa...... ....aa##aa.... ..aa##ff##aa.. aa##ffffff##aa ##ffffffffff## aa##ffffff##aa ..aa##ff##aa.. ....aa##aa.... ......ff...... ....xx##xx.... ..xx##ff##xx.. xx##ffffff##xx ##ffffffffff## xx##ffffff##xx ..xx##ff##xx.. ....xx##xx.... ......xx...... .............. Bonus: .............. .............. .............. .............. ..b...ll...b.. .............. .............. ....&....&.... ......bb...... .............. .............. ......44...... ..&...44..b&.. .............. ...m.......... .............. .............. .............. Level: Ade U2 Bricks: .############. .#cccccccccc#. .#bbbbbbbbbb#. .#aaaa##aaaa#. .#fff#..#fff#. .#ff#....#ff#. .#f#......#f#. .##........##. .............. ccbbffxxffbbcc ccbbffxxffbbcc ccbbffxxffbbcc ######..###### zzyyffxxffyyzz zzyyffxxffyyzz zzyyffxxffyyzz .............. .............. Bonus: .............. .............. .............. ...&......&... ....b....b.... .............. .............. .............. .............. .....4..4..... .............. ...s..mm..s... .............. .....+..+..... .............. .............. .............. .............. Level: Ade Close To The Edge Bricks: .............. ...cbbbbbbc... ...cbaaaabc... ...cba##abc... ...cbaffabc... ccccba##abcccc bbbbbaaaabbbbb baaaa####aaaab ba##a#ff#a##ab baffa#ff#affab ba##a#ff#a##ab baaaa####aaaab bbbbbaaaabbbbb ccccba##abcccc ...cbaffabc... ...cba##abc... ...cbaaaabc... ...cbbbbbbc... Bonus: .............. .............. .............. .............. ......b&...... .............. .............. .............. .............. ...&......&... .............. .............. .m....44....m. .............. .............. .............. .............. .............. Level: Ade Almost Bricks: .............. ......cc...... .....cbbc..... ....cbaabc.... ...cbabbabc... ..cbabccbabc.. .cbabc##cbabc. cbabc#ff#cbabc babc#f##f#cbab abc#f#ff#f#cba yxyz#f##f#zyxy zyxyz#ff#zyxyz .zyxyz##zyxyz. ..zyxyzzyxyz.. ...zyxyyxyz... ....zyxxyz.... .....zyyz..... ......zz...... Bonus: .............. .............. .............. .............. .............. ....m.b4.m.... .............. .............. .............. ....&.bb.&.... .............. .............. .............. ....m.ll.m.... .............. .............. .............. .............. Level: Ade Learning to Fly Bricks: .....xxxx..... .....xaax..... .....xaax..... .xxxxxyyxxxxx. .xyyyyzzyyyyx. .xyzzzaazzzyx. .xyzaaccaazyx. xxyza####azyxx xyzac#ff#cazyx xyzac#ff#cazyx xxyza####azyxx .xyzaaccaazyx. .xyzzzaazzzyx. .xyyyyzzyyyyx. .xxxxxyyxxxxx. .....xaax..... .....xaax..... .....xxxx..... Bonus: .............. .............. ......b&...... .............. .............. .............. ......bl...... .............. ......44...... ......44...... ...&......&... .....&..&..... .............. .m..........m. .............. .............. .............. .............. Level: Ade Where is the Ball? Bricks: zzzzzzzzzzzzzz xxxxzxxzzzxxxx xzzxzxzxzzxzzz xzzxzxzzxzxzzz xzzxzxzzxzxzzz xzzxzxzzxzxzzz xxxxzxzzxzxxxz xzzxzxzzxzxzzz xzzxzxzzxzxzzz xzzxzxzzxzxzzz xzzxzxzxzzxzzz xzzxzxxzzzxxxx zzzzzzzzzzzzzz yyyyyyyyyyyyyy xxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzzz .............. Bonus: .............. ..*........*.. .............. .............. .............. .............. ..*........*.. .............. ....&....&.... ....*....*.... .............. .*.........*.. .............. .............. ..&........&.. .............. ...*......*... .............. Level: Ade RIP Bricks: .....####..... .....#ff#..... .....#ff#..... .....#ff#..... .....#ff#..... .#####ff#####. .#####ff#####. .#ffffffffff#. .#####ff#####. .#####ff#####. .....#ff#..... ..x..#ff#..x.. .xxx.#ff#.xxx. ..x..#ff#..x.. ..x..#ff#..x.. ..x..#ff#..x.. ..x..#ff#..x.. .....####..... Bonus: .............. .............. .............. .............. .............. ......bb...... .............. ....&.ll.&.... .............. .............. .............. .............. ..m........4.. ..4........4.. .............. ......&....... .............. .............. Level: Ade Stars Bricks: .............. ...xyzjjzyx... ...xyz!!zyx... .xxxyzjjzyxxx. .xyyyz!!zyyyx. .xyzzzjjzzzyx. xxyz!j!!j!zyxx yyyzj!jj!jzyyy zzzz!ffff!zzzz jjjjjfaafjjjjj zzzz!ffff!zzzz yyyzj!jj!jzyyy xxyz!j!!j!zyxx .xyzzzjjzzzyx. .xyyyz!!zyyyx. .xxxyzjjzyxxx. ...xyz!!zyx... ...xyzjjzyx... Bonus: .............. .............. .............. .............. .............. .....*..*..... ..&........&.. ..*........*.. ......**...... .....l44l..... ......**...... ..*........*.. .............. .....s**s..... .............. .............. .............. ......ww...... Level: Ade Love to See You Cry Bricks: #f..########## #!f..##f###### #f!f..##f##### fjf!f..##f#### #fjf!f..##f### #!fjf!f..##f## #f!fjf!f..##f# fjf!fjf!f..### #fjf!fjf!f.#f# #jf!fjf!f..### #f!fjf!f..##f# f!fjf!f..##f## #fjf!f..##f### fjf!f..##f#### #f!f..##f##### #!f..##f###### #f..########## .............. Bonus: .............. .............. ........b..... ..m........... .............. .............. ............&. ..4.l......... .............. .............. ...4.......... m............. .............. .........&.... .............. .............. .............. .............. Level: Ade Dogs Bricks: ff#ffffffff#ff ff#jffffffj#ff f##jjffffjj##f f#jjjjffjjjj#f ##jaajjjjaaj## #ajjjjjjjjjja# ##jffffffffj## .#jjffffffjj#. .##jjffffjj##. ..#jjjffjjj#.. ..##jjjjjj##.. ...#jjaajj#... ...##jaaj##... ....#jjjj#.... ....##jj##.... .....#jj#..... ######jj###### .............. Bonus: .............. .............. .............. m...&....&...m ...m......m... .4..........4. .............. .............. .............. .............. .............. .............. .............. .....*..l..... .............. .............. .............. .............. Level: Ade Demons Bricks: .#....##....#. .#....ff....#. .############. ......ff...... xffff.##.ffffx fxccc.##.cccxf fcxbb.##.bbxcf fcbxa.##.axbcf fcbax.ff.xabcf fcbaf.##.fabcf fcbaf.##.fabcf fcbaf.##.fabcf fcbaf.##.fabcf fcbax.ff.xabcf fcbxa.##.axbcf fcxbb.##.bbxcf fxccc.##.cccxf xffff.##.ffffx Bonus: .............. .............. .............. .............. .............. .............. .............. .............. m.....ll.....m ..&........&.. ...*......*... ...*......*... .............. ......44...... .............. .............. .............. .............. Level: Ade I dont know Bricks: .............. aaa!bbbbbb!aaa aa!!######!!aa a!!#ffffff#!!a !!#ff####ff#!! !#ff#ffff#ff#! #ff#ff##ff#ff# #f#ff#!!#ff#f# #f#f#!!!!#f#f# #f#f#!!!!#f#f# #f#ff#!!#ff#f# #ff#ff##ff#ff# !#ff#ffff#ff#! !!#ff####ff#!! x!!#ffffff#!!x xx!!######!!xx xxxzzzzzzzzxxx .............. Bonus: .............. ..m........m.. .............. .............. .............. .....4..4..... .....4..4..... .............. .............. ...&......&... .............. .............. ......bl...... .............. m............m .............. .............. .............. Level: Ade Robot Bricks: .....#..#..... ....######.... ....#ffff#.... ...##dffd##... ...##ffff##... ....#ffff#.... ....######.... .....####..... .....####..... .....####..... ..##########.. ..#ffffffff#.. .##ffffffff##. .##ffffffff##. ..#ffffffff#.. ..##########.. ...###vv###... ...###vv###... Bonus: .............. .............. .............. .............. .............. .....mbbm..... .............. .............. .............. .............. .............. .....4ll4..... .............. ...&......&... .............. .............. .............. ......mm...... Level: Ade Its Raining Again Bricks: ############## ######ff###### #####f##f##### ###f##ff##f### ###f######f### ###ff####fff## ###ff####fff## ##ffff##fffff# ##fxff##ffxff# #ffyffffffyfff #fxzxffffxzxff ffyjyffffyjyff fxz.zxffxz.zxf fyj.jyffyj.jyf xz...zxxz...zx yj...jyyj...jy z.....zz.....z j.....jj.....j Bonus: .............. .............. .............. ...m..&b..m... .............. .............. .............. .....l..l..... .............. ......44...... .............. .............. ......&&...... .............. .............. .*..........*. .............. .............. Level: Ade Simply Green Bricks: .......ffxffxf ......ffxffxff .....ffxffxffx ....ffxffxffxf ...ffxffxffxff ..ffxffxffxffx .ffxffxffxffxf ffxffxffxffxff fxffxffxffxffx xffxffxffxffxf ffxffxffxffxff fxffxffxffxff. xffxffxffxff.. ffxffxffxff... fxffxffxff.... xffxffxff..... ffxffxff...... fxffxff....... Bonus: ........w.wb.. .......b.wbbb. .........b.bb. .......ww..b.w ....4.b..4...w ....l....l.... ...........p.. .............. .............. .............. ...p...p...... .........b.... .b..b......... p............. .............. ..p..p........ .............. ..p........... Level: Ade Lightining Bricks: ......ff...... .....j##j..... ....z#ff#z.... ...c#jffj#c... ..bczj##jzcb.. .ab#z#ff#z#ba. .a#c#jffj#c#a. .#bczj##jzcb#. .ab#z#ff#z#ba. .a#c#jffj#c#a. .#bczj##jzcb#. .ab#z#ff#z#ba. .a#c#j..j#c#a. .#bcz....zcb#. .ab#......#ba. .a#........#a. .#..........#. .............. Bonus: .............. .............. .............. .............. .............. .............. .m.&......&.m. .............. ......44...... ......bl...... .....&..b..... .............. .............. .............. .............. .............. .............. .............. Level: Ade Early In The Morning Bricks: xfjfjfjjfjfjfx yxfjfjffjfjfxy zyxfjfjjfjfxyz .zyxfjffjfxyz. ..zyxfjjfxyz.. ...zyx..xyz... #...zy..yz...# f#...z..z...#f ff#........#ff ff#........#ff f#...z..z...#f #...zy..yz...# ...zyx..xyz... ..zyxfjjfxyz.. .zyxfjffjfxyz. zyxfjfjjfjfxyz yxfjfjffjfjfxy xfjfjfjjfjfjfx Bonus: .............. .............. ..m.m....m.m.. .............. ..4........4.. .............. .............. .............. .............. .............. m............m .............. .............. .............. ......**...... .............. .............. .............. Level: Ade North Sea Bricks: fff#ff.ff#ffff f#ffff.ffff#ff fffff#.#fffff# #ff#ff.ff#ff#g .#ffff.ffff#gg ..#ff#.#ff#gg. g..#ff.ff#gg.. gg..#f.f#gg..g ggg....ggg..gg ggg....ggg..gg gg..#f.f#gg..g g..#ff.ff#gg.. ..#ffx.xff#gg. .#ffff.ffff#gg #ffxff.ffxff#g fffffx.xfffff# fxffff.ffffxff fffxff.ffxffff Bonus: .............. .............. .............. .&l.......l&.. ..4.......4... .............. .............. .............. &m..........m& .............. .............. ....?...?..... ....?...?..... ....?...?..... .............. bbbbb......... ....w......... ....w......... Level: Ade Who knows Bricks: .....j##j..... ....fjjjjf.... ...fjjffjjf... ..fj#jffj#jf.. .fj#fjffjf#jf. fj#jfjffjfj#jf j#fjfjffjfjf#j #jfjfjffjfjfj# fjfj.x..x.jfjf fjfj.x..x.jfjf fjf#x.xx.x#fjf fjf#x.xx.x#fjf fj#x.xffx.x#jf fj#x.xffx.x#jf f#x.x.xx.x.x#f f#x.x.xx.x.x#f #x.x.x..x.x.x# #x.x.x..x.x.x# Bonus: .............. .............. .............. ..*........*.. ....w....w.... .............. .............. .b.....*....b. 4b..........b4 .bww......wwb. .&*........*&. .b..........b. .b..........b. .b..........b. .............. l.....bb.....l .............. .....w..w..... Level: Ade Whos The Next Bricks: ffff#jkkj#ffff ffff#jkkj#ffff ffff#jjjj#ffff ffffabffbaffff f###abffba###f f#jjjjjjjjjj#f f#jkkkkkkkkj#f f##jkkkkkkj##f fbajjjkkjjjabf fba###kk###abf kkkkk#kk#kkkkk fffkk#kk#kkfff kkk###kk###kkk kfbafjkkjfabfk kfbafjkkjfabfk kkk###kk###kkk fffkfxyyxfkfff fffkfxyyxfkfff Bonus: .............. .............. ......l....... .............. .............. ...&*....*&... .............. .............. ....44..44.... .............. .............. .............. ..*........*.. .....bbbb..... .....bbbb..... ......ww...... ....+....+.... .............. Level: Ade Challenger Bricks: ffffffffffffff ############## .............. .............. xxxxxx..xxxxxx yyyyyy..yyyyyy zzzzzz..zzzzzz jjjjjj..jjjjjj !!!!!!..!!!!!! .............. .............. .............. !!!!!!..!!!!!! jjjjjj..jjjjjj zzzzzz..zzzzzz yyyyyy..yyyyyy xxxxxx..xxxxxx .............. Bonus: .............. .............. .............. .............. .............. .b..b....b..b. .....b..b..... .............. .............. .............. .............. m............m .............. .............. .............. .b...w..w...b. .............. .............. Level: Ade Hungry Bricks: .............. ...k......k... ...#......#... ..kfk....kfk.. ..#f#....#f#.. .kfifk..kfifk. .#fif#..#fif#. kfiiifkkfiiifk #figif##figif# iiigiiiiiigiii #figif##figif# xfiiifxxfiiifx .#fif#..#fif#. .xfifx..xfifx. ..#f#....#f#.. ..xfx....xfx.. ...#......#... ...x......x... Bonus: .............. .............. .............. .............. .............. ..&.........&. .............. .....b44b..... .............. ......l....... .....&..&..... .m...*..*...m. .............. .............. .............. .............. .............. .............. Level: Ade Why Not Bricks: #####fffffffff #xxxxf.f.f.f.f #xyyyfffffffff #xyzzfffffffff #xyzjf.f.f.f.f ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff f.f.f.f.fjzyx# fffffffffzzyx# fffffffffyyyx# f.f.f.f.fxxxx# fffffffff##### .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .***.......... .............. .............. .........***** .............. .............. ..l4.......... .............. .............. .............. .............. .............. Level: Ade Yes Bricks: j!j!j!j!j!j!j! !j!j!j!j!j!j!j f!j!f!j!j!j!j! fj!jfj!j!j!j!j f!j!fffff!j!j! !f!f!f!j!j!j!j j!f!jfj!jffff! !jfj!f!j!f!j!j j!f!jfj!jfj!j! zjfjzfffzfzjzj jzfzjfjzjfjzjz zjfjzfzjzffffj jzfzjfjzjzjzfz zjzjzfzjzjzjfj jzjzjffffzjzfz zjzjzjzjzjzjfj jzjzjzjzjffffz zjzjzjzjzjzjzj Bonus: ..b...l.....b. .*.m.......... ..b.....*...b. .*...4.....4.. ..&........... .............* ?...*......... .......?...... .............. .............? ....*...l..... .?............ ......4...4... .............* .............. .*.......*.... ..b.w.b....... .............. Level: Ade Electra Bricks: !#!!!!!!!!!!#! f#ffffffffff#f !#!!!!!!!!!!#! ##ffffffffff## .............. a#..........#a ax#........#xa axb#......#bxa axby#....#ybxa axbyc#..#cybxa axbycz..zcybxa axbycz..zcybxa axbycz..zcybxa axbyc#..#cybxa axby#....#ybxa axb#......#bxa ax#........#xa a#..........#a Bonus: .............. m.m.m....m.m.m .............. .............. .............. .............. .............. .............. .............. .............. .............. .l4........4l. .............. .............. .............. .............. .............. .............. Level: Ade Well, Well.. Bricks: f###ccffcc###f ##c#cfkkfc#c## #cc#ccffcc#cc# kcc##a##a##cck kcccabccbaccck #ccabcjjcbacc# #cabcjffjcbac# #abcjfkkfjcba# abcjfkffkfjcba abcjfkffkfjcba #abcjfkkfjcba# #cabcjffjcbac# #ccabcjjcbacc# kcccabccbaccck kcc##abba##cck #cc#......#cc# #cc#......#cc# ####......#### Bonus: .............. .....m..m..... .............. &............& .............. .............. .............. .l..........l. .4..........4. .4..........4. .l..........l. .....b.&b..... ....bwbbwb.... ....&s++s&.... .............. .............. .............. .............. Level: Ade Chips Bricks: ffffffffffffff f............f f............f f.!..!..!..!.f f............f f............f f.!..!..!..!.f f............f f............j f.!..!..!...jz f..........jzy f.........jzyx j.!..!...jzyxy cj......jzyxyz bcj....jzyxyzj abcj.!.zyxyzje babc...yxyzjee cbab...xyzjeee Bonus: m............m .............. .............. .b..4....4..b. .............. .............. .............. .b..........b. .............. .............. ............m. .......+...... ..........m... .............. ........m..... .............. .............. .............. Level: Ade Apolo Bricks: hfhfh....hfhfh fgfgf....fgfgf hfhfh#..#hfhfh fgfgfa..afgfgf hfhfh#..#hfhfh fgfgfa..afgfgf hfhfh#..#hfhfh fgfgfa..afgfgf hfhfh#..#hfhfh fgfgfa..afgfgf hfhfh#..#hfhfh fgfgfa..afgfgf a#a#a#..#a#a#a .............. .............. zjzjzjzjzjzjzj ykykykykykykyk xfxfxfxfxfxfxf Bonus: .............. .............. ..*........*.. .....*..*..... .............. .............* .............. ..*........*.. .............. ....s...ss.... .............. ....s*..*s.... .............. .............. .............. .............. .............. .............. Level: Ade April Bricks: abcxyz!!zyxcba abcxyzjjzyxcba abcxyz!!zyxcba abcxyzjjzyxcba abcxyz!!zyxcba abcxyzjjzyxcba abcxyz!!zyxcba abcxyzjjzyxcba abcxyz!!zyxcba abcxyzjjzyxcba abcxyz..zyxcba abcxy....yxcba abcx......xcba ab#........#ba a#..........#a #............# .............. .............. Bonus: .............. .............. .............. .............. .............. ..m...mm....m. .............. .............. .............. .............. .............. .............. .............. .&..........&. .............. .............. .............. .............. Level: Ade April Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Iris0000664000175000017500000005601512140767201014131 00000000000000Version: 1.00 Level: John van Hooff Surprise Bricks: ....k....k.... ....k.jj.k.... fdddk.##.k..df @...k##*#...d@ @...#.#....d.@ ......#...dd.. .b....@....... ..bb..@..b.... .i.b..#.b...i. @i....#.....i@ @i......b...i@ .i..........i. ##ee.....eee## ....#####..... .............. .............. .............. .............. Bonus: ....4......... ......5..m.... 5230.....c...4 ....3.......2. ...........g.. ..........2... .p............ ..w........... .2.2....*...2. ............3. ............j. .3..........+. ..00.....00-.. .............. .............. .............. .............. .............. Level: John van Hooff CooL Bricks: .............. !.*........*.! .EE@E.ii.E@EE. .............. ..##..@@..##.. .............. @.!........!.@ @............@ @............@ @............@ ....!....!.... .............. vvvvv....vvvvv ..y........y.. ....k....k.... ..zz..@@..zz.. .............. .............. Bonus: 5*..........m5 .............. 2.....dc.....2 .............. .............. ..g........g.. .1.0......0.1. ..1........1.. .............. .............. ...j2....2j... .............. fc-<>....<>+?f .............. .............. ..>+......->.. .............. .............. Level: John van Hooff Santa Claus Bricks: .h........d... hgh......ddd.. .g.......jjdd. g..dd....eejd. EE.hd...egejd. ..dd...eeeejd. ..dd....eee..d .ddd.f...edd.. .ddd.fd.jjdd.. ####x.djddddd. #za#x..dddd.df #ah#x...dhd..f #hb#x...d.d... #hb#x...d.d... #hh#x..dd.dd.. #ee#x.dd...dd. #ii#x.d.....d. cccc.kk....kk. Bonus: .............. m*W.......4... .........&b2.. 5..0........&. ....0....54}c. ..&.....{<2.*. ..2s....2....p .c.2.....4?4.. .50}.2..lw.... ....p..4W!1!4. .5..c....4..W2 .0f.0...?.W..? .-W.....{.1... .?0.0.....c... .......<1..+.. ..?...+>...~.. ............s. Wjf...-....-f. Level: John van Hooff Wild live Bricks: .........ff..! ....!...f.ef.. ..d....ffe.f## .ddd..ff.e.ff. .dd...f...e..f .dd..fe..g...f ddd.ff.eggg.ff ddd..f..ghg.f. .ddd.f.fgggff. .ddd...egggf.@ .ddd..f.eg.f.. aaddae!.eeee.! ...d.e..eee... ....de...eee.. c.!..e..eee... .....e..eeee.. bbaccffeeeeeee ccabbff.eyyeee Bonus: .............. ...........?.. .......5.}.... .22&.......&4. .<}...g....... .........d.... >.j..d..5.f.4. .g...5...m..4. ..?..f....j.4. .f33....5..g.. .........w.... .............. ........&50... ....<....>0... d........?0... .........s.0.. -f+.....+..<+. ....f........f Level: John van Hooff Like a Snake Bricks: .............. .fffff...ffff. feeeeef.eeeeef feeeeef.eeeeef fefffef.efffef fef.fef.ef.fef fef.fef.ef.fef eee.fef.ef.fef eee.feeeef..f. eee..feeef.... .d....fff..... .d...........@ .d...g....z..@ d.d.g.g....g.@ ............g. .............. ...vdyvyvc.... iii.......iiii Bonus: .............. .2.5.....5?... 4..g2...&..2.. m.1?..2...g.j. &1...s2..d.p.4 ....dlf.c....f ..j..12..3.?b4 .~1.<.2.1..... 1...b1......<. d3.....1.1.... ........~..... .............. .?...1........ 0.0...+....1.. ............?. .............. ...<.-.f+..... f>+.......-.f. Level: John van Hooff Cold World Bricks: ..jj......jj.. !....*..*....! .####....####. gggggg!!gggggg gggggggggggggg .............. kkkkkkkkkkkkkk cccccccccccccc EggggggggggggE ggg!gggggg!ggg j............j !.jjjjjjjjjj.! zzzzcccccczzzz gggggggggggggg gggggggggggggg cccccccccccccc !.!.!.!!.!.!.! .............. Bonus: m.5........5.m .............. .............. ..4.......4... *............* .............. ..g...WW.g.... .d.j000000j.d. .f.f.f.f..f.f. f.f.f.f.f..f.f W............W ...~wl~~lw~... p.2..2..2..2.p f.f.f.f.f.f.f. .f.f.f.f.f.f.f b.+<>-...-><+b .?.w.pw.p.w.?. .............. Level: John van Hooff Darkness Bricks: !............! .v....vv....v. ..v...vv...v.. ...v..vv..v... ....v....v.... .....v..v..... ......vv...... ......vv...... ......vv...... .....v..v..... ....v....v.... ...v..vv..v... ..v...vv...v.. .v....vv....v. v.....vv.....v .v..........v. vvvvvvvvvvvvvv jjjjjjjjjjjjjj Bonus: .............. ......55...... .............. ...j......j... .............. .....d..d..... .............. ......**...... ......22...... .............. ....f....f.... ......}{...... ......dd...... ......ff...... f............f .+..........+. dddddddddddddd ************** Level: John van Hooff Wisdom Bricks: .....d..d..... ......dd...... .....dhhd..... .....dddd..... .....d@@d..... ......dd...... .....dddd..... ....vddddv.... EEE.dddddd.EEE ...vddddddv... ...#dddddd#... ...#dddddd#... ...#dddddd#... f...dddddd...f .f...dddd...f. ..f...dd...f.. ...fffddfff... cccczzzzzzcccc Bonus: .............. .............. .......l...... ......5.4..... .............. .............. .............. ......1*...... .....pW.3..... ...j3.1..3j... .....*.3...... ....1...p..... .....3.1W*.... 0............0 .{...-1.-...}. ..0....3...0.. .....+..+..... .0.f1....1f.0. Level: John van Hooff Christmas Tree Bricks: ...@..e..@@... ......e....... E#....f.....#E i#...hfh....#i i#....f.....#i .#...f*f....#. .#..hfffh...#. .#...*#*....#. ....ff#ff..... ...hff#ffh.... @...f*#*f....@ ...fffffff.... ..hfffffffh... ...f*fff*f.... ..fffffffff... vhffffdffffhvv .v.fvvdvvf.v.. vv...ddd...vvv Bonus: .............. ......5....... .............. .....0l0...... ......f....... .............. ....0.m.0..... .............. .....1.1...... ...0..?..0.... .............. ...fwg.gwf.... ..0.d?j?d.0... ......2....... ...2..{..2.... .0.+-...-+.0.. .............. ........... Level: John van Hooff Birthday Party Bricks: .............. ......hh...... .h.h..ii..h.h. .i.i..**..i.i. .i.*..ii..*.i. .i.i..ii..i.i. .i.i..ii..i.i. .i.i..ii..i.i. .zzzzzzzzzzzz. .c**********c. .dddddddddddd. .gggggggggggg. .ff********ff. .jjjjjjjjjjjj. .eeeeeeeeeeee. ......v....... vvvvvv.vvvvvvv cccccc.ccccccc Bonus: .............. ......55...... .0.0......0.0. .............. .s..........l. ......gj...... .0.0..!m..0.0. .............. ...d.....d.... ...{......{... ...~f~f~f~f... .&1111111111&. .............. ..f.0.0.0..f.. ...+.fpwf.+... .............. .ff*f!.!.f*ff. ><.+......+.<> Level: John van Hooff Iridescene Bricks: @@#iiihiii#@@@ cc#jih*hij#jjj ii#jhggghj#iii jj#hgzzzgh#bbb EE###EEE###EEE hhhhhhhhhhhhhh hhhhhh**hhhhhh iiiii*vv*iiiii iiiii*vv*iiiii jjjjj*vv*jjjjj ggggg*vv*ggggg ffffff**ffffff ffffffffffffff dddddddddddddd dddddddddddddd eeeeeeeeeeeeee eeeeeeeeeeeeee kkkkkkkkkkkkkk Bonus: .....555...... .............. ....11111..... .............. .............. .............. .111.j..j..mm. ..g...ff....ff -----.ff.gff.. ......ff.----- .mm!..ff..!... ff............ ..ffWWWWW000.. .}{........{}. ....??????.... .+++.0000.+++. ....bbbbbbbbbb wwwwwwwwwwwwww Level: John van Hooff Sand-glass Bricks: .............. .............. ...EdddddddE.. ...EdddddddE.. ....EdddddE... ....EdddddE... .....EdddE.... .....EdddE.... ......@e@..... ......@e@..... .....E*e*E.... .....EhhhE.... ....EhhhhhE... ....EhhhhhE... ...EhhhhhhhE.. ...EhhhhhhhE.. ...*hhhhhhh*.. ..EE#######EE. Bonus: .............. .............. ....m*.*.*m... ......1.1..... ......*m*..... .....0c.c0.... ......f.f..... .......0...... .......m...... .......1...... .......1...... .......!...... .....+jmj+.... ......2*2..... ....*0.0.0*... ....0~0.0~0... ....mw555wm... .............. Level: John van Hooff Sphinx Bricks: ....e......... ....ee........ ...eeee....... ...egee....... ..eeeee....... ..eeeee....... ...eee........ ...eee........ ....eeee...... ....eeeeeeee.. ....eeeeeeeee. ...eeeeeeeeeee ...eeeeeeeeeee vveeeeeeeeeeee vveeeeeeeeeeev eeeeeeeeeeeeev eeee......eeee eee..vvvv...ee Bonus: .............. ....55........ ....j......... .............. ....1~........ ..W.1.b....... ...~1......... ....1......... ....1*........ ....1..!4!.... ....1..l4m.3.. ....1...4..3.. ....1...4..3~. ...*1.c.4.*3c. ....1W..4..3W. ....1->+4w.3.. ...w......-3.. >f+.........f> Level: John van Hooff Pharaoh's Tomb Bricks: ......#....... ......#....... .....#j#...... .....aia...... .....#j#...... ....#jjj#..... ....#jgj#..... ....#jjg#..... ...#jejgj#.... ...#jggjd#.... ...#gjjjj#vvvv ..#jjgjjjj#... ..ajjjgggga... ..#jjgjjjj#... .#hjgjjjjjj#.. .#jgjjjjjjj#.. #jjjjjjjjjjj#z #############v Bonus: .............. .............. .............. ......*....... ......?....... .....5.2...... .......2...... .............. .....l........ ....~......... .......5{..... ...5.....!.... ...m}?...m.... ......5..~.... .......~?.l... ..........2... .22?.W...W2... .............. Level: John van Hooff Buildings Bricks: ......E...gg.. ...ii.E...gg.. ...*i.E...gg.. ...ii.E.!.gg.. ...*i.E.!.gg.. ...ii.E.!.ggjj ...*i.E.!.ggjj ###ii.E.!.ggjj #*#*i.E.!.ggjj #*#ii.E.!.d.jj #*#*i.E..ddd.j #*#ii.E.ddedd. #E#*i.Edde.edd #*#ii.Edeeeeed #*#*i.E.e.eee. #*#fi.E.e.e.e. ###fffE.e.eeef ffffffff#####f Bonus: ...........?.. ...m1.....?... ....1......?.. ...1....*.?... ....1...0.m?.. ...1....0.?.2. ....1...0..?2f ...1....0.?.2f .l..j...0..?2l .l.1d...0.d.2f ....1......?.* ...1....4.5.2. ....1......g.f .l.1....?.*..! ....1.......2. ...f......2... .....<....fmf. .p.*.w>......c Level: John van Hooff Light headed botles Bricks: ..g.@@...@@.g. @.g.........g. @.g...i.i...g. @.g...iii...g. ..g...iii...g. .ggg..iii..ggg .ggg..iii..ggg .ggg..iii..ggg .ggg..iii..ggg .ggg..iii..ggg .ggg..iii..ggg .ggg..iii..ggg .ggg..iii..ggg .ggg...i...ggg .ggg.@.i.@.ggg .g.g.@.i.@.g.g .....@.i.@.... .......i...... Bonus: ..l.........l. ..j.........g. ..m...c.c...m. ..j...cdc...g. ..j...cgc...g. .gjg..cgc..jgj .gjg..c?c..jgj .gjg..c?c..jgj .gjg..c?c..jgj .gjg..c?c..jgj .gjg..c?c..jgj .gjg..cgc..jgj .gjg..cgc..jgj .gjg...g...jgj .gjg...g...jgj .g.g...g...j.j .......>...... .......l...... Level: John van Hooff Bulb on Bulb off Bricks: ......ee...... ......ee...... .!....ee....!. ......ee...... .....c**c..... .....bhhb..... ....chhhhc.... ....bhhhhb.... ...chhhhhhc... ...bhhjjhhb... ...chjjjjhc... ...bhhjjhhb... ...chhjjhhc... ...bhhhhhhb... ...chhhhhhc... ....bhhhhb.... .!...chhc...!. ......bb...... Bonus: ......**...... d!d...d!...d!d !.!...!d...!.! {!*...d!...*!{ .....d..d..... ......22...... ....dl22ld.... ....p.22.p.... ....d!22!d.... ...d!dmmd!d... ...!d....d!... ...d!djjd!d... ...!d!pp!d!... ...d!d22d!d... ....d!22!d.... *!}..d!!d..}!* !.!..d22d..!.! d!d........d!d Level: John van Hooff Bad Jumbojet Bricks: j......jjj..jj jj.jjj.jj..jjj .jjjjjjj...... .....j...E.... ........E....E .......E....EE ......E.....E. ..EEEEEEaEEEE. .Ea*E******EE. @a**Ek*k*k*k*E @a**E*******E. .EE*EE****EE.. ...EEEEEaE.... .......Ev..... j.j.....E..... .jjj.....E...j jjjjj.....E.jj jjjjjjj...jjj. Bonus: 5.......5...p. .j.5.l.?...3.& ...*..c....... .....f........ .............. .............. .............. .............. ..!........... .~...f.f.f.f.. .............. .............. .............. ........l..... 5.5........... .............. 0m.3........c+ ..w..W....4.-. Level: John van Hooff Horse Power Bricks: .........e.... ........heh... ........eeee.. .......heege.. .......heeeee. ......hheeee.. ..he!!eeee.... .hee!!eee..... heee!!eee....@ heee!!eee....d heeeeeeee....@ hee....eee..dd .eee....ee..@@ .e.e....e.e.dd .e.e....e.e.@@ .e..e...e..edd fffbffbffbff@@ fbffffffbffbfb Bonus: .............. .........0.... .............. ........0.d... ........m0.0.. ..........0... ......j0...... ..j.l.0.?..... .0.0.0?......f .*.....0.....f 0g0.0...p....f ............ff ........3...ff .0.0....3.3.ff ........3...ff ........<...ff ....+.-!>+.... .-......c..... Level: John van Hooff Blue Planet Bricks: ......gg...... .!...gggg...!. .....gggg..... ....gggggg.... ....gggggg.... !..gggggggg..! ...gggggggg... ..gggggggggg.. ..ggggg*gggg.. ..gggg*ggggg.. ..gggggggggg.. ...gggggggg... !..gggggggg..! ....gggggg.... ....gggggg.... .....gggg..... .....gggg..... .!....gg....!. Bonus: 5.....ff.....5 .....ffff..... .*...ffff...*. .............. ....??????.... ...d.}}}}.w... .....}}}}..... ......m*...... ..gggg~lgggg.. ..ggggl~gggg.. ......*m...... *2...{{{{...2* .2.w.{{{{.d.2. <>..??????..>< .............. .....ffff..... +1-..ffff..-1+ *.1...ff...1.* Level: John van Hooff Cobra Bricks: .......ff..... ......ffff.... ..j..ffff..... .jjj..ff...... .fjf...#.j.... .jjj...#..j... .jjj...#zz.j.. .jdj...##zz.j. .jjj..##zz..j. ..j...#.....j. ..j..k#..jjjj. !vjvkv#vjjjjvv vjjvk##vjvvvvv vjvvkkk#jvvvvv vjvvvvjjvvvvvf vjvvvjv#vvvvff vjjjjvv#ffffff fffffff#ffffff Bonus: .......m...... .......?...... .....j........ .0l0...g...... ..0......?.... .000......0... .0j?.....5.0.. .0f0.....?..?. .000.......... ..0........... ..........0.0. ..0.*....0.?.. *00.?...0...*. .?........f... .0..f.00.....j .?...0........ .0000...?...?1 ..+.!.1..1!+.. Level: John van Hooff Bonsai Bricks: ......fff..... .....ffff..... ....fffEff.... ..f..ffEf..f.. .f#f..fE..ff.. .f##...E.###f. ..ff##.E.#ff.. .....##E.#.... .......Ef#.... ..f...fE##.... .ffff.EE....f. ff####EE..ffff .fff.#Ef..###f ......E####fff ......E....... vv!vvvEEvvv!vv zyzyzyEEyzyzyz vvvvvv@@@vvvvv Bonus: ......---..... .....--m-..... ....--f.--.... ..-..--.j..-.. .-.-..-...--.. .-..........-. ..-*......*-.. .............. ........*..... ..-...*....... .----.......-. {{........---{ .---...*.....{ ...........--- .............. .{..{....{..{. 50<>55..55><05 {+++++...++++{ Level: John van Hooff Frosty Waterfalls Bricks: j...j##ffff### jj..Ejjj##jjjj #jjj.EjjjjjjjE .#jj..EjjjjjE. ..Ejj.EjjjjjE. ..Ejj.EjjjjE.. ..Ejj.EjjjE..j ..Ejj..EjE..j# ...#jj.EjE.j#. ...#jj.EjE.j#. j..#jj.Ej..j#. #j..#j..j.jE.. #j..#jj.j.jE.. .#j.#jj...jE.. .#j.#jj..j#... .#j..Ej..j#... ..#j.Ejj.j#... ###jj.#j.j#### Bonus: 5...f...ll.... fl...2.....4.5 .?f...mf..mfl. ..1....?4.!*.. ...f...4ffj2.. ...1j..f.?f... ...m!..*2p...f ....f.......m. ....&...f..&.. ....?1..?..f.. +...pf..2..?.. ........f..... .}...1{...+... ..2..?........ ..f..!f....... ..?...<..?.... ...2..>..f.... ...f...0...... Level: John van Hooff Crump Clock Bricks: ......*......v .....d.d.....v ....*...*....v ....d.E.d....v ...d..E..d...v ..*...E...*..v ..d...E...d..v ..d...E...d..v .d....E....d.v .*....*EEE.*.v ..d.......d..v ..d.......d..v ..*.......*..v ...d.....d...v ....d...d....v ....*...*....v vvv..d.d..vvvv vvvv..*..vvvvv Bonus: .............2 .....1.1.....2 .............2 ....1...1....2 ...1.....1...! .............m ..1.......1..1 ..d.......d..1 .1.........1.1 ......d......j ..*.......*..1 ..1.......1..1 .............1 ...1.....1...! ....*...*....m .............0 .w...1.1...w.0 0+.0.....0-.+0 Level: John van Hooff Like to Smoke ? Bricks: .............. .............. EEEEEEEEEEEEEE .............. hhhhhhhhh..... hhhhhjjjjjjje. hjjjjjjje..... hhhhjjjjjjje.. hhhhhhhhh..... hhjjjjjjje.... hjjjjjjje..... hhhjjjjjjje... hhhhhhhhh..... .............. EEEEEEEEEEEEEv hhhhhhhhhhhhhh hhhhhhhhhhhhhh .............. Bonus: .............. .............. .............. .............. ~~~~~~~~~..... ~~~~~......... ~w............ ~~~~.......... ~~m~~~~~*..... ~~............ ~w............ ~~~........... ~~~~~~~~~..... .............. .............. >>>>>>>>>>>>>> {{{{{{{{{{{{{{ .............. Level: John van Hooff High Noon Bricks: .k.........k.. .kkkkkkkkkkkk. ..kkkkkkkkkkkd ..kkvvkv....d# ..kkvvkv...d#. ..kkkkvv..d#.. .kkk.....d#... .kkk....d#.... .kkk..#*#vvvvv vvvvv#*#..kkk. ....#d....kkk. ...#d.....kkk. ..#d..vvkkkk.. .#d...vkvvkk.. #d....vkvvkk.. dkkkkkkkkkkk.. .kkkkkkkkkkkk. ..k.........k. Bonus: .<............ .....000.->+.. ....?...}{.fl~ ..33*.......~. ..33.3m....~.. ..33!.....~... ..Wj.....~.... ..?.....~..... ...g.......... ..........g... .....~.....?.. ....~.....jW.. ...~.....!33.. ..~....m3.33.. .~.......*33.. ~lf.{}...?.... ..+>-.000..... ............<. Level: John van Hooff Penguin Adventure Bricks: .............. ...kk......k.. ..kkkk....kkk. ..hEEh....kEh. ..kkkk...kkkkk ..hhhh..hhkhhk ..khhk....hhhh .kjjjjk..jkjkk .kjjjjk..jkjkk jkjjjjkj.jkjkk jkjjjjkj.jkjkk jkjjjjkj.jkjkk jkjjjjkj.jkjkk .kjjjjk..jkjkk .kjjjjk..jkjkk ..jjjj....jjjk ..kkkk.....kj. ...kk.....kkj. Bonus: .............. .............. ...11......1.. ...........1.. ...11......1.5 ...11......1.. .............4 .............. ..*ff.?..?.fp. ..lffc.....f.c g..mfj.g..}fl* ...ff......fj. ..pffw.0.0.f.. .s.ff}0..0.f.. ...ff+0..0.f.w ..-ff......f.+ ...........-s. .............. Level: John van Hooff Dragon Bricks: ....g......... .....gg....... ......g....... f...gggg...... .f....ggg..f.. ..ffffggg.fff. ..fkkkggfffkef ...ffgggkkkkff ....fkkkkffkf. ....fffff.ff.. ....f...f..... ...ff..ff..... ...f...f...... ..f...f......j jvvvvvvvvvvvjj kvvvvvvvvjjjjk jjjkvvvjkjjkjj jkjjjvjjjjkjjk Bonus: ....5......... .............. .............. .............. .......?...... ..g...m....?.. ...222...!.2l. ...?....2222.. ....!2222?.2.. .....fff..ff.. ........f..... ...ff......... .............. .............* *........*.... ..?.........b. .+...+..b..... .............. Level: John van Hooff Crazy Bricks: jjjjv!*!vvjjjj j..jv!!!vvj..j j..jv!!!vvj..j j..jv!!!vvj..j j..jv!!!vvj..j j..jv!!!vvj..j jjjjv...vvjjjj vvvvv...vvjjjj vvvvv...vvjjjj vjjjv...vvjjjj vj.jv...vvjjjj vj.jvjjjvv..jj vj.jvvvvvv..jj vj.jvv.vvv..jj jjjjjjdjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj Bonus: 0000......0005 0..0..*...0..0 j..0......j..0 0..0......0..0 0..0......0..0 0..0......0..0 wwww..?...0000 ..........000j ..........wwww .111......0000 .1.j......0000 .1.1.111....00 .1.1........00 .1.1........00 !b!b!b!b!b!b!b bbbbbbbbbbbbbb bbbbbbbbbbbbbb wwwwwwwwwwwwww Level: John van Hooff Save Blue Bricks: g#*#d#EE*#*##g ##*#*#EE*#*### ******EE****d# *####*EE#*#### **#*##EE#*#*** *##*#*EE**##*# ******EE#****# #*###*EE####** ###*#*EE**###* #***#*EE#*#*#* **#***EE#*#*#* #*####EE##**** #***##EE*#*#*# ###*##EE*#*#*# ******EE***#** #####*EE*##### vv****EE****vv v#####EE#####v Bonus: ....m...l..... .............. l...........m. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .s............ .............+ Level: John van Hooff Mondrian Art? Bricks: ############## #gg#dd#hhhhhh# #gg#dd#hhhhhh# #gg#dd#hhhhhh# #gg#dd######## #gg####jjjj#g# #gg#jj#jjjj#g# #gg#jj#jjjj#g# #gg#jj#jjjj#g# ############## #jj#hh#dddd#h# #jj#hh#dddd#h# #jj#hh#dddd#h# #jj####dddd#h# #jj#gg#dd##### #jj#gg#dd#jjj# #jj#gg#dd#jjj# ##k##k##k###k# Bonus: .............. .0..33.m!0p.l. ....33.....W5. .l0..3.0f.0... ....33........ .0d........... .W..11.W-.d.f. ..0.f1..+..... .0p.11....j.c. .............. .11.?..>2.<... .11.c?..2...*. .j~.?...2.!... .11....~2.m.0. .f1.+...2..... .11.-...2.111. ..1.Wg.f2.11>. .............. Level: John van Hooff Leaded Window Bricks: kkkkkkkkkkkkkk kkeeeeek!!!kik kfkeeeek!!kiik kfkeeeek!!kiik kffkkkkk!kiiik kffk@@@kkiiikk kfffk@@k*kikak kfffk@@k*kkaak kffk@@@k*kjkak kffk@@@kkjjjkk kkk@@@kkjjjjjk kggkkkxkkjjjjk kggkckxkhkjjjk kgkcckxkhhkjkk kkicckxkhhhkdk kiikcckkhhkddk kiikccckhhkddk kkkkkkkkkkkkkk Bonus: 00000000000000 00.....0l..0W0 0.0Wc.f0.j0..0 0p0+...0..0.-0 0..00000.0...0 0.s0...00?*.00 0j.?0..0.0.0.0 0..?0..0.00..0 0..0...0.0.0.0 0f*0...00.w.00 000...00W...c0 0..000<00.f.+0 0-.0w0.0j0.s.0 0.0..0>0..0.00 00?..0.0...0?0 0..0+.00-.0..0 0..0...0..0..0 00000000000000 Level: John van Hooff Flak of Snow Bricks: .............. ......!....... !..!..!..!..!. .!..!.!.!..!.. ..!..!!!..!... ...!..!..!.... .!..!.!.!..!.. ..!..!!!..!... ...!..!..!.... !!!!!!!!!!!!!. ...!..!..!.... ..!..!!!..!... .!..!.!.!..!.. ...!..!..!.... ..!..!!!..!... .!..!.!.!..!.. !..!..!..!..!. ......!....... Bonus: .............. ...f.....f.... .....l.l...... *...........*. ....*...*..... ..f..>.>..f... .............. .*.p....p..*.. 000.?...?.000. ......m....... ..>.f...f.>... .*.j.....j.*.. ..00.3.3.00... .fc..+.+..cf.. ....*...*..... *.wd.....dw.*. .33.......33.. .............. Level: John van Hooff Humbacked Bridge Bricks: ......ee...... f...eee#e..... gff..eee#e.... jgjf...e#..ee. fjjgf....#e#ee fjgjjd....#ee. .fjgddd....#.. .fgddddd....#. .fddggjddd.##. .ddgjjgjddd#.. .ddfgjjgjdd##. ffffjggggfff#. ....fjggggfff. .....fjgggjfff .vvv..fjgggjjf .vvv..fgjggggj .vvv..fjggggjg .......fgggggg Bonus: .......j...... .............. &......&.5.... c..?.......!.. ..........m..? .?.c*-.....lp. ..p.---....... ..cj----...... ..--.?.---.... .--..c.*---... .--......--... ?............. ....W...c.?.c. ......?....... .><>..11111j11 .f.<..11111111 .>.+-..j.-+>. 000.0000000.00 00...00000...0 .0....fff....0 .............. .............. 0.0.0.0.0.0.0. Level: John van Hooff Limousine Bricks: .jjj..vv..jjjj jjjjjjvvjjjj.. .jjjj.vvjjjjj. ..jj..vv.jjjjj f.....vv...jjj @f....vv....j. @fvvvvvvvvvvv@ ff.iiiii.....@ f..ivivvi....@ f.divivvvi.... ..iivivvvvi... .iiiiiiiiiii.. dii@iiiiii@iij ii@@@iiii@@@ii ..@@@.ii.@@@.. vv.@.vvvv.@.vv kkkkkkkkkkkkkk kkkkkkkkkkkkkk Bonus: .*....44...... &.00?...?00l.. ...........*f. ......44.c...& *............. ......44....-. .............. ...1.......... .............. ...+.*........ .....1........ .-j.?..1.?.*.. !............d .....}.w1..... ......lf...... ><...<>><...<> 00000000000000 .............. Level: John van Hooff Traffic Light Bricks: @.....@.....@. .............. .............. .###v###v###.. .#d#.#x#.#e#.. .#d#.#x#.#e#.. .#e#.#d#.#x#.. .#e#v#d#v#x#.. .#x#.#e#.#d#.. .#x#.#e#.#d#.. .###.###.###.. vv#vvv#vvv#vvv ..#...#...#... ..#...#...#... ..#...#...#... ..#...#...#... vv#vvv#vvv#vvv k###k###k###kk Bonus: .............. .............. .............. ....p...w..... ......!....... .............. ..........l... ....m...m..... ..l........... ..!.......!... .............. .?..?...?...?. .............. .............. .............. .............. .0.0.0.0.0..0. .............. Level: John van Hooff A.T.B. Bricks: hhh........e.. .j.......jj.e. .jjjjjjjjj...e .j.......j...e .d......jj.e.e .j.....j.j.ee. .j....j..j.... .jj..j...jj... ..j.j.....j... ..jj......jg.. .jj........jj. .kk...j....kk. k.jk...j..kj.k k.jjjjjjjjjj.k k..k...j..k..k k..k....j.k..k .kk........kk. zzzzzzzzzzzzzz Bonus: ...........5.. .5.......l.... ...?.?.?.0...p .!.......0.... .*......20.j.s .0.....2.0..c. .0....2..0.... .0s..2...0.... ....j.....!... ..?2.......*.. ..2.........?. .&~...}....~g. ...g...+...... ..ffffffffff.. -..c...+.....- ........{..... .............. <><><>w><><><> Level: John van Hooff Nerly Finish Up Bricks: #****@@*****kk #****@@*****#k d##*******###k ***#******#ffk ***#*****##ffk **#******#kkkk ***#****###### ***#**###!!!!! @**#**@!!!!!!! @*#***@!!!!!!! ***#***##!!!!! ****#***#!!!!! *********#!!!! **aa******###! *aaaddd****ddz ##aviii######! ...#####x...#. ..#.....##.##. Bonus: ............fl .............! m............+ ...........l?j ...........!fl ..........lf~5 .............. .............. .............. ............*. .............. .............. .............. .............. ...........-s+ .............. .............. .............. Level: All's Well That End Well Bricks: *.....vv.....* .............. @.!.E.@@.E.!.@ @.....vv.....@ @.....vv.....@ @.....vv.....@ @.!...vv...!.@ ......**...... vvvvvvvvvvvvvv e............e @....vvvv....@ ......EE...... xxxxxxxxxxxxxx .............. @.EE.@@@@.EE.@ @............@ @............@ vvvvvvvvvvvvvv Bonus: ......55...... .222......222. .2.2......2.2. .222..33..222. ......mm...... ......33...... ......33...... .............. .?.?!?pp?!?.?. .............. .....gwwg..... .............. }+333jllj333+} .............. .............. .............. .............. dd>dd lbreakout2-2.6.5/client/levels/WonderWalls0000664000175000017500000001773712140767201015474 00000000000000Version: 1.00 Level: Nethippy Green Wall Bricks: ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff ffffffffffffff Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? Level: Nethippy Blue Wall Bricks: gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg gggggggggggggg Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? Level: Nethippy Yellow Wall Bricks: .h.hhhhhhhh.h. h.h.h.hh.h.h.h .h.h.hhhh.h.h. h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh h.h.h.hh.h.h.h hh.h.hhhh.h.hh hhhhhhhhhhhhhh Bonus: .?.????????.?. ?.?.?.??.?.?.? .?.?.????.?.?. ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?.?.?.??.?.?.? ??.?.????.?.?? ?????????????? Level: Nethippy Slimey Purple Bricks: iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiiiiiii iiiiiiiiii.iii iii.iiiiii.i.i ii..iiiii..i.. .i...iii...... .i...i.i...... .......i...... Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ??????????.??? ???.??????.?.? ??..?????..?.. .?...???...... .?...?.?...... .......?...... Level: Nethippy White X Bricks: jjjj......jjjj jjjj......jjjj jjjj......jjjj jjj.j....j.jjj jj.j.j..j.j.jj j.j.j.jj.j.j.j .j.j.jjjj.j.j. ..j.jjjjjj.j.. ...jjjjjjjj... ...jjjjjjjj... ..j.jjjjjj.j.. .j.j.jjjj.j.j. j.j.j.jj.j.j.j jj.j.j..j.j.jj jjj.j....j.jjj jjjj......jjjj jjjj......jjjj jjjj......jjjj Bonus: ????......???? ????......???? ????......???? ???.?....?.??? ??.?.?..?.?.?? ?.?.?.??.?.?.? .?.?.????.?.?. ..?.??????.?.. ...????????... ...????????... ..?.??????.?.. .?.?.????.?.?. ?.?.?.??.?.?.? ??.?.?..?.?.?? ???.?....?.??? ????......???? ????......???? ????......???? Level: Nethippy Spiral Bricks: .............. .............. kkkkkkkkkkkkkk k............k k.kkkkkkkkkk.k k.k........k.k k.k.kkkkkk.k.k k.k.k....k.k.k k.k.k.kk.k.k.k k.k.k..k.k.k.k k.k.kkkk.k.k.k k.k......k.k.k k.kkkkkkkk.k.k k..........k.k kkkkkkkkkkkk.k .............k kkkkkkkkkkkkkk .............. Bonus: .............. .............. ?????????????? ?............? ?.??????????.? ?.?........?.? ?.?.??????.?.? ?.?.?....?.?.? ?.?.?.??.?.?.? ?.?.?..?.?.?.? ?.?.????.?.?.? ?.?......?.?.? ?.????????.?.? ?..........?.? ????????????.? .............? ?????????????? .............. Level: Nethippy Red Maelstrom Bricks: .............. .....ddddddd.. ....d.......d. ...d..ddddd..d ..d..d.....d.. .d..d..ddd..d. .d.d..d...d..d .d.d.d..d..d.. .d.d..dd.d..d. .d..d.dd..d.d. ..d..d..d.d.d. d..d......d.d. .d..ddd..d..d. ..d.....d..d.. d..ddddd..d... .d.......d.... ..ddddddd..... .............. Bonus: .............. .....???????.. ....?.......?. ...?..?????..? ..?..?.....?.. .?..?..???..?. .?.?..?...?..? .?.?.?..?..?.. .?.?..??.?..?. .?..?.??..?.?. ..?..?..?.?.?. ?..?......?.?. .?..???..?..?. ..?.....?..?.. ?..?????..?... .?.......?.... ..???????..... .............. Level: Nethippy Orange Checkerboard Bricks: .............. ....eee...eee. ....eee...eee. ....eee...eee. ....eee...eee. .eee...eee.... .eee...eee.... .eee...eee.... .eee...eee.... ....eee...eee. ....eee...eee. ....eee...eee. ....eee...eee. .eee...eee.... .eee...eee.... .eee...eee.... .eee...eee.... .............. Bonus: .............. ....???...???. ....???...???. ....???...???. ....???...???. .???...???.... .???...???.... .???...???.... .???...???.... ....???...???. ....???...???. ....???...???. ....???...???. .???...???.... .???...???.... .???...???.... .???...???.... .............. Level: Nethippy Lattice Bricks: .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. .............. .!.!.!.!.!.!.! .............. !.!.!.!.!.!.!. Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? Level: Nethippy Graybar Bricks: .............. .............. .............. .cccccccccccc. .cbbbbbbbbbbc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbaaaaaaaabc. .cbbbbbbbbbbc. .cccccccccccc. .............. .............. .............. Bonus: .............. .............. .............. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .????????????. .............. .............. .............. Level: Nethippy Invisible Bricks: vvv.vvv.vvv..v v...v.v.v.v..v v...v.v.v.v.vv v.v.v.v.v.v.vv vvv.vvv.vvv.vv .............. v..v.v.vv.v..v v..v.v.v..v.v. v..v.v.v..vv.. v..v.v.v..v.v. vv.vvv.vv.v..v .............. .............. .v.v.v.v.v.v.v .............. .............. .............. .............. Bonus: ???.???.???..? ?...?.?.?.?..? ?...?.?.?.?.?? ?.?.?.?.?.?.?? ???.???.???.?? .............. ?..?.?.??.?..? ?..?.?.?..?.?. ?..?.?.?..??.. ?..?.?.?..?.?. ??.???.??.?..? .............. .............. .?.?.?.?.?.?.? .............. .............. .............. .............. Level: Nethippy White X II Bricks: jiiiiiiiiiiiij jjiiiiiiiiiijj jjjiiiiiiiijjj jjjjiiiiiijjjj jjjjjiiiijjjjj jjjjjjiijjjjjj ijjjjjjjjjjjji iijjjjjjjjjjii iiijjjjjjjjiii iijjjjjjjjjjii ijjjjjjjjjjjji jjjjjjjjjjjjjj jjjjjjiijjjjjj jjjjjiiiijjjjj jjjjiiiiiijjjj jjjiiiiiiiijjj jjiiiiiiiiiijj jiiiiiiiiiiiij Bonus: ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? ?????????????? Level: Nethippy Chaostars Bricks: .............. .h.h.h.h.h.h.. ..!.h!h.!.h!h. .h.h.h.h.h.h.. .............. ..h.h.h.h.h.h. .h!h.!.h!h.!.. ..h.h.h.h.h.h. .............. .h.h.h.h.h.h.. ..!.h!h.!.h!h. .h.h.h.h.h.h.. .............. ..h.h.h.h.h.h. .h!h.!.h!h.!.. ..h.h.h.h.h.h. .............. .............. Bonus: .............. .????????????. .????????????. .????????????. .............. .????????????. .????????????. .????????????. .............. .????????????. .????????????. .????????????. .............. .????????????. .????????????. .????????????. .............. .............. Level: Nethippy The End Bricks: ccc.c.c.cccc.. .c..c.c.c..... .c..ccc.ccc... .c..c.c.c..... .c..c.c.cccc.. .............. .ccc.c...c.cc. .c...cc..c.c.c .cc..c.c.c.c.c .c...c..cc.c.c .ccc.c...c.cc. .............. cccccccccccccc cccccccccccccc cccccccccccccc vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv Bonus: .............. .5..5.5.5..... .5..555.555... .5..5.5.5..... .5..5.5.5555.. .............. .555.5...5.55. .5...55..5.5.5 .55..5.5.5.5.5 .5...5..55.5.5 .555.5...5.55. .............. 55555555555555 55555555555555 55555555555555 }}}}}}}}}}}}}} >>>>>>>>>>>>>> >>>>>>>>>>>>>> lbreakout2-2.6.5/client/levels/Demons0000664000175000017500000001551512140767201014450 00000000000000Level: Misty Not So Dangerous Bricks: .............. .....aaaa..... ....aaaaaa.... ...aaaaaaaa... ...addaadda... ...addaadda... ...aaakkaaa... ...aaakkaaa... ....aaaaaa.... ....aeeeea.... ....aaeeaa.... .j...aaaa...j. jjj...aa...jjj jjj...aa...jjj .j..........j. .............. .............. .............. Bonus: .............. ......11...... .....0..0..... ...?...&..?... ..........}... .............. ...~.1....1... ......b..c.... ....-......... .............. ....<..+.-.... ............f. 0......?.....0 ..{...+......~ .b............ .............. .............. .............. Level: Misty Vampire Teeth Bricks: jjjjddddddjjjj djjjdd##ddjjjd djjjd####djjjd ..jj......jj.. .djj......jjd. .d.j......j.d. d.d.j....j.d.d ..ddd....d.d.. .....d##d.d... .............. #####hhhh##### hhhiiicciiihhh *cc........cc* ccc........ccc ccc........ccc .cc........cc. ..c........c.. ...c......c... Bonus: ....222222...g ~.......f..{.. .............. ...}.......... .............. .............. .............! .............. .............. .............. .......m?..... .?.W..>..W.... 1...........c1 .+............ -f.........+.- ...........>.. .............. ...>.......... Level: Misty Zombie Attack Bricks: .............. ..bb......cc.. .bbbb....cccc. b....b..c....c b*..*b..ch..hc b....b..c....c b.vv.b..c.vv.c .b..b....c..c. .c##b....c@@c. .b##b....c@@c. ..bb......cc.. ..bb......cc.. ..ee......ee.. .ffff....zzzz. ffffff..zzzzzz f....f..z....z .............. .............. Bonus: .............. ..ll.......d.. .w.*.......... j.......&....{ +....+.......~ .....w........ ..j2....W..!.. .m............ ....+......... .0..1....{..>. ...1......-f.. .............. ..w........... .*.1.......-c. 0b..<+..>.f..d ?....?..?....? .............. .............. Level: Misty Mr Hyde Bricks: #...kkkkk....# #...kkkkk....# #...kkkkk....# #...kkkkk....# #.kkkkkkkkk..# #...e....e...# #...e!..!e...# #...e....e...# #...e....e...# #....edde....# #....e..e....# #.....ee.....# h.....vv.....h hi...vvvv...ih hi.vvvvvvvv.ih hivvvvvvvvvvih hivvvvvvvvvvih hiffffffffffih Bonus: .............. ....2......... .......2...... .............. .............. .........1.... .............. ....}......... .........w.... .....1.j...... ........*..... .............. .......2.....! 1...........*. *&...p1.....0p .............. .0.s........c0 W.>.?.?>.?.... Level: Misty The Elements Demons Bricks: #####....@@@@@ jjjj#***.@ffff jjjj#*...@ffff jjjj#**..@ffff jjjj#*...@ffff jjjj#***.@ffff jjjj#!.!.@ffff jjjj#!.!.@ffff .....!!!...... ggggE!.!.Edddd ggggEzzz.Edddd ggggEz...Edddd ggggEzz..Edddd ggggEz...Edddd ggggEc.c.Edddd ggggEc.c.Edddd EEEEEccc.EEEEE .....c.c...... Bonus: ............3. 5....m.......5 ..?l......l... .....W+.....?. 3.{.......!j.. .......}...... ...3...d...... .....-........ ......g....... .............. ..g..c.m..-... c....s.....{d* .}f?.-p....... .....c....c*.. f..&...+...... 5.{..s.b...?.5 .....b.+...... .............. Level: Misty Fire Walk With Me Bricks: .............. .............. .....dd....... ....de....dd.. ....d....dd.dd ...ded..dde.d. ...ded..de.de. ..deeddddedeee .deeeddeeeeeee deeeedeeeheeeh hehhdeeehhehhh dhjhhdhhhhhhhj ehhjdjdjjjhjjh ejjjdjj@jjhjjj @@@@@@**@@@@@@ .............. .............. .............. Bonus: .............. .............. .....c........ ....2......!.. .............. ....*......... .....~........ ...1..s.W.s... ....c.....+... ...c....1.c..3 &0..W..~...... ..>.....-...{. .{...{-...{.+. ....>...>-.... .............. .............. .............. .............. Level: Misty Tengel The Evil Bricks: jjjjjeeeejjjjj xx@@@@xx@@@@xx xx@hh@xx@hh@xx yy@hh@yy@hh@yy zz@@@@zz@@@@zz zzzzzzeezzzzzz kkkkkkeekkkkkk kkkkkkeekkkkkk kkkkkkeekkkkkk kkkkkeeeekkkkk kkkkkkeekkkkkk kkkkkevvekkkkk ggggddddddgggg gggdd****ddggg gggdd****ddggg ggggddddddgggg ..EEEEEEEEEE.. ...EEEEEEEE... Bonus: ..ll&d.2.*.&.. 2......d...... ws.55..b.55.b2 ...55.*..55.c. p......2.....m .c.W>...w>.>.. *..f.1..4...{. ....<.-...1..~ ..m........j.. 1j..1..c..*... }4.........-.. ......??.+...g &...-......... .+.....4..1... ....+4......m. ?.....??.....? .............. .............. Level: Misty Scary Dungeon Bricks: .#aaa****aaa#. #.aaaa**aaaa.# !.aaaaaaaaaav! h.#.a....a.#.h i#..a....a..#i f!v.h.hh.h.v!f dh...h..h...hd gi.#hvhhvh#.ig .f#........#f. .d!v......v!d. .gh........hg. ..i.#....#.i.. ..f#......#f.. ..d!v.vv.v!d.. ..gh......hg.. ...i.****.i... ...f######f... ...dggggggd... Bonus: ...*.j..5.*... .......5...... ....}.......c. p............. .............. &.c....l...c.& .............. &....-mm-b...& .............. ..wc......cw.. ...........p.. .............. .............. ....c.dd.c.... .............. ...b..mm..<... .............. .....d.<...... Level: Misty Demonic Little Idiot Bricks: @@@h!!hh!!h@@@ ############## ************** ************** ************** *############# ************** ************** #############* ************** ************** *############# ************** ************** #############* ************** ************** *############# Bonus: .............. .............. ..m........... .............> .............. .............. .>............ .............. ............m. .............. .............. .............. .............. ...........>.. ......5....... .............. .............. .............. Level: Misty The Eye Bricks: .............. j............j .h..........h. ..e..jjjj..e.. ....jhhhhj.... ...jheeeehj... ..jheddddehj.. ..hed####dehj. jhed######dehj jhed######dehj .jhed####dehj. ..jheddddehj.. ...jheeeehj... ....jhhhhj.... ..e..jjjj..e.. .h..........h. j............j .............. Bonus: .............. j............. .............. .....m..b..... ....?...{..... .............. .............. .....5555..... .b..543345.... &...543345.... .....5555..... ...>.......... ........?..... .............. .............. ............+. .............. .............. Level: Misty Frozen Queen Bricks: ############## ..##########.. #...######...# .##..####..##. ...#..##..#... .ccc..##..ccc. caajc.##.caajc c!ajc....c!ajc .ccc......ccc. #............# .##........### ..##......##.. .....dddd..... ....dddddd.... ....djjddd.... .....djdd..... ......dd...... vvvvvvvvvvvvvv Bonus: .............. .............. .............. .............. .............. .lp.......m.p. 3...b......... ..j.......j..3 .&.}.......... .............. .............. .............. .....>.?...... ....?....?.... ......?.>..... .............. .............. ffffffffffffff Level: Misty The Devil Bricks: .......#####.. ......#dd#ff#. .....#ddd#fff# #...##ddd#fff# .###.#ddd#fff# .....#ddd#fff# .....#ddd#fff# d...d#d#####f# .ddd.##gg#hh## .....#ggg#hhh# .....#ggg#hhh# g...g#ggg#hhh# .ggg.#ggg#hhh# .....#g#####h# .....##.....## #...##.......# .###.......... .....vvvvvvvvv Bonus: .......55555.. ......5..5**5. .....5...5...5 5...55.g.5..35 .555.5...5.m.5 .....5...5...5 .....5...5...5 ....3555555555 .+.&.55-.5..55 .....5...5...5 .....5...5..-5 .....5...5...5 ..3..5...5...5 .....555555555 .....55.....55 5...55.......5 .555.......... .....+..wm..wm lbreakout2-2.6.5/client/levels/HighBall0000664000175000017500000000776612140767201014706 00000000000000Level: elvis Choose Your Weapon Bricks: .............. .............. .cccccccccccc. .cbbbbbbbbbbc. .cbgaaaaaa*bc. .cbaaeeeeaabc. .cbaeeeeeeabc. .cbaeeeeeeabc. .cbaaeeeeaabc. .cbfaaaaaadbc. .cbbbbbbbbbbc. .cccccccccccc. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .bbbbbbbbbbbb. .b..........b. .b.m......*.b. .b...2222...b. .b..234432..b. .b..234432..b. .b...2222...b. .b.p......w.b. .b..........b. .bbbbbbbbbbbb. .............. .............. .............. .............. .............. .............. Level: elvis Avarice and Greed Bricks: eeeeeeeeeeeeee c#c#c#c#c#c#cc cccccccccccccc cc#c#c#c#c#c#c cccccccccccccc .............. cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc cccccccccccccc dgdgdgdgdgdgdg .............. .............. .............. .............. .............. Bonus: 55555555555555 .............. .............. .............. .............. .............. bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb w.w.w.w.w.w.w. .............. .............. .............. .............. .............. Level: elvis untitled Bricks: .eeeeeeeeeeee. .egeeegeeegee. ..############ .iiiiiiiiiiii. .iiiiiiiiiiii. ############.. .ffffffffffff. .ffffffffffff. ..############ .hhhhhhhhhhhh. .hhhhhhhhhhhh. ############.. .kkkkkkkkkkkk. .kkkkkkkkkkkk. cccccccccccccc cccccccccccccc cccccccccccccc dadadadadadada Bonus: .555555555555. .5m555m555m55. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb w.w.w.w.w.w.w. Level: elvis Over the Top Bricks: ....gggggg.... .ccc######ccc. .ccc######ccc. .ccc#eeee#ccc. .ccc#eeee#ccc. .ccc#eeee#ccc. .ccc#eeee#ccc. .ccc#eeee#ccc. .ccc#eeee#ccc. .ccc#eeee#ccc. .ccc#eeee#ccc. .ccc######ccc. .############. .............. .............. .............. .............. .............. Bonus: ....mmmmmm.... .bbb......bbb. .bbb......bbb. .bbb.5555.bbb. .bbb.5555.bbb. .bbb.5555.bbb. .bbb.5555.bbb. .bbb.5555.bbb. .bbb.5555.bbb. .bbb.5555.bbb. .bbb.5555.bbb. .bbb......bbb. .............. .............. .............. .............. .............. .............. Level: elvis Fetch the Ball Bricks: .............. .............. ..#........... .##ddddddddddd .#cccccccccccc .#cccccccccccc .#cccccccccccc .#cccccccccccc .#cccccccccccc .#cccccccccccc .#cccccccccccc .#cccccccccccc .#cccccccccccc .#c########### .#ceeeeeeeeeee .#ceeeeeeeeeee .############# .############# Bonus: .............. .............. .............. ...wwwwwwwwwww ..bbbbbbbbbbbb ..bbbbbbbbbbbb ..bbbbbbbbbbbb ..bbbbbbbbbbbb ..bbbbbbbbbbbb ..bbbbbbbbbbbb ..bbbbbbbbbbbb ..bbbbbbbbbbbb ..bbbbbbbbbbbb ..b........... ..b55555555555 ..b55555555555 .............. .............. Level: elvis Self Restraint Bricks: ee#ee#ee#ee#ee ee#ee#ee#ee#ee ee#ee#ee#ee#ee ee#ee#ee#ee#ee ee#ee#ee#ee#ee ee#ee#ee#ee#ee ee#ee#ee#ee#ee ee#ee#ee#ee#ee ee#ee#ee#ee#ee ee#ee#ee#ee#ee ############## c.cgcfchcic.c. .c.c.c.c.c.c.c c.c.c.c.c.c.c. .c.c.c.c.c.c.c c.c.c.c.c.c.c. .c.c.c.c.c.c.c d.d.d.d.d.d.d. Bonus: 55.55.55.55.55 55.55.55.55.55 55.55.55.55.55 55.55.55.55.55 55.55.55.55.55 55.55.55.55.55 55.55.55.55.55 55.55.55.55.55 55.55.55.55.55 55.55.55.55.55 .............. b.bmbpb>>>000 .............. bbbbbbbbbbbbbb w.w4?4?4?4>>>> *++++www+++++* 0.....55.....0 dddddddddddddd .............. .............. .............. .............. .............. .............. Level: Kevin Silly Bricks: avaavvvvvvvacc av!!av***vaccv vv!vvv*!*vcvvv v!*!!v*v*vvc*v vv!v*v***vc**v a!*vcvvvvvvc*a v*vcccvv!aavca v*a*vcvv!!!aav v*az**vvvvv!!v vvv*vvvv***!vv cc*a*vvvvvvavv vvvvvvvvfvvvff vcvcv!vv*****v !vv!v*vvvv!v** .............. .............. .............. .............. Bonus: <044d????dm}<< p0>>&?444?}<m0?4!4?s55! 0++>>?4l4?5sW0 !0>5l?444?<~W0 p+~5d?????d.b.4.!.d m4..p.5..4.b.. ..pb<<.<>.d.d. 0..>..d...**m. w.5.d.5>>>>>>>>>>>>> dddddddddddddd bbbbbbbbbbbbbb lbreakout2-2.6.5/client/levels/Weirdness0000664000175000017500000004613512140767201015170 00000000000000Version: 1.00 Level: G Hamburger Bricks: .............. .............. .............. ....eeeeee.... ...eeeeeeee... ...hhhhhhhh... ...dddddddd... ...@@@@@@@@... ...eeeeeeee... ...ffffffff... ...@@@@@@@@... ...dddddddd... ...hhhhhhhh... ...eeeeeeee... ....eeeeee.... .............. .............. .............. Bonus: .............. .............. .............. .............. ...b......b... .............. ....>.>.>.>... .............. ...5.5.5.5.... ....5.5.5.5... .............. ...>.>.>.>.... ......ww...... ...b......b... .............. .............. .............. .............. Level: G Yellow Demon Bricks: ......h....... .....hhhh...h. ........h..hhh .....hhhh.hh.. ....hhhhhhh... ....hhhhhhh.h. ....h.hhhhhhh. ....hdhhhhh..h ....hddhhh.... ....h.hhh.dd.h ....hhh.h.dd.h ...hj...hh..h. ...hj...jh.h.. ...hj...j.hh.. ...h.j.j..hh.. ...hh.hhhhh... ....hhh....... .............. Bonus: ......>....... ............*. ...........55> ..........55.. .........l5... .............. .............. .....f........ .....ff....... ..........ff.. ..........ff.. ....~......... ....~...~..... ....~...~..... .....~.~...... .............. .............. .............. Level: G Everything But The... Bricks: .............. .............. .............. cccccccccccccc dddddddddddddd cccccccccccccc .............. .............. cccccccccccccc gggggggggggggg cccccccccccccc .............. .............. cccccccccccccc hhhhhhhhhhhhhh cccccccccccccc .............. .............. Bonus: .............. .............. .............. *0g3>-l1s1c}1f .Wpd?1f0b.&w0. 0Wd+cf!}0<10>+ .............. .............. 3l}-1js3-5?>53 .W.b00d44b.~.. g?3&>+c<{2f2-* .............. .............. >}0143242-Wgf> b1-w..c.c.s.b. fj{0?2p2Wg....>.w.w w.>.>....>.>.w .............. .............. .............. .............. Level: G S.L.O.W. Bricks: !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!!! .............. .............. .............. .............. Bonus: <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< <<<<<<<<<<<<<< gggggggggggggg .............. .............. .............. .............. Level: G Death Flask Bricks: .............. .............. .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... ...###.####... ...#!...!!#... ...#!!!!!!#... ...#!!!!!!#... ...#!!!!!!#... ...########... .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. ....555555.... ....555555.... ....555555.... ....555555.... .............. .............. .............. .............. .............. Level: G X Bricks: .............. .............. .............. .iii......iii. .i#ii....ii#i. .ii#ii..ii#ii. ..ii#iiii#ii.. ...ii#ii#ii... ....ii##ii.... ....ii##ii.... ...ii#ii#ii... ..ii#iiii#ii.. .ii#ii..ii#ii. .i#ii....ii#i. .iii......iii. .............. .............. .............. Bonus: .............. .............. .............. .b..........b. .............. .............. ......ww...... ......55...... .....m..m..... .....5..5..... ......55...... .............. .............. .............. .b..........b. .............. .............. .............. Level: G 72 Nova Bricks: ggggggggggghgg gggggggggghhhg ggggggggghhhhh gggggggggghhhg ggggggggggghgg gggggggggggggg gggggjjjgggggg ggggjvvvjggggg gjjjjvvvvjjjgg gjajjjjjjjajjg gaaajjjjjaaajg ggagggggggaggg bbbbbbbbbbbbbb .............. .............. .............. .............. .............. Bonus: .5.*....b..... ..>..b.5.....> ....0...b..+.. ....b.>....5.. 0......0...... .>..5.w.....5. ........5+.... ..5........0.* ......0....... .............. ..>.+.....>... ...0..5....... ...+.......... .............. .............. .............. .............. .............. Level: G One Chance 4 Points Bricks: ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** ************** Bonus: 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 55555555555555 j5555555555555 55555555555555 55555555555555 Level: G Pattern Bricks: .............. .............. .............. ......cc...... ...cc....cc... ...cc....cc... .............. ..c..c..c..c.. .cc...cc...cc. ..c...cc...c.. .....c..c..... .............. ...cc....cc... ...cc....cc... ......cc...... .............. .............. .............. Bonus: .............. .............. .............. ......ll...... ...bb....WW... ...b>....>W... .............. ..&..>..>..&.. .fw...55...wf. ..s...55...s.. .....>..>..... .............. ...W>....>b... ...WW....bb... ......??...... .............. .............. .............. Level: G Chaos Bricks: ......df.....h g.i..dfk...h.. ..i.d.f.k.h..# .gi.df...k.... ..gd###h....#. .#.dfchc..k... #.dfihi..i.ki. ...fgi##....k. .#f###i..ii... ...hc#......k. ...h##g.....k. ..h..###g##... ..h......#gg.. ..h......####g .............. .............. .............. .............. Bonus: .............m .............. .............. .............. .............. .....5........ .............. .............. .............. ....5......... .............. .............. ..........5... .............. .............. .............. .............. .............. Level: G Tricky! Bricks: ...#!....!#... .!.#......#.!. .!.#..##..#.!. .....#..#..... ##..##!!##..## .....#..#..... .###.#!!#.###. ...#......#... .!.#......#.!. ...#......#... .!.#......#.!. ...#......#... ####......#### @............@ .............. .............. .............. .............. Bonus: 555..5..5..555 5.5.55..55.5.5 5.5........5.5 555...55...555 .............. ......55...... .............. 555...55...555 5.5........5.5 555........555 5.5........5.5 555........555 .............. .............. .............. .............. .............. .............. Level: G Boom Boxes II Bricks: .............. ..zzz.zzz.zzz. ..z*z.z*z.z*z. ..zzz.zzz.zzz. .............. .zzz.zzz.zzz.. .z*z.z*z.z*z.. .zzz.zzz.zzz.. .............. .............. .............. ..@..@..@..@.. .............. @.vvvvvvvvvv.@ .............. ..@..@..@..@.. .............. .............. Bonus: .............. ..555.bbb.555. ..5w5.bjb.5w5. ..555.bbb.555. .............. .bbb.555.bbb.. .bjb.5w5.bjb.. .bbb.555.bbb.. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Hard Crunchy Center Bricks: .............. .............. .............. .............. ....EEEEEE.... ...aaaaaaaa... ..EabbbbbbaE.. ..EabbbbbbaE.. ..EabbccbbaE.. ..EabbccbbaE.. ..EabbbbbbaE.. ..EabbbbbbaE.. ...aaaaaaaa... ....EEEEEE.... .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ...22222222... ...23333332... ...23444432... ...23455432... ...23455432... ...23444432... ...23333332... ...22222222... .............. .............. .............. .............. .............. Level: G Thirsty? Bricks: .............. .............. .............. .............. .............. ....#....#.... ...#iiiiii#.#. ..#ii#ii#i##v# ..#iiiiiii#vv# ..#i#iiii##vv# ..#ii####i#vv# ..#iiiiiii###. ...#iiiiii#... ....#iiii#.... .....####..... ......#.#..... .....##.##.... .............. Bonus: .............. .............. .............. .............. .............. .............. .............. ............5. ...........55. ........m..55. .........5.55. ...3333445.... ....444455.... .....5555..... .............. .............. .............. .............. Level: G Baskets Bricks: i............i ihh........hhi ihhi#....#.hhi ihhi#....#ihhi ihhi#....#ihhi ihhi#....#ihhi ihhi#....#ihhi zzzz#....#zzzz #####....##### .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: 4............4 4............4 4............4 4............4 4............4 4............4 4............4 5555......5555 .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Baseball Bricks: .............. .............. .....jjjj..... ....djjjjd.... ...jjdjjdjj... ..jjjdjjdjjj.. ..jjjdjjdjjj.. ..jjjdjjdjjj.. ..jjjdjjdjjj.. ...jjdjjdjj... ....djjjjd.... .....jjjj..... .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. ....b....b.... .............. .............. ......ww...... .............. .............. .............. ....b....b.... .............. .............. .............. .............. .............. .............. .............. Level: G Invisible Bricks: v.v........v.v ..v........v.. ..v........v.. ..v..v..v..v.. ..v..v..v..v.. .vvvvv..vvvvv. .....v..v..... .....v..v..... .v.vvv..vvv.v. .v..........v. .v..........v. .v..........v. .vvvvvvvvvvvv. ...v......v... ...v.v..v.v... ...v.v..v.v... vvvv.vvvv.vvvv .............. Bonus: w.5........5.w ..5........5.. ..5........5.. ..5..5..5..5.. ..5..5..5..5.. .55555..55555. .....5..5..... .....5..5..... .b.555..555.b. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Got Balls? Bricks: zzzzzzzzzzzzzz ############## .!..!..!..!..! .#.#.#.#.#.#.# ...!..!..!..!. #.#.#.#.#.#.#. .............. @@@@..EE..@@@@ cccccccccccccc .............. cccccccccccccc .............. .............. .............. .............. .............. .............. .............. Bonus: 55555555555555 .............. .m..l.....l..m .............. .............. .............. .............. .............. wbbbbbbbbbbbbw .............. bbbbbbbbbbbbbb .............. .............. .............. .............. .............. .............. .............. Level: G Snake Bricks: .............. .............. ........zz..z. .......zzz..z. ......zz.z..z. ......z..z..z. .....zz.zz..z. ....zz..zz.zz. ....zz..z..z.. ....z..zz..z.. ..zzz..z...z.. .dzzz..z..zz.. .zzz..zz..z... .zzd..z..zz... .zz...zzzz.... .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .m............ .............. ...m.......... .............. .............. .............. .............. Level: G Layer By Layer Bricks: zzzzzzzzzzzzzz z************z z*..........*z z*.zzzzzzzz.*z z*.z******z.*z z*.z*....*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*.vv.*z.*z z*.z*....*z.*z z*.z******z.*z z*.zzzzzzzz.*z z*..........*z z************z zzzzzzzzzzzzzz Bonus: .............. .222222222222. .2..........2. .2..........2. .2..444444..2. .2..4....4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4.55.4..2. .2..4....4..2. .2..444444..2. .2.WWWWWWWW.2. .2..........2. .222222222222. >>>>>>>>>>>>>> Level: G CrazyFace Bricks: .............. .............. .....vvvv..... ..@@vvvvvv@@.. ..@@vvvvvv@@.. ..vvvv@@vvvv.. ..vvvv@@vvvv.. ..vvvv@@vvvv.. ..vvvv@@vvvv.. ..@@vvvvvv@@.. ..@@vvvvvv@@.. ...@@vvvv@@... ....@@@@@@.... .............. .............. .............. .............. .............. Bonus: .............. .............. .....5555..... ....555555.... ....555555.... ..5555..5555.. ..5555..5555.. ..5555..5555.. ..5555..5555.. ....55ll55.... ....55mm55.... .....5555..... .............. .............. .............. .............. .............. .............. Level: G Tough Break Bricks: .............. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .ccchhhhhhccc. .cccccccccccc. .cccccccccccc. .cccccccccccc. .cccccccccccc. .............. .............. .............. .............. .............. Bonus: .............. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWW555555WWW. .WWWWWWWWWWWW. .WWWWWWWWWWWW. .WWWWWWWWWWWW. .{{{{{{{{{{{{. .............. .............. .............. .............. .............. Level: G Tough Break II Bricks: .............. .............. .@.@.@@@@.@.@. .@z@.@zz@.@z@. .@@@.@..@.@@@. .............. .............. .............. cccccccccccccc ihhhihhhihhhih ihihihihihihih ihihihihihihih ihihihihihihih hhihhhihhhihhh vvvvvvvvvvvvvv .............. !!!!!!!!!!!!!! .............. Bonus: .............. .............. .............. ..m...mm...m.. .............. .............. .............. .............. l............l g...g...g...g. .............. .............. .............. ..g...g...g... .............. >>>>>>>>>>>>>> 55555555555555 >>>>>>>>>>>>>> Level: G Pattern II Bricks: .............. .............. ......!!...... ....!....!.... ..!...!!...!.. ...!!.!!.!!... ...!......!.!. .....!..!..... !.!!..!!..!!.! !.!!..!!..!!.! .....!..!..... ...!......!.!. ...!!.!!.!!... ..!...!!...!.. ....!....!.... ......!!...... .............. .............. Bonus: .............. .....2222..... ...222..222... .222.2222.222. .2.222..222.2. .22..3..3..222 ..2.333333.2.2 22233.55.33222 .2..35..53..2. .2..35..53..2. 22233.55.33222 ..2.333333.2.2 .22..3..3..222 .2.222..222.2. .222.2222.222. ...222..222... .....2222..... .............. Level: G Red Dragon Bricks: .............. ............d. ...........ddd ..........dd.d .......ddddddd .....h.ddddddd ......h.....d. .hhhhhhh....d. ......h.....d. .ggg.h.....dd. .ggg......ddd. .ggg.....ddddd .ggg.....dd.dd .........d...d .........dd.dd .........ddddd ...........d.. ...........ddd Bonus: .............. ............0. ...........0>0 ..........0>.> .......00000>0 .......0000000 ............0. .......j....0. ............0. ...........00. ..p.......000. ..p......00000 .........0?.?0 .........0...0 .........0?.?0 .........00000 ...........0.. ...........000 Level: G Columns Bricks: .............. .............. .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .c.c.c.c.c.c.c .............. .............. Bonus: .............. .............. .l.}.>.-.c.-.+ .s.3.1.W.1.}.} .>.c.s.2.3.c.s .1.2.3.}.s.3.0 .}.-.-.1.0.f.> .f.f.c.f.>.1.- .3.1.2.+.-.s.1 .{.b.b.3.b.b.f .c.s.0.s.2.0.3 .2.>.f.b.f.{.b .+.0.+.0.}.+.2 .-.W.}.>.{.2.c .b.+.{.c.+.>.{ .0.{.W.{.W.W.~ .............. .............. Level: G Columns Bricks: .............. .............. .............. .............. vvvvvvvvvvvvvv vhhhhhhhhhhh#v viiiiiiiiii#hv vjjjjjjjjj#ihv vkkkkkkkk#jihv vaaaaaaa#kjihv vdddddd#akjihv veeeee#dakjihv vffff#edakjihv vggg#fedakjihv vii#gfedakjihv vh#igfedakjihv v#higfedakjihv vvvvvvvvvvvvvv Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: G Chao-Twist Bricks: .............. ....!.#....... ..#...##....!. ..#.....#..... ...#.!..g#.... ...#....#..!.. ...#...#...... ....#....!.... ..!.#.#....... ....#......... ...#h#.!...... ..#hh#........ ..#hhh#....... ..##hhh#...... ....#hhh#..... .....###h##h#. .......##hh##. .............. Bonus: ...222........ ...2.2.....222 ...222.....2.2 ....222....222 ....2.2.m.222. ....222...2.2. ........22222. .222....2.2... .2.2....222... .222..222..... ....5.2.2..... ...55.222..... ...555........ ....555....... .....555...... ........5..5.. .........55... .............. Level: G Bug Bricks: .............. .............. .#..........#. #.#.######.#.# ...##****##... .#.#******#.#. #.##*#..#*##.# ...#*.!!.*#... .#.#*.!!.*#.#. #.##*#..#*##.# ...#******#... ...##****##... ....#.##.#.... ....#....#.... ....##..##.... .............. .............. .............. Bonus: .............. .............. .............. .............. .....5555..... ....555555.... ....5.mm.5.... ....5l..l5.... ....5l..l5.... ....5.mm.5.... ....555555.... .....5555..... .............. .............. .............. .............. .............. .............. Level: G Bust 'em Open! Bricks: .............. ......!!...... .@@##....##@@. .@hh#....#hh@. .@hh#....#hh@. .@@##....##@@. .............. .....##@@..... .....#hh@..... .....#hh@..... .....##@@..... .............. .@@##....##@@. .@hh#....#hh@. .@hh#....#hh@. .@@##....##@@. .............. .............. Bonus: ......mm...... .............. .4444....4444. .4..4....4.m4. .4..4....4..4. .4444....4444. .............. .....5555..... .....5l.5..... .....5..5..... .....5555..... .............. .4444....4444. .4m.4....4..4. .4..4....4..4. .4444....4444. .............. .............. Level: G Skull Bricks: .............. .............. ....v####v.... ..v########v.. ..##vv##vv##.. ..##vv##vv##.. ..##########.. ..####vv####.. ..v###vv###v.. ...v######v... ....######.... ....#vvvv#.... ....######.... .............. .............. .............. .............. .............. Bonus: .............. .............. ....m......... .............. ....55..55.... ...55555555... ...5..55..5... ...55.55.55... ..W.5.55.5.W.. ...W..55..W... ......55...... .....5555..... .............. .............. .............. .............. .............. .............. Level: G Randoom Bricks: ........aE.... e..d..d..E#.*. *............. ......!....... ....!......... ........*.*... ...@.#e.E.!@.. ...d......@..d ...*...d...... .a...........a ..#..a.#...@.. ea..E..e...... .....a..a!.@.. *....E........ ..*.....E..... .E.E........!. .!...d......e. ...@...*...... Bonus: ........5..... m..5..5.....5. .....555...... ...{{{.5...... ...{.{55...... ...{{{...f.f.. ......5..f.... ...5.....f.f.5 ...5...5...... .5...........5 .....5........ 55.....5WWW... .....5..5.W... 5.......WWW... ..5........~~~ >.>........~.~ >.>..5.....~5~ >>>....5...... Level: G The End Bricks: eeeeeeeeeeeeee @@@@@e@e@e@@@e @e@e@e@e@e@eee ee@eee@@@e@@ee ee@eee@e@e@eee ee@eee@e@e@@@e eeeeeeeeeeeeee @@@@e@ee@e@@ee @eeee@@e@e@e@e @@@ee@e@@e@ee@ @eeee@ee@e@ee@ @@@@e@ee@e@@@e eeeeeeeeeeeeee .............. .............. .............. .............. .............. Bonus: f.f.f.f.f.f.f. 55555.5.5.555. 5m5.5.5m5.5m.. ..5...555.55.. ..5...5.5.5... ..5...5.5.555. .f.f.f.f.f.f.f 5555.5..5.55.. 5....55m5.5.5m 555..5.55.5..5 5m...5..5.5..5 5555.5..5.555. f.f.f.f.f.f.f. .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/Shimitar0000664000175000017500000002215512140767201015001 00000000000000Level: Shimitar the beginning Bricks: .............. .............. .gggggggggggg. .ghgggggggghg. .gghgggggghgg. .ggghgfighggg. .gggggiiggggg. .gggggiiggggg. .gggggiiggggg. .ggghgifghggg. .gghgggggghgg. .ghgggggggghg. .yggggggggggy. .............. .............. .............. .............. .............. Bonus: .............. .............. .555555555555. .555555555555. .555555555555. .555555555555. .555555555555. .555555555555. .555555555555. .555w5mm5w555. .55w555555w55. .5wbbbbbbbbw5. .pwbbbbbbbbwp. .............. .............. .............. .............. .............. Level: Shimitar Azz1 Bricks: .............. .jj........jj. .jj........jj. ...hh....hh... ...hh....hh... .....iiii..... .....iv*i..... .....i*vi..... .....iiii..... ...hh....hh... ...hh....hh... .jj........jj. .jj........jj. .EEEEEEEEEEEE. .............. .............. .............. .............. Bonus: .............. .pp........pp. .pp........pp. ...bf....fb... ...ff....ff... .....0000..... .....*w.*..... .....*.w*..... .....0000..... ...>>....>>... ...b>....>b... .pp........pp. .pp........pp. .............. .............. .............. .............. .............. Level: Shimitar Azz2 Bricks: d...........d. .d.........d.. ..d.......d... ...d.....d.... ....d...d..... ....*did*..... ....*idi*...** ddddddddddddd* #############* iiii........h* ggggg*gg*gggh. *gg*gg*gggggh. g*ggggg*gg*gh. *g*gg*gg*gggh. ggg*ggggg*ggh. g*gg*gg*gg*gh. ............h. ............h. Bonus: .............. .............. .............. .............. .............. .............. ......5.....!. .............. .............. m..w........+f ...?.......4+. ..0.....?0..+. ....1.......+. ...?......1?+. ............>. 4.....?.....>. ............>. ............>. Level: Shimitar DontBeAfraid Bricks: cz!!!!!!!!!!zc zcz!!!!!!!!zcz !zcz!!!!!!zcz! !!zcz!!!!zcz!! !!!zcz!!zcz!!! !!!!zczzcz!!!! !!!!!zczz!!!!! !!!!!zzcz!!!!! !!!!!czzc!!!!! !!!zcz!!zcz!!! !!zcz!!!!zcz!! !zcz!!!!!!zcz! zcz!!!!!!!!zcz cz!!!!!!!!!!zc zzzzzzzzzzzzzz cccccccccccccc zzzzzzzzzzzzzz gggggggggggggg Bonus: .............. .............. .............. .............. .............. .............. .............. ......ww...... ......ww...... .............. .............. .............. bbbbbbbbbbbbbb bb>>>>>>>>>>bb bbbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbbbbb wwwwwwwwwwwwww Level: Shimitar Bump! Bricks: .............. ....!..!...... .............. .............. ...!......!... .!....!.....!. .............. .............. .......!...... ...!......!... .............. .............. .!....!..!..!. .............. .............. ..!...!!...!.. .............. .............. Bonus: .............. .......>...... .............. .............. ...w.......... ............>. .............. .............. .......g...... ..........m... .............. .............. .g..........g. .............. .............. ......>....... .............. .............. Level: Shimitar Hidden... Bricks: .............. .............. ..v..v..v..v.. .............. .............. ..v..v..v..v.. ......ee...... ......ee...... ..v..vzzv..v.. .............. .............. ..v..v..v..v.. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. ......mm...... ......mm...... .............. .............. .............. ..b..w..w..b.. .............. .............. .............. .............. .............. .............. Level: Shimitar HardStart!!! Bricks: .............. .............. !!!!!!!!!!!!!! !!!!!!!!!!!!!! dddddddddddddd dddddddddddddd e!eeeeee!eeeee eee!eeeeeee!ee eeeeeeeeeeeeee i!iii!i!iiiiii iiiiiiiiii!iii hhhhhiihhhhhhh hh!hhiihhhhhhh ggggffffgggggg ggggffffg!gg!g ffffvvvvffffff ffffvvvvffffff @@@@@vv@@@@@@@ Bonus: .............. .............. .............. .............. ......ww...... .............. .............. .............. .............. .w...b.b...... ..........b... .............. .............. .............. ....wwww...... .bbbb..bbbbbb. mbmbm..m.m.m.m .....dd....... Level: Shimitar Now..Fun! Bricks: .............. .............. .............. .zzzzzzzz..... .z............ .z............ ##.#####z!!... .#.#...#dddddd .#.#...#dddddd .#.#...#dddddd .#.#...#dddddd .#.#...#dddddd .#.#...#dddddd .#.#...#dddddd .#.#...#dddddd .#.#...####### .#............ .#............ Bonus: .............. .............. .............. .55555555..... .5............ .5............ ........>..... ..........mm.. .............b ........3....3 ........b.>... ...........3.. ..........>?.b .............. ........b..... .............. .............. .............. Level: Shimitar UseTheForce! Bricks: ddi#dddi#iiiii ddihhhii#dddhh ddihhhii#dddhh iii##########h hhf#dd#ddggggh hhf#dd#ddggghh fff#ii#hhggghh #f##ii#hhggghg hhf##h##*##### hhf#hhgggg#iig ddfhiiiigg#iig ddfhiiiihh#hhh iif#ddddhh#hhh iif#########g# ####iihhgggggg ddd#iihhggdddd ddd#iihhggdddd ddd#####.##### Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. bbb........... bbb........... .............. mmm........... mmm.wwwwwwwwww mmm........... Level: Shimitar Quick,esay,duh Bricks: .............. .............. .............. .............. .............. .......hhh.... .......hhh.... .......hhh.... vvvvvvvhhh.... ....fffvvvvvvv ....fff....... ....fff....... ....fff....... .............. .............. .............. .............. vvvvvvvvvvvvvv Bonus: .............. .............. .............. .............. .............. .............. ........m..... ........m..... .............. .............. .....p........ .....b........ .....>........ .............. .............. .............. .............. ....w......... Level: Shimitar TheRedfield Bricks: d.d.d.d.d.d.d. .d.d.d.d.d.d.d d.d.d.d.d.d.d. .d.d.d.d.d.d.d d.d.d.d.d.d.d. .d.d.d.d.d.d.d d.d.d.d.d.d.d. .d.d.d.d.d.d.d d.d.d.d.d.d.d. .d.d.d.d.d.d.d d.d.d.d.d.d.d. .d.d.d.d.d.d.d d.d.d.d.d.d.d. .d.d.d.d.d.d.d ....d.d.d.d.d. .......d.d.d.d ..........d.d. .............d Bonus: .............. .............. .............. .............. ?.....?....... ...........W.. .............. .~.m.......... ......W...b... .............. ............W. .........c.... ..b.+......... .d.+.j........ ....d.g.j.~... .......d.d.... ..........d... .............w Level: Shimitar FullYellow! Bricks: .............. .............. ..hh..hh..hh.. ..hh..hh..hh.. hh..hh..hh..hh hh..hh..hh..hh ..hh..hh..hh.. ..hh..hh..hh.. hh..hh..hh..hh hh..hh..hh..hh ..hh..hh..hh.. ..hh..hh..hh.. hh..hh......hh hh..hh......hh ..hh..hh..hh.. ..hh..hh..hh.. ........hh.... ........hh.... Bonus: .............. .............. .......f...... ..f.......f... ............c. .b..~....-.... .............. ...-..p...+... .............. .c..-...b...+. ......?....... ..f.......+... .....>........ -...>.......m. ......ss...f.. ...?..ss...... ........~..... .............. Level: Shimitar Tree Bricks: .............. ......ff...... .....ffff..... .....ffff..... ....ffffff.... ....ffffff.... ...ffffffff... ...ffffffff... ...ffffffff... ...fff@@fff... ...fff@@fff... ......@@...... ......@@...... ......@@...... ......@@...... ......@@...... .............. .............. Bonus: .............. ......?5...... .....5??5..... .....?&5?..... ....5~55?.... ...?5*p5!5?... ...5&w5j5?5... ...g>5?5d5>... ...55>..5>5... ...mb5..b5m... .............. .............. .............. .............. .............. .............. .............. Level: Shimitar OnlyTwoMore... Bricks: ......gg...... ......gg...... ......dd...... e.ggggddgggg.e e....dddd....e .e...dddd...e. .e...dddd...e. .*..######..*. ..ee######ee.. ..ee......ee.. .............. ......!!...... ee..........ee ee..........ee .*...iiii...*. .....ivvh..... #####hvvh##### ffffffffffffff Bonus: .............. .............. ......11...... ......111.b... 1.....111..... .d....0....... .....f.m....0. .............. ..1........... ..1b......0d.. .............. .............. .............. 0f..........1~ ......!!...... .....0........ ........d..... .w....bw..~.w. Level: Shimitar TheLast..Frozing! Bricks: *............* .............. ...vvvv.**.... .d.vdvv.**.... .ddvddv....... ...vvvv....... ...........d.. ..d..d.....dd. ..dd.dd.d..... ........dd.... .d............ .dd.d......... ....dd..d..... ........dd.... #d..........d. #dd.........dd !!!!!!!!!!!!!! vvvvvvvvvvvvvv Bonus: m............? .............. ...ffff.~f.... ...ffff.d~.... ...ffff....... ...ffff....... .............. ..f........bf. .....?..f..... .........f.... .f............ .............. ....?...*..... .............. .f..........f. ..b........... .............. ......w....... Level: Shimitar WasJoking,thisIsLast. Bricks: zzzzzzzzzzzzzz z.....ffffffff z.....ffffffff z.z...ffffffff z.z...ffffffff z.zfffffffffff z.zfffffffffff z.zfffffffffff z.zfffffffffff z.zfffffffffff z.zfffffffffff z.zfffffffffff z.zfffffffffff z.zfffffffffff z.zfffffffffff z.zzzzzzzzzzzz z............. z............. Bonus: 55555555555555 5.....55555555 5.....55555555 5.0...55555555 5.0...555f5555 5.0>>>>55f5555 5.0555555f5555 5.05bbbbbf5555 5.05bbbbbf5555 5.0wbbbbbfw555 5.05bbbbbf5555 5.05bbbbbf5555 5.055555555555 5.055555555555 5.0m555555555m 5.ww0ww0000w0w 5............. p............. lbreakout2-2.6.5/client/levels/Tricky0000664000175000017500000002102012140767201014454 00000000000000Version: 1.00 Level: Lelldorin Tricky1 Bricks: .............. .............. .............. ....iffffi.... ...ihfddfhi... .iihggddgghii. .............. .............. .............. .............. ......EE...... ....E....E.... ..E........E.. .E..........E. E............E .............. .............. .............. Bonus: .............. .............. .............. .....0<20..... ......--...... ..0+.>..>.+0.. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Lelldorin Tricky2 Bricks: .....kjjk..... ....kjjjjk.... .....kjjk..... ..E...kk...E.. ..iE......Eg.. ..i.E....E.g.. ..i........g.. ..i........g.. E.i........g.E .Ei........gE. ..E...EE...E.. .....EfhE..... ....E.hf.E.... ......fh...... ......hf...... ......EE...... .............. .............. Bonus: ......+l-..... .....4.0...... .......>...... ......5....... ..w........w.. ...........1.. ..0........>.. ..>........0.. .............. ..+........+.. .............. ......w0...... .......+...... ......0....... ......>f...... .............. .............. .............. Level: Lelldorin Tricky3 Bricks: ddd..gggg..ddd ggg..hhhh..ggg hhh...ii...hhh iii........iii jj..........jj k............k ...#......#... ....#bbbb#.... e....EaaE....e ee...EaaE...ee EE...EEEE...EE ..E........E.. .............. .............. .............. .............. .............. .............. Bonus: <15...<<...51< w....1--1....w 1.0........0.1 .>..........>. -............- .............. .............. .....&ww&..... 0.....44.....0 &+....ll....+& .............. .............. .............. .............. .............. .............. .............. .............. Level: Lelldorin Tricky4 Bricks: ......dd...... ...b*bddb*b... ...bbbeebbb.E. .E....ee....E. .E....ff....E. .E....ff....E. .E....gg....E. .E.!..gg..!.E. .E....cc....E. .E....cc....E. .E....hh....E. .E.!..hh..!.E. .E....ii....E. .E....ii....E. ..EEEEEEEEEE.. .............. E............E .E..........E. Bonus: ......--...... ..........2... ....+.l..+.... .............. ......s....... ......2-...... .............. ...0.......... .............. .......s...... ......-....... ..........0... .......4...... ......ff...... .............. .............. .............. .............. Level: Lelldorin Tricky5 Bricks: j.f.g.hh.g.f.j .f.g.h..h.g.f. f.g.h.ii.h.g.f .g.h.i..i.h.g. .............. EE..EE..EE..EE .............. .............. .............. vvEE..EE..EEvv .............. .............. .............. EE..EE..EE..EE .............. .............. .............. .............. Bonus: &.w...ls.<.w.& .0...5..5...0. l.>.+.00...+.s .1..........1. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Lelldorin Tricky6 Bricks: ......EE...... .............. .............. ....E....E.... .....E..E..... .....E..E..... .....E..E..... .....E..E..... .....EccE..... .....EbbE..... .....EaaE..... .....EaaE..... .....EaaE..... .....EaaE..... .....EaaE..... .EE..EEEE..EE. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .......f...... ......21...... ......s+...... .............. ......b>...... ......-....... ......3l...... .............. .............. .............. Level: Lelldorin Tricky7 Bricks: .............. .v.v.v..v.v.v. .E.E.E..E.E.E. fE.EfE..EfE.Ef EE.EEE..EEE.EE .............. .............. .EE.EE..EE.EE. .gE.Eg..gE.Eg. .EE.EE..EE.EE. .............. .............. v..v..vv..v..v .............. .............. .............. .............. .............. Bonus: .............. .............. .............. -...0....>...2 .............. .............. .............. .............. .5...w..w...5. .............. .............. .............. 0..+..>1..f..- .............. .............. .............. .............. .............. Level: Lelldorin Tricky8 Bricks: .............. .EE.EEE.EE.EE. .fEffE..EffEf. .EEEEE.EEEEEE. .............. .............. .............. .....E..E..... ....E....E.... vv.E......E.vv .v.EhE..EhE.v. .v.EhE..EhE.v. vv.EEE..EEE.vv .............. .............. .............. .............. .............. Bonus: .............. .............. .<..l....l..-. .............. .............. .............. .............. .............. .............. ->...........w ....s.......+. .w..5....5..b. +............- .............. .............. .............. .............. .............. Level: Lelldorin Tricky9 Bricks: .............. .E....EE....E. .EeE.edde.EeE. .EEE.EEEE.EEE. .............. .............. v............v .............. .............. ..Ed......dE.. ...Ed.vv.dE... ....E.EE.E.... v...E....E...v vv..E....E..vv EEE.EE..EE.EEE .............. .............. .............. Bonus: .............. .............. ..s...44...+.. .............. .............. .............. 0............0 .............. .............. .............. ....-.+f...... .............. 0............. w...........sw .............. .............. .............. .............. Level: Lelldorin Tricky10 Bricks: ...Ef.EE.fE... ....EvEivE.... .E....fE....E. .E.v..Eh..v.E. .E....iE....E. .E....Ef....E. .Ee...hE...eE. .Ed...Ei...dE. .Ee...fE...eE. .Ed...EE...dE. .Ee..j..j..eE. .Ed.EEvvEE.dE. .Ee..k..k..eE. .EEEE.EE.EEEE. .....hkkh..... ....EEEEEE.... .............. .............. Bonus: ....>....>.... ........0..... ......1....... .............. ......-....... .......w...... ..0...0....... .......-...... ..-........1.. ...........-.. ..1.....0..0.. ......l5...... ..+........+.. .............. ......f<...... .............. .............. .............. Level: Lelldorin Tricky11 Bricks: ......dd...... .dd..deed..dd. .eeeE.ff.Eeee. .ee..fEEf..ee. .e..ffEEff..e. .d..EEvvEE..d. .E...EvvE...E. ...E......E... .............. ..E........E.. ..E........E.. .............. kE..........Ek jE....EE....Ej kE..........Ek E............E E............E E............E Bonus: .......>...... ......l....<.. .3.>...0..>... ............3. ....-0...-.... .0....++....0. ......ww...... .............. .............. .............. .............. .............. s............f <............< 5............l .............. .............. .............. Level: Lelldorin Tricky12 Bricks: Eh....kk....hE Eh...EggE...hE Eh...EEEE...hE .E...keek...E. .E...kffk...E. .....EeeE..... ..E...ff...E.. ......ee...... ...E......E... .............. ....EEdiEE.... ..vvEEidEEvv.. .v....EE....v. v.....EE.....v .............. .............. .............. .............. Bonus: .4.....-....w. .+....l5....s. .s..........-. .....s........ ......w.0..... .......-...... ......+....... .............. .............. .............. ......-....... ..w+..0+...w.. ............-. s............0 .............. .............. .............. .............. Level: Lelldorin Tricky13 Bricks: .............. .....EeeE..... .!...EeeE...!. .....E@@E..... ......EE...... ......EE...... ..E.E.EE.E.E.. ......EE...... ......EE...... hE.EfE##EfE.Eh hE.EfE##EfE.Eh hE.EfE##EfE.Eh EE.EEEEEEEE.EE ......zz...... .....z..z..... ..E........E.. .............. .............. Bonus: .............. .......0...... ......5+...... .............. .............. .............. .............. .............. .............. w...+........w 3...0....0...4 l............l .............. ......5>...... .....-..f..... .............. .............. .............. Level: Lelldorin Tricky14 Bricks: @#@#@#@@#@#@#@ EEEEEEEEEEEEEE E..v..hh..v..E e..E..hh..E..e e...E.hh.E...e e....EEEE....e e............e e.....dd.....e E....EddE....E ...E..EE..E... .E..........E. ....E....E.... ..Ev..EE..vE.. .............. ...E.EvvE.E... .............. .............. .............. Bonus: .............. .............. ......0....... ......l4...... .............+ 0............. .............0 +......0.....s ......wl...... .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Lelldorin Tricky15 Bricks: ..i........i.. ..iv......vi.. .EEE......EEE. .E..E....E..E. .E..E....E..E. .E...v..v...E. .E....EE....E. .E..........E. .E..........E. dE..........Ed eE..........Ee eE..........Ee eE..........Ee eE..........Ee eE..........Ee eE..........Ee eE..........Ee EE..........EE Bonus: ..-........-.. ..+w......w+.. .............. .............. .............. .....3..3..... .............. .............. .............. .............. >............> .............. .............5 1............1 .............. <............< 5............l .............. lbreakout2-2.6.5/client/levels/IrrenhausAh0000664000175000017500000005440712140767201015437 00000000000000Version: 1.00 Level: Spockl Nerveous breakdown Bricks: zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz z............. zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz z............. zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz z............. zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzzzz zzzzzzzzzzzjjj EEEEEEEEEEEjjj Bonus: .............. .............. .............. .............. .............. .............. .............. .ggggg....gggg .............. bbbbbbbbbbbbbb }}!}}}!}}!}}}} j}}!}!}}!}}!.. j............. g!g!g!g.g.g!gg b*b*b*b*b*!*b* *b*b*!*b*b*b*b wwwwwww!www}ww ...........www Level: Spockl Welcome to juniper hill Bricks: EEEhhhhhEEEEEE EEE.hhhEEEEEEE EEEEhhh.EEEEEE EEEEhhhhhhhEEE EEEhhhhhhhhhhE EEEhhhhhhhhhhE EEEhhhh.EE...E EEEE...EEEE.EE EEEE...EEEE.EE EEEi...iEEE.EE EEEi...iEEE.EE EEEE...EEEE.EE EEEE...EEEE.EE EEEE...EEEE.EE EEEi...iEEE.EE EEEi...iEEiiiE EEEE...EEEiiiE EEEE...EEEEEEE Bonus: ....*l*l...... .............. ......?....... .......?...... .....?.?....l. .......?....l. ....gw>....... .............. .............. ...!...!...... ...w...w...... .............. .............. .............. ...f...f...... ...w...w..555. ..........555. .............. Level: Spockl Rubbercell 1 Bricks: @@@@@@@@@@@@@@ @jjjjjjjjjjjj@ @j...!!!!...j@ @j...!!!!...j@ @j.@.jjjj.@.j@ @j.@.j@@j.@.j@ @j.@.j@@j.@.j@ @j...j@@j...j@ @jkkkjkkjkkkj@ @jjjjkkkkjjjj@ @j...j@@j...j@ @j...j@@j...j@ @j...j@@j...j@ @j...jjjj...j@ @j..........j@ @j..........j@ @j..........j@ @j..........j@ Bonus: .............. .5lll5555lll5. .5...ffff...5. .5..........5. .5...>55>...5. .5...>..>...5. .5...>..>...5. .5...5..5...5. .5c--jccj--c5. .>>>>cllc>>>5. .5...+..+...5. .5...+..+...5. .5...>..>...5. .5...+>>+...5. .5..........5. .5..........5. .>..........>. .>..........>. Level: Spockl Try to escape Bricks: k....EkkEkkkkk k.!!EckkEE!!kE kE!!!!**!!!!kk k.EE.ccc.cc*kk k..gggkkggg*kk .EEEEE***E**kk k..kggkkggkkkk k...EEEEEEEEEk kk..ggabggz.Ek kkk.ggkkgg.k.E EEEEEEEEE..k.. kkk...kkg..kkk .kk........kkk kkkgEggggg.hEk kkkgEEEEEEEEEE .kkeeegEeeekE. E.keeeggeeek.. ******Eg...EE. Bonus: b.....ll.bbbbb b.*j.bll..j.b. w.f!!!bb!!!fbw *....bbb.bbbb* c..+55c-55+b*b ......bbb.bbb. c..f4!-c!4fb*w *............* ww..3f*wf3w..w wwb.22c-22.b.. ...........c.. cw&...*w1..&ww .wc........c*w ww**bbwwbb.w.w wgwf.......w.. .g>w00+.00w>w. ..>w0+>>+0w>.. wwwwww.+...... Level: Spockl Rubbercell 2 Bricks: @@@EE@@@@EE@@@ EiiiiiiiiiiiiE EijjjjEEjjjjiE Eij@@jjjj@@jiE Eij@ijjjji@jiE @i.@ij@@ji@.i@ @i.@ij@@ji@.i@ @i.Eij@@jiE.i@ @i.Ei....iE.i@ @i.Ei.cc.iE.i@ @@.Ei....iE.@@ @ijEij.@jiEji@ @i.@ij@@ji@.i@ @i.@ij@.ji@.i@ @ij@ijjjji@ji@ @i.@i....i@.i@ @i.ii....ii.i@ @i..E....E..i@ Bonus: .............. .!b.ffffff.b!. ..llll..llll.. .............. .lc..WggW..cl. .l...W..W...l. .>...W..W...>. .>..........>. .>..........>. .w..!.ll.!..w. .............. ....5g..g5.... ....5>..>5.... ....5>..>5.... ....555555.... .c..5....5..c. .c.cc....cc.c. .5..........5. Level: Spockl Recreationcenter Bricks: ghh@@@hhhhhE@E ghh...h...hhh@ .h....h.....hE @h....h.....hE @h..hhhhh..hhh @h...hhh..Eh.h @h....h...Eh.h @h........EE.h @bbbbbbbbbEh.h @bbbbbbbbbEh.h @cccccccccEh.h @cccccccccEh.h @gggggggggEh.h @gggggggggEh.E @gggggggggEh.h @h@@ggg@@hEh.h @ggg*g*gggEh.h EEEEEEEEEEEh.h Bonus: m.....44444... m.....4...44&. ......4.....&. ......4.....&. ....44444..4&4 .....444...w.w ......g....w.w ...........4.4 .b0b0b0b0b.4.4 .000!000!0.4.4 .111111111.4.4 .111111111.4.4 .*22*22*22.4.4 .222222222.4.4 .lllljllll.w.w ...........w.w .b..lll..b.w.w ...........w.w Level: Spockl Drug-Locker Bricks: .*jjjjgjjjjj*@ .cjjjcgcjjjcj. .cjejcgcjejcj. .cjejcgcjejcj. .ceeecgceeecj. .cjejcgcjejcj. .cjejcgcjejcj. .cjjjcgcjjjcj. .cccccgcccccj. .cccccgcccccj. .gggggggggggg. .............. .............. .........z.... @.....@.....EE h............. EE............ @z@z@........@ Bonus: ....llmll..... .g....b.....g. ......b....... ......b....... .>.l.....l.>.. .>.........>w. .>.........>.. .>.........>w. ...+++g+++.... ......g....... .>&&&ggg&&&&>. .............. .............. .........w.... .............. w............. .............. .............. Level: Spockl Infusion Bricks: ggg..........@ jggiiiiiiiii.. ggg........i.. ggg........i.. jgg........i.@ ggg...@EE..i.. ggg...z....i.. jgg...z....i.. ggg...z....i.. ggg...@z@.did. jjg....Ez.cdc. gggg@...z.c*c. jjggE...z.ccc. ggggz...@..c.. jjggz......... g**gz......... g**gEfffffffff EEEE@ffffffff@ Bonus: .............. ..>g>w>w>g>g.. ...........>.. ...........g.. >>>........>.. 5g5........g.. ...........>.. ......w....g.. .<.........>.. ..........5g5. ..........5*5. ........w.5g5. ..........555. 5555.......j.. 5555.......... 5555.......... llll.000000000 .....00000000. Level: Spockl Nurses Restroom Bricks: !!!!!!EE!!!!!! !!!!!!EE!!!!!! !!!!!!EE!!!!!! @.....@@.....@ E............E .............. .............. ...d......d... ..d*d....d*d.. .jjjjj..jjjjj. jjjjjj..jjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj EjjjjjEEjjjjjE .............. Bonus: ffflll..lllfff .............. ...++d..d++... .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..+++....+++.. .ggggg..ggggg. .ggggg..ggggg. .............. Level: Spockl Flatline Bricks: jjjjjjjjjjjjjj jjjjjjjjjjjjjj jjjjjjjjjjjjjj EE.EEEE.EEE.EE vvvvvvvvvvvvvv vvvvvvvvvvvvvv hhhhhhhhhhhhhh vvvvvvvvvvvvvv vvvvv!vvvvvvvv jEEEEjjjjEEEEj j............j EEEE......EEEE jejE......Ejej eee........eee jej........jej jjj........jjj E............E .............. Bonus: +m+m+m+m+m+m+m lll55555555lll ll5555555555ll .............. >>>>>>>.>>>>>> .............. .***......***. ......gg...... >>>>>!gg!>>>>> m....>->-....m .............. .............. >>>........>11 ww3........1p& ww3........1p& ++3........1p. .............. .............. Level: Spockl X-RAYs Bricks: @@@@@@@@@@@@@@ @vvEhhhhhhEvv@ @.vEhvvvvhEv.@ @.vEvvvvvvEv.@ @.vEvgvvgvEv.@ @.vEvvvvvvEv.@ @.vEvvvvvvEv.@ @.vEvvvvvvEv.@ @.vEvdvvdvEv.@ E..EvvddvvE..E @..EvvvvvvE..@ @..EEvvvvEE..@ @v....jj....v@ @v...jjjj...v@ @v..vvjjvv..v@ @v..jjjjjj..v@ @vvvvvjjvvvvv@ @@..jjvvjj..@@ Bonus: .............. .!!.llllll.!!. ....l5555l.... ..*...ww...p.. .....bggb..... .............. .............. .............. ..+..g!!g..+.. ....j&gg&j.... ....+wwww+.... .....>>>>..... .g....55....g. .c...4444...c. .c..333333..c. .c..22w+22..c. .c..111111..c. ....000000.... Level: Spockl Deliriouse Bricks: vvvvvvvvvvvvvv *vvvvvvvvvvvv* *vvvvvvvvvvvv* vvvvvvvvvvvvvv vvvv!!!!!vvvvv vvvvvvvvvvvvvv vvvvEE*EEvvvvv !vvvhhhhhvvvv! !vvv.....vvvv! !!vv.....vv!!v !!vv.....vv!!v !!vvh...hvv!!v vvvv.....vvvvv vvvv.....vvv!! vvvvh...hvvvvv vvvv.....vvvvv vvvvh...hvvvvv vvvv.....vvvvv Bonus: ll-l>l>l>l-lll *!5!5!5!5!5!5* *44>5>5>5>544* -{{{{{{{{{{{{- >{!>>>{>>>!{{> {{1wwwwwww1{{{ >>1w..>..w1>>> {{1w.*.*.w1{{{ {{1w.....w1{{{ ..1w.....w1..{ ..!w.....w!..{ ..1w*...*w1..{ {{1w.....w1{{{ {{1w.....w1{.. gggw*...*wgggg ***w.....w**** wwww*...*wwwww wwww.....wwwww Level: Spockl Stairways to doom Bricks: kkiiiiiii#EEE! kkkiii!!!@!!#! E#kkkk!!!@!!i# kEEE#kkkk@iiik k!!!EEE#kkkiik k!!!@!!EEE#k*k k!!!@!!!!!!!*h kE!!@!!!!!!!*k h!!!@!!!!!!kkk k!!!@!!!kkkk#E k!!!@kkkk#.EEk k!!k@k#EEEEkkk aa@#EEEEkkkkkk kggggggggggggE kkkggggggggggh .#kkkkkkkkkkkk #EE.#kkkkkkkkk ##EEEE@#kkkkkk Bonus: mmlllllll..... mmmbbj....mm.. ..mbbj....mmm. .....j....mmm. .mmm.......mm. .1mbb11.....b. .1mbb11bb111b* .1mbb11mb111b. *1mb+11mb11ff. g1mb1111.ff... m1mb1........m .1m........mm> .1......+mm+mm .0000-000bbb0. ww.0>->00bpb0* ..w00-000bbb00 .....-00wwwwww ........*++++* Level: Spockl Pathologie Bricks: *ffff!fffff!f* !ffff!!!!!!!f! !ffffffffffff! !ffffffgggfff! !fffffgggggff! !fffffgegegff! !fffffgggggff! !fffffggeggff! EffEgffgggffgE hhfEgffgggffgE hhfEgffeeeffgE hhfEgfffffffgE ..fEgggggggggE !.fEgfffffffgE !.fEgfffffffgE !.fEgfffffffgE !.fEfffffffffE ..fEvvvvvvvvvE Bonus: ll>>~{{{{{{{ll 5>>>~{55555{m5 5>>>~{>>>>>{>5 5..>~{>!!!>{>5 5..>.c!...!c>5 5..>.c!5.5!c>5 5gg{{c!...!c>5 5gg}.c!.5.!c>5 .g!..c~...~cf. &&g..c~...~cf. &&!..c~{{{~cW. ww+.fcccccccf. ..w.ff..f..ff. *.+.W...j..... ..g.f......... ..+.f.......f. ..g..j.....j.. ..g.>>>>>>>>>. Level: Spockl Virus-Labs Bricks: e!!v!!!!!!v!!e !v....vv.v...! !..v.vv.....v! !.....vv.....! !v...vv.v.v..! !.....v.....vv v.v...vv.....! !!!!!!v..v.v.! !vvvvvvvvvvvv! !......v!!!!!! !v.i...v.....v !.iiiv.vviiv.! !..i...v.....! !......v.....! v.v..v.vv..v.! !iiviigviiiiii vkkkkkkkkkkkkv jjjjjjjjjjjjjj Bonus: l.??.?....?..l .?....??.?.... ...>.!......?? .......>...... ??...?!...>... ............!g g.!....?...... ....?....?.?.? .bWgbWbWbWbWb. .......!?.?... ??.....?.....g ...?.?.!?.?!.. .......?...... .......!.....? g.>..?.!?..?.. .dd?dd.Wddd.dd ?>b>b>b>b>b>bW +b>+>+++>+>b+> Level: Spockl Assoziations Bricks: EEEEEE@@EEEEEE @!!@ee@.ee@!!@ g!!Eee.@eeE!!g @E!iee@.eei!E@ g!!iee.@eei!!g @EEiee@.eeiEE@ g!!ieeeeeei!!g @E!ieeeeeei!E@ @@.@@evve@.@@@ gdddddvvdddddg EEddddddddddEE gddddddddddddg EEddddddddddEE gdddddE.dddddg EEdddd.EddddEE @@EdddE.dddE@@ gggggg.Egggggg @ffffgE.gffff@ Bonus: .............. .ll.1l..l1.ll. W00.11..11.00W .00411..11400. b>>>>>..>>>>>b .00411..11400. W00c115511c00W .00411~~11400. ......55...... b2.2f~55~f2.2b .g2f22**22f2g. {b2-222222-2b{ .1*11{!!{11*1. {1111p..p1111{ .0<000..000s0. ...>>>..>>>... {w00+0..0+00w{ .w000W..W000w. Level: Spockl Recreation 2 Bricks: !!!!!!!!!!!.dd !!!!!!!!!!!Edd !!!!!!!!..E.E. !!!!!!!!...... !!!!!!!!..hhh. !!!!!!!!...... !!EEE!!!E..... gggEhhhhhE!!.E gggEhhhhhE.... ggEEhh*hEE..!! gggEEh*hhE.... ggg.hh*hEE!!.E ggEEhh*hhE.... gggEEh*hEEE.!! ggEEhh*hhE.... gggEEhhhEE!!.E ggg.hhhhhE.... EEEEEEEEE...!! Bonus: ******wwww+.ll .b....wgggg.ll }b}.}.wg...... >>>>>>>g...... ......wg..+++. }b.}..wg...... .b....wg...... ggg.g...g.}}.. www.bbbb>..... ....b}*}....ww ..w..}*}>..... *>w.w}*}..*w.. *>..w}*}>..... *>*..}*}....*g *>..b}*}>..... .....}}}..j*.. ....bwww>..... ............ww Level: Spockl Highsecuritycell Bricks: EEEiiiiiiiiiEE Evvv######vvvE Ev###vvvvvvvvE Evvvvvvvv.#EvE @vvg..Ev..#.v@ EEvg#.vv..#.vE @vvg#.vvE.#.vE @#E##gggg.##vE vv@#.gggg...vE vvv..gggg...EE vvvE##ggg..... EvEE.gggEEEgEE vvvEvvEE..EgEg vvvEvEggggggEv EvvEvEggggggEv vvvEE@gg.EEEvv vvvvvEgg@vvvvv EggEEggggEgggg Bonus: ...mllmlll.... ...0......0.*. ......gg...... .....*gg*..... ...b.......... ..*b..ww...... ...b.......... .....w>>w..... .*...w++w...*. .44..w>>w..... .4w...**w..... .w...www...&.. .4*.44.....&.* .44.4.ww}*.w.w .w4.*.ww}*.w.5 .55...ww....55 .555*.ww.*555+ .....wggw.00++ Level: Spockl Paranoia open Bricks: ggggggcceeeeee ggggggcceeeeee ggEb@EEeeeeEee ggEg.ggeeeeEee gggE.ggeeeeEee ggEg.gg.@EEEee ggbg.ggee.eEee *gEg.ggee.eEe* ggEg.ggee.ebee ggEEE@.ee.Eeee ggEggggee.eEee ggEggggee.eEee gEEgggg.@EEEEe zbEggggeeeeEbz ggEgEggeeeeEee EgE.EEEeeeEEe@ .............. .............. Bonus: !!llllbbllll!! ...f..bb..f.?. .?..........?. .?.}.55.....?. .?g..5gg....?. .?.*.55.....g. &&.5.555f.{.>> jw.5.55!5.5.sj >>.*.5}55.5.>> .......5f.5... l..lllwll.5..l gg.1111{5.!.gg l..11w1......l ...11110000... w+.11c100c0.-W .+.....0000.-. .............. .............. Level: Spockl Too much little helpers Bricks: vvvvvvvvvvvvvv vvkkkvkkvkkkvv vk*kkk**kkk*kv vkk*k*kk*k*kkv vkkg*kggk*gkkv vk!!!!!!!!!!kv vk!!!*!!!!!!kv vk!!!!!!!*!!kv v*.!!!*!*!!.*v vk.*!!!**!!.kv vk..........kv vk!........!kv vk!........!kv vk!........!kv vk!........!kv vkkk......kkkv vkk*......*kkv vkkk......kkkv Bonus: l.....gg.....> >>>>>>>>>>>>>> *>>>>>>>>>>>>* *>>>>>>>>>>>>* >>.>..--..>.>> >>>>>>..>>>>>> >>..........>> >>..g.......>> >>.>..>5..>.>> >>..g-5g-g-.>> >>..........>> >>>........>>> >>>........>>> >>>........>>> >>..........>> >>>>......+++> +++>......>>>> g>>g......g>>> Level: Spockl Lemontree Bricks: @@gggggggggg@@ @gggggghggggg@ !!!!!.hdh.!!!! !!!..hhhhh..!! !!..hdh@dhh..! !...hhh@hhdh.! !..hhh@@hhh..! !...hh@@hhh..! !...dhh@@hhh.! z..hhhh@hhh..z z..hhh@*@dhh.z ..hhdh@*@hh..z z....h@*@h.... z.vv..@*@.vv.z z.....@*@....z .!....@*@...!@ zffff@@*@fffff @zfff@@*@fffzz Bonus: ..l.>>>>>..l.. ..>.w..l..c.{. 5.....!4.....5 5.....l.l....5 5...-4..4....5 g.......!.4-.g >....+.......> g....>...>...g >...4.....>!.> >..{.-..+....1 1...!-.f.w.{.! ..{{w..b..{..1 1....{.W.{.... !.WW...w..WW.1 1......w.....1 .-.....g....s. >0>00..w.0>>0> >>00...>..00>g Level: Spockl Nothing to meassure Bricks: gggggggggg!!!! !......!!..!!! !zzEEE.!!..@@@ !!!!!E.!!EEz!! @@@@!E!!!!Ez!! gggggE!!!!Ez!! !zzzEEzzzzzz!! !..!!!!!!!!E!! !..!@@@@@@!E!! !..!gggggggE!! !......EEEEE!! !!!!!!!!!!!!!! !!@@@!!!!!!!!! !!gggg!!@@@@!! !!!!EEE!ggggg! @!..zzE...!!!! @!..zzz...!!!! g!..zzz...!@@! Bonus: l...>g>..l.... ...........{.l .............. ..&>g......... .......>>..... w.....W..W...g .............. ...}..{..*...> >..f....j....g g..g+..wf.+... .............. ..{.-*.......+ .f.....}-..{.. g.>g>w.~....W~ !-.....W>g>bW} .W...........! .>........!bbb b+........+..w Level: Spockl Changing bathes Bricks: E!!!!!!!!!!!!! EEE!!!!!!!!!!! EggEEiiEEEvvv! .gggiiiEffvvE! .gggiiiEEEevEE .EEzEiiieeeeeE !EE.EiiiieeeeE !.E.EiiEzEeeeE !.E.EiiE.EeeeE !...EiiE.EeeeE !...EiiE.EeeeE !...EEz@.EeeeE !@.....E.EeeeE aE.......EeeeE aaE......Eeee@ bbbE.....@EzEE bbbbE........g c@cccE.......@ Bonus: .l.fg.ff.gfg.f ......g.g..... .ff..ff....*.j .00>-3l.>>.... .>0>-!3...f... ...w.33>>+5>l. .....33>>+!5>. g....>>.w.555. >....33...>>>. g....33...555. >....l3...555. g.....w...5f5. >.........555. d.........555. dd........l5+. ...........w.. >>>>.........* w.wdd......... Level: Spockl Administration-Office Bricks: vvvvvvvvvvvvvv vj..........jv vj.@@@....@@jv vj..........jv vjjjjjj..jjjjv @@@@@@@..@@@@@ @vvvvvvvvvvvv@ vvvvvvvvvvvvvv v..v..v..v..v. v..v..v..v..v. v..v..v..v..v. v..v..v..v..v. vjjvjjvjjvjjvj gjjgjjgjjgjjgj jjjjjjjjjjjjjj jjjjjjjjjjjjjj .............. .............. Bonus: ll...g..g...ll .?..........?. .?..........?. .?..........?. .?>>>>?..>>>?. .............. .>>>g>>>>>g>>. wW>w>jwj>w>>w> p..+..b..s..<. }..>..}..>..<. >..>..>..>..}. >..+..>..b..>. g+-g+-g+-g+-g+ w>{>{>w>{>{>w> >{>>>>>>>{>{>{ ?!?!?!?!?!?!?! .............. .............. Level: Spockl Finaly free and sane Bricks: iiiaiiaaiiiaia iaaaiaiaiaaaia iaaaiaiaiaaaia iiiaiiaaiiiaia iaaaiaiaiaaaia iaaaiaiaiaaaia iaaaiaiaiiiaia vvvvvvvvvvvvvv vvvvviiiivvvvv !!*EEiiiiEE*!! !*!!EiiiiE!!*! !!!!@iiii@!!!! *!!EiiiiiiE!!* @@!EiiiiiiE!@@ !!@@iiiiii@@!! @!!!iiiiii!!!@ !!!!ii..ii!!!! @EEEii..iiEEE@ Bonus: >>>.>>>.>>>... ....-.-.-..... ....-.-.-..... >>>.>>..>>>.>. g...!.g.g..... >...W.W.W...W. c...w.{.w!>.>. ......gg...... ....+>>>>+.... 55...*WW*...55 555..!!!!..555 555..>>>>..555 lll.>>>>>>.lll .....+..+..... .............. .............. ....g....g.... ....ww..ww.... Level: Spockl Depression again Bricks: @vvvvvvvvvvv@! vvvvvvvvvvvvv! vvvvvvvvvvvvv! vvvvvvvvvvvvv! vvvvvvvvvvvvv! .............. .............. .vEvEEvEzz.... .vEv!!vEgzvvv. .vEv!!vEzzvvv. .vE!EE!E...... .............. .............. vv.vvvvvvvvvv. vv.vvvvvvvvvv. vv...vvvvvvv.. vvvv.vvvvvvv.. @vv...vvvvvv.. Bonus: .lllllllllll.. 55555555555fW. ............W. .fffffffffffW. .+>>>+>>>+wwW. .............. .............. .>.{..j....... .>.p}}p.m>{>>. .>.*ww*.>.>>>. .w............ .............. .............. Wf.wf>>>>>---. Wf.>>>f!!f-lW. l>...>!!!!-g.. ----.------l.. .g>...>>>>>g.. Level: Spockl Yet back in madhouse Bricks: .EEE.E.E.E.E.E .E.E.E.E.E.E.E .E.E.E.E.E.E.E .EEE.E.E.E.E.E .E.E.EEE.EEE.E .E.E.E.E.E.E.. .E.E.E.E.E.E.. .E.E.E.E.E.E.E .............. EEEEEEEEEEEEEE Edvvvv..vvvvdE EdvvveeeevvvdE Eddddd..dddddE Eddddd..dddddE Eddddd..dddddE Eddddd..dddddE Eddddd..dddddE Eddddd..dddddE Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .l...l..l...l. .....g..g..... .....0..0..... .>>>>>..>>>>>. .ffff0..0ffff. .~~~~0..0~~~~. .00000..00000. .>w{>...>{>+>. Level: Spockl A last, peace Bricks: gggggggggggggg haaaaaaaaaaaah haaaaa##aaaaah haaaaa##aaaaah haaaaa##aaaaah haa########aah haaaggggggaaah haa########aah haaaaa##aaaaah haaaaa##aaaaah haaaaa##aaaaah haaaaa##aaaaah haaaaa##aaaaah haaaaa##aaaaah haaaaa##aaaaah haaaaa##aaaaah haaaaa##aaaaah haaaaaaaaaaaah Bonus: 55555555555555 .*j*....*..j*. .*j*....*..j*. .*j*....*..j*. jjjjjj..jjjjjj ..j........j.. ..j5>55555>j.. ..j........j.. ..jjjj..jjjj.. >>>>>j..j>>>>> }}}}>j..j>}}}} j...>j..j>...j .j**>j..j>**j. ..j*>j..j>*j.. ...j>j..j>j... ....jj..jj.... }....j..j....} gggg.w..w.gggg Level: Spockl The asscendation Bricks: ccccih!!hicccc ccccihddhicccc EchEihddhiEhcE ccEEihddhiEEcc EchEihddhiEhcE ccEEihddhiEEcc EchEihddhiEhcE ccEEihhhhiEEcc EchEiiiiiiEhcE ccEEEiiiiEEEcc EchhEEiiEEhhcE ccEhhEiiEhhEcc EcEEEEiiEEEEcE cccccciicccccc EcEEgEiiEgEEcE cchhgEiiEghhcc EcEhEEiiEEhEcE EEEEiiiiiiEEEE Bonus: mmmmmmmmmmmmmm ....c....c.... ..}........}.. gl..........lg .lm........ml. ml....>>....lm .mm...>>...mm. mm....>>....mm .m}.c.bb.c.}m. .m...mmmm...m. .m.}......}.m. mm..m.mm.m..mm .}....mm....}. mm.m.}..}.m.mm .m....++....m. wmmmm.++.mmmmw .m.}..gg..}.m. ....5www55.... Level: Spockl Is that heaven Bricks: gggggggggggggg !eeeeeeeeeeeeg !eggggggggggeg !egeeeeeeeegeg !egeggggggegeg !egegeeeegegeg !egegeggegegeg !egegegdegegeg !egegegdegegeg dddddddddddddd dddddddddddddd !egegegdegegeg !egegegdegegeg !egegeggggegeg !egegeeeeeegeg !egeggggggggeg !egeeeeeeeeeeg !egggggggggggg Bonus: l5l5l5l5l5l5l5 54444444444445 54333333333345 54344444444345 54343333334345 54343444434345 54343433434345 54343432434345 54343432434345 *4*4*4*2*3*3*5 54343432434345 54343432434345 54343432434345 54343433334345 54343444444345 54343333333345 5434+444444+45 54+wb}&cc&}bw+ Level: Spockl Borne again Bricks: !.....!....... ...........!.. .........!...! .!..!......... .............. .........!.... !.....!....... ..!.!......!.! ........!..... .............. !....!........ .............. ..!.....!..!.. .............. .............. ggg........... ggg........... ggg........... Bonus: g.....g....... ...........g.. .........g...g .g..g......... .............. .............. ......b....... ...........+.. ........b..... .............. .....+........ .............. .............. .............. .............. b.b........... ggg........... +++........... Level: Spockl Back in madhouse again Bricks: @@@@@@@@@@@@@@ @@vvvvzzvvvv@@ @vvzzv@@vzzvv@ @vzz.@@@@.zzv@ @vz........zv@ @vz........zv@ @vz..@hh@..zv@ @vz..@hh@..zv@ @vz..@hh@..zv@ @vz..@hh@..zv@ @vz..@hh@..zv@ @vz..@gg@..zv@ @vz..gggg..zv@ @vzggggggggzv@ @vzggggggggzv@ @vzz......zzv@ @vvz......zvv@ @@@@......@@@@ Bonus: .....mmmm..... .....-mm-..... .....-..-..... .............. .............. mb..........bm mb....ww....bm mb....}}....bm mb....>>....bm mb....>>....bm mb....{{....bm mb....gg....bm .....bbbb..... ..*b>>>>>>b*.. ...b++ww++b... .............. .............. .............. Level: Spockl Trainee conzentration Bricks: !************d !****.dz.**@.d !jjjjE...jj..d !jjjj...EjjE.d ..E......E...d !............d !............d !***h.zd.**@.d !hhhhE..Ehh..d ...E.....E...d !............d !..........*** !.iii.dz.**@zz !....E..E...zz !.Eggg..gg!Edd !........g!.** !ggggE...g!E** **E*E*...E*E** Bonus: .ffffffffffff{ {{>>>.g>.j>... !fllf....lf..> *fllf....lf... .............. .............. {............. !...>.{g...... *fff{....{f... .............. .............j ...........>>> ......gW.>>... ............ff {..-+g..+f}.f! !.........}.-- *.f.>....W}.ww --.-.-....-.>> Level: Spockl Lets Party Bricks: zzzzzzzzzzzzzz zzzzzzggggggg* zzzzzz******** zzzzzz*eeeeee* zgggzz*eeeeee* z**gzz*****E** zgggzz*ddddEd* zgggzz*ddddEd* zgggzz*****E** zgggzz*kkkkEk* zgggzz*kkkkEk* zgggzz*****E** zgggzz*jjjjEj* zzzzzz*jjjjEj* zzzzzz*****E** zzzzzzvvvvvEv* zzzzzzvvvvvEv* EEEEEEEEEEEEvv Bonus: .............. 5ll.lllllllll. 5bbbb5....!!!! 555.55bbbbbbb. 555.55bbbbbbb. 5bbbb5........ 555.55.>>>>... 555.55.!!!!... 5bbbb5........ 5ww.55..>>>.>. 5ww.ggggggg.g. 5}}}}}}}}}}.}} 5...ggggggg.g} 5...55.......} 5...wwwwwww.ww 5...5555555.>> 5...5555555.ww ............ww Level: Spockl Tirejacket Bricks: @@@@@@@@@@@@@@ @zzzzzzzzzzzz@ @zzzzzzzzzzzz@ @zzzzzzzzzzzz@ @zzzzzzzzzzzz@ ...........zzz .............z zz.zzzzzzzzz.z zz.zzz.zz.zz.z zz.zzz.zz.zz.z zz.zzz.zz.zz.z zz.zzz.zz.zz.z zz.zzz.zz.zz.z zz.zzz.zz.zz.z zz.zzz.zz.zz.z zz.zzz.zz.zz.z zz.zzz.zz.zz.z zz.zzz.zz.zz.z Bonus: .............. .llllllllllll. .............. .............. .f..f..f...... ...........f.. .............. ......f..f.... .............. .............. .............. .............. .............. .............. ff.ffg.gf.ff.f ff.>>g.g>.ff.f gg.ggg.gg.gg.g gg.ggg.gg.gg.g Level: Spockl Madness arround Bricks: EEEEEEEjjjj*** iiiiiiEjjjj*** iiiiiiEjjhj*** EiiiiiEjjhjE** EiiEEEEjjhjE** iiiiiiEjjhjE** iiiiiEEEjjjEEE Eddddddddddddd Edddd****ddddd Eddddddddddddd EEeeEEgEEeeEEg eeeeeEgEeeeeEg eeeEEEgEEEeeEg eeeEeEgeeEeeEg eeEeeegeeEeeEg eeeeeegEeEeeEg eeeeeEgEeeeeEg eEEEEEgEEEEEEg Bonus: .......4444444 l4444*......55 lj..w...W...55 ...g.W......5f .f.....g.wg.ll f.g......g..jl .............. ..f.-!.!-!.f.. ...~......~.f. .ff.!.f..f...f .............. +!.jf...f.j..+ ..f........... >f+...f.f..*.} !..!.gw}..!!.w w>*..}>.-....> >&..&.w...g&.w w.....>......> Level: Spockl Brain empty Bricks: ***********E** ***********E** ***********E** vvvvvvvvvEEE** vvvvvvvvvvvE** ***********E** @vvvvvvvvvvE** @vvvvvvvvvvE** @vvvvvvvvvvE** vvvvvvvvvvvE** ***********E** vvvvvvvvvvvE** vvvvvvvvvvEE** vvvvvvvvvvEE** ***********E** ************** ************** vv**********vv Bonus: l.>>.....l...l .g>>...>.gg.>> dddd.g.ddddg>> ....}.}.....>> ............{{ .>>>>dddd>>.>{ .....d......dd .....d......dd .....l......dd .....f......dd >>>>>>>>>>>.>> ...g.......... ..w......w.... dddd...ddddddd .-g-d-c-W-5->- ++->->->->->-> ++>->->->->->- .{-{-{-{-{-{-. Level: Spockl The end Bricks: !!!!!!!!!!!!!! !!!!!!gg!!!!!! !!!!!g!!g!!!!! !!!!!g!!g!!!!! !!!!!!!!g!!!!! !!!!!!!g!!!!!! !!!!!!!g!!!!!! !!!!!!g!!!!!!! !!!!!!g!!!!!!! !!!!!!!!!!!!!! !!!!!!g!!!!!!! !!!!!!g!!!!!!! !!!gg!!!!!!!!! !!!gg!!!!!!!!! !!!gg!!!!!!!!! !!!gg!!!!!!!!! .............. .............. Bonus: &>**********>& &***.*ll*.***& &....l..l....& &....l..l....& &.......l....& &......l.....& &......l.....& &.....l......& &***.*l.*..*.& &............& &&&&&&l&&&&&&& ..**..l..**... <..++<.<.<><}< <}}++<.<.<><}< gggggggggggggg ...++W+W+W+... .............. .............. Level: Spockl The real end Bricks: !!!!!!!!!!!!!! !............! !E!!!E!E!!!E!! !E!EEE!EEE!E!! !E!!!!!!!E!E!! !E!!!!!!!E!E!! !E!!!EEE!E!E!! !E!!!!!!!E!E!! !E!!!!E!!E!E!! !E!!!!E!!E!E!! !E!!!!E!!E!E!! !E!!!!E!!E!E!! !E!!!!E!!E!E!! !vvvvvvvvvvvv! !vvvvvvvvvvvv! !vvvvvvvvvvvv! !vvvvvvvvvvvv! !!!!!!!!!!!!!! Bonus: !.l..l..l.l..! .............. !.!l.....!..!! ..........!... !.!.........!! ..........!... g.g.........!g *.*..*.*..*..* g.g..g.g..g.!g .............. {.{}.}.}....!. ..g..!.!..g.}} *.**.{.}..*.!* *............s >W!!!!WWW!!!W> g............g !+>}+!!!+}{>+! wwwwwwwwwwwwww lbreakout2-2.6.5/client/levels/Biolab4280000664000175000017500000002660312140767201014651 00000000000000Version: 1.00 Level: n@body muahaha Bricks: .............. .............. ...E......E... ...EE....EE... ....E....E.... ....E....E.... ....E....E.... ....E....E.... .************. ...**aaaa**... ....**aa**.... .....****..... ......**...... .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: slayer seasons in the abyss Bricks: v.....vv.....v ......vv...... ..h..h..h..hh. .h.h.hh.hh.h.. .h.h.h..h...h. .............. ....vvvvvv.... ....v....v.... ...hh....hh... eeeeh....heeee v*ve......ev*v *v*e......e*v* v*ve......ev*v eeee......eeee e............e e............e e............e e............e Bonus: m.....pp.....* ......mm...... ..5..?..?..5*. .*.*.**.55.5.. .w.*.w..w...w. .............. .............. .............. ...ww....ww... &&bbw....wbb&& ...j......j... ...j......j... ...j......j... jjjj......jjjj j............j j............j j............j j............j Level: cant swim =-wave04!-= Bricks: ............*. .*.........*** ***.........*. .*....gggg..*. .*...ggggggg.. ....ggggggggg. ....gggg.*.gg. ...ggg...*..gg ...g...*****.g ..g...*..*...g ..g..***.*...g ......*..*...g ....*.*..*..gg ...***...*..gg ....*..*.*.ggg ....*.***ggggg .......*gggggg .......*gggggg Bonus: ............2. .2.........2l2 2l2.........2. .2....2222..2. .2...2222222.. ....222222222. ....2222.2.22. ...222...2..22 ...2...22222.2 ..2...2..2...2 ..2..222.2...2 ......2..2...2 ....2.2..2..2b ...222...b..2b ....2..2.2.2b2 ....2.b2b22222 .......222bb2b .......bbbbbbb Level: 1nfl2m3d colony Bricks: ************** *****!!!!***** *****!..!***** ****!!dd!!**** ***d..aa..d*** **d...aa...d** **....aa....** **d...aa...d** *d....dd....d* *.....aa.....* *d....aa....d* d.....aa.....d ......aa...... .............. .............. .............. .............. .............. Bonus: .............. ......l~...... .............. ......pp...... ......jj...... ......jj...... ......jj...... ......jj...... ......pp...... ......jj...... ......jj...... ......jj...... ......jj...... .............. .............. .............. .............. .............. Level: doc entering the laboratory Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvxxxxxvvvv vvvvvxvvvxvvvv vvvvvxvvvxvvvv vvvvvxvvvxvvvv vvvvvxvvvxvvvv vvvvvxvvvxvvvv vvvvvxvvvxvvvv vvvvvxevvxvvvv vvvvvxvvvxvvvv vvvvvxvvvxvvvv vvvvvxvvvxvvvv vvvvvxvvvxvvvv vvvvvxvvvxvvvv Bonus: .......5...... .1..........1. 101........101 .1..........1. .............. .....&&&&&.... .....&www&.... ....5&www&5... bbbbb!www!bbbb >>>>>>>>>>>>>> pppppppppppppp wwwwwwwwwwwwww 03333&&&&&3330 03333bbbbb3330 01111wwwww1110 05555ww!ww5550 00000w!!!w0000 jjjjjwbbbwjjjj Level: doc need some light Bricks: xxxxxxxxxxxxxx x............x x............x x.........cccx x.........cecx x.........c.cx x.........c.cx x.........cccx xxxxxxxxxxxxxx @EEEE@@#EEE@@@ @###EE@###E@@# @@@##E@@##EE## ************** ************** ************** aa**a*a*a**aaa ************** aaaaaaaaaaaaaa Bonus: ....llllll5555 .............. .............. .............. .............. .............. .............. .............. ......mm...... .............. .............. .............. m............m .............. .............. dddddddddddddd dddddddddddddd dddddddddddddd Level: doc teleport2mars Bricks: ......vv....d. ......c....d*d .....ccc....d. ...c.......... ..ccc...c..... .......ccc.... .............. vvvvvvvvvvvvvv ############## vvvvvvvvvvvvvv .....x........ ....x......... .g.xx*****.... aaa.x......... .a...x........ .a............ .a............ .a............ Bonus: ............5. ......g....555 .....ggg....5. ...g.......... ..ggg...g..... .......ggg.... .............. .............. .............. &&&&&&&&&&&&&& .............. .............. .m............ www........... .w............ .w............ .w............ .w............ Level: kern danger! Bricks: a.a.aaa.aa..a. aa..a...a.a.a. aa..aa..aa..aa a.a.a...a.a.aa a.a.aaa.a.a.a. ************** ..*.*.*.*.*.*. .!*!*!*!*!*!*! .!.!.!.!.!.!.! .!.!.!.!.!.!.! .!.!.!.!.!.!.! .!.!.!.!.!.!.! *.*.*.*.*.*.*. *.*.*.*.*.*.*. *.*.*.*.*.*.*. *.*.*.*.*.*.*. *.*.*.*.*.*.*. *.*.*.*.*.*.*. Bonus: .............. .............. .............. .............. l.l........... {{bbbbbbbbbbbb ..2.2.4.4.2.2. ..2.2.4.4.2.2. .............. .p.p.p.p.p.p.p .p.p.p.p.p.p.p .g.g.g.....m.. g.g.g.g.-.-.-. +.+.+.+.-.-.-. ........-...-. j.j.j.j....... j.+.j.+...+... j.j.j.j....... Level: {f(c)=0} formula Bricks: Ev..vvvvvv..vE EE#.vvvvvv.#EE ###vvv##vvv### vvvvvvvvvvvvvv EE..EEEEEE..EE @E..........E@ EE.@@.EE.@@.EE ev..........vj f############e ev...#vv#...vd d###.#vv#.###f hv.#..**..#.vg i#.#.*vv*.#.#h f#.#..**..#.#k g#..........#j i############i kh..******.ved ######**###### Bonus: .l..........l. .............. ....ww..ww.... wwwwbbbbbbwwww .............. .............. .............. .m..........m. .............. .m....bb....m. ......mm...... .m..........m. b.....55...... b............b b............b w............b wb..&wwww&.bbb ......ww...... Level: (S,T,d,K) turing Bricks: aaa.aa.aaa.aaa .a..a..a....a. .a..a..a....a. .a..a..a....a. .a..aa.aaa..a. .a..a....a..a. .a..a....a..a. .a..a....a..a. .a..aa.aaa..a. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: mmm.mm.mmm.mmm .m..m..m....m. .m..m..m....m. .m..m..m....m. .m..mm.mmm..m. .m..m....m..m. .m..m....m..m. .m..m....m..m. .w..ww.www..w. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Congratiolations clear Bricks: vvvvvvvvvvvvvv vvvvvvvvvvvvvv ..vvvvvvvvvv.. ..v........v.. vvvvvvvvvvvvvv .vv........vv. ..v........v.. .vvvvvvvvvvvv. vvvvvvvvvvvvvv vvvvvvvvvvvvvv .............. .............. vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv aaaaaaaaaaaaaa Bonus: .............. b............b .............. .............. .............. .b..........b. .............. ....b1111b.... .11111111111.. .11111111111.. .............. .............. *****5555***** *****5335***** *****5555***** ************** ************** wwwwwwwwwwwwww Level: best friend don't give up Bricks: ************** ************** ......gd...... ......gg...... aa..aa..xx..xx aa..aa..xx..xx ..dd......gg.. ..dd......gg.. aa..aa..xx..xx aa..aa..xx..xx ..hh..zz..!!.. ..hh..zz..!!.. aa..aa..xx..xx aa..aa..xx..xx ..bb......yy.. ..bb......yy.. aa..aa..xx..xx aa..aa..xx..xx Bonus: 55555555555555 222222bb222222 ......bb...... ......bb...... ww..........ww .............. ..**......&&.. ..**......&&.. .............. .............. ..ww..bb..ww.. ..ww..bb..ww.. .............. .............. .............. .............. .............. ww..pp..pp..ww Level: (google brokenlinks) secret found Bricks: vvvvvvv.v.**.. vvvvvvv..v.**. vvvvvvvv..v.** vvvvvvv..vv.** vvvvvv..vv.**. vvvvv..vv.**.. vvvvv.vv.**... vvv...v.**.... v....v.**..... ....v.**...... ..vv.**....... .vv.**........ vv.**......... v.**.......... .**........... **............ *............. .............. Bonus: bbb.......ww.. b.bb.c.....cw. b...b.......sw ..c.b........j ...lb......{*. bl.bb.....2*.. blbbb.4..2*... bwb...4.4<.... w....4.4<..... ....?.4<...... ...?..<....... ..?.*b........ .?.bb......... ...*.......... .*b........... }*............ b............. .............. Level: new blackholes Bricks: .............. .............. .v.........v.. .............. ...v..v....... .............. .............. .............. .............. ............v. ..v........... .............. .............. .............. .............. .............. .............. aaaaaaaaaaaaaa Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ************** Level: <-> Tiefighter Bricks: ..cEcEc..cc..c .c#EcEcc.cc.c# .##Ev#v#.EE.#E vvvvvvvvvvvvvv vvvvvvv.v.vvvv vvvvvvvvvvvvvv d.d.d.d.d.d.d. vdvdvdvdvdvdvd vvvvvvvvvvvvvv vgvgvgvgvgvgvg gvgvgvgvgvgvgv vvvvvvvvvvvvvv avavavavavavav vavavavavavavv vvvvvvvvvvvvvv vavavavavavava avavavavavavav .............. Bonus: ..4.444..44..4 .4444444.44.44 ...44.44.4..44 22224242222222 2222222.2.2222 44444444444444 4.4.4.4.4.4.4. 45454545422525 44442222242222 44442424242222 343430000b2232 00000000002202 252525b52b2222 525242b242b2bb 111141b1411111 bmbm414141bmbm 0b0b0b0b0b0b0b .............. Level: abstract new universe Bricks: ...!..!!..!... .!..........!. .............. !............! ......**...... ....*....*.... .............. .............. !..*..**..*..! !..*..**..*..! .............. .............. ....*....*.... ......**...... !............! .............. .!..........!. ...!..!!..!... Bonus: ...?..??..?... .?..........?. .............. ?............? .............. .............. .............. .............. w.....44.....w w.....44.....w .............. .............. .............. .............. w............w .............. .w..........w. ...w..ww..w... Level: journey con tiempre Bricks: ##.#.#.#..#..# ##.#.#.##.##.# .............. .............. .............. aa.aaa.a*a.a** a*.a*a.a*a.a** a*.a*a.a*a.a** *a.a*a.a*a.a** *a.a*a.a*a.a** aa.aaa.aaa.aaa .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. !!.!!!.!3!.!44 !2.!2!.!3!.!44 !2.!2!.!3!.!44 2!.!2!.!3!.!44 2!.!2!.!3!.!44 !!.!!!.!!!.!!! .............. .............. .............. .............. .............. .............. .............. Level: _ halfpipe Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. aaee......eeaa aavz......zvaa aavvz....zvvaa aavvvz..zvvvaa aavvvvzzvvvvaa Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. ..bb......bb.. 44bb......bb44 44wwb....bww44 ..wwwb..bwww.. ..wwwwbbwwww.. Level: bio snakes 2k38 Bricks: .............. .............. .............. .........zzzzz .......zzzxxxx ......zzxxxyyx ......zxxyyyyx zzzzzzxxyyzzyx zyyyyzzzzyzzyx zyxxxxxxzyzyyx zyxyyyyxyy.yxx yyxz..yxy..yyx yyxz..yxy..zyx xxxz..yxy..zyx zzzz.yyxy..zyx z....yxxy..zyx z....yyyy..zyy ...........zzz Bonus: .............. .............. .............. .........}}}}} .......}}}}}}} ......}}}55555 ......}}}55555 gggggggggggggg gggggggggggggg gppppppppppppp wppppppppp.ppp wwww..ppp..&&& wwww..bbb..&&& wwww..bbb..&&& wwww.bbbb..bbb }....}}}}..}}} w....bbbb..bbb ...........bbb Level: enjoy it dipheomorph Bricks: .............. .............. .............. .............. .............. ....dddggg.... ....dgdggg.... ....dgdggg.... ....ddddgg.... ....ggdddd.... ....ggddgd.... ....gggdgd.... ....gggddd.... .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. ....??????.... ....??????.... ....??????.... ....??55??.... ....??55??.... ....??????.... ....??????.... ....??????.... .............. .............. .............. .............. .............. lbreakout2-2.6.5/client/levels/JediAdventure0000664000175000017500000001440012140767201015744 00000000000000Version: 1.00 Level: G T.I.E. Fighter Bricks: .............. .............. d............d d............d d....iiii....d d..##....##..d d..#.g..g.#..d d.i.g#gg#g.i.d ddi..ghhg..idd ddi..ghhg..idd d.i.g#gg#g.i.d d..#.g..g.#..d d..##....##..d d....iiii....d d............d d............d .............. .............. Bonus: .............. .............. .............. .............. .....2222..... .............. .....3..3..... ..2.3.44.3.2.. ..2..4554..2.. ..2..4554..2.. ..2.3.44.3.2.. .....3..3..... .............. .....2222..... .............. .............. .............. .............. Level: G Asteroid Field Bricks: .............. .@.!.....@..!. .....@........ ........@..... .@..@......@.. .......!.....! ..!........... ..........!... ......@.....@. .!.......@.... ....@......... ......!....... ..@......@.... !...@......!.. .............@ ......@..!.... ..@........... ....!......... Bonus: ..555......555 ..555......555 ..555......555 .............. ......555...55 .555..555...55 .555..55555555 .555.....555.. 555......555.. 555........... 555..555...... .....555...... 55...555..555. 55........555. 55......55555. ........555... ...555..555... ...555........ Level: G Imperial Fleet Bricks: .....c........ ...ccc........ .cccccg....... .............. .............. .............. ........cc.... ......cccc.... ....ccccccg... .............. .............. ............c. ...cc.....ccc. .cccc...cccccg cccccg........ .............. .............. .............. Bonus: .....2........ ...222........ .22222f....... .............. .............. .............. ........22.... ......2222.... ....222222f... .............. .............. ............2. ...22.....222. .2222...22222f 22222f........ .............. .............. .............. Level: G Tractor Beam Bricks: .............. .......ha..... ......hhaa.... .....hh..aa... ....hh....a... ...hh.....a... hhhhhhhaaaaaaa hhhhhhhaaaaaaa ...hh.....a..a ....hh....a..a .....hh..aa..a ......hh.aa..a .......haa...a ........a....a .............a .............a .............a aaaaaaaaaaaaaa Bonus: .............. .......3...... ......33...... .....33....... ....33........ ...33......... 3333333....... 3333333....... ...33......... ....33........ .....33....... ......33...... .......3...... .............. .............. .............. .............. .............. Level: G Detention Block Bricks: #############. #aa#aa#aa#aa#. #..#..#..#..#. #..#..#..#..#. #..#..#..#..#. #..#..#..#..#. #############. .............. .!.!.!.!.!.!.. !.!.!.!.!.!.!. .............. #############. #..#..#..#..#. #..#..#..#..#. #..#..#..#..#. #..#..#..#..#. #aa#aa#aa#aa#. #############. Bonus: .............. .m......m..... .............. .............. .............. .............. .............. 5555555555>55. m.>.5.>.5.5.55 .5.>.5.5.5.5.5 >55555555>555> .............. .............. .............. .............. .............. .....m........ .............. Level: G Obi Wan Vs. Vader Bricks: ...........ggj ..........ggjj .........ggjjj ........ggjjjj .......ggjjjjc ......ggjjjjca .....ggjjjjcaa ....ggjjjjcaaa ...ggjjjjcaaaa ..ggjjjjcaaaad .ggjjjjcaaaadd ggjjjjcaaaadd. gjjjjcaaaadd.. jjjjcaaaadd... jjjcaaaadd.... jjcaaaadd..... jcaaaadd...... caaaadd....... Bonus: .............5 ............5. ...........5.5 ..........5.5. .........5.5.. ........5.5... .......5.5.... ......5.5...f. .....5.5...... ....5.5...f.W. ...5.5........ ..5.5...f.W... .5.5.......... 5.5...f.W..... .5............ 5...f.W....... .............. ..f.W......... Level: G Thru The Superstructure Bricks: ........j.j... #########.#### .............. !!!!!!!!!!!!!! .............. ##.########### .............. !!!!!!!!!!!!!! .............. ########.##### .............. !!!!!!!!!!!!!! .............. #####.######## .............. !!!!!!!!!!.... .............. #############. Bonus: ........l.l... .............. 55555555555555 .............. 55555555555555 .............. 55555555555555 .............. 55555555555555 .............. 55555555m55555 .............. 55555555555555 .............. 55555555555... ..........5... 55555555555... .............. Level: G Reactor Shot Bricks: .............. .............. .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... .....#.#...... ....#...#..... ...#..!..#.... ....#...#..... .....###...... Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .....5.5...... .....5.5...... .....l5l...... .............. Level: G Death Star Explodes Bricks: .............. ......**...... .....****..... ....******.... ...********... ..**********.. .************. .*****.******. .****...*****. .*****.******. .************. .************. .************. ..**********.. ...********... ....******.... .....****..... ......**...... Bonus: .............. .............. .............. .............. .............. ...55555555... ..5555555555.. ..5555.55555.. ..555...5555.. ..5555.55555.. ..5555555555.. ..5555555555.. ..5555555555.. ...55555555... ....555555.... .....5555..... .....j........ .............. Level: G Pursuing Vader's Fighter Bricks: .............. .............. .............. .............. .............. .............. .....c..c..... ....c....c.... ....c.cc.c.... ....cccccc.... ....c.cc.c.... ....c....c.... .....c..c..... .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .....{..{..... ....~....~.... ....W.>>.W.... ....ff>>ff.... ....W.>>.W.... ....~....~.... .....{..{..... .............. .............. .............. .............. .............. Level: G The End Bricks: vvvvvvvvvvvvv@ v***v*v*v***v@ vv*vv*v*v*vvv@ @v*vv***v***v@ @v*vv***v***v@ @v*vv*v*v*vvv@ @v*vv*v*v***v@ vvvvvvvvvvvvvv v***v**v*v***v v*vvv**v*vv*v* v***v*v**vv*v* v***v*v**vv*v* v*vvv*vv*vv*v* v***v*vv*v***v vvvvvvvvvvvvvv .............. .............. .............. Bonus: .fff>...>...>. .555.5f5.555.. >.5f.5f5f5ff.. ..5..555.555.. ..5.>555>555.. ..5f.5f5.5ff.. ..5..5f5.555f. >...>....>.... .555.55f5.555. .5ff.55f5..5f5 .555.5f55.f5f5 .555>5f55>.5f5 .5ff.5..5..5f5 .555.5..5.555. >.f.>..f.>...f .............. .............. .............. lbreakout2-2.6.5/client/levels/Wizi0000664000175000017500000001324512140767201014143 00000000000000Version: 1.00 Level: krzysiek Wizi Bricks: ************** ************** ************** !************! !!**********!! !!!***!!***!!! !!!!*!!!!*!!!! !!!!!!!!!!!!!! *!!!!!!!!!!!!* **!!!!!!!!!!** ***!!!**!!!*** ****!****!**** ************** ************** ************** ************** .............. .............. Bonus: .............. .............. .............. 5bbbbbbbbbbbb5 55bbbbbbbbbb55 555jjj55jjj555 5555j5555j5555 55555555555555 s555555555555s bw5555555555wb jjj555ll555jjj .............. .............. .............. gggggggggggggg ++++++++++++++ .............. .............. Level: krzysiek wIzi Bricks: .............. .............. xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx xxyyzzEEzzyyxx .............. .............. Bonus: .............. .............. ............*g .b.......&.... *...b......... ...........*.. .*...b........ ...b.........& ..*.....pb*... .............. b..*.p......b. .........*.p.. .&..*.....}... ...b.&..&..b&& ....&*..*...&& gw}wpw...wp}ww .............. .............. Level: krzysiek wiZi Bricks: .............. hhhhhhhhhhhhhh hhhhhhhhhhhhhh hhh@@@@@@@@hhh hhh@@@@@@@@hhh hhhhhhhhh@@hhh hhhhhhhh@@hhhh hhhhhhh@@hhhhh hhhhhh@@hhhhhh hhhhh@@hhhhhhh hhhh@@hhhhhhhh hhh@@hhhhhhhhh hhh@@@@@@@@hhh hhh@@@@@@@@hhh hhhhhhhhhhhhhh hhhhhhhhhhhhhh .............. .............. Bonus: .............. s............s 0..&&&&&&&&..0 0............0 0............0 0..bbbbbb....0 0..}}jws..w..0 0....jw..**..0 0....j..j....0 0..**..wj....0 0..w..swj}}..0 0....bbbbbb..0 0............0 0............0 0..g111111g..0 0............0 .............. .............. Level: krzysiek wizI Bricks: dddddddddddddd dddddddddddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd ddddddccdddddd dddddddddddddd dddddddddddddd Bonus: l...{{ll{{...l ....}cccc}.... ....{c!!c{.... ....}c--c}.... ....{c!!c{.... ....}c**c}.... ....{c!!c{.... ....}c>>c}.... ....{c!!c{.... ....}cssc}.... 0000{c!!c{0000 1111}cffc}1111 2222{c!!c{2222 3333}cmmc}3333 &b&b{c!!c{b&b& b&b&}c~~c}&b&b &b&b{cccc{b&b& b&b&}}ll}}&b&b Level: krzysiek green Bricks: .............. .............. .............. aaaaaaaaaaaaaa aaaaaaaaaaaaaa @bbb@b@b@@@@b@ @bbb@b@b@@@@b@ @ccc@c@cccc@c@ @c@c@c@ccc@cc@ @@@@@z@zz@zzz@ @@@@@z@z@zzzz@ y@@@yy@y@@@@y@ y@y@yy@y@@@@y@ xxxxxxxxxxxxxx xxxxxxxxxxxxxx .............. .............. .............. Bonus: .............. .............. .............. .............. .............. 15551.&.0000j& 15551.&.0000.& 1www1.&.5wl0.& 1m1m1.&.5w05.& 11111j&.50w5.& 11111.&.0lw5.& m111j.&.0000.& b1w1b*&*0000*& .....*.*....*. .....p.p....p. .............. .............. .............. Level: krzysiek parted Bricks: EEEEEEEEEEEEEE gggggggg@hhhh@ !ggggg!g@h!!h@ !!g!g!!g@h!!h@ !!!!!!!g@h!!h@ g!!!!!gg@h!!h@ gg!g!ggg@h!!h@ gggggggg@hhhh@ ############## @iiiiii@ffff@@ @i!!!!i@f!!f@@ @iii!!i@f!!f@@ @ii!!ii@f!!f@@ @i!!iii@f!!f@@ @i!!!!i@f!!f@@ @iiiiii@ffff@@ .............. .............. Bonus: .............. *l*l*l*l5~~~~5 fWWWWWfW5~ff~5 >>W>W>>W5~>>~5 >>>>>>>W5~ll~5 Wl>l>lWW5~>>~5 W*f*f*W*5~ll~5 *W*W*W*W5~~~~5 &&&&&&&&&&&&&& 5......5{{{{55 5......5{..{55 5.--...5{..{55 5.-mm-.5{mm{55 5.wwww.5{ww{55 5......5{..{55 5......5{{{{55 .............. .............. Level: krzysiek smoll -> big Bricks: ***!*!**!*!!!! EEE!E!EE!E!!!! EEE!E!EE!E!!!! hhhhhhhhhhhhhh *b*b*b*b*bbb*b *bbbbb*b**b**b **b*b**b*bbb*b hhhhhhhhhhhhhh @hhh@h@h@@@h@h @h@h@h@hh@@h@h @@@@@h@h@@hh@h h@h@hh@h@@@h@h hhhhhhhhhhhhhh .............. .............. .............. .............. .............. Bonus: m...j....m..ll .............. .............. .*.*.*.*...... ..c.c......... .............. .............. .............. .g.....g...... .j.j.g..j..... ..........j... w.w.wb.b...g.b ...g.........g .............. .............. .............. .............. .............. Level: krzysiek green W Bricks: cccccccccccccc bbbbbbbbbbbbbb aaaaaabbaaaaaa axxxxaaaaxxxxa xxyyxxxxxxyyxx xyzzyxyyxyzzyx xxyzyyzzyyzyxx axxyzyzzyzyxxa aaxxyzyyzyxxaa baaxxyxxyxxaab bbaaxxxxxxaabb cbbaaaaaaaabbc ccbbbbbbbbbbcc cccccccccccccc .............. .............. .............. .............. Bonus: 55555555555555 55555555555555 ......jj...... .............. ?...??????...? ?....j..j....? ?.!........!.? .....j..j..... ....b.bb.b.... ...ffbffbff... ....wwwwww.... g>>>>>>>>>>>>g ************** ++++++++++++++ .............. .............. .............. .............. Level: krzysiek All in one Bricks: ee..........ee ee...dddd...ee .ee..dffd..ee. .ee..dffd..ee. ..eegg!!ggee.. ..eegg!!ggee.. ...eee!!iee... ...eei!!eee... ....iiffii.... ....iiffii.... .....dddd..... .............. .............. .............. .............. .............. .............. .............. Bonus: >>..........>> >>...{{{{...>> .>>..{}}{..>>. .>>..{}}{..>>. ..>>ff44ff>>.. ..>>ff44ff>>.. ...>>>44p>>... ...>>p44pp>... ....pp}}pp.... ....pp}}pp.... .....{{{p..... .............. .............. .............. .............. .............. .............. .............. Level: krzysiek hiden W Bricks: vv**********vv vv**********vv vvvv**vv**vvvv vvvv**vv**vvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv vvvvvvvvvvvvvv **vvvvvvvvvv** **vvvvvvvvvv** ****vv**vv**** ****vv**vv**** ************** *z***z*z*zzz*z *z*z*z*z**zz*z *zzzzz*z*zz**z **z*z**z*zzz*z ************** .............. Bonus: 44555555555544 44555555555544 44445544554444 44445544554444 44444444444444 ************** www********www 5jw********wj5 55wwwwwwwwww55 5555wwllww5555 5555wwllww5555 55555555555555 5?555?5?5???5? 5?j?j?5?5j??5? 5?????5?5??j5? 55?j?55?5???5? 55555555555555 .............. lbreakout2-2.6.5/client/value.c0000664000175000017500000002236212140767214013270 00000000000000/*************************************************************************** value.c - description ------------------- begin : Sun Sep 23 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include "manager.h" /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Update val_str if not ITEM_VALUE ==================================================================== */ void value_update_str( Value *value ) { switch ( value->type ) { case VALUE_RANGE_INT: sprintf( value->val_str, "%i", *value->val_int ); break; case VALUE_RANGE_STR: sprintf( value->val_str, "%s", value->names[*value->val_int] ); break; case VALUE_KEY: if ( value->grab ) { strcpy( value->val_str, "???" ); break; } switch ( *value->val_int ) { case SDLK_SPACE: strcpy( value->val_str, _("Space") ); break; case SDLK_LEFT: strcpy( value->val_str, _("Left") ); break; case SDLK_RIGHT: strcpy( value->val_str, _("Right") ); break; case SDLK_UP: strcpy( value->val_str, _("Up") ); break; case SDLK_DOWN: strcpy( value->val_str, _("Down") ); break; case SDLK_RSHIFT: strcpy( value->val_str, _("Right Shift") ); break; case SDLK_LSHIFT: strcpy( value->val_str, _("Left Shift") ); break; case SDLK_RCTRL: strcpy( value->val_str, _("Right Ctrl") ); break; case SDLK_LCTRL: strcpy( value->val_str, _("Left Ctrl") ); break; case SDLK_RALT: strcpy( value->val_str, _("Right Alt") ); break; case SDLK_LALT: strcpy( value->val_str, _("Left Alt") ); break; case SDLK_BACKSPACE: strcpy( value->val_str, _("BackSpace") ); break; default: if ( *value->val_int >= SDLK_a && *value->val_int <= SDLK_z ) sprintf( value->val_str, "'%c'", (char)toupper( *value->val_int ) ); else sprintf( value->val_str, "%i", *value->val_int ); break; } break; } } /* ==================================================================== Create basic value ==================================================================== */ Value *value_create_basic( int type, int *val_int ) { Value *value = calloc( 1, sizeof( Value ) ); value->type = type; value->val_int = val_int; /* if not VALUE_EDIT create val_str which carries translated val_int */ if ( type != VALUE_EDIT ) value->val_str = calloc( 256, sizeof( char ) ); return value; } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Auxiliary functions to setup a key filter. ==================================================================== */ void filter_clear( int *filter ) { memset( filter, 0, sizeof( int ) * SDLK_LAST ); } void filter_set( int *filter, int first, int last, int allowed ) { int i; for ( i = first; i <= last; i++ ) filter[i] = allowed; } /* ==================================================================== Create a value. names and filter are duplicated and freed by value_delete(). Return Value: value ==================================================================== */ Value *value_create_empty() { return value_create_basic( VALUE_NONE, 0 ); } Value *value_create_range_int( int *val_int, int min, int max, int step ) { Value *value = value_create_basic( VALUE_RANGE_INT, val_int ); value->min = min; value->max = max; value->step = step; value_update_str( value ); return value; } Value *value_create_range_str( int *val_int, char **names, int count ) { int i; Value *value = value_create_basic( VALUE_RANGE_STR, val_int ); value->min = 0; value->max = count - 1; value->step = 1; /* duplicate names */ value->name_count = count; value->names = calloc( count, sizeof( char* ) ); for ( i = 0; i < count; i++ ) value->names[i] = strdup( names[i] ); value_update_str( value ); return value; } Value *value_create_key( int *val_int, int *filter ) { int i; Value *value = value_create_basic( VALUE_KEY, val_int ); /* duplicate filter */ value->filter = calloc( SDLK_LAST, sizeof( int ) ); for ( i = 0; i < SDLK_LAST; i++ ) value->filter[i] = filter[i]; value_update_str( value ); /* list of other key values */ value->other_keys = list_create( LIST_NO_AUTO_DELETE, LIST_NO_CALLBACK ); return value; } Value *value_create_edit( char *val_str, int limit ) { Value *value = value_create_basic( VALUE_EDIT, 0 ); value->val_str = val_str; value->max = limit; return value; } /* ==================================================================== Delete a value ==================================================================== */ void value_delete( Value *value ) { int i; if ( !value ) return; if ( value->filter ) free( value->filter ); if ( value->names ) { for ( i = 0; i < value->name_count; i++ ) if ( value->names[i] ) free( value->names[i] ); free( value->names ); } if ( value->type != VALUE_EDIT && value->val_str ) free( value->val_str ); if ( value->other_keys ) list_delete( value->other_keys ); free( value ); } /* ==================================================================== Increase, decrease if range. ==================================================================== */ void value_dec( Value *value ) { *value->val_int -= value->step; if ( *value->val_int < value->min ) *value->val_int = value->max; value_update_str( value ); } void value_inc( Value *value ) { *value->val_int += value->step; if ( *value->val_int > value->max ) *value->val_int = value->min; value_update_str( value ); } /* ==================================================================== Grab input of VALUE_KEY ==================================================================== */ void value_grab( Value *value ) { if ( value->type == VALUE_KEY ) { value->grab = 1; value_update_str( value ); } } /* ==================================================================== Set key value if VALUE_KEY and clear grab flag ==================================================================== */ void value_set_key( Value *value, int val_int ) { Value *other_key; if ( !value->filter[val_int] ) return; list_reset( value->other_keys ); while ( ( other_key = list_next( value->other_keys ) ) ) if ( *other_key->val_int == val_int ) return; /* ok, set */ *value->val_int = val_int; value->grab = 0; value_update_str( value ); } /* ==================================================================== Edit string if VALUE_EDIT ==================================================================== */ void value_edit( Value *value, int code, int unicode ) { int length = strlen( value->val_str ); if ( code == SDLK_BACKSPACE && length > 0 ) value->val_str[length - 1] = 0; else if ( unicode >= 32 && unicode < 128 && length < value->max ) value->val_str[length] = unicode; } /* ==================================================================== Add another dynamically restricted key (as VALUE_KEY) to other_key list. ==================================================================== */ void value_add_other_key( Value *value, Value *other_key ) { if ( value->type != VALUE_KEY ) return; list_add( value->other_keys, other_key ); } /* ==================================================================== Set a new name list (and update position) for VALUE_RANGE_STR. ==================================================================== */ void value_set_new_names( Value *value, char **names, int count ) { int i; if ( value->type != VALUE_RANGE_STR ) return; if ( value->names ) { for ( i = 0; i < value->name_count; i++ ) if ( value->names[i] ) free( value->names[i] ); free( value->names ); } value->name_count = count; value->max = count - 1; if ( *value->val_int > value->max ) *value->val_int = 0; value->names = calloc( count, sizeof( char* ) ); for ( i = 0; i < count; i++ ) value->names[i] = strdup( names[i] ); value_update_str( value ); } lbreakout2-2.6.5/client/display.c0000664000175000017500000001440412140767214013617 00000000000000/*************************************************************************** display.c - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "display.h" extern SDL_Surface *offscreen; extern SDL_Surface *stk_display; extern StkFont *display_font; extern StkFont *display_highlight_font; List *displays = 0; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Delete a display ==================================================================== */ void display_delete( void *ptr ) { Display *display = ptr; if ( display ) { stk_surface_free( &display->surf ); free( display ); } } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Add a display. The display is cleared by displays_clear() so the returned display is just a pointer. The contents of the display is 'text'+'value'. Both may be changed with the display_set_text/value() functions. 'digits' is the maxium size of 'value' ==================================================================== */ Display* displays_add( int x, int y, int w, int h, char *text, int value, int digits ) { Display *display = 0; if ( displays == 0 ) displays = list_create( LIST_AUTO_DELETE, display_delete ); display = calloc( 1, sizeof( Display ) ); if ( display == 0 ) return 0; if ( ( display->surf = stk_surface_create( SDL_SWSURFACE,w,h ) ) == 0 ) { free( display ); return 0; } SDL_SetColorKey( display->surf, 0, 0 ); display->use_alpha = 1; display->x = x; display->y = y; display->w = w; display->h = h; display->digits = digits; strcpy( display->text, text ); display->value = value; display->cur_value = value; list_add( displays, display ); return display; } /* ==================================================================== Remove all displays ==================================================================== */ void displays_clear() { if ( displays ) { list_delete( displays ); displays = 0; } } /* ==================================================================== Draw displays ==================================================================== */ void displays_hide() { Display *display; if ( displays == 0 ) return; list_reset( displays ); while ( ( display = list_next( displays ) ) ) { stk_surface_blit(offscreen, display->x, display->y, display->w, display->h, stk_display, display->x, display->y ); stk_display_store_drect(); } } void displays_show() { int i; char str[64], numstr[10]; StkFont *font; Display *display; if ( displays == 0 ) return; list_reset( displays ); display_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; display_highlight_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; while ( ( display = list_next( displays ) ) ) { if (display->is_highlighted) font = display_highlight_font; else font = display_font; strcpy( str, display->text ); if ( display->digits > 0 ) { sprintf( numstr, "%i", (int)display->cur_value ); for ( i = 0; i < display->digits - strlen( numstr ); i++ ) strcat( str, " " ); strcat( str, numstr ); } if ( display->use_alpha ) { stk_surface_alpha_blit( display->surf, 0,0, display->w, display->h, stk_display, display->x, display->y, 128 ); } stk_font_write( font, stk_display, display->x + 2, display->y + 1, -1, str ); } } /* ==================================================================== Update displays ==================================================================== */ void displays_update( int ms ) { float change; Display *display; if ( displays == 0 ) return; list_reset( displays ); while ( ( display = list_next( displays ) ) ) { if ( (int)display->cur_value == display->value ) continue; /* change relative as for big display->cur_values we must count faster */ change = ( display->value - display->cur_value ) / 200; if ( change > 0 && change < 0.6 ) change = 0.6; if ( change < 0 && change > -0.6 ) change = -0.6; display->cur_value += change * ms; if ( change > 0 && display->cur_value > display->value ) display->cur_value = display->value; if ( change < 0 && display->cur_value < display->value ) display->cur_value = display->value; } } /* ==================================================================== Modify display ==================================================================== */ void display_set_text( Display *display, char *text ) { strcpy( display->text, text ); } void display_set_value( Display *display, int value ) { display->value = value; } void display_set_value_directly( Display *display, int value ) { display->cur_value = value; /* no smooth approaching of the dest value */ display->value = value; } void display_set_highlight( Display *display, int on ) { display->is_highlighted = on; } lbreakout2-2.6.5/client/help.h0000664000175000017500000000263712140767214013114 00000000000000/*************************************************************************** item.h - description ------------------- begin : Sat Dec 15 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __HELP_H #define __HELP_H /* ==================================================================== Load/delete help resources. ==================================================================== */ void help_create(); void help_delete(); /* ==================================================================== Run help. ==================================================================== */ void help_run(); #endif lbreakout2-2.6.5/client/empty.hscr0000664000175000017500000000034512140767214014024 00000000000000>>>LBreakout2 ............ 10 300000 ............ 9 200000 ............ 8 150000 ............ 7 100000 ............ 6 70000 ............ 5 50000 ............ 4 40000 ............ 3 30000 ............ 2 20000 ............ 1 10000 lbreakout2-2.6.5/client/bricks.c0000664000175000017500000002765212140767214013440 00000000000000/*************************************************************************** bricks.c - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include "../game/game.h" #include "lbreakout.h" #include "shrapnells.h" #include "bricks.h" extern SDL_Surface *stk_display; extern SDL_Surface *offscreen; /* offscreen with bricks, background, frame */ extern SDL_Surface *bkgnd; /* background picture (includes frame) */ extern SDL_Surface *warp_pic; extern SDL_Surface *brick_pic; /* brick graphics in a horizontal order */ extern int shadow_size; extern SDL_Surface *brick_shadow; /* shadow mask */ extern int shine_x, shine_y, shine_recreate; #ifdef AUDIO_ENABLED extern StkSound *wav_boom; #endif extern Game *game; /* ==================================================================== Locals ==================================================================== */ /* remove a brick and release the extra (which will have no effect * on collection) update the graphics. no growth or explosions * of other bricks are initiated as these are send by network */ void client_brick_remove( int mx, int my, int type, Vector imp, Paddle *paddle, int no_sound ) { int px, py, w, h, i, j, shadow, anim_brick_id; int dir; /* add explosion animation */ if ( type == SHR_BY_EXPL_WITH_EXPL ) { exp_create( mx * BRICK_WIDTH + ( BRICK_WIDTH >> 1 ), my * BRICK_HEIGHT + ( BRICK_HEIGHT >> 1 ) ); #ifdef AUDIO_ENABLED if (!no_sound) stk_sound_play_x( mx * BRICK_WIDTH + ( BRICK_WIDTH >> 1 ), wav_boom ); #endif type = SHR_BY_EXPL; /* WITH_EXPL is not known */ } /* decrease brick count if no indestructible brick was destroyed */ if ( game->bricks[mx][my].dur != -1 ) { game->bricks_left--; /* adjust warp limit if this was a grown brick; then limit * has to decrease again */ if (IS_GROWN_BRICK_CHAR(game->bricks[mx][my].brick_c)) game->warp_limit--; } /* before removing the brick, store the brick id for animation */ anim_brick_id = game->bricks[mx][my].id; /* remove brick from map */ game->bricks[mx][my].brick_c = ' '; game->bricks[mx][my].id = -1; game->bricks[mx][my].dur = -1; game->bricks[mx][my].exp_time = -1; game->bricks[mx][my].heal_time = -1; game->bricks[mx][my].type = MAP_EMPTY; /* get screen position */ px = mx * BRICK_WIDTH; py = my * BRICK_HEIGHT; /* release extra if one exists. in opposite to the server the goldshower * 1000P is not released here but in the hit handle function if the gold_shower * flag is set to avoid releasing 'ghost' extras due to latency. */ dir = ( paddle->type == PADDLE_TOP ) ? -1 : 1; if ( game->bricks[mx][my].extra != EX_NONE ) { if ( game->diff->allow_maluses || !extra_is_malus( game->bricks[mx][my].extra ) ) list_add( game->extras, extra_create( game->bricks[mx][my].extra, px, py, dir ) ); } game->bricks[mx][my].extra = EX_NONE; game->bricks[mx][my].extra_c = ' '; /* in case of darkness no (graphical) remove nescessary */ if ( game->extra_active[EX_DARKNESS] ) { #ifdef AUDIO_ENABLED if (!no_sound) stk_sound_play_x( px, wav_boom ); #endif return; } shrapnells_create( brick_pic, anim_brick_id * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, px, py, type, imp ); /* recreate shine if needed */ if (px == shine_x && py == shine_y) shine_recreate = 1; /* clear offscreen */ w = BRICK_WIDTH + shadow_size; h = BRICK_HEIGHT + shadow_size; if ( px + w > stk_display->w - BRICK_WIDTH ) w = stk_display->w - BRICK_WIDTH - px; stk_surface_clip( offscreen, px, py, w, h ); stk_surface_blit( bkgnd, px, py, w, h, offscreen, px, py ); /* if shadow redraw close bricks */ for ( i = mx - 1; i <= mx + 1; i++ ) for ( j = my - 1; j <= my + 1; j++ ) { if ( i > 0 && j > 0 && i < MAP_WIDTH - 1 ) { if ( game->bricks[i][j].type != MAP_EMPTY ) { if ( i <= mx && j <= my ) shadow = 1; else shadow = 0; brick_draw( offscreen, i, j, shadow ); } } } stk_surface_clip( offscreen, 0, 0, 0, 0 ); /* update screen */ stk_surface_blit( offscreen, px, py, w, h, stk_display, px, py ); stk_display_store_drect(); #ifdef AUDIO_ENABLED if (!no_sound) stk_sound_play_x( px, wav_boom ); #endif } static void client_brick_heal( int x, int y ) { game->bricks[x][y].dur++; game->bricks[x][y].id++; if ( !game->extra_active[EX_DARKNESS] ) { brick_draw( offscreen, x, y, 0 ); brick_draw( stk_display, x, y, 0 ); stk_display_store_drect(); } } static void client_brick_grow( int x, int y, int id ) { Brick *brick = &game->bricks[x][y]; int px, py; int isReplace = 0; if (game->bricks[x][y].type!=MAP_EMPTY) isReplace = 1; /* add brick */ //brick->id = RANDOM( BRICK_GROW_FIRST, BRICK_GROW_LAST ); brick->id = id; brick->brick_c = brick_get_char( brick->id ); brick->type = MAP_BRICK; brick->score = game->diff->score_mod * BRICK_SCORE / 10; brick->dur = 1; /* keep the extra that is already assigned to this position */ brick->exp_time = -1; brick->heal_time = -1; /* XXX mark grown bricks by upper case. with this trick we can store * this information in the level snapshot. */ brick->brick_c -= 32; /* f->F, ... */ if (!isReplace) { game->bricks_left++; /* adjust warp limit (grown bricks don't help hitting limit) */ game->warp_limit++; } if ( !game->extra_active[EX_DARKNESS] ) { px = x * BRICK_WIDTH; py = y * BRICK_HEIGHT; if (isReplace) brick_draw( offscreen, x, y, 0 ); else brick_draw_complex( x, y, px, py ); stk_surface_blit( offscreen, px, py, BRICK_WIDTH + shadow_size, BRICK_HEIGHT + shadow_size, stk_display, px, py ); stk_display_store_drect(); } } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Draw all bricks to offscreen surface. ==================================================================== */ void bricks_draw() { int i, j; if ( offscreen == 0 ) return; stk_surface_clip( offscreen, 0, 0, stk_display->w - BRICK_WIDTH, stk_display->h ); for ( j = 1; j < MAP_HEIGHT - 1; j++ ) for ( i = 1; i < MAP_WIDTH - 1; i++ ) if ( game->bricks[i][j].id >= 0 ) brick_draw( offscreen, i, j, 1 ); stk_surface_clip( offscreen, 0,0,0,0 ); } /* ==================================================================== Draw brick to passed surface ==================================================================== */ void brick_draw( SDL_Surface *surf, int map_x, int map_y, int shadow ) { int x = map_x * BRICK_WIDTH, y = map_y * BRICK_HEIGHT; /* dont draw invisible bricks */ if ( game->bricks[map_x][map_y].id == INVIS_BRICK_ID ) return; /* add shadow */ if ( shadow ) { stk_surface_alpha_blit( brick_shadow, game->bricks[map_x][map_y].id * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, surf, x + shadow_size, y + shadow_size, SHADOW_ALPHA ); } /* brick if not frame brick */ if ( map_x == 0 || map_y == 0 || map_x == MAP_WIDTH - 1 ) return; stk_surface_blit( brick_pic, game->bricks[map_x][map_y].id * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, surf, x,y ); } /* ==================================================================== Add brick with clipped shadow to offscreen. To draw a brick without shadow check use brick_draw(). ==================================================================== */ void brick_draw_complex( int mx, int my, int px, int py ) { brick_draw( offscreen, mx, my, 1 ); /* redraw surrounding bricks */ stk_surface_clip( offscreen, px + shadow_size, py + shadow_size, BRICK_WIDTH, BRICK_HEIGHT ); if ( mx + 1 == MAP_WIDTH - 1 ) { /* right frame part */ stk_surface_blit( bkgnd, px + BRICK_WIDTH, py, BRICK_WIDTH, ( BRICK_HEIGHT << 1 ), offscreen, px + BRICK_WIDTH, py ); } else { brick_draw( offscreen, mx + 1, my, 0 ); brick_draw( offscreen, mx + 1, my + 1, 0 ); } if ( game->bricks[mx][my + 1].type != MAP_EMPTY ) brick_draw( offscreen, mx, my + 1, 0 ); stk_surface_clip( offscreen, 0, 0, 0, 0 ); } /* ==================================================================== Make brick at mx,my loose 'points' duration. It must have been previously checked that this operation is completely valid. It does not update net_bricks or the player's duration reference. ==================================================================== */ void client_brick_loose_dur( int mx, int my, int points ) { int px, py; int refresh_h, refresh_w; while ( points-- > 0 ) { game->bricks[mx][my].dur--; game->bricks[mx][my].id--; /* adjust brick character: * a,b,c - multiple hits * v - invisible */ if ( game->bricks[mx][my].brick_c == 'v' ) game->bricks[mx][my].brick_c = 'c'; else game->bricks[mx][my].brick_c--; /* successive order */ if ( !game->extra_active[EX_DARKNESS]) { px = mx * BRICK_WIDTH; py = my * BRICK_HEIGHT; refresh_w = BRICK_WIDTH+shadow_size; refresh_h = BRICK_HEIGHT+shadow_size; /* copy background as old brick may have different transparency do this in three parts to save computation */ stk_surface_blit( bkgnd, px, py, shadow_size, BRICK_HEIGHT, offscreen, px, py ); stk_surface_blit( bkgnd, px + shadow_size, py, BRICK_WIDTH - shadow_size, BRICK_HEIGHT + shadow_size, offscreen, px + shadow_size, py ); stk_surface_blit( bkgnd, px + BRICK_WIDTH, py + shadow_size, shadow_size, BRICK_HEIGHT, offscreen, px + BRICK_WIDTH, py + shadow_size ); /* draw brick + surrounding */ brick_draw_complex( mx, my, px, py ); /* udpate screen */ stk_surface_blit( offscreen, px, py, refresh_w, refresh_h, stk_display, px, py ); stk_display_store_drect(); } } } /* handle a received brick action */ void client_handle_brick_hit( BrickHit *hit ) { Paddle *paddle; Vector imp; paddle = (hit->paddle==PADDLE_BOTTOM)?game->paddles[PADDLE_BOTTOM]:game->paddles[PADDLE_TOP]; angle2vec( hit->degrees, &imp ); switch ( hit->type ) { case HT_HIT: client_brick_loose_dur( hit->x, hit->y, 1 ); break; case HT_REMOVE: if (hit->draw_explosion) hit->dest_type = SHR_BY_EXPL_WITH_EXPL; client_brick_remove( hit->x, hit->y, hit->dest_type, imp, paddle, hit->no_sound ); /* gold shower extra */ if ( hit->gold_shower ) list_add( game->extras, extra_create( EX_SCORE1000, hit->x*BRICK_WIDTH, hit->y*BRICK_HEIGHT, (hit->paddle==PADDLE_TOP)?-1:1 ) ); break; case HT_HEAL: client_brick_heal( hit->x, hit->y ); break; case HT_GROW: client_brick_grow( hit->x, hit->y, hit->brick_id ); break; } } /* redraw all bricks (leaving shadows in transparent frame parts) */ void client_redraw_all_bricks() { stk_surface_blit( bkgnd, BRICK_WIDTH, BRICK_HEIGHT, stk_display->w - BRICK_WIDTH*2,stk_display->h - BRICK_HEIGHT, offscreen, BRICK_WIDTH, BRICK_HEIGHT ); bricks_draw(); stk_surface_blit( offscreen, BRICK_WIDTH, BRICK_HEIGHT, stk_display->w - BRICK_WIDTH*2,stk_display->h - BRICK_HEIGHT, stk_display, BRICK_WIDTH, BRICK_HEIGHT ); // stk_display_update( STK_UPDATE_ALL ); stk_display_store_drect(); } lbreakout2-2.6.5/client/menu.h0000664000175000017500000001104012140767214013114 00000000000000/*************************************************************************** menu.h - description ------------------- begin : Thu Sep 20 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __MENU_H #define __MENU_H /* ==================================================================== Menu ==================================================================== */ enum { MENU_LAYOUT_CENTERED = 0 }; typedef struct _Menu { char *name; /* name of menu -- duplicated */ int layout; int x, y, w, h; /* layout */ List *items; /* list of menu items */ Item *cur_item; /* currently highlighted item */ struct _Menu *parent; /* parent menu */ StkFont *font, *hfont, *cfont; /* if not set the default fonts are used */ } Menu; /* ==================================================================== Create menu and center it in x,y,w,h by menu_adjust() later. ==================================================================== */ Menu *menu_create( char *name, int layout, int x, int y, int w, int h, int border, int add_to_list ); /* ==================================================================== Delete menu and all submenus starting with root menu ==================================================================== */ void menu_delete( void *menu ); /* ==================================================================== Add item to menu. Add item::menu to children list if ITEM_LINK. ==================================================================== */ void menu_add( Menu *menu, Item *item ); /* ==================================================================== Adjust position and size of all entries according to layout. ==================================================================== */ void menu_adjust( Menu *menu ); /* ==================================================================== Select menu: clear current item and set extern variable cur_menu ==================================================================== */ void menu_select( Menu *menu ); /* ==================================================================== Show/hide all items ==================================================================== */ void menu_hide( Menu *menu ); void menu_show( Menu *menu ); /* ==================================================================== modify items according to event (if any) and return action id. ==================================================================== */ int menu_handle_event( Menu *menu, SDL_Event *event ); /* ==================================================================== Update alpha of items ==================================================================== */ void menu_update( Menu *menu, int ms ); /* ==================================================================== Select/unselect item: update menu::cur_item und item::highlight ==================================================================== */ void menu_unselect_cur_item( Menu *menu ); void menu_select_item( Menu *menu, Item *item ); /* ==================================================================== Go one valid menu item up or down. ==================================================================== */ void menu_up( Menu *menu ); void menu_down( Menu *menu ); /* ==================================================================== Set fonts of menu and items. ==================================================================== */ void menu_set_fonts( Menu *menu, StkFont *cfont, StkFont *font, StkFont *hfont ); /* ==================================================================== Set background of menu and items. ==================================================================== */ void menu_set_bkgnd( Menu *menu, SDL_Surface *bkgnd ); #endif lbreakout2-2.6.5/client/manager.c0000664000175000017500000011463412140767214013572 00000000000000/*************************************************************************** manager.c - description ------------------- begin : Thu Sep 20 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "manager.h" #include "../game/game.h" #include "file.h" #include "chart.h" #include "event.h" #include "config.h" #include "../gui/stk.h" #include "theme.h" #include "slot.h" extern SDL_Surface *stk_display; extern Config config; extern List *menus; /* list of menus */ int menu_x = 54, menu_y = 220, menu_w = 256, menu_h = 256, menu_border = 16; /* default region where menu is displayed centered */ int cx = 384, cy = 220, cw = 256, ch = 200; /* center charts here */ Menu *cur_menu; /* current menu */ extern SDL_Surface *mbkgnd; /* menu background */ extern StkFont *mfont, *mhfont, *mcfont; /* font, highlight font, caption font */ int gap_height = 2; List *levelset_names = 0; /* all names in home & install directory */ char **levelset_names_home = 0; /* home directory sets */ int levelset_count_home = 0; char **levelset_names_local; /* non-network levelsets */ int levelset_count_local; char *edit_set = 0; /* selected set in editor menu */ extern int stk_quit_request; #ifdef AUDIO_ENABLED extern StkSound *wav_menu_click; extern StkSound *wav_menu_motion; #endif /* some items we need to know to assign name lists later */ Item *item_set, *item_theme, *item_resume_0; extern List *charts; int chart_id = 0; /* current chart displayed */ /* theme name list */ extern char **theme_names; extern int theme_count; /* hints */ #define HINT_ 0 #define HINT_QUIT _("There's nasty work out there waiting for you... better stay here!") #define HINT_ANIM _("If you turn animations low there'll be less details which will speed up the game a great deal.") #define HINT_TRP _("Enable/disable transparency of bonuses and animations.") #define HINT_SHADOW _("If you disable shadows it will speed up the game but won't look that good. ;-)") #define HINT_BONUS_INFO _("If this is enabled you'll see the time left for all bonuses and penalties at the right side of the screen.") #define HINT_DISPLAY _("You may run LBreakout2 either fullscreen or windowed. This switch may be done anywhere by pressing 'f'.") #define HINT_FPS _("You you don't want LBreakout2 to consume all of your CPU (best performance) limit the frame rate.") #define HINT_CONVEX _("As long as this option is enabled the paddle is treated as convex allowing easy aiming. If you "\ "disable this option the real physics will show up and you'll have to influence the ball by paddle movement "\ "and the hemispherical ends. For cracks only!") #define HINT_BALLLEVEL _("If you can't see the ball because of thousands of bonuses coming down set this option to 'Above Bonuses'") #define HINT_DEBRISLEVEL _("If you can't see the ball because of all the debris coming down set this option to 'Below Balls'") #define HINT_USEHINTS _("Enable/disable these quick hints. See the manual for more information about how to use LBreakout2!") #define HINT_KEYSPEED _("Adjust the paddle speed for movement by keys. (pixels per second)") #define HINT_PLAYERS _("These are the number of players and their names. If one player looses a ball or restarts the level it's the next player's turn.") #define HINT_DIFF _("KIDS:#Lives: 9 (max. 12)#Paddle Size: 252 (max. 396)#Ball Speed: 100-200#Bonus: -50% (no penalties, no bad speech)##"\ "EASY:#Lives: 6 (max. 9)#Paddle Size: 72 (max. 180)#Ball Speed: 240-400 pixels/sec#Bonus: -20%##"\ "MEDIUM:#Lives: 5 (max. 7)#Paddle Size: 54 (max. 144)#Ball Speed: 270-430 pixels/sec##"\ "HARD:#Lives: 4 (max. 5)#Paddle Size: 54 (max. 108)#Ball Speed: 300-450 pixels/sec#Bonus: +30%") #define HINT_START_LBR _("Play the original LBreakout2 levelset.") #define HINT_START_CUSTOM _("Play an additional levelset.") #define HINT_EDITOR_SET _("This is the list of the levelsets found in ~/.lgames/lbreakout2-levels which you may edit. If you "\ "choose and click on 'Edit Set' below you'll be asked to enter a levelsetname and the new levelset " \ "will be saved in a file by this name.") #define HINT_EDITOR_EDIT _("Click here to edit the levelset chosen above.##NOTE: To switch to the bonus set you'll have to right-click on the brick set and vice versa!") #define HINT_EDITOR_DELETE _("Click here to delete the chosen levelset (after confirmation).") #define HINT_KEYS _("If you use the keyboard for input these are the keys for moving the paddle ('Paddle Turbo' will double the speed while pressed.), firing balls/shots and returning the ball to paddle after a timeout of ten seconds.##Note: If balls are fired at a random angle (which has become the default) "\ "there is no difference between the left or right fire key. A sticky paddle stops a ball until "\ "any fire button is pressed but the movement angle is the one from the normal reflection. To "\ "reset the movement angle to -50 or +50 degrees check out 'Ball Fire Angle' in 'Advanced Options'.##"\ "While pressed, the 'Ball Turbo' will bring all balls to the maximum speed defined in 'Advanced Options'.") #define HINT_MOD _("This modifies the relative motion of the mouse. (percent) "\ "The higher this value is the faster the mouse moves.") #define HINT_INVERT _("If for some reason your mouse movement is inverted you can fix it with this option.") #define HINT_RETURN _("If a ball does not damage a brick within ten seconds it is allowed to return to the paddle. If this option is set "\ "to 'Auto' it will automatically return and if this option is set to 'By Click' you'll have to press the middle mouse"\ "button or the 'back'-key (default is Backspace).") #define HINT_APPLY _("Click here to apply the theme you selected above. Please check the manual at lgames.sf.net for information on how to " \ "create a theme.") #define HINT_HOST _("IP address of the game server as xxx.xxx.xxx.xxx.#DO NOT use 'localhost' if you run the server on your computer. You won't be able to challenge others. Use your IP queried by /sbin/ifconfig instead.") #define HINT_PORT _("Port the game server is bound to.") #define HINT_USERNAME _("If you're successfully connected to the game server this is your nickname there.") #define HINT_CONNECT _("Connect to game server.") #define HINT_LOCAL _("A local game with up to 4 alternating players.") #define HINT_NETWORK _("A two-player or deathmatch game via Internet or LAN.") char hint_levelset[1024]; /* information about version and author of selected levelset */ #define HINT_LEVELSET_APPENDIX _("This is the levelset you actually want to play. Note, that each levelset got it's own highscore chart (left/right-click on the chart on the right)." \ " A levelset is either load from ~/.lgames/lbreakout2-levels or the installation directory.") char hint_theme[512]; /* theme information */ #define HINT_THEME_APPENDIX _("This is the list of available themes. Choose any theme and click 'Apply' to select it") #define HINT_WARP_LIMIT _("After you destroyed this percentage of bricks you MAY warp to the next level by pressing 'w'. That is indicated by a small icon at the bottom right-hand side of the screen.#If you set this option to 0 you may instantly warp whereas 100 means you have to destroy all bricks.##"\ "Note, that this option does not apply for the levelsets 'Original' and 'LBreakout1'!") #define HINT_THEME _("In this menu you can change the appearance of LBreakout. Included to the release are the three winning themes from the Linux Game Tome contest 'absoluteB','Oz' and 'Moiree' along with the old graphics as theme 'Classic'.#For more themes check out http://lgames.sf.net.") #define HINT_CORNER _("Linear:#++ There is no chance for balls to get infinitely stuck in a brick bounce combo.#"\ "-- It is quite hard for balls to enter narrow passages.##Spherical:#"\ "++ Feels better and balls can easily pass through small gaps.#"\ "-- There is a chance for balls to get infinitely stuck within a series of indestructible "\ "brick reflections if the level is too wrinkled. However, with the auto return option this "\ "is no problem so 'Spherical' is the default.") #define HINT_LOCAL_PORT _("Network communication is handled by a single UDP socket which will be "\ "bound to this port number.") #define HINT_RANDOM_ANGLE _("If '50' the ball is shot at an angle of 50 degrees to the left or "\ "right, depending on which fire button has been pressed. If it is set to 'random' the "\ "ball is fired at a random angle. In this case a sticky paddle simply halts "\ "the normal reflection until any fire button has been pressed.") #define HINT_MAXBALLSPEED _("While you keep the middle mouse button pressed (or the acceleration key) "\ "all balls will go this velocity. (in pixels per second)") #define HINT_BONUS_LEVELS _("If on, normal levelsets will have a random bonus level every four normal levels.##"\ "Note: You can skip a bonus level any time by loosing the ball. This will not "\ "loose a life but bring you directly to the next level.") #define HINT_FREAKOUT _("Play *ALL* available levels in a random order.") #define HINT_LBREAKOUT1 _("The complete levelset of LBreakout1 with just minor modifications.") #define HINT_JUMPING_JACK _("There is only one brick with a limited lifetime. Your task is to hit "\ "it before it vanishes. If you succeed, the brick is reset somewhere else "\ "with less lifetime. If you don't, the game is over. The faster you hit "\ "a brick, the more score you will gain. How much seconds a brick is still "\ "there, you can see at the lower right-hand side of the screen.##"\ "Loosing your ball means going to the next level.##"\ "HAVE 'ACC. BALL SPEED' SET TO 900 IN 'ADVANCED OPTIONS AND "\ "MAKE EXCESSIVE USE OF YOUR MIDDLE MOUSE BUTTON! Otherwise you won't "\ "stand a chance as these levels require a lot of skill!") #define HINT_OUTBREAK _("Your task is to prevent an outbreak by clearing all bricks. Every few seconds "\ "a new one will appear somewhere, forcing you to act quickly. If you succeed "\ "in clearing a level, it is reset to five bricks, but this time new ones will "\ "spring into existence faster. You loose, if you cannot manage to clear the "\ "screen before 50 bricks were created (which does not mean 50 bricks are on "\ "the screen!). How far you are away from that limit you can see in the "\ "lower right-hand side of the screen. Score is only gained for a complete "\ "clearance, not for destroying single bricks! The farther you are way from "\ "the 50 bricks limit the more it will be.##"\ "Loosing your ball means going to the next level.##"\ "HAVE 'ACC. BALL SPEED' SET TO 900 IN 'ADVANCED OPTIONS AND "\ "MAKE EXCESSIVE USE OF YOUR MIDDLE MOUSE BUTTON! Otherwise you won't "\ "stand a chance as these levels require a lot of skill!") #define HINT_BARRIER _("This time you have to crush through a wall and hit some bricks behind it. "\ "If you succeed the wall is reset and one line bigger next time. The earlier "\ "you manage to break through, the more score you'll get. No surprise, is it? "\ "What makes this fun, is the fact that the wall is moving towards you. If it "\ "reaches your paddle, you are out. Whenever you successfully broke through, the "\ "ball will return the paddle and get attached. You then have to fire it again. "\ "The wall cannot grow bigger than 12 lines. How many lines the barrier is away from "\ "your paddle, is shown in the lower right-hand side of the screen.##"\ "Loosing your ball means going to the next level.##"\ "HAVE 'ACC. BALL SPEED' SET TO 900 IN 'ADVANCED OPTIONS AND "\ "MAKE EXCESSIVE USE OF YOUR MIDDLE MOUSE BUTTON! Otherwise you won't "\ "stand a chance as these levels require a lot of skill!") #define HINT_SITTING_DUCKS _("There are eight bricks and the ball is attached in the middle at the "\ "ceiling. When it is released, one brick is highlighted and your task "\ "is to hit this brick. If you manage to do so, you'll get some score "\ "and the situation is reset. If you do not hit the highlighted brick "\ "AS THE VERY FIRST THING, it will be destroyed until all bricks are gone. "\ "The more bricks you hit in a row, the more score you will get for the next "\ "one. The score's worth of the next brick you can see in the lower right-hand "\ "side of the screen.##"\ "Loosing your ball means going to the next level.") #define HINT_HUNTER _("Your task is to hunt down bricks by moving a chaos brick indirectly. Therefore "\ "each side of the playing field has a brick color and you can hit small pads bearing these colors. "\ "When you hit one, the chaos brick will move toward the appropriate side. You must not hit "\ "the bordering bricks and you must get to the brick within a time limit, as always "\ "displayed in the lower right-hand side of the screen. The faster you are, the more score "\ "you'll gain.##"\ "Loosing your ball means going to the next level.##"\ "HAVE 'ACC. BALL SPEED' SET TO 900 IN 'ADVANCED OPTIONS AND "\ "MAKE EXCESSIVE USE OF YOUR MIDDLE MOUSE BUTTON! Otherwise you won't "\ "stand a chance as these levels require a lot of skill!") #define HINT_DEFENDER _("Stop the invading brick waves! Each waves consists of 50 bricks which will get "\ "faster and faster. Each brick will give you some score. If you clear the screen completely, "\ "the wave will also be over and you will receive some extra score depending on the number of remaining wave bricks. "\ "One way or the other, if a wave is over, the next one will start with higher speed and more score until you let "\ "a brick come down to paddle level.##"\ "Loosing your ball means going to the next level.##"\ "HAVE 'ACC. BALL SPEED' SET TO 900 IN 'ADVANCED OPTIONS AND "\ "MAKE EXCESSIVE USE OF YOUR MIDDLE MOUSE BUTTON! Otherwise you won't "\ "stand a chance as these levels require a lot of skill!") /* ==================================================================== Levelset names functions. ==================================================================== */ /* ==================================================================== Check if this levelset's name declare it as network set. ==================================================================== */ int levelset_is_network( char *name ) { if ( name == 0 ) return 0; if ( name[0] == '~' ) name++; if ( name[0] == 'N' && name[1] == '_' ) return 1; return 0; } /* ==================================================================== Get/delete list of all valid levelsets in data directory or ~/.lbreakout/levels. ==================================================================== */ void levelsets_delete_names() { if ( levelset_names ) { list_delete( levelset_names ); levelset_names = 0; } if ( levelset_names_home ) { free( levelset_names_home ); levelset_names_home = 0; } if ( levelset_names_local ) { free( levelset_names_local ); levelset_names_local = 0; } } void levelsets_load_names() { Text *text = 0; char level_dir[512]; char file_name[64]; char *name; int default_set_count = 8; char *default_sets[] = { "LBreakout1", TOURNAMENT, _("!JUMPING_JACK!"), _("!OUTBREAK!"), _("!BARRIER!"), _("!SITTING_DUCKS!"), _("!HUNTER!"), _("!INVADERS!") }; int i, j; /* clear previous lists */ levelsets_delete_names(); /* gather all names in install&home directory to levelset_names */ levelset_names = list_create( LIST_AUTO_DELETE, LIST_NO_CALLBACK ); /* parse install directory */ sprintf( level_dir, "%s/levels", SRC_DIR ); if ( ( text = get_file_list( level_dir, 0, level_dir ) ) ) { for ( i = 0; i < text->count; i++ ) { /* filter stuff */ if ( text->lines[i][0] == '*' ) continue; if ( strequal( text->lines[i], "Makefile.am" ) ) continue; if ( strequal( text->lines[i], "Makefile.in" ) ) continue; if ( strequal( text->lines[i], "Makefile" ) ) continue; /* default sets */ if ( strequal( text->lines[i], "LBreakout2" ) ) continue; if ( strequal( text->lines[i], "LBreakout1" ) ) continue; /* obsolete sets */ if ( strequal( text->lines[i], "Original" ) ) continue; if ( strequal( text->lines[i], "AddOn-1" ) ) continue; if ( strequal( text->lines[i], "AddOn-2" ) ) continue; /* default sets are at the beginning of the list thus ignored here */ for ( j = 0; j < default_set_count; j++ ) if ( STRCMP( default_sets[j], text->lines[i] ) ) continue; /* add */ list_add( levelset_names, strdup( text->lines[i] ) ); } delete_text( text ); } /* parse home directory */ snprintf( level_dir, sizeof(level_dir)-1, "%s/%s/lbreakout2-levels", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME ); if ( ( text = get_file_list( level_dir, 0, level_dir ) ) ) { for ( i = 0; i < text->count; i++ ) { /* filter stuff */ if ( text->lines[i][0] == '*' ) continue; /* add */ sprintf( file_name, "~%s", text->lines[i] ); list_add( levelset_names, strdup( file_name ) ); } delete_text( text ); } /* create static home list */ list_reset( levelset_names ); levelset_count_home = 1; while ( ( name = list_next( levelset_names ) ) ) if ( name[0] == '~' ) levelset_count_home++; levelset_names_home = calloc( levelset_count_home, sizeof( char* ) ); list_reset( levelset_names ); i = 1; while ( ( name = list_next( levelset_names ) ) ) if ( name[0] == '~' ) levelset_names_home[i++] = name + 1; levelset_names_home[0] = NEW_SET; /* create static local set list */ list_reset( levelset_names ); levelset_count_local = default_set_count; while ( ( name = list_next( levelset_names ) ) ) if ( !levelset_is_network( name ) ) levelset_count_local++; levelset_names_local = calloc( levelset_count_local, sizeof( char* ) ); list_reset( levelset_names ); i = default_set_count; while ( ( name = list_next( levelset_names ) ) ) if ( !levelset_is_network( name ) ) levelset_names_local[i++] = name; /* default names */ for ( i = 0; i < default_set_count; i++ ) levelset_names_local[i] = default_sets[i]; /* adjust config */ if ( config.levelset_count_home != levelset_count_home ) { config.levelset_id_home = 0; config.levelset_count_home = levelset_count_home; } } /* ==================================================================== Callbacks of menu items. ==================================================================== */ /* Disable/enable sound */ void cb_sound() { #ifdef AUDIO_ENABLED stk_audio_enable_sound( config.sound ); #endif } /* set volume */ void cb_volume() { #ifdef AUDIO_ENABLED stk_audio_set_sound_volume( config.volume * 16 ); #endif } /* toggle fullscreen */ void cb_fullscreen() { manager_show(); } /* delete set */ void cb_delete_set() { char fname[512]; /* do not delete file */ if ( strequal( NEW_SET, levelset_names_home[config.levelset_id_home] ) ) { printf( _("You cannot delete '%s'!\n"),NEW_SET ); return; } /* get file name + path */ snprintf( fname, sizeof(fname)-1,"%s/%s/lbreakout2-levels/%s", getenv( "HOME" ), CONFIG_DIR_NAME, levelset_names_home[config.levelset_id_home] ); remove( fname ); levelsets_load_names(); /* reinit name lists and configs indices */ /* reassign these name lists as position in memory has changed */ value_set_new_names( item_set->value, levelset_names_home, levelset_count_home ); } /* adjust set list */ void cb_adjust_set_list() { /* reinit name lists and configs indices */ levelsets_load_names(); /* reassign these name lists as position in memory has changed */ value_set_new_names( item_set->value, levelset_names_home, levelset_count_home ); } /* set key speed from i_key_speed */ void cb_set_keyspeed() { config.key_speed = 0.001 * config.i_key_speed; } /* if hints where disabled hide actual hint */ void cb_hints() { if ( !config.use_hints ) hint_set( 0 ); } /* change theme */ void cb_change_theme() { Menu *menu; theme_load( theme_names[config.theme_id] ); hint_set_bkgnd( mbkgnd ); /* apply the new background to all items */ list_reset( menus ); while ( ( menu = list_next( menus ) ) ) { menu_set_bkgnd( menu, mbkgnd ); menu_set_fonts( menu, mcfont, mfont, mhfont ); } stk_surface_blit( mbkgnd, 0,0,-1,-1, stk_display, 0,0 ); stk_display_update( STK_UPDATE_ALL ); } /* update hint of theme by feeding it with the ABOUT file */ void cb_update_theme_hint() { theme_get_info( theme_names[config.theme_id], hint_theme, 255 ); strcat( hint_theme, "##" ); strcat( hint_theme, HINT_THEME_APPENDIX ); hint_set_contents( item_theme->hint, hint_theme ); hint_set( item_theme->hint ); /* redraw the hint */ } /* update config::motion_mod */ void cb_set_motion_mod() { config.motion_mod = 0.01 * config.i_motion_mod; } /* update pointer edit_set which is the name of the selected set in editor menu */ void cb_update_edit_set() { edit_set = levelset_names_home[config.levelset_id_home]; } void cb_maxballspeed() { config.maxballspeed_float = (float)config.maxballspeed_int1000/ 1000; } /* ==================================================================== Load/delete background and create and link all menus ==================================================================== */ void manager_create() { int i, j; Item *keys[7]; Item *item; int filter[SDLK_LAST]; /* key filter */ /* constant contence of switches */ char *str_fps[] = { _("No Limit"), _("100 FPS") }; char *str_anim[] = { _("Off"), _("Low"), _("Medium"), _("High") }; char *str_diff[] = { _("Kids"), _("Easy"), _("Medium"), _("Hard") }; /* main: new game: start game quick help --- levelset difficulty --- active players --- player1 player2 player3 player4 controls graphics animations transparency shadow --- display constant frame rate audio: sound volume advanced options: convex paddle ball level key speed editor: set: (list) edit delete yes no --- create empty set set name: (string) create set yes no --- quit */ Menu *_main = 0; #ifdef _1 Menu *options = 0; #endif #ifdef AUDIO_ENABLED Menu *audio = 0; #endif Menu *gfx = 0; Menu *game = 0; Menu *cont = 0; Menu *adv = 0; Menu *editor = 0; Menu *confirm_delete = 0; Menu *theme = 0; /* load levelset names */ levelsets_load_names(); cb_update_edit_set(); /* hints will be displayed on menu background */ hint_set_bkgnd( mbkgnd ); /* setup filter */ filter_clear( filter ); filter_set( filter, SDLK_a, SDLK_z, 1 ); filter[SDLK_BACKSPACE] = 1; filter[SDLK_SPACE] = 1; filter[SDLK_RSHIFT] = 1; filter[SDLK_LSHIFT] = 1; filter[SDLK_LALT] = 1; filter[SDLK_RALT] = 1; filter[SDLK_LCTRL] = 1; filter[SDLK_RCTRL] = 1; filter[SDLK_UP] = 1; filter[SDLK_DOWN] = 1; filter[SDLK_LEFT] = 1; filter[SDLK_RIGHT] = 1; filter[SDLK_q] = 0; filter[SDLK_p] = 0; filter[SDLK_f] = 0; filter[SDLK_s] = 0; filter[SDLK_a] = 0; filter[SDLK_r] = 0; filter[SDLK_h] = 0; filter[SDLK_d] = 0; /* menus are added to this list for deleting later */ menus = list_create( LIST_AUTO_DELETE, menu_delete ); /* create menus */ _main = menu_create( _("Menu"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); #ifdef _1 options = menu_create( _("Options"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); #endif gfx = menu_create( _("Graphics"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); game = menu_create( _("Local Game"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); cont = menu_create( _("Controls"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); adv = menu_create( _("Advanced Options"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); #ifdef AUDIO_ENABLED audio = menu_create( _("Audio"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); #endif editor = menu_create( _("Editor"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); confirm_delete = menu_create( _("Delete Set"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); theme = menu_create( _("Select Theme"), MENU_LAYOUT_CENTERED, menu_x, menu_y, menu_w, menu_h, menu_border, 1 ); /* create items */ /* main menu */ menu_add( _main, item_create_link ( _("Local Game"), HINT_LOCAL, game ) ); #ifdef NETWORK_ENABLED menu_add( _main, item_create_action ( _("Network Game"), HINT_NETWORK, ACTION_CLIENT ) ); #endif menu_add( _main, item_create_action ( _("Quick Help"), HINT_, ACTION_QUICK_HELP ) ); // menu_add( _main, item_create_link ( _("Select Theme"), HINT_THEME, theme ) ); menu_add( _main, item_create_separator ( "" ) ); #ifdef _1 menu_add( _main, item_create_link ( _("Options"), options ) ); #endif menu_add( _main, item_create_link ( _("Controls"), HINT_, cont ) ); menu_add( _main, item_create_link ( _("Graphics"), HINT_, gfx ) ); #ifdef AUDIO_ENABLED menu_add( _main, item_create_link ( _("Audio"), HINT_,audio ) ); #else menu_add( _main, item_create_separator ( _("Audio") ) ); #endif menu_add( _main, item_create_link ( _("Advanced Options"), HINT_, adv ) ); menu_add( _main, item_create_separator ( "" ) ); menu_add( _main, item_create_link ( _("Editor"), HINT_, editor ) ); menu_add( _main, item_create_separator ( "" ) ); menu_add( _main, item_create_action ( _("Quit"), HINT_QUIT, ACTION_QUIT ) ); #ifdef _1 /* options */ menu_add( options, item_create_link( _("Controls"), HINT_, cont ) ); menu_add( options, item_create_link( _("Graphics"), HINT_, gfx ) ); menu_add( options, item_create_link( _("Audio"), HINT_, audio ) ); menu_add( options, item_create_separator( _("Audio") ) ); menu_add( options, item_create_separator( "" ) ); menu_add( options, item_create_link( _("Back"), _main ) ); #endif /* audio */ #ifdef AUDIO_ENABLED item = item_create_switch( _("Sound:"), HINT_, &config.sound, _("Off"), _("On") ); item->callback = cb_sound; menu_add( audio, item ); menu_add( audio, item_create_switch( _("Speech:"), HINT_, &config.speech, _("Off"), _("On") ) ); item = item_create_range( _("Volume:"), HINT_, &config.volume, 1, 8, 1 ); item->callback = cb_volume; menu_add( audio, item ); menu_add( audio, item_create_separator( "" ) ); menu_add( audio, item_create_link( _("Back"), HINT_, _main ) ); #endif /* gfx */ menu_add( gfx, item_create_switch_x( _("Animations:"), HINT_ANIM, &config.anim, str_anim, 4 ) ); menu_add( gfx, item_create_switch( _("Bonus Info:"), HINT_BONUS_INFO, &config.bonus_info, _("Off"), _("On") ) ); menu_add( gfx, item_create_separator( "" ) ); item = item_create_switch( _("Display:"), HINT_DISPLAY, &config.fullscreen, _("Window"), _("Fullscreen") ); item->callback = cb_fullscreen; menu_add( gfx, item ); menu_add( gfx, item_create_switch_x( _("Frame Rate:"), HINT_FPS, &config.fps, str_fps, 2 ) ); menu_add( gfx, item_create_separator( "" ) ); menu_add( gfx, item_create_link( _("Select Theme"), HINT_THEME, theme ) ); menu_add( gfx, item_create_separator( "" ) ); menu_add( gfx, item_create_link( _("Back"), HINT_, _main ) ); /* game */ item_resume_0 = item_create_action( _("Resume Last Game"), "???", ACTION_RESUME_0 ); menu_add( game, item_resume_0 ); slot_update_hint( 0, item_resume_0->hint ); menu_add( game, item_create_action( _("Start Original Set"), HINT_START_LBR, ACTION_PLAY_LBR ) ); menu_add( game, item_create_action( _("Start AddOn"), HINT_START_CUSTOM, ACTION_PLAY_CUSTOM ) ); menu_add( game, item_create_separator( "" ) ); menu_add( game, item_create_switch_x( _("Difficulty:"), HINT_DIFF, &config.diff, str_diff, DIFF_COUNT ) ); menu_add( game, item_create_separator( "" ) ); menu_add( game, item_create_range( _("Players:"), HINT_PLAYERS, &config.player_count, 1, 4, 1 ) ); menu_add( game, item_create_edit( _("1st:"), HINT_PLAYERS, config.player_names[0], 12 ) ); menu_add( game, item_create_edit( _("2nd:"), HINT_PLAYERS, config.player_names[1], 12 ) ); menu_add( game, item_create_edit( _("3rd:"), HINT_PLAYERS, config.player_names[2], 12 ) ); menu_add( game, item_create_edit( _("4th:"), HINT_PLAYERS, config.player_names[3], 12 ) ); menu_add( game, item_create_separator( "" ) ); menu_add( game, item_create_link( _("Back"), HINT_, _main ) ); /* controls */ keys[0] = item_create_key( _("Left:"), HINT_KEYS, &config.k_left, filter ); keys[1] = item_create_key( _("Right:"), HINT_KEYS, &config.k_right, filter ); keys[2] = item_create_key( _("Left Fire:"), HINT_KEYS, &config.k_lfire, filter ); keys[3] = item_create_key( _("Right Fire:"), HINT_KEYS, &config.k_rfire, filter ); keys[4] = item_create_key( _("Paddle Turbo:"), HINT_KEYS, &config.k_turbo, filter ); keys[5] = item_create_key( _("Ball Turbo:"), HINT_KEYS, &config.k_maxballspeed, filter ); keys[6] = item_create_key( _("Return:"), HINT_KEYS, &config.k_return, filter ); // keys[6] = item_create_key( _("Warp:"), HINT_KEYS, &config.k_warp, filter ); for ( i = 0; i < 7; i++ ) menu_add( cont, keys[i] ); /* dynamic restriction */ for ( i = 0; i < 7; i++ ) for ( j = 0; j < 7; j++ ) if ( j != i ) value_add_other_key( keys[i]->value, keys[j]->value ); /* other control stuff */ menu_add( cont, item_create_separator( "" ) ); item = item_create_range( _("Key Speed:"), HINT_KEYSPEED, &config.i_key_speed, 100, 1000, 50 ); item->callback = cb_set_keyspeed; menu_add( cont, item ); item = item_create_range( _("Motion Modifier:"), HINT_MOD, &config.i_motion_mod, 40, 160, 5 ); item->callback = cb_set_motion_mod; menu_add( cont, item ); menu_add( cont, item_create_switch( _("Invert Motion:"), HINT_INVERT, &config.invert, _("Off"), _("On") ) ); menu_add( cont, item_create_separator( "" ) ); menu_add( cont, item_create_link( _("Back"), HINT_, _main ) ); /* advanced options */ menu_add( adv, item_create_switch( _("Convex Paddle:"), HINT_CONVEX, &config.convex, _("Off"), _("On") ) ); //menu_add( adv, item_create_switch( _("Corner:"), HINT_CORNER, &config.linear_corner, _("Spherical"), _("Linear") ) ); menu_add( adv, item_create_switch( _("Ball Fire Angle:"), HINT_RANDOM_ANGLE, &config.random_angle, "50", _("Random") ) ); menu_add( adv, item_create_switch( _("Balls:"), HINT_BALLLEVEL, &config.ball_level, _("Below Bonuses"), _("Above Bonuses") ) ); menu_add( adv, item_create_switch( _("Debris:"), HINT_DEBRISLEVEL, &config.debris_level, _("Below Balls"), _("Above Balls") ) ); menu_add( adv, item_create_switch( _("Return Balls:"), HINT_RETURN, &config.return_on_click, _("Auto"), _("By Click") ) ); item = item_create_switch( _("Use Hints:"), HINT_USEHINTS, &config.use_hints, _("Off"), _("On") ); item->callback = cb_hints; menu_add( adv, item ); menu_add( adv, item_create_range( _("Warp Limit:"), HINT_WARP_LIMIT, &config.rel_warp_limit, 0, 100, 10 ) ); menu_add( adv, item_create_edit( _("Local UDP Port:"), HINT_LOCAL_PORT, config.local_port, 6 ) ); item = item_create_range( _("Acc. Ball Speed:"), HINT_MAXBALLSPEED, &config.maxballspeed_int1000, 600, 900, 20 ); item->callback = cb_maxballspeed; menu_add( adv, item ); menu_add( adv, item_create_switch( _("Add Bonus Levels:"), HINT_BONUS_LEVELS, &config.addBonusLevels, _("Off"), _("On") ) ); menu_add( adv, item_create_separator( "" ) ); menu_add( adv, item_create_link( _("Back"), HINT_, _main ) ); /* editor */ item_set = item_create_switch_x( _("Set:"), HINT_EDITOR_SET, &config.levelset_id_home, levelset_names_home, levelset_count_home ); item_set->callback = cb_update_edit_set; menu_add( editor, item_set ); menu_add( editor, item_create_action( _("Edit Set"), HINT_EDITOR_EDIT, ACTION_EDIT ) ); menu_add( editor, item_create_link( _("Delete Set"), HINT_EDITOR_DELETE, confirm_delete ) ); menu_add( editor, item_create_separator( "" ) ); menu_add( editor, item_create_link( _("Back"), HINT_, _main ) ); /* confirm_delete set */ item = item_create_link( _("Yes"), HINT_ ,editor ); item->callback = cb_delete_set; menu_add( confirm_delete, item ); menu_add( confirm_delete, item_create_link( _("No"), HINT_, editor ) ); /* theme */ item_theme = item_create_switch_x( _("Theme:"), "", &config.theme_id, theme_names, theme_count ); menu_add( theme, item_theme ); item_theme->callback = cb_update_theme_hint; cb_update_theme_hint(); menu_add( theme, item_create_separator( "" ) ); item = item_create_link( _("Apply"), HINT_APPLY, gfx ); item->callback = cb_change_theme; menu_add( theme, item ); menu_add( theme, item_create_link( _("Cancel"), HINT_, gfx ) ); /* adjust all menus */ menu_adjust( _main ); #ifdef _1 menu_adjust( options ); #endif #ifdef AUDIO_ENABLED menu_adjust( audio ); #endif menu_adjust( gfx ); menu_adjust( game ); menu_adjust( cont ); menu_adjust( adv ); menu_adjust( editor ); menu_adjust( confirm_delete ); menu_adjust( theme ); /* set main menu as current */ menu_select( _main ); } void manager_delete() { list_delete( menus ); /* free levelset names */ levelsets_delete_names(); } /* ==================================================================== Run menu until request sent ==================================================================== */ int manager_run() { SDL_Event event; int result = ACTION_NONE; int ms; /* draw highscores */ chart_show( chart_set_query_id( chart_id ), cx, cy, cw, ch ); /* loop */ stk_timer_reset(); while ( result == ACTION_NONE && !stk_quit_request ) { menu_hide( cur_menu ); hint_hide(); /* fullscreen if no item selected */ if ( SDL_PollEvent( &event ) ) { if ( cur_menu->cur_item == 0 || (cur_menu->cur_item->type != ITEM_EDIT && cur_menu->cur_item->type != ITEM_KEY ) ) if ( event.type == SDL_KEYDOWN ) if ( event.key.keysym.sym == SDLK_f ) { config.fullscreen = !config.fullscreen; stk_display_apply_fullscreen( config.fullscreen ); stk_surface_blit( mbkgnd, 0,0,-1,-1, stk_display, 0,0 ); stk_display_update( STK_UPDATE_ALL ); } result = menu_handle_event( cur_menu, &event ); } else menu_handle_event( cur_menu, 0 ); /* update motion */ ms = stk_timer_get_time(); menu_update( cur_menu, ms ); hint_update( ms ); menu_show( cur_menu ); chart_show( chart_set_query_id( chart_id ), cx, cy, cw, ch ); hint_show(); stk_display_update( STK_UPDATE_RECTS ); SDL_Delay( 5 ); } return result; } /* ==================================================================== Fade in/out background of menu ==================================================================== */ void manager_fade( int type ) { if ( type == STK_FADE_IN ) stk_surface_blit( mbkgnd, 0,0,-1,-1, stk_display, 0,0 ); stk_display_fade( type, STK_FADE_DEFAULT_TIME ); } /* ==================================================================== Update screen without menu itself as this is shown next frame. ==================================================================== */ void manager_show() { stk_display_apply_fullscreen( config.fullscreen ); stk_surface_blit( mbkgnd, 0,0,-1,-1, stk_display, 0,0 ); chart_show( chart_set_query_id( chart_id ), cx, cy, cw, ch ); stk_display_update( STK_UPDATE_ALL ); } /* ==================================================================== Update set list when creating a new file for editor. ==================================================================== */ void manager_update_set_list() { cb_adjust_set_list(); /* hacky but shiiiit how cares? */ } lbreakout2-2.6.5/client/gui_theme/0000777000175000017500000000000012610471366014035 500000000000000lbreakout2-2.6.5/client/gui_theme/progress_low.png0000664000175000017500000000211612140767202017201 00000000000000PNG  IHDR gAMA abKGDC pHYs  ~tIME Q"IDATxUnF/%""}>\A`@ K3lӣa w4nhYxpFzzt4cƐ=3fr WF 63 +аP(u΃\isJ5mYčSYYo;MfbO |d_w&ZstZF@29Tm΅#Jon,؂OŷWl915{1*ֵ!4F9ϝ&bԇ]hl]Xye=]'RqS~ab3olLl,QaeNGCF),[m0yv0'WPyFP'fJ,"֩0deitj`/qSz? OMQ[mcIuKB.Echв5/A9E<8\C{I]BO-1hOMptE]}l2ASYqrMm(rK,V236 Ҟ'dm)U't1&`#nen6D0oReb=?NM_4)ji3h˶cp3 *zhCtQvuf4 3LCl<+-Axj r*!겦DL'-SncnOWQȩ̅scʿw8V{\U[ 3SDm).' _7r cJr4X}A<]d >"P{[ =׽`ԩ5crqM-^Ob$ [=L Svv6Sg r8Җ99$J9>3@!K a%Ws"`LP[޺17A T'qئ']{U@\ԫGIENDB`lbreakout2-2.6.5/client/gui_theme/widget_frame.png0000664000175000017500000000036012140767202017110 00000000000000PNG  IHDRHbKGDx1/ pHYs /2,7tIME NS}IDATxE1 @BB AJAȩr ^)DŁt3Òy#{t=H"((l@=J)Ֆ45NK`4?"3ǔ*OIENDB`lbreakout2-2.6.5/client/gui_theme/box_wallpaper.png0000664000175000017500000002507212140767202017321 00000000000000PNG  IHDRL\bKGD pHYs  ~tIME5 o IDATx}oHc0xQFUS=k7fa~?ڰ c4v==ꪚ*J# ?$3NjIAD5y'yA/FJeS.CH&7v>> +^o( !PRkMh_ S+e0{yj&`w/o|;r(C^a=~6!mVNdx !"/" Ǿ ʀ}t/q<?Q4ALEc|Z$/0]]&vDTiY'v9P=RZkGG痗` _vJ¿Ee`] 'VPQ4)Lwo9wc͒c- c"ZI&ɃyL.^VxX&Q*B4/pBH+Z*<ξP*[nhl^U0рo=A+=3uUKD|>OU4va~S8 8&']!scZ\0yZCW /|vʳXŬXTB |^W͐]~U9VeYñyS,=u &b29n.KDLW?{.]<<`)XR~zgqbM&$ٛ˟hݚ\ [j׺>UNݿzK|; SXlN쀞=BiS*Or9M̪JeEZEI ջξ4qa{XOsXyYUDf}^{zuHi59ѢP/-Y4ïQyR\fs֓8v`?|UVPFݻ Sod5=(d__^~cՈHIZqZA$dYq_V_ "BVYs [L, !s HSy${"*L,KWDQ,5X~~ q޳0Jx:#"iZo.Z EP@my\K$ߏ"5 /}?R y>QC#*ʲcYD5IHG=Ɖ xZ ik-yoNuxJND:S2m <7E9n^,@ VV˲Hk01Nޢ7G A04]k]~X Ey<Ϥ]򶋜U Vo&ꆖ2iŗ0 1O$"iQ(̲]Y~P(r.8r?l߁}R[R UROTZܡDDyL6\&iԚ<F}tzx:Sʈ*[y̟  =ew!$~{/extb{P*nf90@Eř eQ$y<(e2,gJ|?Zq|2jT~T# U&i"twKn٨/>`rzQ_^< cQ8V39:RZZ@s2_EMc0tc{W*Özc/9qXDET&gg_l6 F5B!izr j>Zi,, q=,p`*L%"kLUunOO_ қBcaz.[8K2m" kk'Gl(u]E`hV+oTO< !=2X_X6 0YO迀/rcVmO&'`= 2TO++yM@ `v#XI௪rɱօk5Ǔ3^rs ] S5^/ yB 4]5q-$"4!ڈSiʲȲ/..tfZq_ON^iGQu,ME~w{x v1s]z*_~ۏzvtnR:6UIY>`$k 愑*k6sSJX/юn:6 q8ΔJ͇V1XOByu#_^~e;F54KRq<{껃AprE|A8ԫ+8Q9a痬}d{{m.9UnӘ;_R"āxyYW gxO!!)6@8=b- [Wgn-W.0LsU'[KQoX,w|bDdz^^~ z#WZ,KLg_`@~^/C1g = (r6Sl9_"zyn Gk+C w] ;fFk7O=1^Hۮ)i`KWlvVj*44C9 JeIñ3YȬˑq)mBHg6>:+=AJ0'no|oQH~(ײ,}?4=y"Ө㦍k"''W]{ 9{BSR eYR !e' "8qE{3;`~׈0Yv! a8F%=:ʍUqRUyx}]Z~DT1>b !:Jmbu2Yl,%ф%;Uয়zPz6xw"\COxRp_5a8[)*=ɨ *YKں]S9{0}D>BaYBZv}dse"]hsDh  uGVWl㸩yQKRJu>h.e1YK|X4R, ''W)C`?3pZ?W^ 6o)kJ}q}H1pXP: c6ZWaYBH"MBkyv8F:#-|߯d#0rn73FΩj5LZUeIn88NYglR[o]3^) %M(`eYu.HBV![ivt :>Z1su5`=fVK#{ś&IqhbMʰ=rIm\ m A_#vWRZfz#ڱ4Зu:Ī*(ԍK`q23CX+O_~e:1Pb_E:f8 NN^.'ʢ)LEDJuµƢ =O!s=OE*Z!$B,yR"YK$RF6ERpigmTx|2F)()`~ 塚×FD@4"?7|3#>^}V Bs`vz7nlpCGͿl𪛳SJṵr~Bs\Jeњogg^mK:miP`gɷVރ}N=,[V J+B!g׷fvGGDMHQ`!YcsTnR!ƾ; 'R ӧ؈?jrp'7DeIgsK,b;1-klhQ4ݥ(>8 \ۙSQ.O(y$Lg v볳_Ԑj:=m>9&,= HD+*0ՆesV4 0Vcv 2c b5j! wH*fx|ԓGht[YY2u9z4Ίh% xZo=[Ʋ=(V΃o`7OM u )C 1_yBfgғnz½?f:9wF=V}}jwƲ&|Xpbl_Y(0ݮSޖw2 cg=6UN$$dl7;H:5;QD<v\: S/U~!O0(VhM*㽐B; j28Ȉr7]˵f(Ylq N\X`Vbՠ`xb!~cFD7J%aKZOKul8wo^T}#x<ϲUaJS[bQ*#:วT1 fߨmZeَJ" ՛=2'hX3ߵYcgh NZg R?;MϾ2T*7IcF&VE6x85}WcXXX߯R 4AA("bFY'`lXdP-o6wR4T4vR}@Tc8ҙHʐ{,O,U_2$ꈢHdXu= $ϳK̊{;,CkPRR(ML?ZP$=X{ nI[vab*IXTʨ'huIM~LU":92<.;( w*&㿘 W?#Z?Xc9NvbL8 PP=6qq»BP`iĀ=s/LN(]]d+9Wq4w}CBdgSoL{a}g_)~0%x޸+kUQu"QU75M袮l@^(OȰ߯<߹tM`1tOm2( IDATgٸ?^7w|j:!B6O uƏ^E"@S,CgBGHa[Г϶|?mHԈū 'nݴ>m?`1SVW{x t y{j *cQ?>[[̜R~?2dۓvx|$D5= `ORR3/23Tu>T[e`bptt\K=p3,?XC S=Dgk[x,`B DȞe="4 W_%Sw$TgkMQ]c v;ȅd}[[ Ǽ u3{k;@)sP<ߏFЭE!//\_OM3w?60VpR.&LkwEWW%37Wσey^QRƈͲ-SycX@<Αr |?j̊6IkdQkXiޥ 5^(y=Ox͋ƯDtzUO?a:= 9~z''_+Je rwa#ō %ȇKCtcw uXmY`1)"X.~+O0Mgt^I$]@~kaNkeXÉZ6~ra쟟8HdM!'ZA0ICD8V/-#"jR0J]`:>-כͧ.MprrbnKm\ |=Ϲпp֕[;W1\LjS͂Ԥ:IH2uATyA01tsZ}<9yjUwޘ沧ܜ($z\y:&mӄefae&_sDM+K:vH01ub?e,&IfuM6:H< pZa0p|CU?̠-֝q]`|?@G9Yӱoc"C/e$DRRXJeE,>M!dLXro_N"9Ģp 9d(o(M''2=a.1%VdSpDE"󽔡8(1OŦGHIq;H#Iۙ @úڅ; ĵr3rbWf35/wϓdCܙ2z-Ə<f[1GTyla Gk'v]3\j ܣ;˒Imz,*s!fjeK̮)ee0Jr3ZC4GGZSW4 4݁󴙙ok}F\qd(x:)2/?O&/0Y_Ԓ:ӗD)I6囁UBH,]zoO}XQ3O0fdk|8vz"Z'Ɇ?]XI$f̲i7Jd"?2 "*tp72qiPcik }.Or0D`ٚY= noGG/5C:t7\wmk|w\\A`@ 0lãa̝{Pqeăx0scg37N3Qh46 /yg@8TY0 3NWo<̕6ڬi,`F9,l7~;LƟ7~?iAϹNQhiqˉ-Mj疙6^(<[O¨k`1ƃ;g&^fVcdȺumhL\DObWntS4pL=C|Qv:_wVFV樰2tM6*eʃ<'`77PyTNS<J,"֩EJ_e'Jo+t+_⦞5~7fd& AK |7Zs >]9p@pe %#v{(CwMu1Scc){ 8m&뢮~;}tg JȪ9Ԍk4;1\/%KeL ;|-BR>xB6H:yIACyVfF%6.{ ngXcp1SsNH9G-m.msؚc؆\eoyP%*~hCtQvϷE / NK-b)ocP"{n'-c^C^OWnQ]NkȜ-O*dWrUKQ/!ÃcL!NiS ?%N=аp _c)nW}gj5yUȅ>: f0{sl|K:1ay.OՆ[b=aw><Oe DK_t^C`4JƗDvi?4S<8Nf(+2W'%aC|krPgJԫ|IENDB`lbreakout2-2.6.5/client/gui_theme/scrollbar_arrows.png0000664000175000017500000000063312140767202020036 00000000000000PNG  IHDR( IbKGDіip pHYs  @AtIMEg@(IDATxc`'R s{o~ 9{N~xZ뛿!G9=B "'̤ #bĩ HN$f!IENDB`lbreakout2-2.6.5/client/gui_theme/Makefile.in0000664000175000017500000002537612610471343016030 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = client/gui_theme DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ EXTRA_DIST = box_wallpaper.png widget_wallpaper.png \ box_frame.png widget_frame.png \ button_frame_normal.png button_frame_clicked.png \ button_wallpaper_normal.png button_wallpaper_focused.png \ scrollbar_arrows.png checkbox.png progress_high.png progress_medium.png \ progress_low.png list_item_color.png font.png spinbutton_arrows.png \ edit.wav click.wav all: all-am .SUFFIXES: $(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) --foreign client/gui_theme/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign client/gui_theme/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 uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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 installdirs: 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-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-data-local install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-local install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-info-am install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/gui_theme @for file in $(EXTRA_DIST); do \ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/gui_theme/$$file; \ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\gui_theme\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done # 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: lbreakout2-2.6.5/client/gui_theme/button_frame_clicked.png0000664000175000017500000000031612140767202020617 00000000000000PNG  IHDRHbKGDx1/ pHYs  d_tIME[IDATxe=@@g Q(iBXJ*Y4<$S}zUEo% qz' f":A0! n,{IENDB`lbreakout2-2.6.5/client/gui_theme/Makefile.am0000664000175000017500000000132612140767202016004 00000000000000EXTRA_DIST = box_wallpaper.png widget_wallpaper.png \ box_frame.png widget_frame.png \ button_frame_normal.png button_frame_clicked.png \ button_wallpaper_normal.png button_wallpaper_focused.png \ scrollbar_arrows.png checkbox.png progress_high.png progress_medium.png \ progress_low.png list_item_color.png font.png spinbutton_arrows.png \ edit.wav click.wav install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/gui_theme @for file in $(EXTRA_DIST); do \ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/gui_theme/$$file; \ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\gui_theme\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done lbreakout2-2.6.5/client/gui_theme/click.wav0000664000175000017500000000576012140767202015562 00000000000000RIFF WAVEfmt "VDdata  ,  "       &  :"" &,,                          պ (:8:4 $*      lbreakout2-2.6.5/client/gui_theme/edit.wav0000664000175000017500000000434212140767202015415 00000000000000RIFFWAVEfmt "V"Vdata}}~{~~}~}~~}~~|}~~~|~}}}}~}~~~}~~~~~|~}}}}}}~}~~{~~~~}~~}}~|~}~{~~~~~~}~}~}|~~}~~~~~|~~}~~}}~~~~|z~}~||}}}}}~~{~~}}~~~|}~}~}}~~}}~~~|}}{|~||}~{}~~}~~~~~~~}{}{~}~|~~||}~}}}~~}~~}}~|~~~~}~~}~~~~~~~}{|~~~~|~~|~}~}~~}~}~}~~~~}~~|}|z~}~|~}|y{{{|{||z}zz{~|z~}{~|z~}~}|}{|~}|~~}~~~~}|}|~}~||}|~~}z{z~~}|~}}}~~z~}||}yy|y||zz~z|~}~~}{}}}}|}}~~{|}zw{|~zw~x~}z~~~|y|~|y}~~}{|~}|{}}}z~~~}~}{}|z|z{{{}}{z{}|v||~|{~z~~}}~x|~|z||{~|zy}|x~y}}x|~~~{z~}|y{||~|{||{}~~|xz{~|wx|~{wz||w{{x|{{zy~z{|yy||}z|~~||}|~}yy|yxzz}}yxzzwz|~zwv~|usz~wwy~~~xx|~yw}~yx}~ut|vu~|~yu~~{{uu{zx|~zzwvsp{xqpsy|qlxzwv{yy||}}xrzzy}}y|}|ysvy|{oioyzlnv|{|{{|~|{y||yy|wwv}{tx~}xuw~}{{|}|}|x|xwtsv}zfezvoow|xwyzz}}yv}~yt}~~yuv|}wsqxztpmz|tip|zyroz}xwvsw{||vvtuzxlhoz{kciu~otyqqzzv{zszzvnhx~~ymipywv{{zzndufQahcccmmze_Zss:&,Z>.و()ر|M1Azz2Iزo5)HyhNAZæqOK]xqfjyldkxwqt}{}}yxz|~~|xxymitvgbt{lenzrrtu|{qjv~vsu|toqx}upsummv|mlvvfdl}e[h|hbhyl]dxfYcwyihuoefuyno|s^_tvnr|mjvuop{pko{wihs{rqtzkccvrgjxtghwtabr}i_fyodgvlbreakout2-2.6.5/client/gui_theme/button_wallpaper_normal.png0000664000175000017500000015163112140767202021415 00000000000000PNG  IHDR)2bKGD pHYsodtIME5қ IDATx4G-r#2sGu<x~r);%HÝlXըrGo-/FRIgZmi<RjַZj\9Z߅&Zo@n>a~c\ TI7lLm+J%BYs/xmO $S p#/ Y*cn8xFpD,l} RI ]6 qz%dѸ@F Kݶ/?IbִĤMo߀X+aVmLo樴o/m6^)7ߴt7ǔ5}׻7/5597F48=tѰ=}ߺn :1oX=> bǿiXkI̍fi*4aؕ45 +3>2aNSp2ںn_⨵y}J* ̻Ӈ;,IH%\W:&&"tul(| JYvweZ%+X2JjXKĚYW԰Y++R9?qJ֟36mlN [x@Rk!RDX"#b)yV0{?<8nKLӇ a}G"|xoD ֊%kBJ;Ru]:^|?ny|i|r mcIK]~֟ԚB'fR &jBHb wS/q""%U)QJi]'jY6.Ӈe:krKw?Go*c[M\No$RJjDDc}M ˵ߞɇmN3sԊ]Nck:/~ZڂRz|&j +@Z9R괜̄a8|Z;m<԰PCmSc) ?/> ڄ8~e!VF7^vSo&kC/X9Z ߞw $h7&nXq0luvRf=13edI(r.2sOqToPXTqR'VsV)!Dq@dǧZbQJ ZXcN7t{Z6q<VP5lNI9A]Y/aewxCL9B*\N4>?n[KrV9-yRn[jvkVR+f’󛒖ZSITrҮR,iؿ_(q,`t6._!˻0]R9`{|7^:ץ]?^q_viH!z7Ēns韷Oq $pLi$j>lrǗjkYy ok^j2ۦ墍9NBm=hX|&BH %9MX306Vk㘖keDVS%QoLX@@-YYk D\n2a͑|==n|f"j`!mJ#3%RJ0[C!%5$"!3IV)2-e~==d]ƗA 9]R&!n9Dr{qVJ}yis|kLG )zvEk5+e ߝ_~^n9-aebe-qNՅa1/7gml-X;!0 )k^qX#0>S5ITUQiGԔR6lmjYvBhR`܈p=~ب4+bVfc\B8x25!%"Jc7~s7O*Y XCQ#=hK@*%Rf!2a5Kfbdf%0XZTFi mk^b0^7"Rre=ZCm}QMXd-228]׵rRbð/ƆUlkvZKNK6w/_t5astaӰ^?[uhs-!r ƹaKe?]n/1Nzn5?}a{% %KD\1q^i+x_AJ~8o_fN,>RJJe]/@0ZsU+]k8meR<mOp{`% syק<Svn^J^TB*MMHjbbjw;\gmOLmLJc|KÒ1[۷K^@ZK\5q4D QKf\1auaSKа2TZ)cn0l+PbL6 秿JM@Rۿ/77,Ⱥ65RsCZ1^_ʔ<媭veUk?}W(gUHR~W2ݾjjIjmnkTAj(V}gj>͗0֖̯B+y,qƧxKZbl`f`!nRH@mZ``!֒&ڀFM-YDŽk% !@t{RIrIK@ wyB%I)@ aŒ ԰NNKS1*6X *ef¦c9뺝ח_R K╉TJ2enaؿ_DsICkMks}DDJe|~$,toDMp~SHvDct{94~~O,nVIE@RhuR !0<2+mBe~)yi% M)'MZPryiLڸZS/oKZ$-kjCOD!$`>ls tFas9KMJ_9XnX?nZ˷B )uI*=b6"fRʚ&nV5GIJU˂d@Hi\ Z-U)%bfnh}w[`%ZcYX0G8CeߗO?aIEI =l5lLi֭Ĵ %tߘه]QۀJK1wc .yqJ`x3o6Θ`L0~; Z~s51! %uڰ@r.űs%DfZxs~` vmNu!q=0f{}7R뒖11 prap7֏_rm,!Z@*YJM )d^ZR*BjĄ%7&j5!3+m|ü5boOg%RTu[SD%JYOc\..l2BȔnXÚr~ߎa_ؠ~?bZQc`&)JM矨!Q568׷ZcO%VA֊:;`\kllJ 1Q7j%M @kp|&8_jI!UɳRk쇻y{|;iVkwi)mDLR7َ*FcB=yCL֊6'B 6>Ii JE0!H!B0T~ D@H5Zn8Q+L\شVKYkL^g`[Ť w}-&^6R7eXu3[~1,X [-0aԴqqzJ lMhX֚LBH\2RƆA+#36'm=3!sSךV)AJc\YJV$RJ!|{1k53㺒gV jI~o_|5݇oMIuy4BȒelZX04K8礕Zs#DlYQ+RY)wRjmkI+'XQzԪ?ḘWT+u4^ƗJY!N)qtr|~Y.Dmf(xyga'9]?3T*NXBt~K ֎H!R6NͻjwaDB֛FkW]o/6Aj0 3KZ+HqĴ4,Ri&F̈IR/ KWV3q؆U[:kr]˰{p=|x;1݃1S7kYpxi'6ⵖΛ9M۷Vv淯O1VXZ] fPJ۵Z+R( (p}2̷g)yzK{m;AQkU(ō6۷a 0η'ª]RxҦx ,Tjm5Jg"&\)V}ߧxB8VVv| 54iv~pc~sarjIpta(r8и`]%nmq}[i,00p,tk8ϥDj<;s^;rN#0Jf&)JAVRoX[Kp~/Ԓwja8xN["i!|VLׯDZdB/_|>?e=QC7+R30@Q)&`e7C-ufP2ĉ,Y;]_iajR_Qenm"-_ԼA)1~sy)c[ @[_԰ߞj$Ņmk)U/9^1DEHtfg%R +i*y}X2) n@L9M!-'뇒jXӘ㤕.ysaWc|dO1׼HR1*ܕ6a^qa 1)R6q>kT4K%V ź`,h@kr~CJ#dĪUJSkIܴ4pP=ݽi%-ݿKZ 6Ry|jIjjk/.WOJ~wwyK/ԪR.-)zZr8MiRW kRicj턔撦36n^]Ncvc`j30 R,Ěu~'FfB TZJM B j(~+%3)iRxsx+nPɹ9HjW&H &)[Y&fڝޗ8\mZ;"6(@Z.`k ֵ$;:һ6?fc+Scj"@0a"ʸ(iaVW>ūsC^n_sra wwʸ8nwOZ֪ RYng J!D#T툚u ;BRg!®j5+f\Vc,!J!b7 O>KI5`naBZ5@TLBH!BPk b6wLh\%BMNsWRiݰ3J A~,ijܔ4r頜Ʒ3h Sak!PDMiS\Kw% D=zzecXR؜. DkR)&~{v'YT1J[c<4>ۇe:/oߧ4:?hVeƆaYD VNuتBhcCwVE?}Bnsa[M9OB*fZs J'c0ZR/;t/LDRDMiܤ-M(jRJaRiw|_7}JP)݀ߞ6Iolj^ jV*uD@Ji|v?wZ/?o^ KrG,ԪRaQ \OV@ ) s7ĤqVJXaW^]#aIĤt|%i\ضVP9ϫeJ+նeQJkһe7 k\Ji&o_g~7)u#ow}VR'`PNׯ5MRom.W Bj돥.+P\%j+CNKZnXR)3bj^)Rhc B(ӨB RF7|}ŸPʲV)$amoNDmZJ-˥ЌqךY[ 0kW#ra b!1v{oOUk8_|x=7Zۜ47,-Wm Ɉ0[*Z1}KâunhaFLk@H\˲zXzJݽҖ*A FF-Җ1X?l˗熵Zl+5<8?\v~ۘZ[fv~`J7o.ek|&90mmQG! a8Ο//?8  [9J!ep'AXqDMk=<눪!_~lWƖ4N!ZZnJk坹 7.l|ŚokNذ %M-ǑԒp ԐR)3oPjJZy6K*y% @@^n. ]an8}!Z V1Yח2ee!BZK\+f]sk}-чMk5Jsxyi)e^oE IDAT 3m>tr5N`n!U`|a钖TZ0$Ojɓ2Jk)S._S V6y}k%Q5J뇚gskź.-*Ak#@Ұ4,%/ 1I*hD.lD[!:{k9Nu/ \Ҭ#J!zZnr2)c2J;ק 004fZa8OtJkh}Z_ߧ2w[na^_k607uPڜ]#H!B+)֡?q)e)q6TKBSJ)~r|Rt`Zc9ۻ~>5`B#jiPH7ZJ\Zje>Z2SBhvwXZJ\/~3b{"ܝ>q}W`fBb*yB85T=zQ9N]w[ۥx36lOJ)Cߕ8&jE) o a#anJuE7nBK?95/gb VXn8"Jn4_svw%MR*k{ko8ަe~CAIVKf6Jo)޴5&@wD)f0ι.*o2XsV !V?r0!Uߤ4J) $5\%\-5dqͥZ,րYj}pf 9 nM拐*-ǚga\WXKš˗8g" 2JfOmr)!f%՚pݶa)%4Z4*ex9 Jp`o%-Dx>Ƌu+2ktGB$B)5ak9Z>|_UEâqj% 87Ha-24U":O'bšK|8o%k넔Zix<jI;Xxߴ V߅m$š֫YB+-)[tQJ4ZH 5ᤌmX[`oV_hL\'ܰD"ƥbàiXjor;x{ٺ.My~ %+canT땱5Xݰ9V6٘PrztJLV PBijtq=9LJQɄۯwVa&m:aJܔR>jXJ)rvN I j]c&R DRѺ 3[ՒjqkB*m; a kv~ZX)~}k K ˺ j 9P+5m_`P422ê݊Su%DMGJ)z3)eRl_ mJjI!@F6kJiڟ>\_~]sZLFZZqv^^j]څ8~sߜp8}n߆1au>.J~{m [LTK N`76DL຿/5,,eƧ:l/KV @ke"fs.P[  ބJy|iԜAk.KUf^S9MLX\]оղ`矗< n__nÍּԊ#6uZY!DN3Y׻nmN]0q^@L $af!TN y|RRI RJe<7B1a7 ٽ%fl=r~OZ1ί޴ 5L=֬W)֬#PGyއ~7J~{ ru~__?ZR\^s-Q BaSWE.lBƆ~/s,J{jDBZvx ԜP(Ekd<R6 ĺ桤Q-'lafZ)JKHJ.Zؠ%y cBIpjݞ)eVRQCq5n%DVm\7% K a)e63F>l&/hR* ~TD԰&&B;Š%J]Ԛ=,[;PG^~n 1`A+~qrC33Oʼꈐþ,+'<ヶʅM L|Jq5ItR HqEL_>ێ|k0΁Dl xӶcuÑ:^m%3Vj89QZJRzȹm#/Nt!ʽp^Aas.cP^o|{fm1a`Lg4Zb&ٲ1.lh%Gv:*ᄑ?*i\@7_1L9ۯٶ#,%ƙ2ǀ%E7Ւ|_/ܵi7|s.0Sj?w?lC簾ᆳ];ZJuw~')R EAanrv u%c9 -@<:ŰR@J8(Xv!̇])Yi;߾V"v@@~|Zm64Xa??SJwϛC KD2Ұ&%t* )gҶ۔YH|ri{nc1lCv$gZE3R79:m:.wW*<'/m9ѯ7YJn>VDӎ]A}6E/ I f*f 1_>J3sSIaf^AR2ܘӸ_35IZs0R I`鶌1jtS?_n%)c9z֘us>9z*rSTKn})Ý_TPХf.@8+̧KN;in"cLݳ[.6FJSr(c]mkRPV$` Q֭5~=H%Dƹmv<ȯfgUf) L 93jN U +D Di-ܻ)'/Ns.)zXDt+||z{)篵R9qc\2vo0N_k^+JiBͣw4izLa>u.z-f._ݎhJ`HlƘI m |? &mԂJ)GGNX\f4sCQH~Q qBO?Y;T]Z>1m:-iۗD^a╇0}t@L9. gvZ*b\%h@WVm3rV @RkIqvB)r=aQư-өl(r⬖j-4slt?}vn].&y7 &m 3!@*K}u=b2njbjat˰{_jͺKbrnI4 q~JvӌɶPj<?r.>_/?4ٌxy&RC92nsW+c Tjʀ8ApSr9Zr!'8hs!xsXj;ead])`j-Zkee/A_~'9):`۹jA*k)ڑ3X6|nm3ϕן6d ImSRkGPFJэ{RXokIU;^A~{od`۰'Ks3]ZPj B*V~bXl;w%IíZb}]n/;˧nR n=nNsJJʪ[u^nz#<<}2N=Z Tg;Rrp3(MHIC-,$VתIq1\)-5vUٖ ݍ P2iwJ*ZqsRRt)ޮm9b 9zj(0/ӫC-'|$)݄9 e@L–3\I{& %v[e(8ѯWY kmêL[z1P):-p|xm3ɯW:L dI0xjtZWmƕJ j)na -o-! \ L/RzGDcLԂ1m)̱jE:-b#(ߤ41.`ہJ}G/ch^*SBP1RmZ2j 1DJe _ҵ֦;9dl+` a)2VBXr(9Ռh,bܭmnJ7Koz`]>ZMIe{T (9?8\İݮxP9G%ii+fޔp s2m\a n&feL뎮~9R+6v1t#պ%+oisXR,OOv *+_3QIL'JX/HkEx|L8gaJV,5#_ϥ ykw9)yVUK,ŕ"@iLݔ4\s|" T,JZ-(ɘWk~fnJWJ͐snj`L_kIq!n7_0΄9Ƕ?+)299!UyXn/xo]N1&Xa,9%jQ k%PoN^pUX)ƴ3Wr\_i$vܗ*dvzTvCpi:P7t;HӰyU̹)j}.59 cleꦇo{J?cA ~zBF a- 5%vkeT΁([9(UK jCXceZrbapm]._sn13(j{7 1 &wTs}09 P9zqVr*1d1 .t7Sϵ bv~}ubX(N/QS0SΘ.6C3@i8̷/sZj)R*I_T9ǂq*ΘssHѵs,6έ~{~?_H`JBJ4ǜ}j-3KIMT:EG vZ+a9Ji2B蕀)4ݮ܍wT!07^p!Ѧr R0f6`^1.x%ǸbNin'^a -eZÔS@RٜC7@*3r! Tg;m9mϤX\^~\(j;/h[o4ՂR-*Bds!Yx3Q)w3~I,WV(r)8PV79ƕ.D|3J9d^@*'8(MNÚS8<|wCZƯWIHe8'`P4&ƕS_?OیXl)"!ӫnܤLCo;&5go u{|f*WROR2I9ѦO 䜲)ư*emJqu˙1Fq X)GܭO\pxz6_vs\vBa!P]_kBHm񗒥 %7j6ʴ{/fЦ^ژέ) )$=V1̵8c)\-ԢUAC RhPm7SZ&'"ZUVR3Ha1Z4vL0F3ķ6H^DM^IB0HN )u-UjS` gjȦhmnl2nzѦ!c\Bí4X uG IDATڦj9y-OTmOcJO\W6C A @ 9yL>'(Odz_[d}!_9!Rٖ՚GL1.9End*R!@RK;nZ&'B./Q6URSq~vS nJi"KAep2i?sΔnL3P<"rn0&0٤)1&ZM3Taѫ+’nݿ{w3Mٿg.Eݿq]>rp19Gί(c]ρq>Hy-%i2HNZù `vF×-'ZԀɽ)pn?l_AoIISYmΧ sJj"2 1-!=*tSk!VIʴB@Ijٿww 3hC(B)WYqBpE½iǂEٖ`QDR ^JiÇ,%'O7aJG7uiz + izι@_)8Yꖳb,DV b"k4破mmXoDv$(»JНҶcgΙm6 LpAX#7qc3341.a9c͗!zt`2F!bT{VtnJ) gB ԒȦl?+f2O7TtӹV|x;lIF>6] 0~Ο$-7!sr~9o]c4*Ӭә~{Ƀ4Zw\~`uwM +`Wz]y&@J "}|4n]O]zs.Y)O/ڴ[E@Z0g)|YPBHu3LZ>6j9j_KI 6f7Bjm tĥm fSkL73wn>{?RX[L3Ԃݰ0&t;7B~׍wr{n8*ef*e3Uu[1^9B(!FnBaLJaN/R9{)5մcLh  \S\ʴvc úN|zK)uPʶ9WqeZkNa}Zwsi~[S_0^Me\P~&Y_7 ~Saa11ys2}+- Rw Jc T?`a4͠Mɇ.%g)9 7Sf61 01 nw|om=6[dJgl76]ʄM{6 9%?m7Ż/͘#MqE*ǻG )Ddf֒2RZ00tLǰ TTz~lIi_z$զRJ6sblJJLpnR[ye~;2ycIDRڴ9G"&|HĜ1Z;b/E9"&\kZYYo/$DJm nsWr6EEpsJsMKŵuJZ\\Zm7m- S F*Iy(?k)  RRtbm~wO)zcqYłO - bL0R 4k;+QnJ=Q AʰB=)5LC;in׏RY^[9mP<`\Zm3LV&s^9+JN)Z !M3ג2vRhϥTkߕ)JŅXW!$}&4r2B|s8K)JexeXcZ*%ݴ~s_1.tJ_Nqs +"~G !rF̕U!` =J7Ҵ 6e\x7MGW ,_(nCXU @Q13ey+ŕqfjŒ] bRYSA <]ݟn֫_oqZiځ3SuTnTVlگT59U7HIr s0[l-g4ܭ7L]O4tkլENR=4n4mA9'̱ͻ1֛v:)n a\(mLǹlq}Q7}mi{fa!탱r*n@:&Bd ~ksk~rUJ_o9gHezNچ9Zҷ)nЮ㪔`R1b)K$j[;0s)q|ǿ뺼f }A++ܵ6)S.A"B(ezhPϋ эGl^haefOˤ%VBR֢͘ݻ3{R5#~O jYWk&Xo'ƙ1-5ŕ 1e7%\8q!z3խׂ%V\E\J]YR(Xn/?톃 9 b~IRz{5 vc/k-)+mzҦ)TH1'H˺\ff~}mۍR:%Ŷt9PUF4 D nj6@)7O/KJX!c;GJo2LSZPJPKHޘCXR~o3A9ڶ s$U22tZ0ՒNJgjlO~bZws-gtt~^kɦm7?nz~i(=I%slCoO_t|lds-9ŵu6J54Cu+yM*%, UTwLk{x,gθicrZn_k-J[!x^RJw@uz"ɿ~W} $a~Tvœ[T?ޥk-(ݴ۶N?WƂq!0yK R4}n=$> &jesj F*l0Ýi+b^7/,X̓FƶLέZJe|8琣sˉ|rF%iӳLma;[SNy<\/Eu9}bן)Wx!*" v171)Ӗ\ڜsJT|KplmsJ!'ש)8* j;r?ܮ)qEV?￱.ŕP$sM9rJBlR)f R[ -mG.8ܯ##Ec,`ZM]jncXr vן_1qכTv /@ᯂ AWa_mKΥ"eiu:(-޶q+M[ .a}ٿqr8 4ӗ?GZS H_/JR J7+i0E̱-n<@*qk2@jdYeÇ?k;˗nz;Lpkݍ'jvno9P.1se3-Q2ryj\`N M6tbRbJ ZjNAS\iAsRmRjݹj̛oO\(@1VJ4!e'A+mYT-%v;NRεiU66#ܔSh];?K-in#Bq<'u69~{ݍy9ZS ~/a{% RXmM[VzrS-YHE]J* -M m}+ ~vO]ݛڴRn"Fc;:E)"V~ hҝR v]pߢ6E%r[LTZۜB3-Jz7J0l3̷/ umK)j+UJ{ƪ&'S\$2Ġљצ)~s+Bl%- GƹR65'"M~++Tm=$ev)Y ~ "51fw|Rc )R9C P 6qvA&EzAuJpna-mk-QJu|C)4f~DPʶpRfXWc!}(n9 !2MûQQ5tu)6(S S$S>'vFN5|/y33}[Ka 9rPƃ38saD^ɚstK>ye ܪ3.ǀ)Y̑1g IDATL B/%Z*0£ZPKB u*q9] aRn`q*0"ۛwϟ1Q-\v2#u"uRR362:8W]Y{L.B)*1AN2]9&ǙA6V_1X.t޽v{gJPL0cqEQ&bpb{?=B'bK9Z35&_r5PQaLBrpBBz ~bLKI1 B%7|AϗjAdΌK ^L[s~Τhe֊*(t>P[jhݬԯnSrlVc.-B:8_1%/ttR`1myX#O/ qKNa} 3R3ͻ S̙vw tn0jz!r0aoL> SnPld30j Doa~΅ tNuD="a6op˹N)fe͉PN"T?fDr0ƄXFKR FU 3'l n*WTߎҫj{W8JfFq>z{ѯwޛv[g/{l.5Zso\"k-\/qB0Q/_K j`\wo?z>`cĸb#8W|Z~7KN pہNs KgBH.V Z;rrM[ByJ#SS$DR@C!ZJ+9aKT~'7qT .+dSKi0y;ޚs-HM5 6@KM!ƥԝ1Z.;LhήinZl7w1]/y?;{sŘJ9not96z8S‚[rB6٫7pBSJa1j-wG`ƻ~3X72vwSr*9#)e|eXݕ1B\hLY-)Ő~)%q =LƄlZ3@RvLhs}rIoG*@NIrP.\_r]v{ø\>45%S9QgGR%" IH3^|P͊VjƔ}Cc#tlcӬеfؙjOqs 1:xߡZ9JSwYeL- eGLY \s)9Ez Iݔ3mڨr޽ݶa¥G1L`~%!,'U)[q"1xw] P$){nvZj|pBs!aR8(U qڽKS!g/\j\34kտHpPZ)GnLHo'@…ZP32Řes~9瘒[CJ{ k=0&p|鷧0aPM? ٺﻒ#!d{U/^9W#k.CHf0KN񇧏 [Bٸyr}u7ޙ%z4#{#IQ-,z"e?T+4 !ՒJSP)R3h)\)=X m CRN)9x P=XךsQ7Ŝ._ fB)xj U-W`\PLg c 0y`Bc\BOlnՊ a>a7Lg\2K͜)ƥnm26v{/0:o'YDj)B4bNBj&B U)mUz>owޛR_J";s oZ }xϜ+L0M)^"%hkKιV(Ņ-FʸE?{7WTa00S%퟾~P )k b,%RJkS\6RKbB﹘!PAOi7Y5#@R-u88ԯo8<rCRO+qUJM1KTrRzXmc&X+%sj)ԎO/?;㲖PYczjC0r *簽6xR{w!,m%l/-fDƸnne9T~揪!DÄ0&f:gՂ1릐U)}.FіT3 (%GY.m (E[)(pyr9A9`7*8)/U8Z2a׮dݮsB5 \bL@D[C\m`1V͊11iW75g FW.R 2a1x޽NT7z7vh]Jr!0hJW0 Ũ =KaR`Rcr`<6-%l}WCN9%%L) !)G23 䤚wh[hq~cnq<#B6˯Z3RIсEpZrI5gLV5Rpp)%c)XQ=$v>bcJ v9߿|}u6BC 4&ppK)w_~MqS(9)1cln"7U92Sr~p(nuSJJ0._)N&e;J)gϗL4xC߼Ys=~(>#snFQs~n"j=8xN}U@)޿ǔFwt;bX,&\Ąʨon>x7LT3pkUƵ5GHEEUcgR HaZL?;GrST`'#7 cLkRr ťƄv޻)˄01ƥѻBFe:S7nn]'gCJ / U~A7[. [T5gL(/B?c8\j<ɻ+&wrI 魹(ݿJ 岖BW{*bϾ[s\Le>p e7)/@ )m%dO]O[H 4hp>"UG)CFˆ1ϙ[J n93z,D˸K8pZRvծ8q6'[mRB痟WcX. YARr0ޙKE6aDݻ?s bB)h5gVTR~crFWpnL])u"TA7} SۇUTJ,%ZͅĘ\%J-$.h%EO)\!DֻrFQ0tdnF:¸3`Of>*=J9Рfӌ˗B I1ܿGPRt.%q&j c̷/{J(p1r @crW_M}.P-,܄040#r!c%vpLwsEPbP.M)%S(e9{{B HvG`r Bv|Ǜ[2.4QBrzŜOoT# B )L4%Ǯx;S!2j:m-\/^0!њx;Atq2N1:J55B0{w2(MN^fzIK]6z_x*EC)vi=z<.g3(&|pJ/+%v).e3S~+pz)!!, )|9 1%g;L5ZK-2ޮn9oˎ0Ƙ,9@Y5+t~Rtx{B.TGRxL/[btvu<ͣݰ~>d)p}ER0 .\*\P-).% RiccOB2q°LOΥwmEo0l6:bL(n\ !Y/kRRNwBSBe~V{{J fXR뜜jF@\Fonb,K1`C-%%9Z~[JR #̅RJvD!ZL ^-B*.@BJ:p6tdeo[g΀ϓ۹L M7ϚSv9qH |@-0cLdRooproPTx{UPB PoO9f7ח|}q˩"9ˈPs3A/L`JV9``%B!D B`vjN5&2d) \nZU3lo?R&hzTt}6zTV@[Zy18;brBLHTr=./ph2Q딬 0yBXV۷g݌#a oSXR~?2gzDHIQsy)[roԒrJ;pɣ%tP.1xg3{<2@R2cxYݬ|sCڟ~ F*$

*=HՖ~N 쵔\"Kz7Q&Tx0ŒI. z܌)/ϔpqɻ+2gO }MD6ť_?`r9ctM!L'зc0RwJBwP (5RK)t;*BՄRB5GrL;M?g3\J^u3^~q`yS`"L ZkI)Pe+=bk&ݍ,Fh{MJ-B9!\7StpxJN2l\sTQnqT˜D|B0&-gs7j-grlR\4M.rb@tov|V7#@11n ](&B<|Pθ @EL/Rw s}7oPE[{7ã)Z&F^SZOxw|r!vI2jow{*rr4Z.F=[7aB?׊vv"`IJ)0ngSR&j52kvzY%nuӴcIƨ#&Z2|-0\~7֜a_'dcrC.[ծj՜c\C ڱ|zً_qWծ97cTr _)U Nѧ耋7 !"!4ؚm3lhc NfzcQ$ESZ9WB\6uvюlƻc;4)ZZmbpa:F8 т<$D1!D6mK) cuI0Nw˅['ptRA8 "yWrc\2&K-Jufk)Zla|p~Z^q⊤RB+FB69\ v?[/\*BjV):!;d75ScL_~Na9R!,1,PBXt~p198ݬl5%O) HVh"ƵVD6Bw"27f:@g 0&9l N5=~R%Eo/vT/v9LjJIbLHm&R&4O)̹n-}h֐PԄnaJl p ZjA\7ܿӧvأZ1~, ͥ/_ cn>Slwߏ7v>*ܴnGkN\/0!\_Kٻi9p(-%,!iZRE8p>ʄ8;S bps v ĥ.%- aRr$ZE5֌ϵ&j)&9`Srn9s٘I5kb`\f>vcQ:;wPT1N7\"!1KDל3P[JJ2kIL4@(%%+U Tjͷ)ZT+ 5P*@ ps)FTQIq{;=D *E7].~}cA5rC>t*BnB)aEs }xzV01emR =Av8~BGgm)R֜6fz-cRޚk,PӏTa:?9{BQ¢5Ј94ݎRN,:ńG0ao/9C7vM(+9@K.%1&sRfMKg;d}Lq!T )P!3RR"`GmNB2ѻwH9ŰӫǬVTkmr ֜P%\"&8Эnw B)i%'pKRۇ&9ZQ q-xoT IDATu3pacy=¸+<@(f˅¹"5't0c0._JmaAKݛ饖L(75K1g/H. %S&t._5Gggaz0(Ű>Z;I݀LJ7nFaB9'k.aBmIBfp)ah-r$U\a.6PqaP^)0rS'UGާKOj=T e!!4/)c)9 2RnV֞cjfBͯ?wTDZ^nsz/i<_OK./M_/_B9 jԨڶ"9ow^M>~f 8IqQK.”q].ݬ7ZʸwS71ƪH߁\_T;B0B v>prNtىPv4vNӸ}{:|e>`Lrr1,x [g2=cL~<۩ W cc;}%C"*pS< gUÄ\rB~ǔ2!O/?+G cL/TdΙ|yMO([rnY.%OI33P-%%. Bv9)ךS\5m/O¸D/U?]k p.T3rhmmP%JI@CjV7pbL2 G<{LhK3lKNB6_tV]\&cr!v\^T28Sn9bQ5=S@`Tp7\juQ6}m9J *o'&pY{LHcv[g'0=S. \T+aq6X9 C!1L(񸢔諘hKN!B)KѷNR.uw=}/_Ww%GEe1Gr._JMMܔc$fޔWxE3>?~ݬ Ͽ̧n)#<Æ1xL0aP!!L(ƛ|Ρ֜dRwIȆz|:nnݸsfbLht&Tm-5_AH W1bDU ۶ߧ^>Ż2C:;Z1𞪵°%wo~;\C0=CB3^.h͹Us}=ܚlqL/1,ΜJ9GxK7ʚ˰E5zP (`p`Kc2;k\R MۍM/TTRTLZWo_^raT:{#cs. B4kv=_Jxiwj}!ĹBf(BsǛ[WM ֺ/\6k287Ft!gkoh!e %c 2&UB)0L79c1d嫗&}a 'ZsӮ1Bh!tEP~=}%r8Oot9| ~\￟N_ *{YNtQ^p|ZmnK7)eǗLjWobrm-si \Gy;vɹR @&x_!J 2I)rYrL1P 7brN_ðy޿}Lr eLft=}cBw߽$d so1)ǚ[.ͷ֜1F9F, ;ծ9J !ALTE#.A$qG9;)20VpO!_?KޘWB&خnBW٫nǧ />qrQJb9G;t:q9nI-&iWݍ{J݊q8w]qTj!B E e, %UǘL9RBKNۦ0&RgE ob`s`Trrpx]%_JBSrfLx`tnYw`w^5}΅W 4^BpCB+\sG{3A?AP-18'(؂Act-Ewc)ᢁRJogLh-LS?s͔1D3+5BRT%ZAƨ@+Je Ƹћnb!].v؞"]xӯtxlJaSa5ZkBf>[;sI?9;)+=8_w߫fl6L?7s=Zb0ol| K\h a` Ƅ"t77[!.ZkM-J kMKo8|…€/ f8Z,󱖄+a cl aH VzH9fdLrpghSJ-Rn>)ㄲms.YA __u&g,_r f>0.u;'@!Sj/ Kfz#4n2nn){Lhj|マIaLP)5ob0P*n Ls+%xgTB@6~!ThKuaWJL-"ZQA/RJc\v9;T"+|lw $eӕ\j%~)=aMnVZ Τ} Nu#e"9 ƺ]_R]βr֜0\()-JM1*cXԺU)R&|Rxw?*!LY^uxѻkI!%_sGs7K-y>VTj3!k!@&r&hfBy7A,%`J|}v˕dLH)k18yWTOZ&X ߺ0A9 +F` "=zK-+)e>467O'T-Y65c asx-fGB1 .ےbpS) \hU;|+0TR\@Ɇ` [qIu˵jY)GQBQU%Bع xѻ`'eʁ`bSJ"uo͙PR+&a"s~yp=}nњVjɘ>Czq 5! Q u27JIBU+@I%D T34(U;OO֜j-RwՔ55SʨdB 1sp˙PT bk:]v6ƐK5`U7*Bĸ0&+¥!^2y ~L(B5ŠHh-}|Οݲ#bq.wwߍ/9njM%gB2!Bh4뛇~'$U[:{ZJwMѴ+F+Tkc=s0j}bQ5lNQ6g+ %4c$9w^V+!MBHkM[)5?+)?\NG.c)1Ơi7r"`e:nV7U\J5 cnb񯤔)Ż9JS B*o'BH͞TS2bȀK7p0pne~ͽ1![Ju_msqY!4v:cƦ R'6WKsK}nvo׶: \(%5:`6)e21TmĄ,CT3JNAQk(cQƹצ9W dT\Ȉq<|Ҧ>W~s?aI>]ƌ !ТΗRr5d朼9pȀUҝmmrv:W̐i/כO?ɻ1c*9B/ƂfwL9R_n*Ϙn] !)%ous. SPz*Rs#^rR)t;B)鈈$Ng~{~Aw`vu޽Wusy| 8mmbZAv )+d}e̠-ƹjpݭ#&_[&b&2xBU CHnFLpL.R ]ջ%QWRRwMkF` dm{Jj(`+0B,4ގ9[7R R I8WB׿=>`|}6%2ĸf |C~\!btB5Fw˜1(3p>~dvuSbAHɃPy3_CwGoptFYN(]~e9FXI)YHC ]CtoRtg͈J@t?ąfûrarv9; m~?73,M2PJ9 QRAUxC o'J!vP1e (ͽR-o^2ras~j z|]R ;zگoK.d.2H9g.d??͗](!P{X Cn(q&Piums0Ӭ9ctf(:91ʄh8D}391, U/ [.YRnRr9R b!cBj0BW\r. !EK6eXߧrs0THy zRJh5ds^5j}9BP-B6sɩiK;Stp+t[\ @g/M5ݖO?D&`><eO)8 Us;ܤjݹk1j30`dL1gݷǿ[c!Pݿ;>@ -9nc3A#%'x)`ʨ!$ a0e:/v:>?d=UDB2C)XRJ3OmJ e\ٿ9V)h$Xœs4dum)R^"JB(r>QK.ۥ`AJltb n%WuWF*Lz壄ֻB4aO mnnV.t7_|=4Υ.da4k Wڠ8W^- a,%O)* MGH̅Ĕc˜jv>JaJi~ܨT\Tde0y[݌/R4U 1!IU};S Rv:Kİ+ 1tW T= 8ۡ*U5E擵n\T'rPJ) P a@Yʅa-%˅KBB &bh}oO7)`~  VwR7Z!X8cpy\e7 %<ljRRdL-׺ f=~v;;׻gTQ(14Ҵ80BJsBR6՞e3c<֔4%4ƥ_ߑ\j$KmǓ4=9wMѻ\U9GFyJ%2~fS2JΉf~n"-WƠm73c^(\_ƃP-(¹!BjT4Qn{1EG ˥^lrNF_z7o)#$MW+ \DnK';nkZsJ) RqS d L1:.Ơ7kԝwWL EbX0YӁaN%:xKK)M1,Uүn 9N-B|gLꎼhbmZ}BL eɃ[j ,$Kywvr)BHALTməpDOfcpUg;{MJj^ @{ !Uʚ 2 `]^R8_[+…͗v>7Q 9΅R RJ ae |9~$?nC Ka_S?ܤx…Lo4MR B{rFxqQ| ~v9쵐7)JCBu~u7/e^m_R*<6.өnr?o) -$EO[.4}@VEX 7B cbkLLH!;p>~>3: IDATB^(1.lKgBjqMn2Ԕ/`G._u< w2h9-X~}gœK jL(\fڼ"0ݛZo_'T^+רa%̹n"%wX,]M9=LKOq.~e:2.Hp !\4]H.TN _0d\))@JniMլ0l)bB_b,Tv]+RC#ƶdLS oXJJꁢ5U*\0S„4)ƒ#b*ru#GJffB(M !T_.2b /wܼ2 ![R򰾝gcXF7_rJzlJɓ\\OL?\]Θ">e.NFgIJӕ@ffBX7+)&QrdRc3%%y'MW2>](0r4>RLG u\߲A}~OrfJePE$mRrE!$[NzʴkL.JO˹.Px ʃ8T-٥JaȁuW3,sR鬛Wzq=)D(n>G?~&ܚtL8R5)#< %ݰyh=-d:?b~s9o1Nf7ctA)jiZrmG o?r9cJA鶦Y]pi#K.>||0v[%vxkӇ2TDAkEJ1uπJtͺP|Ҧ/cJ*%SC]J|*9WfTPR=Uvj{1XZRiW%cʹgL%s ٯ47fA!˦vMÜbthVH ~&T0.Lu-i%\)YV7kx;g/m%=rrx!;[)F޽(c0^Z,/ΎͯO+!mRteα !@(s˙ cm !@VnBlKIT-QF(ֻחgݬ !R5\(f`|;B_F\0y;ҽҭjz Bv]Ju:P)x]o)\|NS 䒑RZ5&ZJ.ST2LߎGZ/L i>Ds w1՘,tϥد1_}n\r1(BiMOKYS3 4%$g_R͛]IMwdtydL9z[uّRwn/ t >P PBjy=>Gmra_Eo3 eraMqHևS >s\9#܄)?Ϧ]q $)nPL v!FD?#b$<>3VWA.9zK5ZJYB?t9@)26Oڹntb FUC)0S RkƨUrKoSty !rL Bc Mj?^ctnoޖL~LυVQ&E x)XUcD)$1XS)Rbc;)2baWwR,dS!v> ݔRWJKB Mk4=!t^K9zK*<#@Hf`F$T(v}`eBB cdZӭ)AsgfӑRCܥ\2)/<>k=KJՍJ#M>~\`xRa)yݬ )#.BYA4WntCO b/.>JSt\ȪePR8Q9BnVBTͰy)2f{(Z ackZDO !d<eKuTHdLB)9ϘT;)9R ȅ&?_2 1R -D &o^ŰPn*VBJJ0 Hx:l )DnAg/Ra}cte:\RR dcmex{5&cZTfNB7A?:{PpUE/ۖKNJunHbFBrM׫Mĺg#T6=Ad+՜¤?""p9B-R^)mDoڬc @x{mڍnWv:Vh P( q%#I׫RИ5cWVwZV) !DfBu)yӭ\'WdU)z7KNJτRLH18h9W )xR ո.+[ݭ1mJS4ݞ1 \Y;)jpmrڒ.| ~Rc9L l\B2ȹDFGMAJ R ~}wz"ɵR=jp:7 2-|{-Y*SJqKMu>U*9%)3Ȉ d PLl5bJ2ڽ",3دnct%PyFM#R59E.a1jU=c۱]5#c2 kLHr+e)ˆ~9WގE W.WnJ!)MUQ& \z76lAy<`]K)xw/܌R iwsqu(K5B NsI޾Cb 4tnyl b`#5c5b캝_-Lݎu({\Ko͐Sf($s!sƪȈ>d l DyιBh!\7#O)Hӯ6HNBjZL v9唤l@_Er$td$uB9e6 զ2c2azݬߒ1(cIH \x;oP\(m)E;_ ^WcEP՘j%ST'h+IY5})1!nʵ2b ~!hG W\nL>FkZwSӿ`tR51g\|J)PBj#eLPRQnY/+`04kg/Bud!u. SFY;ofsÌsz܇eYOv 7"|J<9C!9YU ebtw׺1Z309sJv;)_ٕ/iQiVe2r!rAps=}Vn>߽w#lXY7v|}gΥvuF)&heV"4^*$J1x!T)AF8ƠA a_QbVk;%6']݄pixZBT2nbv[J!z+Ϧ]Uĸ7|ShvtLB5'дLc!.G_棝+e 0_*^ۑϘJQw˅s \C]Z,CF)«!oGӬ19%-Wz}s\sK)tM_RP*V2&d˥zv$ICt)8ӮBݮH!聃"fPR󩈨n[Jrƒ 9(aLQcuI 7ۛ2 ȅS Np*wRM)X[K73eR#J~OΎ7~BQƎ_B6|>|azؼ@go5q4_Pj<1BߒTc)%cCQ 1XR o @6QFV1L)%fMAϘMeL7u~_d70ݬ GL9W\HE0Șc_(@)(TFIȅyLz{Fa:˥U17\T ~c] KM.0zK|rtBp<a ) bO2DF;'Rb€ލ/vSefBBH6QJy<`<= p_"'`܇iUG32Ɓi|ӹMS]W Eb!c.YU+1\;ϤZka~B`IɔJ)!,sөⰾ$srF!d)<6#*Ռ篻jJ![Ƨ23&q.f j"R ЪY{{6U]O wY+F2`Qh5+34r)cm?J<>WDN)z0^ʋ @p QoGe~B b[1\{;QZ8WRe`R?USLsH7SB9#$!/u.usURCp*YDJB7rr4jJwҌ[#|~.(˽R*aZ"ƶ cɻ7)%;_c|B[{{[eJr_n)Z);+K2 T:gR71XJh7WPq.ׇZƣ#paǣ6@B 1Jj#e8uO/xgjf<}0v:R BjJJΌ2)aF71VS^d@ j2Ʈ߅ཽd2[_%EEzvvs!D.V$sEHTyM+wk#, 0ܼ_;寧~\CmsFS~Έ价wy-%n})Z/pnm)SB=gr4v>0B:ƹT_b 딼2ORu!XRB)9SF3FeZsלjf:?v^QLR jXt<o~ÿߵ4_>~Ysǹs*esc!c|o!9Eko ):8Hau*4ABs&9JP 0.TtHe -v>V/U<\#JwB6M‡Q ݭoc 1>^Jt}te}~|\ͫut!GBݶzI] !y}sNJݞ1e:Iǿn_Rn7OZRwZǸBsI1XmL^ƣP:PeB50@)~h̐ !q{]./ki]7T'3\yITBW81c i)/)YFYH :;r.1j1ގWiSe| F1Xާ`1e:nRDƀ̚ Sʬ(AJ)c./үB0P9~1Mz Ӱ?nOͧt~v>U1T ֥',FGHqKef\!d%^E߮na;> 1ݺjU!01`"e?f(tn};_CU|}#T7_SmU#9)s.)3)jzWM 6cs_(%u F 5E7!zh6BnuLW埔j|B\4: eu9%߶[!|N|~ 1JLק:{S@ 5)a%cXѻ\k{ 2cb)˥nn_D)ɻ~uK `M |)FbRiʀ M3^۫<>K=(S1;/~}_i}UJ1YNo#H8_)ЦUl,Y72WLrS.%c j%9#<]Qc[F+v&?7~bspc.t.tJrv[̑K1f8&@etj!OJ9W)oGRJƔs>!t3c *Ml=) ian9DMǖR@4}~e\\g*5*v˵ cX \yybf!pU WwSNq9;1Dgctލ-aZZJKԯnsN{xxjcRU._(!9' \@CnҴݺw_R+)¸&\*c?]-m s?{;jWGD]R;bKΌq.L~Rk9rJ)ntMU[ԲX.IHc0JwۛoBX26MMXRbXhMe!b/O]`p<Z}Jdbmj TE2}X)΍U?\-ܯbX9~u¹A!nO )Rޏ69B7FcTRJoLFpesFBJ2 v\Vt wޕu*TLSk'v9/)8kD e{sþ2ι % ݄);R3_SIDAT!sIs 1H`SwS1Rʀ9tTB/V ~}Ϻ~ONeoO?[.ގd㟗0xRAmKKӮ͇PŒ#b^ %Pi:31'Yu:D nRarjz5@vJrB) a7 i3Nݷ2f|-W!̥Z)R*Sh1%\›S9l%%W2 $0".PFY!GtfD7x?`N9cΉ1^J6ZʀF)<(e۔Rw$u NaasAJ߬w/᧷gkw621sr19BJ&7uژiؼ*!̄Ƹ]ΦYng z´km8>%g#pA?k"ISBljWVn:ֶF)%.gzBHd3OtPzzq#&Ӭ?ޘO,T3]JRJ0z U9B\B)EXcIReX,LTr&0ƥ4nXJDLꇥa sUT혢Z'`|X߅1|me Bݝ_=c#F7N_?ٴA4kRT-v[Ĥ:QjX=`R1+ n8;Pvpr.):.5!,͘) ZUnqvd/\dLj2k7S!œ1 p׶۹LW*a;wǿ>|{=}T*>gn)] [B),K4,;nnKAFi!PRR6v>rhbP È t͊ kYH@p&TaJ =ɥ[ߕ1JQpr=8 il)@L}vU{@%cMn[R6 dlѴ:ƥ0gGRJ&_sN\mtzA^&'ƧkY9\Ƒ%Er%)B>a(-cYgiW>]0;U2>9圥n)ay bPH(S.O;3䜂jB4@",!\H5>S)( f1I1(Rrˉ\Bpnx< e ڛEo z!s.֯no~3x3Ij5o T!3.(a \J#F#j\*RwR z7C qkͥѽ_"19e~o]L]p[Tc ' v8?g`061 ez,X7ێ=%C:bh]6@EQ6Rj(e)y\A\Rcq2P&n3]k%Q#\'o(Wp/M a3oCϿDgb"K0Aeͷ):xy- 3/ӋSRmd͹掗I,.3*YȆ1U#u!o Cb\jW&X`[J1DȫBBiJVP_\)l1BϵreJDo[:2_ڴ뜓3cVʖsջ9CuZBRjTF6PIhRҝwK@$~M„O̅ʹ~s3˩w RmDA !ݭ3[ B·RsTWzNMEgd s>ɥ~uĸzKΙaBwC3eNRD0RJ7wt*dc3r D)U݆rXHpsJev?Ro!"u#T;l E.;+M *]77J0m.98ڵnWr!LmB9U擒n5CJJ&!] eLʼ+èhDW |\n7 F2!@9&$Vp. E5x3[qO8!lJ \bmO߹LT P5L]3{5_+@dઅKSkR^ˏ%Bg+nsX -2!w34E' a0_Pm Jզj c|CRε^ nuvyzT0*c)^JB!BcB0PAm-`UvYN@r"B%]Go &$.J,ܿ3BE^ތϫ-AhY)WDoy|Ƅz7\$ֻ)A뚸e\JMׯƘ70@Ɣs afd|&d!CڼIB#@˜-΅0VPu@o6o˗TpAM!x[R5~8lR v&G`T~x#,EcLH=)S *̘)Br-)9cBk591ƄWKi{ uQYZa얫lz4/\ b6\~s !D./*nʻ%9PxT72и`[y|*ƒ3d<~e4]ʘ=׹)p ~u۵͌ D-aZN Lj֔qݮS[3h)aP uݖq1_u;}0\wv:EoPk\Re)~};>S sAѩfm擳S5RQœRBkjT.SL)JBN*xS %q-u[!ns\ubH!AAmnꛙ2RΎRB6~QU~N5N6C3UiWnVM^r}OyOT TnknQ)!Bi?vksb97* }c) Um%J6F;| hQ8޸JH`rJ-OD2D.;.!h_*ygzd#&1ɘbB̅PK-TKU"cvlok 1nVKjgB2&R 91B.=L9gխhkF5v>[s vNLU*&*H6%ϸl_OE}ߝZj¸]#a.cJ޻IꞮۺcL)c1X]3R|!1VxRƆo{ n;|jۍ@ E[! RwP[B((u_ )̨RU7~nQ͆K]]m JwPM;PB9EƸOk]gT|r.3jAHFPZ M)(enӯ﹔kݮ4tۦݍno7S)1~> z}`"ss /?4:2_ c VNb$A䴽Ut[ɸIENDB`lbreakout2-2.6.5/client/gui_theme/spinbutton_arrows.png0000664000175000017500000000035112140767202020255 00000000000000PNG  IHDR U~gAMA abKGD pHYs  tIME 7/fIDATx͒K 0 D_(<]8ݴR.*d!6DЕ$<0{y`+#b+s['ѷuXmTpmIENDB`lbreakout2-2.6.5/client/gui_theme/box_frame.png0000664000175000017500000000063312140767202016420 00000000000000PNG  IHDR ˰gAMA abKGD pHYs /2,7tIME  %#ĴiIDATxmJ@o2wXX &n;qoFKAlZmN3?Q>=j!HZB(}0:ER. vw]ϲbBaWmz NZoOg_<<Q41TMB/oj< *u8̱۽+˵gr4 cTV ,q?t<{\24_?2#\rŘR3_1vn9f1LINSl7R)5&lW3gzkefg^qǹ[BaRp=w$cl 唲Θ1%Y{WUmeJRr,a˳MBt[k [% Snf\$gL1 grA/#bBSrN)xGVs.5R}2sD&bړ3= fOhmURNϯKU%%ṵ̊uvBGo)$%KD3lR0q~oس/C.vpS7΁!LEBqouY̽>.C !g9#dHMfl6}~L񀈌2&J5eB9ׯ>Bvی,ۘL3@z\Ui73!RA l %B0)"&BHΉ2TPBxO/ߞ>veܛ6aۜcr)Ҍ[LhVhV_jJn?|s查Cp\ cd<{۫OvRpϞ~+f/gš#:IȒ={@* aPbrUPc)&uJ1ʕP*ڌ ShWOߙ1zstS?`BOR29ufq3FBh LvM}_6FnHÈRx$te=LgL ;zB(қ.'d)DMsFDϸBe3" bp9E2nd\TQJT9;SLi?™nz'T`S\z kdpv8$u0[ bT52^LLrM3J_Uz!qث 3sʐ۲9QrvRK3b@7 UJ):@3ɔ2e\*!K. ?]֍&ˌ1Qf;ko,b B8\B泌fT5n0_<1ie)es\d;*cjvͩξLj3vu|@2I]U1B&g2W,jXT 1v!;̖p`?P,y{g3s]Dk~0i(,[}= (QLD=nOwcT&uU-SX!DžJ #,UKgL@3ˢ&D%!t+uE]MFϣ3F]r V~rQ՛Mq^Vk1 ~̀BU=e2f+ 9ys,cި\7J $o=7n_cɻj~e pF^g )L!LX)i/ghxn㢜e={ 9Zsgˋ`z™KØ3ʢBd$.^RɨXl߰Ͽm׏oߐm{l_V=b"QT1#2MU1xypSѮH^'Buэv`ϟڌ۲M(teTER 2B9rr2tt#fCwCvf(!Qx}pHdL7!= SLrNBW\꜓.1*LRs"`nT I\)xU͋bqWs .vs/w?W3AU۱LS*0+kf}/x.\s3 QT)c›a}vx#6ϝwfLPIJy;R!U⢌%/MNY>6]՞=N_C&kƕ{;(q7 B9gD0r%T F}DR3$.t #c1&sB#v415b/u@H<%@)REo)(UÙa`BF2d (rV?EݬfL,(dimrvEUԫi~2<߿L=8rbB~DD&]'O~SJܚC°<{e]/u{~<|Zl^]}:yuܿ+a>E|(KpgRB(b0?\{{Bv77tюۿ\fqa-8RWws2k-D(\m N-bҲ!nbBgji\|N)'/~GB!!ZXwh vCo% g:xYC/?xE ϙ0Ƽ1%˜RmJrY! "J@ >EO) b9 0{7)g@@r~ZTq]5o+wٻPBgn!ESwڎ{Oo%c1j쯋r tKݺi)^Lv~~՟cN)p3eٮl6M{6vPշV2ib࢐RŢnיF]P"jfYʪ2dў>~= f~rwԥލ a. ȹX{?eѬeQq./s΋哲>1öʹ[ʌ!U]vU{^TIU?a\* APTbLN b @(c3Lw,Sp#b)07b 9#jsl7tWa #c+zEQn`Ll>{R|WBUvSυj # 9qX?O9qY?HY׋?./b2 H^@9c\ Y*K#@!#!(v߆`Up&U5\1UH]K4GrFĀ,Rpr*F(%JKJ&TtSEtc]?}m3LV>Cf\ʼ2Wqs_yӯ.>~?Bcw>dSLd\#8Cw,c1Z eLQƋfzU'P.0zBh sN,EϹz`pQZmopܽ_rn\Qʅ(\i7fAn/f`{%ugۭfl&YSVs!t J9Wcw>ḵh1fX׋a;s YJWK. ggW\8'X 2yF0L4c(ĉdB?nߦ`^&)aP)xtA-lH)w̴?ܿEJYmPJ5Cy p>jM9N4{g25]YSr˓o>^ϙU!CNHդSr0$>1` \h3b2Ci` ?MǛZ S"%O17jsؽ`H&mYfRp)fWՌRe{!SBP뇐rf{. 1D7Ys\+BHӜL>%\~SŬ(ڌ]^j覣PMpc=?/*رn gE1sYotؼLA*oG]/JmUљ!CNR"ggHJ̰?y7`)Fo;d rRԙٟa)jv~q޸1E=#7Or '9唂B8B EY9So.w4c91sN0y NWiSEk nO jNގQT1 v~b23~OhW_Y?U71Ƌr @(!q'e:s93ىwɳg9DZ܇(fb򛋯!hʡjϼ)E~ 1Y5+Jd BR,zl}Yի!3NҌۄq_h 9g.5`'/Rp un9Ւ#= _,C$x)`ís] wB$ù(1FpzHBOmQmTxi=~tf 0(f"D)C &H8U͉h6@ 8>ܙS<]FdO 01B(l1?*ݨj&u9n() ɥ RW҃ЧTd@B(!cL`9EM–v:i˘$QBIU+wozʄfe1C9vv81Ȉ\|em txof1傋"FG!#FΕwSzo@zqnٓn?}ùCJ&PʘdT兟LrwC1)W17vd<o˗=M[].* \j1= I973U41 K]g)XLΌBILX{˥EvϹ,~Ps!gU0Wlv\\\\-crnC΀(%)Eȸ9Q 8 j~nswC5;HogfvQT'8ePT-D)V1`W'HB%!cl/uivg۟BtiUJ5)cq'U^xeq1K%k]afܟ?3xUVkLav:r06GnzsTas\;1`Us$u a)ag<Ƹ9mǣO1Go=90gJ,l.(!\}J(?^x ۾' DښC=; n(bSTݬnO=BR*)c`3Fѓ IDATU`u9CDBr|?蔪(_hf:>8!ؔP@)F|qbq Ƙ )=Z6%oO 0ÁPLܐs˯Mv gLB)Q6`;8SpBW٣3\JAJUs cLzwQ{]΂(Ӵ\!f]1%׬7˻Z۫)L "n &'\io!uBE=?ΎGB 3)EkJBYI E9; nXl>^,sFB)R Prr/z7 Y20 2CӁq&c sjOt5/eSٟf<0iv7}hC &8K nʈ)ĘB1TQo9EPJR797:aƲZ1 e 1-{bynhVB0^W 7u1Lt\gw}€97h3SSލZdԥ cWrFLH~=vv\_mpw}Q1lt۳_OߏJS SʽwɲQɫpO r̘32Uޚ=ԙ7ɢYcpݿr9/et!LDDBUst]ϸn|:n>E!ƨ&&t˄ @&1]Ι!0IQ +GCDAW))! /@Vi+뵝R-fg\#z$!zwƐseAr )z!f̐1(i(E͸7MeU{Ƥ*e1ꌉs)uM oS]6EhWOR.ojeP˜TpJU{rEќ>Q\?_^*찭c#!a(eW?WkEbO6CzX/ΛlZ\*ڔP΅qThU~Cp&c$('/ ʸ-e\h6DSR`{gx݇@QE)R&)ge!UYR{)K(%ee1zhY.3 4c).f_-\4ޤ0'@L9~z\2N vȔ0D ehfUHjv:|: 'o:@ J1!ʌ q=;rgĜ.纚~z/^>S]WOqQ0!O}ea<\I]@(fW!aG)W)8BXYTnmRmLN;cΘ3ɘa[k&5\q0i .s+Dv,oїJ5o:o{.鷲h3"bș<^3&! u1$n봞JG7uB bjoˣgLJ&d>IWKL.xp#2e盢\'yy9S)Ńtʸеm嫿nV L7,ת^i/U]O`LfLB1B(!4cRqSW5p]ի=&Y}O(K;;GbtC|ܾkT1[Lm=81zϘq;sJ@LA&3CRN)B 0.1*ڱUs*&y˅ Y d\ry}9odP"'o䕞N`rvzsP|yiǃ*P.n.7E?oTExKU Qcxl}F\.F; ;.7(U!r U}A~$Ǜ& فq3ŜPV3 E9gT`+gNBR3Jh9ҵ.绛6cnci~!KU7  T%(7ݺ8{ɈpHS$g#:Ͱ/9Ь3"BBf<`z㤊ڎ;3P-P @.ut I t57`s fy\Y{C4҃eRrFˢhio?|G{sT0ʹԄRyQ 8߷Ʋ>QӮ]^Fo0`{]cc R)Zƣ0Eٚ{kNe q?m}|l]΀S쳗_p!s\ig{L"a`IrQSkW??zgnr΂r 8{d\pcq:}fZdLB #MFp&Y4qyUp:{ ^]4܅`eD?)鏟dxߔ0@(|])cf5^F4c (0*x70x@E? [7ݴ7vb9y,Me2;%0 A^,_vi6ƴLs5 O]ƔOcvر~[.u1IaӑP7F:HXo_?HB)H1YRq2:)cB{ۛztgD7翦) *D 0ZbdBh@Tl%DHoK1;J%',RY#"q)fqɘDJL0'M)8_l^@|TfB7INۛ|Ge9%K)svQJ>cwۡjNr )xSmbY,9&dݜ2KĜ\~a"qɧ R  aB+7=_pܐKK)\LI7kԱI֫zu~X}F ;DN(R(r)TrĜW= 4~: o=K"4=_\%p~r֍{U\gj=0*qo %7av?R,7ol1U0ʄ6`A\"3J7J5$P'gos͒ K\<aX]2UsJ5ʬO\WZc'Tjl(\TĒ3bULq!#!9v/DJYzLH: D?0&l/MC! D%FoCIS|~1DT'ﻔ{mAW˱fնgWLBRaVT\Trᦃw^2K#e1NZUl cLJR;`)X! KvRIp&^Ǐts8gFqUiJ @ HU00LIƎ,Q={ъyɅa J1.t"PSJԋufgjo&?zۻ%;3sяʴ, Jg@`)@T\@ 4~8rey}bi rShW/ F=0i8@HNR%Egw\玻pӬ!z+Tz./Ois @KZpA&iL?MgK#u @)rTN<jbr)LZO ֋˩$ƽVvxsSpcp"GO(%XJL>E+U#I3.LNj駎qg!Tpdڭcij3XPU-:x 1g*JǒKN!%J(i\/χǪ=[m89Ɯc44mIю{)fue}NXR tLQ.QE.sVz9SX0{R!@F/?ɴi3}:}~7iZ!t.)Onr͍?2(cU}&'2(dO)]W(X"!1GS*nKn0zyA{ JI9RW:LL~a)Tk7TPr4:FC8a+DҦ=v?AJiY^̕A,BH!M r}9?-79Ma\dL~BJ ! YqYJwR90Q(e1@SRfKOwPT{K]seɑqCR^J)0.TDD&7rǧ1._)|8WSwXS`rp,T-tܜ|x{ZU/qxL1&7o>9QF(ev_. ~(9Ǭ):+9E 2! #qRqӑ3f]w4jq?P0'B);WR7J˩6˜C.S\躽8XS8WJ򥔒sT<%T+; \ꧏRRL90ʁǩdkLz !,%[r(2U0bbb\*~0ժ^]297@XH)T; LGE%{w\\~LF?%jNqn^&O`LzubF IDAT=ůlN?){7s \J\)9BT[Bh8E?<A,3ϖ\bһ3)RP9%K͊2?U]n_R.-Y_r ׿ns*x||䧜?I`JSp9G.\smtE1LPDJqG{ۧ`jr @ !4'_R*%rt Pk+ȸTMs8Jnsaκ^]o8)2RJJ"TͰ%Qʥ〤ȹ"1)%zB9e+#U%!眫zLsS fB :O@= jqFY:ȹD@L3޾LR!9S\֔˩{Pmw1幛XpK$H A dr?sLYdEBTK$\ϹF)yJIDLSݜtXn0wsO?0*H0QƸPX W&;tEj~ aɌi9MvxTeLx a(eOKIڬ%TJD??F!Mfy”cӡY\j=vw Sfi7"ĽD8o771 I!k]W)u}:LHʨ6 eM`lǧ2ʄ%1'}K)%):)kRJn֗ZP2WUctjR(CJN6QA0s){?uO)[O{o C!'O-%QBBVcvvOB@F7ǂM2S @c%Ekm! }Z99ݞ@;t^KzE?nO??ާh 1yĸ1]Nxsȳ7A(-0  |JEAW!@f~l=r*SR@L u{ھ? DPzP)N%Rw9Gu[?E.<`L &\I'_|_{LYv̲Ԭ.ݴk/0^K@f\jI(P.|ZKJ)̲8 Oэ^jS^A3`9tL UUͩw=gBRJ1]g굳_L-%\,7Τw<}OvGB(_83goL)){ad+dcړ=)ߗ  LsܔP\|θ:~?WJ۞%w۳M]l^]) ѫU 8s'7y{XH`R7ǿs.Cc'1 %ǒxw @iqiVfdPF)4䧹C%#tB$g9c8yxFR So(zq6'?frWӳv̸.%A)vy)լO^M3baL"}IJ4<*9\%@)ƃ{e-2YU%E70qm.Qƹz>yIVf.ϩЌ,Cܰ# Y՛w$n#gW8!ޔ Ypnbٞv|qyC)!T)c[n^{l9Q}w )~#,lܾNiœ9E`Jo`C89[':J饛0RpBjB,1"M+e?fS'I]MLJp~3"((UiJV*!K4+lTmΞs7_NÃVIYUr,  (P:e~(]PJ Du)y}'2΍&&K9S1FBy)JQ:rrH&ݧRSWo9ixj77Ϸ8Ii~W7xS-Z/%r2S^B(@n._frʎ˓WϷn\g9=c\*:Q*O Ɣ4NOMs(V:Kpa(gOm/El @=4) dJfѮV뛪al1\eOr;{ ̹ 'is"y{ٿӱdMUmt)$J)QWo;oss H2V/.Z,?e.&rzErny54'[.U=]Nۋe{Rtջ_?~n=|>y:)eLXe1aGd-,a2[,َ;$XJb\WI>(HՌ#[n^R EO&?͞`|քr(:޷cZ\}.12rrƬSBrSJBfm cM1KsFf)K)RU$xؾ7~:Pc7fuC$LM,9f]O)GL2*b1%Yt+DUr%Ev^|sxK͸z vH?- R5,RRN~W~S˓W@`_|k)E;ú@XvnfÄ'JE< ψ% ]3;/_ƻ޴u*$%G E=KRܴWUvuSM9cT1ʥi fJPU]oBSp):xĨB{.n8ϗMǙ7R2PJdC)9Fu; O9eJYaЪ.?ū2kLv+!LnoK)э%}NPʅ.rNTCΘum<9FB=`f\Q?nNPvWB)~DJ~- HYz5^YtLs˜tUpo[$0* %sd/ U4q9uuaԪiW~=rQ,u,Q[]-sp7cwO7 B֋`{&x6I'obs}IR( R\_-Nspݏ)Z7Vgon eL6LG"W\yefq:G\`%Dþ?|p8iznJŕuJ.E72LBBHI rsi"@?rvs.ҜBrA ~¶W_&j'l aJa"@`1~seȸXruٛϾb3.K*9$ؼaJTh+BHʞ35OS\ץi8ܧ/^}3G]sOW%GR:>Sn12/)9q.sN1;x1rΨ#b ?b%)K^_t/^Vrux+2[f`K*XR]mT~+12.e#qc Oe I9LMp=eܜ^}i (z{S-'@( bU)!'ϥ\וRtP*?(oSQHч8ߙfks)_̩{!*ea7J(aTz^8ߖҪ=^JjF9"#@E}sxMaN@(bݞ1SLk\ YͽmX,1$T]bh7%z QBݴJT4%9ؼw}aN\Jƥ6+0K.MUogrڍ;;ẋ27 o!?̱7QIwiULq<x0tOJ-*r}=%'(!cIa܀ٲw_} Pʚ3 \Y_%oSr~:P.%yLcLHQVervdR7ßW'oY>')'?8Nٯ.TAJڼ0 QUB nrXJa e<*E+ e/!T-N)roB׌%K16G3GɕbvK2oMK@6k.w¨LԥZ hwH̊0~:jA|8'R .46z~p~8//KL xz}t=bOXJLRJg!4o\B))" e@"4{DZfߖDpŤ6f NnODB24홝9Gc/!>09vwv]JV yn4 ȁUe[Y3Dv`{o~: dHeR ϼ;̛ BԳ%,(cHB&䡻fD?SJׄ5\'d|_JÀ3rXo^RFI4)!1s3?ui|& BJq;})@rrJ/JN @)YCNaށ@<.~F&r )aq'F?b9GBL(sA<1$G'bNc) rusH9'/n1Mx|Ҍ#\~V7winCฬJ)i?^  l-`J`{N{BZz(0rA(!󶟺=_.&cZl?K QN)K9{R߰~<keT3D)q\! μ1WbyQ[7u*vs=z?!E Bۜ)JẢ2ea)kUfmuTѶ S},`N䈘sҔ~ک Rc+%6pshW$7݅훔}cJ^VիCE/nni717Yu1?ct?zK.φ2> ),%\JyNjZ˳X//qa||7JI{0^aQ8SZ^թsҙaI3B18IDY^է?eSH p<1&w?L{)i":`LyV7bL7,b[@t{h97g.+Vw*gG=N.kx>0ֲ~wkaLY\]gVwYk;BDQ /f)1%0xKy"0%Q^{MysN[!B!3YˉUGB[K IDAT+[DY#@EEgRJK{4ݟE>?l~,7.^'T#L'IDY{BdJ`DJ?3 gut6R4%,!s(01SBVN^ UaDX11" arx'l4&s^63aQ-L0ư8{!HI&BH{ JP)!B~(lrѷa}N ;x#ǽ@ꑊA$mJ)8F1^輕Y6o:3( DTso&zS6gz<23#Ȳa ɳI3W'q99z8b{Z][-LJ,!տn71z#[8%YJq}y7Q5m3c1R@ $>Na1ގ ś?rvvܾ3Fbx@ `مs#l,EgԐal;0J)aL>c DO&sjX,OFCz̲a|"|fT(!r9ebrg!Yϋy9R !,ZE}1o/vw߯O_~P"01n"DK993B͊BDYԧفKﴑGTQQ$RN2D[.53KjgdV.Qas2E8E!jx3hus O!F<_?. 1#a;Rpr#Fh&-!aB %<1fX=L;=fOSJ18ΫbQ>xV?zm"oZ zB9Q=$8>1 #?)ϜȜZSPa$3Vfej<&bt"['b?ʋjC">#@155%!U/+c19]6gr:F:rBL<+,QZpVQZx'x:5t)W )x:Nctw7O~)Ӊj^g'.vzMة@|Rぉ\^ErƔzc)xkF0ϪY^jƪvz8# ƬX6'jS9(Rrf!BI `1&)E1y(V E`ќ9')ϏwFxq Rp?Cϯ_Y1013Hy4Vyc`SEƄ4(U}2 [N c^/!"!|YMCO1~>K5q!F`U;nɏxk7Fx6S50@g"Y='FOH(GdyU+H"RtSr\cRXO1QgC0IUth"ج_ci C{K1[  @BȦϛqp^Y7.Oa̔lȬ(t4 Q^ոK0lQ-x63)v#pFv㜁#& "[ES.Ww?ϭgWۛ?= [kGe򖰬;@c?ylcpkk3aEMyx#*o1onHiI!pgsjboa(5c^xPNc n2^rn[WK`^ [E6 !"V 5͛S=(y ,Ϫep6D# @NraTH)QG)cQ1oʋeByMi_jYgK51fiLDZe^԰㶨O 9 ԫѻ٫QQν Uusb̪5ec eUJٱY^$~ !X N!ĈPo%jvALRΌja$xVMJJ35nw ƴV pg>lޞ\~at/Dt{`$c~RL!@,!,D`",A`YCEo12LL0FɃU1]!c%(+PFaY28%sBt(}1A.O^ -g@?|J y@xVS#L(7{Z !4ADX#b0_=./ Dh;')-zU'-BK({/fypNOs@=uL~~.Bp1!4,^ ! jݪa|<?}.ʙ)#@m >E Qx"Q/GfgFfZv"9OUQ̭ 3"h<7)&:FRGD83/fa LV.UT8=&j_]90 佔6x)A!1@@J>/OS 7S9Ŕ@wR/'R!)>zJ~Rm=WO䰕&8[=EWq.Dca)YcF遀(] Y^[;dO.8֗_Z㭷!b͠"L 0V qK?&%o> @p>x;ylR "&J[kƩOx=B>ؔ D`}7)/CtΌ3tʕ˜,bFc3Bb!*SgIƹ2Pg˧zWc^Ȳ201c[TvL "ˢ\q?O.φa?FA;F )z')Ϊ__"o~V`61 )ͽ3{[V#;B$ d̨017ڇޫLdj~y(y]#ٕwNyǝ(CY>{0b3 f+e?ܤCqho \XA 5C{b`< kHi2=j3g%tgtʬZUKJWLv"aJLko0ac:0Ni Q)˴l#ńqrGI6vY !ڍfYWs`VeeV.Ey"D6msG*`2MΆicou&Hh>"l1x[gEsxٚZɳ/Z!FWO/>򼩛3/f/U RU \:^EgѻcJ ʡϫDx~R -g}"ty5rYղkytN۟ẍ́Ή1fVc!҉{,/fg1rvLRagL=b>ag1¤]o/I:c͝<ju|%z)_uG=x꧘je}ʳjlW_?wǐ&,sZb љ`"'QY+rg x]7ldSpYլ}d,ݾO1ЬB)[!_+!D88#%DeU1 „aʝj{7ikC!D A[7Nʋϕt%:bL ď^_/7rʋM-S *i !AL|ϱd{  NEu2Y6ٌ,yoD)LD RB E 8׬xKUvNcpw꺨N?L0BE >8yfݧQ<0aZv_zkjvV٪bla"X]ۻ2;L^ήW wkpJV"JyJƚ>ʼnb j墠 ^e<+֘4͟8AL%z] D)iV5g!πpyD@z"l {R"N!?@DY{2`MoTOy1AD33V1F"=#7;~VOfLG췓e2KE- 3ެcpz";L1B}EBm~XٶwWc7yAV"3M0PZOky@*DGiSĔ7ahSQCI)x1]_|K.D=Z< *2y#"~j՜>Z#(/猗1:#  %k>d ac[OUK(?+*1>+O0` ]))iFyR1 zvƽ=ES! Ջ+ J ; )Dnwc>?W1Ky7Kы|fѨZ^y,3:Q]^r0;0Foo#""bT L{˓!:{G닯!jAg/ST\vac1x,Oto5,x[/3LԄe4G7=QpVZ=dY~<_xO(x:{c=X `Z_|Qd 1N)1^ʽQlru ƌ6#s2gb= :[͸@!~5 цA(?SHjh61zD)!"ǘdBTs5콕yy:=P-oe|$9ko~x8}RlUm7,bY9GCtY6 NeR0(fJ Hq:cf hƖ<+h]bdTvv4&FOcw!ogfv>xf YȊB3/SSa;0_Ջ9 FgO.@u)9bCɬ\DgjYn`N1^BM{k?҄h(/~|b\NJ s GŗY΄`8԰ @(*FxNzva2e/_n{%"x} "xE=%QmQL=Ӭ\tfC{Yn!XD(`!<(4'>pJBISHiaY\0^Doյw3wOf<@B2mUr^b/ggR5wge1;Ce{K0Ä[3΋(gV1&DHqc !}ٜB#;1BX,^=XԧNnww[97Zr3¨wP!N Ɣ 7S)FXKg =ɺB6o!8gY5HBpfpFV g%gsSn󄠕{c:L.`vlOT 53遲!3UJL1D1O)eQĘ(˭ /)ˆ77'Փ]fAxK=DFY10Yե(w?& $z'bYXo o;DjW)%AQzC h z ,z;o <"B~lo'x@uUxg05nٕʫ}zZ3W~@h:bͪCVR p~|:֦K"Zw7A˷Չ6esOΌWjiyM bR|D; o٥3#L$D !_1^9g0< zͳ&+&lS)&2^,XV Qհz\4z0ce!Tîh.X^BR g%˪9fsF"BsnJ!?y@\d]'iDL {P՜yUgEsH *:Ba©1'Ҝ,&m)Q-R`)ydy R ;I#Ϫ>GS@Yu7 Td\{3rP5'ev̋b{}.xժfòڛ("۟Aw jY9_?Vr00SQVg/ciY &x3vU ֨SV ELi5leAz@w?~,bOFfz?:.Og(TƐuZիIHm~$ղØM egzBYƨ֙q}ƚ3{KY0ޱ ;C @˩ݧ1oN)ww?Y@rQΙy7,+Ǽ<%(xCX!D ]^IqyaLH#ç BLއj' Job4ƴ"'DV D)>+gGհ%c&b)5l'T!X ˆBnRWSoF*AU 7h+Ǣ9O &g1H6,tjxտ;nţ|; ת$#pLϧãև[;P%YtyM(ǔ#("hj1eE쏷)z遰B!/SNPDz9 0Qvc|\ݝdLoBVN͙wڪa2!8bGaZ/۷j ^t# xV;5`4+S!+! UpzjOa>%xVoiZ`5/gl79EN1gOo BagT1wVʲbNZh^ wj83ƛg|韼]Z_քCݍN0kVWW_x8lβ&JZzvB1HRLީ97)ZS"D9~"HEseKhn1dղ}rOXF05c;5"es1CSY3Vx#H FKHJ@;#|p:+w0iQ}!G&BB4'Wߘ ^k5Lc@ ;)„N1x9l!" 9l(0eF1a`Ji&ͯk AZ\!B}1!b>gNח_ Rʭ3*M)x)[%켬L& <ƶ}3?am Aw~*aNK5c @# /H ק !Xx+!Yר;E(a7a9byubT YE(SP. yy*wysRz b2BvTMtN3Uϫ &lkayfw5}6!:?Oˣ3M1NBQ !FADiSS64!B ll"noDO ,V2QM9SQ-1e7ۻ$۩jt0!tFXypfDCͦ%z~'b1$Y>obJs0y9v'ԻKU. H by$4L0#EVy$XnUOXN L@X>+ _bqOkY酏X~gUVeeU7ېipȞ͝n/ A 4{lS]&+1/b5u? sg/{q[0!DPQXձވrQ.~3F#[³hO}B\j<_?ΗO~_vMY S$p~0XnBBDyvPU1y+&M~LuVU+^Y9;l~h_Fo(1ơ+/ݷ72Hz12CYjiT0^7?<wՕڇzj~Y!#gӝ3 "Hin` D9=" N(-S릹Q-R xVL~Y(gz8Wjئ)SZ8fvSWc]?-jxeyu0LY>TOBD\eRJ[oMnqY=_A>R<B|41w?q;wܫnGPR LprR*;~14'j8hs|Y/`Eu7O۟.}Abٜe3~⢂C c2Tx´<EnfWZ;1^ ;LgF `w]a([p p!{8={Y?#PodvzOE0^ΞQ, Z0gr<4iǝQr"cMV,19<O SzȲoc 0TL蝆yױ%<%8v=D CY.W 9$}=)չaB8D'DEhf7Z^rQ +rJ>ܼE=na>/V??r7ȡ&y?cwOZ3+L5[{qfl7ۼ^aH/U?ǏWF}0_){5'c^9'ϯXCDjS3qAĐ5kϿfq9)p`T X3`LHΌVN\3Jc sB$x7[¸l(?Q"Ͻ+g$_Б\G5 Fi7 lHǢ9>X5GE3 V'0P*Mr5jq Q@J!IUADUcH.2՚0zUƽ3ry?]=Eb"CeʊEHR#FwO~]V,@kJj~䱞]ՙ5?|䢤,ǔ +n17o6RE9sNkf; >aN% =YVWO_6?^?/֏8;&qMʀ%[@J!T+cZ1, NQg}AhpT3#ع 5WtS"Ta@1@֌,>D>(C^Y1YpΚڪadLOU:p>@(,[J謖GU=B$yow!L[90ϛ b,޾/f'c"mJ^\ÉH{jhzow:kwcC.ɛПBdys&O;9|znwﯟ<Ϋ x물zH>y,wAg1olo+&4B"0_ǏpQ2^b jv)Pί|eT1c*AHxFP.C<E1:f<ן> }D`1qv@d9=N[םn)l.3t.3T1#8XscќV[3b*S0AQś_YbI&lۋ?̦5m s%Ovl'/a:VSqQFu oS!0oBfSL)1a*0ƈPByZ>æY=)~t`~oҨa>bⱳ2r~!z(Obu24vw N3עXZ3Sᝲj1zR$,3qֹSTBHy&̺[091rY-S =E^4f>Ϟzowk,\,{5Ω,k(vwV N0;@ycdkL7t@1֚NOSZ| Ks3-!RvNSB;|P2z۷"FWLcJ `̽5h1  j~9Pjh0VLT1:Ȳݕ<'ʅ;B 0 y+1/AJj&!:9cÇN;qw!LwWaZ3#e.Z "Mu ! R lS  DY0PFEi`f ܝI1ƬXouQ.|6DԚ&؟>~a"1j~vvKś_ͽ<_q ۿWc@2ZEUnF3CJ" )b0f8gz=Y5y֌Y/(²]VAY1ת5c8;~y9vÄUsa$U"k FS"sVzD1+gW92z<7gȎ0NHy IDAT} YiXϮUf֌Y35wS7轚V85X!CL(!:.) K)J[ ^s]Y|0z9ϫ5ؘ,J1PQ`LYTrbrfta&+\41gzvjQ̴n!Es1_?M ^^Q {fjB<(㔅ŔqѤꩨ@Jr1eabza bBx&ۇf߀9/G!n~ ͂w1%ooRvm:ƀIN1Do!Dr.jD)BɥeUѬVlL`x3c%EtFSzqp̘ 6ݏa;!ݻmc 5K!$Eu1cyUVg7/U^GYY3 xYV;o~yS F-[oF@[C0@Sޙz;DÏ$.gWFkJ gFg""4!\_X+dٜCחV1A„l|pF۩Y b) QC>uڽ+ =BQd32@y6-h0Us΋qo0YJ{sQ0ݚ^ 'Q͝Q)ZHx4P!Eu. 9Ĉ,DU;EiaF 3Q "z/fgV'Y1w^gԸb}J1Q!,81J!`Dp^ճv&RYuj+}zWۏfڏZrU!zKȧ4gw3,ɚeelH¨ӄYEY!Az!3yogEwn#BE yn~"Y?}Ae-R#DSG "DR(gϛsn=~xo~c/?Rj`T1>x7/f[ ͲBD01gƢ:F^f W<)t~R.5N᢬/Yyw4+r!F3>@c =b?x |V'5e_}Q_jqC!y¯^bR4F)͔)9=9]72'̔667/~*%b"Fgi}EL!F!1:c%< )FĚ~83^?gj h~'gV9s)$M a*j~3w! & [=ib5\\Ѥx)ݾ-h+ ImΞo ْ`˅m x+ c6[?㮘]y~S ^GiwFFب# ,Y5qzJw!,_ S Dptf|U7R1Bg_n>/fC@`z""5FPѬvo9+gϭ0\Ύ~_9xn7b+&KBLdwcJP1 b3YH l!ǝuxDS.0,z"0۩-Kh ~ku@i `, 5esU.۷O~Va)'S#DGc Ϫ<_3`L&Iu!&1U}ߜݼN :jBxJĠƣr ̋Ʌ ^h٩Hr~lWr~e(ū>0Gg(e4!"D H07e$-ۢZ;7R1@LB$F_5Z0YyG#(GVߪq#BjgJvL?cp@LќUeYM0C0**.%yfћ!r""L3Q`!Vj<CíG^̬fD1FBUՋ1):Ĭ=ڇ̫謳?aQ^8;`ctYdyNO)_)+jq }03=3e3GkTYftWca-1QLSU}Ixxt_-nfG >XY5P;blt O:KC)yBl1 .-F 9HzwcƘR fq#A: UY bFNot)`8୆$;7j0`L1_ލXsJ\d5ƂڇgVy"ՙExs#!e&+"4)6**ZY1)f{7[<{8<hVjvxoSB\ LJKs³,9!ܨ2#Da R0jrϭbUbʻ)،ro8F'Du[7Z Ev~&%Y/!Xk_h EKD81 R*  om&q E @FbWOf=DT;Fz3Yݝ=6=Xvu%Haqtߏ68Kpf4JS4D1o(L6btUL4Kj^̒wU{e3G11x=Sg7_{‹'? ^[+#H\RBG`ќ#@ᡨ @cX>og/[-C6#-! At"1uFzgwY D \7)g@&N(f,DKiIE.]^'"Ϛ jVOALTH#Gr~)xR < !1WΩw c@ cBEpڽaC.FCdM[p]&]t e71*,W~{Jx 9͋Y5(LSj F(n;|!8&XЬP#l` >$RJaLXJ)EWNg aJ Y=:CŔ3^R&E MV#H kM\|)˲f7)b  rv$CZ|Ȳڨ.iRVfD*(Lc6Ç\:S^We}5f<Zɮ=+>K{|)60ADSV4y1fOCI:#S ,|x+% a3ggf<&D6V@!Zkʋwh7D(pϊތLɫEV.R0%̳IJO"5(-$3VNBbr;.*Kh~|umV.AJF<(͵!ZGrSr~ `XTg\䋳G{Ow Ibbf;x;oa77`݆27Eaӝw3DHPdƟ:y;+9/iB8㕖lVUnfΌN}{ 0^A+Sz<65c1x<,y5b<ݳrFZ;r#4F|MoFvZ!Zv!ʫ8lwx"c蜌MOgl!{b Ao5lD:!ˡݰJ1ue"E@b׳ Q@SJ)8=) ;̀0ɚ"@93 /Hϲ)o "E/Yäx1Pc Fv!zm| *JbXaM?0ީs#|RwNc\4{Ϝf<r϶ez{HiJӽ\o)x^[;Z=d׵fN ޮ-'tFZWbVg7_[8l @/6˪\x0VfG,obA)WO0?='xb4<0jy>ƨS ^=Ycd!g,۷q!<7NI9OޙiݗR˜, Z#B0᫋wc)81D$z˳`e7՛QD(c_vozUח!|Zcw/V9b=BؚqN\ /a|ԷwaYިaBP^׋~oVNKk H>A(IW:),+7Λ)mTCQDO/"Wwiaz{ njqBDW焕{>tYnGR4gtx'U]=J1| Foc`^_AxnS%1DBw]*E|r4ݧ{+SQq0ănChe%9- a;}rl!>c)~߷YpNj!`7jB)-Rl3ți[5)z0vgP_ngy ވrnD|鿆༖F( )xJiB{g&?*`~cL)\:30fRV,(/B\T =FȎsfb|2{4ˆ7w]]}^!DEWѻjyJ)x@[B3""=fm N`JWM|rKQQz<0^XQ=3d^vku N ӟ17щlnu 2xaBɊryڿw%j;-&FwByN/Vgr_bp^N^D(0oΣ3ә1ÄaotOy !DBC{GiA½y>0V*uĘR^$SD|!b0ыb p(j~CڇzS2q\1pJ Tͥ}J J!`LcsƋ;tܾ3_)ͥb 4u"LTMvR6a%!:g4!,1٘0kz=(͵<:hL^]bAu-N?곔bQ.;~4+VBxJis^G!eu1Ѳ4ӲTX="<ؚQubD>aHyrK7/fV#yь;^d$8t?mX`J gGjRy o7³B1;mVLEPf8&0g{tzv ;3@Lg}cv NQg`/h&8ls\4t͏4<.!rEOyg$9!svl IDAT1달Xzor^CwG9k&`^,b0?93Ǐ@=1ɂ7L!IzzmI+=ӴkytYY !(\6KZsC>yCl*ȓGtil.qtզ!zl"!@ @Jbs*R5CVY{@F$[ј!͖iu:sb}pfZㄸ&"̒ sNbC97CY?"d7SԚ!Do୦TY.i/eH ljz>E1,hdwOo))Ey'΍c0 /CU]!l~7M9@"DMT>@0ZŒ#;gcN( aJ!$GPB;&|c-X[u==Q0kZA' @'DdB{JSeͫSq]Qȶ]R9#''5"8-c C"uVY~1 "(}'S3:d#JZས,#\zL5eI ,0 Bݻfa"[ }|`"}|gyDSھ !D1]s7@p{7ɷ7c=6,< al:@| oԨc 'T*ud,ժ @)MYZxbRVu%{3[^{(Os%9Ԩcq'$)N?w,/^=uXOfV!BK"%S;ިꑱ$ɗjؤ &18 zD~K=bY Ț1 4r@ly>X7B5Fu*azo0fi8yc1Ҫ,:gLy!z " OfJ> XP"Մ jvըcnF!*"OK$$TD|nO5Kr,?kxz39N>ah$b~ed _*ٖթ7YCHJmɊE0˗w"_48kojL kL(OJJry\_3|>v\TF E@BgDZCN>jRds=ii ,xc^jOܼW_j}w;z_~FٷO{ʄ"yo#yqT;n^amRd| A#¬\TeP %Y:OU.ke!lx0i{I弖9UTgtEu:9yR1KZ]7[zqn5ݽnqRxoՋ\VX3ԫH²:C3i Z^U7fF$W/w1ysM9Ok51bpʒ}Ϊ>NjȜQy}d"n,d0%9EY @ޭ?KBI].qiǤX$[^mGB (ǣagNKgLJ(1 !ZRVc!b<g%KJ Z!ʎc2ul$YMyU&w_iz K)btW?9naJJ!@P4c'Ly9;V\L=(2/O!"z8rQbV;C =b:cz Cp~YdtS_da7j 99'(xVcDg9+1NF&$[Ro7"[@")=6n>͖֌ D{Bg~~tv￞uV4/onh-K Bm0&!8om匄{j8B0NQ6o8E0Bey6;9I#5wz(/g"[!L5„2F_{; QcpFFgS%R,. $GIZcirF`\ǧ|AWۻ?vN ly L[uQ%yr u΅!&V"qҤ0^[(K  8@+=ye'*)!pf,iD63VprTKiVkk[[e^(17\=F< &Tw;f4 !L;P .z@Y5Nz % Og;()`t笍=~W"-'lBdՠU[/Ç{cz=c:4J}soZVL$Rά/x`I7w" k+扊̨Ҵ^<8vv[)OVcgu/wr8-[PVP)8yZ^xp!xg5M@!ʲ"1B D;=4Dc3;3~V(KCxˊ5% $}=v^S;|(ŐN]7G;LJGC6!Ɣ1j!1ѻ8A3:+Ax9*?Eh: R"B<;ct/ Di S)ۧ RぱT{3m0aT M1gFB-yU/?„`yo M!˪y1)3v rl,`YOl8 e`BjȖ|wc!*u!bʝC(B>y1a\1zL~Dǻ>;gдju3If{=B<"Bgda!1BϭU@ a"(]QU>Zʳ,[;T/jew9/GVJʡj ҙs*FD „0>e\[%20B/~ !YvN#L']nΌS͋jM ڼsjl'X|y- "C1lo!"\f:My63: fʇ =ШcδlLd1FA&-}„y`TdWFvg7?flq/veS/7ޙcD9tONK[51Fxat,`4FuꞰ4Pr"(议61t.= z^^|ƆP!fJ>@Eʓ*Irk?|YKcd5{HD(%"@Ymu0 aŒ|N(缘v𫏿ABlDVwzlQ.JӾDo'U!U'If&DGou|bc# Ti9l<ת"L3y ,"NO1C>7?8yR͝/tgZ;5'΂"۷DHjB{{ra-HsN;#!jgs aØOyOJMͬ O }࢜~K)gۂ尅;s=4*ɗΙXxcBgX=yxēL!Uބ@FKw*+O Dv@j1#9D랲AEd{"yvĘ&xErRs-lRB:#Diz =a-TaDdy~ hǏw}~ݧ٢o|1Xt#e.8DˬZ k DЪ1` Lg*"O*&UJ-&$Ġe;v[&rL(ޞ>"Bw&+V볛Ӈ7/2+9|`Io9+ H7š>"(s&%%~37P΋p:XC>ˆ ?n !Na`"VmAdZ5 iVM0G#Bgmg3F`ܚnygI?mV'yZ ȓ \VΙ$[z72V$jz,7ϲUZ.v#:If%c%bDq@y6e#,NȓB ~kx.#)g]P徚]Zj'(Oُ<UO oZ/rqruz^|}|IxV>f .Cc-cŌcDw:ڇ|v_xCĈ#=PQIm$LpQFm.(K䰏>L3ko2P.E0!If4KUӦc,@_sO#4zGEI P4z'oĘqW>@oB V E},IJ-.iiDRn*1Fuި$q0IG\v}>8d .rĈ^[= 'E=ʪ3mӄ$d励`lF{հV7ZBc9ykkm>0L)M!BQDҔ/JJl`Udzʪ[G! Jj<c.xg>m͝{kf'a;A;+ a]!8Fx 3ZFnX:4zv[]{ "4C$_|u3I>Jˎ9 kG1)$DzvS g1C@d@Z+Qom n*B}A1NIV[3"L_%!zG56 * !j#IէyُwF/ux1Z$0Ƙ ´ݿ㢔(oQY}m|xO1}?RN@0rhW矪~/BG-C4)F97?|7J6TdQq`B!g絷雾}zJM Ɣg6j9! /ųFyevw%4vald;͘!g"ȭtGꌉ{#DfAr/ pzjge^xoY6ǔbrVDlZ,YybsVo!ޛ5O}%9Yœ'>xb"a~0yyz0v[3L +{-z}cTKhZϯ@'Ͼ4b,`zIV<tGYϿ5զjy4.0 'V.N_oWSR ڧ*f^j췔gzl@ Ld]Pc 83FpY} jqyU0 .l6;mDfתAgDk:-;6oɮ9)rU^N$eJ6[…$8Cx:8B,)L9.(R.;-'ޕ”'/w BMoDsV7NCXgYgi? V+3ZkD^̴ҼƔY=83ʱIru&-Fv>8kF#[Q+|YBmz>;ʳzeo?7 Q"Lp gDr؅Sc}y>RcbrMǘ!DCpZ6j=UQ]Z.D1rJ(&j0!B"&YVuI:ӲD@lIjV-;-$*-ѹ Nzg题;1୷ƔaL0&UNAD& V-ey0bDc1xkǬ8UKNS9YV DZI \F{q(fы>+Njc*۷K;4XDncU_gJzw IDAT÷LV= ~!iPe A[jwoER~cLJw:I=XvOY# 0B,o}cM/xa꓋_g5lwީz c @sVʵvwKyZTZ "-}N0o(KorFј4[ZUN1=0"CL@ZB9B88B@4!Fyg@yu:ñ^^ ݖobiٵ` i./OjTpZiǿ&L$nnyzDljE! @AL'kzgg>Z9#bM(i"g5D?!Bw^3g0c"X [dscHxN]Uzܚ{ V{ !k&4€ #d}s# ak5&Y!L63ce֎ M L8<))WSFupjggiR)"LDZ&ɖE?}_\8Gʋ"\Wyv5O?LxgU/Қg3"謞;o֗c >+?2sIENDB`lbreakout2-2.6.5/client/gui_theme/progress_medium.png0000664000175000017500000000254612140767202017667 00000000000000PNG  IHDR gAMA abKGDC pHYs  ~tIME e>IDATxUn6,в,ScU}͢n2(J GfO4[9a Jc}a֕'%R|&Fj%%Z{)i(#%r9Ƿs9{p`[}]/ 2B+J)8G8nu_τ`+JO`cBRV;0M0X5mpoBJ= -oސ3_? 77, \+, !@q𞾧58֬m#%α[J8L)LLFO#Ⱥm<@<>r>y&6NX̮3S2məq4>[#gR{۶]KL1!ipVGN:bd(mnJy8Cl;Dz1t9s:m, F)B14H9gzA(A#ƺYf?p:c%x9Rb]/X Ffֺvz:ZT< 'RlJ++WpWmOO榔6®ieZ=k)[@ -޽{ uZ]b#|hgLjLkF<+(\o7(d]cR`]:Go%s=n{5z3LΆ0"7^ MTqZS—²"Ʈ|H+-maW{Jߴ&y6V.]!1j:ö]Z+YI k d]2l"@֕eaL-B@KJr1mVWS8U R87Zq4ChV(h={ONkl xZf a'?ڲ5T;!,te}|#7#lj{9J19,q5yOG-뫺)W=3NMn{rfYLԻtSZt6kuwtWbJStb@44?q-p8Eu iC*$$ʧRG LD 4cXtu枃bHH0 nY,,f*bjZiJl-ۆG~ۣ[Mﭙ@Jtݝ!h/C[=tE%gRdA}C_x+]u=Gk.HBeV{)bx^NچqIENDB`lbreakout2-2.6.5/client/gui_theme/widget_wallpaper.png0000664000175000017500000002507212140767202020014 00000000000000PNG  IHDRL\bKGD pHYs  ~tIME4 >֙ IDATx}oHc0xQFUS=k7fa~?ڰ c4v==ꪚ*J# ?$3NjIAD5y'yA/FJeS.CH&7v>> +^o( !PRkMh_ S+e0{yj&`w/o|;r(C^a=~6!mVNdx !"/" Ǿ ʀ}t/q<?Q4ALEc|Z$/0]]&vDTiY'v9P=RZkGG痗` _vJ¿Ee`] 'VPQ4)Lwo9wc͒c- c"ZI&ɃyL.^VxX&Q*B4/pBH+Z*<ξP*[nhl^U0рo=A+=3uUKD|>OU4va~S8 8&']!scZ\0yZCW /|vʳXŬXTB |^W͐]~U9VeYñyS,=u &b29n.KDLW?{.]<<`)XR~zgqbM&$ٛ˟hݚ\ [j׺>UNݿzK|; SXlN쀞=BiS*Or9M̪JeEZEI ջξ4qa{XOsXyYUDf}^{zuHi59ѢP/-Y4ïQyR\fs֓8v`?|UVPFݻ Sod5=(d__^~cՈHIZqZA$dYq_V_ "BVYs [L, !s HSy${"*L,KWDQ,5X~~ q޳0Jx:#"iZo.Z EP@my\K$ߏ"5 /}?R y>QC#*ʲcYD5IHG=Ɖ xZ ik-yoNuxJND:S2m <7E9n^,@ VV˲Hk01Nޢ7G A04]k]~X Ey<Ϥ]򶋜U Vo&ꆖ2iŗ0 1O$"iQ(̲]Y~P(r.8r?l߁}R[R UROTZܡDDyL6\&iԚ<F}tzx:Sʈ*[y̟  =ew!$~{/extb{P*nf90@Eř eQ$y<(e2,gJ|?Zq|2jT~T# U&i"twKn٨/>`rzQ_^< cQ8V39:RZZ@s2_EMc0tc{W*Özc/9qXDET&gg_l6 F5B!izr j>Zi,, q=,p`*L%"kLUunOO_ қBcaz.[8K2m" kk'Gl(u]E`hV+oTO< !=2X_X6 0YO迀/rcVmO&'`= 2TO++yM@ `v#XI௪rɱօk5Ǔ3^rs ] S5^/ yB 4]5q-$"4!ڈSiʲȲ/..tfZq_ON^iGQu,ME~w{x v1s]z*_~ۏzvtnR:6UIY>`$k 愑*k6sSJX/юn:6 q8ΔJ͇V1XOByu#_^~e;F54KRq<{껃AprE|A8ԫ+8Q9a痬}d{{m.9UnӘ;_R"āxyYW gxO!!)6@8=b- [Wgn-W.0LsU'[KQoX,w|bDdz^^~ z#WZ,KLg_`@~^/C1g = (r6Sl9_"zyn Gk+C w] ;fFk7O=1^Hۮ)i`KWlvVj*44C9 JeIñ3YȬˑq)mBHg6>:+=AJ0'no|oQH~(ײ,}?4=y"Ө㦍k"''W]{ 9{BSR eYR !e' "8qE{3;`~׈0Yv! a8F%=:ʍUqRUyx}]Z~DT1>b !:Jmbu2Yl,%ф%;Uয়zPz6xw"\COxRp_5a8[)*=ɨ *YKں]S9{0}D>BaYBZv}dse"]hsDh  uGVWl㸩yQKRJu>h.e1YK|X4R, ''W)C`?3pZ?W^ 6o)kJ}q}H1pXP: c6ZWaYBH"MBkyv8F:#-|߯d#0rn73FΩj5LZUeIn88NYglR[o]3^) %M(`eYu.HBV![ivt :>Z1su5`=fVK#{ś&IqhbMʰ=rIm\ m A_#vWRZfz#ڱ4Зu:Ī*(ԍK`q23CX+O_~e:1Pb_E:f8 NN^.'ʢ)LEDJuµƢ =O!s=OE*Z!$B,yR"YK$RF6ERpigmTx|2F)()`~ 塚×FD@4"?7|3#>^}V Bs`vz7nlpCGͿl𪛳SJṵr~Bs\Jeњogg^mK:miP`gɷVރ}N=,[V J+B!g׷fvGGDMHQ`!YcsTnR!ƾ; 'R ӧ؈?jrp'7DeIgsK,b;1-klhQ4ݥ(>8 \ۙSQ.O(y$Lg v볳_Ԑj:=m>9&,= HD+*0ՆesV4 0Vcv 2c b5j! wH*fx|ԓGht[YY2u9z4Ίh% xZo=[Ʋ=(V΃o`7OM u )C 1_yBfgғnz½?f:9wF=V}}jwƲ&|Xpbl_Y(0ݮSޖw2 cg=6UN$$dl7;H:5;QD<v\: S/U~!O0(VhM*㽐B; j28Ȉr7]˵f(Ylq N\X`Vbՠ`xb!~cFD7J%aKZOKul8wo^T}#x<ϲUaJS[bQ*#:วT1 fߨmZeَJ" ՛=2'hX3ߵYcgh NZg R?;MϾ2T*7IcF&VE6x85}WcXXX߯R 4AA("bFY'`lXdP-o6wR4T4vR}@Tc8ҙHʐ{,O,U_2$ꈢHdXu= $ϳK̊{;,CkPRR(ML?ZP$=X{ nI[vab*IXTʨ'huIM~LU":92<.;( w*&㿘 W?#Z?Xc9NvbL8 PP=6qq»BP`iĀ=s/LN(]]d+9Wq4w}CBdgSoL{a}g_)~0%x޸+kUQu"QU75M袮l@^(OȰ߯<߹tM`1tOm2( IDATgٸ?^7w|j:!B6O uƏ^E"@S,CgBGHa[Г϶|?mHԈū 'nݴ>m?`1SVW{x t y{j *cQ?>[[̜R~?2dۓvx|$D5= `ORR3/23Tu>T[e`bptt\K=p3,?XC S=Dgk[x,`B DȞe="4 W_%Sw$TgkMQ]c v;ȅd}[[ Ǽ u3{k;@)sP<ߏFЭE!//\_OM3w?60VpR.&LkwEWW%37Wσey^QRƈͲ-SycX@<Αr |?j̊6IkdQkXiޥ 5^(y=Ox͋ƯDtzUO?a:= 9~z''_+Je rwa#ō %ȇKCtcw uXmY`1)"X.~+O0Mgt^I$]@~kaNkeXÉZ6~ra쟟8HdM!'ZA0ICD8V/-#"jR0J]`:>-כͧ.MprrbnKm\ |=Ϲпp֕[;W1\LjS͂Ԥ:IH2uATyA01tsZ}<9yjUwޘ沧ܜ($z\y:&mӄefae&_sDM+K:vH01ub?e,&IfuM6:H< pZa0p|CU?̠-֝q]`|?@G9Yӱoc"C/e$DRRXJeE,>M!dLXro_N"9Ģp 9d(o(M''2=a.1%VdSpDE"󽔡8(1OŦGHIq;H#Iۙ @úڅ; ĵr3rbWf35/wϓdCܙ2z-Ə<f[1GTyla Gk'v]3\j ܣ;˒Imz,*s!fjeK̮)ee0Jr3ZC4GGZSW4 4݁󴙙ok}F\qd(x:)2/?O&/0Y_Ԓ:ӗD)I6囁UBH,]zoO}XQ3O0fdk|8vz"Z'Ɇ?]XI$f̲i7Jd"?2 "*tp72qiPcik }.Or0D`ٚY= noGG/5C:t7\wmk|w\ګ ;CSo>6j"dvf&5?w5\/i@Uʠ|o:SU@Ѻeqz *p82DD@BD{C6`48!!" 6dʇg|5@$1MnN>u/FO[J*M/OckUM9ϢU{HbBVIt5ܪ48fe55_%$#ܰ*N׉*F}ҪHڰҨz8TƴfYz稅BKo3tHbt(EjGO~ q]M[4NE R}֩[|MvË@C?zbsJ:} g 0h,;^ĵ-pAO(S}NL `%C_&*~6Puo 덿E {$41L?k,ve6tPezfJVRL;=B=ZՇ\1,,H ﱖB+EO$ŇZp>aQUuCa+dE=dp6EJ| (ovAm_; %5_$AɍI,ҟ7:6<,8;qAߟg(y<Mʟ0E<[mx T̈́"Of b(GSCdI9nɌAA 2s~`ō"2THh?6 U#$~ D=".w0$:Bh7,14C@Aơ怽e겝킸HIڿPҚX4b)N T`ۅkۣb(XnaiRVߗq})/׮r;@EQ%WU^vr䘚 C97/obI&Jwc_k _[VW~ZKNTN K.f}i=c(rnΧ)JTPu|7#D' GKK4Vo#vXȄЖdT%Ag܊PK{Y Ch 3>/lZJi8U}:N51QC`KK2 *sQz>o5~ ~ 3aad1M_/t/ ,Ė;c1mӗӊs3ɚح9$K`~\.K}HZ~w/MK,nnyuޑtAfB]mnrycy3;mvM|-\dh?c< Nęo"PdWGfzvzw:gK~:N!!&~7G_ǟM%{TH,tq+~]oߎV_,oW\4}OIfAjIENDB`lbreakout2-2.6.5/client/client_recv.c0000664000175000017500000002532712140767214014455 00000000000000/*************************************************************************** client_recv.c - description ------------------- begin : Sat Oct 26 12:02:57 CEST 2002 copyright : (C) 2002 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include "lbreakout.h" #include "client_data.h" #include "game.h" #include "../game/game.h" #include "../gui/gui.h" /* ==================================================================== Externals ==================================================================== */ #ifdef NETWORK_ENABLED extern NetSocket client; extern int client_is_connected; #endif extern GuiWidget *dlg_info; extern GuiWidget *dlg_confirm; extern GuiWidget *dlg_chatroom; extern GuiWidget *label_channel; extern GuiWidget *label_info; extern GuiWidget *label_confirm; extern GuiWidget *label_stats; extern GuiWidget *label_winner; extern GuiWidget *list_chatter; extern GuiWidget *list_levels; extern GuiWidget *list_users; extern GuiWidget *list_games; extern List *client_users; extern List *client_channels; extern List *client_levelsets; extern int client_state; extern List *levels; extern int net_buffer_cur_size, msg_read_pos; extern char net_buffer[MAX_MSG_SIZE + PACKET_HEADER_SIZE]; /* CHALLENGE */ extern char client_name[16]; extern int client_recv_limit; extern char *mp_diff_names[]; extern char mp_levelset[16]; extern int mp_peer_id; extern char mp_peer_name[16]; extern int mp_levelset_version; extern int mp_levelset_update; extern int mp_level_count; extern int levelset_version, levelset_update; extern int mp_diff, mp_rounds, mp_frags, mp_balls; extern ClientUser *client_user; extern void client_run_game( int challenger ); extern void client_disconnect(); /* from client.c */ extern int client_comm_delay; /* ==================================================================== Popup info dialogue and set status to INFO. ==================================================================== */ void client_popup_info( char *format, ... ) { char buffer[256]; va_list args; va_start( args, format ); vsnprintf( buffer, 256, format, args ); va_end( args ); gui_label_set_text( label_info, buffer ); gui_widget_show( dlg_info ); client_state = CLIENT_INFO; } /* ==================================================================== Popup confirm dialogue and _keep_ status. ==================================================================== */ void client_popup_confirm( char *format, ... ) { char buffer[256]; va_list args; va_start( args, format ); vsnprintf( buffer, 256, format, args ); va_end( args ); gui_label_set_text( label_confirm, buffer ); gui_widget_show( dlg_confirm ); } /* ==================================================================== Parse all messages in net_packet. ==================================================================== */ #ifdef NETWORK_ENABLED static void client_parse_packet() { int i, num; char name[16]; unsigned char type; int handled; while ( 1 ) { type = (unsigned)msg_read_int8(); handled = 0; if ( msg_read_failed() ) break; /* no more messages */ switch ( type ) { case MSG_PREPARE_FULL_UPDATE: /* do only clear users as channels and * levelsets are fixed */ list_clear( client_users ); client_user = 0; handled = 1; break; case MSG_ERROR: client_printf_chatter( 1, _("ERROR: %s"), msg_read_string() ); handled = 1; break; case MSG_BUSY: if ( client_state == CLIENT_AWAIT_ANSWER || client_state == CLIENT_AWAIT_TRANSFER_CONFIRMATION ) client_popup_info( _("%s is busy at the moment."), mp_peer_name ); handled = 1; break; case MSG_DISCONNECT: client_disconnect(); handled = 1; break; case MSG_SET_COMM_DELAY: client_comm_delay = msg_read_int16(); printf( _("comm_delay set to %i\n"), client_comm_delay ); handled = 1; break; /* chatter */ case MSG_SERVER_INFO: client_add_chatter( msg_read_string(), 1 ); handled = 1; break; case MSG_CHATTER: client_add_chatter( msg_read_string(), 0 ); handled = 1; break; /* users */ case MSG_ADD_USER: num = msg_read_int32(); snprintf( name, 16, "%s", msg_read_string() ); name[15] = 0; if ( msg_read_failed() ) break; client_add_user( num, name ); gui_list_update( list_users, client_users->count ); /* re-select current entry */ if ( client_user ) { num = list_check( client_users, client_user ); if ( num != -1 ) gui_list_select( list_users, 0, num, 1 ); } handled = 1; break; case MSG_REMOVE_USER: num = msg_read_int32(); if ( msg_read_failed() ) break; client_remove_user( num ); gui_list_update( list_users, client_users->count ); /* re-select current entry */ if ( client_user ) { num = list_check( client_users, client_user ); if ( num != -1 ) gui_list_select( list_users, 0, num, 1 ); } handled = 1; break; case MSG_CHANNEL_LIST: list_clear( client_channels ); num = msg_read_int8(); for ( i = 0; i < num; i++ ) list_add( client_channels, strdup(msg_read_string()) ); handled = 1; break; case MSG_LEVELSET_LIST: list_clear( client_levelsets ); num = msg_read_int8(); for ( i = 0; i < num; i++ ) list_add( client_levelsets, strdup(msg_read_string()) ); gui_list_update( list_levels, client_levelsets->count ); handled = 1; break; case MSG_ADD_LEVELSET: list_add( client_levelsets, strdup(msg_read_string()) ); gui_list_update( list_levels, client_levelsets->count ); handled = 1; break; case MSG_SET_CHANNEL: /* we only need to update the name */ gui_label_set_text( label_channel, msg_read_string() ); handled = 1; break; /* challenge */ case MSG_CHALLENGE: /* the user may only be challenged if client state is NONE because otherwise he is doing something that shouldn't be interrupted */ if ( client_state != CLIENT_NONE ) { msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_BUSY ); msg_write_int32( msg_read_int32() ); client_transmit( CODE_BLUE, msglen, msgbuf ); break; } snprintf( mp_peer_name, 15, "%s", msg_read_string() ); snprintf( mp_levelset, 16, "%s", msg_read_string() ); mp_diff = msg_read_int8(); mp_rounds = msg_read_int8(); mp_frags = msg_read_int8(); mp_balls = msg_read_int8(); if ( msg_read_failed() ) break; client_popup_confirm( _(" You have been challenged!##"\ " Challenger: %13s#"\ " Levelset: %13s#"\ " Difficulty: %13s#"\ " Rounds: %13i#"\ " Frag Limit: %13i#"\ " Balls: %13i"), mp_peer_name, mp_levelset, mp_diff_names[mp_diff], mp_rounds, mp_frags, mp_balls ); client_state = CLIENT_ANSWER; handled = 1; break; case MSG_REJECT_CHALLENGE: handled = 1; if ( client_state != CLIENT_AWAIT_ANSWER ) break; client_popup_info( _("%s is too scared to accept your challenge."), mp_peer_name ); break; case MSG_CANCEL_GAME: handled = 1; if ( client_state != CLIENT_ANSWER ) break; gui_widget_hide( dlg_confirm ); client_popup_info( _("%s got cold feet."), mp_peer_name ); break; case MSG_ACCEPT_CHALLENGE: handled = 1; if ( client_state != CLIENT_AWAIT_ANSWER ) break; gui_widget_hide( dlg_info ); /* play */ gui_disable_event_filter(); if ( client_game_init_network( mp_peer_name, mp_diff ) ) client_game_run(); client_game_finalize(); gui_enable_event_filter(); gui_widget_draw( dlg_chatroom ); stk_display_fade( STK_FADE_IN, STK_FADE_DEFAULT_TIME ); break; /* dummy parse game packets that may arrive after the QUIT_GAME * message was sent because ADD_USER commands may be in the * package and these we should get. */ case MSG_PADDLE_STATE: comm_unpack_paddle_dummy( (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_SHOT_POSITIONS: comm_unpack_shots_dummy( (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_BALL_POSITIONS: comm_unpack_balls_dummy( (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_SCORES: comm_unpack_scores_dummy( (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_BRICK_HITS: comm_unpack_brick_hits_dummy( (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_NEW_EXTRAS: comm_unpack_collected_extras_dummy( (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_ROUND_OVER: i = msg_read_int8(); handled = 1; break; case MSG_LAST_ROUND_OVER: i = msg_read_int8(); handled = 1; break; } if ( !handled ) { printf( _("chat: state %i: invalid message %x: skipping %i bytes\n"), client_state, type, net_buffer_cur_size - msg_read_pos ); msg_read_pos = net_buffer_cur_size; } } } #endif /* ==================================================================== Receive packets from server. Use the TIME_PASSED event therefore. Send a heartbeat every three seconds as well. ==================================================================== */ void client_recv_packet( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED int recv_limit; static int last_heartbeat = 0; if ( !client_is_connected ) return; if ( event->type != GUI_TIME_PASSED ) return; /* heartbeat? */ if ( time(0) >= last_heartbeat + 10 ) { last_heartbeat = time(0); msgbuf[0] = MSG_HEARTBEAT; client_transmit( CODE_BLUE, 1, msgbuf ); } recv_limit = client_recv_limit; /* limited number of packets if not -1 */ while ( net_recv_packet() && ( recv_limit==-1 || recv_limit > 0) ) { /* check if this is a valid packet and update the socket */ if ( msg_is_connectionless() ) msg_begin_connectionless_reading(); else if ( !socket_process_header( &client ) ) continue; client_parse_packet(); if ( recv_limit != -1 ) recv_limit--; } #endif } lbreakout2-2.6.5/client/balls.c0000664000175000017500000002113512140767214013246 00000000000000/*************************************************************************** balls.c - description ------------------- begin : Sun Sep 9 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "../game/game.h" #include "bricks.h" extern SDL_Surface *ball_pic; /* ball pictures */ extern SDL_Surface *ball_shadow; int ball_pic_x_offset = 0; /* display ball at this position */ extern int ball_w, ball_h; float ball_metal_alpha_change = 1.2; /* pulse factor */ float ball_metal_alpha = 0; /* alpha of ball when blue */ extern SDL_Surface *offscreen; extern SDL_Surface *stk_display; extern int shadow_size; extern Game *game; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Show/hide all balls ==================================================================== */ void balls_hide() { ListEntry *entry = game->balls->head->next; Ball *ball; int bx, by, bw, bh; while ( entry != game->balls->tail ) { ball = (Ball*)entry->item; entry = entry->next; /* balls position; add paddle pos if attached */ bx = ball->x; by = ball->y; bw = ball_w + shadow_size; bh = ball_h + shadow_size; if (ball->attached) { bx += ball->paddle->x; by += ball->paddle->y; } /* blit background */ stk_surface_blit( offscreen, bx, by, bw,bh, stk_display, bx, by ); stk_display_store_drect(); } } void balls_show_shadow() { ListEntry *entry = game->balls->head->next; int bx, by; int mx, my; Ball *ball; if ( game->extra_active[EX_DARKNESS] ) return; while ( entry != game->balls->tail ) { ball = entry->item; entry = entry->next; /* balls position; add paddle pos if attached */ bx = ball->x; by = ball->y; if (ball->attached) { bx += ball->paddle->x; by += ball->paddle->y; } /* show ball -- no shadow if darkness -- no shadow if going back home */ if ( !ball->moving_back ) { stk_surface_clip( stk_display, 0, 0, stk_display->w - BRICK_WIDTH, stk_display->h ); stk_surface_alpha_blit( ball_shadow, 0, 0, ball_w, ball_h, stk_display, bx + shadow_size, by + shadow_size, (game->extra_active[EX_METAL])?(((int)ball_metal_alpha)>>1):SHADOW_ALPHA ); stk_display_store_drect(); /* redraw nearby bricks */ stk_surface_clip( stk_display, bx + shadow_size, by + shadow_size, ball_w, ball_h ); /* check the three outer ocrners of the shadow if there's a brick */ mx = ( bx + shadow_size + ball_w ) / BRICK_WIDTH; my = ( by + shadow_size ) / BRICK_HEIGHT; if ( my < MAP_HEIGHT - 1 ) if ( mx < MAP_WIDTH - 1 && game->bricks[mx][my].type != MAP_EMPTY ) brick_draw( stk_display, mx, my, 0 ); mx = ( bx + shadow_size + ball_w ) / BRICK_WIDTH; my = ( by + shadow_size + ball_h ) / BRICK_HEIGHT; if ( my < MAP_HEIGHT - 1 ) if ( mx < MAP_WIDTH - 1 && game->bricks[mx][my].type != MAP_EMPTY ) brick_draw( stk_display, mx, my, 0 ); mx = ( bx + shadow_size ) / BRICK_WIDTH; my = ( by + shadow_size + ball_h ) / BRICK_HEIGHT; if ( my < MAP_HEIGHT - 1 ) if ( mx < MAP_WIDTH - 1 && game->bricks[mx][my].type != MAP_EMPTY ) brick_draw( stk_display, mx, my, 0 ); stk_surface_clip( stk_display, 0, 0, 0, 0 ); } } } void balls_show() { ListEntry *entry = game->balls->head->next; Ball *ball; int bx, by; while ( entry != game->balls->tail ) { ball = entry->item; entry = entry->next; /* balls position; add paddle pos if attached */ bx = ball->x; by = ball->y; if (ball->attached) { bx += ball->paddle->x; by += ball->paddle->y; } if ( game->extra_active[EX_METAL] ) stk_surface_alpha_blit( ball_pic, ball_pic_x_offset, 0, ball_w, ball_h, stk_display, bx, by, ball_metal_alpha ); else stk_surface_blit( ball_pic, ball_pic_x_offset, 0, ball_w, ball_h, stk_display, bx, by ); stk_display_store_drect(); } } void balls_alphashow( int alpha ) { ListEntry *entry = game->balls->head->next; Ball *b; int bx, by; while ( entry != game->balls->tail ) { b = entry->item; /* balls position; add paddle pos if attached */ bx = b->x; by = b->y; if (b->attached) { bx += b->paddle->x; by += b->paddle->y; } /* show ball */ stk_surface_alpha_blit( ball_pic, ball_pic_x_offset, 0, ball_w, ball_h, stk_display, bx, by, alpha ); entry = entry->next; } } /* reflect ball at brick but destroy nothing */ void client_brick_reflect( Ball *b ) { float old_vx; Vector n; int reflect; int chaos_reflect; /* time left? */ if (b->target.cur_tm < b->target.time) return; /* will reflect? */ reflect = 1; if ( game->extra_active[EX_METAL] ) if ( game->bricks[b->target.mx][b->target.my].type != MAP_WALL ) reflect = 0; /* will reflect chaotic? */ chaos_reflect = 0; if ( game->extra_active[EX_CHAOS] || game->bricks[b->target.mx][b->target.my].type == MAP_BRICK_CHAOS ) chaos_reflect = 1; /* we have a target and so we have a reset position and even if the ball's not reflected the position must be reset */ b->cur.x = b->target.x; b->x = (int)b->cur.x; b->cur.y = b->target.y; b->y = (int)b->cur.y; if ( reflect ) { game->mod.paddle_reflected_ball_count++; old_vx = b->vel.x; if ( !chaos_reflect ) { /* normal reflection */ n.x = (1-2*b->target.perp_vector.x*b->target.perp_vector.x)*b->vel.x + ( -2*b->target.perp_vector.x*b->target.perp_vector.y)*b->vel.y; n.y = ( -2*b->target.perp_vector.x*b->target.perp_vector.y)*b->vel.x + (1-2*b->target.perp_vector.y*b->target.perp_vector.y)*b->vel.y; b->vel.x = n.x; b->vel.y = n.y; } else { b->vel.x = ((float)RANDOM( -10000, 10000 )) / 10000; b->vel.y = (float)(RANDOM( -10000, 10000 )) / 10000; } /* only use 2 degree steps */ b->angle = vec2angle( &b->vel ); angle2vec( b->angle, &b->vel ); if ( b->target.side >= CORNER_UPPER_LEFT && !chaos_reflect ) ball_mask_vel( b, old_vx, BALL_ADD_ENTROPY ); else ball_mask_vel( b, old_vx, BALL_NO_ENTROPY ); } /* mark target as disabled so it won't get stuck at the bottom of the screen but keep the target position so that we know what needs an update. */ b->target.exists = 0; } /* update energy ball animation */ void client_balls_update( int ms ) { Vector old; /* old position of ball before update */ Ball *ball; /* modify alpha when metal */ if ( game->extra_active[EX_METAL] ) { ball_metal_alpha += ball_metal_alpha_change * ms; if ( ball_metal_alpha >= 255 || ball_metal_alpha <= 0 ) { ball_metal_alpha_change = -ball_metal_alpha_change; if ( ball_metal_alpha < 0 ) ball_metal_alpha = 0; if ( ball_metal_alpha > 255 ) ball_metal_alpha = 255; } } /* new position if NOT attached. the communicator has set the velocity * 0 if a ball is inanimated */ if ( game->game_type == GT_NETWORK ) { list_reset( game->balls ); while ( (ball = list_next( game->balls )) ) { if ( ball->attached ) continue; if ( ball->vel.x == 0 && ball->vel.y == 0 ) continue; old.x = ball->cur.x; old.y = ball->cur.y; ball->cur.x += ball->vel.x * ms; ball->cur.y += ball->vel.y * ms; ball->x = (int)ball->cur.x; ball->y = (int)ball->cur.y; } } } lbreakout2-2.6.5/client/credit.c0000664000175000017500000001032412140767214013421 00000000000000/*************************************************************************** credit.c - description ------------------- begin : Thu Sep 13 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "credit.h" extern SDL_Surface *stk_display; extern StkFont *font; extern SDL_Surface *offscreen; SDL_Surface *credit_bkgnd = 0; float credit_alpha; float credit_pms = 0.5; int credit_cur; int credit_time = 2000; int credit_x, credit_y, credit_w, credit_h; char credit_str[64]; int credit_status; /* ==================================================================== Initiate credit. ==================================================================== */ void credit_init( char *name, char *author, int level, int level_count ) { credit_cur = 0; credit_alpha = 0; credit_status = 0; /* string */ if ( level_count > 0 ) sprintf( credit_str, "%s (%i/%i) - %s", name, level + 1, level_count, author ); else sprintf( credit_str, "%s (%i) - %s", name, level + 1, author ); /* position */ credit_w = stk_font_string_width( font, credit_str ) + 4; credit_h = font->height + 4; credit_x = (stk_display->w - credit_w) / 2; credit_y = (stk_display->h - credit_h) / 2; /* background */ if ( credit_bkgnd ) SDL_FreeSurface( credit_bkgnd ); credit_bkgnd = stk_surface_create( SDL_SWSURFACE, credit_w, credit_h ); SDL_SetColorKey( credit_bkgnd, 0, 0 ); stk_surface_fill( credit_bkgnd, 0,0,-1,-1, 0x0 ); } void credit_clear() { stk_surface_free( &credit_bkgnd ); } /* ==================================================================== Show/Hide credits ==================================================================== */ void credit_hide() { if (credit_status == 3) return; stk_surface_blit( offscreen, credit_x, credit_y, credit_w, credit_h, stk_display, credit_x, credit_y ); stk_display_store_drect(); } void credit_show( ) { if (credit_status == 3) return; if ( credit_bkgnd ) stk_surface_alpha_blit( credit_bkgnd, 0, 0, credit_w, credit_h, stk_display, credit_x, credit_y, credit_alpha / 2 ); font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write(font, stk_display, credit_x + 2, credit_y + 2, (int)credit_alpha, credit_str ); font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_CENTER_Y; } void credit_alphashow( int alpha ) { if (credit_status == 3) return; font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write(font, stk_display, credit_x + 2, credit_y + 2, (int)alpha, credit_str ); font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_CENTER_Y; } void credit_update( int ms ) { /* appearing */ if (credit_status == 0) { credit_alpha += credit_pms * ms; if (credit_alpha >= 255 ) { credit_status = 1; credit_alpha = 255; } } else /* visible */ if (credit_status == 1) { credit_cur += ms; if (credit_cur > credit_time) credit_status = 2; } else /* disappearing */ if (credit_status == 2) { credit_alpha -= credit_pms * ms; if (credit_alpha <= 0) credit_status = 3; } /* credit_status == 3 means credit disappeared */ } lbreakout2-2.6.5/client/hint.h0000664000175000017500000000563612140767214013130 00000000000000/*************************************************************************** hint.h - description ------------------- begin : Sun Jan 6 2002 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __HINT_H #define __HINT_H typedef struct { Text *text; /* contents */ int peek_x, peek_y; /* screen geometry -- computed when displaying hint */ SDL_Rect rect; } Hint; /* ==================================================================== Load/delete hint resources. ==================================================================== */ void hint_load_res(); void hint_delete_res(); /* ==================================================================== Create a hint. The passed x,y position is where the end of the Sprechblasenspitze is. Contents is converted to lines (duplicated). ==================================================================== */ Hint* hint_create( int x, int y, char *contents ); void hint_delete( Hint *hint ); /* ==================================================================== Set the background on which the hints will be displayed. ==================================================================== */ void hint_set_bkgnd( SDL_Surface *bkgnd ); /* ==================================================================== Set this hint as actual one. If NULL was passed no hint will be handled. ==================================================================== */ void hint_set( Hint *hint ); /* ==================================================================== Set hint to this position. ==================================================================== */ void hint_set_pos( Hint *hint, int x, int y ); /* ==================================================================== Update the contents of a hint. ==================================================================== */ void hint_set_contents( Hint *hint, char *contents ); /* ==================================================================== Show/hide/update _current_ hint. ==================================================================== */ void hint_hide(); void hint_show(); void hint_update( int ms ); #endif lbreakout2-2.6.5/client/editor.c0000664000175000017500000007575412140767214013457 00000000000000/*************************************************************************** editor.c - description ------------------- begin : Fri Oct 12 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "../game/game.h" #include "game.h" #include "config.h" #include "bricks.h" #include "frame.h" #include "editor.h" SDL_Surface *sel_frame = 0, *buttons = 0; SDL_Surface *editor_bkgnd = 0; /* background (black with frame) of editor */ char edit_file_name[512]; /* full path of edited file */ Level *edit_levels[MAX_LEVELS]; /* editor levels */ char edit_version[16]; /* version of edited set */ int edit_level_count; /* how many levels currently used? */ int edit_cur_level_id; Level *edit_cur_level; /* current level modified */ enum { EDITOR_BRICK, EDITOR_EXTRA }; int edit_sel_type; /* type of selected tile */ int edit_sel_id; /* brick or extra id */ int edit_sel_x, edit_sel_y; /* position in map of selected tile */ int edit_tile_x = 1, edit_tile_y = 20, edit_tile_w = MAP_WIDTH - 2, edit_tile_h = 3; /* part where either bricks ro bonuses are displayed */ int extra_vis; /* extras currently shown? blinks. */ int first_swap_level = -1; /* if not -1 this and the current level will be swapped next time the button is pressed */ enum { /* tiles */ BUTTON_NONE = 0, BUTTON_FIRST_BRICK, BUTTON_LAST_BRICK = BUTTON_FIRST_BRICK + ( BRICK_COUNT_REGULAR ), BUTTON_FIRST_EXTRA, BUTTON_LAST_EXTRA = BUTTON_FIRST_EXTRA + ( EX_NUMBER -1 ), BUTTON_EDIT, BUTTON_EDIT_AUTHOR, BUTTON_EDIT_NAME, /* buttons */ BUTTON_FIRST, BUTTON_NEXT, BUTTON_PREV, BUTTON_CLEAR, BUTTON_SWAP, BUTTON_ADD, BUTTON_INSERT, BUTTON_DELETE, BUTTON_VERSION, BUTTON_LOAD, BUTTON_SAVE, BUTTON_PLAY }; int edit_buttons[MAP_WIDTH][MAP_HEIGHT]; /* an action is assigned to each map tile */ /* externals */ extern SDL_Surface *stk_display; extern SDL_Surface *frame; extern SDL_Surface *extra_pic; extern SDL_Surface *brick_pic; extern StkFont *mfont; /* use menu's font to draw status */ extern StkFont *font; /* use game's font to confirm */ extern Config config; extern int stk_quit_request; /* extra conversion table may be found in bricks.c */ extern Extra_Conv extra_conv_table[EX_NUMBER]; extern Brick_Conv brick_conv_table[BRICK_COUNT]; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== We had a right click into the tile region so check and change the bricks displayed there. We select the first new tile and set edit_sel_id, edit_sel_x, edit_sel_y. The full update is initated by editor_handle_click(). ==================================================================== */ void editor_switch_tiles() { int x_off = 2, y_off = 20, len = MAP_WIDTH - x_off * 2; /* offset in map of tiles, len is the number of tiles in one line */ int i, j; /* clear edit buttons */ for ( i = edit_tile_x; i < edit_tile_x + edit_tile_w; i++ ) for ( j = edit_tile_y; j < edit_tile_y + edit_tile_h; j++ ) edit_buttons[i][j] = BUTTON_NONE; /* clear this part of the editor bkjgnd */ stk_surface_fill( editor_bkgnd, edit_tile_x * BRICK_WIDTH, edit_tile_y * BRICK_HEIGHT, edit_tile_w * BRICK_WIDTH, edit_tile_h * BRICK_HEIGHT, 0x0 ); /* switch */ if ( edit_sel_type == EDITOR_BRICK ) { /* flag */ edit_sel_type = EDITOR_EXTRA; /* button map & background */ i = 0; j = 0; while ( i + j * len < EX_NUMBER ) { edit_buttons[x_off + i][y_off + j] = BUTTON_FIRST_EXTRA + i + j * len; stk_surface_blit( extra_pic, ( i + j * len ) * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, editor_bkgnd, ( i + x_off ) * BRICK_WIDTH, ( j + y_off ) * BRICK_HEIGHT ); i++; if ( i == len ) { i = 0; j++; } } /* select first tile */ edit_sel_id = 0; edit_sel_x = x_off; edit_sel_y = y_off; } else { /* flag */ edit_sel_type = EDITOR_BRICK; /* button map & background */ i = 0; j = 0; while ( i + j * len < BRICK_COUNT_REGULAR ) { edit_buttons[x_off + i][y_off + j] = BUTTON_FIRST_BRICK + i + j * len; stk_surface_blit( brick_pic, ( i + j * len ) * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, editor_bkgnd, ( i + x_off ) * BRICK_WIDTH, ( j + y_off ) * BRICK_HEIGHT ); i++; if ( i == len ) { i = 0; j++; } } /* select first tile */ edit_sel_id = 0; edit_sel_x = x_off; edit_sel_y = y_off; } } /* ==================================================================== Draw a helping grid. ==================================================================== */ void editor_draw_grid() { SDL_Surface *buffer; int i, alpha; buffer = stk_surface_create( SDL_SWSURFACE, EDIT_WIDTH * BRICK_WIDTH, 1 ); stk_surface_fill( buffer, 0,0,-1,-1, 0xffffff ); stk_surface_blit( buffer, 0,0,-1,-1, editor_bkgnd, BRICK_WIDTH, BRICK_HEIGHT ); stk_surface_blit( buffer, 0,0,-1,-1, editor_bkgnd, BRICK_WIDTH, ( EDIT_HEIGHT + 1 ) * BRICK_HEIGHT - 1 ); for ( i = 0; i < EDIT_HEIGHT - 1; i++ ) { if ( i == EDIT_HEIGHT / 2 - 1 ) alpha = 192; else if ( i % (EDIT_HEIGHT/4) == 0 ) alpha = 128; else alpha = 64; stk_surface_alpha_blit( buffer, 0,0,-1,-1, editor_bkgnd, BRICK_WIDTH, ( i + 1 ) * BRICK_HEIGHT + BRICK_HEIGHT - 1, alpha ); } SDL_FreeSurface( buffer ); buffer = stk_surface_create( SDL_SWSURFACE, 1, EDIT_HEIGHT * BRICK_HEIGHT ); stk_surface_fill( buffer, 0,0,-1,-1, 0xffffff ); stk_surface_blit( buffer, 0,0,-1,-1, editor_bkgnd, BRICK_WIDTH, BRICK_HEIGHT ); stk_surface_blit( buffer, 0,0,-1,-1, editor_bkgnd, ( EDIT_WIDTH + 1 ) * BRICK_WIDTH - 1, BRICK_HEIGHT ); for ( i = 0; i < EDIT_WIDTH - 1; i++ ) { if ( i == EDIT_WIDTH / 2 - 1 ) alpha = 192; else if ( i % (EDIT_WIDTH/4) == 0 ) alpha = 128; else alpha = 64; stk_surface_alpha_blit( buffer, 0,0,-1,-1, editor_bkgnd, ( i + 1 ) * BRICK_WIDTH + BRICK_WIDTH- 1, BRICK_HEIGHT, alpha ); } SDL_FreeSurface( buffer ); } /* ==================================================================== Translate the saved character strings into extra and brick indices for the editor. ==================================================================== */ enum { INDICES_2_CHAR, CHAR_2_INDICES }; void editor_translate_level( Level *level, int type ) { int i, j, k; if ( type == CHAR_2_INDICES ) { for ( i = 0; i < EDIT_WIDTH; i++ ) for ( j = 0; j < EDIT_HEIGHT; j++ ) { /* bricks */ for ( k = 0; k < BRICK_COUNT; k++ ) if ( brick_conv_table[k].c == level->bricks[i][j] ) { level->bricks[i][j] = brick_conv_table[k].id; break; } if ( k == BRICK_COUNT ) level->bricks[i][j] = -1; /* extras */ for ( k = 0; k < EX_NUMBER; k++ ) if ( extra_conv_table[k].c == level->extras[i][j] ) { level->extras[i][j] = extra_conv_table[k].type; break; } if ( k == EX_NUMBER ) level->extras[i][j] = EX_NONE; } } else { /* indices to characters */ for ( i = 0; i < EDIT_WIDTH; i++ ) for ( j = 0; j < EDIT_HEIGHT; j++ ) { /* bricks */ if ( level->bricks[i][j] == -1 ) level->bricks[i][j] = '.'; else for ( k = 0; k < BRICK_COUNT; k++ ) if ( level->bricks[i][j] == brick_conv_table[k].id ) { level->bricks[i][j] = brick_conv_table[k].c; break; } /* extras */ if ( level->extras[i][j] == EX_NONE ) level->extras[i][j] = '.'; else for ( k = 0; k < EX_NUMBER; k++ ) if ( level->extras[i][j] == extra_conv_table[k].type ) { level->extras[i][j] = extra_conv_table[k].c; break; } } } } /* ==================================================================== Draw name of set file, current level, current count, remaining levels, and other info stuff. ==================================================================== */ void editor_draw_status() { char str[512]; int x = BRICK_WIDTH, y = ( MAP_HEIGHT - 1 ) * BRICK_HEIGHT - 2; int height = 10; /* locartion */ sprintf( str, _("Location: %s"), edit_file_name ); mfont->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( mfont, stk_display, x, y, STK_OPAQUE, str ); /* current level */ sprintf( str, _("Current Level: %i/%i (Free: %i)"), edit_cur_level_id + 1, edit_level_count, MAX_LEVELS - edit_level_count ); mfont->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( mfont, stk_display, x, y + height, STK_OPAQUE, str ); /* swap */ mfont->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_TOP; if ( first_swap_level != -1 ) { sprintf( str, _("*** Level %i Marked For Swap ***"), first_swap_level + 1 ); stk_font_write( mfont, stk_display, stk_display->w - BRICK_WIDTH, y + height, STK_OPAQUE, str ); } else { /* version */ sprintf( str, _("Version: %s "), edit_version ); stk_font_write( mfont, stk_display, stk_display->w - BRICK_WIDTH, y + height, STK_OPAQUE, str ); } /* name and author */ mfont->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; sprintf( str, _("Title: %s"), edit_cur_level->name ); stk_font_write( mfont, stk_display, BRICK_WIDTH + 2, ( MAP_HEIGHT - 5 ) * BRICK_HEIGHT + 5, STK_OPAQUE, str ); mfont->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_TOP; sprintf( str, _("Author: %s"), edit_cur_level->author ); stk_font_write( mfont, stk_display, stk_display->w - BRICK_WIDTH - 2, ( MAP_HEIGHT - 5 ) * BRICK_HEIGHT + 5, STK_OPAQUE, str ); } /* ==================================================================== Draw brick and extra (if any) from screen map pos so it fits the editable field (no frame, no bottom). ==================================================================== */ void editor_draw_brick( int edit_map_x, int edit_map_y ) { /* brick */ if ( edit_cur_level->bricks[edit_map_x][edit_map_y] != -1 ) { if ( edit_cur_level->bricks[edit_map_x][edit_map_y] != INVIS_BRICK_ID ) stk_surface_blit( brick_pic, edit_cur_level->bricks[edit_map_x][edit_map_y] * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, (edit_map_x + 1) * BRICK_WIDTH, (edit_map_y + 1) * BRICK_HEIGHT ); else stk_surface_fill( stk_display, (edit_map_x + 1) * BRICK_WIDTH, (edit_map_y + 1) * BRICK_HEIGHT, BRICK_WIDTH, BRICK_HEIGHT, 0x777777 ); } else { stk_surface_blit( editor_bkgnd, (edit_map_x + 1) * BRICK_WIDTH, (edit_map_y + 1) * BRICK_HEIGHT, BRICK_WIDTH, BRICK_HEIGHT, stk_display, (edit_map_x + 1) * BRICK_WIDTH, (edit_map_y + 1) * BRICK_HEIGHT ); } /* extra */ if ( ( extra_vis || edit_sel_type == EDITOR_EXTRA ) && edit_cur_level->extras[edit_map_x][edit_map_y] != EX_NONE) { stk_surface_blit( extra_pic, ( edit_cur_level->extras[edit_map_x][edit_map_y] ) * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, (edit_map_x + 1) * BRICK_WIDTH, (edit_map_y + 1) * BRICK_HEIGHT ); } stk_display_store_drect(); } /* ==================================================================== Redraw and refresh full screen ==================================================================== */ void editor_full_update() { int i, j; /* background */ stk_surface_blit( editor_bkgnd, 0,0,-1,-1, stk_display, 0,0 ); /* bricks&extras */ for ( i = 0; i < EDIT_WIDTH; i++ ) for ( j = 0; j < EDIT_HEIGHT; j++ ) editor_draw_brick( i, j ); /* selection frame */ stk_surface_blit( sel_frame, 0,0,-1,-1, stk_display, edit_sel_x * BRICK_WIDTH, edit_sel_y * BRICK_HEIGHT ); /* status */ editor_draw_status(); /* refresh */ stk_display_update( STK_UPDATE_ALL ); } /* ==================================================================== Do only redraw and refresh those bricks with an extra ==================================================================== */ void editor_update_extra_bricks() { int i, j; for ( i = 0; i < EDIT_WIDTH; i++ ) for ( j = 0; j < EDIT_HEIGHT; j++ ) if ( edit_cur_level->extras[i][j] != EX_NONE ) editor_draw_brick( i, j ); stk_display_update( STK_UPDATE_RECTS ); } /* ==================================================================== Free all editor levels ==================================================================== */ void editor_clear_levels() { int i; for ( i = 0; i < MAX_LEVELS; i++ ) if ( edit_levels[i] ) level_delete( edit_levels[i] ); memset( edit_levels, 0, sizeof( Level* ) * MAX_LEVELS ); edit_level_count = 0; } /* ==================================================================== Save/load levels to/from editor file. ==================================================================== */ void editor_load_levels() { int i, version, update; Level *level; FILE *file = 0; /* clear levels first */ editor_clear_levels(); /* read levels while there are some in it */ edit_level_count = 0; if ( ( file = fopen( edit_file_name, "rb" ) ) != 0 ) { levelset_get_version( file, &version, &update ); sprintf( edit_version, "%i.%02i", version, update ); while ( ( level = level_load( file ) ) != 0 ) edit_levels[edit_level_count++] = level; fclose( file ); } /* if we got no level at all create an empty one */ if ( edit_level_count == 0 ) { edit_level_count = 1; edit_levels[0] = level_create_empty( _("noname"), _("untitled") ); } /* translate the character strings to editor info */ for ( i = 0; i < edit_level_count; i++ ) editor_translate_level( edit_levels[i], CHAR_2_INDICES ); } void editor_save_levels() { FILE *file = 0; int i, j, k; Level *level = 0; /* convert */ for ( i = 0; i < edit_level_count; i++ ) editor_translate_level( edit_levels[i], INDICES_2_CHAR ); /* save */ if ( ( file = fopen( edit_file_name, "w" ) ) != 0 ) { fprintf( file, "Version: %s\n", edit_version ); for ( i = 0; i < edit_level_count; i++ ) { level = edit_levels[i]; /* save level */ fprintf( file, "Level:\n%s\n%s\nBricks:\n", level->author, level->name ); for ( j = 0; j < EDIT_HEIGHT; j++ ) { for ( k = 0; k < EDIT_WIDTH; k++ ) fprintf( file, "%c", level->bricks[k][j] ); fprintf( file, "\n" ); } fprintf( file, "Bonus:\n" ); for ( j = 0; j < EDIT_HEIGHT; j++ ) { for ( k = 0; k < EDIT_WIDTH; k++ ) fprintf( file, "%c", level->extras[k][j] ); fprintf( file, "\n" ); } } fclose( file ); } /* convert back */ for ( i = 0; i < edit_level_count; i++ ) editor_translate_level( edit_levels[i], CHAR_2_INDICES ); } /* ==================================================================== Handle button action ==================================================================== */ void editor_handle_button( int type, int *full_update ) { Level *dummy_ptr; int old_pos; int version, update; char *name, *author; int i; switch ( type ) { case BUTTON_FIRST: edit_cur_level_id = 0; edit_cur_level = edit_levels[0]; *full_update = 1; break; case BUTTON_NEXT: edit_cur_level_id++; if ( edit_cur_level_id == edit_level_count ) edit_cur_level_id = 0; edit_cur_level = edit_levels[edit_cur_level_id]; *full_update = 1; break; case BUTTON_PREV: edit_cur_level_id--; if ( edit_cur_level_id == -1 ) edit_cur_level_id = edit_level_count - 1; edit_cur_level = edit_levels[edit_cur_level_id]; *full_update = 1; break; case BUTTON_SWAP: if ( first_swap_level == -1 ) { first_swap_level = edit_cur_level_id; *full_update = 1; } else { /* swap current and marked level */ dummy_ptr = edit_levels[first_swap_level]; edit_levels[first_swap_level] = edit_levels[edit_cur_level_id]; edit_levels[edit_cur_level_id] = dummy_ptr; edit_cur_level = edit_levels[edit_cur_level_id]; first_swap_level = -1; *full_update = 1; } break; case BUTTON_LOAD: if ( !confirm( font, _("Discard All Changes? y/n"), CONFIRM_YES_NO ) ) break; /* load levels and reset position if level doesn't exist */ old_pos = edit_cur_level_id; editor_load_levels(); if ( old_pos >= edit_level_count ) edit_cur_level_id = 0; edit_cur_level = edit_levels[edit_cur_level_id]; first_swap_level = -1; *full_update = 1; break; case BUTTON_SAVE: if ( !confirm( font, _("Save Changes? y/n"), CONFIRM_YES_NO ) ) break; editor_save_levels(); break; case BUTTON_CLEAR: if ( !confirm( font, _("Clear Level? y/n"), CONFIRM_YES_NO ) ) break; author = strdup( edit_cur_level->author ); name = strdup( edit_cur_level->name ); level_delete( edit_levels[edit_cur_level_id] ); edit_levels[edit_cur_level_id] = level_create_empty( author, name ); edit_cur_level = edit_levels[edit_cur_level_id]; free( name ); free( author ); *full_update = 1; break; case BUTTON_ADD: if ( edit_level_count == MAX_LEVELS ) break; if ( !confirm( font, _("Add Level? y/n"), CONFIRM_YES_NO ) ) break; edit_levels[edit_level_count] = level_create_empty( edit_levels[edit_level_count - 1]->author, edit_levels[edit_level_count - 1]->name ); edit_level_count++; *full_update = 1; break; case BUTTON_INSERT: if ( edit_level_count == MAX_LEVELS ) break; if ( !confirm( font, _("Insert Level? y/n"), CONFIRM_YES_NO ) ) break; for ( i = edit_level_count; i > edit_cur_level_id; i-- ) edit_levels[i] = edit_levels[i - 1]; edit_level_count++; edit_levels[edit_cur_level_id] = level_create_empty( edit_cur_level->author, edit_cur_level->name ); edit_cur_level = edit_levels[edit_cur_level_id]; *full_update = 1; break; case BUTTON_DELETE: if ( edit_level_count == 1 ) break; /* last level may not be removed */ if ( !confirm( font, _("Delete Level? y/n"), CONFIRM_YES_NO ) ) break; level_delete( edit_levels[edit_cur_level_id] ); for ( i = edit_cur_level_id; i < edit_level_count - 1; i++ ) edit_levels[i] = edit_levels[i + 1]; edit_levels[i] = 0; edit_level_count--; if ( edit_cur_level_id >= edit_level_count ) edit_cur_level_id = edit_level_count - 1; edit_cur_level = edit_levels[edit_cur_level_id]; *full_update = 1; break; case BUTTON_PLAY: stk_display_fade( STK_FADE_OUT, STK_FADE_DEFAULT_TIME ); /* translate */ editor_translate_level( edit_cur_level, INDICES_2_CHAR ); /* run */ client_game_test_level( edit_cur_level ); /* translate back */ editor_translate_level( edit_cur_level, CHAR_2_INDICES ); *full_update = 1; break; case BUTTON_VERSION: if ( enter_string( font, _("Levelset Version:"), edit_version, 8 ) ) { parse_version( edit_version, &version, &update ); sprintf( edit_version, "%i.%02i", version, update ); *full_update = 1; } break; } } /* ==================================================================== Handle a click on a map tile. If set is False a remove action was requested (only for editing) ==================================================================== */ int near_grow_brick( int x, int y ) { int i, j; for ( i = x - 1; i <= x + 1; i++ ) for ( j = y - 1; j <= y + 1; j++ ) if ( i != x || j != y ) if ( i >= 0 && j >= 0 && i < EDIT_WIDTH && j < EDIT_HEIGHT ) if ( edit_cur_level->bricks[i][j] == GROW_BRICK_ID ) return 1; return 0; } void editor_handle_click( int x, int y, int set, int *full_update ) { int sel = 0; int edit_x, edit_y; char str[32]; /* if !set and within the tile field we perform a switch */ if ( !set ) { if ( x >= edit_tile_x && y >= edit_tile_y && x < edit_tile_x + edit_tile_w && y < edit_tile_y + edit_tile_h ) { editor_switch_tiles(); *full_update = 1; return; } } /* the remaining stuff requires a tile at the position */ if ( edit_buttons[x][y] == BUTTON_NONE ) return; /* no action */ /* bricks */ if ( edit_buttons[x][y] >= BUTTON_FIRST_BRICK && edit_buttons[x][y] <= BUTTON_LAST_BRICK ) { sel = 1; edit_sel_type = EDITOR_BRICK; edit_sel_id = edit_buttons[x][y] - BUTTON_FIRST_BRICK; } /* extras */ if ( edit_buttons[x][y] >= BUTTON_FIRST_EXTRA && edit_buttons[x][y] <= BUTTON_LAST_EXTRA ) { sel = 1; edit_sel_type = EDITOR_EXTRA; edit_sel_id = edit_buttons[x][y] - BUTTON_FIRST_EXTRA; } /* edit field */ if ( edit_buttons[x][y] == BUTTON_EDIT ) { edit_x = x - 1; edit_y = y - 1; if ( edit_sel_type == EDITOR_BRICK ) { if ( set ) { /* set brick */ edit_cur_level->bricks[edit_x][edit_y] = edit_sel_id; *full_update = 1; } else { /* remove brick and extra if any */ if ( edit_cur_level->bricks[edit_x][edit_y] != -1 ) { edit_cur_level->bricks[edit_x][edit_y] = -1; edit_cur_level->extras[edit_x][edit_y] = EX_NONE; *full_update = 1; } } } else { if ( set ) { /* set extra - must be on a brick or beside a grow brick */ if ( edit_cur_level->bricks[edit_x][edit_y] != -1 || near_grow_brick( edit_x, edit_y ) ) { edit_cur_level->extras[edit_x][edit_y] = edit_sel_id; *full_update = 1; } } else { /* remove extra */ if ( edit_cur_level->extras[edit_x][edit_y] != EX_NONE ) { edit_cur_level->extras[edit_x][edit_y] = EX_NONE; *full_update = 1; } } } } /* buttons */ editor_handle_button( edit_buttons[x][y], full_update ); /* name&author */ strcpy( str, "" ); if ( edit_buttons[x][y] == BUTTON_EDIT_AUTHOR ) if ( enter_string( font, _("Author's Name:"), str, 24 ) ) { snprintf( edit_cur_level->author, 31, "%s", str ); *full_update = 1; } if ( edit_buttons[x][y] == BUTTON_EDIT_NAME ) if ( enter_string( font, _("Title:"), str, 24 ) ) { snprintf( edit_cur_level->name, 31, "%s", str ); *full_update = 1; } /* sel frame tile position */ if ( sel ) { edit_sel_x = x; edit_sel_y = y; *full_update = 1; } } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Create/delete editor resources ==================================================================== */ void editor_create() { int i, j; /* clear all level pointers */ memset( edit_levels, 0, sizeof( Level* ) * MAX_LEVELS ); /* load sel frame */ sel_frame = stk_surface_load( SDL_SWSURFACE, "sel_frame.png" ); /* load buttons */ buttons = stk_surface_load( SDL_SWSURFACE, "buttons.png" ); /* background is black + frame */ editor_bkgnd = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); SDL_SetColorKey( editor_bkgnd, 0, 0 ); stk_surface_fill( editor_bkgnd, 0,0,-1,-1, 0x0 ); /* add helping grid */ editor_draw_grid(); /* set actions */ /* editable part */ for ( i = 0; i < EDIT_WIDTH; i++ ) for ( j = 0; j < EDIT_HEIGHT; j++ ) edit_buttons[i + 1][j + 1] = BUTTON_EDIT; /* buttons */ for ( i = 0; i < 11; i++ ) edit_buttons[0][MAP_HEIGHT - 11 + i] = BUTTON_FIRST + i; edit_buttons[MAP_WIDTH - 1][MAP_HEIGHT - 1] = BUTTON_PLAY; /* name&author */ for ( i = 1; i < MAP_WIDTH / 2; i++ ) edit_buttons[i][MAP_HEIGHT - 5] = BUTTON_EDIT_NAME; for ( i = MAP_WIDTH / 2; i < MAP_WIDTH - 1; i++ ) edit_buttons[i][MAP_HEIGHT - 5] = BUTTON_EDIT_AUTHOR; /* draw buttons */ for ( i = 0; i < 11; i++ ) { stk_surface_blit( buttons, i * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, editor_bkgnd, 0, ( MAP_HEIGHT - 11 + i ) * BRICK_HEIGHT ); } stk_surface_blit( buttons, 11 * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, editor_bkgnd, ( MAP_WIDTH - 1 ) * BRICK_WIDTH, ( MAP_HEIGHT - 1 ) * BRICK_HEIGHT ); } void editor_delete() { stk_surface_free( &editor_bkgnd ); stk_surface_free( &sel_frame ); stk_surface_free( &buttons ); } /* ==================================================================== Initiate and clear stuff for each editor call. file_name is the name of the edited file in home directory. ==================================================================== */ int editor_init( char *file_name ) { FILE *file = 0; /* set full file name */ snprintf( edit_file_name, sizeof(edit_file_name)-1, "%s/%s/lbreakout2-levels/%s", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME, file_name ); /* test this file for write access. use append to keep contents */ if ( ( file = fopen( edit_file_name, "a" ) ) == 0 ) { fprintf( stderr, "Permission to write to file '%s' denied.\n", edit_file_name ); return 0; } else fclose( file ); /* load levels */ editor_load_levels(); /* select first level */ edit_cur_level_id = 0; edit_cur_level = edit_levels[0]; /* select first brick */ edit_sel_type = EDITOR_EXTRA; editor_switch_tiles(); /* clear other flags */ extra_vis = 0; first_swap_level = -1; return 1; } void editor_clear() { /* free all levels */ editor_clear_levels(); } /* ==================================================================== Run the editor ==================================================================== */ void editor_run() { SDL_Event event; int leave = 0; int ms; int last_switch_time = 0; int full_update = 0, set; int x, y, xoff,yoff; Uint8 buttonstate; /* reset any alpha keys */ SDL_SetAlpha( extra_pic, 0,0 ); /* draw first time */ editor_full_update(); /* main loop */ stk_timer_reset(); while ( !leave && !stk_quit_request ) { if ( SDL_PollEvent( &event ) ) { switch ( event.type ) { case SDL_QUIT: leave = 1; stk_quit_request = 1; break; case SDL_MOUSEBUTTONDOWN: editor_handle_click( event.button.x / BRICK_WIDTH, event.button.y / BRICK_HEIGHT, (event.button.button == STK_BUTTON_LEFT), &full_update ); break; case SDL_KEYDOWN: switch ( event.key.keysym.sym ) { case SDLK_ESCAPE: if ( confirm( font, _("Quit Editor? y/n"), CONFIRM_YES_NO ) ) leave = 1; break; case SDLK_LEFT: editor_handle_button( BUTTON_PREV, &full_update ); break; case SDLK_RIGHT: editor_handle_button( BUTTON_NEXT, &full_update ); break; case SDLK_UP: editor_handle_button( BUTTON_FIRST, &full_update ); break; case SDLK_f: config.fullscreen = !config.fullscreen; stk_display_apply_fullscreen( config.fullscreen ); full_update = 1; break; default: break; } break; default: break; } } /* mouse motion is handled directly */ buttonstate = SDL_GetRelativeMouseState( &xoff, &yoff ); if ( (xoff || yoff) && buttonstate ) { buttonstate = SDL_GetMouseState( &x, &y ); set = 0; if ( buttonstate & SDL_BUTTON(1) ) set = 1; editor_handle_click( x / BRICK_WIDTH, y / BRICK_HEIGHT, set, &full_update ); } ms = stk_timer_get_time(); if ( ( last_switch_time -= ms ) <= 0 ) { extra_vis = !extra_vis; last_switch_time = 500; editor_update_extra_bricks(); } /* full update? */ if ( full_update ) { editor_full_update(); full_update = 0; } /* don't consume all CPU time */ SDL_Delay( 5 ); } } lbreakout2-2.6.5/client/gfx/0000777000175000017500000000000012610471365012652 500000000000000lbreakout2-2.6.5/client/gfx/shot.png0000664000175000017500000000041112140767213014245 00000000000000PNG  IHDR( 4c0PLTE"E7p);w,/_#>-E0I2I2J2H1 . ZoubKGDH pHYs  d_tIME ,г_IDATxc`2Vd@'X DXy* l1PjbC3,Ι3׾e$0xμ46?sL1]vau6LEU\IENDB`lbreakout2-2.6.5/client/gfx/explosions.png0000664000175000017500000026520712140767213015513 00000000000000PNG  IHDR,gAMA abKGD pHYs  tIME ,j< IDATxyW]ygx3ԩTB"I*)4b(Js+*m/uz6uo+V[1^v襶(Ҡ" ! 9睞aOSUĐTZNժzϳ7n888888888WZy݋^9D|8`?WZ_;~};7kU]+ {o+%8B@}?`,+-/p/:W;%y_ZG]_#\iO?*>7ɹR+A7ll\'9p [oeS,9H9Ϸgrm_y->qee?oq]c)bɟ[90R9z _H!R)mC׵SΠre^J [֪6p L)v\ޛϛ 9Is1cɻ[ΕTEqEnZ-K}d 9'!!>+[_bB )JsXtm>yJϏ|᯿g|[]uE^mݼϧƗ<#kGE1Һt VZR9Wյ$cZ#DUs%ĭW_+hz+Y+˲,ԈH)έ1FZ0" >os'N\~s=w?٘\1fR:x9% 1`'/9H=2F cJ!r)Qi]9Džs,K^*>1B,o97*BB)+eh<6eV1SJQ sx,2 Ji$QJdL *΍Rhp_ĹM[^pρQ o| RRʷ^i-nH)R"" Rj)/>.D?{Yx;*)pJM˲sș׵,KQUKY8{)W)y>%RCb rKTuYR-h&\}>gJb̌c]^ͷnpF)":W8'Rƀ(DbH1MwRJM?x9eʁQ9˛J)Ƙ1}x躷=zR?"7JJoN!\Hi`s"XHJJ&% 1YzM~/ҩ}-.ؿ}׻u演rnV%,G#(K1ɔXYT,ww!F{i~Kq*U;WE]UeY:cv:5E{{K=@:qNB4{{m \Q8j!JkdL rch$d/,%!DXkۜs,' Z_N|ר|Ýwj"8Bآ@{wyBX{EQTw?9#`RKY%,ܶQ(%&)˥8)12օ %̟NJRREDRWtʭ"Q8AYxZچrRH!w?u?\"寿??yы *U5N.H9Y_דkb̴m<)v>6 m` 0gb_%o߿DC)SjbLܤ,֒sȭUUSOZк|,cun|~;!Ɵ< {+odF*2pDJcrN9 +y @ɹel6k[ T(ReƐ1B;4O૏+Tr"-Hsιxl5 kp.3}]JD@'3H>FPp;H9y\?U2vRZ`τ֮RL(KP YU9c!O)E+N r%#rD+ɜ{{Fk&Tӈ1d,s9S{!C^quV7\jӌ9+)kceYF)0c`4yUuL@)3:!%b1F2() F%X1BU%D5&8~b]_tjg鮻 li"Y?㟯E}~P{?jc c@m孊y4_}87Jim1i)0S9cQs % `c gP aD10)Qmz{u Εs͘B)K&J)!xߧUj[1֠0ZáCPU\BY21RJMrޗ }G)sX(崮ÅCfYs51Q:PJqᾌ{Rʺ(jcFJȹ*X@;/cK":7uO^6CYcl8u۶E|ñc?r`׾ % Z_{-bls"Y0Ɣ"kj"&4Dz|ӚþB!~n_7KkEYekk1Z3iiJXN _ಏaRjmQe&jm~3ʲ,wwm_}|$r9~o嫾/].ʨ| 7Dhsc*3[.uh[2K{SJJڹ7%os^{SRRR6Z+ 7nl]]Zf5E0wY8R[|B"8r1g"a3{Qfs=bԧf=D]'c?ONR*}ϽP(%s6^7ѝJt;;{{{{Ŭ}-RB7;ִ\\|DT­s,Zpâ@P@Y6,q6̖1 C&ScD{AkVUl4b)V0e )!Q qSZx/_ 2q!!RAVËBXBJsjcC !c.1Z4tb+e1U5NzUUJ)T6}O "Bj%Μ<>,qqU%cqn'XD/lfU_.ڮ\Qǎq͘f\7D}D #^ɤ:ϭր($x?E~'SI9揑2ZjcTB`w7O2%ԶbOlĉf{N%H;,i,b\kZ=YC`<!fc` b,xֳй)O2/Զ}BLۖPPU0sPDK1rCH1s B$"_h1+oaTȇMΝ1@4{h[8|p(TӚzs gV+Xh> RȘQʥc}=a?1G#!$b!DQz4Rrk Sn)3 A@ض0ժ[,ھόu9;!JSzM7~R! =F36`6sE cRM}_yя^:S鲬F1Zkι6CY. D+r|u-5FDDTJBp~DA?;1Pfi6@<}[,R\JAb|륩<[oe93"b xvwwMYk䜴Fhm x#G~{;V#cL)eIz8K)p.DE熡\ht11{hDU%&b4*Q" c k P{ѣ11Jk9JyMg9GMmap4}V7MuQKD1c~`Y%Pw^E露VɫuǓBfl>i=J!V)Kſ?.s`qNJ1!kuN9ux_.1eQDs7z:"`!"ciZ,(gX kXX9]N"9pxLLMǎ]d^_ge9z4X_*˫1k\_ cX!(ov6kWmCJ7nl?}1Cz51Y7Gi]_W[[x!P diQ8$ <|#GQ}7T(,V*i-r@Uxn>2v6#G!z9vGy^WxK!Zu=Ç!!R3RYc#2!0"IZ)"V)9w\uUi06 _+IYʪқb:9q- V BCSJ9D] <ky'|W;vh2Y[_/76t*F#`ɦi: J1Rs B R߰}=(~sɤ*UEQjm*5wE$ZPB9Qʐ3">c4ӧQ#GFe9js*k-QNA1.?gƻ.-뚏f4BpvgiNuO];>mmxQ9WǓ㫮αb*QU4MXڦ8LWsxUWBƔJMWUQuYV*Y1~AZa@53&+90 Č"@>ѵֵ֥5Fe9ښZ[ckk Uu63Lz?t s8|L)@}OӨ 7!J!$c2fԹd2)K;:Gx cyHeb{{R@D!g5_oo?-˛nd:-g=mmt JB@#ŘSȘ ƘH]?طW\{m)h8a' IDAT 66h Sc.)QJsnx{dLDWGϜOKC[[Ç'u]mn:礔`""R!4Ml'=ХDz}]U\rDDt)FdB)j.$0,@3w9t*~6!0wwmJFkL'ab }Tx rDsH nl01kkX0!'=+X"J ! Zzc1B|nhf gj!JƜ(\QTpP)U>y%J1XâFƤ*}3 ru>#1R >JшK)}\N/ZҹOo9Z5!tާ ?ET*zon =˶)z_qwxp&*3]B 2c_{?>J5/Kp >tHnm񘭯x e9ObQ(X.aw~{{#; ∆ZQߣHIEwѳ[ع9V\. LTU?+p@kB1&y" q]wny͋^ݡCn2hsBDÒs!DĬpNtE~W~3>,Ţ}sw\DprnRTXS 9cމ'O:X,"`h¿rN))A;gkY(%0 :P155 f@ URYb0DAcDO7J;QjJ 8=;w2|\gǵ5)&˾_r1Ɣ/^\;RjDR($3мɺ.Ɲn{{XMv]u X#r"a:P֢8JyJ*":k›lvwɓa>oZC 0t"6RJV!%<*&by6˥o\ie}JMw]GD&y jFE<|ӟΟt^,h>eKem}mĦI`ɾ狾h8)崶Ji!λ)Q(1n>_~ͧ>]{޶Z§BZ4s>?D|4qq=3?OiH_/wwwoa2w HڂWZ5)-BunbB zV?}wʹLis\kSls3gc8!%H)<9{SϜ-(% @RگcCw}9)ڜuߋdu =!cX.552'Oi aBE(b&8Q@0~g"{ۃ Μkg޼ij4lt_n!(眼O)1!:YPsת3ΜɧNN^fM5Uc4m,pM8z(5+4dhf3Z.ԩfggoww6ϼo:Hsnn?vF4bVj(87DkLQϼ4j ߶ӋSfmۥqѶm׭b'q.91QJ(K9Mgs":G$"$®ե~0!)RCpγ|#.*bBX99#^ކ<{|>r>)_ !X)[[%X.a}vw{Nmk'N^.{@w\OeZ!Yv:FCK ESAQp0!%x|Du67$D "vB^\* 1u!!SjF#>{rve !@6۽mJ]J˾\ Z9FRBSczџ":k2QJ* {: !-軮WMlY͛f}zVJkR DJQb:#GNx⻑BZ<ARj}X=c!ȻuoARv1:){ch:9!&K%:sNJuB4kk8m;E>s֒1` 11F/D1*KswPJ۶}+OgaFK^0`TxEYy_jwao9cvwwjVԶԩFy4˥o[b ~=yw+ΙJJcb\>wDɤڢG#::sN ?YάV۳YR@R}M?;#O)JCXVJY 3g`{{44 `B\,=4]!6I5R Ϋ-|A̓1Jq1Řcd8lG#aٓw<B 9 3HJ1ks9jZf1DOey( g躳uh}B9E{KZ(4RQʬjS"}2Z[8c,TU~<㱈|8J8y{Q^bypΤd9%g>r5B^nЏBx)QJnLj,0ǀR&!2Iʾ?uxׅ r+A0ʼnW:.Kzs}it:{ 05MYvnT2<آ9?a>ŝu>#v!4mc~ JE,bQk4\C<N%S>L|C'ժ !mK)Bնum ԃ""N&5L0lCS606jڝV93kYY*Fu+[,^}m_e(cBHLQw n-ӚZbRbJgNAa>]:}:Fr]'֝@G Gq ҋx!\łh-12X8g!,maw[2Bk*? D$!R~oo{c:`!1gσ4Nۋ_ئ)WwկR DgJuDs#!ܗ ǂR],26Rk* zxf3M'O'N+evowwo>bGݢ )y)0@qR'1=#cY*KnLRBF39L)nm2".gҸ(XQh簮a5P*s{{̙39'Re֨5ךügl=:ߵ3;]UL9NrH0 1 *vݷtv˵oWEEP(6sD2sjNϴ; 1)NUSڿ>y0ަZ 眵n}4 !,i['巶[nI}/4 J)RY5R*)R oV*Qh:eIGFf2r{;HFc±cf?ZSꘃI)[\o9! \眙yZmmfl[-%pv[7mm}$JBD ~?3I}(,Bqt5]DL4=:ښoo/[,߽ۜs_?7iOþǔ(%!PL%< "bȹm#1nomI))w? $ AI쓞DbkkX֖?~|9fiHn$oats%W]KynblrB^Aori۪=]s~6CcdQ,bb}}p_S01J)RhS>v.j(zc U]y=%9n%`y6˛>rK7!=4a CIO?=WZ 1n-0G4DiC0kkwt>zB(z}c]7l9k񳟍ZzDa)@ܑ2,0@}oqvid2L-B *};/_fmqsGD֚P7sY 3 Dñc1:gV.ч@D@_Ow|܋.l`6aq$D`c|>^f0,9?!nCFfrN}Bsb$Dc;:)~)w7pWz}PqbQfB$1/$x\r+h1 R"*RZ;aȟ$r /Ybq6K3ǔbJʢXO%c}s͙r_BBkmJzRy0bMLa-`cs}3slQwj}=87u! !Їp"2fy[ B  !U1"^N=~R8 6a:D9aǾBLI)(drҢf׿/>r{ﻮV R1BqE5Ĉ$eooE8#|6ۚϏ/8v IRLZⱏ}nSM7]~i[Yc:+Zm77c֘J^kZ,cbyߏc9! {D7|CϹBXi 1 EX, ;7GkM|. BW1LIQ D^sϽ@w(S vѣ0u]oNr@)W\uU\/,((b  "G~S7qD)j"ښmR`&!@EY,e;Swf< L`<@::FM;)D 9Ƒs{Li?X`m !+c$3]ySױ9,lNEaCX}B}93mRzړ{;^qI }۶vdFk f}mCnxWHc^{'kQrR̈8>z?_ )E \q2y /wĒp/rB~q3JR,0ښ|SB)h!I)ƈmO4 S!qH)H9ֆ֤unM(eU%ʹ%b$!DCGnmn6*%@42w! ؟Q98J)rb4wBg3DDc^ر٪ 1 RǘbTN)omE=0,v9̛Lջe{itBd"6`#r)v{;(XGb1sNIR>CSvyt]r>R$ju`!8fc@c};K7ƈDc[N)-PJҲ?]'WbW ?w/2XVy4.BIJOZuqCߏ1=N]r W^vۢ,9Z{[om11%󭭣G9#uNjBd!x?x`mVjd.1"ek8|(673pmakK3M㶷qǷ]78&"`!)5.ShOOq@'#E6pnYy72+"[2V9a&| z IDATen66D~1t 7._y7 QP(}{DvQ̆K/`0{sHivW|X Dd̚hc@Yiq>Eg ĸє/Ƽ_EStJ֢.ŝ ~xWs"C1|`榛^p9(({^ƻ `9qŢܞχqL)44#Ѽ۔Ɣ1 SJ%/2ǜ_tЯ”{~(OT+D#31۔q]rV[[JD}77ǾDUm+kkqlSr, oی>0߾g Ç}΋a "D8YG#D3յ{Xx{ e3pJ1Fb.>k?~!@)Dmi>oBwE~1mDJ*}/ǝeGJo}0aJ!̰L܈QDlCrۜd<oî}yc)RJ`{u9/3dQ>}C(1zct"%2KGB1Եg][M>Hh"g>笘U{/g)efVE129h 7ƒZJI)%3 )#3b Ij~~C;Nv 7Ikg]tQ\!D!y[,r]}_r0CoܡPʗsϝXh]Zl)1"ѲjyoGяJ)r2M# _?~饅R֪is!m7Ͷ}Nk|E4!)'{w?tǻ7N_߬ yc|G?zןG;‡q|؏/Ƶ, rif)sn ^k6Ɣ) !8}/\/w_vRIiq978v޿n袺1ڹ<7_As_1/ej+.,Ÿln'c72+bsÓ993݋gmsZUBnɳrB&(cSB9gZ9i-#~+w})aX笌ʊOx?rn}CIQMbb EmtI휫F!K[>>Ɏ#ϾU6UUUu]AjW$w ~>?$cZMкPs,r)r@)Zw__cUFjIS)q#d=_|K]uʨ|^r"Wdkw*RP cd"IPʨgǫG2G7Eg_;rV!0Nդ:WH%2R4NUNj!FyUh{cʔWM4UiJ]8Z?p&TGNLIB4)qLSx\ȑD-LU8W:R@*JH$Xr)s~.OSJC7[r/ezeeT84٧ȑ1 z򋤒}R$s{WRJU%.$,(DZ+IJRJBd9Qu؆ovOwDZ?{;Е*kQU(WjR@U hEҹb3A;~1{ŭqeYM]UU.}źK2LBu[CAu)E iHWD(D#l&jTEXdJJJ r $ u0{y1߸F_}͍PR(",b!IwBy!A,2 ITʨ$P(Fj1[a'#g1NI+ɫR4TҹrZ[Q0IUR!^N, ҐRP@LGݿ]Rz>r׏OLMtiUkVF3E,D ?4y} ̂驯n4]ItfkF*A (J]OL7R^1S 1$ND4˯=|to4ţw!0朲G.x#5J!BST]rK/AO_[}g_9)z¿VZm;OԆ3ԻR8:cjTF )dH&a3鑬*)rTcƅGCbH'XkZeI)J##dYJThJ(0=VzRWN qL߆2ż1)I:oG2I SJ ȶ4.IƩEafӂJMbHk(QFƌW\wiwWj]Ur:VUTFikzBq[qM}%GH>zcrWk@#A${^}ODZi+]H>%2婻[F?X 1fn3%  J*((KBAOO1ݻ'g<ҔڔjBJZFO¸$"*™;@q !}bf>3NJhmu%MHA E1,Y;l$JZ,ahS399%<o F99KMRkkkӍh WhH4r[4cr`H[S@k[v"^svĺhjR6z2' kxd\1ƖE~ ̠~OXWjsVYf1%άs6eYzO>z$ cR犯2*Jj-L$PJq'sKiƨ-| ](@fQpf90Ə>.KEUmiU VQʺ)+ Yq(+Vu~&)vǔ9sYrlз,Ѯnb@L HUV %P*  X(-:PY)%%N̐9gμ '-d@@2JAJQ..*+\m&uAZ4JP[(;YUgbi#81'e *rqKs2R:ҥ(kWLL9)5U5qɴq %":P`4_uKem#(6}FHb7ȋ/Y/Zd9BD L,sQ&+ )'">7_ngg5 {r?Q)֔ER6!ޱ KPX7~LJ Ӹm#u0D0!# "+O>\,X# TF(d*97]E̔xB#;"0B!B$ C1a]R75}9.GhM]m]]ke !iiϴ4Ғd-A ְn 3dGuv @R;|zY(Q HuT0{ P`%( H@u2!圓9go0 "򡧟w{dQINZ뺨m=V+JF-aB 5 dbHrfH b>A{_V(leK ! 5$ ␻8Qs~|1Kҥb@Å*!_|&6;^r֘^aklQZ  J(~L{sw~ۙ Y[! ʉ3<˳cFu'1;$)d$2 sλ U]8ek*ɒ5BJ#S*JU5br#)ϜPq|ZM;GRF1#cUV$d/❯?#2j.j&UESNiMzKNB@Fe[!$ b)s^/ D+lPc US~mu.~B4dJ**j*a*',Mzҳ)QmSq}@1~h|Riw>/9t/K@sERؿvJfUAVhВV%L @#C.aHIU1k# R1BpCl>[m! TGe ;׿/dfR7fQkg,)em[N @t5XNl8bH#{̈Ēv"C ȀlH)P@N F+@"bUk #pX# ڀOHjPN:7mdpJZX(cfeXK1ͨۋMQ@Gٳ[?Ώ] m~Na]]žjթZkDk1D/DIs| Zt)w|S~`gDe9o9..ST6J؈bkq:+eҧ#o{p4FdҠJ*SMJ(UHWeU('lOey]BqΙaCJ `q?_v^v<[Wi9FAm ;vC I AC`D D'G^[nݧs'9c`E82E'Z BrX[ /GdXrynߚm]SD"|‡NPLEbL-ml4f$ 8j]pTKT@8- pܶ!Ƙ<1ea׿uJ+ngfHc구Q`fH!%Q"h (`M V˳NȀ(B7dƗiVZ4NV&AD`9o%7JKi(o9ˀQu;I㊲n[[7NoPUUUUZtl^'=z߼k 6ԩDstWU{^2*$* ` @r^UBq@?UCvJJqO}ţ];t.B Y$TijTkM#4 ikL*2m>o]l1'FJ#/>pB8`{IJr]!;h.a4*>CFNV@':/<}L1e躺`8&B>=: +X3E /A$b`FcN@$P@΀8C>.z#%ԢpxE5z77,V #X--]2@8@;@ln&$cupi?V>#?xG@LReUɚ޿Na.+xf طݧv1̇~LqIb]YYy>;'ɐReCBIJf{h6T@C ۣaLs/$R.13oÿ= JSm4'6Mc5!!"Ęz%B:ix\SM)>oj$0w U?OGgLdAiY[jSVlӝ~m6r{C̞;=ޞos #Eż{I6ZZKXU+&մ4ULG7tRac 4O[0)+@ڕ̓+^p)'bd,quڀ3dP(6D,(A85p8|,<[hlwFAhi iv500P(0/_J?BNԍ\kI[v sbBI!k1*K #iȪªP.sGPInNC?@K@%N[ӗ! {&OW;Y*Lڕe*Wb7'asl:i:S(+$]ЏǯyP9a`x]%w)gf󰍷 bҺ &LI)bԭ&f}XZ)%!"Yk4G¡~{ OiSK4R'3眙yy7my*]'U/g]𐪪i=i&t2i3m'k(k Sk1-E3}Qz#mPTv۷ا8{?~s'փ^Ӎ&FjWkž }><,>J wt>t9Gϑ|irgwPמKԥRڹ$ݪ+[[UZYFO !`Np?qXy6<` 0S[=9}|ɳ>Z)iufY?=uyO)qjXz$~OEϐ fʨP;Ih5"B_N/* !--7UVO6^7^DV` 8^- 0m y`L9я9p"Gxgp>PuQBʒL!}{wB]U4USim'RJ!.Ba}D6*ȧrݤnۿ~NniaiG%W=)BRV-W7zRM4YpIktsH+}+|E`߇mw0F]sO^;Tht\ci]eTzRٺP@!#&!i,Em=&+,8$1Ga|pcc+%-UTZ>ݘ荆6pzMm?Bep%_VK+R aPJ)P#:~w<ĩK@% L3!b#ƈ>8>sri߃n_{-׊j1_oT+N;>xNmp]VEs@!gc>q).A$L@$"igM;34UO5bߺ`BVSOUN2)csc9"F}f67%8q?eSOY?mlsJ`!CNw]N}'nݖ8x;RB'+Բ3/c#!Eѧrci'1밾N;]>Ġ5Ly;| }\I!Pwe{y Ә9> )h[ޛ~Vukw {:<]CHf fJȠ(vYOuUwji]42@TA@ n0@pozM:!!{ܻ{~{wfxkG<=4Jh2Z{9 y3OHRZԺd6&d\J u9ߙ79k(ð>; 闫nh]3v{۝U)IID=[d<ka$*!&v( eMY]Q-ǵbNXO,q Id]uUWfdtVd_B ZAQ517$]ѤNF'OPdH ",+Ph FhZE: u.\6sMH.>'pw烻;<)?Gr\htꪮz>}:i"Rqbi(CYKc6XĆDŅOg޳݋Q=f[]]kvX\BI+.X-W_xoTRS1Qc3Rz\* Q.Tx n|K.F9d&ᒱ`j>W3o 8$5HI˜ D}잻FD@v4tvlTu9i|'ida:56aCƠ)ǽ79TZ겨e93tq99Pgc8PDDê y;G9~|w>Y4_پ]7!9B:|$IH҅.Ffvh}h59p-sHV'ҽBw@%@.k&{mJM "{\)G(uUeUqYTb<ӑ4QPܙx)䈷*o\[wjiK\ɬ%k޸l5ݚlMƓxH)O?OcRIY ]1!/x:oG,-%LDkrg䔄N$   zT99du]ϫ~7Gf>8cJ@,:S^31&7x[Z$*)WA:YqD*>ϙ/hj Yxlp ?=QZji*1*To0w:wbf[tpF'\IwnQ m ssty|gwwYLJn5Um}79s9 %hfԬgqoԘ6ZFn .\@B!ꪪi=t1li($vTFh! MiK~ < (@Xl QI qOn`%'*vC1IP 7n(HhSz[[Pc RIpdK!&p9,$Eg=wˣd\MفՖZ[ۚf^/9GYeJg# K~'s^^_}~?7z)G B}d`bt4As(ߜc^ Ç9|t5olw_2䜒u)A2Q'aj S}qEE(HAHY2DRBY h2*%uص < J  }J$P`0s }rZ轏6SL9gqZZ#BK.M7B# ̐Sw;G!AXoz8_]nZg3省YeʲZTh '|Gwv~<@AGm^.h<tކrxZzRUc JR*cу;ٔ vۼcmVLJU610pQ\wLBtQ]IaHIqB:,qw׏wiyvmjmpi?)0.*cJS~w?Qbt)mXoA_/osW;/ }rM藶mȁ?ڽ}CsEbmUZm9^ :?803 i|mcG_-dY6 )XR&"АqV.&z07M cJw ASN̐!gރF3# gNPp$G Le{nvfѬ'vm7nyO~4\ɧbÂ@J2Wm "j. TlMwѣcv;?зmo{©LQBHJ4;"P<`²vGw|\ K{f9ryкtF g(#(b,'Cܷ ߪdͳ64hM}3cq 3T$ Uۚ;*LYX).81#4 ι I)o:`ekNΧ۲q9gD1oJ[_-bv-]V )~7#1R$P.ܖK%ҽh'p0kaW09qyDw>|ru@@){A5Q(mV !++Ag.Ze>QAƜ0Cڅ[vaLqEXSq9r1$AUi@N#{ 1E4 A0a*pk6 F|C 6\~_1GT)!ºKfOW fΐ֩_Uu&mjzv藶]nS/ץ*B+%%$UDn{c^@o}ú q#, :0iG=gnO|=_?T)2N8 !! tdJ'CDCj V9g4Zɽ+=A/}ׯ|E$PT\(( .VΨ 킗1F59A,S2 sNk}; Xqm]lFzB@0@I\ˑʂV+x>Ư-si8JGWݪo-fS{CѪ*ʲ,K۶7 oͶMq.Z +$b1_4xYF86J.>xKpD|NiiyvF z%p1>6WaT+0M72!JItR9U⨂I +Zٝ)A , T|W@]@-6TzfĜBb׶^{*8B)\dT\rTh=w+C`Fw~u+زp+M 2|oYѣ!At˯Y!q]㞘~UN{(]y)堇B.GЌaUf :wݲY|_]̗J]mCrbpPT5O^9.$Q($KUEHz4  !SHpdNW3MBQ` N3)'Ì,4 :"n ;(Aqi(2 i8!3wͷyxtNBsIYPJ%ݫ>y2JRՅ2RP5v:k*Q2*cP"^CjacM<ѩRkv@^a3>'okb2_uѬ2qAYFE)Y8r M Cp6G{WRDdRhwܽէu[NݨDk$gc e: ɵ~H'ې0 "aϹ{ 5$kgۂ8rd\[2,[#LJ}hqva/`ssy1$)Q{d?,+1j,7fdon7;]9j\N ]dJ9˴se܍R4N9{H1ţN?#(, UJ;Xjm 1L^L:L\4b`56 >ǖxtr(.s̟}''"gAqRR)GZ!A1w[}VĖR?ezo}x_ U(iYe:i.=]lP^_U\aq8/|lx/7 م.6ՅNݨ\<qR,X! Bgà$.app9UlΌE?='8:Y&Qa%IY̞iݱ0~Jj"Dv] >$)c_}CJ>ss}!B ոsM ;# @  ɉU.ar\dm*=2=ƔN(P(ERq.SNY]P]IĐ>.mX$k͋?b6\m3l-@y Ve;UUQj{d&le!ȡ.Cx/6 RHm-Y>VE+̉1Ms*LZH뺠P'4+d,I2Hg~/񕛷C;A&Ş1,}՞-.ŋ~H>Ds<ΜYKZ8b't Q-yhӯyz0 a߻C'$̐I"و^ M"8ivŪYvmc_} k'{2&9{^>eI*#搻 )X?bqlʎ=j)}gt {~×Ib6(g/y~kGvA]4֮\H+ӨM)8Gw>jC$"z8]GJ& W{b / ܯNt9GnJ)d^r`cC !9SL(B ti>8bXcdv>;$ Ljٴ7ɷ99;}}2*׿᳏xAi+Ȑ]sG" >6]][1${goHF/jh{׶iGG1- ]c*BnzO>JԷ)l}B.U-eiKFtqu,RLUuٷC 9ArvS Bk3{C"[F.N<+(+3uk/EKPc80?~[}V |9X;Q:T0 tk91PPb<%Ґ.TKeRػhhta&u Bݝ9$Ii(U*bmy5ǿ2,R1A2BN Y$ZS# U~ry ݫOݪYrszh(I 2IO~٣[O?";O)Bwr`A ]`i;' tŏ|Ә=|{ (4URPKV nÐ1#=7]^;G[mW5eeV5MЪ`c zםQA"c}rP*e U1ƃH#'tav# @T~ CB)@IU8O)G9?{vJ_?)x4B*C ǜ@XRɵq{Y8tV].f0DH^ARYE;'MfYJlV9e[hJiʄah?0ľ_Tfc8 co?Q]ė]p ч E=Q>/XO>.8coTK7ɚaɱBL.[v CAҍ~BH)t'G?jه? YǿQxi`E,e8ܲ) ! N/ʬ4Ql{O]sZ $\Ɣ@Dl1eZIF:*RFy$jqަEQX2u۝b]us ^%gX:>8|pF!Zg7Z-MWYW w|=}(F)2$~\SFm8Qgvmg>~TKSi]IU c\Qg`QSn9Z!˜Bq۴}cϜH11&!d3$+z\^ |mm碏""=ǿ,/vSƴnʢ(Lٳ}?|v-O%>qtKsJ>g]PBBDz&h]2D)и5- 0ϙ*,H󨜌CWh960 Vܡ8dv}-'ƈ&E$1s~X.2 r;j]Rt(U.8b8p!L 1~X9 ~47\Yxڛ֏\ƶ% !t0 " j.} >F9CbH0 iOF>9fn`Z'=>{v$Do5/yy cRx >['֘.rXRJDOnE !u]F!J)9GN1?O0v|=ڐɌ"EǑ8v}JYPQNZ?ܺAhjGC7z'zk/w ]J=d ľ(YC7wt/bIBFQG C?(l3y\J 9ғg1$a0 vX:׿y|RL" e])}9"b}VbmN}6qRN)l:c{r Ct}1M,~RpnxMuw8qo#f:0ɷE ]N)eCL1C;D | z8wd!ؒ:zcY*4Άr(EN} CCXW/\|ݷx?XH<$JMCg9aӬV'('M5nҭs9 C8[ę!r o} '>|"1<$$(@B$ׅK# 1mڡA$H !dTRcHo?'¥Ϝq?u @|!%fp$,u!CO$\ B)y溲!AL c)R vsc o6('9?cMǶ;lp1,I#FzR Z,ʾa>*eUJhc `)B )4 &jvhYS{)#IPB ɐ'po2sN޹c6 ߋ'x_%Hd+/W_Gl%\{ @0dNBޟقɧdFB- fU{tv")2Oy@7NYZM>pxB"980=g0j.TG=>e>.{%R* ΁E$Qgόol8; oM7p IM=%Nѓw]~Q=T)b[;\-JSUK`}39|&r`UTFׁB p&uk.D$4@!(|C!?q^=+Ҳ@v}ߖ\q_$̐m Ć3ƨl8k<'/Ѕ20Qs>o^@ G-v2o8lƨl8k\|}”RZl3JٰaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ s4px%/ xֲaÆ{tF33JUoO>r`|lW^x?g>B )2ஹ-jl ]sj{RMOy_˺ԥ@}}_mw\rӷ~ʋTB)6E 2s~G|m.gڰrJ60HV^y+1!GPFW<(z%f_w&eonecTN_B ԫ_rKT/Y>[?{A/RJ$A !&HZiR-YeD2~x^؅sN>g *~퓿oo~ٯaFr4[F2ȩTIˤS}};o!9pQzUyilI5z2FJUnEZj-tj`HF,%ӔHD,t<RJQZ]LM1b2_qM{_HK^AL)%`@rпsa5Xx6F#-Q և4b Dgv yJ.gODVz_uޑ|uQBbt̒H0 DL>%J2J?tQWJ+.{E>]{?IJ,~UI*RhT"fQ$bC~ÿZ׵K]TB ! ((j,=9g|TFDU ULm\Zl{ٯ*C}Oӈh5f%ThF gF!b̚q*1 uV2 lFk8U9?~x8UW04$ə5iMŴnmmLIUK@RQ pa300D3ed4k˯iO>ٕfz6-r=ޞx6Ϧ2!ffj BvܕPdnwpCZiފk^zKմ*U(NRJs.s̚eeZf=#I}Ϥ 2*RJU)9qQ) җ OW뿾e̠9gv=(@D%Q#dKUFA^ A) =1cTFhdFumB$Ȁ1`TTGh<MFjYhue{ъ_R9X˺ 0S70Fq1S-51)P*P%BPT I#Π$812B1sodD@BʘB%*KY,L jhL *PcxŢ9)A p{yF|}mE=S3I5mOt6Ԁ8F8P@jm39,PȥOI@yiYY;aHP*""`3Jp4_JhԤJ KE64*'¢fwy{?sfafn|z\sﺮc_\hEQeSNʪ1 Ԩٔ:dVV3 <ҨBfI%$!Rk[ucjKQ("U]UUg9q>ɉ&˅4JD4& B)$SF,{u)}g=YƘҔmѶe;UY*7|J-@X@c3-j@b"\I!bd& Qţz!PB$K]V*Y'vL`A%4`90Fe 9s̼ao|;z=6F+l%VbҶm[fL(d 0$d+ sJ:9!%C9":=ѦEh6\1J$A"!QP c:c%KK^_P U]ekE|_?|Wq̤=Z.ꪬRK1$^i4Ū/-PT:uSysc&8Q:C4m ;9_VٶigͬUkZt-ZhAJ[)%5['gHJv>/fl.;&:)'2 o1fb2l69JS6TTrsgjB=0 ( + 6`2I< /ey57ǖ*2FHӘfnFdRb)X@ 8` 40)1R؏rFD8Lgte-M]٪U[T2,H9k@:M76 IDAT4L z *jʢ1RԤ3~f^ѯ{qCѴmdSjZNKQdg5 {4+ Or[q]$9:C'=Cr=~t*R2F6+b^RD!YRAHJo)LiS:Ff -@˹Sk]{\~Ч~\ CL騹|T\i&ʉTfjH& Q qRPIPc0! !..]o> Q!3md=Qj-(Y"dW  l`AD9 b:?{f9̖Zk %!'(I)Y2UDA4%SK,TPeYk$KvV*YQK0լSkOZkN1S3Ƭt$d!܇?ww3oxC^TE۶割9TeUZjb^dE/{˨2M(tw]s:uԬy[W}'O7Vּ1u˶.#CJ)I2N?CбG瑚%;ѓ٬E۔|2L'}ti)Eue2[mQEY9q5}0bc'nģN?PŦk=irZ(ff\FR-hFZ@$RABF!i2ͤ^5^1NTfj|{UާpZjgv֚˺mS֪Vr.!jIvzOzD^g_|~q칽[O"EG~Go[N}K꩞l։+ުӕ9eIr&EqF|@ ae( ^;_,rHϾ;ʶԃg1[ȨP0QF)T-Isn D81e!wss0}'_3^Wnfլ'<)UR6b{*( 6ʈ,RN4Pu~c x=UQu9mN7ftj cNrsWï?.g_ak[.Yi-ҖMSc9HʋZ5%NXD\2PpED8RJFI5?a=:%4hҍmI;14ڪ<ذf$BIUMT'mu1)~]tpXq1:'Hh_Ob>wk5:rjMD@&L 00* Hx]:iUtߥ]_~g(e ٯ%I2u-m[ՉJV s T&!m"F\%,6[BiH<6#O~` >'.2BBLI ĔBB0R_iO*3.IA.YJRꎛ `1s܋,B5-uys؂eQm1ݚNNL'mc1)%rs&"d ݠΫu}]j+=Ӳ:%jbbO{j3z1O kmdc`38UM*,"S~qBe?ҖPZ_c. BcVg]b31-vZEYbR7QFIE$!ϳ>V!.ma/K>IB%/|[%]ߕ\.KS* jB  19RZPM˵f8Ж-]r$8sCKB yA]dGNOH`$IJ(t .u탯iM4iЪWi mA ` |]V:/yn $A)TETi0'>LE  ( .qp._Kx *D$JB 6L_"RIL0XZUW~Me]]'A2t2EaReBBQLX5ե*u֗-»+}E=DJh"""cW^\ѯuI=U*uY2U)ԭnBޞzЩbRR޻gdgs"a?2Ma(JQV*f^U3klc3Z PlA:)"jL9I-+~g/E/| E &&~XnMaZ M? f ߒӭ)E.sd!1cO>'EAeU l`Z@yX/,$HRU=뾞 ^I%Ŵt?aϜɤhJTVX]j]S]iN,@6"An "n:@dǁW?c/*mSU[MS5f4 }-*[9oc.uF\g~3w^gMo t/y Β\asL2ٲhZjOv˶QR.BE92q抪Vw_ 7~׍Ŭ03#*a7^)g%/Y'k^zĖ{]Sy?xL4v6N鬝fdvm[Ń }-gRN$ *I"Mb .-?;| |iQRզj{}ĩt=ڪDiN;־R"CbD >D\y~o1?VuZ׍hڪ&ݶ*B$ͺC}4p `| [c >zHg1GQzӟ^\}st'm?Zkle|:;= d}yLfڔlnjmd-f,]K89HSȁ;}2xI3w֜jڶ-RJy;l}V# 8>' O)fșSR~Q'+ a T>?6hv2O̷Nmm_=jf++H03!Z%2I4V;abr1s~ﳻ| [)I5I3k&WN)c,͉f;;:9` :7FU>"~5xUhT3)&i|RLfI3imZ;.h"9`@6U )Qʔ#Lj{S}æv:F7(i3O6)=WTġ' I(dad7MaQn>v+*~߃PEMU[jUmoͷͼ*L+$]M4;?Q6M_y;1 .҇t^O'O6'[[myeY|M!N ".AA8p#6CQD B XO&$)=OoT3ѓh.>Yi33 /B.&zP朕UXYȸ^$Ry{=aL'd6W}7_F@.2+J(Q}sPJB-mF)ue%SH+<C*o^v2l]EjF>@I](Se. *q|B.=\7vBiU6Eq) [6:#u\k" C!Gu<.oieUUeQe;d>ݚn*'e}[m`r+w,}<^;w?/z\wC7;E((P)ۜ<9۞lϦ=Q_V>(@Dk2sNt>s1vQ 5j{_dTUQ5m3Nf۳j^٩9<(ܣqMUTUQUUXA 1l*Yi U(d֙sQZ u~EI+Z(uF]ۜi,1 O^{OINME)Ek\J-ULeN{F#2cSL 2Xe41Xv)RJ(Ѓq A@2g mBQ"aBz"{u#n`QVFj7`+>̊)5 ߚ_ܺY/2-Wn5}@xg.r9r朳 XmLBgyV;a3R#, Q- a7`뢾י*!$%U]UUճfP-m)6} 8C.d1ȡEE՘Ɓk{-?럦^&mdTн0 ȹXI,b1yD bsVV4r1:",}Qr!HR H!%sBJֶ3(DgCyjR*1F; 鄙7Kv9)fUTR_6׾_'O9Mطk-U61_{E_"I{> O2-Pl|2 )?v޶[F/oqFJ%], M%c@;ІR$H(VQDc!eIAĈDA#P%0?l%`'p>_zW11ƘbO(c6B2crS4G}_lZ ]s܍q7;c~{m?sΙ%KU(muYFSDЎɇȋR<2 !t> $q~RMZFkKeVBsxP)E{9-Ӱ;~.11E7!G'"DRj [TJ#N6e [oyyy"U .!17x>j[ueV))م 薮ر%uH1tCUrηh^w$DS)fo:.>yݟǾ۔{}K ;;yS{^UX-^c| }7E[y5VM!N \ 0 '=x&.>=s~gZ<@f J$q\gF7dP yΪ}2sCSre} ~ B朗9(7 81`ALB,rH8?g}`xŰ_-e>c7v}ZMz_9~N0e|J)8TpqFGʍkK 8|6--֋U?}apaݯ{?(LȑIE%A|]]@ 059{b=#Ͼwz\Ꮞ:!hRBisiNMo% KǷV3F ~[]-ŘU\0]% ;)ԊԆ@m)RdwY[9'bĉh$0+aTsnC!)ͭtl H)ʩL:6HYy3ccWR.eʼn*E[H; Waqfrx֝M1Ÿ\Ss1$EY6frjbO[OZG` <x` 0pIgn=smwz;86TRc0ץ* ڒJ(=j+w$V[sIBp9HB COL"1.CAS`zWߗǦ] yi@0q֛"vs)&- π0 R0u_]߭b\,ʯ7O^z˲(  -TԖȧ;#|ܹdn92X瀰vUc=! cM~_{=͠1\4I!J)7 tYJ 3oZ6HP^g3'F5_e/^jX-OAR[F9N(2]P`1ϜFRrzC8ϑH]c7BNX͔,:JCgEe׽=[>4B MQeQRM4l>iJ;@Wn|w~g pc]׋H+:໮3XkM6I:O/ ;#WqroQST2La+>HHRL9f!0!L'i.KxhIn 5PS2Y)S!vqݯ_FĜOE`&UshV@9<`282:`@-mP#u&%${o/"/Ee)Pj0 **HR2IMw;@L)FuupZ9ew?ϚФ]mjgݸvX T%)&bB`3(ݔrcr^$SQ2)Sd4%I'7:QΤI>J)he a}zu]ԏlPdΙ<}/;M?UPH%ev@Da@oyy`>iPK2gE)q\>>Zm2JZ[-;ӕvVZPI!ñkK`|^&INU6v1:r^sD?{?w,a_.vRʪ/(6b%LPIX F,hIYej/ /W>of=;Xq_,b,"ee%xμ0 ΰrU\ i1iDž׿/}KK]*R,9*FݐqO*1DEjĨHy,~r/0bя>4 SH'|#^˟gnc8wuCp&a>@{΄6ցXŰ_qn;x۟kn)x]r=4m]%z^[ar/Xb 8XGa;΢_IiUNJSdSQ Y *TP&JPC()3FTNm4C ajBL d(phq dMfɦlscXR 2'sХh %v!F8h,Rm+ I$ ԃj*.6zt9gZz3b8)&!X)FPA |χJ87uC9u11 CJŶ{R(|a5QiH:f!Z֐RTviO^ eHf`8=]4ʐ#YIe7b) _rM>{O c.g{ٳd) @2JvrZ_}ܽ_eF|+_@H$SLoZ?RM%SBE!RH~!G)ғ&/k {u V+ ~ʫ!sКľ~cB[{}ߍ]GF9R[ouIOd1]=md.*I+1fz_l 㼓]v_dIj98 H6U1]jJB"Peъ =6@V;4 {neOEs I&/OTҟBeB nuQoͶ guSI)d!$EDc/w uo+pC1 Vbpk7z]B$ADˎCR=/yKŸ"<L4U=o3n9\J1ݖbCbuYO7#c0p+^~|'.rRLJ cLR'pnai=.NLCK#@DJa߳4}tnq˛n9-0:]- 0(.t^!v4Rf+l) ] 91Ma0`)dNytrgo'QJ:D* ,sq [[^{}ˢRecdf)%B1 %L~*Ya}s)ui\w׻zcEJ(apo|/~vV 3r{>XآQ`zs$h~_[4*3(݈\ݺ[~_No ~1DJ$e͂%$^>?E ߋ#64r <˱$$Ԩ6Ze1J2(!"z >oueR< VWzHC `)M֬s3?K#*C *L0Ąnpg0@ڈ~ [ RIRSKO#F|Jz~o|Σ ~?^nRDF[Ֆ\ʉ1BmhәDUWw׻яc8$P uѻxI__'Z'VDU?,SaT&[Z C8>pȜn E]rދï~W7/n|I7#Qp,gԿwn=|5/c>.tco}鷼TYi>ᥕ;"rٱcv}9}߽/J(oyŦUU/z7_w1/@FPg~gԷՖ5b_n]ϭSLRV31Rt8I%i$MVV,ɻ;muM_aNR"H0KDp!c0"g*,=JIF)dɂnw޸x*]э]##SR7l<<"l4[wʪ Db#!zy>!2Uc9PX*RLj ˉ~&zŸXw1o>m*UU"S$щ0ю*RNݢK]Zumɱ[Wq| )S>c.˶sV*LP)uWqKIBcs݆\t$EǑKer1'DS%ڌ|w|ujHK !:0{]{CR H] CpeGՇ3o`?zf ~??3e⬳'ߟg:$HIRjggg *BUg|\~2;?g?(uvjQ4XnVn%V"TBBWu=d1æբ"O\;w\u YqEJnHگ-x48 #\AfCG1Iee9roSJeCr#b@Ԋ?Owoܑbv>#Vt[ֱ}(^o?bfc:Bm6"Ҵ6_v8C _6;20f)) Y;Zha -JE|CL#O9vxvt|%>yH|Zx ;UcG4L2E+9YO~OFbrhu]Jq6Fk#d8fYzBN !HBⴙ6m3m7~ƝR=|RJLVˆV5^e}$%"E[bɲkJTs9_4{#˰uƜXks;fv˱Z12#%F]ʲEiʑUrq 65RNdc4{d2=ܜo 9*$6mN4No;zO0W)fP D4kؘ/|i>}Lj_N3Rk{+ϺPFsm1pmhX۴mۆاnQӾs9۟)|`웓| SN9S)7>2o|ߍ(M08qֱmϗ9j2]yr9#xW}6Nڝ>{/=xǽG3ƼGZti6̧M溞գj$ZւvQ#rMTkg~7@rEXYZ\F|6om4o3!E9Kߺ_8vqXТbmlE+EXt[ϾHw|bgg=mhb1Psc!Rz\24SNKHXfIKm}O9I&5תVV倯i7C#rdFkgN+B(d\, M,Y7wR{>ZhBr mhG"rʐw[fTߵbۊ,&4>{}?o8 BBy (@!a )xw@DB<Y0dB 1Bܜmm/dګxL&5-#<0?n=23;WXgg~? gNrΒZH>S$Ө%JEJZS宣nG3}o߰2RrrR`aͶ'PQ')/SOsW;ߤ^pmJmt 4:UV[묲*keCלu jUXSD â[sB+UX0ք~1o.nuolesω%0]7?̟Zee-!b5Zlm;6~}|ն5|Yr|((+޼lm4b7'+u_͑cWXW XЇЉ;_s50.+HP}lc{o7>J)\i mhC }7[wlK^넓Bj n[ޥnr kWje[޶;VzaeTV0=Z)VZ[-Hbkw+VqVFeʼng\/ ݺXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊ+VXbŊj%Wܐ3Pnoh-+VIIϨ_uUJz bο@mߨ*%9B owV8fg".>O9* . )TJk`c'=/}D[ *8jJ)K)1s!L|~뻏{/|beߏ `hBfE5_t-sd)n=0ΌBHTJmos&%o}h+1Y?N;R;>'Zp7Ts!̅J15l>:tx:n!pRPN9pM~*ƖEQu]\,{X '}~{5_7 cBJaJgmY SJ1޼=aVᯯ3vKBړ]_}g^𚽧qs'V}ySnPm(m+UE {1"cZ#)K%z38ϿZ놮-z,˲iNPXu%c2d c?EoyiJ9W+93O)H(d\*U c+!R Q^1I5E9o*=zmJLr.e! ǥ.zT= =1d' RZ@ÅCd eQHBq.Sj//igeT~%T/'Z˃s_'RJeń(yO{cBFCG RUVڕx8uLP,dU .M|r).|}ʌ1܋^tM]TRNJ=m9+%J')>%X,@)gV)m212(殰) Ɓ 22LPb\Lz)S6yߨ.MJJ&QXׇ_. B[:!zw+e>x{p?$J)3"2JJ&2z.:~Ws/z%2ss~q޿E?˅tZʲgbJ JzFhL޷% 窪úˢʬF]Ij*+>L62 BdDW| Y*.ˑ6s(UCEOLZ+4&BLcI3suο䕈R{N?;6J)C"W<*y?@)m7qУ q(e!3^x?]?tah%|hJ _a7ywkv:4"f2Dʺrq LHku1C3 IDAT rVTJ%\)/ &ƅ"AJ'GqPP8TU]:8\1[g1PȤ;knm{{ BKD,DDMa]UՃxc5c1j</NWUTY[}d!gd,g@båS M6VX1QI]b(hXJ*mm))R78Z CIŜ< YRW+~9 B =@s<Զ-LI!1b_|m/˨skUJH)^738]QqY/V eQ@]Ϟ'JkM\D3gȸPL&H9` ;<~9eJRJ[)-s̔BUJ`RY` +n\&S) vcm3?jB*m.,*eԜ"eR@g*@pVU2tAdR9ihAjSL9Z>2ƹ4̸șW)!MQ Fڰ*Űb@d.k8ԇ1emLRRνoag\DžSfhE9aUip7F$%u>L+f)Lo7@$ȯE1RJ([f5ɤ"+)ό{#C&ovSG2*J 66%:+˂-|sb圢E "nԳ^ɏj\3nT PD P"H)h4X ւ` 0ž1em|(21a&D9~ "rd)3΅4[)VHTZ),, &8 u) 95P15P rfRAl'}ijοN̈́pEsuY]1*pmFìI+,V5a OmC@X<qů.qYB*PL8ĜcB0*ICH*153}Q\k_m'I=2XkrV"XEɸ]ml$Қ@ʴ!KY0f80x`CEϾ( KWTȭr2t&YW8QUY""k\Edv2\X.`Vzc$pn.x+sNe"3Rʺ(G9Ҟi%)%g@ h  UrvqQN)إޗu%H"GRY.$}XF%j aөL1d s9L9~;4g]ɏk>WjS2\:*c몪rXץRh(,hFàΡ*jR2rH)CǮ"He-T!k1dU6 &֙S7[Ţ`1vWwI}$\| ]QtI榿z7";lTzo-sDmXvr|  C Rj0P!D;&EQr!P>N,J售RLZ%"\K-BQf ZƘL3>%M1:JQ3bBȗ>{jTs(Uh2fDV:p6pPbg%,$O9yo)BoTeQJ k֌s,H p8狞\t)/}7_fxc' ͹KvgE֛~DK;Qy3_ LoyPS8Wc$mrh ye?M0^*Us! W5, ~+~f>c#/g\1./,r 0Tܚ)p/ yt1p~{HI6MwΪE9SLܻgd܈q2#FR\ ƅ,gV R*b%kmt:[b:鷞]@ƬY. `8CD$85(8D !w Zc@@k$hrQCs ^ sj'>/r截`PkR:3KVY%huD23JBUgGd `!bL}B"Dvs%qA!d 1Ƥ%8㜑h4 X:rFU Z+{ݎ"QÁzc]+\bӖRWJm}>ij/]l'b75?WHe<Κzi۷TJq-G5ڎ~D׽YL)%K)?awX\W6=YX7G\Yꮇ2RJZ97ƥ$<1^? <,Jk"L1^hS@ZHkmamɅS<3Fþ uxK,Oi[m]Ly6[lmOB)&:ng> (2,tNÑ E2,wKp_^fA+| $=<Ɂw<>uBo(3јDʼbBIUk#>!1@I(I8xޞ.M}1F}̞:&2O`P+%8g΀3tgMT2 q) @L vql)z cwLJvwig"%Y"$BN1Bkpi`Tf)%SϹ9]gktY0e!F|趛{u>W]fľ #"2o9+O`z?]DAXڍ=UUg󆭯mF!KyߧT/}\W9 ԦtŸk)Te]9m())e#碮\aֲLtxOGyLGRk>|bއͭ9PmQŢS"fœ.A+ AuĨ,9CpVnϺٙ wN>P wڎĕR9gbS%HFV`M,^@6l&{m"J E}6}1}WϹ-$2E (EYt` 9PaYb9G@e/+m,.l ?eI)yDGĄ>9hUYU`4C(Dbj:.آmۥ!O9Ō |P'%j2F[#@+1JH &qoiy?[Uf<㪪ԲRƔRa4$DM{xS<'l>(U况tȲED/OLfq2meooxbT.q͸޽{AC̜λ&f:%-"H)g=;>/>{RBL2QnPksغ, !ߊ[9 hTb0d>5 iC" }-ȶKJ  G#"D-L3( JqPi?pN$0@D(b0kjߺ.<h Mͻo:!] 2g_pM>rVQ8C@JR2%a9D5q}|1&.bhrO;E53Ϊkk`A]5ZB`bJq0 !l&k .Jy9RBc֣6*~i㤴[VBj2M~4wH(˽Sf{S\cK_aRJ3nqxGֺ,K]n8U!NރSXa lNtׁ51C3^88Cˡ%Xs$_P(>@2 >A]4")ęB0dDM>3qT5d1Hk2%5-C@e"P`PaMQj#n_&DR-΋pV {@a`h!ck;y?|2q8L -8{Vt`-ϙ)%4AN{ɅEB01fa6Oǿ@^|囆C3,R'圗7S_%IOyFYU5 `PUpX `+}y)rX#A-:8G)id.m)?t,7P|{“38Yƞh6ή u^, \}a@#K?}}شrDS/< ϿZBH'UD\el,ҭʢ*534Dv#@b}1FD8wi:K N9/|ÏM]'_N4RI!n4ػDxx41C X&(e4IL)p%q#uE]Vke=Z ܳC1PI ܢ-!ӲlRƜS{CSsVC'+{6H*6c!eH@1R})Q BHQH \ȍ}}NԳ*'Ѩ A]*m*bm Ǖz\CwO!R΁(眤"FwPWSϲnPVO٨rΏ%2D!}7펼Y~k˺*5F9ǚ6nNxCׇ劏ڨ|3:eRBWTa6ڳg|ҾO: '0YUxU4s=txֶm1ާŝ?K_!L04ƖX}55QG5/oH>{'&,4mw1TyݺO>l!KckJWjXEYփAUtA j g#kjŌbJe2@H !Ec礧}  @Zq㊵ԃx6RkCg Uq$ #"rDɅpk!B) c-FQ2ጭb<j4a-SF#yZ}ň>b wwぜv֕RRjPWncXۍ5w,XJ, )Qv9c^K㘓'z>#: O?y{;'a_bFE J`sZ |6{gs_|#je= OW(EYFFeIpƹPJt;z!lNp@}-f,m{`T0M1T9΁d_|!kg9SX*m`4um7֋ k\B]_-?L=؞C[{on޺g1ifb17R3&Jmpc8X 6Z)\:(q,)P %MGpylwh:9 b\+3UU9ֆz4@kRlαp, 0[dF2嶵0Fe;y)%0JL(sBiXS4lu6{-};:K3Ƅcs^jlɸSZ[X:g j1x]_G5Uj{67q2u;NQq~ܛBhXuU2W|5z4 SJs}H%>y_o:]hcK7X yP1| l΁ ]Qze—i䧧_CqxދިtR}I Xcn{v ŽGa6(U&zz3 _wЅTZqedUH@ٰҁv<(!Ҽ)ڂC{&mmmnN'ᶙ8Y] P(L9gΥs,HkYU*=s ^? PXB+D 3 )E (-q\g#ԊamC5pXᨆ匯˺>5prf\K^>AO9%JI)5GiJQՃuCI2F( ̜Y,boJ pc QpV`@ahcQ Ef7?8gDQ+ !AJgȉ#ײ0j(/xq u7:.5'D\s!DdvV(r:e`_~~,=9/e/]+r}?S?~1_1m-sgRM+0xx$pyR7M@JʅmJf F$FY0YޡNd3ĉ(ɖ])E| mր0tJ$ sz@)0SD}DZVJ-J T2c_;e=d~Dmm!²y$nnCt,ڮk=)#7Zh-B(kVJqLr(cF))J%8g1rᑤHcCd4~il&y}N]LkcB0)fιRRk#c\+%1Ώ`eq{l3$gCvM6mi|Ӟ<OiS )G?v_1gbomvW=ʢi#R9/?zXf6~t]- Ko1B} >nk{OZp}k6|+&YN"Q8zsn)E (Db+FZ0{){6|`TV)=09ppCلr$ I Avؾ} F'! m3 T]"eЃUO8< BH|M_N=FeD !1!%`as ` o|Aۓn2mg|b}Xtb1>h}N!އR ! P'"# 8 "E@l'pP>x`2̻Y,ۦE]cyW*mc:HE3²aF5>HKGu t0mn6[[w RG9컮{X;dskEpΕ1fT}zYz4}9 KZ,`6 m$.YκműxsɘIP}Mr΂ggDq;1_:'ӡttS׷bHю" CH\2@n1Fug޷ge;:yq 5sr-( Hymz[?ݭm+(" ! !`Dt 9ֻ s'U{:~>Uyl-!G'ma6f8Wn?x`:APA);0뤪ua55B2 JADFM$!ގ/fDn;AOt> Rsi0f2'~BKaF)M`6/wyQbn(nĭe:|ąrm, ;%S(S*H*sJ|N0DUFq 0-~ƕݟtJUVJ+ IJQ}sO*f}#ocex-΁8UA`\B ف||R.Qj?kӴI1F! rWIYIAݐk`I0s-?:~_ D!,X@Sv7VQAģ[^RH)i 8or*kYѻ2#Q 7GO:I,'mػ/|he "18EC~c/R+IJNbuY|~g=;@`BHjkkݑB3@SęKRb?1r.9<#5ֲa{V)0zخC# .K)6R,4 c+*Fc"|?ǢЦ6jSRm:0ĔgoC!@4WPG8|iɨdG^(IȔSqjVYE lx!蝵8}3AD)%fH 1zmR$+e%bvӢ() *Jq_#iwb>6T XJ²xU ,} }N1qWy\~\̾@q0z)oiںݨRIctMS /H$N7\!G熔fǯutUR:|#[ R|m#كVM' `^ݶ8xۢ\ CWW> /t]ZpR*霶Vܐj|Fč)f`9px[baYr_Yjk+}`1jȭVuN\tӵ8Q))US[m|&g-reD@%J9`XV]3(hjr%w1w>񇬑P]Pe< 䝹zk@y{̋o;TFM ג)Jek1: ڙlcV1h*֢ZMMMŔ2g, 05`4.{\¡M\-Ӵ)F#G+ JŤا,WK/@9U"eRF7֪,;\JbG$1 RZ:TKELF¸1 >6#ΏV9:1';B Q 9~mn~(+ݝY~F%Ƅ$G$5D-r".C9 H)0s>GSNP Z8]*m׋yX%~8<>"֖j]rŁ(pu}KsTBN9@SocMh* R e@`VKI@ZV(6*Uؔq܁۴R +]ȫ.]ReVPYt& AL3T|aB0o;||ؿ!??|}ǻAeRJVVJi|cVUΦ6HD 4k9&=X|:‡#[i%-vإЗ4y'm_[oy?نlC2114*gB*m݀Bo]q~ ^}N!p{e.Υ>S/U29>Hfi&E*]FZI)a pdsVFŕJ{oyXz\0K|ԅݨ|7<+8Ctc4K}w4&ayVjƢ>}Sa\$Ub\ӾV8ton97!rK쟋s]N}!%̹<{_C1_NαRJV1d_`9&s)a`!l4:yi!TZ5UV(bRvTTfⴅnY{ }C[ |EZֲ %NRmh4ZX#}Kcp^,W1}]U6Či(1d% 9M[TH!$p"wAn1r>7!II,:Rњ`pdٌ Z9Aqy%1(ͧo~ߩ?5DI$R\ʄKa-VK$J;/ˡ6CL#D.S[?NyR)$`EA#1` [[r5] )%lQoŧ=R1g̅b߻֏3QcD!11P }au*䠵Q"\|$Z]'? 1í-:j}&"+0>S` Bzw#+SJ)EA!>DY-6[+uQ5 oRzL6qt1>bX2`v20J !D}H^,# !r.~G#f%rel5 ! @ށ#piapJHJY OMZcRXUI)89]^.VV:G07*IB=}PMG>5}g*+SmE+{)'cV uuH aޕRVw}Ǘpo;ZWJfNrfH[!v]?>r߈oGM bLBPCȀ?y'i XR q?zϿc`tRI>TJiEt%)E @dP0!VG`lm}qBWVOF cß޾w~џaW"‴JENQQ-Ȏ# A!R]QLy3]9|w%"Q ]g-)14Oa!9\%PHYAifL ѭx!ARe9ޏΏKDRH}ǓчN|s.6{qO~F}dY 2J=aH9: cCW]H<B a,yL賒%/c㓟s?u3 )%~vdG'>򥥇g?Us!>nmz+|g 3WHUsX#8C?q#_'HRHzl}}䃯?]}罠0'<'4J [mWt)e!9\:z(E6F 1dXM '3 8@ 䨵֚%;RJHiں(%6) (FDwqssk<:FJ$\| pJ)b %K4b0s1덑UBDZD8b LX2rq*lm2V*Z%0b؁9tAkk!k%;rc4f$YsKɋE߻Lԥ &%e.V㰊JYP92RN>ٿaR%m"pMBv]!FϹ^.)pNi~cRHɧ0%"ٍ52: CYp_?_^yb(veuWy}9^;}wyR*( H}!1Cۋa(K&J~wG`-6[zz/mXX֪ o8X.3"F-bksu֕ZJQA1x<  ' )T*D)j$)QPMSoJR82n-#NŪۊnn5tݰ#ڮBѡٗnyU>M)!Y {$$Ka`a*e{몶XqhK!(V#s0Dѻe q<_N{ą\yF(? c9熄AÂ-sR 9RRN1C)"ݎ 'n%" HBaܶK@ph?!1&G0.D{+Ua9CH%YdTٱګ'%}J)B!]E^፧BBb$sO=][jn9 A~Ւ<"G,2/m*%q%7]SW<QPfBz9/K' GDb 9E.2$/yDK ya9~束Ո$UK)c)Ƙs(/ -Ī[{]s/*pbfp)b^ysz^Fvq$H$J`9W911Q(r1s1rHFKVιMJPQE9 NP`b` >rDSθ֛v+,s{듞!"D.pQ))b!EIB2Ȋ*ŗFf8Um@wC?Qխ'խ'`O>|qyM+dRؕwoyș7몲ڇs>0s(9tۿ $yi3Usa&D*%1TRUmBUْc}!}]~uUMDAۛJ!8c? ?TM5R9ǾW;ۼc;6~8;/52T.9 1#ʫQ1Oz+' IDATOhŚ&kuÙ>Q7_O,q1VI,|7]s"=mRYɀp)$%s!ݧ?[6@T1s>ẫ|Ե ޒ#3{nYdbk%VnyGe)g>ҀwYJ0 >~жڨy K=GN9L]YkuS~>p{:㜋FDR}yԇ?juew{I3/B\-xkNkq/VZZ>k[9HR'_ps/1FkzH[놵QYs8 Tژ!$s1q֬Y㬍ʚ{؛O5k֬Yf͚5k֬Yf͚5k֬Yf͚5k֬Yf͚5k֬Yf͚5k֬Yf͚5k֬Yf͚5k֬Yf͚5k֬Yf͚5k֬Y@5'K^x@q#_N5k$kmk'm]7)}w]BH̙C9j~ŌRJJkSJqn5._ (Ds!]{Q:OvcBJz[n/: r/:z6k&* B-Vš;nnnCHIRU! zՉgNf27&;:c΢R;CcW{dvMw]\cHsoՏ5_gL&VB)@Bn^{9U%fS1Lj!RVij.Q( '󴧜2ճY4uU鴞ֶ)5%眲*JAD@,BW*k@)B$)Qkam43RPa,嗿ѿk'rcmT/~8VJ?v|e^}gZRU3T6*}>c eJƒ9\;r+4Zhy]WJ "TVIW s}&1=yŧ5NL6MFUեz0gYB%BĬ"3ujk5s@!MUMSKR9&=29wj/eFemTW֚Hx1|YJ_kNg=!]~g%RʪRDBD)AΠ"Rrk/9Rs߾}?=Ͽ4k5?/o|cDۨɤ߶(5l)r.z`pЭ6x?>΍cC46tZ7M3Nڶk[UꤓT>kΆ!`C@(RpS˦Ӊlۊ")Q[3mC:,RJ.EU1ԼQya o|-PBJYU BWRJ"~sOk6~E)R'DRH3V(,!U]i9'.Q92^s\K/_{^ɤ'tڶjc$c6r!k\)"g XcX*Ҁb$@,t٫_.iVֵޘh6J %QJ6gt"sbD)Ȝ !09 sާXJ~=7}[k\bL9KTQyKaF_߭±qsOبȈ߽?7Z+40)IJMd~䇞ʽgZצM][c4"*Yb6ATeLRiw@n"ĘwOJ+kDB00K3ZDdgLfm;ɥFJrJ=QYbYֵ𹧽;_Ru 0F8 4fV}߿v:'䜨.F)M4@Q%=G,@)%q٫5 yWzdN_M&|>oVkib`bHs3L s0a#ʔ BD1{{Kϱ !D/;`H.sR9I$}Hݽ2*^0kk5_K_E<l,6Mǟ)%VUe9D)QHIJI)ݔMJWV)%QQRO&r:'H)k1C02!RbO -pRZݶmd*KAT !R̬H9&JZ) s4fKk3/ɕ)qT~C AF c֤Y+gfccc>_UӺT^?&XJfḪBJk`<+޵ O+1Nվ}٬'d6;k pEd}UJe)M/8*=cgfu]JYfrΥp)Ua⢇~QXJK!PJŽԹ_n)u]29% ^G||xyLc! (cztTY!!HT6bb{Bimk۶j[6V1h4(ZmӶm %Fj}e]JeK)RiO}/wPZ2FO&v6ZI"V D QZ 06@'45Ѡk\RBsFdf@UEUJVVVUm I5D \+56\B Mȥ9g(D@1w2o1F5LftRfl6@H6> Üh3G!PőphW_¥6V5~U6eEMJJnꔳMYf2{W.ɧ$s;"2*seb.9)@@ۈҾRr9;8Y* "]^tMӴLʢha2RMSu1 3\!Z!%#8:uD΢M @[+Y9˯kkZ<ZWv26M]WRQ)4u=QJIPn @ ĤD$Tw& ßgoJM&Z4dQhQתm+[!)1fCs!BD.l0 %@2Fx_)m.KQYkv6m[5l:QBH @Sz qX, 6hc9Tg ;.Zֵ0R֢m\k-\}N9h8`K"9q (D ' s1Zlj]fҚN&VY @4 Z#JRl!B9\Hi{|mf:# T <ڏ8RbJ9=S5F-RMSrn|ٿŁ;fTÍ[ewi McN)mG?s';O?VY?>iM]kePSU%!૶x/a!)9c1J)qwZtz~SUmI$HJ)45ftKd\AmAJϥNI#D1ɹpJZ B]lccc޴ӪT)k3c 9A[f`$@-0 K_D8i pbF)(I4R)ݶeZk1.i @Z\}בV(RKd, sQJWj[]Zn#bFf 5BX0`4gLDRe>1tzWJ7gg禮islR.| غsΡ4+DS)ʑ/zb]OLZjI zD'v3?g *Zl6ͦMZmXTʉ50T&(I1b$J!gό,q'*1&.YKfCDJ)!@ș0J0 HDdl7g4BH(eJk#s9/%Dk[7scg@k#2捔X?*uD<$R ]УG5O=Vd2ɁZk%FI# ?ë^yR]J&_7^x>7MڦՕ2m5UJBT]wYPJzGGc4 M'f6kSUY4UVu%բjsc(&n>~̣[۸]j_sstRyΥ lkDDS< afYuqL1 rc)=O7{R&!2/%&)[6$PH(e!P1nrkzRΉR׽~n8N&!yOڿo:ΤDΥFj:Q "2׈9H`eq51{Cq,|V{]@Ur'd 1f)D+DTi7-s@jB ň1/AoNo3ϟ{RةT-~"c V8 aZMdİZQb)cLU7I[7_m۶6g 0~!O>|z%iDB5I bDcJhgR_u[o)Sv(Rj4\N4N PDf,ֵ#f)>`姨RvrVR'vhY_rOdC q:t'ψ*2\ ;K@D>>309R@&ȅJ{<=3F3 ( Bl&r[4 @PP+Dfrzsʻ}/(e BƲԢiZmfJ|M(x͂&D ipbΕ67jLJϢ1缎9#c@!lf*@tBQ㘼/M_۳g@dJڴlvx6?:c֜b1DH)7 V!UYL2>^p]Y|w}e]몒au7Vm4O B)@X|)GSc!ƅb_ xRFke *VWyslmmllu]\'̅Xd# Z ɥg<@Hs]΅ )1^sgEW^̰0FD 8O!k{wMl< (@Dq@,硘@;owC.e J1٧W3cB #עH= `="VM3kq:#L!r!8clb˞st*#%ӚIUIY)]IYS xA8"{+ "Y!i㵱ڌөs%>KJʶQI4MJUJmI0dMO>w7Q Wnm1砽@ cV.{W5嫥,'d()ˉQ9 Tj2: OvHAJffs:ZG!c c͜:ʥpҊx?S++̕3Vkݮ$R SYI}٥gز> ڶ'l6|>M>4ia֦~TbA!rDh{C~cGo;?ˏ/yRLlmΏ94oNg[u=)}> ۵C \l11RJ>u I?_~FԵh6l2SMc&RT8 jn `<aڦ|{ ǸB 8!RP K<_ ?[f?kuE)֢t1ߴ ?qX @p2X&D#:CLM0<{ЯK1UōainlVNtuDMЀ5"׈D0D(ǜs HΧ %xE?QG/xOڪ?6am6q0@u_f%crN9'cΑ@R D.@c}ž =瑇5/L6vNfU&iZh߭4Q)Ч9{S)r.d~4sl gj:mLL&8秂" IDAT/QRr>;ww{r_6UN3BpOvR9ۉ>y&A???S-&z:olv׼' !Z3cDۚ鴞N'ᶝOg(uDM d3SûN埁z`!US~?am#S6jcN|6if:m'&RZ P#!V:1͘)J@ΐ3”(%>=G>W{C.zlSݶYft>Rf-#/|uPd8G)n Wkg1)apԟm1FM&f677͍6sq ܷ͈ B! C1Lj)S%on?(kyƼ:|:|lS}>#T#W@AHD@rN1"̄ Ƙ@"/>ڟ/n9tR7Ӧ9\UyBRB4)vutLJ)6ԈHYyӿb=zy77/ؘO'#u]K)sחWD$98}?>OmK/}tzH \VJ~"uN< zǾ@[8uU6@/@f"`fdcDUkSL%&fLpVO2TǟMTJJ+Ι24; -1Tkqu9|RiDӨСt:N'Lj.& |dc 1qXò}7 aacUJJ uŧzc9thڶ.4(T2x7NV)sET+ \18yшQJVWnn2+d QjuHO0ȦJ3&603L.C>g"sn^0/Qچ4M"#c*\׊mݤ" UB,>z_ƱT8{ |նb:h-+#뺩iKp'Svk#rR  լb)Eܤ܅ sag~cgWx6kf>ߘL6~^4rvr6 `LPW\~rY^R0fz&8Z{f!"[7ˋ?ヤ!p^J Z&c|b$ȶPH'b,,Sr!`vgQ=$}`NYUmVS&ۂ` 8f3qS?X'onz뺪dRzcs:mnnif|p p Exɋoyw.ar}ZC9QOp&3F>|xv|:ۚ0Z,Dcy` JIP∼Wfc2f:-oPj9RVumv2flZRd)A lԍGS7V)buM~?@KB(תn  N f+`f"ߩvr'јvcBf3Dg=mM]RMSuUcjc&Bθ3VUw9D&H0yLc1/r3/W* ml̦Ӎd:Lu!ĩ4|RZZmӟly7牋DwR y2bƅIĺyg Ae֢mkC!`$ﲕhEV9}㻻hs!L/mRֆr6sIJϾ"2%Tt4UA $+bWI7s:|Bj[R69O3q0f;m|G;;;۫jeW]:\#My})RrcjmZ 9{)tlJጣu*.iɘ_K] \4u]M37\Md3dsgJ P-b ESq븩xѹl-<9W>ag~TJkD"'45B4&P ` $q, fI9wpN6VJkS3ԅ !LJ <%Ѐ\b.P(\hD=w-\񔺞N&97RByQPr9# 6 zN @ :%]8qMލv~GS`싌Qk R %rBDX=,Z)JO8,vwrFKaJbGToԇ\KQkE1 mNvV⾫t|s!.ݱnutK]gu0-`K`qD J {~W)rM`r&DBt! %π{!9C,XwKUX qI08j9/:T_!Niaŝ;GW1sz7bJsdsTZNG9"?3~!PxA3Gwqq >s$e ᤈZ?M4#N(^9s!)GuhJY8Ü1%r.zsN9[@g?'m @ \=Mqawl{lSZ)%IeD8si{NLD pD1wrV낵sU%H)X)D+&g>~|q~'&f1AFB`!Pdm|[=|z_?[Y#Ku-}0)R9k]J9Ւ0rRJ91|ձqd>POޙy_psfM)D~'RJIy/Sf!@k^)uJNxo\GR29a mw0jŴ"|!'qn>x9'Ul?yU_gL*%B}'?<|1O!8*ǡ)bj KsLq7Տ/K CdqZ"quꟈDOTJLVZvsJ?)]h R 2h2pG]Іn"x(H'%iո=,Wc R&m:R#x!F )`f)=f@nU'֥LGX"j,ЊD!0U"9Rt!*Yi!@TT9;fT* 0d`=иmO॔9ι<_( saKU zOL3Rr)RJ*#r+y B4SjR[#br J)+XS|P>̬ CrTb9j7?W̋8gDVAșqz," kzs.J;89Ƒ{_b!b?^b1|iO}d"%A Yʥ1s x!sxvݲwH֖/r^|.})qƔ_yo/{Pmv՗g)HZ8`i΀W]:hRMDWD `<T$c ^Fx̎!X)9+.O}o1Sx:},c^R8R\YL&"OQ$AYE2>F}"+rnF9gD-3`띉sU2%e)y>okM= u ֝]@҉R,?R!:O(5 X85W_ 9C- kSכL8d Ћ(D0+e;r v>d"YsR4R !16Hi|d80N:%'r %va`֩ϣyΒ }s.w}g}E" LI)%a7A)sQS^jwwǐ2˙b#xC'$O5cNH̻ju˾DZ4CNKzw="f z~>gTSɹx`)aec6 C !m_VfV9B8yu_*j `>ztݮcLJ-=0 .BT~k7φ㘦1ȉ0(()C2V#||ژLSKDU)<%Ju=EwBh)%P)81ECUUdc<#@@Ȁ@x*wᶡcWTB)&3ΥgO~`o'QRĘ vj͚lnF@Zo @ j TVQIuέK>H\ }”Ș5'g}J.accZ,%ͮR;c4(e /l_ C{o]Gc <۫~}oh71X6B!b KBj1Tb\.|1% ra1B`o{?w+.I sZS CJ! jqt}~>[)zo՟FA?җ<.J(9[D Mai:dḊ|Mr}:J)$ews])y"׺'DY(Xr7_w6]'u{X.dUPuG(wV9a)eۦކ 0g(%YkƮ'-9JR(0 bTZ٬)O)H\hO̯Z%$Юw;z0|6cg:tJ09Īy fH* h h K"P:9gdws}|7gYV" þf?zU_Ba*#%"s!D13aS5 -Te0ǡVE[GyO)!b//,Sگ^_ DJQ%Kdʻ!ݔ1mua\Ǐw~3r`za;nUk.1zO9p&QbZJ)$r'r6r9?1sڔK09B2'u?Bt9TDN5UsMZM]gCH1R!v@!{{.;ub/jDJC0 eG|f!2 ѹ#׾쫄]oּe_Y{BD c)N'>w1 ^ʯZ7};o{ْX~;^$#OOZI"tݢ[wrN1> ; \΂s9RBj "&n/99s9gxob,J)T""QΥ֢P˹DiYb\F.9;8Xvw(Z'!|L{mtC :B>E) Zgm^ &;b$fjS\0F\rקZk ʥ,RV!r~p~3zV;XֵkQWbbuC9_<=1M&,S񞺾zgm6Pr\xJ9rN)z잙N1"V]J"FU{ z,336cx>$D}"J!v:ע,gYi_r`T IDATZ*ʽ) o<}!Ɣ"ӘzJ40VB"?Qּ?u|b]n)H h߯rΌaL,g9S J!RxX/"fΡ2IBtgY9G)Y]7GcX(EU5%rOqg跏{  Ρ "'J߇jC"˘ZxƠHT|q XUz뎮>D!D)2I c FJ!Q֏_uqwW!%z_yy|:T16E!TB>H!PJ%c)}{ t#1(FRu\YJa΅bCF*p)j}uv}񕒅R9%m(pV?kkRz*ưhzExѕ !B-o}ȂڶL#awv-Duˮ[PZRr8ZZn`=9WJK RI+gVuhk:'#b>mJYX6I+}'>nmZ}PW*sfΑu[o8SoXk.0JImeS5dRB &*}\BHBȺRr\ޱH#2EFkrW]sëh**xeWDTorøX8Υ|52k͍h)0ֆZc>oc3kUoxRةM>+* "\JYsJw?‚)n<b=csbYka^5H¹%RJ ajL!&뒵m=Zb?x1B9G0V}kͧncc"U;6?\rJ ;GƱwo^~ٗ0W+P̆! =pNZsFĪCJyRR6g,yW 7\^aH12 C1f*nHBZ!py?{EW^ckNݺR1!c9R`-cTZԜn.ܥ}xS|J)ږ̵/ijINvqCRm'ٔ1.sB!㥰Rւa7S~GĤ)H""!2&\.a!h-&m5(cZ!'9rZ,u9cD<b6ο8}}ۚVZK%X!JZKc4*{O9)V\RSbs;#x њ׵k9Y"ȹ#Ι}u! JRr@6Ng|KTJ(}soj.%HiU!p5O]1xRbPrsDp#1B#`gֆFBJ3czu"?kOhO]~coy&?~*"%Il!HJƤ(%*ERU>y:w cYJ9H #* D:X<4ww>7O"?x/x9zSWwIUKI] 1WqU R蝳tRX}+_L'i J DØ0b)QQ4M P C!Ęb_ŽE>Xo}L&тs9%&<~yedU)R1avw7?m/꒪Ӊ术[NrBO]+_;;z9*jxeO ;ӿ?kc7t.}qeNB@uѺ_ Xnx{^h研ֺѺvW޴o|SZH)p7BDц뮿+W^2LJ)j._yY]4@EOZO)B+oz&9\ \~Yo}!"8=5S+elօ}biuןdݚ+.b]sƘR3䜥\BH{ |EYeL-!j,?+.cqAsAP9!_lzF10͋Xo3z)opgA倇?R ֕1s)c)IzsN0fz]Aevdso~Ijdf%R*?k{Jm{q( a4!J)Y$J"(h*] P>uͯ ܉cZk{uvyc e1XKI$$\JH)"be_!uf=skm_+Vm&J R)"1ŜFA}CF,Xk9X O+,R hG1sJ9GW_w}嵡vxާ`j%rBն7+ *O5"(43Ar)"1NhfaCRL*|MdD,ES9x=phLz\D:c4 HH)WB!瘳PxD&RQgJ8+\\キv{wn`6p 0`) ! 1+EPR5ųqڅs *޷t0=QI !$@)&(hn?W1G0{)cT (B5&JL%/X@A?V~YKnj,xUAe!QyΪ͋k$~[vamkaf""4@JX 31<#VW3?테ptvam}%u*LwO1;kSjɈojc_G*ӽkVN}DgNkQxQ<ⶺlһ1+b:"3Il q),bV@,PJ*%7f|V' szVc6`9a)H C1s(EDBdP9$ $DƝzc׈phھizW/^G]\,rIЊc)3")jbc̖(Rju4cղUqFukM캅s*ꚦ{u C@C)39׈;\>ΖrCpTFlmn~眷V{ۦ1]G18: RF9k«_0^*׶f`j\"Z|RFt4fETmŸR統9 *B9ͬW"Eo i0}HR^aWyIMj[u,9Kʊ"̜LȜH9kR4 Y^Y'j.IGNV*`k>fDX;""dS) (2ָ2j0O)',%˫Ԥr0wڞ/[1ĮldΙ5Ms@J%Fls KRSJw(A572,0DY}]m} Q4v5x3޳$)DD1RÉQ+q4My7ENi>ʝ-[Z[VYH+4f`9rn; sI #DLĔ 3ʌ=9-jm5U!0)%Ftzs)HC+ƙ>#A+y}$^U(>9RBΈso;|1_xM+ *XiaJ.snpmzʤUy16Htt)1&YK @#31b(%c(BJÎ/w9X>i4cnWmU5SRڋD"q.ĸC4c)65fJ#Q>('-M.:SckckڥsKW-?vmo-s]nI-./%y6qJ4j sM.oDŽ^,8&chq3@3[D8%F4"Fiz9DYQ鯧vՄ[뭝%"v$b+_T3Ug4{3dcJcz-mDk UU䢈zќU [y֯QW(LY7(껕5Ѧ^O s,EJI9;TJ$3u zV&Vd-Qܮ.e4M2 EcF(̱mKH!XIoTY3F]+q"cDMCp)\+qŒtI)HD 9 b.VwꗝS7w4Gޟi-`"pZW+ut)XB7:$XhLtNDTAYCEndnxP޹s+玚f4`-= \/p|MӖbaySe \x78?Z@~ڬ{0它ՊgG,ej̐L񀳸CsssmmH`m10~!zm"ɘ3}zvAW!be.1csM;k0r,LitxkZߔRVHR:)!ԗӓ1˶:vROV\1,_GA5PU[@2W-U Do^^:fkLu""%cl&=#F-fsVTE ]h֣FDk-ҹe4JYh()n"0|]"2lLBTqArT--ǪV"M#G+ΝI5Z0fJc{}ޅqf4wEu̘sy̑Y!-VJ :4쉥l"oLՕ y~Bmd_ Bl//sשe~9`Ad"1Y`%01>3Vz GG#0OESr13zPIYuk+|خ和akdKߗUhrP?{a5xnV\a 6cVR(%U@ĔzN7fN}Ĕ$*)iޟJrq9A? c\mJh[Ƙs PRjƤ@$(NoŔ06*/&=Ue&ڝ27=Ilm>FKrR(12%h$],n0oIZk޷AHk{\rG.1)mQ!.9MUe;cXK4{Owz17D5f49n9~9PL`"wV+w>m VTĔvEhQfVKH:ss@i+kޯ;.zc,W}6boxO9QՃ$ 릲j07WڥKm5hdy"CSP99>JV ˔2 "ZSsT_Z v98״m[^.M3eJTeߔjyF꒹/iYg6c\׹Mc'' ж B(g6]=u>5DZk5'cruU QǂK11%/<+ \"ц\4 B,Di[k٘DֆG{ |*;:sÁ2=m%T4s"kK]]yk}?\Z1 K1Ĥ1(U5oHjAx #"1'eGRex#rҶG}:!X_]9]3d4 1%p߇^u# ,S,{7{qsϼxP9JGl@WJxdc cjS꠪/Y0ԃ%4\_D pJ6޻Iέ'%V8: 2qkפJP9ăIr1{S ?j/kh[1tKg>))Ejz Djlr-{O睵ԈWRK=q"k玻rCr %.Z hGb23hv;#H9s)>#FYǶOli6_sޘ^έUia{@cOmN rJ=(b4LIғ|6gM)1(L`B ,;rvM3}ѥ@J<:&g1]αξp>k9,[y4:un\[o驜C|F4ZW6dIB">s1r|%mmUGS2\!w6 ;8)ڴgL!7nS_t`s*5$&ҙ*o=#].fsuZKDrm0x97*"@ ݗ}g+cztDQ~a{ J{rIJGƸf}Η^B!g E cOXPX%%IIBMsmMX3 +tY$7]ypvyc@WTXnUJhEl)&g']_^%,Qw(!Fx{ozH*JCFDGvQ,qDpTSWCשl&60 "@qX +R+ *(DXKs45L6߹`-V6_]8bJFeJ"T1Hz@szcֶ]}XnSfX,ް9v+*89+XʇA+(Ĝ4x?!\N679bnr~u-`v:cv xo綥gKa0љ)Y|)MVRUlD mK[4i>}~ Cԁ쓩P8e}m-#,`| ܻfm{>rI>fv;naKYz?cޘPѹmϱ K%?A$cJ%Fqa-SKXJ gAgڡPJ q 䎨3fi˜1KmՊ4ISwX.}G8?)ŜsscϹ9V>ybc*,{MM]}EX F4 ZDN#6DЎh4g ڶ!)ov/?+ c>yr+a{QHQSr&"Ri7iSiFzH"%ay{bO`{?!Fnߺw֭ǏfB@TSJ p)XCuekL\mMsԶMsڶ+c"z opz_8@}g9[eȮm6%S`'LWZzoskn8n%ܺ)\,J>?K0meP>ƿ9NI/J-V SR:MYk {8>֊m^,#c)C69*:-U]^t'hYY{4Ĺ- z!j?ߪD7yiV"Ad(e(ey)"s$^7T׿6[ETM]mėpuhKDsm΃H*]70DimrpaҒZϩTd>=gY:;7u}yĞOp tݧUs/>Ř//7kk,^z˧_ eHܜk~r75D#:3i[>RMS3(#OxV@zm֌3uܽ>s#Z21Ib@c u˭a؄i~=\^;xtoG|cNxQ(zea(]wwm 6gd ж!v|J)茙uGsqeZ"k4r/g öJǑv;@4޻R)i+_K|UiʞY 1rJz59ЫTiX&gFL)DG kmWMvi1'Иg)i; ֙T?y&{>\y`-ZMnc[oM6 )өonox)RY vf"LU(??nc@Ja>P53P7a gPWI`rne۶}9{@"ptCt sfg-/4 @H/Hp5M ^,mQf~{2ڔlmCJzlNL[}.lΙRz=s=RXJB X 1F̥kݷ~Cs| |Lpr}!FXrNR^b8׊~j%璳Ok~CC|.FBJT1K"GPHjbfYT[m'J9/K%F`OܿG6sqaq?C1c=z&Ydh(@B,{ֻ_Υ,Ds`N$ļ"ΎxΝBYOټXxl^eIye-mO4Q`N#0 LJ{!7'8u9m]ͯzB$oр8ET0(3&`Ԧ1 _ψ($P=t_b(ڊO1t㩝T"L3pꜷD:#Uv{^xzF~K0krSgL(ͻᒧeu"h'7'\|~`J9#vw)~w 1ڼ))"¥`JӗTSYO{e~s9hanݻ_bRv"lJ19LIAԋ-MӉmt]wݲidhW+u ߇xM}q}1gnx b8nqcH)Ęsݵ&8'Ol6*Y"RLz?snWWpqe+m 3[~6O\TWOq󐞹1E-jp;w .. v WWݖa(c8)2*q.yz֋NCc@948ˠob)0'pu-^^.f2 fS5Y[M 1}.ڶi[=[[|\pCpٙbpٜK1%%RǦAfrN{է_%Q?YYmOt,S*)$u"? gG㸏1TȆD\@kύW Y~k~@\0Dngsp:jl(2#NDZ\4}/ˣV'SS[w||]^>qj!lc܇0R9S%8Gh*U=YHŸ SѧV)$44 ;w\lhm4& ^lqM>Rq J=M 0֒FY|t4CoDf8֮'cFTY1β-物ks*2Cfr}6c͜kɘỷ9EQ'6B{T:f>̭s*@ҶsEJS%KOs2e6}*kzûznQǶ뺦\י綽))4&%m 9{mұ(7 [p)+S}#Sʔ.ϙ  +'kj 41R>` w[mۋ\0\.]Js)C&ED]gq٤! /7Sm M.g3@J9fdU'Czd@)cW"Rno?z}g~/ſۭFIwtJiIgۙeBnȓ'ӟ¯ 1Bel>>W~FKJ7떝[bfeb͗_ƒCJaObaXJz G?ڟmJуyO}1[gT39%ubyZsܺ7 <>wupqnp8^Ev0cT;|ؔ^_zoJџ1ލl^䭷`O .//۳ax,E)4$IL#Г>q^Z?}aؖRR!1!0PR{}1nz:)|bmz}zzvy?O?89su]'/~ <|_?QRrj!1 ~DxAkDq숶Jɤd!MWW?'|{_t Osߗ;\#nD0%xngb%`'S+uzs{Ob"+7'=xv;GѧTaq]v!\ a0!Ƥ 3A$r9+HJoX ݻے0?#>h۷AYB)a_Ũ6ocBZ9eC*du@Fpz wHLpCmxOiqdD#HǜuE2HC8:[W[￯CsA*?*gi[q],W"+bE(BY':MW.DP/۶M˥9>[ *{xݹJJ0#'_)\\n֢` #!RBJQgenSGrIJsirj5QҶǏ#kxm8:q1ј zbT*+?s|˙[sb|D`x?OzfZo7+4AIdrKXfc?VWTVӎkJ>NN`{ԩJsƜjv_ZL!"e}cLggb%6ٙ#s@ 1fG;BȻ]9 ty6) ~~1%mZlQoYsօ-RgnKL5s}>dY9#h['CYΝYj(6vb  #j`y[Zc9>y9ãGͺWx/8gg\ <~ SVX@00nQFwx^WW7F|ۜao9 aR ^\H%POa/}6&!ØDb)jK䦳~cKVv;h[=4 #)sۭx}#\]ųqC9yQ#_h̵b Bc&9#80aHCГ 4hbP#JLi!cLtvuUbwݖR.v\1漉q u`)RsQT}9F=e^9E)QryGggۋv; CF1q~e.FUXNBМ>u/OZr5Ɉ8j,$cv ۃǏ E1XJl6Gq"{S ň =Qۢ̚1d-8Gm=|h!Qt,/ sqN6k߉=x14&\[pv21(Iu$5 x!qExAqԞPэ au'#|)5 vpy)M1Np~mDA"zP\'տ:V abI$&gOO8q^][U$4_cb!Ņe6M3 AY.8a1&ɴu8ԳUU;D"j)C!qLDimJ˦Řq֪/}hTpI+QAt1FfSHGf RJm5kۥt1 zOlb.eH)[{a"ȉ.c%<? ^#y 8 =# @\ '3Ժj ٧EYxZgd+3b|n!%0C )1Ѫ"л-K_eZe>J4x[s_YK59>n,[!Veip/q3균 v"63H5yvUmH׊g$3^ IDATUmmp(T{ ь̠5S- #!.Ak8߽yN_3{Ju{~FȭMoUݕz8POww]VD%j-kmVm q}v{Xo)VfYv"tԔ0a`^C-V~yUYգۻ~)UsGۑ4<^ P5 aFXjVkK9MUYV8A^eU 8jk.ҘgXsH~܆;vө,",K)]cq g])mGi$[ۥKw7`ӶV)00kuy^ZNH"e-uU0"j;"!j3 N'|D#3"AgdFfV)t/5!".kULGȶeXժHbVEBuð "$2]WYM5hSkk8V_MuiXU&MGtb"1"~:ͭ/buVw f~E Ξ i#1U3ybUUum&= Htp@l|>BfDEMcDNֺwƈXݣp?6ޣ7Bt νm6RJnV3sAL׺vg 'r{[YHYu?͑nԾuF.I8F|p#n-Իz,@#S5&mߵ9bP.ows;>smw!;]]15bDV%fU.l )>?ެs[YNGT +h[ol_+4 5CU@v$ZTÑzAQgޓ|Ր:XR,湞NmYB"6fU} lImi!{z4F[íi)ՅU5dCfSmYy.i|߀SqFVFmzCzvX:;ja+ajHSJ'8#2G4 ?ϯk8.9!Az6;~'wUDLtn-xcJ0p:LDCJ @Qb#zYnk_ZϽz_IۢuOk;Ws,Z~ZキRJe9z n߶knoL)TCD"KY:o {nkv-3#n!y XV䙄t_jLͬ2vLbMD96&` Of,p}=JdkZCK4'dG;%:DC-(d֤w,u]52`նd[WpQY)%"is*O8u_(U3Qoe$bTv: yK"8/K}/s˶6^OaGPs QNT(ؖ51`Vz]7-G?pep>E1U_qh "D֖7|4=nD,~jM˲/r"7c|wط@YT9Zk!OTg"{]#nkJq٥;xgFu@g}sM"2"̳Ɍ{kE@TTKkey-7=oy%{kqp/oeBY0>nP}k6ͯ]wixiO:m0{*SR!Jͽz!&3i<-Lsj"h~rKuiZAD}͵Ƹd۾%{`J$aTp* D @pX' =i_1oq`S`7b܌uIL6_n_(LЌѬ3ٛCbo0~a۴gG1[՚vL4e39lk?c zUwT ?BVv̶`wOA@ V^R{/n3QdUvC9-8uC~{MVWuz懼* ;$""1`U"z3weO4e ?Y~Fʅf]5+_F7;0ݲ-}vzͺ1S%a!Z"`F*1\a{ьܞoĹ]e'Ӳs!"{v#@v4֡>RVYuҩ:Gy- 39":bO;#c5=Պ~:A Z(,'wqkR IW;쩟j/D5:bg眘- rk{WDнs+ңƟ#^>kVwچ6.G]b3{}%t c&[p)zj=oѶn'P~=s!"0w87_uZY~s-鼟7Oev! ~ nniİoym3OێPE1j/#{_S1JKd!v!*Dk.d%,Ɵ m:oX|_fǡ ġZrԻ"w1wQ¹aT8pj#+uR1֝L[vvrQޥZxZ{?Njzwz4Eb{4{-.LD1oB&"FSEmY7X/;}w?7lL)r jy~R閺zo6YR oЖc *"b G`/|st}n W?xef @۱]]4%6|L{pevmBͽDpB\iW[e )juO 6[6d_>6DY'"ݖHVZѝWO 3n/H,KQ?%E 23/p5PwétZ6=Uw"֑{f@z޵KG{)нnKR=q©Mk\&9/vxVޥJh9J8m[/x.BX{'0rhS p4O^s*MuwZHLeh~Ե37NlS1j3bB,")ELRĥZߣ1ϵp>j@Xjg3U&L4:ZZy{{"DQ$"Ҏhm\I;' z'_o3lb[vޅ&N֤G7G^ξ/,N%׾ X=<y bTevj%77C}C_]!)_/քLo ї'$V|Lk/Ev5c[-qBL0`*Ib^~ņ\.z.K[F떎WN(VE'O޾SӔ] }1ܐHt "=}tێzN|K.2Ԙ<3qtleg~ WBqԁL6i%DmwFtĝ1Ueߋƛv^6> L l̿f_ϾF?V\{*D 8S[1C3{7~1qp \gz[+vGF-h&zV"Ps!gإ_ec ww6*Q+}>| ~smzx*JF\;[d D!=A-=B;~ u?C{;=`~?{+[ױ{ 1^>dĵa.O- mk1/?> 6ouSf_pqL'?J=v??G}oTͩ|i/y\NUe_0}|1{6ͫ|'oN}3K%?"oo>9o55Pp!N; wq}I:7#77{f,GNϿU mUV81ڨ nto}oͩ|g8.PEYfw0wW῟ }L£>aoVz*6 շ`hn_Xͩs&΅-&F$ i-D|8 =0f{o#D?y+md$&b$"xZ!98׾?}s*lp4Qv}-(~]vNE*KSqvA>@PFwxod"D@pu /"ab$!$ @0CSDC3Cթ:ﲣS۩]p'LkBx,9150VĊZquh?OA16GfhJ|db!fB&wpqT3B\~8!'FƸ덦h)ˆh] QޚǼY7#ة!G_`8 qy_2@ȉ%sR3#3"3"h36nHhݴ~;ƁES5da"FƸDp"ĒM[p|>diKS8d "D"b&Drs5Į1̝^{P:fST(o+ Y?nX:ez2F S )ts3nњY\l؃nس^zgӘ IQr&9u Eb}g҇;@Az#2g,l!":RL3swSӎџYZs5M!̉(qta B#R}P:6|s-홝ZHwf5ʣ |kkUSϸ*:$FiIя#'/ϙHR>a*i\JWX)#ݣf.Ŀ\Г?0fّ=NE 2$"HM[m[d!bf %|(Pթd{5 y@;ٚ!n;"Zhd/|߷=Sȉ[|㿜 |a[<$Yg&ƂXb<+c;<_-AD" Z7jnZoj# .\ 1q"$)r9<2e)BDDSa:/( P@BnjZ{oر9S?`u˫{{ wJn`M7lq"JDB[TLcLwpE@Эg/BI[Fƍ?n.ZHVSh>UcV;s7[Y< (!D!I,1C*\\y8TR 1s.%&<\Mj'"Cܓy'ѭ? 9Q*i8r,1cɣ)'䂽+!3"X:+ +Sr|N(e`)$Yׅ$I9u"$D 1} ud,2Fi!ܠȍ+pg;ݣ\Fđ~p7SstIqb.ĉHqu3SX^B@fHHfnWVMn,SA%I)1 RV-J@RԼ!v@s KT|ݑ6Ir%L9Ope,Y IDAT*eq\a(ݓR7M  QуMpg gU"'!.+79i8zS.$E0ǒݽgf(Dui K訇oJ'"Fc R1)Q򐐈1sN)FdlN67BNy:_!бDsA[/u_%f&05WǮFf+|8yLeoCFdd^tGՠ"oҶD{#P$+%Zu(xь*bG"3uZO+{-ș,EGGB\XH\ {HѠW&vf̚jCdRDPDv|Ċ71 , FI y+SXaqw0M/Vi4%̩0e# y0]iLyLh84 Clԓ06ÄH>X\{5K~EFI) c SJ3&W; aY'D[a?B"o3x.|'@zJf) a|XG]Ew 8>5`T<խB @LHS4t7D7'ϟE%0eD>9ӂTA<VmFHtU1s2B9 T0'Dab̒%DYRG"&q%kfjnʹ1VEB= ?xXbS!Q P(吇Ce<)'"apP &Nc:ߝPW5IEin!ӐV81qaUa˔d8M8hl"|rsΈ!/~G;_ΫcsK?0H%R_) ǜ$D )qJ\A74afBq$ X Yg]g+h*DBR!1!b76g1ICJ95֩)"27}#.l3Vnei PqjcBd1+ `F !?kDt CY^211:3 1 9F!{TÛ#ug"6e`(bo|ud\$ I΃ 2%bY&)K$"ª*q#fbp\ΕrȟTfJja+ "w4H7Wf8&8Sx|ySR>0 2^0(cLxW - 4zRŜTHݠ7ʹ9vd s%yJ8$Zq!Cj%4)MkHf@\4!J=רw" r4p>rL!CNir*)2q; eHVԀYյ+ nmOhyRDIi-iX:8`Wu4dLYIʹ+5i_3Apy繱`F+F[^T̿3CsOT\ !`N#D;7t3_3MM~q)ݝnhy1pNwkq׮ҭwOIRw" $q(y<>]kұOE`B@SԮM*:dX+i.1pa%Avn\R.,3c. W]8 %bgB2rW `݈?H"b!)1c<\:7b^W>\]0+x9p߮n_wU+22@h3]UQVЧqDS#{L=2` p2݌a`@ 㟦+:W[5$E@d2sVީ#6D^pA@ d9I#C)Tnx!<ޔq Ȑ!2'F}Vh!j_VvMz's;Rx= 2AG(%B%CiA:c/\w(D(>i^7,zfA8R,rI R~_b.dow6:y>}ȩ<ԝυgX[Vi4J>d@GG![3sٺY#$mw ?y \$JƂ2L<7‰%0 X}Ƅ## [3SVaS[jd hQ"9MR3(Rdqp 294z=z_l1rw7JH (Gx M)&Wy|1/4^ " HF(;~t64NQbwovmKkvsum$Hbߦ!QҔUʇ<\rx3C*@ \  _>ZMQ >x8BsS91a םR).I$W똆s$FL Wp` 5\.^y14 :4IS3%gd,! # I&\'',Ca㓟iB.Tv:+<\_\ޔ5!\$J*C> ӒKxD?umyD|%<2'λyfn}wfeWR!ˉHPHaXʇ4^0\$qw0 H:5S;g"\8) "J{e)Dy2[,Iirs2ѻә15Ej  V#X'*% L\x5(d(qBMU>LGWw1n2!hl@XcxkޱVj[ʣIР)OpM)ewj_ *eH#N P  e%q بkJ'xdi\V n Tλ>fkb'Ic%KJË2ܔr1% P <ޗk֦ `CK(EP<|Hi|L1\8L0 5dH/x/#ݴ[]rrxТ2$VXc*$N!5_0١ZuoDf&UeᖶNgM:ڰ@tҐ˵$[`iT︸Bp[eS% R3,)  ;>({nnQ ?So:F+a+KR^< R224yȒĺ219x-{UM$P'_0@DLLieJXąQa@>^O%t5h4s0A\rϽ{3s}mNxiӤ s=p<\LITD=i)\{KWǫgns_s10UUem::G4u?k]9ͩ+8 ^pQ rW ^:w&Ts4&7GtWU 1P3p2yr(0(*(yt/g^~  ozt{r1gw2gGIli*-th_530 pqL\|$2J@ Iwz7 Fݮ~ #<ww>kAbT8C)au"3]+Xbc=+\'"^\OqBi4,ʝ9ά9s093oV 6Ws[ 'je]Ffb Fߥ+jZxQmPs֡ոڮa++ c~',1G9`~X>x10sK+C{05X?~凵A?b`%webH/0u.v]躮q1+?Wm&b JK-(Lla[XoKH\|E GR>:?_I׈ ~:j P)/E f_cݦ@8cBC] ]H.R>}w}w>g{\tzyqY$}*UsD(-g֓86lu8+a{?ޜwp@<#|g`},ڿλxxŔsr͕ y,z-nYo|kqw 5Oq;'x6'q~q~ݾF{&f(tФLg4d,.8r6qxz'}1`O7]mG=U-UKA> [ 8> )Lmo,C>XQܬ]q )@fl* ybCZYkuV_uH3T$n%EۑBDD"@-aXsqm7!njφ[}ܑ6nII"kлn: {Ab*~;QkoUe(: k~JF]>FUþs.zWo-,~]n쇱W~ _#D!en:)=6=:zzP]~36U_~SyEr<;خKkkr ;>]h]}C؏]?v:׭'8OGoGWxxYzwO{%=VM#r,Îί^Iˀ%mwޜU-*9#p 9g=};9t'?}rqpsH|>:jl&6)9?AI ~Տq}:ՃapN(aN?{k6g'/WÊdz)鈬hh|S0.հm?q l5q]8$x޹5aT [k`xV 8 zbRLvI% gQV3#Tj`]:ڲn+̩5]lQCﺱpb_%E!SVqX_{?Kj^-^ZܷP/Ua!O!:r.tqnuzzk_(?}op=gx IDAT| ~㧧vRz%7XI]hf!H5lqZ#`5nX/w<bugB ?ǓO?}vԼw5gabxб{E 9 ISOZHīwP,5Yt"7`7ga+tx₩Li ~AN<->[V}F~SF9k?Vz0q3dmBnD8\!><0_nsNug=n!p/[ZM2bQB?ߴP3=n8{/ VMYcw܌v|]C/^Ycfrz:a!n87זּWfۯ8TW&O8yk\0b$8rNVZz=f rsJ6޽:⥭#|t!0BX@ck'B]893'V6QrXO_m͸~:{؝0l1Ϳ9||(dzL*PK><̆]zw\pm8ns7bm !"X9V5KZ6Ñ:~#_^]# :vGr{J%)*!O.:WՒWj3>o?ǿ]?V|Q) tAJ4cNڙ:OH\BG6gY}.&g~sXr=I}Mz188haC[UY>Ccc7~@?vH}_^}x]r`V)\sJ)si%\K"mԝT*r l392ZnAp89xWݱPl9=8J{^ghQ _G,> Qk m[8K[lx1z"@$2Fegx,8i 7q9@kk stu69hjqwcKq|r !ľ];t]G7sxnNwMSgj_ rh]|BCb7tkL;t79cqqkCQ5xͤ,vSVm6حk}7C#b>?)R nv4]u^ٿyyW]JR̥d\ETx[ZYuZu}!ŮVl5GWOqjpzx:] T2< #RTo +Nb9_Czt[l wyi xnN,U7}+ CC ]]=z XM1wkE ;$Y9wLe2{\<0~CO 8Fd 8SG⬨"Zv.DipWfXV΍w1nȁkYhV_}UFUիuf R.a5.ō Q]&ԶsчC:oA&O+<):mW|usVN\&s*i۱Ţ*µ,f_;?ǟ~K:tkv%A^O`YǾmC6g0њ~gw}Fx=`JC[79 Κviz>OiN)\)-ĹRz#7t. nbcBttFo-%> Og V9]:}Is.R8 &LngkZNf`.æ%xk??T>/[^|~/uM"E\1cG/_VS +WΩG4"^X¡ĵح#1e07ڃoV?O k%6fvMS߂ڏoټ/ZI3UH0G?xsiƧ{\]r:MOSӋs.M)M\[ی?_3"4V|*k/w)Knpss}.RzeI%KyC.Tͽ>ƞq j׶f[З[xt@.H8q8tu)75j92q>Jm). FY*M\s,ʕԛ_ӆD|uN`Fcl>e7%_ye%s4Mɽ?ί5l9\taWΜs_%OWXpdJUdqffju]'_B4%#5hc9-*;zy*-& P|[@bt''''痟 Ͽxw{_//@m"3sKQ]&Tq+s33Qu℈ Xtq5O/n_ 㛀տ?aS~??>}(\ X'x/1z~'.pfUZݺ;5VAchM6 zVjm{ 0H,!^`: g󬩦:K)y_橤k|D|Ej\D56q]; {JN.+ǤBF $FpG<)^cv9 AU.S)j:Ik\K,lr򪑪p&rDWu5xEk@VjJrZRaQnKckFr;z탭}xk2uBNgǞ P]+L5,2+um |֫zRGDZ^K)wO* Ŧmj*ո NdN\`a8u"mZb.2ˍ1 9%k ;m;ND!%3<:^\Ly򝻨W\OZ/uTqgѢ8p_v0U!)_~O u7Jo.vLAZRRsýGkPXJ̜}MPk:Ig^U_<1!d:= #:$"saͽJ Zx1) ^{$U{D;Bk/-]B*?/<ȃF+ +`N3|g ~>xt#A#:xFJָU*msgYSwuQ>͢i@73 lt$ ONp:b1zOCaBܞ*MGp ·C\|q^y63lX\[<%w?O8Ycc萼%O!9UjRohcuu *n Db-{pዏWpx N85x4,_Q"& K"gZ^(<cBp."v[;t ?+(;\G<=%nq8`zlDz`R|cջɮ5 >4+B _r{}pNVXEČ'!̘\=8!<#3\ <;'4J.g{ԏ)t%ѴmZs9JاZĮ]0@޶I,9K\Kee52gxsT~FQVrx2"L&ao:Xs%xCЛ;T!Z"Er!txs J=~CJs΅!$u:Չy漯L$Ykb.©|7m^pU]bZ,R0:8<?{qxBi% ʎ bPMѢV͙t97֗m |h>zxoU~*#cD|!: #w(G5 >xCmc GcԈ@;$E 3yp]ǁ#s`rB2JnEm{F!D<( JY4(a=<3sBN(`J;iQh&-Sʮ K˓wCYz!w Qx 5gSN)r=0L%L)/LMYj(psfY3 WR+[5ac~;$EpܹêFLDZ%jZ ,Ee8TpQ.,|ΣFEAD䴢/VGHܺlVMvr%RaHVJ@QC!}3`('T5cOH3rF)w=\9z$ę@Y5."oɽhYx*C!0r_9']u.̘Ȑv`]@ZF)urα꨺m*+'n1/YR¥ @M swOK!PH]A*Q,qecwd?}~E*;v9\U,gg jsH̬sjeY6./׊]V\ uP .@t낢Ѐ⽌zÃڐ-ueyW.k2'ZH*Cϯ."5p>0008@=K( 3C ; C2jwrubIy),ukU : @9"UM!=bhj& dfƦ YJ*k|( M] Đ @r\]S5GIH iruU=3u|ĸrIb?0n y(Lby"CG $$ \Hjڗr(P%),Z*E ș"RfiU~92:q>us*Zo(^ma&9GR5#뜊5¥Zj9v-5n9Ru)xU @p;zѣ V,Q)CI@O ˉ} u @"…M;8 %U8\ Pn%sBTZv.H&I*,DteY̜&S\|T^LE8j'Gpqun:Ѧj=pشB[5&|VӺG\EpUqmwPhDlU҃37&ɏNOKuITLF18|/usIyWMɇ*VX6XA-p_e(WԚjG șK: Rgm4սL/iCZI{nyEX^6TMTGf&U8SI1t% #sv=H\J~{$USɇZ³ԉkbͪxVNRG+o 9Jefj|em2@ƾȡCI\Zfse57c|*|Sd dXdմSUQۛ6n+򼪩K Q`qE\:NW%לr2)J!t9LKXHle51//(4G" VS*g'5EҦY\"UIX>XGq^骤]S)nrN&2 Z'.ʉﮏaap* w~].YJXr5{RK ia/:}eW!C%/B1Nx:s-||*`ay23*8-VkP s_)ԹpQN̙~Oe͹NL&Kq1zGuthKad*8xmM,GY7ؽR{YuEyrXQڡ/y__wiiS՜#EcGUZhuҀr¤u5952 'Gp4[n5_;hnA1gJUܿ'ʂiS0PrLs9$&;3cfW _D^Q6a[ 7MMTH@͛YPS.n92gb# wd=u_&}S-S-׉9q>Iھꡖ}-s"r _ߺ?5U[gpVВ \(ԉy\\۞软=ϻ˼i۱qF\ufIITKfay[W?$f e5Uc\+zɇF%mЀ#ǽT̵3,YԆfP[(̪ʅ]"UuIRBk<+]M[0Z@#W]jx3Rpڭ2"ZgԎ|/P#"S/ $<% FHz/u4xKTG82۰UB2V1'UՑza""qWc΢o1Sv4V8GԎGyVܩ3H ᝯApr1flY9,M* \jSU&excdbL fNB Zw<#%WykR**m\%oJJuIMeⒸzog+P] Aj!G YrS= 5uȤ6F&i2F #c2cdӳh[]'I">\ I )8?&D> &_P4zimLlkL:dGc;VZ J)PdPF>Ds9 ]1KOL2]uJWy^ H*KY[1P0lg͖5:J&RƗ)Uu'88]<_-ei$v{ܔ(LrfRR&ULΉN(=EK󳼼׻>$D$eZ*޳=ciZ "Pmp;3[ NMV^5nojvӵ%kbm%+R))2&CXejѺԒJ^ֲCokՋ\ !eػɕ^W\KΉ3(1٩,KrJYUQK(K)Q 5osqkZ*qU5-jMmy-hQ,`r*Kh2FM5$gNi)a?M%[tHFmlL%mCTn2}:D+%#Q5I"fouk ŋr.2-rZVRIKo+m[$c e$JRsk hZta:]MՒ[Pl%R >U(-rBԢKDm<Zզ6q?ok]ەf Rժd 8(CS~vOw)U()V(j@쌶4V5*ZL$YQ6mTJٸ 6۪Xl\k[(ĢJZo0 ӒmʩT5X LI;S)7T g)VJF-E)",pbYdFlQʗboX 3)U%TT۝$΋Ky))-S2tJiT)nɜ4&U+Shq}+`bRbN\T J#\Wbf!rb.4r.b^q˲w/]xq,'&!J FJP֬U44岍GZoBc-iNJgE,"hIBɱcIhU-+WGJPTZ?_U6=[ Jls.4k;؛R ,onTVmdb*64X cͻ S:j+=]W$1U*UJ7Ujᒥ̼^JДZ02skV rb4 "ʵff5bp]Nɢt$MU☄R/dT4 TV^L(fwjї&2D;`(j,xbe)9ZBY=粈Ye\||j }z\TXA͚+Nm,V-B3jl!]ls{ %f@B Dj)uIXEZS/U!Վw7Jl Vm#^Ŋv~mTT j@߂ޛ֬@r;AѺ~ ĤTHAz{Mk22D@%vJ[c6\smcUmawr{-zS#VjSJ\6i}yrѱ'*WJsZ%9M)9Tz#T^uܺdՆ(@DyNy)ZرxqK_sN u/2-W)Ϲa7C\R`tR+bmYu_vݬ[va]nU( J PsxvfSE1XSA*OD.%_7O1l(AVu(zфms{ls-ۮQW(?׾Ymrgk>^7 Xe+1Z[j|fcj_ i }^jd[olc`6P0'Hq,+&.%'k(-,oVb+6@h]&: J.u.M);.:H֊4mnsV4viЪy)}d;󦍦uF Vn{<JDd4)v(VjՋ\r3*>5UPҟpx=NP*Ț_(9ckvJ||p_)ePՒR!ۼ;UEm]BQaPk~}-'kUZ뤥Բvl%;(.Dcq99PKKɖWM15㻬F)PWB$DVq]hQؼ5K, E^J:Yy9}E IZ$Μ/ۖ(P(J:څ{kNZ~v7{}dR)oqbsAb7R "tEKoS{&[gkK( 6r]J],",E^W"0+ՁAM&D¶ Aie A0QLUmEc yw--+^v?KӰ(|{٭뿬RZ=ծntTZ9q (pC$c]yTIM7H6'nVECw7e.zg>!+}Gu֫LvVx͎}E`&eܼʇqV&.B~!|lkOvi}C!X mȀۍY/=?hT>؏~b:^▚m'M4#~s+}A}: ?WT&>O>?ې 5w>[q:~kuK)/kCt`k{D[GgC҇[m&#-Xn8[1fncki|eO.c5&k.ظKBx@QĤE[\*׺ 3Xj[#'dOnfSColm;{ m6\rAnXh8,@v/=Euh8qB1lր /]*jRզSZu `]CPwxejZ߷"J$x񞽥,dl慖, #vB&,@hcJfB""J-Lk&R#GkDa{Bbw6bZj⊶RP*8V۟tPv.N6jC)@i-Z;݋:u gs.&dnM9([v (mW9q`ps{viP-%!A=ű[FhEXjTs-:>`O7<\wȷ5m0 z|5gʩ&(Gz;lQ:zab>cJ5ܴL>TSVy[Jsͥ(~LX%p. =13B-iy*X-yE+z)MaoNzmL&J .(z)\T@Tڰ*ˏt~> \?J +ijoKxP? DlR΋}/3礉 ruߪ/[NxX c8bq9̼%R *jJ]hWVj:6*bwaTҒSND8j) JZ%w i j0Z$Ք1n M5m+ͲR[ `omTm|ö1׍GfXήܞjcWn~xNܶA3V-ZJ))qZJ2[C] g߹] ~]tp/sd'\dE&%/Ȟ[oc(G˴;%<Ӓm-_,Ylj+?Dҩw؉% DTâ'f0i}pd\W^mTnǒ^6p|^=Vbm욬ѵ- Zk %. ~^n 3*J) /jZʲb|*{E۲ HH<{ێ?n>ByCO2yxΓ7i*Z4lSLma76w"Jwa w9O]ADl&-QR &8 ; 89:seX,RҢ)KOkQW.o曽l??Z{R#-x~_WmcGa%+u=)6^B 6(ۀF㒳g\QuUuɋgoe)K*p ˬ ޅŻhVc7? C?q 1c|L IDAT[1bL:)qAE`˴LSNthYxaf*dώl죏ŝ}]?|>MksIyZLy2mP ߮b(Qb']8f{sλD+s懂kfeF{meS%}.ې2]1YhÑKA`xha|6N5yVҌ={G%Upɹfm,rͅJ+Qu!Rr"`(1{V眑t-ؔRBKdeR䚥 sJ7{ oiSV%{[}~.ZY%1s +R$׬8HW˕'m n*ɉ"P.7]両-&~w0actq]_eVrd{f7mРFWC[m, Sb,5]ncB  yJyLl~ZϏD9nFzkcv%̕C#*vܸմWKUjmﭸrCb⍏{JJl5qC -4pR&Δrv\f˖a'hGmG;qk0\ * [PI.-yi ݵJdm…7x>Bcrعw0}w~gqe؍Eu}?0'^KY<+d9ϭͅouK= EnF+Y a8a8}0 ]B x v Fɓg0q ع}Jo>1bޒB S!0HRMDJQZ -dΖpO~K>6 5o1ZA3Si- i&y@'6veUO0zbJk5!"|ّ3k&"#*C#C(! vm L%S6= J-&&N5qaa)qQBuTD(  G^DpI2eVV%%i^xI5ٱ`[ʲa*ӀjC۝?ҏ~2Ʊw1uqeG IžrɳS22 DQ]%v۰;q?tá? pq]qYĎNW Tl4Qn @˷ ?[]]?^ v~މ-#t!*9"iev^T ȶ(q? 6fkXt]@֔S*(7R=(?j0_{3b:g05ďۚ5V{G`yzQB GND 3KQ)\ K8HcZrFΚZ7\sevj>z/8VrSI.MdBҲ5$3=1lmE]5;q!~Iø>LE̅QY5 T\S>gηoV7˰-m5]]jqi!LбgR*DP@ zמ !I7qw;! Gabw'Yx/K]XYUQ18J62nݭ+yC5--|Z9qFKl{ܾumYK"hᲱ d1#888jE efZlRkxaۮqTHjQ L"RJea5gΔI,Ds*zP#gsђ*w.vR}i^xlħT\f+s2S&ȫc(kJ hѻӫZ*Mnpmӻ0q8gA#7 C8 _zȨRGr%4iγU+xǸgȱ.vp%8v}C@w-kE'Q^\@fE3sb&f ϸ++߶6nEc>7>aяp0qgo+7:tpÄ _MWTJ2U)''3?bPٰGAG Nwr}#k(f䜅$c,Ϟ((^l>o)Qz]^Hɨw Xiv) RCtf=XPiEfqbh*W.bGTZ 7 n]4W$@ %dcR.LDx)Tز~1Lw n褳]]h{V aj'=%N.8ܒkv:'*TV'e(.w]۱wa?a?և^Hh zF:`b/*G}(\$.Zri` +Ml]8P[1!o|ͪMar3n 1OD:'}PH VoX^ Z4tp)Tb+wτy#QEFjwaw{߅a8Dt ڟzV䂫\&aVJ .X6.^-u;3n cA+"K)p eyLVD2I*в.Ec1ĈHL6j˼3f(j}ݻ_ˍxVrK.zIɵ[RSAhRLj2J l{{R]F# 1 /́f"$N.ę P֢ٮv >F2y:2l(xcn>:qZ5hH|!<2jUXٚ QE+*b[yVKkٕw~ }Ϻn 0g ˥L,E Ũ>&?c5\r)EU9Scrׅ{wSInc|6< @zhHRvu\k n,[Rl"%)'Jٰy?1q(Vc<݀@Y)ץ\-\1Rf%iփNEacCl+RQ 0T##3':E|bfkʚ]q[ |pkQύ(Ǿc⼃C-u^+\am5Rcyb1rI!Z00 K|NAgwQlڬsN=c$jҪ !ל8q}W2w{k']ׂC.RdT{绮A' 9lT5U4tvee۷dqn-~C8Q]dRڟjڐ.ZjJL. Pj [="1a֝ųӧ}#{\u䩒A7zŰ9ͳSH*GΠTe2v̴~ K ?p8Ύq#<0@ tOM臨NV};MJG7~5}o|=RN؃,0m#̍ nJW-[]øя{ p@yHkP92E os`Oޣ ;aתxmF?.t]^X>%d+hz,Ÿ?rVә`ݢuD9\Bwޟ{H"cA#}&*7RGw^cPzQ+ʵεR-8q)'oQ_y]Pٺ,۴ms Cl]ӻn'U.<<$s/KYfc]qJjTw, -exV|+wT4p?__\Eq9La:_+IbI2*dAmՂhe4qeR\w?xs;wԝgY8\⫀p_/Pa~w>SΜ3b9-o)wiG5'Ɨ{ܶc<ϟuώ;t: #'IqQyHI阏K^./]u•EyIRmUw Ƭ `Sq7aл!]-ڑ|RN/+;mAQhdyU3ڃ,(}c#0h cG$ Rw-|=_;>NpCӕH.J>t!t,"aLj2 zX6TbQEn lfF Fz.2)ȉk3ѮA(!Փ\t\~S\qgpqK+@BJ9@r#H[՚x8Q/^ЁOe2fƒ- %PN؁^m[ضCb WP@OxpU$KD'b@BVGNp&$UL@,irىaS;θx(賥N0Ʊs];Bz`>  !\c/FW Cf1w`7YUg̤Ԇ]sh">u]8D@ߺϟ*=%}HT zNH2c#EV*U+9],Sa>Q_qSNέ;qmpF!}%iZV_),w܋%[ؾ`2Z50{Ӵ0z}d~p3.ey^2թFc2(!շNY6p(;9L} ?ƞA_a9pO?m; Wa:Ӌӕ.IQ`/朋Ω3$|K { `hVͪ}g8}Ggp!t~**%-O?؍ >ŗ_Ҝr%R5O.~3.ZxOΫջ @z]( %$+øhZt5[sLB# 6H~dzlw4Hhxv\j3&`%)ջ+ry Qʢ"=<"o^=е|[>_3(é륟4!iZ꒵!,h߷3C˭itDZua mėSvmmq*U<|ǭo`]ܸn̅䌬NW;8uJkwYh7T B;bK/oL{dd3s1+w-oZN: (YVջ90I'wq1!r-_-zN;|k{֎pQ; o_s%E鏹/LRK-Z\Qu,&q8ʴ-s?p@*HB|lG|?_|t5sS^rɭ2aƥ.ۘ;]VcwxT% `w| eE&LZ"*:_eMe%ۅ$pܰnC#)x'<O%Y穜:ҥ h*/Y>5fTZ+:de(7>w( [[!ЁCt1 4o!Ymm,}]PٚAV:׵te>gjւ$a>}Iz]ԑ8evmT-#چygT~؛:K0gOGG k<_쿹rBc3猜&fB̅o n66R]t9]xJ"π!D )~ɧxF/W__.dR2ʵjT܈w%6 qcw8ϞtOO(\GS tEOHAspHҫz}U|n^v|6+ ۇ>q?v>x6q'Ƙ| +ލ<)'=Mu>ө_ƵXEŦ qu#IiwT|\D驯\gs2;KؾQՆf?y8ik2B+ŋsu=,Lu4y.fQ(XxƤƭhCЁB+N|Ǐ Lȱ}_L6Z ȶ!spR:x\tMȼ=go*!Si*iGb=>c[7Hqf݋z20~w> )tY#^SxvC-^||zэcϞ,E /I{@ |.UvݮJ-Rfm'Kbww~m3)}Mo u B?W(/@3ſwo~?|rbSkZ֥IDnJ)md,Ξպ#p | .PZ# C5oTNq+ļ~Э#}Ite|}?۵ P wB[ AVv6o6؏;xN c|#X‚%M#bYr,dwB+Hgᣏ; u zݎL>1O@?#_>O2_M0܈\SAlk 70do,N?[#z_M1}buVKU"/wvgR]#xG 54o3T[;EW]ԒyӥAeE 5&H!Hri{@WoSJ( 0ϛi['M5{Z'M`ӛ~3 TXoW9ĹꂆBae.|-%mp81lǀpLd 8qtBhkP@h}J< {}#2rB rۀDfaяmh/Zj-UFOOgL/0_ydhQ!RD&e`+7]ċ]+ix]!)&__|N*_Rs4Mi|ҔRr<_[m/nICU8@B2/An9Ϯji]ΒN^sm{ӨK&3^y|>Ih+yy"K<=y;k$#zNM&w]Rye-0MsTpxe|}jFIq6t#DBKF\ ${GΛ_/5H(/.^NweĊ5ow";b|>?^*~G x\xq7 ׵^ՅTt)iMs]] >41%71cKpj ֩VWuF|Z2y;BE( m hlt 1vܪpB'.vW"NrT SZ^L&9껱w;&==d"_G Y9 W1]ǼZ.k6A{}8^6Ё! Km3Mݯh)Ttd[HdbnNY=__x>??Sv1 ()v 썺*:iΚ#??k|>FOK)}#U;]qx'8gH_?W_=?=1HruNiTR-5\:NxIԞ@1}q g7E_ DX:<.'K -+]yMXd m^#j糕zS4Y3"4@;c)<2t.uD@D87Z'\>X,tC}ރDʎ~_K%gΉҬ %65f6̋Co$k;78auj|8v;e+eشKR︪u[xlw07:_d cFҫ [RJ5IPÖZVmek+v'Aɛbjf'4z}U:ϧ\^tJ%ߒ浭34M5]\Y(>WOn!`G{'҅ޛ5ٕ$aDP[wϴH5%i2=zכ~d4Ɍ4d#j4!9[R]rgqͪ2@LF` 3N8|O[ y|fƅsnY'"nJ):Ͼ~ %_}öaj޺n]lm;fxճ̈! 4[ w~?fys,J*8.Y#vUGS 2{֭].{6+_,.߮o֫u]sʪM voq-;w؍x6O\|UMt)s>ǣF#Q7`z_c 1[k7+[K)MiZҲKED7Hn0acjZ^h%NRD(\ iӳ8 ZjRRj?%bvepӚU *}pv=V7o:|?7`ϯ뵲V.Re]2yv'|Ү6br"WrZ` z0>~/~_o'?C=n7l`Û*7&K62#`=zլ ײui!ZdarH9f=(+ fA_z91z@\7|F4[ ))^x{H?Gg3W77߬߼NߤW*_]yuN)R}Z;;M/b!|gwK?1X~pcp WmW|)7tҴ浖*UXtMc=gdr۞/о2H&N϶\i*ӔSּJ)]̴(]/ՔBZL[W{|@ \,`Mmz{թiN5\4Bf;vR@|`UT {A l5>$z~ڵMUDٶi?8i>W̩;;U&|9l2˗/y_߬o'UQ+}F*k߶I9曙nÑD*֌9R4^ G7u<ק|un]WW:_i\rg?̬M%;HR4]}.@/JiVYt*tY\˲.tSn|Sּ|=M&4o-g KZN@0HbYi2iy)K)k7߹c6!$L> HvԿK~9_ZN_!kQ hRMk^4u^˺uki~TW+v+o5Lh!*Ɠ'[mRj1Fۦ|'ED(sk=t;LUX)Rrh($˷~rryu9i9iuueZ$ =u?W)# a!8z H{_|yQ^ou^u/r9뢤ƶuN.%-KYr^daVTR)'NR$k"$Ro> AB` Fn~onFƋ+~uc7bz!}Wmjf sc}Qoە Ź7 _\+pb! lk.4Lt#ݤ\h^b(24M߿nR6w[/>Xqf hjVeR+k݅b4C}}A%@;`_[bMb abKv3jʒT;<@o B N17GG}m0v|cp R1VjeZ~t~O:~{z+$w1 il,TNJuukaZ "4T|mj9ԥ:://~ 4+ycΜ\+Vq( {]3, \}]!<kJNv . Xͣd8t3]N5ugVs1=߅֓ahZBJ!a}^t] W@seZoRZ*3L+-։UBmW#5[;h^ͩ  :]IeZaYB쒊ӬmV ҏ}&DA334e@NJ#,;jddau/h#DDL5-y 0b$yeZ1 lEB4#tUVh`TOtd)k~P6\9s2/yYq};ֺүJcXno~M^sW\B Rxߕ,ŊcK]^ļI3{ĴԾPT9Cbf+h @XAWNf)sN lBRM%ݎF%&&1Y0!*JŇߕR/ˡ p gk8WNEOjmTJX)PHZj+&+,qørZkr}NbO `6 p9@HY2/eɧt*,r\]n$K5Lyj2-< q)5އ;E0gzo2uNfgs^Sy*'+r3E=+`Դ%H@ۤ:z,9嵬|:ө<-{.w?Q"ҒJDF.ЪXSK\H#3Mf*NXŠlꊁ `PjI%J{WZm+`` XZsVM8HqoJ2uӔs2KEX"#XR(a\t}͵3g&ݜjPEME\鐚G$iյQjvջm}N*NEESPpҤa>{@"@Jk6`P@\j̗W&rnͩgy/.` "$Vբ*"r2Z 8q M7WM.7|eQGw~VQĤԲࢦJy1ϵV'F }1@@1XB,s2iTL,-,eɒX@x[#AYLe9ZE?? IDAT P&TVBSva)O6iUj'/&vB*RvOA;ĤY75Ab_?hcN01aE;$zyJeBz%ea@\Ӵbƻj28NW}ZbfMU~yb⠡ֲNuN%U{fNXڛ3ܯ-E(?=nb-Z̵ 2e"ҚnWDze^\fq #\իMZz}Sn# %ie.)w}]DGj`z?vW#8- 8ࡤH C$ooOtNs*̫K썄;~8z̊i%0uM}P]7a>bBmdAv$LrZ.&DF {c3QvWdbR-j%SsIŅ3ED4O@KUNhLPI}SOp`jBjЭ 'PRIk.P…]1~3:\.<䓳Oeepʻ_^,Rx6;M"c@{djaC|̗7mu^鬻EΧrZï"Bɔx)8.uqC80!A꥗"gcF2])MSu+$y[rV8y˒yRK -$~C+*Jg ,^m]뺷%=8oS6AͱA;ڱrfBQXq675ngogݗ:PL0JPpPђ9q3PM[ZC樋7Gd{?ӭV\f-@pJ^y~̼ۿ~z:b!$vrdž=P.71 %a qb2 \ԋIZjHtPMzsOi(S1nr$Ѓݜ i#/bܦ#kn"w~es=DDAbjIRLTq|96:4׹F=cGOo5;b ``'_a%S>-u)5n"$;j*M}g/&dT8{tjn JcUӬ3Rz K$_|=SV]pӈkdS h\s(7 OudU HA}y*e6XG:fyHw_Le̬֚C ȠhUmZ;BJ|ZOtZb}TgyeGv*r|tW "')5{1*ꟸ֑۽҇] %SA@SPzѧ(]{>'z-wM,-7;FX y37;70qтdPggdntacURl`PE!"'vq%/KZrͭTWYSM;uPwո^N/Y@ j#D0c?ֱ=hU~N:@pzϜ7y]ֺz0gwն""zPy42``c!5T8Tb/=]W|je::n[뽮5 TгeˈȞaE`PS:iʓ̻zMr6^J5K&$ q둫S[- Н;'JZ *wɉs"˓꧶'r٦?F@s쨉ߩumVS<%n\:!346 nH]~ݶt"{^&d@g8 ^XsR3O*Tgy9nQ˞]ŰQ gmJv,tV32Rj̩G]<p^wń|>`9r͍Ё5ra"rށq;BuZQxB'ѶB^{q.88ZF{(>r1P|ղsD6*Rp ܩ/H(T27SM|77f*{Ĭy7vg熥Z\3Ef&"$7PZuޗ o?Tu7TpʏoFꓦߚ%_V1suSpg1h֠z⨟GOj=ܩc qs<.KMQ/*g]#=4ঙ ~n{ 6qn+}+ 98z3h$'}y{fV㞐mjTIΏœQY.:BBF4$ &<% 3uK$T.)6yg=_3U/TZ!N npRNy:uvw 7kkOWY6!3m:276M{m'=RP4ڸjxޞRETO { ekuM`}?4Na g_? r0 $EmNe˨>P{v6IŠP>pCsVIM ٟ6u= Q~iw')m?194!Z7-py1Cۥss:J#YnlF-q 9vԍ:X2S9MeJ59@UE) Ѳ$ ?`nGߪD} +m4ʖ\Pp?(ד8_?v/AȚX=_Zl^[=E_܌BE?n ;)Tޯw [vrq,A%X{{#fZ{)b:dΡi"R) Qb%"9wNx"˙ j&p]6U@*!~gɷ+G:lM٠dh脨F9Cv8"9تtxzfqw-OuNGmSӷʏ3V͍m|b 'ϳa>CvtmgfaG6vc` (GxpX#B "3˵RM.i8J\>s|[6vkUSӔ]#ͯ='A+@=}.ڎY=w'naóS1sA9g>+rJLlhgz;l~ڭ&*LR  ;Úv6wFv'EM;l7v[=7[}?+yy=x}L]OF=`m3MtcS[)ۘvs`[3cp ,ܴLۨ[3*oA70G3:ĭTkXI3i n 1% X^?>Sy^ZFݪ8̉g)͸|B(}:\_ts.=Z\6;gN{)PMmw*G~B@ Acm<|^j5?EmLF$'P'>qt7o3oo5qa3֩ BϾ=a8;h;)z=;6/cޝvֳSy^r_4l)jOޮ(叹{-ݣ 1i㶜AMXM]W\L~ֳS[R"­Ӌ^njQ ļA4 +EO0eN`x{LLE>D$"bS7 LUT$%!OYU"T0'|իqb̈$RJεUET@4S``*DcKS8Dȱc8t 33*+jQJi GT| {^\OTvC@tf[NLB N13#u-A5ͭx87=_٫&ӊ J;.jf"L!.ZHQ&3by ;Cb?v.bC=P`b$.u @01⩉Ԓ?ydz[ y~&H8cC膮CĬ֒k-LHf"U}YQ$ƭ(;CJs0$BnV@6hX @@Ǜ8k/tp=S9-bBhvKԭJ\QyTz\ "#Cd-@D "TU"5sʟ`9č}mP"5Ry3Eab 뷕!;`.Ğ>4H^MiΆwTkEA LKYzTTUjA,D,DP T ή뀸 0c1ы?\axq@F$š U* F{lw$đ^nH56M:tXPT>&{?\Qmxi@ffsm5(YdT|1Į:hȎ8֭YTDR*DƪbZUiq,E(C}== đ`)ȕ DjɉjV)9E ;A5艪"ʽ48/wCcc7."vQ 8X-bHqN@ KA"5b_*ZxFȱpBbߏ/0^v!Ğ0@J ǀi'RU@5i!BU9,c쏱?r<؏n]8}2s`d”V5403TD1/"6cd{l9>CjEjA" CZ>y/LX5V<A]ySE UŊHOs{ Yʌɮ lB}z&RMK-DJLĪUET VhC-|   !!mT؇PPTJ^2( Hl7VthF4_if&:(pј_ p|GćŋC*Ǿ }&1R*f-RS- 8 |[ޛycGCt a8_tEn0\q4@}T((!1zr:Ѝd/{nnq]cc_t!v=1R0PR6.U*T'C0];ئ8  "r]uĥRr鵊٧- GnSsM'HH#c& IDAT V&V#j"^m4ݧt+w:KQ5Qr}KM U*q#gGl=n qP.tWέsw( !]7U1$9CPEHMR\KUe?sD4R A20P Xn/b<:xucgݱSźC0t}YJՒ'j*Paf-N6 8sBw?Ǘū+=q1=%ucc;Pz"*Bd9Ķz7bTE7Ëën8c?#u]aat]"$UDTk)̡"=S/{{ c !Ĩ*^bFKjH{RR-ę8{FQ1m?~)QKf^̚l͈("\Vʻ'[9pUDXHXP28RBB?R5{C/>ӗG~Ӝ$ߜ*kBRR=UU4TPE7ec7p4i8\q}#^LKNEKU" RF{eZ+RE*.uz1 cp_un8vEx5>t.1 QTs* @.mf"!9ζ =}n|1^qLvh^Ei׼5*n9G^[3Sk@`ֈ*^Ʊ{'p8Oϻ<!3!n`ٹb;:*&mGlwn8ccFjR+Nzئ߳F ˫y{^K$=3C5ME"$ F A[n3WNkA+J n h4gv Y9;LEdUf{3V ԑg~TZﺎsV2;,ՒZh%\/sUYմ,_iA[.> uz{֝n\$>B(bQhK|ԓ'jD! ?;nCҟnӭpo GMCCخ T(5dTܰ)pQU%ŀkQ!@E(5q*Y}Rj6n} g>*b[Mo/D”œ$ kk/qp|\~spg-n{Do6U+@@5[7^]WH|aӅnU߻>4H A<|!%\\ 0}}N-w;cj3{ Ɵ9fS@pnsLcЫ%JQBDIYSɯݩkNPcsh]g\*9P1JL+EbM,}{wƇl4xh]pàАGRMX%q͍aHdT=㴨gs;*vFo~c}DnnUyTY`ġZ"sP!UQ(Ϝ+-mu#A$5,%bmnu٭}8,ţ lR5u03Wh\K.cU2N8sͪ*Ppm%2'\9]|cw8,t["8|pƣ b=ZTZ .+*̻@تwǸ0o$n|rab0`w8pB182QZk..(N##:6Z]oz^J+UREGDƈlK"O9N]?rʍ!*:#ch*+T\k1%}_L'28cF:k@(TMQ@!ZED"pn~-N/Rw j]z{zm@9(zU"45rN"Fk^Zɩ2u]+[ߓlX]j+s[m sjKC\B*6$Hd|0B 'ƺ\$۹ȣqQa}p@,ٮ1!XK< Um&Igd[~wmB\Eѣ bg.x!0l[D6Yx:S#\cs !v}߬9kTWm'/nk9k(jV9 ,}o z"sy7taByփltǚ " ֎u|?~ݺg2.@P$bHR"V\-@B_ov*O%gs.~hͮ_ Xr]5\\3L݊#R.ٺ,E o]W҂2ޜXU.vA߭Ba?quviYSTұXKPU)@DOgSRCI?) Q(nsvi`l'ݰJ\g\v`BIcv"+|]jPI+$O~:vZ-`Nޅ޸޸H]}:חq|\wޡ .`+*?}"pրW9χ)LT{@Qkp_˗%ud.vn8ù6._.<݂ہ*Ct쒶Rjq/p +j*EJqR~Pqi%g\. .Yx+aCtܦZp؉%>5eOYcB}s};C"UdK ѮUrKjI)0SpGˑ.8Įb躰]Ugcg1+"mLE哾+ĨXCC#] `afTU*;|or*+l.ڋw uUE"d}?l̔c;og+.dʀ%!rKfBEZݿ2~q⪊?>nGgi:XTrJBɹ2*kkJhsjnNp< Uq#cb!TYW8wùٚ:Rb_㍂*)JW۳3l4n. kehk]yeR;Ube\O6JA)l\0{ylzlz1%>?OtݡI0F –,UpfZ#EkebdW6ȄEvtÙw}DXwgOKFxYQd][ň}*Ek$={E2*:2ðͪI}{yM]GtW>Q QJ^,̢GЅ*, 1VE9b}u}4Cg/6Z7=gwARkqΝ$a_|h$CguU%+ʔ* [[s1 ̅?ʴ5O߫u8쮆՚˔xUK%cjUe#NũrS~m6{1]oTʚv?y'уW` @4-]&:7tΙg7W_TJ2Wnp.y:@ &ocqa 땼3R"G6=QRbaA:`JLMh2t+嬜r@K-'~!SAuop _0@^M`0 VC\n>$|#\j;hQ)c>n 7f# QXWݡ^}@3CQ2)9{fAg mqqX=moIX׹fjU!+h<"r68c@Y1NmT ;uv̩;gZ.d |[ qmatp.1|Y_L.\ %5J=tSVW/{"YgL;%+ _(n۴O{5W YC"S[aqsֵ}k'ڭڰr n=ek|ȹ3iB^_3̀u> Wc@AS@4[O3*4gs>G4گ߼|q)\r.6PL> je} U:m7l°W_Ɣ%Ik k<=7|!k233ƹ*nu&uVLʝJ&c]٩n:f%G6num_~ ٘"`l@8_r5y"Kʂ10&L*o$qIG@zN-5?-Y­O3<Ȗ*Jv}5o@Y0gLsF*>Rg漳sՠXc 6.]\~DU\86=Y,H7U=k16s|Dpi wuqKP"b1Sh쪷w] "e^Mhpkn3Lc!u1yԪ 4v遍ov*ic2 (: w-^ S9L~O>~ eK%ĮD:! k\j{/aƿg?wq},~w{u{8gʠB+*c 1 w7km]t_"uAarqq?\Pl'qчw-~f?sUAi(ŜX}o%2e>vC?Y>6摋[2a889.VxzuO^nF:ghcZRGǚI ü=Q+WEHfM7] &φy\ٰ `LtxYSm^`eNRg.,]oٯ['^!))~犹`bdCz= [ސe\(TNDH gwݶ[?pIn%'rgUD!Aw Sުdԙk⒄24ug-1)Xzkj1DZqwW* q1ĞKuZT;Ϩ~S7փhJ:ꢛ moThP+Uk7d|C\0Xߚ T`'_ggZ氻i/?ݰF,rj&]tl~HAi4orLBca|*rgW'?cL c;%~?y@XKIRZZk莡in_i_cnXo>nw/wBPAk47=Gk7p9uq4|]߯al]\ 7#>\@]QMK l ۧjX.0mDFx9VR |%2EuDy0I5[XoiXMoR12v55O\H,ma$B)U1Za]("ĕj+l\eVݰǍp_~K<ݢ {M gӜY@ƺfJ:UN}׬=D=~կ'q}?x6G>' FN5 aA^Z.ќ]Hp邱doT.'”gr(w!)vOKVkĀ Ul˼@e˧ Ǻـ6=7*>PE奝 -DR˰&c5Eaމ茋8.6ZiaC f =T^F>SLn{_ z5$iM S~;=B,0ˠ k;ͫvNةrj\*T;PTD|BYf5g&}qzG?_]G6XǺ "D RVZ!E%A/yXΐXժV)0 Z1c_A9*~ǏPx8*ݖC_#<(S]@Ƶ)gCLaa?kް?yǸ?zn5|dR<4yNTҜK)r},5+D8#*(Q㒉@`Ośތh̫! cFύ-fLT-U; 71-ļeAk K 4%İe~:8~Z9C0dd4-J 3\d11Xg= F3l4-ɰi,!Uꔳ0nG'IcFt'Ա *9Z_oH:N,?d&j N+Eݼm ]٩lM#5v+ve+ zU3j{9WRJmМ~-JH fH:c[; l~E"TkٺS{#oF IDATj䧯^hGoNޔpgdh_lwJ0ô,wWY=D+K*fʿ;K/:;MɃh8Q+BPIA6Zdqby0 Uڬyx.ϯ_-nnnןg*OyWiܧPX\s.9sefNzk[lӬ肏U"zt'>[׏Џ`7Wxvv#n7=n-{S-$X滨~:Ɯ>ykk=l΅-ߺ>/q\ps1a:T2GCI6 mʎ4p==Ø#cVg$Q\Y3tںL`؇n*,5g|ms#vڛr4jgCBh.wS6|_ۤ~Xúwwr;[6=mzK[$j]Ty{ W-J%vFd0.% V#.80B}q2bZ-hޙ!:(s9q4nv0 C ]XoJS^_]05:.kKnKUV!iR ж?*"1[DO)ayທ䩸҆\54n.xJ7?֧gx?Dt܍yImͣT~JZzw?a`ZJꪺƳO7z~ %jI}l>̜:.Ŷi+-׻uok_QMZ!g=)唔Uq'^ѣ 0e/ ~Z8՟tޙ}h#gwb5m<5|ҐW>?cL($q{>~SEܤ޶z]Ƥn6JC_ogW2,ՠ9ɸOz>Rn+3 \p6()Z_TԹ:LxvTWUA:iMmir9e$5޿`׶1ڪ#|?gLuy<4jSii9sm_n>D*5Q::6ո7)RY1&%KŴZx}KVk RJ).(UoG1U*:oMJH%JwW}|v?ΒTYf璦ƚ Z}YTPMd نM G6>ɏ>i~?u?_\=Mo wzWcAv\_TDZrtSE]~CU5zxL C>ʱ_!W<_j"!he>k,7|r'NfDe\K/D=o+ҹXǏtL 7#nݳy,_*yMnySNVym7qSoyQ"U("PpXG߀._b?a7x/*Oy4ti.֥|u;2t.XXU(dZu5~xy/==h*x18cimw5J:Xfs*5NHS%&ZkUkto&Hk#1<|[CISƚS.kQw{.:_[ӴaX=_/%7aZ9 RqsKiNaCkڦ,*3[ko&w, UQ.cש,[pj I 9OsJy{?w?_'x%hMCluy2sM5§欄u;Ex'6Lzάlytq}oͿ[_t3݂z2];#8.OiXrP5t*Ӝ_1~ZJɳ'cb>%9E['?/O"X~**LޚJ/\SɳqYp>xg0AO׽řk`+qa|NqbN VҐ6ۜozv7BXEWW̳[+\㇏hc\ޑ3pdגs.Hk֑C!\B.U`/(2+/vOl80\Zg)x!%4Oek\.w>49wם_w_|;xORE( zi KKkI\3s=x9M`"!HM ɍSzEDMr ;6'OJWkyO:KARjE}Pl"׾ ؀rWC x)rcR!ͤYʬR.2nByR9qnJf͹j؍R,ؒT[M~< ֜@֫+,wT_>dƖR<]<JZa$I87wRZ&T1F5e |·:N{^MqgqIKo/k>j3,\r<4y*9q\;i/قZdKev>r!+!٧8lGYon|_XT~4o@:I\T0i3U*.2'NۊxΙ3Eoh+߼\+h!bLz6]r^gxz \c8Zn&k`H b"S&ԆrM&qк(lЧgtGN |";R+Bkn3w0=(t\9.zme/vhEhxy5]q;.YgXw8w͏"]sEFkր8GSDd%&\5ti2LEoaզ.8RX }ʱcfqgR.!-\x[ґX(JOP=ƩoW3$5L<S.sFg/P* (+Rr>\&DrKqk܁`)GNk4 4]nykM7c. G|yMSx}w6l@"[b`}do^;퀵_jTDŽ#^t.h!cbajQ,i?h=z|5ԛ,,XK9M*![|vRqFɹ9*3fI+TjL@psaB+ ide"!qa_ޢ2cnBbpMS1ZH2-jI::] z cUZUrRjmq8_CZΘx"JE*, R 95kk&ru=/E3,mٕ۽ZXM)ɜ..l)M]:46?tKm<1Z\8bP'|LsVji\˼:wR1FMKDTɓd#e*Yc;ŗ>q9Du6}Mnq><2 I̹kޅblVEjjuQzq9 +ksp_|Etn>^ހ!h2Z ZsI<3i$5Zv:MAy뜱ZcZCts|,y*y*iy2qI.w< +IBceY926UJZNg/7>D#U|?/.I+ZYZf幖^Iu&bY"Zx֔rS]q(v5KȜ =Xr@tQ)xTn}YE&4(]R07 JAZgk%Q".rj(5!DcД%sź3nFE T+J:M9:S- d&TC a|T2ǝ+եbraC~B0•`?#(4TDaܜbhz)Ky>f>j *I2Zv0<UU)%'c,Kar,\沚p"T碸qBCfr[9pl!$ M]kbnr UeMuu] ^ƩސiNOˈkmK:ӱcIG3)+'SI{4 |RK*i*q*:p:a 2R$Z%.=rI1^$󉪩.Mg!aIVIKm1R]YL2a{ÙIFdVW &qر|S)OGk˓HV9OD6;ywZbUnu酈jk hТH.lupA}.ĊjPTHs"";Ǖi}qe#ƽ[KDDh@[+*X(|H iZ5c0AZ1 O~ָ{m*Uc)|zDK- Zj_ jkZ2j[-aVjL^Tkm>f23j2#tsdv⼧zZcɳJ:IҲ-H+[.[31\m5Wv+^TQWR`ڂ%=hr:LӷǗNo2+㠓H6|jH˭e3l?dLd[Vk<[$"(O7"# s.ik;I#7f>2QS+iQu)lcn+TYi!Jľ)3n:Kt$ty"PHti>i%M`9|8%:OKl>aIt?QSoöQ-֨ ,STH\iE-ab] \m7D9IkΥ ;Uz U;hSWܶn&bh%L&/Dj$chDV >VݱMֺxCQzJfrLF-Z[jqj*8ڝ\&BU]T\L4;*2:Њ:KlO,Nfi-q;sͧ225SkVƜ]gj1 ~C[N9g+kCSpe>c5k>2~[+ϵf "̾>t*7R)qRa>t,K4MLFO}AU1 5VB<պ%!m!Iߊ\^BNX\C \B$MPMF 䈜҆DFVm1ޓ5w7UR3&X#&q4Ojq$Ũt_ v\in=UGlּ33Z >ierev{䬪u>M55R82p.nu5JT@ /V^7U(/J;U[\w&Rs)PC|ze@u>2(m2{߈*"6[JLϠMT[|jKmƛ8dj|v>זGl\YRksD x֚]\8K: mgVfj e:X=ŶHb<Vj͔'aN-H3s1Ԓsu-Jζ4}oH+834fb{21ʹU*Q?Դ mou+'Q3mkQeq9 E.*$!|\Rc-hlWm*Rj%@YԆL5lF]jQ,W.y&A΅^$Rj)^&)SjuϯUN5|*w6w+S^efɄFOUATNPa6:Zs2O%m?2D¡z/V}8fIع!"UCWMb6imY(DɡĻ|3oJ1e:l,v\SjVZٱ4_&r!ŹVZd筍+_꾭f *HfbKs.(/{AIU5/"tQ^v?;fiygZ]Y|ЛCavҊiciT":=YlBb[0֨Լ{ϥJ)̶A$%zts-IS1:\KneyިSK4j u~|XD[BPi\BH5uNMP*܂^ϡ͑|z7y:$Sgs͵LK0l~F|Pkۊf­wl+eC!ٯ}KD|O7%|ie.I+rP{?6-"kjh25]^B+s t3O7y:Zi5KkzMKq]vFTμ33v˸1AsnW%(z_[J+QnSYF%jiY,'nd;Rn%0D[v%-ǃ.,jcG*JZ3lCfE5 j%@ ^S$kqEZ5VCF5)2{k,k Z}u.\.8{Jkj S+S+Y1jo4RU^$ql!uO4gI5Kk^"cp|,"Zk\)22c6&bf&Mrk^D$51gH-\>Mnt<[=7#.0b[ăꪪZQQٳ 7[hyect>h{CYJ9trU,rj 3ib!Fhhk3yU ِR,"lJږ>uh{Tf?p̩ #v֙o" [ ԪU;)r ۸-v./uE~-+D*rfWC[P4@l]_aAMrs=⼕mJ#}1;X}HS\o5\SsZr+N-2'5lw"ʲEy @Z9bV%v2+ÊmvL} ォeM>ϯ|\'KCFKVK-3g"@kvFi02&Se>TT˴<{=޵O4T2D%Uou) Cl51{5L{n7U4%k`7]hQBu ^m9S\G ME@E#bCvV[5/3H9bQ6-zg8(l"TO˞Cs̪ܲZ[DFVj^Ys+sr+WxʮJciqIVEe#bǤ q1Z ;KÇgibU 7bR`jjSvnhɝ\ =#1v{c>We6XG?N8_JDKb^1Ɖe\k6e;*򼭤^۶6a/?",`{=@0U1oGs=JPY(ʲٖjxQ^X(Ro۰R&bGka+g1 &Z-6KDz۶e-煺!:XsxWlb }5!B) 1 "G.K{"<^Ze^tHWM7R[˟ʾJL,7;Ey2ؤwbt=LUmh b~Q2ΖM$iXOKD ?e{?@ Kuem]nJc`MSQz~g#KZ*%+}c&09k\@5WY~qUk R-F6Dym4ԪN-0R,%Kkx:Ni/j}]U!.66mGRPJ'.Q}ڬdVf! _}k9-k'SUZrYyޓ1k}R5͊S};4|Ee!!j邏Ӳ2s Bq Q}lF(ȤɅ` +'̭,|܋}rB`X:ab!60 iVZ&}YXԔj^~3sQ7jԉT56| ܖkvC?b-۠O|w'*KJ:hRU?4X&pԘuۀ-8=Vv*bg糫;T[FuZ x 7fgR K.aPkAmqgRU*# 'VDrV֭Jխɓ;>=iON>IPz,>'=LUf7חP@A#eK11ʸd[ W.V3.ڪiyL}"4;T@ e֮I*bF*ħEX &6rة[y{??٧ *Ov[[H5DE˂ϩڈDD6.;0zvYآu{*;U!2.r?R|o#?e:O1z؃Ol#ǖ]t f<bc Zgpj-5۫f.qO@x'SPyObKׇVڅ x}͊$EYZA-d;<.8F7sOdcOA>mwEӭ꿼6 X9e1ֲO'mOAɞ 0u3 ޝvdOTDr[p`5S@yG'ד} \.<%nX`VnaYerwO=='{DN9ͩ.fۥGoo9rLYoXӢ[ [`lw'nOAOue;let[Yh{7#ko!JenQs >^l!E,WnŔ6?!{ *zvᚷ7'0s޳}9g6~m+e57j,,7J %oM>N99Gn%XsHDDTM@rdOATl;,;^U8Ѹe(1].ˣVg+ 3L9lbX~I k eM. [ts=ZfUGTYkACsK,8;&Fk\vv>ٟY .c\csnO~bt]vx.E97nS\vl!#_cS!!p. 7ZaMG:Z"X9 *8XDaUتG:؟oP!'?鿡me,0sR+"Hm:aQ}hAUH=MS"^MJk,cαs#ct!,kRZՔT5@#+o)l 쭩J)ČKp05"5 i*D#Zk>oo-% <(%NBpG 2V.E[)J/=do~.%? a0_=ckJ#/EJYH+UkmkY$7_]EJ.%uB9LK) F[tP֨ˆgXT31FuSzrΉsTjo9"ۓfakXdOvo{99ƶ1<1"a,.k/="أƕb+PB`栙IUZZR9[*@cq.;-s}1vq0Ĕ0c;i!{"Vm(aҚ\K![Ӛ< gu6&Ri\߇q\*3s2MsεLZ/6D9?-`wf6l آsa-s+5Ni;05~)]XrkԵ[?15~4Zu%E"$e/x_3&ɹOe=f.ɳUo?˚0.c]s}H)Ʌ5󖢭iΥɹ4dSZoy| F.}H)t]!s&>s +&V+JPgmhtm49F|.s!x|uY[~NZSf"*o~Z[)6Xw.v66āڃ7nJn= 'lX{^i+fj2Ur/Xdj5^}ȹJic`ZUW"<u8}qR [L)SZ1D4i*pnMs`RYvCnw; *0,g>ӉRZ#"|2MVʙYo~*:fF{}(YjeZVMsl\_*knC,-Gfٷ?*l!de4Z(d mz:mP҂n7fXbd++ w]_1"2M( xfsۙqn.FzkcH9ǀ%|ZkcW~\AҍKfoMKw!h1@eٴ_2H`k R[-8ܘVbti͘>Y=n¥S6Bg{gްH",s+Cw٘s6v~|R,MNu{o8L@4 iE] C˗ʜ +繮c.!}ȽL;Gֲx8a!a.(!`fp)²\!.lHFuk_!}rn !XQ270#RH2 ԚU3K:Ŋn !z[֒1J)șU9y۶*ƭ}ktqvW-UAkkD1n@c-vN 1 ZL9eLϰ֤aR9gm%W@|(p]-,8]>;眣ָ rSmK\`α-a6 tO `:hn-_ޏcGÑ=}ߏ8(;ל ́(ܜuTkg:탕ins C.l؝> Cw8F1DZ{suNDgf;M"X ^eg+S}10a]sCKEHsDML,d)\[GP2&Z`۔ViK֪} "R$S)]yp1`?7a்{b۪0qsQq[@m 15f8ghs3s✶f3@eٿ.aYjEua}=OQ׹3>7nR2w՜v3;U:sTJ+,&j%(g]Ífu|Icln"F ]nnIbϊ5}ganօ'(s;BZ9AV7˰al5댷nX5 8! D5"Z`w kK !uv&qv!lRwEuBlnN9ZȐw_Fa_Z\iMhM9w]ιF?G`HZ㍥c(>=$80̪53V߼05զڬ+t̎j@u.,Dm+|oOVB'>rS VTyBJ1cHgʙ%[t\Wr 5:ZHRmwWɱtO1W⸋WWp}=輧ab&!ܨޔ^H!QEε:*, V]|甼n "aCu_]19@I4OΥWN@U@bfLێa["wq+lt>q1ֻ~:'`*%x85Jh){\3l#hEm [od U̵V(ƐRjZKmB腐Dkx.d$Z^cua[s#>5LG0<@`Aem2[UwVGfi4<h{i+1BK80:Z^^c`v@9fPRJ19gaȹ~1L[a]gٜ뺐ұ7n0|^Z {9Ӊy4 8'n#JkgAjviǾ]0>qOϞ>}tϠø{%9طUլYqiG5~Aq峩sM [5!w8vϗ ']:g`8Uzbxlw:g}?܈C}k܀ycƖA ]l[#`+wD菥D1.%6Z .^]a}0 DgQ>0sS-- /9wQi' IDAT . a )ebv)Ef7yٺk󼔱"ZЃ.eh@\BRJ1%F< 3|2Ne/+H4k+޿ARb4[O5%0Mh<5x{7eJ.%9{uٳ]ks{cr3s4\uWﭭbSo釳]-!M)V&BȒAbx8v)Ĩb&?RrT٭#8lB`UGjÆ60뽮b{򬗶VW>ꪻ?bw@N1|޹CoZZy6XOf7/uhǝ$5rJ+w]-74ivtu0 $$Es{i9EfŒEvKd\V*Ų̛a5-^s> _OQ.(T #H9$i]@ !xݝ݊GmbzDy=Q"WJ-FW̏"f=5u.%{W9 )r.yJXaS$e Cl-uo.xC=J)R s{=7KUDXUEG Zn0_:xѿx1` @s3%3tc'9W̳/%s~Ҭ:4N^LqC<uwuՍcaܞ̹%H|Y9uYY'YMS13>m@n%ԹHمs&VZFp{fVe؈qzJLDZ/MS[+~ܘ})]7y{e"Zϭ]a47`YW‰jQC-#oS㗾;|`^aq]=~.|>թc브դF@U-֫篾zv>U.? Z}}z>sTR#A[zDʌؐq ~)Q߻>]9,:( aךz/cE"2 |dR32֖FEtu_?ﮯ>HH/YBRmuUfl9ӉޕT=+5Hv;}b׏RXUWiK}NWWpْ}c88MmTTZUeKH ]'no5~ޥD]GCHӾWW@s)a۟Nszs3zqi͕҈Qy ǰ:ykꪻ=?^HWWQ"`fB3gYE%iJIcu32YJ[}Q׹.pM{+h9ρ $`|Čgv>dV d]evgZmj9 ߇FM= NtπoRd`szϦvƫ`0q ױb!W@QM"ZZ6}kWգ$-#%88ЅCxHj }N'M<*/;v)B!\b6TU,Bu\=+o *4~ֺ?m#Ycsfb\9_+;rnqL7U2}*VZ?t". ([#@k+J]Q˿W_OS WW4w!F?r<)&sȾ[l޽F<Yac%D~ߥzTk|:FNի`\4Vk9ŋA&[j/&8%^\WWguWWw7#5DT p{D$ϟi/_8/kJAc"Axmˑn) cꮯ~ XhPT+~y$8º9כ'-s=BpRpM9l @vCU -<hڀĤR_xVqDlEw9;̀/}Jɂ \L4s\ٹeWTe4{R\Pte9RJnbߧ;̣sιs<9w-Ҝ控{no5~sJ[nBDQ'""U$JָVkz~{B+2ٳQDhs攒ԼO~{Ӛ^mf0g_qrvN9@r!H+؀0޹C~><~xYYιFLMeC]n=4zupH΋s5%\_.%=}Yb^T¥W_OMkEV{dlE_1=H)Q^]gφa=~Fտ"?; (ޟ/NBqLQ)Nt:m_8fKiɑяསxu}XrO_yD^D?Q50p)\%C1R{L{? Q=0~S :7L04ɪ: ږ]~hh"~u]J놔:}KcFJo CP9Bbo캮g{f{ψ{㑗R.pFI)C蜋]YSU [C9;Yؾ`;*JfӴ0zylSyylhC̬rnD8F7).Y6p\>%>ByU?ܸ7pz}c<|ʹ xVͪhښz/foXRXkVժ}s[w@pMV4x1;4_<~ ~(_2ZZ[ƧZ~9`i ޷tz큝E~Hb!4E6iuF1s-=qz`n=O\dZLu1{cQU.:$n E_p8k`U4aR4gu,#[hMmrdG߇q]7 v-U-faׂ~p`nZ̖'::V3wk-l[k.b1B !93o߫sZ+YMyv<evAZRrw^LT?~}݋!L`_`<*0b޴O֢~wn:?c:4v?~|q|uտ~~sl鷆jֽμq3x[eqfHjj)f?u!u7[KD޹*rVG)\+u*"'yiy_=  -oBg߾~}4qLrxJcfvNN4Dxն`H)#&WׄǯW_}I??/9_MMHMFE* s]kNLVaH]ꮯgϺ/Hg qX|?)~ skxIB]7(Ӗ=Ѳ-]ix~ߧqxu۹ chg>x~5w>< O[ _ Cw0dDgV ?po#Rߓ3YкΕ⍱} `7-7^>lx<#xOUDԠj7Asiiynl* R5m9m]Fj#ޚR xM4 )qǾod )U!CpY^ Yڪvd31שoNͯ^oǿ~T`_˿ߨb,9V"b6kc }׷ [8.ѧ]?鳔-"khXiO/_9:ךg56&;kw?3)}:@!@dQk g/o>gf C_q<ɭuoPzҜ&Sfznk;7}o ]Jt+i"Ni@u(nՕ a#%3~`pJQcth \7}+L1O8vzyB+ > ;@`LjcݶR2Gj-Z+] ecl}YW]J "D?@?P;B˫N|s:Ufk^cr6u[DlG*{cx#K5lK[_*Oy_|UfEN"^ĵƵ*y˼7Ͼ٢iw{Ex1z  TX!Esז5Ŋrxk@QoMd$ {'_Tv&cm [պ8Z`ڟ?><bU4M =ޔsY]څt!m 0!^]}?u1@(pm"C{u.FJ2_@#YK H7D>v]ιsOTQC!}_lkl5}#"O?ƾ.s1;\읕"r^K)\J&xߺng?g?/K<: (#F"V+JAZl Y, FlXT4Ֆ{ W 7(1: %#PU[ X͐V]VP܋ۃ5⒘sF] jkK3IU 0 `~WDӱZ4Mt|w=rdk XZC29o}窯XG&Wju3BP=Q(U?ʋ#r絀0Fvfyz+#z @?<|:qɜ33 $W1S9[%CNb6?_={TO$Ssz1 -3f ܈x$no:f2 Z[Υ793N'|_J%/^/ou/%vh(ΉsBT7iIǎ,;SD8v=I0J{{W`dښ5oN/Nܛ"LZ/B23y"|%\.cuWps,g?gI:9)1#k$ȨJHrd6ٮD|NNNNOOχGN<9lO~7W//小C0c1Q[π39p?~\FC.g,x1P /Sxby9o~C:4iJC1攨ʙJjyO`uѮsZȸ¡z|TS~NCJ9Sf 3RˌDG uJϖb,bjz/21Q{$QZ5XS/xԿɥP1*̌g]]??2va}y}!$ۺp_J_hLIZ) X?7 yWq4a1Dr&C`c~ 8.\4y4y!Rӿ;J0}Q !`Rf.F:VO qpz~O..rvɧ` U9IUmTH}Kާqwy}8cʙZ?\7}Q$ IJ> )<>>g΀yC*mmH<uSq9uV!0E.%)ec8a{W圩J@J.WJWJ|V}bz',9\r+ݍ^ȲR9;5jR=R8ꣾ*[,:SRLs6Dv._}y85aMSg !g=-oͥ;3"Z+q.9'G2w]0[ ?>p~6o_Ͻ[{~uvYNOQ&Rg}OO}O ('&3S5eDIVo6y|Ϟ]Ln&=uZf)9 ò:IB)FyO{@$*JÅ4ŔBO~Œ { A%p{8. BP!pJ\om:)eS(6|_&iZ,RVktZwss$Q x'a>V$/Ô #S_aX5}JRN)ѹ khԺ3~)=*`v S{bHxpF٥dBeh%">E 3Pu.jm22w"3n_ x\er U̜mΚH3nZ^`p  _0F@)Hf'RTr$.S)$`ʲaLG+ejYՁȦԧG1^[ V}̀uơsj ѥ(cZrĸ N P1V)BmJ^->ڼ@C *AUMI3?(k(]3}5:ky0su-0j@ڬ"!%,QU+ɕQBa9ca0) vX]X r!xa4IPIW=nyݩ5 k),{Ik} B"9,`ť6oo~MPi"RQ*+R1"LDhM9GԲQ FZ)1skpɾ{j/ uR)II +f A:99q1ge\eҲi )/K_YjwrQWWJj*I''n{7M?>WW#Ѫw*SbaCH㘼8%}uKRTQJ)eUyS!FB'0 Qk'Eϻ.AE/sߓHc4ޫ:xϞw]mND2R<{eYRJͲ,Y>oE똴 JD&>%K%c'}!W@l-MD9c ߇>\\y8FJI"B(8~C lݕ6D}V)J"w)O0$`H (KTJ 1na9T:%N DJn #%!MfⲸ.9=u9'202HAJ%x8ĈUJ ]):V{c>c4iⲬaV3~J @DTzU̙ZJIPoX\O3 8ns9+aQWik )dU "{ȵ۶"R,]?k,Xu]t9c)}3gt) <'˔b]6K!e!1Y\szjun6K䜍єasΥJQ!ʲ\)d!R+TjݓRJ*#2P)&1=h  * (vqn۸߇iC*r'{yS,l$&1zRD(9s=doJ8 d|8!vp}8DcT:Jk!qJyYT)-K\cyNNm6/2y8iӔ)y_T,eYR2oւ㭃iY4aέjSQUYc\)X4y&y_zD,*5hR^$򕂮D@cr>ľ^wZHPlRVΌRY7T/oE).Q3'XƲm b̥~lGZD- vàZҚUZ?訵rNo%T h\RbyN5mV*佨OChS,Zg4hk e OCH9_u +)^墼μ 4Hf)Lb@Z!j}8}6!NOUJ~Yflfcov;ۅ鰗R>PgJj/>P &k& X\J'Wǥ03BL# jŋex3jPJ*FA†6nٛ֊SY>,ӬzYL+)A$?w(e6̳\۸,4ςtyYR˖zۃYGHjqiOfޜf# u#ks)̳͒ؑ|D )B^`*NݦE,E7g wo%^#CZ #U.lM)ҷ/9kyQ(Rm֬9KVd\HT\{ԏ?ƢJȘ,zqz:ΰ 76PJbeIBlܲd ؓ= .=%fc6q4eAVHŘz$w,K6B1a18sΩؾOιy%X68%okZ0f|oKTRjR 5fcHƒkOq^Qu1J~v_J)"kֽ|2TRbaCp_ P{N)+P#L0)y/O9á,G.,JR5ZPk{dKR?I>XȬYJ-)=3IyY3˴rkbe+78m|ٗY4J1luD:<ϹFlqZt(E{h1.KN)B8&iMy!bEQ\3u2-DFʼ3sDt)!u2 sњsNDk6 辧O1~{)54M"e}KXcI-#M&d< \J@k9ǘ)m7--\~!i3c9;" s)T\6sG?{gIeyH[zl"QZ I9ʶRO\䶵KrcݣկTs$AE)XB8,9 |F?TDyi[_oCY"ɲ,0ڄ[{塚lC1FT*ZR%Ocd3_;6 m(Mkۺ,433jmKID(1u,/<ĕzBȍ:UsW{ө\mԦٮ=S9d[%lrgJɥdcQΕ#@MK$Gu:Er@0Gu\b2sﭵoKIkq#5~W]>1K3ɇTۂ9s}r3`JQ1LS"7sS7}F" uV]3n%sV:GGv7zu߷cZ`l%!5EVv2-G|8f+쨊ߕ6[T G61Tt frZ9҆Z\=%@qsn>&GQ)<&Hji,;ֲ19(#LOr7oDkUkO[+צi˜eu9 f_AgcI!G @xmS[m&brmƱ(5b̕СoL-ϐ@h82Gjae-,K΍"Y %npDCOFWܼ+}R=9%!_Tb)A :L_owC*v]D2CZaX~m^uLIJR?] Yk-,?U=u'בѵRukڎ07Rt~C(┓rXwg粵.'7nKWpR[ w4JXt2P(E[X3& }OZgkx9 4Ƽ,MVՑM)#zi`})ӲLRk5)%KV-d1Z؆Q41kgwnnXyY[HhL.T Ŭsf}o x"Ԝ늟\ G̖V:,I}OWVvrӐ0NIDATô^%PaB]RԚ-?w*o8nC#q:ǿ>h&^֪c]$IHUU34 f$tpf|-ˌ@_I'KvhXcz5 |chE`QZa1v(`ְ6[kPJY$gGrc-P'e u@ *dx֘uEl1ʴ }x&7dUB:de_~qY:ĵpW?^m??@PieJ:Pp[H6|X-lFc kzN5`ã"}U uu> v[SysvBͳW;+fXJA3^q#Zm Um.+)Q{햊JFЙ!hcQOu5J B>D\ĸ݋;K:2u *ϭ~}1B*<t>8sF0m zQ+z?|<-.`H>kUiX˭| +AxYVoNx>;InIENDB`lbreakout2-2.6.5/client/gfx/buttons.png0000664000175000017500000000662612140767213015004 00000000000000PNG  IHDRb~gAMA aPLTE     ~rz  maVVVj2ZN~z">RNbv*zvF>UTfRjb[Tf^VN;6NJ62 >:/q+H@zzvftusZUuzs߾ƺsp>7a.+>LInhbv63);9U$<$#6".a]5J41چD@b0(i^Y42H&"#0*g)#=xv1j6.V**6mj~c+&I*"5  ZWgRNzb\ 32;MKX IGT  & EAOﲪ}6bKGDH pHYs htIME ^d IDATxWXW",0+!$[Z%I$`7TRCb !9%1p(141GGJ6+3n,/s}λp9t1Dz%rN[W㵘0`UD8p"u8::5=x`.[谇Y"hk32k>l@`"Qv~cǧߙ~w¤1Ākym{幀/M-#)|:~fDbx;&R4{Gv_ $Oۭ8<33UQ;/js΀/\Қ>vROۼAyvq{n}'D,Ѣ`b!Oȧu-r+9k2eL'>E: _v+Ԫp;yfӊžT_G+%0uLϟ8yaO[_ga/\gӹP7.oBϦa,{y@dIIdZB^o X\j HWo ^t 6/#¨jipŰ2U L1 ^3Gf[ϹשWv:x-`4/ 9j: 1ŕz];"v}c\ ?9{k/oln^4fn/=|Zx4l/e Ng~5Ce*xbܩ$˜H;"VyMJ݋DyXҋequ-=`v o<pz S9 ik% s4pQA| ubM }`<3 j|bň ڽѣʕiU$LR5 HߓP.Ώ ]_L-kKW77776_^p@|+sO^s،z,}٢r?bF YJqsw.$d) g1q쥢/Di<|i|td0/Lvt2Ϗ >~z%)J&~1J%2٣*1gSe\xjwp^ֶ`k>7;7[wwؕMxuz.nqkk@9pM-j7-· dD)qK {DR&>TXim}K&mdYq"Ab [ʫB h`c0rHd; UUFʑJ{;ajdqEF"P5N0^/o/~n/ blƒ WO=_jp8*JHqZO*Lu"AJ'5eR=xkMeDVhaH$ (a9<Ү8^IN'%{`D:eC_7i&D1:GEy_93DoQTjZ~{{;eCiHS҃qrK^,>E=<|i@iMtU \ȓ)s6IW%2hJ'`@t/#/bȪG2do_FF"x<%e psj"Ɛj=NԪ<Q*l߫Ҏj~rO"{xj#i߷(CoKZ6i3|ثmN{d2ؗH (ʬrN !NS T"Ʉ)kQͫccaSpP2h >oSvh+{&iGg`==xZc͂ߪT>L4s֎fOO}W&ȋ(Öy&q1rMyG1n(Xrڮ@ճAoPecL8!E!|( %!ɾ0H-SK'\ (B2EWAWL1WipsU3D=E&ƮtV0,*OsGD3 L:wӵ\B^LE5;CQO5 GZݶ @Lƪ J¡tNP(ЕgU .M&Y$N.cc(b^BH~D i N Q&pM"!m6o>4 *S!8RPs+ {d`zWfX =LstFlQs)Sp>"U[:# +ڬ/VM⟟}ThyA?'ҟE93DO[%Y:DsLfʆxۣJJ$?/R {흫g7t"eSf(b2LwP0pz Dxl1Ҏ 5`Ц`a/{uS W!G{`xe-_Z2ɷH~M7`z(9[}-sn>u=sY7ex(278hڀî"_ @WȺ2ŏ*0!7:!46>p˼N7BRRZrvBBBbbjffj"&*NNN*.2nnrBFJҪzz26:~~JNRJNZjjrRVZRVbBFRVV^rrzZ^jNNV^^fݞbfrFFN&&.rrjnz>>>꒒FFR**.**2zzRR^..6ZZf""&& vvz""*66>bbn:>JJJVjjv22:Ͼ把"VVbBBNNNZffnffr䖖nn~^^j66:vv>>J::Frr~66B➞..:~~zz22>ffvjjnnvՎnnzVVfႂٶ..2 zz^^o沲ƾ"RRbZZjbbrvv~jj{vv򞞧vv ::>&&*ڂ::B¦~~rr~~>>BBBFꮮ>>Fzz𮮴vv~~nnΆffBBJҦVVsò|K2QbKGDH pHYs  d_tIME ( ~ : IDATx؝'ӕVY x2j+1,iEqCTWn7d)w%M+цD27{P%(v?L()&f); `!?}^Y3ʌz}O[,;Ġ,Roʋ䕚xWxDCp|o*S;T}$Tx #KoRw'k4L$x^hFhy4MMؿ/r8vv! @jDSUMn{yِ9IN#p! 8]Td&' L8PRT/MZ4vGȎAM.+F58XJ(CF`WU]* W5M m;tכ- ۀFv}x7 ;xo~׾Pk\l|0H\MߺQ?v|iq/ơǶK0=*%Q'ضE8 -'z'ӡܸvi#?vJPfHl6d I;wHig!8[ "^S&\N߬->U ÄkW*n7f87e`}f!UtaJ"=\AdOZwEQUE\w/EjHw~Ig>C)71Yy֘h|3n#!! ܸs> K>-g/l'XC1܎Fq+[#9-'C zLvMxµ;jH5+Qh+ 5xol@w̶ "J*FS^nV,0 eLPQ2zIMY>"pٹ2HbYa"&h `4xp\5y25Fc9A[ Հ2!{hmYvnږ:FcGҹ־˲ h v;_4%~#!XjG`"bpgU"?׊@S  [RTt.@EQ^VM&4 E xْD*/.%S8*/z$8c ;wn4à4Zz:n"8 $(3$A\jp!X9T9TJNJV+@LLuEY $lՃ"ӄUXZ3^!53, `x4MG]Do+T:>jFuyr\J<ȑ2z 6E5t4tInJDKDZN La|u:t'n!>hzIwS$8\mi$KSSRiG9#[Jb q~xTb*LwL 2ۓcn1.,#j(υ8綋 8ؑ!džöB:QnSM3!\ELX#FcP+ۑyƋWT-HS5HvS#"Z+t+9'epPCe}#8H,P#鯚H EZpUҘo?+*b2k%@$P` pP v t4Ihm!bc_]0#ە!)%qmiKFdj!`R9SL {`*<舶?!X RT>U,M f(:Y["XGj JUF!&z'`C}?.hVLHu@ ?m=_fU4 X d!ϴ9?h6{fXįCw/Iݓ[)dp(l4ɨPOٝܞ/CBF#Av\WU#o| 28Uyy6IwZ)7LEq\3!TB5fꮪ$l"EFHGRReuf`ȹkxPe'Z]I*D">ɪ[h&'' d.$ێyBDz(: q@Y"SQ@dT BT-;ڽDTkBf3A|4S4Mk*jz7yKmNj'R6xhU5MHl0߂çtے`2Jxt~{H֐x 4 #ķJ DTCXHRD5)\,"qDh:>tA$! rn͢6h^[YZl6nSTv##dQZ7=& 0w7#x帿X)37z7+A]-Ԃ \Ud U@gk'9UUvmHSn4iIƋ;=$a*#;sלEP.k( #p:9 Fe1e[3 Lr>Y[k }Џ>fL-H+t6,C{Kpd|ba:i3 ߼Pap G4@MZ_@!փJSW,eY뺿2FwRdw8O/P$E(?R? 8E$).w$.hQԐ$ƹeRkhܡPphbIyQO U *"46Y^D Ɇ .BВ3|Xh+t;ݽU3q@aΥAEn'h0S-- aFl&fs Ynkur{|\C[`HFCM(#ZU,jN HA:7Dzg/[!'VT. råvSxpeC t]Q¯A<\sV"i [Tv TǨ`(hجy zKUq Aihz 3 -"+t3Vf!Ģb鰱)A)wh5dr#EC8 |`DtptɧM 9&EaXhﵥ0k CA NHqW:!+%)0 PjYB A-wbۦe e}jΆ--̈́gA-8Ǡ E exרaho{lYRqJ0ݓ8A\S LKRx!92h@rMJ-٘?ǁ0 sn1hq 8oݧ83(\1xp4TLHVj(1Ia/q"a&g|*B˩ rïYi TCMݼxاIJfovC~}oFT48 28x"ű#Bcƈ ;CFW{ U .*— 鲑^h_+|y!D!ֻA*;T*ɝnW{iy\K e#0Pt|yfѐPLQfڢMD!b,q[>{@גRAW3/mKIu[b4+Fl!IJ [H1Z:1Byi܍3aRS'&#FfȺ, gD1٤mo%9h5N‡E YfX0 j.8,8+̵W:.+ qs"'9^CFJ3BU5LEeSW\ɇ7ĂU!3$^@\̇G>Z,d9-?el*^!DV. ;g !N;?ݑˮMELۍ1ؓtɂ9uKj U{%4akEdhʸQd_¿Z$s`ZNXqzH̋.{3qGDd ynw\nKB&b'mqq4W+6D I*?k1DJ@UmHQ*܂'F8+R&82YSyͿr,Rټ@!۾BK+Gl ? U*Qt5F5D6MXIK¢WlԨrCG؞V2VMK" ϶eſ[Rjdx^8|<ڝy)݋SNgq'h.+x5`]J)`ܐx#;|8ONSzDmZ;;ݹȒ1\b|.p6TLdolziCj5wOې9(QJxw\ӜWM]k^]h]1R)T{lj'\'*ǵol&YdN0x" U6CJ9Ew2[7j騹 A 4Ē,GTGd +MEcno&hέ]\pfqgg_]T=.9˳4e+p}#=kH[wl{l~)#eWB@:laQ!EᩂWc&I2 i&뾕(M/Ej>kV|jn(gD3^tBK5s. ݿ.Ki+t6..Q8JzUke6.!MnFdÌcMYĆ3Y*5cOPh< N/dS Mq^ Ո 1F!@qd|4 ) Px!?M`kSrxObNCRn=+o3)g{a13ؐj: ۰eL킡'wF#؛J H IDATdsV+x/ yULU i*WjbbW>lB4MYC5[ǦL~{lMJKaU g:$W#3dS@lV8^ƶBrԋy3W ;tdDArNsO6K.ۆ;J ?HS`G $dX[Ϸ{oM.<#jaG2ǂCBum(3Tr.$e6peO.Pu䊈Zk&@/~ū+mvS LrKj4m+AHҞ:e;Aho sC`~8X6f46i* 4K8m*;AJF#n`0)m!`gwq;x{{{[8+Hlɱ3$n켷LÑyw0+F#"|,c./ےHU̎TuYM4w߳XũiY)&CVh+tetl6Ef3lUR!x5<Ne6*vYY:xݫU<[g1ض. {EP\۰x,6BInaH䑁>5s3As]q*pvKۗgZ@;>G{ln=O~ygܖ8m›Aγx π˙{y fIB?rʌfD.׬UPu!G4seZJt7j0HZ%#cR 4uؑ goBW*|7r=\w 7̶iE;flʲV*IO@6'L$֘bTG!?;pOXyCt6n{tBAʑQ>RUCIE,v$N*-t ?|,l5"6NjI;ciV=fou"܃lV _o\hRW>[vc/+0kZ'M 8Z$4H*c ]YF@%3tP1 *o@8o!8)qYܤz1{owp:og.YqRQ*I.zr%.8G Vt22ܒAeY"2glohlUfo&j+R,'4FEQ4s&  )dc4V^k0XwOrhZRE5+P*wv$M}G\!1R5]rPHAZuG͵j곁ZjE tlo(q7L\ A&ޡ(#C;@h,Վ3C6D9\Rq!;FC܁2(eC-8E@lS:#q6; Y+tr ۔OC5`gW lĬ'̐t}2ʝud{t Ja߼`EԈlo)C>2_#y9"R_M;vwpǃ{7^o>?7o>~k7wpy_ׯ۷o߸7~~}po_g7ݸq<ݷ~7n|5>޽ϯ>xm|C;fWn{{Ppnqh ̚_~1>e|ppǚrAp0z -?mk}k].n؉~}9{}5 Hpp IebE`l&ɠh5skY4[TLw-olG5϶ӦRU3}}e?4k_nܻ8Y ;6~_Ƈ^Ckh߼cq=\,ܾn<~7ͯ*`upͯ'׮}߸7o|b&{q7o>ݜ߸n>߃inܾun6?`|Kqm>&޻,|s`Z笹!{߻}e_/LM=x_"y+=Ri c`h4u{\h`:*[flI$T YnA&ssBRB U@ٺ@\kPkW{w6wm`ʭW^:~g艫#1:!U7οPpEonw|w=2o#z=ֻ9?o<7?߻_7oow޻ya7qλ2٭ ,|]Y~|7ư\A+!u,= Xbq͎cq}`b~nϿRn&T+Q&mEcC4S L@$k\U &2Ek lCMjMx)u5B nDt8y=M| ,ƢьPĤy< shfls 屙fI8->զ@P i<9:ɓ0#2-˧㳝qyvkD_.\eiO?? /'e9I8M/ӴMQn7xoW JЌGr$@N|lW'1ڋ6&qE9^bFFEb#Cׅ"S6<oON|8˧Gr=M,IrB2ƺVǑDba@ YfУI݊gvo`X.eY$<25W ~CAfZp܎}nZ$!#bGf fGئ;IVxŊ(%+ɥ=(*;2`Li5eӼ62OG8D?<9VYnа7Q4??O>˟Eӗ˳n*pC.eq]^/0$>opr1yC0+򬡓kQ$CnW)B_=(.bj 3.ϳxIop\kE2; qZG<):1 &lj4;ls#l#弗"tYEFhB|8F;iLQOG]t8ꂻGq7?kEHX* &agwx9%z=k9&CŨ{9^N;e^&)ٵ(HGӌO9qgYlI&rJølX'ǙN'Q>xٓ8 ޠ(>̏YqZ^Mu BIJF[UEEO$^Cp17(I[͔4ʞÃ~= !V+u+bsvwI0[F#xHiyHA= 2s_m|@=tyx)9sGiN>?~+9 =_=DRr,ӴȤ;CyɣiL:{g?Sd,crWygry,[ch;.uavƝ,'KrIJ,ʐzITu,ݤej?lEm.:Ԯ:{a0_H#CF2S+.p JU[,:4=C%Iq{Z;@!0jUeZuGSV[*cUu37#{,p ^)7=PpB.Y'FQ uW> oBsXAe,q@ v*>FBpIKNO`;V[!RZu/Z\(˳8-!0th8ZBʍGxZ^z+5`ATȣ>d}(y"*kLx$a$W1z 75HQB kl? Oz)ft-@4Nc\szNpifE>-~<[vN_\"a$q g/b>#cn6,ѷ躐#J!gCtIy9K;_و4d!Y jmo>99ɉB rt eH@5ec(_t>orƫ!n.vl WKIVZB4m %8[('5]Z,5w/'XT_U#ٛU6OP9x3tcSD 0N1tF6|r#;Af AGOHi)&\t2-!TG>e@ed[~ϖ' dd{xXZ' "]^>xe4ˤ|шub!:w aܙwE `=b4G;`N608{~l|j"uF2/,@bt듯 YT;dn/[c2b˰ 5B R&2;5o5jk'$R*QV]KBM>Z٢>3 WM>dR;,+ du 2BITeyr1&YIFxZ#ñdR0K VhSpWY}D]E9m Z>N"{oi4==]N{SD'GpL'2Fq9d1,tytXGiˣpgzC6>sBL/`gst}Ĩi wFN@ӥ0Ō='N2r)_İt˰&O K//4X$ nMI3X#CXl''u+*$H4kv0\X=U}n6/?GEUi9. "7oms>Aٯݫ7_y# pܿC:,) O:j˧e:hOLJGJr$;.O'tr9-AE<]^.4.NGӳnKr^p`If3{|WpAI}O {Iˆdؙ!],]pLߊ@ل pwG'~[8%IBgӧBlXD#0=?sQ7>Jila:{27j5Jn@SBY,x8%zkSٶ+Kc丹N3f(*hžv*Jl_? `O"\I<!pw^?7w~|[{vZ$!z>G}}흯k?;?9\~POOGin{X]BUx9YDjmM,\~,@plY/'ekhMaLr|x=2`w„n/O,IXqXQ_ϏW;`lY5 x0Ư75mzW}|ن @iaBVtyFr(0Xf#GGIIdGa}g 5Cݣ dg!'l7/bv3sՌEW1+MeU~ "!F11PRU֦lKLkW{[sD=h6Y NF1 n!be o{~ /͚"dƬ\%}b:l󫲣?*󸚞g3޾7 o?T" vp|6{,Kpe{J Y "]b$=l=ߟ`ݣyV&HMOs#ˣMb2tK{'uN&v 44`'>T0`㭭Y+~{ӣYX 3~+|BrvFzsWtyJjYAɼ η'.˼ IDATK6_>Oۣ/Fl]?q2qT+>WeI;+U[}wɑ]k3¯jVJ}¶T@ǻ}ɚ<+6Eb<4r]+*P$;h9]6_퉾Ο]gWzˤ>WF{Ӹ#]{󳷾oNJ}\\x[= T>OCcplB3%GCxq|XE:9\/Ǻ Gt\.@4W6H>&KwHv\6{:{H.H$(T-B:wQ;gr4y??z{w{GߞLFO#FoC7sVsw^5*'ER"=Cҫ]Dv|x8MG3Pexd9]|W.g _s83s-%̥LfOi#$~EEB4^,J*~e^Viք8Mle}/cFb u>ʁjYoyVE7hL< "'6f PL ҭwcEvio'ڷÞj;[oV)Ϣ"q7uɲh:)T۴LG)QHۧ\@˽)E\B(@a޳3bgl8$1F<#jl!]qF$A˂|fdk̓{ݿ/VoH0h@ȆAG ]Us\:g~hw>{(5]05'\Qa9na4i*$ rSKQ ,ԯ*y}lmiFX+msQy 16bt'ZBMi%F)m̜9 A!}{|S PoOE@=X,lu Y.g݌_kW6.#Ij:a A/\$p4ϝj #c]QDt) ֗lɑ"¾N3ПB4Ls3xap]ձN$OX'wqU: DB) GIѸъƼO`HSY6z,st iiRcVS0幅П[.G(zX-:LVDhm+ 6rot.80o:w0`_&gm"6 i18*~)Jh 6b}WyJfR3Jd˲G$^ N!UJA֥%A >Oרflx_ %j!?XeϔsOg]ď/J-\?YΧt`;8%-z!c2Uuw֍ XY/EjkafrnZY*ϝ邮T|-YJxİjw/ΗbϞN'33A!q)k\J޾wvlrXlbu:~UEN$.ᱍknQN6Է߻.tT&I0<,RUg |su8Kz~Bf!4CkG m#Gj&ۺ~^ϵ,Ψ̅ssrÝWx!4<G۹=6rmf5*/`QN'JGDJTM)vv,X&[i$tG~Xz{ Hŕ=_OH{g]h@lEΖl[Yw/nAt"bUdEKRVۏ/\ٙ#V=}n2`{NSyEW^B %)WmoSo9?d҃RI1VJS3j|ZszL:LbSR! BIM|E;8䥨!ZI# V!\:UK1eo\V(8 najVYy]#_ /<ԧ=$6T[XȈڪR!Z6geF(g9Ze_e L#oDOKVET(`ZvYFu 6 %fwcj=i'aY941OȻS^6ޚ֦k 0> njr8^T5Cق'ۦVia[22\EVhq>ֳTL `ݯ:7w-TAysZ6粩$˧TICTsQV3 "韰E\9Y'N tujWQ~BD,3ёq4ܡ{k¤LQInv\b]U"lTqeW4 fAy!$gԭU`cTM0_Xb7Ђ^68抵2V&&ked^L;o |qn-/ߖGvexw^[|t«ݬY?X8S 2SR)P^zC $ &Y(&sBVPЩP\9 < 5vJDdh=QǺB.I#ٰ0?кhoLk/Ʀ*Ek%1T<з>Ej;z;~{|#\*$Bm,G3_JBϱ"@*M6ȰlKdj'la[Ji6)- 朗0FwlQ6*g/@^6:b^GPG:k7?ܞ|}e˝nrׄ mD,iOG smm͵h*]LBaXP2rmn?|8TF5L>l/ùU(I% +cNx9_W!>&)+) B9Z(N/q'@AHS)æ<<b@|HH"jd]*|DpVD֨5WQNBIoPQPl5+ #K`7={=^탗enڨsleNY.ͧd~64Mcɍ|b$Imd2< dϊjUIRtK>/ոY-G%'X1AOTl) |07tM- 5z"6Q?tNDQ/4=. =[Xf\nkp ԹBOJх|4g6$9ʨ;xl]6L')]7&9}9н*q)L)vl^T'INz qK17Lt)7eJg؞doB ު.NwbV e ,W^[ZNZ{h[~hl*_ג(lhU*9pJ-w 5"l@(^lЩy/J*t<]#к<&",ԃuuU/x^ /:q sO0ٹ X4K' 0s—d9辝>ہݩStM& hvOMKWd#̑?Q:T|Yn\dT9r.nmxvR$^<ո (~ߜ]Ոl*orpOnk,_{V"mݕ* Fed ?/f ےh;~xSM'+۽ .qt2KM*\O;ݻdSIӽ h?q4)Kt1U9!H]}ei4(Hf3iBQk=tXIlݬ‘s#[|y4 YmB'Tuʃ{[m]p*16䜼ZMVhu\E}vQciŒ3Ƌ_9vveOp#r-Qm /l b嵵9 ("ԭ m&&j=l/X+ P_]~ea \zEEt=|CMC|+W޲զ*B~YJ7iSrurz$jMCpb>蝚dYP; h QM谮Eoxc݀Jxۭu%&RRQZ+ΫRizoU2*3zя7nj#@&J֭+8 q?>RZ Z\LͲt'ѳI"Onp9ҩf*?t3a"#O#)>gtR@a⍣gƔ K:FGbxm\E8=ò@)g/I$,ej;~ 8-)W%^x)1 |P hhEǷBp8p(B( SUXmFvl^ThՋZ{2lFe q hE4*\5Q@BUcsd$]wb ;a o^~CY4!1 Ϩ%jc?.9Q>^ߜ@(TCm  fFȺѺhºtrX{'N'߭gg, ,%OaKdۮM,P޻1+Qn9sξIP6qPj_u^s,|[ }m]D8Qt/o[Aj{:yǮ)[7mmaޱq覭Ngs_ߺ ]$F.U.쐻J[z|dۜ)uoKVֿ|+VRDBAS0DyHHq#"d4 SfaiG3m,r DVWWu_8{KGI@,ڥ[J!!&t;U\z1[p|9x -{sAF& Kf˵(hD^t ]ٹ_GĭF 4[Z_} q+T)t^QX "'G7t N4Q73 V=}Gkllrt^xxq`SpR _r!7צ]JJSW2*zeOkګz ʛ}]>6w,|Ͼf uֵnxoҙ?4C͵[TL[[;kONu_rg^ IDATv&IͱΦY@K4K| @Gn6LBe_DdKaf̓]q줹t:t\B+0gGD6JܝIŁYpnKhf =ck㻷{zl1U_YE+5800U@C[٦+yரbP)>;+>n[Z!k4hp꣋SKg6XJ\ȅ"*2 eN|oJ76V[__iJOɺ_H- S}c~r e^ SVׯ oDG8KGq)p}rj GKLqg~WߕdWFv,! 0ߞqt8tIQi~@㙙tead{AI'd֤|S OKDzy!rݝdlai L61ԮB MG20vMRUVLNt \biw-ɵ1T#n/9* ô&,⑋GZnxjM+jWɸLA/A9[.`DXF"VBꞮM,_ѽ[NMelK{ e|h^qMɖ=9SI.Gg(GxjY)2:^;hhNJj*Nܘn\. SrY/ xQX~{gIJqĵlko~~~zwgr|]~JlL݂zػ(jRtǭ)_Xw.޹ю*\ [$50[N{?T(0W7Y^&7;WQKwލ_.b5zTO9;FQTw's,Kp*tsQ낰` ӃK A~qDQex{b2d {r_n/! r,\9,?ӟ4gLf`1DÒ 栖)v&iƭf3xqnn> ܽs9.41NeGc'O[hrXPGp?T\wNP;(;{0ԉKX"^N5MޤBUR1Žo"L@Nx}[:mVt۞fv@eu "qp.}yvg'ID eEa9m/_z0SZZo,=LٜKmA) ÿ1E:3ICZ-6@OSa 8Fi?hvaUVr$' \^~u}8лqⴃX^\{T1Kњ__wuya X,Y%H޳$(HM`z R+:".={r,4m43rg;!:e{VuxyۊnLM>#(ӳ{R@u2GKkbꕏ1Zߦw!x}JtʾLQ 3mԧ%O7W+aTyyyB>"T2svvUM1k+7<㟷+p)P#=-?#sVŷ5;ws6:x'.Q??Yn6i)U[P\^LRdo7$P2GL352Du#c=m{5N;J[:B؍,s&sD]t֕^.8.%w3Qcs ?(\kjH jECÇk_޺ԬĜ_[;$-N&n4H!.2l3xfQӎSwmޤ8'̥ӧsxk8(HN~D[mhH(몰3YojK H[,4c[`"آhدĐw%atX勲ap2!NSb=-pvӶ67jaYwP 3 Q^x@ E,sB;鞱߳.Rri+69ox[#fcnz"3Q< 8CR&CupZ 7 ÏZ?;3&SJIr|>óyEٝqH4?c&vkIWSi8iYcVBf-+]}T,Ad*Q>ЋMn{b/N^iG1U4؞i,^|aJMI)5IFku0Ո5ߊ(YOӾ[1᥽:sͶy(2ex6s8أZ\pϗSǎ3 ̙z}-^N숚BH_XPH o,7$h(y=Yb-ԻJrAG& )C+%S>h}6@[u8' }5{j5z`6Qc،xrcx ƥNO%½o@Vnd`UjϏ)Ժ8uB{2E 8Ķ_;v΅:G,P7 ,\3!-6or/+%wNQp@X)Wͤrj:J |`B>F̙|./(5 H$wcz}ʳX.mzz3۠)v3rp_S xnqcq76bu9e'tNwoJ2l0,a3(V.r'PO}V(0Sqm1%֨w'oz+qQ\k Z']KFY}[ `mT_ ދ ^DIF>VGkvE&R, !r&`8lRz(|I|eS##,]fH$Y}ҷF|ELe TH4$ZNļ_(ԛ.j[~OtƏDS5bMtOgNw (fŔX[EMY%Du=OCjML^۝Y?7WA'W^jXMKH'cr,*w:W{Y~[?9ܘBTe8ߋ2zc^S ʛe dghX ;5sw«,js>Wl;+EjBK&Yz'C`)'*us}%3=ݰ|p잯u{\F0ճW"V Xv˧^ztй ;%J*'f[-1؋GS|An;LqV0ݫ^zy {dk.+9 _ͥT+o/G8]$)e)9K$@ZTQRR3,ղD>)=l*وs1D1A.eRºkJw40qgVyM|qS=>;=JcDoˋohlk(C^kQCXmM;UxZ;Zhۆ&e˗XV[: (LRߴD#+vf{"̄/;77N˵rhM)X`w/fwym"YXwޠ+Ve[C>'D3&w[`ʚ#٬ͷq=1DK(j pQGiJ_))<T4gp׺GI JX_DY~w=:l.lfY.Ł&, 1(48drl5oʉ\RuӬ'o&8ɉ,'r:{>V:O6LjMgMCW(Dk_vcC*"kļ?09 "Ellj՝_ ٙ&YI%ӌr]6ˎ϶g{Na]>c.Y:nQfo6vZX|Ϟkz͹xh37>:iznE+;jxµd e8H c)cӊ Zy=?L\*K4]T债<.`$8-Ksro L5OƷ!&\Dx9JT7bzKf,v'ۺM8_+Cs`*N\Z,91„A"uAZ%Sڌű"h@a k;/yx~ ۆ& d ʒDVѝe~><7'=FT ?#?15( ԺB97}(3ěGᱽnV~q׿}Ћ&Ԙ:d&a%U(mVPV62IFs}2H9gBhԯi&Dêd!D:L75qM( FU.xd4։$ЍN@wF*N ؔa]POS߻MwT>n`GΞaX4Ax}Us`æ^] ?tx'[խZak?[vΧ#:0SlJ\V>('.p\:=Ӡ‚tJa9đLL*Y:*7L: .6sxSԤl>q7s7}T6Iq; Q6ODWTvS%UX*w ݤd=ɑ3g6FS3%״95v.{Ӡ]WtƦ{:gNe{E6dF̎ݏ6Ԝ>αF ~F4[bd yjMzymԚLe|/Sy]6`zL`(\xys%rNY^q|TQ8KR3۠"- `(7iȖm=u6}֯M7bV4VI[w]* 3 Xԥ 8 :D]s[2_*L͖2c.ͽ!K_Tv '4Yms۠^ p~$O_Q5~[G09dZ86Te-m%Kwg[DLQy5JvgMYyx $oyMo> v̟`m6Y|S'/S :ZJ~kԍ/U*-fҵ=l| gp2a9YU0ǒӵW^x9c "Upk2n.GSBצ{Ѵ:(W^vѩԤB0`=ۂ9RtN+ͳIjҜgRܤGФ?zbo#s~}\TtɃOQ$.^Uu8Hx`]pol9uO pw0+swY}wh?;v=ⳋ**!repãߓϦynUAm2˲fL&M:|*f'qCf|};ƷjTH,kƟ2KG^&8tK[kK iQtHwC 4TƭҬ(oe,yIiN5T fw;6aALJ]H:R&5o[8V^_Xwv5Kw-V3Vr\V˦}ͧ -&S](_ڗ(z LQK CexE0NjW8ަ4aɡq@€UN`1 1mk1'I'|$Jћ㋣b;eYUk)%)tN{HrUuGMܠd54WkUEDlǹ&'fFj[^+mtz=I礓}yL֍+YфAsLJ)قѰbɏZ9dԒ[Rl1XqIFL-rMVTu浾/ 1)8ޏUd@s qag?gs3[{S+ -mIbD%O=aW 8^Y߃W*2.`@8 XB39e ϨxHA)9?T=ǡ)\ǩ_ڰ-ưe>c`딊ʖ(sMmnAq([x3ܹ "; +޽޵X}*Ŕ:4Ը^K3:۶oobD)ƻT @.E菚P'XFk/IH}r -P"/A0'&ld>o#q k2? Ѧ@ۍ:24`zxEc8CCsclaeU!XXJSS];zwhh'h iZqe$h}qY Rzfn hT(b c~H`I{8P7`xJ0Cm+F>11~ex:7'N](4WdIo 'ҐmOB4Ez IJp_P1Փ}suC`mXޖ =xpkk) |CnXƗ(R iMVNdaڤQ٦E!ɯ|jyu= O>$? fkR$PMiJ3LzUGr8nMA%Y*;ܷ\ ~h9|Rv `(oyOI "(fl*No|ZU6rzr[cqkk%Iڅ^}D(iT4lbTh«>%DL Hx4F1fb>D^MB y < TJE*\G"]U2 8&RӠ./\DgE ֽ\^DW2+UPm⦠Pu<3_b(Rr'gdT$[;Z5ѶE za> `Z@fZ8gʊ~]vY*<ú]Gw2') W@i@puq>LhQxپƐAo_/)\{e#mYQd8PV S/0 e ܡL[P Z$Oۄ˿+9*f$'4#jZoJh%J <$vhg> dWm]BX<B8d`Ì=Rd b<\s-xPw…a(+8^ qӬH8 ^$G=C]ޛErvg'!O20s˂όԨhQ*@GyAŤ٘_roGwB)4eŠm1@ R ǐ 'ap,r,1]ߞ'yS }#af8J4LpQ|]?FV+ou3t`bqJCR%& C4 {YTJۚoX)aueO.xfpd[!d<`Plp]<4yT|J{ɸkmz o$eF0 5[[. mԩMUU?FI4L3Q*t lIt@XPۆ7^ QQ/ϾըP.$ZjgH( ?oj1E+xf 2Prhj[!$YPŮ׽?zҷzm+6@|y)UVEy<|66EaY$pΠ#YiA+Jaia^Jn.^N5T޵U5}嵢-8Ph1)NlUW +.prY]WI&h̽?TPxQs7TExylۧiĮ ylp4RGF=bJo‹֥%3xx9:zհۖ$adBl!|eH5˾.x wz8&L_CImhH9ݾ$ v*X{*`(V扪?y aKAI3`*bѭT7OQlcR8V^4) ^XVo (ǂ2M=:Zm>ł{0ݓ,YKbO@fUk׎Q0U7QkxJ B=( *m ( 6b]mL" Y[GJ@j5[]G< rM,2R./7ܘo@);*259gOtB.@8ժvw}\͛+8_,t>@C zϓ$F}0RZ훂oݢc)o7Q N=f4N{q o]ᔏw;;.澷g cیXkvҩT*0t7c&az L q͋C)"XP3#T&SbB]h$'9Ȳy!B d0` J&Z3A4J1?j{>@@37S%hD[oʔ1͌<GLÛQBOzd۬@UDZ tgL$H#Gݧ^.% m{}uaPc&~k<ǠD~ lS^y6,Yn6<)ތEN"񜩖eǖ)ʍ fxSa= ۺ7'"3h^YLj0 S4YRiM>&5ܕ7JX-_V1MEVJaoɬ7T8y8m|@r,bWOí iMO ӫwː-3m~^=MBDVh$BS!aY+.y0Q3xdyXS-@D3|8D<4DKcFp֌',v--/ TU2ZbYeh/f2ԅmDVJo9.=:0K]?.NlhWjI̪^FexxEU"FJ(" 9畀|FD빶M|#̅jLr™7^L+&Ԝ|`h˃b8]obD9 t]1&h1"1͉~&;P^e5~CeUV@e FLf@lsW8r" =oï|W;3Y2Lɼnn B bgKhSBzA]P KQ{OpNqث)K=}^ e1X뻿9> Cc/PztswIQww[uToub|Mٲmk إ*rgpc(Z4 @>-1ٹ{TnŖ)OB3Ù9 ' ִ_k9CK&da'\b[Z{zƒb.[SpW̱囟b{ˉνG!H,/c^Ng =+Do,_wC-'YhJL#]e=V5.(8 c #义;#"c縟V[8Qƶ#CUd؁Q͵N|:Qm+,۽ Gcsϻ=eɎzJAijȢ teKwg@GG dGcw;l cX<;.^ǷtS @MT!jZ,WB^kl]ܞy(JT䇟x0MX)]MbTDfr>,^ĵEQV-"}EiY<@Og3A֞h(cf~C0&<3fu '+vҎUr*$;_kdR]wjAhP5Tȳ{s-X4ʰ3 z6 {GRغ v9^Gi832 &@-ܼf[PEYxpg,}I 6Vx}^ޟD[/ pTC)"gC迠8w|{ {~p >s|TߧW&fj\rN{PY?TQ jӊ:-#s<j>TM6Nڻ6N."#qE޹W l aᵫيTX||w_mϷ~ax81Ц1[,]өBUy t?1vFh->sܹz f}v6ajxփ/%}'Y  hI bLJYk1R7%EOnj88h8t^b<9ʖ srL-lQe:3~PX>^=W}E_'/eΖliu|4i`J}{ݱK$n}:ó$] ' HXKC㱸p-§ئAavi6H`,P؎(IPF(#!*^'y!MJG"NL4Ai -,,Q~>cػlZӨCIQHGM O|%S|3eɲ]>vAnחi.Q^z+6Л˾; {3YQ VO,NmHe i)F[ՙ}b"WhVtM9cfG?pBW@=Xџr.) MV|:7wG4 ԍ1"Pi4א#/Fz8p;JêCx sgS{va:؆EqlST"<t}b&6oibP2bHZܨ核;#h`[G g2:R~8s`k(rx|x!*3C[,v-7MSv, ߦ]=orMmL DanUEhp#M:٘Ib$ #M&rZ g2MAĴk2(ŃX yqZX]t0Q3@k'8?t25Xs#*xviʌl/Q=_5՚]'ܗ')( W:wPb;a/|~k]b}X7zUGCUY>:YzxDFIE@ˆoaxcTC}4 yRxcXlwwTϞֿN1 1 <; gbnb+?۶/AQs4I} (W{5+x'. E='y]2}k|x}ff}dx|!D]:*-#J!LѤa'o6_EO8ɷhB0ms] 3E]D6 ;ӫ }@qA#W!H놡+˾otfއg,Po(xE+r!oaL$awbϟ8+9PgݝkoN]G`N[Yr8cld6$ྋYH/]TiMb`0>#T! ݇Mc0B%d"Ko"A7#`*y;F'S ]rx$&nM<6h<~߷ ­@,8|koۗh$t/o/7|APƢyV^mYN3x˗@ 'gW<㰺yx6k~Sfg?ퟡݝEec@:\@ŒMbldo݀ʹ^UĶc *VZ=Mg"v@N8SulQ4D(lp}Z@ duc=ST]wPZe*Oq6fUYdz=2텽Ǡ LFDE D+ ( dG${:qxEgQr,+xr YV ֘}{/˻}f[rŖp|p:N3]BP]^*;?M/v_,hօGN8dV|h\?w4` s+u( F'&&ŲN߿;u p•,Xli7i3ln ԻzbAq^zEڳ^K6`Nf(DD<&6#DY}'S|{`6vSP3_~gPHv)5SDx E,Ur-g՟rxHq4[y@fyx9Zk MN!;T3Q̭ar"F+Q4|1^{Y*m3dzDtݺ{J6mhd#m>@oT}I 3sH OfY6\fd` lftA-쳯_^ h͏ ݠB6Hv3V^$Mmomϐc1ߨJI gL0c@<%5;(ݙɌ1W!,q P 'Pޕ臜3 G\87<1zַq%S"%QݲnT=xwe|oݿ7QfEa3*dfa.'u4ø *b MquGoT"R@Y [Aŧ9:fsF4,Xr-ջe'dVSљo-zsm.8$(ܦ{5>)@, QqVfXΤͫ^9 } ɣW&<M,6jfcwJ/ck4lQBMzx(BaP:L(Ky+W4&eRwm]W<.ҌhK\ՙGLj|Ġj^98m'sn*3<[):h\Bhl VmқtB*NbۃM``+A6&Q3@ RH"Cj__$ŴX&BA:|gfJ9(5xޭyPA3mOtXRR {לְh7ۘfO~Q :{*[[f7ߜ5>Dqb5Z`i :*ZrU J!SQV9g)QiE1l*!e! Xbhtջ"ͭL ^h5,v}~Pޟ$yIp2cCFa74W l $Ϯg>'B32CfHy~Q*OT2g8Ad m'3%^ xikOϡv:[&W^; Hiʽߜ2NOLZlh.1lSSaEʮL\]ɣՖ-uJ ?|[`,lx}ښ[TMpƟ1j_Xh&J,Fx IR8HMۀ1!zŒm)i!(U]D,t  TfːԔCMdZ+D[7p^]C\xk+ISfgf@:8zq`XWu73Q4L(Jc̄%쁴,.]}e긪떺d[)>m#Nqɋvp1ZkΚekvWr8 @I]!϶檠Z [ OpUԨd2ah2O߭ƳObNC"~(!<[[ D7ѫ("@((J3U`dP 㝥OYĻJ`R飡߽{|j HS.yBX* y;ut]cUtj +'m'k;s?YYcܼTjru<7ڟ𡧾8;!%)l0#\6p9:Z@Yn*pmYM8(@oȅBˣ\R9ˡ!x\?m;[5ȖN]}z[lPH @[*R^e?Xڽp1,vZImxk^TQ7C /G\PV$4]|RZ mcMt @G)@D=Gj{ߞBxu=v}wQۮ#VY ={{?:?=nomkC96x)$޶rI0D9=q z0c ޞw=yCF[]))ރPP{:(__|}>T888>u޿ E #@( Jm@ssu^ .c1?~|WYr{ k sß |j6kfKoweU՜ě°QQv?nw]#riH]P;k|}kE XP%WT.nMMAޘƣN}`u%?mSM%ChS{LZ48P% E;>ITWn3Kd 1\  KiqUHi;H2URtAUT‘2.%pA8szs &kpx$ u_\(*u:v˱bŗw!K{޿y蜡žߵ-CF<0lG8HӇ]3JEZ ,}}tfdoXr kҒcXKKΖVsbk鮻gwOR0 oedI XIѧ7,C ~YiڣxT-~>0kXau;bG6>(f=liئmGg']GpJLVP @`uO_}w ,|ݲ(E2aߤzSI{]g53$T0ف Om75z6IF4$1}`ɥMHǃ$HoD"$мOFP> Djv-ljL$)qp+ XԉGȡM(1|o$pMff (ޣU+v(J'Y<|ŒrKL +a2螪6d%TxlK1hR4c ғAaYJ Rwr<@ySPN\ k;ʅZ1|ppp:Ճ?McPtȊ\Kuwec(sD~Vףu˦it(oS0lҼrXdY e)(Х)=_[r^u|jTsӅ}fq 6h'm\qu]APK80X*zN{Ʀ޾Յd&U$`5S_Vp$KWRˀY\;(*~z<rMar!O\-K@,SWq[ 1,Å^xn8.)AC] }? 3 wL ](];3DS{е;`8߽C>&t[@Z"e|PWK@wvii6f.Uv`֧rU]žrbz1yj*2 C0ljb55Ǫ($kcpPmk3BNQrљ 9c`k9%r̨}Ϧ4DFw`*ݘ~H$8k;HulP-0kEy^ 1'gxiQn`QRn߻YjfLyg#2vdu/.ll۠Za PX쟎E3/aID=֛%*G ;>Ti*[oAQE!h=bYlB/FA:@bhzTo=;}6ãe!!Oȫ Ǧ W$C4J74Ȃ#.Qhu4znX rUݛ]{!tU~B/*Gfàa] ƎI_!ϕRK}piƱVT* U0Pey Rm >H@jDMblDuL hFԧC`uhppjUQ%` @F v3Lhy,ÇX4V ݌d ?> | V[:R^"CQo* Q#kЀ/[d@cy}+\:]6 uYE QiAS lcz!-1"Fbh Nhcz\q87~rX&d*4܂ֆѼEwەݢ@̊@%Kqqy 6*7.jEN4 ]r,tܮ5$F8ݼ/V7FH:\ΊI:$ V<"Ԙ&[`or'y+y/4Kӟgx"֓]#V A.@1s]9:PY UxsREvp`^:jẪQT$ htQd6LeFҰ64ܗef6[~J9[`~ W+~jZ vAd[jڙ{1T\ <;o,! *#HMDM2jАA"(Lv T7;[m$ Po H[E(PA2S]"Qdd‚"ezbJ|_7ڂy/pRL160.}oxt\1mptktG¯,yKЅH)P,B x .V|Э&YB׿z&_7Y[: ۫3]еFx0,eG6Ei"R@hdcwd)MuWCٙzڋu34f\U󎢚9玍O$kvHƕ2\ȱ(tmT4E- &T]c$Q1G *Ő-vj5 !`Ȃ JV[7ޞ" IDATԛ6e޺Z{h ;I*ߒB7D^P5EDm̓F^/WG?(Yt KAF(ZZM4|^O O h(b"R' j B^͢c0!.G!,ic &98M.TˉE ;5; Fb.tk 9o-|Li"I^I*C~o@x:;(C>pR6RGmJ~gy4mKDžA.*8 Q*kUy0&LgxbE3f&l۶6. Tcb\%3AJNص63i0.Kt翔8tl9;:YͷzUt<3@-amR S|C_8ZOtX{+r#p7O_^?};=s#G>|Ww߱΅{Y>{nӓWOX޳|sOywz=˷=BGt[+_qw9'.޿E˛s#tpu#~86нzΝ/^' gi)y uaDp]A0 ձ=Ɣ@J۲ rP5 ( BNUs05$\Bhkt<>#7{Ξ=wi˷Oչ8Ɖo._sv=gwٱ҉WN Y߽/ޯ@p7޹s;w_yR޸7>ws77?x+]ǯy }Wݷ= `9ܠpP+C`ըMuxl"3X[fIkmNrGkk`̛k=p?+?<~|so\Y>Ύ+v<7vyʛ/_]~ͫol}n}),;7FC˗^8|έۇns=n<t`3Z/^p>OZwyX'6N;<W?Wx?۳c}羹>}#:NK駇nuFQ}r0E7`'I?F)?0Cʢf B+$tM ~埗ɷN8w}ߕ7,|{w>/>>#/_Y?{ū;w۹y"}w?yDžsW<}}s#t.n.߾pSgG]{UB?^ bBЭ[^x+w{Wv;|2 fƕ/|n/~G._Y{}|>[uG[7Nݺ^؍Sh]0Og"͐UqfmQt@@Mv+o~͗`ecy/;y+tnܜ[~zO Os/>ܑ~?_7>;ᄒ:;[ޚ>9h{ՊK+'g&|k9oOff_s2}{ #i`uUmbĚ̤$hh*Bt,u/ZUlH6#ݥ4SxBOx޲w m26d,Q#RHa|G"xB!VQɲb;"[Y[U ݀wJRP(tzvmo2;zL^³-ff6kC& kMY/JRBGp[}ق@2T,@*6a`$L+utHh\,G9ry*@T=;'QQq`]+K y2̉"[FSԣꀎj;:Y4Х63հ~X;Y $(]?pAez(J[OTEj4'Y;7kOfݫ/.(>^b{wkaȕ&[Ȳ^ktfZUE9ӴBWPs@7 2j+;<&0cUe٠3k3j:42]ƛ ϛjf$m`{A[ 2V for!וKrw5_RKM"`3rn5s(3լujMNdFQEeZ+M[ْZZBu-egkuFofKRRMǴIɦK]^{\ݤ Lϭ# zxӧ9Z*[U@{6@ ]ڱVG0avpiLҍi0)Oף~’}:{&V*[ѥ{ywn{ ! #mKU1pn't 8Y'2>M edG]VG,@G<܁rU{RA-+8[ tVRiFJ[B_XRRSY׋{~f/ ]:,!CWwu`:i4M]u#fGxЏ 0İ6r&)ly#ynbBќLisjjSBdXO(> v nA3DEC/4n4t-JM)jGyvT)j<[r\`lEÚ<ד`zcF96KCp؃ݻ:m 5[iD^o|^/]pSmW%Ye qpz SțlTف*]{lqɢzMh8pXb@T25:*qݧ2E':Q0V>ǂ2O]h"ٱ@UM pB׊ART+n챢yvC,> f\rz}&tu9ЁT7NuXeF9J.zl7eA&tsE6q.#X Aٜ^ ui~{zj%`"Ѝ9K!M2fk`KnY9@ד]/+,X`^gD#"Yc!&&Ď%Ppa8T}dRFŊC.dD́"C$"Y &,0F2Yˆ`9` arZsKx@'&,hG'Vm>^n;EvP̎1xGes [\3%MdW9?sݰsݠ/12Wx ̃'ǗT ˛.>4]&SyEċsyoyE'U A,^4zڊx,M^Es Ƨ ؔa GUO75ij!]E&"ݛ";ʴm^ Wf1ey|9sb(2\F4ҊeS0=Эrc8 tہ3@7+J/κ|p=.p|AmPW\T{rU#t @.1t==qtSM]zzR f߃ -NS"QT1cF@7]oF5&&] pWrsi@e  puEZC9-7 Zs*Mj ajt8> . <}[lc HCwц pXjOJ1r 5DP\ڣ zIBD\)-YZh2%+6C(l״\9b~:9|6nO҈xhwd"y 65^ohr /'\6Z%l%}ڳܐ6B KUotf>u08*75ɧ#Q mX|ǯ#tYذb2V@R*q$'tJ^ѐ4C6X.Yo2ɻ9DHmbÛ55=&u0]Ը#tC: CQӌ>ۄУ Nm6--5[g>r,0ݒ&'Ke~:NELm aLC@Ft}ד-C2T΋]ފq X<%T c}Yn3z->hĽ1:uF4XD#e>ɡU#-*̎D$4ɇoQ i+3` 31T\uD.ۚ ]%y:a]Io5]n 3^̇WG&=FLlJR<.IGr >Xpn҃#*M0z t9<"O \C4!2 2MNyn2=ۃyC QG%|1OM蚲3` S M݃N[taj-ʆr"*$Õܮ#x=$cXޯs) $nAyeJHqiAu ~M4MQdFJ1tIKn˃YTzN!0I3ys uN6<$*`V\ lv.Ft1 Arfݱ*jH3#%38:cÌJ}CEJRYJ*l+ Mx؈BɨeG4Kgx^״NRoN1}ӀX}L Z!ͩ>O 6&6r躷́.𰒧jb^IK%+aI\iT5g .^JKәz,CC+jPFw%Mś1twk3u ]A@8}__}sok coS?+|o$nlͭd2985UU,ʅȫ!=&0D/GBWcЕȄtp=@K<d#(@v)H?$Q'2.Wm]07.0ⶁ.= tɴpgnZV!-GP#eyJ۷OI^6|88LA5T?P5af*rQ *h&q*orEIȅ@Q{"4r]&Pzqɡ=8p2m^LF j^i~IM߬)rAUNWwA2)D")OVk*t7݊]'(ZchHAt]@u\ʮiYe@Mӌ%k{~ƈ8*>:so?6 96/}m?=XM)=Bt|Qɱ"*x-bZv@eC5:, .\Z0`JN+C #t!M?нTґ^N#,QĂC7xKpvے$^OloНJ3(*['fB9(GZf+}q<ȍt|ZW0폘p\d]؜UhTqt.P]Cj+k c$v^sm>/2;|BNƬ Aub7zFdqt?Oj3Sbn8@90=(J 3#zbȂøC>0dԔcUө{l6݄,+ $tdrΛ<‰ЌD JRp]FaBGqX+~6=?mmmllrZi6íOm 6g_~F.T0-n 8sAA *Ը0UEo l;v.1@7ui+ :N]]eV Tjg@ri$9SK<@GẔ@:8/nJN_,1tVV&fuC~nGL[l&N}Rru5.@fÑ<6XAd[3XdǨ4zfP !`xpl .ȗ`3]\Ce8PTtRNv+[Ƕ-b2ӑ/aM`v1*ĞJC@yb;O--!|* ˅k]ْ8 9oӕUsMК$[8fE?fRY'ݻ#' h=E* I3j?7_9gQ IDAT0Ŗ(ZA#żX͗mE!ɕT"amLL(9ӨX^z&D;yXw 7 $q}B (hFh:>ԔK.:9<-6V$N!ɋ p >u^>#]㤩R 覗K%8ͽ/cl3NXh"_k.LYDw,qo˃pX~_;3 B1b$G芃ց.ˬ.I.8zгY! X@W`1O~u3۔ tۈ}JJnq\WIr6m`Mm];KTjx@S t'ms;B׃?)a9![pF`A,-2CFUT FTVǦ3\2C]*ܮa&vi+lb$ u֖-{JIXkRIzxIP ?̮":'l S_ՈU2VˉCy!^?O 34[,RUo6"14 G%aU%8wCr e^z!0=NF{^{A(o'DnP;MVzk_ cܺu6*[ԣ?[{.ŭyX,,_HB /< ]M4!|d}f"ƛ@J&ƧY2Y K>6JƧ6np=d=VYe(>$ٮﹱT ])&%4]I*-z0 %bW4#ÞTr|Aک!mwt6bBzL "SNFoQoYRr[ 6FPA,*ܔbHR#|D`d5pǑ0 4;ҩ,)\M3dy1/Ib5:::"ZԀdyjJɃ7|鞖Q57{7< +<_Z698Z'.]xhLv誴õu-w4fi%z챽o)\Wz0B&juY(F ߿wWh7@A5QPOjSQD}To TPƁ!8h ŷ j/+0rG b?h 1^?8љi`1-X0(5ДĴuGuWjjh]S&}»3[&'a4=h.[6@0.θz#yMݶMR,lm(]י܉rqGbߕJp54-ʱ)::_@[jX)k[ǃn\XrâfVӦ\299f^sӞ=HRӔ~kRVV@վޞEtuA|=X_2$k*@(GΨjE,j8>ZOR)w@ґ+TcbRt Jt. ,8}&1[rhRyAL2H 5wUrL[^8_[ >_~?AR^; >A6 Կ姟_l>@ /.%raŠZdhPnfTY`0EOץGBnP ?ݐlNGt SSRO75Ul1En]zT挲*y5q9[AǓH v+XX]j/[we4[{t'}2AFp=Ђ& eWFuNݹs 5796@Qkg \nFrHtnm*JX 7̟V}^{K6֑wj͔t7>'wgM:dM~/oSWD q2?p!snyt+!Cr$Dru=[mظYP6q6ԵAr͆x)NLt0u8Bp:< &_K hTkocqkGE^dWkE][U~qm(&g+dPw߇ h/2[T敉L_&ЅPҊMBwl׭mLuB3 }0%MI34wY=x|QO<Rty@ɓ9=kRS- C+ʼ]eT$IER$&DLUW,tj.(2XZa`UjyF-9Z<Ʒܖc^JO=x qp0 nC;w>>.ųз >m{:܊j R)t^< O=P% oĔjFu>t _I\\M=ד{T@x;{ k>d|Y9t{qf8*l1liPU0;j :מ+wzʍϼ)]#4;dg ũnbo켼1Еk:н tmeCa&9JQc@i/ԓdz^s. gk(\i/H$O?<GLZ?&>X`NJ]G:-XHz]۵Jΐz'P@wu8K16Mwx$:qAT<5G 9ek0Pʬ)+!d 7j ZXyF8KyӶr&O.VVջzqo"ͣ{t:6kVY@>ʌ&%M$TJg֞8+O= c~:PեXcd݆/٦4l\xzI%s/ ^/IY]ё\,0Uks `f;uP.k2m$8$#%-WZk{QNqko0ߖZF8p/oA~k$~S/Bضw629d2JnptfNJʦ!恮'd;Lg%::@(諩,2Uc%/yniO>ӒҭP"tCZ4|qRy)*O:,v^rVTY!a*z0̬H٩CG!:J0.IۗjVYtЅ`Re5z 뎘RQA{~4=B3M@fxUN;SX&1%so uٗ-Q6*gYIOLDkyG27!p^3{wSgqS?6INP)MF'Iux]DfVgm xkR3[^v) NIVIT[#B\ѥV\NrՀ@LK,#t`m hHtf/ 3nwa]?v|Ta'_K؁kۄE9өJ|X UP;M{|G+;#p>r&_sS2L*#t׶@wK#t:5⤪$}k*LZOmdAf~t2&nYZ-T{NW! aYduq\AFI~&R5S]uQ#x ${2gU1)2T@;V`F90H`ݶ45xSM 2U]'|ZHtϭջĺ͑ߎSҩzas4Y{Y2LMc t ]m+&fvktnOMecRg,4QvXt;13,&cz1 b3UU-kG[5=VlXۿ䤊Ls|'ؗ>7Y [b4Rݯ_)T T-fPU?BW{P?:O?3NnL gݿ'd H!B}eŖҫRM^nBt8"oQTM|˓sٜdfrai (Xyx "~ j!K"QŔwnf7NI1_+e|A0\D[W}g=ƍ0 a[ E_2LRgptXpnt ݕ": 5DF &6[^4T05=@LΧ%^+V'Twy ,񡨚ʵ3;Q|ڮ>m ag&*cw7TS4TjYKZg̢:9=t;"&h?6 祳uE| tjX:ZO?Q[O/4Pѵ|>_hşċԣ-V V࿲gϝ`Bt y>ᅢMCEȶRҞF״<ȇOjT7z xA#нtg…цztpE@5*#ti@7i߄Z]?%tW'tlak րe[*wFy˲L4x[X7붤fEZKtm$zً3ʎtf 2iK#)"t3 40ܹuÈ5h+BݣYCVLN컊 WT,e̜`G! O_T1X"^N_bVcĂ.VHL_;/53._g[@=o>6RԂ'VHY[E(JcQlՔTQyӮ_n~2FebGmA&J$](mh^:2jIU^/kkN~nLJ#0iC7iHjQK\;矢GcSyO&:ǁeF.gGtnL]\A t"QG. Bw,JWnF Cδ)0GD珩u_WlLrC:(BkiFY,Fm+:@D)|^XƅrKЅҽtCK@ ]nn gi \ w A)@7V~ ei÷t pclr9Q,wu |v R=ANRio.mJ 4&RZi[-WE1m;7B}cOh1vd_Wì]c=Ôu)hƥVaAHQiFMc1QPzlEOxƄeT|? b=j.ĮV?)N}d+Ozdx@',"H)ZIڣчsxKtpL>S8Co-'JAѫ] !F"tMG^ŵoH nK@WҜ}tQRvSy x3[-O~1+ٶ1vm.b24M8{ DW@7:7xR&dbd #3C=vgPd ec"2óĶ5hNw$6vLY^t@Qua!í܈wf#$t yCt`IHu"e4lA-i3zCoddu6IZȶ'QqOD0se_5튮4L '&q}˧w;s0i)Xd,˞Q Yԕ<׷'JBiX2625򒟃ޛԒf">qUyF/i_^][G5?W8_CyxTql[e_P V"pÞ(t/^==, ]kb s޸ܬMIԌ4Hg"YnQnfM)@ * IDATtIbZ"X]JjFuCoUkq,׿`[GIj璁A0F3/~SܿtX6kvnVZ tig4 =Uršx+tin &956[5;SI=9ivPaXrَ箭aW ]Ӵu7@.DKhb6Ǒfn=.tq#7m;ԂL=öz@fVz}h֪ѐCg7LPc} (ۨk  ]A:eTR%Γ_ ,wFVrjyG!]M\C48g4xܣgёqX} ʴ͓o/}s/xOeo잓#ZBkZ(U 0S+}1zFU[jy kŐenN<Ҧ3`Y6g0_Ngj5ybT )5j2(kdPsf5 3`|ӘiuU.IsE\b2$BMr6D{[UcŞnmL;(mA mIhd^0C5sw=Q(䎭(lZܪhM"E*-kZqr-6-cě7"HPd`1R WӧXn)O?}~uTk\4o |0 {g?9|OHQͪbzVBkº%.tSu9' ll- cΡtą`%qWf3!ulϳ6WǪ*`!еdic=]{c\d,S27 vΩRh`Vx.'F@7V5P_LY8*o18f,U ײi Sky2 t66˅\Z.r[w܀LҜz!*qSo׷@k '!EE-Wl\GFcYnFSE`tC -x}_o|h9H΢/Z`*ˇ';[9a!y@M!:DZ[Όm`ٹ uH:8 ׋Yf)z>Sڲ||A7#4B$;̰@5A]3Ѝ&|rkdE~3n+t3jj`!tgxXR5$^ /d+]|($\fٮa0N'S94%5sy3xhXv-mf]ϔ(ueK4tr1X*:Vga,e>UeݓmUmP'5-y_ /~n[(R!۟/jCNQ"2u*a"Ĉ,^eX\h"s[Ha~=[*0V|-Z3f(֝!{OTkz:oΞ9=G[_;W?s 3'Rt n5g}C_2;;vZ\r&)`ht 4XQl)ԄGsw|4[,ИЊX*omY+Mx m%V5VNne tKshPS,sbBVmtv@3I !)WG86( vB-28H?׼iM_z0^ٯ:A "ܒt 4#C>JVnO77'dfOLMF%1]> S74s_b bhP5L@Enlk"Lp7GlN./ȧty<mm\HIfb: h JmS`$_ؕɈ̩J]jBۅ&*tߕ$km=Kw9}q'uS;^[{zm*9 zt-}+fxfytI8Gg.ެ[߼L!ytq|x̉X6еhزBsk;Tt>]]w ٞ$d8EX!>RcݲԛZk[+pMm to^&0Jt\7NY%D&8 m6A7(uN[zB;@K42q~3b]WJnĨ5(I0TJ͛(Lxn.ޚ-.~#4n}mgՈϗȨɡ ->h\tՠo7Jȭ9ӸQ|]U$)Q"QvaQAcpһwcZi#@X ލd!1UJ2% w`xܥX&6WtSmlK?b%O?x=gr7񏜓kf[gem='tg\UK$M}o> ,&[^ƱU/=KwMw: ]œ&' ]tח=Øݨ mFtǑ\eh8{ƛoU*/|,36Õ^y⠶m(AIt.kQqܣ;; Z1m9͛kxV$xM7OYIf ʐإtǣmO-E@=!tE#BW[cD;8Z\(+tQ5;7X]4w#f.bd\>APSD wmٝ8vyiyؑM]l\rFS75/O4BFjSc4hnSGZnϢl^rcMdS d)ShgZ'T4ϗZhSW#A-ՙ@2P}`#firT#bHlCfstA)eYԩS $0ƫG#[wy뭷'?~/|qoy+wy#֝oޝw}ϗ~%}FDOb}1M_vy894jnpqp{Ԟ}j:mZگ)/|6p(шvE@[݊k)t{JZ4h, VFW|H.eT9 N+f6s<^7ji}ShERtC#-SAV2zk&'a?O]ͺm." K=of{[Eg)ȥ2[/[in|ՅxQ٫UVL=r܅;P=wb^ҝo%C4۾:{LW`·i!5rT=dI}0#c}Xh5usqgg?fz纈ة=_3J=Ys 5jb[R7w$3ݴ"}?Ƃס&O`,<ҭ:'&Y.Y^Tu=. Pd~o렴jIub2\jN x'Z3^=ؑR7f x-.[.*WEQ)$u&Jo,1gZ6BPT:X}[H]3"+tloSIuP!U:zpȥmG~_?u,//=s֒Fը.=oWֿ:v1kGUN\6 Z{)MWÁXQuș [=X6]6|m3|UW^C&%:R߇tQbԬpˊݪXpR˶_.+Itv#D./(&F$Э@FZ(/B9<&i=gF kC'4Gy[[rZʫ{Ꮞ$/*,sCrFq ˦O{WAn t}6VPY-{B&nDrj-*vʥ{ݙj%M%te04Ҹ: eٷsEGKi64Mӿ(6Č!YZ+v)B iKkKn6t5˪. @[O\zQnG;t|-czځX/iO\h/P_iYTBֿ>\3a7n41΃4ޟzSGrkF2!>iP5fnwWG"o5O|4kJ9╬7??C˲=;Bb?ѝnAVIFF7_9[<oٓzس=Q#}׀xtr!jaexbۚG3G4 ׺^DJ)]B )]A3f9@ IDATWB$[j]WO# t!?~铂ZAKi"uĈ#5+[%TXSj$K و"0V2ۖ/-QZ L`Jյ!Ǹz3hOXOn]n*jV٥e>eRˇ .(o7 MG>ԸGm] C0sjwjk<*m"ZV*DǕ=',y+]k'`-- y[h鎗K5w0HKO/5l\NvvA^Mɗ߿tl/hըPl\||i?;]u^MGtdd3Bm%!aLC |l$\U"bMV`\>8Э|W@CM4hы Lvt!w߷iN$Z6(nsTģ{x @B{@\1ZXK,нvSJo<}ٯTĸ$f@nLȴl~U5CxdIK sFyQ>*/ r #[F⛄kYU%AAu4I}uojH uʔ,l|I/{ϝsjXzYSs,P )IIqTQD['.$W,/̥}dGh۪AiyϑF2ߦ-XE;nҮ} *48;3OeyS/QGgΜA~^lzhXiҥ2l+м:m[#^1|Oi8\>tM&umK]'քJх`j \4ҭANyȌ7t S9+.=Ry{#ϕU?-b{^VhB 7H,<8\XN_fFVh6 t7oj Rb@ k 2dy)MKyrګe/|=ARm8hqRC,Y?/Vu~#'ʹ6ISG-eoby76N8 m?xH wݏi@Wkw3һJ*(r\/pBwt;} AJ$F6Et}};\V`R4~y7J@5lM輈N0sf;(ڥk*VNLő&T{Z&iTFϕ7uiy]k)x4 zg?{Tò&i,;Ilh6exN4QVb<^sQ%:W).Z[ E12` .=qd>x@bWx߼ uVؔ{b*0>W,m5A']DtѸbjWԓ}%<O<^z~|G?{'gO>~k=k>/~߿݇^_k_UBrb3s[J)KE2I<:qhcc+ ]7Au^m*ҥNTh0B5nAFeuP)d7-nm䙗8M?eswqPrǑ(k@7HR*j<_@zK pHjt\[Tڷ*sǥE!CKaz:^qרQΙZVnۯF]WʰeNh2!љٱ}Hn^3S FVL0{٩bEQԍh kh"|(y8S:)ff1a=uԑ݄FV4ۢ{\pgǙG$Y&:2V\*4-P!7r HU-Q[)]Y8,j]e'sm.Jۭ5(8|wN?g{Ͼ=Ћ/={^z駏ѯ'<ڣ?O~O}og2?a"#ttSb& 9]hQ~$;SzP͙BS:3ըyT'V/׵hy̨D;@[3M]nnsf~ݫ{9 ^3NsQ=:fZᄄ.D{)}+CKFZ+t[(((gWUI`ͽyWuӵ gc#ಥe`[ AxQ2YsKDxc N};_v%㨢i--p?Yg9qk7f33K`H+j0m}"8(F&J_h!4lFo ).ãJ#->Ȁ#2н_Zr%e]GgWr;/}~_};o}Ǿ_k~_|xoO|/~?7|⥿{C}go#t-T/?4zTUB́3;]X#BkaB r{]l m%7(&t#j4K=B2 aX aB׮-ڰLxL9MO WI]GDԜGFsj@o6ə꾪T 1If!$W^)Oj6w,kcK,N<.ў~c'ⲟ =F͓a"ݤ&<|]rx1iuS}x3]pig2PmFC#2?*o7la+Xx(~n]Y uS>;5XK=8Ш=Pdb3uY69_f5) b$VQrNUy 6,ݵ9,0?}S_?}aC?ϼGCg߾=~?ӯ>cqw^/~ѯ?g'xo}w}¿}r(53Qˎ!=Y 7ۖ!oЫd xi*i|=3ɔ GϡbZ۱CǶ Ʀfo [R85R9U;`;99 $$totMdcaFde4Ic. ݢ1q#U;Fnd?^`t4R$^>5n vI1Cfq{)FQyk- 1evg̅-jFv4uҮ# (x5 {2j)Rz&UJFT,], `(s,yqGqp>zu%kmk"i$mqxT>nބA@#FY0eqX@WQ |#?rw8,;gЍ=76iӴW1 iG ;/(wet.XgQ2m}zX%N : ks]fκ8xW^bu6³} D,Myt::]%cݸzd+/XTJŋS4ز'+O lJQJ7בvz޻7ڑě'$w[A@ScŖ4mjpIGQRMB;w@Nׁmn4t*2VYUIj( UŘfAՂ]ȖٰK_b=9^,IMFVOgu`J{<3f{w<^1"zr7ibεMxgv6VZ6ЭibP^YA}hE>,.Nu 2*ot4NO.C{@n__ZU@}ʛ*F(ƥ. wDwSCȕ()i+4v#ˁUw*!9U\ëbqb.YV @X02\Օb5u hk5J㑶}s]wZ29 ~ WYڦeâ͇EJzK-z@txU9䄴3˜{|b[lJs(}*W4|ГY\>{QYuJY7L PRK5Y}ՑGMsz[-ۢ]aP[Ab n=ŵ 0@r#|p& r'C۲)SD3zJDg  BkyrY65x`:enU9zqٻd=fyK7]<:zgpKO0ݢS(twv4] %A+ 釣۾=L, w]#2~aPhH\"~m)$EM2NB lj8@rz)`\78F^B!xւжz4qٻ|z65‰UCfs>=Oʃ!8t#J߽~MyLl8*5MMj1c ݹSϺQ d RIҔeC[+7ˁu\7rv&K."v LJ:KQAW>DTe^N=a'F#ѭ,޶:}|ԟ^UD(sX"+e@}W&;a gY\e W]!1X RXNtxB>t_@FDUJ.#Ip> Hgxá5 -@eXDH?.Mb¥sS 2)ªɞ$i]f,&!3j_n/{?qhշ6RثgweߵK?H|"/1 W4C V^̝ ݔ}| }9e k G+nK73f Jqﺷ/SWZ$t2dw`+QDJBێT%Ь8q?PbBWфR(B 6 cazS[]pO9LɌЍY.Jbx|X53PǍljN,?HUoihepȋr" *i1SUFXT)0TԫrܩYAϖ|&ZXz\<8vQ ҄% gt+,+WKҘlddq3ڎ/@nGNm(7M$XSϩk'+#PR{Tl ȯ Q?YA&mOi SwߪziY_(RC͖'N`?:a/%IO2D`r2Sj@bônNc2$4ȼSz6Hk;{$.FUnXȩ!Ǖ9lSfl]ﺫ(viN 7hS֧ w:1;"7viQ2hjjir(U9SB7x]1c@fm]vko4(eă>Ot,s %,}4à=^GҩeɞA<::Otw$d*LF!i7I1 ]:Gq!r>n='߻Ȋgۉn {]P.Xmt@`nWcD=JkOﭒ7Rj0v3Mo+XE݊yU 7jH=n*dx`k;=or̐7G L@pX=l5ʕH{>HGyBI@JD?Z,|(i@7g4;m4=HOHDEӘ"Aq|{$8Oh{Oss£Be#uɊ`vA[YfDzEQ\Q7Ϗ@8KD:s%XF%zB#s20JQHdiqxx֧..AW&vfiTz6+OI.`RlţnB6 Fnu4Q6FlxD4gRl .4 PCU^\W6)AMt}RxdbE kU.AecٖEƧ>Pap|v bUJg8FUˎlv4H ܫ0e;)zk_B`|g ),X]Օ@t9`$X?#p e7Zjdh2! YC/BH Tʐ#0b'H4H$Wd@?870%Riv)^a,O J3@Җ눠 ѭR~Ho =(c3wݺXX 4H3&'D-͐)X2"U-R @9ڿOKQl[Psy'yl6]Bғ |!@wGe 9ELh*j5R. OʖGNXBr;b?PnlXr50briFJd~Rڃq "8syd%-Q[HG&nW Gd㐰щTE<e 7vX&upt0U%L,g>ѡt["7wv❉tma= Ҥ]xG֒,k/F؈ $da=Y)rW# T -) \A.1" WbB!yxʲ (ba.h?7hM1h9!%JA`R IDAT@w+z]EtZX8Z#>I!(f9Y᪢ A#e3BDt7T\lfbXfI5\dEJc@,oϤʭOZ޺2} P]p:t]*-gZ-@w7zj{5%˫)n2*vzm"Fq ˚GxV"Y`č0,X:O(lPvf5>JRPIWeI,ÛBNN?1iz )C)~Ȗ%>Gqp1lGLdL>m՝~2P c,w}oDKUw2C]~?B~ . {0#k~нD]lD.-!DO/  dǎq\ZSfg`G.=8},QC)W0,yG?ă?,OX3^d^x:o_[&y>p ]b&=z?` [ )P FcsgXI12riIKڥL7*@|@q8dpזl0*(!#pLS-c*ġ\.V=KNr!Υ%*AJ|~#n@yu<4* 9].x/?ًx|07Y" ͐!V0p,+e"љh\ Q;XvKr,7|kHܹ"00Ѣq!$vx J 0K:gawUN[FX4CE@WjiiaKC~dtCQحepw`0,̃Q&( Tns nLPnU*e:=bf q4ORӗeb) ̈́!#i`Mk[ً3E/BGG/7h9Mbs63Eҍ[en{/ HVlkb3,0 -6,|5oJl{i(~$cBP"RrPfĄ?뛀PIZi (k(0$Tha#WJxa˒C 5Q4`+s" 7x ]S0VX<!##ȼgF!`Q =NƬ6ĥ.] ]^,tpU؀:UDzysf~ D]Uhg.xGJŔfv]@Jf]e'pL 60 /4T`U(JDi_DPb`w,JUH<ņ1aA50e <%#`C V_cAqg Cd[+)MSxZcUp#i*. rhmSȳ  xa~ߓDG/剉_ľ̋_o%2Nb5| fBw' [Z؈4'1; Jg%!*"hp8O9eS1t, &Rх h= y2D@)*@vbה  p_ KcuOiCs  {uXGb.oDWH+ӻ2.4pb8Vƚᵰ \ĮȶZ݇x0\_<]ؤ3< ʋW;=v'Ep.JȟIeV]@vy[ `xk. Z<|8P)EEt)u1SPJfCȣ8£$F`X="uu".'cY AfC(T溌ɀˠA tXЉOa4?ui_t4ǯncqG}"jsӾdK;E@xNHӸ]a\p%VLaac R')nאg=A ~P0K2#VIfĉ+Lg2fq[ `q ܪ{A1, ]x֜+ El&S5ɊJc~x eqdZQ9\:pdЄ!ӸIż$EKF$QYQB2h TGXz—04 ~p:ňHw3cAK|@:pz"ܭ/x(7S\Zg&pہ@øCh5F~C BZʕ`&@ \@kd=鿸4R2UY0. ޑutDdMX;s$dnJ~]bw&y1ᵆIpэf~9hX;^!($f;mS$ҀnG"ZJZt᧢pUa Iv:hp D\ mu,cɖ~s#t)_>M2 >ltMwI1Gr4΅ZzjiR@ b$!GdDװ9] P0u"1t xzVA:`ADQ ?K%#M$ 0 %E'92a-QW|ؤM뛻)OQ?=K$]lSwCĂ3cR,:/0 },Fҁ3_nj!SOovGiQɩhZxf‡48GR)Ö*Prb#.!6ZXJ #Śz>eҎI*C҉ 14ƣ֊SJؔН%-B&] i@Ws]`AV#tga"N) @wʂ$#坳)!1"z0ڃA@ y;85t⻷&+( TǥR)%tQ9"]o*G=/ʒA,3B H)2 7]gh5; |WV ,P,bc%XGfpG Zv! ) Jߛ۠>%ٓȟhR ]&E9xr#ywEE"2"zţe">1_-B nr nIN8T[`MQ"EBJ \+52Fg7tsXeᛱ_@` 09ZІb<;\ n,ͱ} HLbϥ.c#lDf@_]6l VH `r_[|x6pn MC$e j #t)p]c!ik]EXغdvwOݎBu=ݘ -dw)H#.")o9T"U,z&K|%FjUA?KS="vHЍc4G T4D@P32?G),nH圴JN5^k,x;R 8-=.%ֈT4o?â0'&) ᴑ?gNs h@ǶpIg2u , ߡ51E¨]ȡ}|PHck=0g&cDlpПaPaTaR8+E`cV -paio,buws;ءp'!Ue0"ˁt b @{)|E)Yʊ<3+,6Jb (Hj4@ Aca?O|ĄϏgH|j p?4azlM\ N(:42%k{){&;7G@,P_ pc'/ۇ+\ q`hA)|!jjBHt)⢂T!apՎV``fe)&iތalZ+@>, v&G1#ro9+ll5Z]6 DnFpĉ~ C|K2e qdѸ~BihD?RQeD[~JfI*@0\OSe \ x6DfsSzEObT0耮$/J{ÁK0}ß};ti@@k [8Bb"{pVGw:r&p'~?Oћ_'7~'׾~ yek!!S IDATKpu xZPp7"K>AMnxO{Nؽ{'?w~K/'?~{'OɗN|{oNNKOduɛ?~wo~7ٗ>7_38S)0\ҐKd U9]b[_^G̛|Z>{))赝_ُOo{Och(~Wd'5?~ʑ^jKo}y{Ngi_?~Wx߱g|v2t\SZODgϾ|򃟼O?}.ݥ;w|;jwG}n7t6lN}wyZ]$|'΃yG v=j 3ue& 1.h]Rd1-JRƐ1G 'L )%=ɥ1,Q)nd+-ie΂dq)e_<7_:'v;}w۽c:[r;{[}o>/N:?zS³:7WO>On]Nπ?xSK^W8/z\~_hɛ|΅6ӿ~<`'7 _~}v~SO@${~{Y7p'^dO}?u/Ƽfutmy/_xݾ+/?ѵg:SO'RR9ă/5!ZntKKx6Sbgp ἅR2KLQ:# @ir _Tj/ +^"WǏOMKl&b? j&|"QmN$|ಉbXP(Nzyb-NGg8~n\b _/~~ ^q| .7U<(D݆WFo&pũtP8 aqwM%6Tk0U_d lAfT#.<\,"VoLN̑, zDWj{h6#E9[R8~J5>Oc\gpE/?2;~w[U#x|/XY^F(`Ioe۲\L5;k:n\*nSK+Ζ{"'45MKIRd z2^u/lض2Y%6wjZ,5MHk͝1I빽Wph^7u˗-+R󲩛A^Ŝl:UPO얋&|xieV?>.)haMU3}V5]J;Z;kLGs4sϺv|9<3_wr+8DCwR<7֮ջD=чMأ]9"iʴI[M4󬨉nD "Ҙ ֨'ރQ|bⓆh(&rE*C5Sۅc@1zbb<+>Ln=X)L^Q3Heb U4D(EdNE=8P\3WI,frb>;Fn1^)'TsfFG/Ӄab?\\A `w7pGXQgeʈ|XnEg*#0ˇ#6]؆S7\|YiəJF_(-4BjF&E[=_LH?T_,mwOi']6v3o;_kZˉi _V مbY9cKNVm^%'^3DU7/|!^< )$KDŽ2y*H{tD'bj!Jcbf4ɒzL&Àh?S=|o^6DTaJCȁSAP2"27si>By̦^ %{LP=A@Bϩ qX^n~4U||~+ e{VyTx< ܘ4"Y Ÿ,4 v< 2Z4AGB-\c$ɒNnxbI۹RwŚ Y߳I7 ]3PY㘛sv5gsRs{/YI ~%ɦm 5'?|mtrDt^BvO*^ǩݞ]/3Ԛ0Qp5dlƍu5udQs f{'xsn5JMZDz{\vultR_'y4 uA +aGD OQQ`AmWxIscO 3xoe6WrJm>[l 5y(-:JŇ7;XX&d*G3ύ8e)Cc #Te\+'NQ.Vf˓Ꟗs:|>8+ P֮ؓvrcF5wU#[Y4U2.UxM5Sܵwȕi[frpb`U^}繂=6 xߜjvҺ꽢UZm\L\X*זӵRz#m_XK,i(=15wjCLi{ E5MB c8O|D3a HҮ0ɔ' 8qu])fр?DBpirx_۟xF\;S\V(rdsRJTČ! 4|`CDg JTfhQ{ǀ9>v8(};b2A"??^Q 5"B|L@q ԇwLlCpb;P_@`T boDv$C#1G" }#q|!+O T DtGR8Qt))|17w~ j)jEKY|mu"l?^*m5uo1;7m9fuٸ) ᠢڛjd9uZ5;M+7z{ɶ NqGstn+f%_H A5>`/=O&5!:%;ׯZ(t+_SӖ~!jӶ9鴹X7lun!uun'N1#C^PE~4؂+6:(*`AL]!0LDUc*j7iijz`!2G@irL"T PJ$X(Љ|/G01cPGT WX3(&狐s*d\^|փ*/\bب c+Sh2y4@""긊⪈:2>X8rh7z=Lѽ?å`*'&SzLSP$kdW|-מ`TJML,N+\}3͝~VXq릺ZY|Խw<~҅Yq;:h9va-YW6 UgX %!4$ܘ}ұ>YRWl[qa5ԵtmGk6D9 5zTOi|30t*a:f̦6ﰎ]a lpU6N{=CQie_Xe0iy۬Y_J|~{h;Z<_IZEUN4֌a6X-WP\>xt?Wvŷr?g҉Uwk]˨Z~nsԮz٬JAݶ;sذjn7w\լgOb`U &kGW :zh,UB!qg%1R2F9JܖhCeAʐane N1q3>Mue1qFدW}ِj/4 %NW2 (bnWD'e/ZD |X3t"=ׯGӌ8 mYU6x#*!oAji ;`WprG΍I*DJa \]Y5qةXCvL!KBLtˠ;"A96 r~gL7Z@6ę"da5˴9 Gg~ +(p<,ѩV R%_92Zb?;kWcM4=-z]8HAuYspRQ J@V2(:;Abze]X_}Wwc}BssA6mSWվ^5Ά}^7a X8v h%ڽ܈A|w>:)8xTx&|tXXV ֨*Ɋa ƨf=H1֒%YIJ۟{#MJfkU]`U,z\{%QYY{%PgfOi`H+m'-mkgUͬ/_k^y!145opVs};pq'n %;oRޭg~iv®@Y@ IDAT|n0i:7+VkvqEKWs搯{qˮȎ^w/\ؽ`욭=OZh9DTakZf`h3}ՉBs'6vo& f9u{fu֬3XB{8Ă؈J(GƷixRŖ+,ST H~:-^Yl+7bfد3VīL3!ۍ}$J98ݫH6+B2. G:3^P*A3cyi8D?6ZCₔH |ҞZ[lDNAqo0UTզhC>'K[kp\TޣsϴǪ՜ذm1#ylvIC~珘YQ XP*i:О5vC7.xN:<ŕG-~)Qzc4+!&`;z  X eUzDe8lgnD~SE5Q{`G)i$>/i#ؐLQK(3R0_9 %o-Vvp:t9 ג4'-~%\׻աUb;M⸚拹f7EkC! iCbm5u',VRkdPY/zXұԚ2iчFn"!R&)Y,;yC;ИragCG=sl>y?a9U?;cwFvNRmXNs Ü-PRE|Ecn8`7Hjq{%AℋKCٛ;3iN|VQhjf""F;_/5 Ћu`!c;(3gg`|x->uR^by i9A`돓$X2)<`/.k^bi?~jpg鹊9/~\$ x}!wHW+;MZ,JU"y3)YBd8};q=L0;/#]c$ C1Jr?Fl $3rgE-]?ˁkݘجw kM}S}3c0(Dfٰ}h$'5HL7:itMWzg?j[AvqBm.]syuC:l׃23>馠H;]#`6`cy P2І6Ka:jTRNM!eUI P"A'uܣ/+_!L0{0@tq(chB2a|<5&=Wȁg1<96]9`+z9Z$4AԌv%@z[OMsncUVU[P`2 +ng ̓6W,九aDz*C?#)}F׍ffMվ*}YZ\| O!w39<ᆖؖyZ.)Vr XDv<ɍ^-OߜjW9/ύt3\8{X7l 太2I Kƨ=A?O6C?-)i+n :N [㝎dEmoHWCUMY2?؛[Q~"+a'ZuKN֊I9X(؈! )bj?1& 5*37MϝR{ m6]LXR9PqNү̫cOf#6n\6Wlr};&A@-SiKܪ*o'qχr uUݞџwֽNt},_cfxc7:XFX'N1 9 <`|vmf":S!0EuLfRrAsOzq (eunSu4[J^LT98Of1xVɲhSu X" .:ЪR΁,s >:;$pαeYU<ùfwfUVUWWMġAeuݣV6~?ELS@4J9$d,Á&\eO^w_}ytaܼمr;`z owxpB#onzG\mGrUo{z\&跍Nk_4]` vSK65/I$Q B\l|[u45Fn߭]{oq]pеdr4 װ’s'rmaUs 59q8bhh:^0 7^-$r|ѝPcHF\SU =5CІ͢ VkV*2a7Thu'n僻ζ M9~ru_ɖ N~ ;pu!8 kxZ:AD,qHvWj,(.5cPPKϙ8A= $X{^v,G Lt ̱0)0}"Ϭ30u/P$_ Nbxy}^cov&Tt4vNwvsݬvS RxŃp[ӾA9C~mQHV{#{ ̳'jh/TRo<՛cnn}*v6K^ ޞz0@PE2+ 6ـe͟_ ;ST0?y@iOĮ,*&fX2z ҢKR)SKr`#C[byǟ=1B/"2و*tkʎug8.U4ۇkbs,auЇՕeWE'"$ T9_V8 K31""gK?h3fe)D(k`' eS\Za8F8SjM-gTw9A+9fɢsYcg\V=kGWH )1 HJuKJC5Z.xCm>ꂓrs泗[.#S7zf6/7nk/B7$Y F`t1&q)!V6.xv/oǚF3nDŨgwtSz90v~cpF a}H֋6r᝹hd}xg^#?c֫tE2{z1]iFrq5>F L؊vd~ : 4_>08bYf^i_>Mٹ}wa4T}ZcÇO Z#qE]K91 4%p5)@_VXVG>2x(K`|QtTL_f-s@jT3jc^g[ܧ`_r`Ąosf%~''5%!0Z8*܎"(\'k 0of#O7Nw@1)~ioRn]7n7yPdt1M-x7tF+ 0NhBRǃk˥awf;|{u5njF-.C:i)$}>t9 I C%q}/XnQ]]~9{w'+ݛDØڵ^Mnᗆwqv@r`3 &WAP6F1|\cN g8 Xt`}qsskn0Ұ XAH'uV:%{:_ Y,DaӰOUxXcyaV+)e 1λc/"!ţMsg4O0ĒaN. R#\H: wu # 4s܄Ylv]D ]$i'ߍ;8rg{i(p K15sfAw^ݒ_kd9gFz.9Mt,L#O(`AL<5&o?zqywfYxߐ_@f[Dr`7&L,[RhpS9,ϗj٘c&pȨ4IT0?ܽ81˅?5}|v߄;֬DI%׀cVkmਈvhLʋ{滗1YwR]_i^{V7K~s~ Ӳ|}g]0cv?,b` J$:Y *Ff'cL",OK%oL|*KU)CLT}&*ݶmD)8s8C90Iu>KF,HbD^*eFD^ĤE )}$OtuWyZc霪l g̍!C=B%Ue2NoicZ *G4hp k1`.x_ K'u5KG#AHTlN0g`{;Բs:Zr=]E 7Ƒyq7J44N/Y ;X\l!CƏСHA2cQ.!)H`KpXm+`}xeP vs3@&[-LVZ6UːzyK\| IDAT^.>[`Qv 6"lx5}j&. 2>')9Ơ8wN\u ݻ{m\2y촱u{oo[mEßd.iPNyW+5VX(>%Q "HC`ƌq{O/ZXnY<*7۰ WczZfvrţZ:yߏP0^̼5y95|ל]go7>[}'̳pM$;E[~62-0ӜT3-0n\:[?~,m;(mA~4JO+GGvem6Gp;nՒ>z`}7+@#) |bY8K5.X9p/T `g=HekW{tX ]u'[T!x*Ϲ>/-# WCW~NÒS*: _XğԱI[sa4~(ZE#0f;雞x3k虽^SOX]rtrr8|>;H]9-A{J{1KCofˋKq%_iW,Ia/&lt:p;(b'N(ain&&*m#Z2 Y,HI=S5mqTk2R!ȉ.k2> r'Pͦu{ "w|,]oe[w?N >º|5-Ӻz,N(>~-X}^`:\ iYU,J-cLRpSu_@YD1 Z˗8Y&Sټ.hW#xzP~._1R#@OS LXCp͕I%Zt Vq7fvWio{Ͼ=fa2hw N)_Q%\wᒜkF -1)WU$iJ(]k]*򷗳31[/\-lf߼ wƌapCpݶV@a>h{}j4^&Kk X O7[7@ {],.B\?6]"Ȅ$}ob^y<}ݮK#$WZjLKXeG~`_no6q9,klv7o/v6f[c2?_~>m쑅驀@h &^$LO@Y9a\E;2 P|I-e0 (*S0*o NGv+N RXLʰH1&3ʒᶀD#1dB1^wdzXhKސ;:K;;u@k{Ϟd.l֡8۽ՕE9 Q]L#xh6f +ͶfԧѠܖٓ5cx5ÚZau~' 4} +FN,u\w&^R 2_r"4zWk.Sw`$e8*#b7ߝMx;c.̍yTvy 4^YT'n QԸnNu#*Vw]e](mwzḱ!~3`ғWZz|S6Mo (xDpaDY%~,FG <  v*Ppti&o>Y(fDcfu_8l*Hfݪnvκ 0eUn_5A&b Rtntϊ1#.CXWe/*\Mu(0yw,T/hKSl u$t- G "c~s lev* qq3pppᕫ^sEf*ah3*53~zht1864 HJ5M;~ە~,]gN7/aua mW?G])  "`ir~.b)h\gx1\T`} !Ҩ’._\ ?aA&Ob< 1{HGpŘ T"q%x c<>iFQ`fF `q@zJBv Knt?^6^NznٗؖULSt/6e:>l X[1!Yt$/K=`MX%n./yЇMlNLiqUVgQ8 Mp^1YFӺ=xdt|~c!B %6!i%fP0 Q2EGp}V"zƎ/O'_(yշ_}37Imge-A,R`I5F)\#UD}r8zܪ؟< vXx9XJ\NՕ=Uk>:ȱx\2ڇ+x19<[C z`m 6 @l, ib楇FVi;tc6Sb .lؒ 2@H ÒcCۏDhTH<= >7HR%H {}C5,":OF UJwś?W/{JIQx*sph_nG 1y,=ZNS{U}ru,xi ᲳEXa< (œY*d||j>}-sdV%FOwn?[˛UNKN9+҂YZ LyH-mKn+ރ/W8[^Q[|?z}Jv4wvXꟜ|X$0z%3Tデ@1WՂ#y&Lco8>U . a'XC*euK lkR}(%aQ+Mڶ@dX5@s <%%aLzKXBj!J@$,lHbRxdNWsgwÉڊw_=kʇն@>ɋ!ɦSF#9ܥ*0M;W abWSЋ;1/ -- ji'[9v"ܱC:X<b%4b^%/-Uh.n${oj~;,_glLƨإpJ/Mt{aά}6X n0d]Ԙ:SlƼ۸djȁ*!e`swִb)6=&w~|pƛ~x%~:rûD9+"**r Zkc?org{ Vta9t퍉qzǭPqvpsV9 >CTV9d:5 ST"8!0hQJ‡ /T[E Wi<e*Wئi20޺g`դ TdY pxG(̥`M]D:9^--KT8l Ҭ {׃ݣt"]s{>|`tb.BEyj _a( {4Jbh&*sRD=T+•w%Yi7g\.J\.' R7=Nl=iL'\OҘ$BN$#$ "#sλY"(-93ǓTܞ.9ۼ{.gw6"޸frf^1rDlTجnuU8v:rU݋gV5vV|do] Jq?ⷎ.=)֊س<"JM\L=KQ$"kvi|_bFh>aa8*1QWyY/-RVcqOMGYQXIe.b dx3̣bd}mWvjx7=بb:הGy#F@ PâU,LJAgDZw_+ߞg|Yǥ \ $1KۏHq"@HTf;>abDfB#H%X u9f:}NĴ AEa3sf!H63&^B_Mkx3_'$iSM-Џ'f轹 7#wp:±{ąjQH,"KN׍Z'V5ldsQA 5a-_lz1 6@o1s2LF0%W`X/cN xrݡ UU'f[<9cTUXQ 9؞\}z5>u鹚$w(J`jXzWe a6E\1hubjM14=|qPLW@f%C%_7ZM]OMEkwRpfAA5}׃-*aJ3ЬS X==qx1ѹd|Y3W "\TqyR*gd$Lapϟ/86hnӒFG'˹+Hoqj o,gU ƴ@f_nߞC"Drb8*&c6"r ?6EoZo0u>GSZrx8-piUFΠ}hЙ5U8^:kEYB`f (P0s FWH+DVZύuKe>% OɈ?y=p"XRvq[ nOzSt @@Sl  -PI8A&ycVf3N$c~N;ov۝װqd خ8DE ]7i݉N#(1[Cb-Ilm߷,[L@ RFwf(0=Fx$,mXQl4*$Ԇƾ|o:zVg~ v (XO0mS3]{oɷ=cr~zY,fſ&,-H9rYv0i@8qr/6xǯ-No*e0~3ݹڰauvauȤm5vZ @<*215N1u*㐦d{45x^Zr;Lř8{D"@--Q,rF@0,R64?YkJ+PH_'.aY{9+ML`rxrte.]s{I|,.fޝ-Gi&K@ II8ŐknT1;l2=w2;%Wc"f`!h Rlo$VgǾldor \ 1lN$mɇ~eZO={ݒQ[Z ~l`r "Q'113WSJ*'LJ0C1Џp¡j{d"J ,QYU'$":IS@LEք`{!jcE 0ɹnZ%1gו۠@ 5`VSL*&`Ho~7^sȲvk6-ӄeT03ve>'I(YQ@0T%4;[ ;O,3Qьd$aRy4ˁ' +蜯jUc񐍭?ȴ!*G<4n\Cu @>뙶5o.\ŗlwgwuj&NgWmMmb5JC^ x!5wc~CPs]Pk44_4pu]W+m&ϝb|pKK+9y!9`ezʥUM$]ZFu/;NG s{ZA甄 X>=v|QvW2&QLDCNG`Ao"ZGպ:Ŏ1T]sk^vNҮ$"_->߆ (w*;ūuÅq;dZHZEh,ޚlIQ~cUi|[|vXGϓS#nas(|l?JYjd$ZNkv;]j`qnJo-w{ۂ^[n;4MC%`jGLP!'+׵$IJ,u8(A +0 K@4C@a=UO1GR ˷@$U`xg d.@cq9_ۇcNj~`˧cF B,xMhY=eR'nRoj+{93$^4ڭҗSsrۑk{G_ڭgJn[kT*yBR-xZ Nm2! WK{IGc roSY6 i|l _7pԍ IDAT=:}땮ωq'SǦd=B"(}/}yHXna0IYbJ8:~?97޿ 8].e^K7TʡyO.U]|(b&Ҡ4{F0P:wo*nU<._:j5?zE?t[yc۩Nbjt\ܞulĘcbtZgSHH",aň7T~ΈJb*I1JC=ac2@TNӒ(1Ǯ.8Pif30P6SʨZ}1 SJ+F[f2o2@N b|nM5D̄]9`V0c⥝|5ө5T`]`I 8@"0L$({  eux.KjGc0IJSs |G`ӪqlP 8޹P8(ir'r)X P|kNS?j f3n_8u vveLrakFúqOn)k`ȮTNy ($UaĤdZ$q0%]R.жn4ⰕVO)y>W'LG@rF #aE&BYU,x04؟~ߚa$\jXVjS ]3Ubpdp\~7 y$ҹӫPܚ$_쳫xDY?d!9ۓ虻vH;PMuw['uۨj)MgcMPuk,|XRdvU}:A30DBv[p 1X30qZ!|#C%Ѐ"âbS;naLSXtrC3nn>qnEew:RIŲLc>||pO_WT:붯dM42?lC&(~o/RJKjH˼K~)VT,X3uF#etg,!Cun"bC,"uՒ$:VqNv4[PFrƎ 9pXD)7z{#"@(ԛxFL=3xo(OCm?[Wg byyr䔃+WC +4Ka\7 lJ|W܅3t{vk uqu[*pV'}0?Ǐ$\GC@ \ xw*WXʰӤ´X0ƢV0 nJeEOxdMhe 8v'GU/{N*s`Sg 3.>4XD e*%ktۑLڶ:;n-=~䟌V+' "34Xf]ĦS'W`pi9+<;e&Drq]%jVN ,}$'K<%_FCjajBn/PyZ{Bm1{Qa=&®B@2 l+7\$3ڋ .|, #ŷe3Aj"xEI6ucO1Z@-n?rbvk n[ >XNKնnWie+趤m8@c2MlwU0%|#KKTVC٧VqxzN}hBhJ]r骢;5Yfw)DiQ#,Uè2+ GHpT$ 뉚\p?\xbrħ Ca_g#@ٜ{ϙs_U=~OZzm|a<ao?J3kix8oOuGpO.¨-7˂$,~gRFRYq樅ײrZw43cDXj{R?v;懝an aM̱|?*] U`Y4ܴZœe9NLZ|Qs.cc15{(!Zݫc-9"mخfǧk%`&WDPɯy7۹0b&vT7-73y7_^zi4t'Vo~\q 'ɠ9LX .|h|<;[$`^aeXsĿU~":˂b[8|"w([MX@;ZEY#\][aaYe Xĵj@!!+x)U0ByY79PfJFL"/o.n#{3 .wsJ2vǴz 8 rV!Ľߘe$O(`G^%L ;`N X3v;] 8?Ϳ|T}m$8p3mJ L0G|*IЌ 7 HԴHXL-R>yb`4,/KQMtFGj08x~_=cIq?* J<ϥ޽/?l!]y~šҍdv$Ole3jVlFuns'=F`?;̕Y~w2`Wtq;DyVhB Vǵ10(ccAtuϕK։nX _KM/(:9UV"Q$ U\+ \p5UG0[gS-jbd.pØH&Z0NdHK԰ YBŸ=U܊ܖa@.0zNͰtp[@]CT֩# XȒA4)&VD WOuvėؒcTit!g*V-REk22 $bO(>ݬk_cǗy=ea$?832>YYz?KJ\p 1&o.|,DLS>3?IZjtrЁ,qz\\qKjN3px>!לr}gM3]7)$Y;fFqи|Y ~I .!9 6 ˲n0KqpGFJLɹTmK#h-LR- b^֘FտJq d0_X8ll&6aj ԝM#G7T7ǺN_5?SӴ4XJI=ƈɕGĂ6P6.Cn?ܟqjmox!'$ҝy6]sКۍKl+½2$tnBӎ+j*ٚvhf7I) 4]ɵ̬r!JA1EYTUv*৔H$bejf6^) w9~zDLn*{I߰_C=Y]%sf*൨GoWq^30@hϡ;}8dža9,g{sw3V N< x3(ǴH?NT*Sƀ qu&Ym`-O]c\ϣ8_;kZRzlR}\چxj*I hlJ*kc>pВJמ-;v -G݊E4 w1w#v!I/1,ﰵ uwH6Go}› puaF~gegE˸aZfjHT, 䖈vҝbqoF#q#LRؖYٍg퓪Q ddi͸-ʩE\_R:֗Oby41Cpv&׳矮gi}=:7oGr&bKda>3 n M 6?dF#B "30,≃+#' .[ :] ?|Hݢ EQ&}Vw;ĕl8>C^pL=WHA)8 \ ¦=# pf1i̪P#K]n+PE힍ZX\v$Y֮.V"fQ\T3{Ed@lU^RzVFh!t.Duu VD61/cm?}~(I;0#,Psppq>! N;Ӫ3 '.SoF(eE`xiz8G {=޻lgBLx0.&D@@+[P(}EL@|ʈWjq,TU8(JnՕ就XHp p׆sǎYf|}v~W˷׳`͂g~BBlϭE:#$8X5s `ɕs1Yl*g؃qcW a$2x /.տ/Gq a;-^XEj3RnFkj!R+DM;LIhɮnVk^˺xj{jiTu-Ի[[]y 6[Q 耂zw:3 1d-0sJubZ  ,v"">|!t lN[/K8~qHYo~yhh'",FHL n "Z8܂!>S+4IX² MT)89?\QM~/ǴL׮M ~i)*:"fr=~14&ΖZPdv>{>H^$CUA"+OS<86nD#q>jW/^G 6S2֯zD/s7dX;.s9R K04d:{DKF(gYhƂ 3 y=yahO+6`bH i\Rw$IoIؘ(W"cRVƍGɭG?_WK_~P/KO'fWuDyT'm uDsmoh7pFp1CIz=&h P,-nouB2׻ g}p/ H篹iTo-jR)BƛJxVl7yvŊ$OG^(@O$:2 ,-X]`k?_"Ebhsj(ASWfI(7: n_u$K!M糗r+Y帪qAH0{yw3cgv9r<12f<{7۠âTQ2O\ee8QL𺻢=[&rDjoBG StlĠ@6<+]mg 40}ԋ8! ޑ8BChvzXӬ8ʦX7w1NfpnӁ}wUD xV;Wq"*+w LOpc|?`"Fqq Ȕ؇O'0ϩ6oh7*=];qɲ$bVVcYgw7?/l|pswvZmOIw.J/.H1Pmh =+pah؛oᙖWGTId0xہ(`an(sb j6TS, $5!P$TI: dGo2I<ޟ?O2+NyvDֵ2VlQ\A8'%QnIA6\Ӧ Hopy|Jz,y-?[W{rghu"'K lQ }`nt/6l\n`/% cӦka:G 5uU@pi@U\O "q%$hʗ;IZk(Q4!]7GKwZtDA!E,@C0,q#I mqpՠǝNO0=8hD@ @G`\T\O*FNcevAH 03̘&ptWdjq[hbn-Gvd Q *aؕ!U*b߭~Rr38RcG2Hqm%4[M_Ʒ"\\T]NZN~[8*;W=2.h~1mh8eAy'F IDAT2Y$,³lqeOO]<]~Sg-8nu Q7pC]DbbaR0 5\CDUP]%bKJɔzAoZ]5U]z˷VnzQ-9TQ~VƬ W9~U9-CwښALM7L#=%,: 7)AoMW"Z"܋? Xg؜S\vWQ?yJ7/EnTlƑkr5˲Ps =:ű]]-e I%Ё-UB_6 NL~lfúD[do j>7AVFn(ROH L_=+\y_)2 ^N~zvݷLXZ>\Nnϓgdχ%\|<-|EUB B0 P!kā`W*8֥|vt{LntYV_~w?I4 %'!DJ0&vwK8qQNe KK Xum=g*.пc k7,q, ZJnf*/}/\qX.DL͝Ss48bb-"pk{B]xͯE-ej7xфey:{wpx a&q( ȦumUՁI#g]鸿ͳҵGGG'  'zE Q-nj ԇ/kOR -Y&JAR#nZǣqX8E}|0fk)޸s-:HDp~~>۟0v|fne ߞ/<4ҜIYh!&{G(pJ`xlP408IS,0t[5r`pL>jB?,^[@ZhT+Z=8]:.N@jJf AP|x?ԻLl"G8Uk'$"L*Oh;}8 .2*MeѠchX_բ6]5JH80vE..I$l%6B<=w#AciJFᰵY(P C ||v2\Ͼ3QX[- 8Qỵ>=>!˨ *!PMV@cS#p3^@d'r/t\Lz=n0<^檪3pr Oá.ȕp!xu``n#rnb/Tm61kԁ$u] w.O[bwDpTn&l#+v`NĢ Pl*kpcdcC4XmKD%ayx%wu9R\oζԝr`xLtAHgdap۩0/XFd%EKYB1J#L>p#xuBxƱ.^%5kqx xűW,W-|hKwJqHLHkZ^ZKc嫡E1~w"vJr*wA2ngr8g9#}{-WW#UiL17q'v W/wC u!47nf P;]g0ŝ~voCj:nFJQ`O=^B6tgZkDP(r-k B0?͝,Q0މ˪bIrl֧M-99F P/.miﰇJ+aK4j cp&^k8^\?B.ecyG|r>:ǭ6d3(=_X`~C^=Z 0TJg=ZWTG"(jƮJ0WAl|s|3Qzo#Ź]8 ypϤD:򣮢ϝ\])pTWafK0fs9. \'p񨢦5?z=Gmw8ONΟ%]MזY@3C譖yI+pu[t _ZoYǢ7uꦥ:JuJp;VV pp Wa&SmBŕ7SE2l`^`RNVGpA*5xDY/Au$0%MSjH]Xsio:۽6 A9C`ҐCMZ? |OX?T\/fteas; }eaZX;'.aZ,i1mV8ʌ6lsSN$Iʥؙr29UIwԂ"H7g+s7o%{z2zvܽ!s/gsήpVfܹpl)'$wЎeti|Wϱ7 6)Dd%d6͘N3Hù>׉.?ke#ԩN/bE[1{8HQWPVm*`Vn!xֲMqZUS;.PQy,CC,u 4J*,\гm'#|[­ĢYL2xF,e7<2SXsw+"؁-ي?'$$kg:x}Rb\vf7nܗ_'~ywۙbgRg5(5 C\Z{{{#nxi,9uO?= n8_-p9n~}{p>Y?vY8,,Cu'qtL  <'pR%U0rʢH @PJQpr)ʶk῵t\RdR5J ؒJ8h+Q5.QwY%IKyT4bpBߨv>ck{pDQ(B`n;+ /.}ß=NO$KnXdEV U Rt%bg^b  ,,5x Y_/48'r!$DV3LB<+^"Y-o( 3i%c) x">˄H/oo~߾}{{? r/ͳUe_VϢxd `DG=J*oIe57k]IxsU{0`R@.;ik.5mz`x r{)s/b\,㳮u &Yh`fw$w@QNU\0NҢ?Xzq ՀnuͶ:0I_|"A+|/>..`Ff-ROn{S![ydu&i b jD-Yxln xm冕F1zҪ7IPϳ(7HTh&ܮz.&?6Nnod~2?Ƿ:F4/g 8ժJ׊a oL&32' OC = 8@.Np#+,/0BJ5p S"`:nwqzf l@X"wK{up.hk-Kݕ(PxYeR B_zF48k*V"av!~ p{0G3`8-5A֊I=lh`j&uc˒ cH>&euע RN8"{[|ENlmgp[l ԝ4X8Cnҭ3]vMT <,Q|N1,*4'́U@=ÓJ[CSX:igi ~[kLT'Kb\yGelP5ss!KЍ聇^}욆x]:BDCH#2-1GKXf4 9EsT궁a;"PHd ZNQ}RUc1 qKl0e9|J)W*',ܡm~|NӸŴM fKs&hR$ej,LP#³;,Á.4Ire0B `mqu$Gy]6(.p.̪0I|yYM\E^]7g\ufo(ןO׊pp"EC׬9GJ4w#P=~dX`/M=/X+ܐ#;0an ]+|2p1\l9蝪6.XioI=8geb(AQ=.q?(6 k {D)qQ&Ar %0\A!3EǪ2vMu j!XV]`t˱ صdaY+xҠKG B^_IN[@ĎI۩'N;!{o>p|rq??ug^h@$c 3z`%ݙ&@@*В< vS@|CCֻ>mk@\ Kf&bmj(PKͤt|jz` ogeOLǂZ+'}pSWqO#ŝvO$qOȨay_Z{G4mdprV x3VΟʒ(`:x,db7JU: = 2ëE_N;ٴ+:M+Tz5%8g1%ksSWjWcp_ X/f`X /xv~ 7~09`$([g3Qd(Dt&py&`$5' 0e*u Ӱ_iױ[w".4MQ ̴TlU%czFy@kxϯG76q=Sr|7˷,,wO$ɽԬ*rs2|GRxlY@DJX_\ۃhtqaTto;K  nGZx=+2rWYa>󺔃XtVT cQ7?0Yt2Ya藢~kG!-4[T9@57Hf,o{'_^ړ3-|pڴ{,0F*+;/,C6ERhQZ_u wdo%:QYY `Uw>ET,Ҏ 3b# YPG`Ÿsf|#Ċ|ޏ(};{M\3nSܞQHX++!wB+~9h aA5 65tt,7ūv࿟i"1*xNSuL绐lrYÈM,8 0p(k8t>BB"jZg]+|^0u.HIڮU)]QbIZ/£6H[`%b*6$Wޞ?:}HJ{ Pd}8h;[1_We] AG d٤1wP;j)KRKdы∆XʿV xEb3~pWu!-%ܹ%'rypr[`KGI[L.{xuY^"+Yխ ] >əgzTx?DSF9XuJ]~YzFBKGTk+sI,WR],Ϟ(( +A fu5 g<3qyAu+ǰqT҈l&YUwk_]&xE7Iy{6@m\p-[ΙU[N;d7 Wg?y{p ;<~Hp8+qK! xi(H(лKT0.2Y7wrSG2mPQ8NVCv ,ndl{17Z=[IӀz 2(%쮗ȃccI1%e3OA+%km_كO4SLY nyAG3)<7d*ǿ[X>@43+!6:m_0 Zݣ#7Z a`r(7Nђ]ArJLxľHS4_18c/ 8hJ~+c- g =t:N&uUx />ܴ?Xup 4/q=Gdt"\9Є%]cr,-ÕtzHExZ>^ >4"60%]Dp&iMpUj&59OlLx"Q*1bb;3*`҆T)P$D2y؋Qlz31TǓǭ|=9x8a@NaU_(L!@ulf+.x+ѱErݴϒGӖQ(.|1clWU_+H!R bU$]+8eFU`H>/< f'D@c:U<_VĹ~;Ӑ0lU(2XʣQZ^>7ٮkvlhg ɼA, ϟ" |a1׻8cCcs 2_NBg%Ҵ0S0w}lvA@%vJ@x-8bǠE,!:ka-LJh@j+eiKɘ mm^RKƿ#~m ^Kޱh`-<Ąjg9h{x |v~>X%ze-ҋ67G1!<{ d;0Pgm#K$ڮy)K)u#1$aeD2wLR$gi%5nU$ƾgdK#p=HUg&M$򧎛+*vJj>X##'li6Y4 $5<N5JUTQQ$^/~ă(o9N3lsX:<[V 3췕A%Z{{ҟ(}&o:[C dxt*q'u |, h`jKMNE0t\ՠ^|I_詈3M&.ҝ\kMEvB /ԋC@Sl%c`28Dm2VL Z7A[&'wiu4iűjfpqq"c'~_ܫoJ:^t<NU#Pp8.;⮑[DIyݱ,3PRVܖ ['Rp3!c'ogU8;`YT@"E[)jMXQׁPܤ^&c* R8hw' )bW}(XF6)(t.T;{W+VbXb|m-Wyv6n0z âNycOy$ `}(ͯ/NNV{ЊP;N.IQa|^8,(b*q>PH&JsW#= y,{Eg掿+[-4>lUKvGt7h!UGٚkR\&vVM5t^NhRNv;kbکiepֺ?;C'';')@y?QX  jB7-ѓa"`J>_q2+WI_v QYil\xmɏƕG|XTMFAKn:WRx`M4Pb5r&A;nnؙDEבj,M-iDT];%U䗢rkл0 V::^ӊMt?w@Xe]F7eAaؿ9ٖᦀ"u5zk`)ʆ&z%A y\V4-k1IJ|VKGb5 fwK O ]W(K]LPrQ[Q8zy;tF7)o~ѯ>EZc?>_R$~]$זg`cC:V }/+[Ãv bE`DSz*u#ieA`_:2mb-32+ѵ'= {)Ҽ]'Ymά2to/ɿ ꑙ2ך/vy-J֐/7u"3X҆(}H~n#]˺2]$E֔y GP+g3qJD)y|8Oϟ"W+1D%_@RmKlZL' $JD'&D;D7e[A >@0V&x? Ly%@LLjϙǟJ&Lֹ榳T0ls{Tlfw $r'IJY$vG< ᇏlܙu^;Rwd-])L\16eRh1z0A](}"kᤕUbb@DлXnbOfALL"#,dXĜf!Si958ݼ7[ltR/nk/\'At`2 wXD,]fGå[ /n'ڹU_SEJ{:)-NRar\_+{hJ`ftR-no?.rHm͝!dxl!& DCyXn&X hm9E55%I7b_- ?5Y5.uU7x# CURA*đ 8~*xEUgu݇ Ӽ](M$cVo}=H3L<&u];x 1Ug`X+ !Tg d+${ܖIqocix]?MXLz֥rEվޛ^4]/V\:0gzvr6%z ~"zUM؋UY6 b][ki:l ɗE\4 |2wj˻)`9l"UR7 ?TULW:C^BE=Cj{?ǯ(\~^c:bG1x"SlB'z`x*e͸ %OAsHJ~c[r0H ~s3ك2ҊJ`5"5<_q!׃VV 5 M^AA^^Mԓx/T(vPy6j`ʒZs%\:[Zj&2TlYR37u Ot#'aɄbKwT45QV(Ti s7υZhk{:gLˀ]/7fPPJWF,(t9Z7> 2!]32^*6]H ^p+sd۪"\PJtSW'77#/V0s}OY`I|Vм@UZ9`Y Fpy/Kv8ML .$@l2mAIL_0j][ uB6keT\$ym7 ,T" ^|.8=Q 8Y! Q;{nZ"Kً_|:|ObJ΃m{K3CQ1S^hv\`šlH p}Yb|Zq)$|E̓SXIQT^b]=ϊ5-oj[zh]'oA*4jbFk7 qA!yE_*(\/)=YZA``u'ޟilGX%'|.~l[ mXG%xPe8e^J|:-򜮻%X.re{(0z|-t*nLѰg5Z~51f”Y_}.`MfTmb_Zf ׏;O)K>&!'L,g/A !Z3ԒJ OO]IUF%x*M(\Y _&q0@IodQōj8qLoZ( x$C[p`KOtmQyǠ@㔗L\1fe)͋YՓ04OxWnr\N˲mB韁HU^XV P9DAt/>s,^Bw*7IL-uekÍU;v+_ዳ_z?͟秃9CL>yjҩF;ADp*D`ݛb4f)7Nkv2>qH5ngV&bzY\Og9f_TbQfw8[Nngïk׈^+fnoTb IDAT:fAfQT٥Y^Ї.Mt#Dg.JBJ슫a>ߵ 41q3;֟&Q |8 ȋ6YS +qe&kXa&`pCȴ|9ѱ4z~؎QnMlGs*@ѠXְrQYsff;WYJg#9 QO>#3T]kٻ?oIY~DO^HpnD-]BmP(8xmpX2b|L\u,ƈhqm -[ '; ,2l/Ʀ_F/ו9V4s s:'('")Vt] Al&D"/EDy+]5d&>C NmO1{ɼ".QtV::[@;gyħ L )Op!]M*(RÙ9lc),(e<ً’:V;O]Xgi(2F "\VM %/#&C,Pybʟ׼TZ Qf tMhAnӡ8Huy8| ըwȯ?؇  ]5#!J& cYVES7nx "jނ9&Dzن؏,e"rߑHdE֞fP}ԾP|q,BJ~ 416[lěh(rKwW^Jd 4WT16RD]M/Aˢ I62E&pCe# )phV2X,YςM`qP(0ӵ5}w9ջlwgbQśCByf!o cy ZūOꁊ\l7> e4\@&CaV?$Lng}LtҔN{|ONS؉# se΍)\Cez@n c1kgi1] أv%z,=ox'~T3-ϛ0>WM5JLT!~N52ȲckB=HP)G ͈fՏߵgJ7 /ۉyyBSd#>ĀKD:~"k hFőKyb䗢.u0., 0T@2>t5jCSfzf鉀>,6"ˠd]o:[KJK#غ^OI_I#zzPcrM1ЃkB܈u|?U!TP&;e7v;=U P_ISTׯ^߿@Y1=́ G1i s ז{.ˎCdPQkWȭ-9R8 Esv;N;uD#jݼПvPR~-=Tg/d?wOh`|71ƛcEбǰsŦ*ˤgvr/\HJ%E)<LiW}DV`f$lXY% P)4Jʟ MN$9TvZgHnϗ:آá:ǽis⎿%@|y6 SHby&(`n~*Wu:rكOK%.R[[VQ5/y,sM{N ef.1p 4,a&"#sV$?~L=ZXsMnoDY2]!nel9.ׁqħgE>!їOӓ: t*Kʢ.J\Q0˝SX*kw~^`e)*wʬD( 30ARm[yJN]_չ_]`C3ӨhX+f>r~1I|O_VNd]oUG?1%z5`۲ aBD#c+& Uuqj5h\(Fߎ$(>P.óޛ7NU~LVBM_xd;;32 l:w-:+@ϺE}+/L|]ujs]&w[PkE6,"oFz4(X^iMpbW:ȳz RTYm>s_!tv Ube( Y%m ЛVyHW f 痗T9Q]UOWP,ty)ţțI!꽤ȏ#ʮڧLP~w/rZ&6>*O]NarŔs(-ˮ rW x0gNC̖E/)眳] # ?0>hi#b5Y䅥p<{h>4,. 6zD({]wuWJUM%]+ḃm/N߹Ud>|ś;:67|UO@w¡*JޯND<<`yŒN|a`wȖ`fZ`IQJL2=/-QSJY2a7Rb?SDŖtz`ɥ% iҖM$b_ef?)=zէ99$(sr$Oo~sNU`v ]j>6{깔촚NWIt=*"$J AW#A8lkC(FRתּy9虐SX!e썂6((ci`q,XxXAEEہ0{9nIuLV t4BaCyӓ )9PBtoHpŋev$} o񳷯ތ<_a-(?/&YߜN,/{#m_bEf,RröH*/͈2hdc 3{|0Tі݋Ŋm&s+r!Dvw"3EVYL f5t4xe |! 2]'Y psEr'0ZuJ uyVWSH.d֭^: 2}%zGs;k)3aTj+etߝw!U,nԝϋ-Evtͫ9N۝+Y@WSu~`kV-Ńu઄&M &eR˭6 2<,бz| PKeTE_1'lyGBس;ì 38k\_FZF #*lQ z+0<[p*<ɝ^3~LCޏ~BQK6=* JEp+*o=֢ߢ/OQnGtr#ŋeQdz(o[UqnUWy0{#J 5=ݲo,V(3[bXM"2w5zm}ߌz^΅mS@DG8QX D4؊`{ȪJWOT]XUNEy]e7 ݧ'#:]zt }v)gHׅMkLF,PgC C(Ru|PS:u~"?(Vx1l]\fEft lI+0׿(r8O2[z s[ l}*HON݅Y[jIFqw*NѤ C3ӕpPR=ٿa@&ޏGQQ401@;\Jm>@ FQ%}U¦ rrmiW(آ1qlAD%s1+\FAKW AKqJSֶvη m; &-fDb6mѐYf830Uu}N!dfUun8 5]y5em&[Z`!3^-=R=BFiwxvDjb58uMR{zԥiD/Ѻ^ӱԙQo}sk"R zD^<MA\Iׂ̳<-AG ЬEk;tx T}/S] %Ua"]R \< SPBH(Kk# :&@Yɇ&m>骳GYӕG/ҩl%x'cmwD+7`a3Z,K 4d *\ o=7MOBY۶V8Ԫq{ ozS|8~^m $vT7,G3MXE&ҵ2iLW9|o@%WqTکnF,k* tnAݣ&f*u9H3IlfTЋ:e@ۘHuZZni&S&24Di%68JX}*ʚRb,}cQvT.5z\ذ{9p@'{%Qo^"\(PK,1284]Qd9("vs` Ayj'R㱊97:S9,P"u6k&KBOl)9, ^ 7|PGnƫ@ lV,DQ1z[4fα ^:o_̌ƈ!-AN`Y k#InWs[Gg_wIOFcEG?-Ճ Q*^׋ܣBo_>>s}9k/>)3zAXpcXLn6tSyz&Y[;i--?˼R?um40PhY3nY aWNfIbcԅUg{- V M2L=)Ѐd=]xrtDUiZIysOONwi՟8[\:/dX`5P!5+'G pz;+qvUvʾ˂=:B~/jL$1H_B4wj.V6h)/)XMݨU= 7Ǩ*;ciwMyN$f{_ԂJnt[fBagXN[tg2 |BaY_BԷK(+,1u.2? z"dk}}pv]R>?;7c:4zPBz4!H'4pRwkY#mi,*4Vey$|; 436-3_~:CymM˅SH}ٍ(.Sɨz ARq8o¥䎬c!>JWJopPp HWk#cA< 2 ht2Y֓';*XBjvP5.TUF$Qm"K^W.Rʙ*_Q`޴퇾@ 4|hnRQk~2Є\!(|/YCb-p^yᛔAʝz[ENFlז=E–Jt&O43uj.:6374L2a[QE]ao~! W'1*dvwX>u.TIDj`By]Efw]ܛJ tԗO7AC)yJ{hḒ˄&gsmQpX٤؆;-칛X#qD[֖BYaC7 IDAT`f>%tGyIr;Q/D9$JRK'8? PHQq|6ڊ}u'T߅rg(izذ,!{~7P7߹VvIVp ccbctk˓ =\d8XFnLyRЁH >fCycS*v\^# u&K('A}"UAu/XvܽDb3k F.vi6 M(yH#Ij;ybCWb4$3QLrUt U&tQo|yr :]S 8CF[ j#*'f5A, 5~\m /_ =Tdye^>[EQJ Ds{ǜvVKm&^dJmJRΎSR1Eh83亚WD<BѮdUHJ(/'^1ꊢ4IO/(99B,ѵ8L/Bޭ\ףԚbڌ Sr1O~c.FEVwhyPmOy|DJiFyQ[|O)f? EšXF sBWXdcn"Åx}BMS?_,1qQw=TtB6T FC1] >GC-'tӜS:;7UE/zm*ǬR8(23r[5e I> f3're󓙬iSʤ5u{V;He$3/PEBT%DhH3C9AlȖ-̅YTZ֪$g*16 ه-.\hٺCOجD@^M]Dl9QIc 5}`EP`kAy XA_ M9B;0udJYXګCM騡Θ$l*daVS2>Q5GXRqʳΟ}4GU} /(=h<Ljʳ1 X'`t tJ2,ӾGbG< [%O 4@]G-c#! 62bcof2Z6|TY`IzBr3*}ߏ+ÎK) ٛx6R4f#YYrt]rLllɸL'\MKF{LS(ALmk)WQ hH1;D^lƫ(0M{Ue[yk.O ѣof`\4oD-sYgthfQO1ڍ`hc>Y 3R` :IFnX:y ;k߼0Q(nnG<}]vvfomu?w0U9@ I0(K\]2PAC:j d(묶TEtE_SXwvE˪M/(r"Ӑ5C0zl{Ík\V|ef~fӴ|{/nPmwBJRm8I.#$MvI]7~l7Pr=# tET-94)4t aDI)nʷ%r2}3hoپ V:پH*koE1%D|bѧbEOKTZbBOaq-CڜWX ܼ>+:ŐN\1H(V)BJ;9ѯ2}ػi% uV,nWBN_|,ZR>S;MV'd|ě",X[yW?hȭD35(YKѼx[3 ZKT5&sh o$P &͔bAO5-u#vBގo۲T(W6Ze}8 -]뉬Gi :Q@ukS"L>(%o]PNRUJ.=lR.:|y39g:MAioRQNݲEdkTYO*h@r\t/fP>_ޫQo~;֓fZ{$ɳF0~JjSQd6#tZTp9L }X4\S;6f:Hb gۀlOJBforUlRsQsq(s-Pđg\_iU$t.8Fmeim`¹C!}LUu9&kyY7b鑷CGcWǟЭn(xkֈ+V*F/ FKW.Aެ잮/9%8t5><Ӟv0Y˯>)S92|U+c؟њCktrȘZuOà ]6+3`ݷ)#|@uU6C+؜^:?L_Cy"]USWL1V.ɦb1jқv)UlHPfp+J<[vFb:A' L Wu7r**iR0U모ߪ8*rR| 7@qs(9QdFdOWE-+Ml[5 ˆQT/(jIu_YX(KlXҿ.ڛ1U s[3xe ~sy}얰?E=E=F $!6<1]~`MQn}U?uZL{dوҝ\=tyR ǷWB$Rl>0(Y~eÖ Rlm`m89W̬_;|BDFT9dT(Q.U͵ZYD X+z-8^!VgB٬p {p6Xͳnd}Ӄ8ݝ<Gb 7ᵬh3|3 n7%ŗY]VAhx2Q\z!y [/u k~G*8gV# (<߈0Be@ Z萛Wˣ Fp2:{w0MxaD_.d.w-hXl28J[$CKSC+bQݫ}mG^(Z_,/ތ`![La(wz?oZY{HBԟyQjm'pTY-YE(>ߧ_)aIŨ0'qoH)"Y_k+nh/A/.LorɧrfN%]IwHSyI%k ӫ+s'ݫe|,䝶ϓl/è{Jɬ5& <!DhZ>ζPm4,`ǚ|0eACC7!rNfKVzI.E`2PNniՌ>;) ޿юaj m,{qN6bY W/uf^ӧ]W7m iGQyߕ.lйc<lE|*:v#+}i 8TTlU~j*\  z:<6(?Mi~u{|;"ӊ3SK٦K= =z.rdOzGt KP6x^KqKn;;`C~1MSb/Xn)ꥺPN{Ѿϴydf@zmZ{F³zOok g!TTHH:jEزACj1d,c280YH!P{یr!)C|}:}浚, HRgd,'"O (ͱ8cd6ͺұPϴ 臮5u̻_4Uބg? }tܿy"ԓx/(ac*GؽRP >NlĬ9CpV;^Tre'(ݝ7b["B@S^.( W'b{Y ;ߐ̱@˔iQZߖ<0[^o(#ȼ}e` *R,aXqĆ øBdN^kۥK:_ޜI֙?>) ur뻈Nwv\[ԉ<ɋ_fу < dდ@ momZHh`1ZԖ*dmb`Ay/3w` 9\23嶊tvh߲AeE@e1gSdBŰ`X[,U.V9ǜ>'rZ9(E+{[ɪaOxN};ug)K!>6.PI JK]f̎ScC~eDPQa@ކ \àǀo "_GE)Jf}  ?B#5"@k ǢrT@A*kU?Г]Q sW-m%H) C\ޝ@yZPQNG~P{j7\L$Ht:.uh˲:Gq1c {Ck~c*)".N=&DOk\sXǙ/w:P !ybcƈhq@Ö U9fX!qaPeg$?^|vnz#MZJPD?WgQݑ" Pb\5e vKl!vU}4% K+bM^AQbH+ʿ c%Hy Lzdt#f2M|BSuNKSM]f(͡䞂;v}o3UiT2YVP)|j !A>nwٳ2=|uHW:hxAUkDŽE7Ἶj]n3mz(]W)ͯ~dFuX6i8̀pp;e|=8?'*'}8 kyzأ[% g75o>އǷ:u₦-\}c$S6ҋ|0X43Օ3û~ِ;4e[/+󃻻To"LS2o$JdċߢwrX+Ps?K+^tc*Kz~-l)[=\ZPsJNl֪JF*j念wξER!x3ʡ|]w>OQpṳKY%ΟbQ?E+_cRf.aM{ #/=UF:X{"0%rĭBGt_%^Dd[ge4&Wn$xfE9G L<zIM2U($.Q.UMg=ً@+?}[bRnD &ֱl4S d e9^ 4"%2|.%]y*Keu?}d5.W +Fr+czi/'1` , ɢ1)dE&M a+d}*BNNV{Yg=(rg޿ IDATrݾU~RmGѣ&6ggbR 5XMH8$du(B,U w*תjU[]fj޶XI,{<{SQN#Ӫ{ećE01;ޯ4YﺧO.x'򨫭\ ٷ FΖhpBhSۊnѨ< F;78q yA-؀XM,2B܁=-/ExnJx0Ji_p.D;9i 1Y|),֒B88)!Pbd?$mV6۔*M}a;dyS.O #M miS6qi(Bd6spd@Zev΀\nG(#YV㮪j3]>l]ٵP9](DKp S){p6X: qc1 B<>"XRJ-c(n$1/T"/9P*J/pjBxfTraCm)n&،Hʹ4!9L-1rM,4#B=NEQ[74ދ_x҉jZk=iZOƸQ/{No7߷lX{Y2cH vm3NY֣7dIXse s)3b0M7N/f[O9 ǕI=>yGКz=f:.)}" ̤lo~&VP{QUώ)dyBr5Ku& |ˍDo;1nDCIAJ=qq\Wm+r>;c]?u[j7ѿFuÃHeIڳ'OΣamv3ObVKn }M352/s\FX}zɡv dsRA!AMF1},weVbȆ1tda%8p+"|CQց^HӴtk/ӝU[;mjWiqotjGO è7P@Lig3?: K' fܚ&mz%=p}ft:R aACWd&ҷ3 c//i}~['L}NI&HqA( 6(GAIB[℄"J=]|AK^YԘ V]qBsq>y*_ M?yɡr|R8j!]EUzƹ+6a `zwwC6==YvUa)0c뢄{ II :27'--"d(!ڋQ0tY '//^0CNɑ*y`1V(X8) . bkF)#bnqwX^ؠg;ATP\jT`#j|PtڨpS~b;d@=s4(q{xcSZiA52EnҍMGSce 0 G» flr)5X$*Ny~P\T鞌g zmR#bb˵LD0AF EP^Lns! @[vK8{)fƁ_d"Pp'K6Pg+!uŠrjf`5<Z嘆 u\y ΠpUst1._m .P3:Ԝt!=z Yk\wyDŜ 5$3lrb#F( KrbxyM q_wjPC6!=?nr]!.R2sªTM\ wY [P/<聃~Ӥ/a'řpJr墩3䃅=; 4V@Hi{г}{aՆ>yOn7^Z¸QGkYU:YNjkܭιt?j|yZI)mɣu4'b ^`G.8l"/b\ QH%՜YS*IWTa [TB' ? ((fae(-/4\P(%Zӯ*rߞbHϬ?aCR`ڡ炶榈'CJ Ƽ0] Akl%LGY1΀OA"JB##lF M G0lvL1kCzLE9kϨ`jR$bRFxYp_tlS /2<}驪=9vuYޠ70˪ڵB4FOwOwp7_6a'ĈVXJ֘RR%ph.&'olu6ʱ,=yЫ,qKx2 K6K G 6Q"EhX=p.gtN94ď]̱ɑ ҁTշ''nk|P}BbɭW{`iw+8r4R-2G#2\zMS@[ m Xf̚n>:Qg+4a7 h 5˰KψoTzK/0S=NP;$] 6}s0U$"9_> owv|M5yJ0źN6]@ӭm kۃں6DX7)pBCD ,sq8>qCv[s=.*&`BLW(Ķj$" h3Z PJ'O-&:B A0eQ΢EB>ߪ $㔬-}z.ëV;8W+&[m;ԍvV'5U]5z}D7雿㿜d'YY9dX0M͕ W^QSDa[XBq lހ YL}Z5ʠY6TKiX'`@Әw!ԗNSBųIxӏG+a*a͋|㳨̣ d>(&,H۝cg x_*W{HGʑBn+W9<ìI|O HO{6힬͉c[G;S7#!`2-QRVa K҉io#B'o /XT!W.%֗,+Ve @:C!n(| fG9" 9k gVPH2KL-v*z`v( D,SHowT~\ '!)ށ 3~Ѷ[Ykҁw/.`^2ӿ/b1tm)zNb) d:f?&xKp y6ƋM<˜jxcBCK>W+w9P>Y#1n6 =bʘ @4̎ b9{ 7yZP!R~zyӃve#5NDWj@ϻw֪vc>XP#3cV K*V 8L2#^8K&OxW>ᰞ`bb!qgQ~]30oԟ6CwvZ5ߠݗo  3t]CϲtՇ ")= $W,qߡ~R=Uεwn媢#pG7{|( S;ǯA(Wa;xxǛ-ˑ J8~ 4r :@-2wS'JM[̓di mB8%S¼D(:eM.v/V'KeHpYE*L0Y–1LolQy]VqpX@2" G#^SV"k͵=o? FQ`wzIj58R2bd~Ww2}Zmm 6nO?&A^p RBh 'x=:I5OYBYzCbjXNMma!;$VY\K^)ي!rM0]!~9c{Vh/w~nGx'&K^qt O F!T>+o~E3f* 6ù(|ܐ-@=qtCr  q$&(?r]ZfpʊO1L )Sj%׍mj܄Be엙qrhz1IxkfͅWrNXd* ) =ֻΡ 3ɇUJ~Vqj彡ޜ˅vC{|ᴣԴ3-{gzRk5Rzӿyzl,Q=œ4!$j:WOK"we:V?(sΠAL+醺%mkP|oA;#HQ"PQ0oŅ3(py;XKc*芦pZǺ?>k]T/MkHxN2ðٻc{mPnޣVzvmWjZ=V CP>w|>qRӃ(<% gm}r</wTXJ绗`Q8K؇:߃9r~Yn&lsS !Aa=_, Ą8' \ u-Pw0^{mojo%wF/&5ΎOuW>>Si7nh~z?qٻ7Z0xGU#i^l7KT0xM RvM. d |'P f8HD͆9аP8`:͒=j/1Sf#6 U,ނRf6yg#g8q,B?j '_9LZG]J,֛Vjn|hQ߇oT*Je97q)i6:3JEvpLdbRA= r (фŴ` {z/1mtdڜ?lf ̰pD;?\L`D=̗'s 40ߎɓ1cj/*ƽ'NB'Z`ah'ڕXPj-A|S6+W gbtVbX/0N]Wm{zru{ePӯ= 6JǸ>Ee39Bjⴌ0 A)OU+ERrĪ˂}Kŕx%CT9!(4mLW,S;B&ofq+-f K-&q;*6!Kj[6q/-v$q ΂  OTVYdهz7}Hz҃v[*-U5uFKW oj;(C|m3fb>Âe,z4 x'Y5d Q>?g̮:X&ev &AλuqFN.ðǃ,`z1Tp.'b3/.tgv d]җ25쐳бfvӸ֍{u>.EQ'_ztԑ'7U:5=^PU]jo"!Zw$/"Ҙt+CB,tSx+EC,nb*a&V{#J }̧DvARgIs>0֡=%V̬j txx+%>G<^u#K|d U%*pC2:nݹU=DV)ڙRpx@/[pϹ哳l. kJxI@4$TLuķpaCAl.,qu%i})"'m@v{"gL\L(P&l7Y >d53)S(fA{+NڰЁ-Tōxtg3!eeK9>8\P8UE݆R.TիE5A5Hj#@G~l)@(2 \,J,UJ-qSq`,æ((vs!ǡ.|c9!gXZdOy=eSsrȕf-PE(-a bc8-!>fv^Wz{#ۢѻڶz8QojCztA?ћ&kCfn%vTl?I $Ʃ%~ s P"'M9n77Xi7k+?i/ x!hMY2!n@Ke26OB>hCOGߊB0P} D/O6҃L Ϡl9Y 9~˝E* zpFGrZ:voC ϋ\Q\=R}kE{v6.:Q.__S[*SIeptA0WΗXkI"ϒdccRO'.+rXgEqe"%w!byQ9.K*oKǁ +hT]J8#'Vzd^ƸRQp+BT{sH/TXqƑúCI”fC.ڏ#g2.H'!)a>A]0l& E kowx0 ތR"eLCC{I̧*0;JX <،Ѿi4 ]ӢwWc8W/j>C>PmKCA1{՟Cmò+3b   [` $P3hEҡzeE<ė.$(# ~#0b] CQƊ.eN >TIhZ RX%)+V4L7|X۹x Acʀ뮄 IDATn{XQiy`䇞u8Y90Q/1J>%Vpbq J+^g?{HdipAuguhpb`aDb,c S{ >(S&MS'|NWGF_1]qK f탄wqK;̝E1 )nҟtd\Oai¬&rګlGB[-m<ҵunUfQתR|Wn]hQUT%k;Ws@Ho3u=Ŝ(.dLM0psV͒UsJ)dfH8p&aWZ/gB(Cߴ/ :i&4\@Ꚅ{qD;؄A̰H\1Ma[biA3%@, !]Dkw_T:ֺ8t6z޵R{W:?ںeh20[y-vey tʼng\Ltby l) kH'"fҀD5$B3KF7KhQz'5+%R&9X&4qlFM|y] e 9-+Q({Qwkzu<UjGnϫU񱮏Fa#,V bHp0wB+اA!1UYEi`PΊ>U=J{ C˜mXNBؠִې F嘛X٣C")džI]g33>zl3:ƛiNmHܒ_pTh5Z+C].02y V a2<>aks.zYjײA=veųwOZFvE'g _0BPŒ W eSا΍Yy3(˘.'nN_ 7"G"-AҞre{5VIM>}*)X&zsn81g[ r行PaU}g\AH5z"xF`vѺۡBAբ\HVmx:!_m}FKD~[m{FExߤL+-s%n)҇Y_RYr@8i@J1e2onK]Vz|4{IM-"d&[(A#v 0C]` y 9G=~{1$mzޚOGy9),/*`~>|YHTW/U8 UyިT#N>˺?8ӽW[̳VoLW g1_%v[F  -qV֜k15y2<"9߮98 Sb4q W^q0Zce:rqh"/_(d hC&R\C_`%]92 1j- g:JTzW\>.^Mj=e ?lXsJEʉ%ڲ@T}0㊹IҮ36  %!,&} dq`Nqެ/(gI bb{0=hs8Κ1=^`Q&$h#3IqkQ=Q Pɱ>B99;<==RԲ ;@ =]/2}<y ~lQn(?˘pH4w>(P7w[Sh,pB&%\p̤hia&*[X t1a*,X.]/Cq S>z+0%@p-Lvz#:Uy5%\~8'':E^U_S1o|РC/xP9*"EJ@`{J\RELl| >As?|Ji " E7:ʛ^EQuD1WnMpFY/) !LKa @A" O`$C`QEF7EJ1>A  oxR6+b@IߴYR_Q7i\A#&*bdqtrkdnQdt-Y<p q@j)g=LzTGU zX<(n;b΅;q|ӺW c?2<ۥg 1G[ .$T`PFmqkzD< q`5q3SD/o $7A.Ԍ90dd|x /R6Q!}lvzJkZQaw~o#mHEޮ5ћƇH>24Mg86FQ |7k4`" SR]QoS6a)H&dh//aZ! f" KбI8LY- $`_XdwgLǴ k`k\]p6,TI68f4l̞bz7+r?0'B%_*C㞐6hꍁKˠZ+j*A aymF]h޺?G5ٞ@oVW՞ѻ7eMm<{BQ~Ϲ>\;'Ĕwlu9sG̩rFush݄4 zCo‡"oRX֘j%8![7u(x!_y1h ~2 ux\Ad0XL9`Jce,JwvgkctFZ c_tb4]makӥOSxLeE&H;#F+%1|"Ts,>,Y"%i`G 8:ZT%Xf @)-%\xRY⺓ zpI%d)7 k>NN*|i t2 =HFV{v+jaz?<ܛ93 ώs^nHu劰SsgPĐ`0c>" 84iS]wVnO= j6 LU`7s/g1LL!  ߃yapaD@x>sŴYdr\ubE a{T5DV[ tUo7#1Z\$_K>Ǎ>!GZD" є0t^-''cKXh?k7' Etr^ԑ,HVXЙYW;8H+ `w*jzc$ֈϨw(UWFblFUUşJ/n|9LVT^o\w3 pObwE()=Jmw=[ѿX{rkt2HM3L+JAKvT=>{$}q(; W/L04HhqsNɔp Au3Y5 `+u#Ƭl0֚ HڦF?Cz]Fqt0$Q~f'O=WM VE ^ <6 ! vb>C8>OYC! )8Wf}&3l $\51!LDq¹5_¬̀ /Ym1w~1 x 'qtnple-#aMm ,N)}no?J.(< qNW8QȰS.,Yhō^U{c4\GxMusej1^)FW+'o4Yl LS+y*9t 6Άf5hp<Ƞu`_[ 0A6p6l0FvhƘga=6)x#D:QZiϐ.J Xq{>uw>qMlTe]?C=eF~x٫tz\V_^c~n kzj+GG/~h] @LXh ę]'0K^-R*LQ4 ptD9w eyESKEeyE`rpy=y晢/R4(a'n[5c7zvJUMlK○>9^R~;4aEo3D(ztB $7ϭ\AB_`{l/E QrljKy'½oU\A4옥liN/W`SP-?'D>X 9gidpx/ct7W~c'T1^ e> ǣNG PzQX7/.vIe%V/s"bmrp]",_F GL%qk1Crd]:L/$ -D+x()\0jȗ;|i$=7t Ɓ3KYsOf`֒(άVX67&[}5o軠nQ ĶAi~s8(^fjf";z kTPPe;ߴ:NBU=즃%r^.X?z quu$yvY{-]Q_Xڐl:hQJmɒŠWHRf/ gG`^ 'ļdsa#z,y6G)#\1XAL ^KdRbcd*GnJQi|o'gW~WgᮚkAxv>Xº3EjCĬ5  e2v뗄q37(!.^R=n㋃ $N,٨i?YaB@MaFVTL}9EItR8Nر{W, IDAT$HצΑeMhZFvCvchkD; j#P,n{Ҷmn_pSV;2qقN#|^h ɍq u_,2NP0CpJ1jSj 1Aɠ=>D'@ sXP$Z`ʈwPZ,3t)Jww5zhz6\9u޸/rݻjh?+?};f |H![DSe4ط+S┈CAO_պR_uitf ]W8PGۊU8V)a,bSozw0uRjC<5v!G R=w)y/ y6//ݝvPld H7jzUU5QkuUMl>| ~Bd~(/_/t#r!34en Sy$-) /)n쑷p$K&Vz4ZSs,t$l]bDuYOvZ=E-Fw=>犡^[W=a]]!B`C.&9-}Nae6 t)E^zo8l/]5{T(OgTZW;)23T9g`f_yN=?K3g.bSuׄmh oE6zEVoQmV_*nȭNOo܎ n95{zGZ1ֆtaГ'9`J>.ܲDc5rF2!J_DLB 24g_ǁ#&+ FZ<vpcً=_xTKIs%X-G,ljA/>),NߑAEwx8cj[CQFŨTͳ݆}saUU{TlSPa7S{AƎ,A!S@Y1_b jYa[&PHѧZ5@ 2B˲tA  ,ۏ6Oi IpE .(cC :s28 ̞"yXeM#t ݁i2nP[ՋU3u~|Ϋ~jp=^&={EW_͏т)0Ԫ Sru^J2(tKg`kAH_1]89{,('0ȴ=v,N0lEҚ)q)~hx3{k/<]"7 0FiP!&1p'!oի8Y[8W5:՗k=03fz%l'@ ۻ.f̗}؊!+zA  6kKf.`+NAqq”dޙ(a N#Am~?p n !Am{)6w{Q1 H&?yZ*vMqֻzݯiyޑ/  !Y{C̞-(pX|Pxeᾇ1N~@Q!qJ k/)ښ0}:+ WK(kHq_, 4ۇBb-8I$'i&r ؂X\"6Aɼ~t)6N/bBtxb[JwH"T1m=1.-u2ԯ+~}QUtz/l(6nNzg7>̡ѧ_-44m B`z9/ld%tRAO $ux؄`0D Y( aùe3f|,CFN}/G=aބ=?6J@ƅȴĉUF<:4>J]4ҿif4Hl<6>mֆ[Y~dY`t֏^wꭎj4\א$AKyTA]:x#rwT>P3^>S\`7g\4N??8zzɇ=0Ϋ/^RNY_! `g^!IR&;7c|0'wV>GMh CK1g*Ed1A˅$< Tמּ1:‹o%:cTA,XsVhJ\,(\lX[I,`!Z>UkCJ&|B[4nWxj2ھ6KMf4z^ D*os{~oC!A;==~~orbzd:h81 z %^r哳,F` "*4&3 SsJ3e"30偲% 2s`(ģM Bm[kTbJ>wxX鰓@'|V^7jaZjZwng\zq\FO5~߽dP8q.`%S6^`a4Ԙ^RiDѻ+7JihRz.:b+ xtWشkx/g+LlfP!Y0|s콽!Tf5ٖG2UOxux s07̡?&XTNKB0hu >hd!$h{IxhSn^>۽)?L8r/B%òeDz>#Y A1L)"0=f"c(":+؆ 6c_n(z`YaQ4KVHq.-aIz?(Le\(=zB>zjh:5ѵѻzE?xH\R*H$$4eن8FZՓ,3y5bAC4KRx,,fa۝NOlQ x͹fƂ#G?QRan{v·#DclZ#\ŔD~D[qً6cXl&X?uin g6V-{*cm7S..:.8]zw#kRpc-YW-}p`>5, 8%3k! ,HPvg[5R+/$(GJNb#V)ll%0\FKO\@f:ACL(6*bvZD:#f>nۖ*REͲV}{xٞS~  :+18ڂCshJVXP_6W~^&41\0p Xlw@ׅc[gXV$6/dldt  ánAбAAcfC[|BQU JwjY8/+}ztuZP:xA$A뻇F2ݲC}p^f>0ٖD U1)N̥A40!=51aS7D|)AV[N؈ܡ&V@p$$!3fG"]"*ٚ>N7 %<5{/w~{y{|a45ni8UOz5Vj׹(?$ޛE3eqvY8 C#Q-ќ n%?x@٨`Gl"*255T6c3,YS#s>sa&Uz^W ϒ8<{6`UTAQ^Uzf^[tsP^(~g` #vT|ߝT|PDG 3> VsQXML3ks!@R>/ 6ĀePwY +7t<Ѹq̛8hя<nY)"5'c>y2ZǸo6^T>j\T+ Sou7;Mu*/*=USu kLJ_rWz/[\Ƹ*R=8f1 frJ9r5r>8`i@|eaʨ@б>e\ 7t=Q'E|Ŗ$D#?lGW]1]Fᆌ7 GFy;^ޛt09F ,31HyiVUgL<K{ )@t|X{rȘgxe?sa쏗s(C%>+U7q.=с@pw$# &}(f9lSL'Ϩ|u]0S*żt@:l |a/j5Z׍~( C{.އŋ*ԶBjÁ4|($i0E-s/Hs/O{R~%S1YimJ&18Х*6t`(L"R#x @|-r)x{)=R655(=`QAQyd(պYZ9oa@x09?ŝIO%f |){8PoVGԲtek\4CV^;xQ[ T-C?:S)wgH:RQm'Iƒ MGyw|iBezaL0QҸ3-Ax*e_/R3Lq7Bew(U, -s֎LN}+x@&;1Ց>Ҵܣ_7*{^}mժfO:v86`[plu}4/ XwFy_[=rtèKt@b!F,Lԋ1#lGG%X$2q+1E.#ă\Ylox/w׷KE.CK &64_:]qw=\AÝ=6Zuz/{ǝjzozzVU3%N} !=zT,qcMk|gB)~XRwR;I5{vy#6ɇ5~0K%d~r)b;!Ǘ!!fpfشt2*86??<S eՖ"^GUBx^T]*rC'")2@"&̆9<δfl N.dž]R!㰡Ӹ\=4% ذ>ػnDǷ^>S>qv G:v]ٵEcFtl!Z6%jj[UܤU%9c0^6)uYqroH zx>'Tb|%&)r,rr8XX;v0PxyS/^qN/]vs^jq2h[<7Lr-{60*=Tqtfِb) =.yc.ofAc-wvS)]ٜ?fTjeyˠ^0fA xʊ2#hBzZ[bTyƈ2(:\/ 1J9e29<-p>B!(xcDE>Di99Qʪvddp Šz(S@/,ܑeSܶݞs 1ĭ)eM U,QAe%o3nvo'Joi<}Jel!i.TS!BO9er&âXxц40Iu^ɼ,+Ys H o`/["3`G mc/kL\Mxtj4m ڎۺb[B]vT{ou9y눎)mBu\ucu*(t vU `ZYP dkL=eXaw.ÛBA* ZjHI~Ǫ1<)j}`AL/@(CX%  "s* $/ 2b4a~v-#C:VY c:'`l% )+;N љKiSm9Z[O<9O52Ƙ&-g&D{_ s~,&޼>2"bkM1deKM,=2";CI1EKzo<A) [Ưȩ2QC]@GQ Bq5ZOB#l'AEg8i& Ϧ3-9_9kj- d^+YSrm+NςVWhsƠD9 FPصMЈ*ٺƧ+}~>1${tOK2/M . ?)UPNkóLDv%[r7hJ7tjv^Yt4Y0g=/VIG{yMudLq].t}p^PS;33Xhv%}jnAfp>7ɒݹǹQ6@`@ nm(S+g36B 1c`oqTߨ̍Gs27׆bYx+krkvyxqɒ5dO35Vy09Rˆ\r%Mrt7F᫛ X\5 Eq,Ulc^jO )AF]TѠXx6S!'݆נ[E8#zeX9uatbE&Ne9*? oxpE\VhUN'L^Ð+ZTò!ď@NSwpreǀDh, –g/Z AojbFƕ2MJ]GVm[8,6)t#q 4^tʏgr?\#T; (+zYm@(}V^f8',d]l}LsL9&TC΋+OL {y$pu|hK̍pԄ9aQB@>!3/,z.9LDNcoGVtWQ 0ng sf2ś׻m=5㗺k:h%;SHX7F%Dآumaw+ȜC+"<@Qz8y&FVtV t ;>Y4>F+_ N0ƭ4wCi *X8==GGm,h^N4OsXS%,Ì믆rmp8-aK\(+0Yxb_?B.MURƬ֑ޡJ18)v{9TAtc_Y `ܱryVt267$ԧ41õeԪ,{XYp 0}W0 e>9OA;AV`:]p !b2@ 3: eJnKUkܬ%ۄ5(TIi%Yl>$E_yT[k6=A,NH8<Ր a64 ذxyc!i-r!ef]<(S-ϙ9x0R"ߤ|`ku~GQb:i> WȤZ`>j6h 9N9J,SGv~˞mjbzC c,sWT4w5QP-[tQ&@6+<dgBNU$B/a& @tu`QVWq8/k}"(YxCqx Q7ĩo ym<[x}ȳnn@eקaJؠ3/Ke xAnf>Ʉo0{j(;Ͷ6 FX5dG .PsH͌\ft gc)I܉$ 8GM*f8"kLlf\/1*J-Zh_4 Mr}vy;A2:Q 26̋kֆ r)*BȂ?\%W٠-.V+;\HȒ a]\.!) óקׇP&72e@C*O%|%لJ3ޯ}b䁉w9tîp_ɇgkBbBAhUga!0µ8nK(zn'7efc +&^߾Z9fBw?ǭ*mgV*SJ6*Z=EAN5tI˙Z6@lekً\es SHV5VAU a#eb Uf>C*Ԍeʺq僗 r,*>oC\ I€7E)E@(p1rMxXt\)f"a,ll6n4f:&H%O]:]p#usM\IܮZ y, C2a2Aԥ+PͽZ}f2'\9`p[fE_^4$m']\adl[jp0T:p&-׼<,0I:*14Oi뻇p~K|`i!VܑypY.a./eM0dvdI~ku^_fBZ=|p<(V3+PmK$&y3jȒd=V0:Ŷ d7XPZC?RRX(0Lvbcxbj}uU!g1[Φ0TtiRj↌jc`y$:WՑ֞Vl5:t+ndU ]p~IÛ9[̻ة.^qc(R7^9:[ gM82F##a{2\sעtB~,TxSA ioV]sfȪ0 \3a?| 9څ`aǯ9+ќ%n7.Vݼiױr!U懿k_"@1:E9A.WxppSL*!;Bl=[Ŝ0a`W0Q!0<+#OyE_ `>ZD#tEwSXxr`H!b57Eț,lTv('us[%LF'"nP*h4vbΑaM.NI.NWl,J!]^[gڇ7us\Xgk\X̂&l2@n|Ȅ3(7,6/bb øcyמ #L06]zӋnqr.pUmNKtRVeIнM')vdR%3ctDiG7_.r Jg[R1!c5%e0f\#0tTkd53V˼Afp, :_WO0[/v p:]"<<2=A*o4 SQ,SPq2O֜=>݇&&׷U2}#5Hzِr>Xb۹.xo. @顚-ÙL]ѥ=CQuY1EC&K% h!A`/<NekC vK$Cz*j{>pq 1^d,yex@ii=ʕ+Yc)% Fׅ-V&?`V|Y=UzU_I|u'Jqzs&I^F/ӽQH^cμh7[h4{cC ֘!]`>Zˋ3x̠9"*3hz¡րQ:(y^zc{5MnX¼$Sd%1r**yӅ"Py4/cQII5׏ݱl*Uo_Z[^7e.'eY:>V)r2RMqV]ɓX̩+7Z.q*<2,Ud\V'R>]ddeOt== -gyKՒF'c=ysӯGM䉯} uJQGDW<ǒvsܒE=RvI>[ ucG 횖=<:A[uL( i,{ rqf;G6:l-Bylp9VdOVma%0mi"ۢULd4#ؤ_1 *+KXd؍Ġ)jB9Պv $lR@W6L;\fǑ`n: kPͻv쬘2<Y7b0Lh#ŤBO`X :Lgd2. e,NݸS}(߉bJlIk%9g IDATִzd3]Xz1"#9CʗYu\V(pRh䚶H EUU(*>V{M+o 2)9F`Ͼ:qWN%X]A8wJnuv RLG$a#roe/| M1I~lC4tZ@؉)5{cl{O?MƺK~ݛ&$_/.}d[VJyU'gAGkUCuh4af]8K ܲg=e/ Mse˳ pp@a==rckElkb? 5f3ueP,A}Z+,U1Krmx%P&F="zi q7Aկ UwI紐exmpb3hP Gc,3nt<`L|HcG;>eYqtt{=ERVhԼcJ"NWV,a#vfz#ȑS Շ4ٞi5oG Hzl׼Λ3SU !:Vl;OQ'!&kڋf2IGdR.”-y'BIy|/%U< /}q?r?sL MRǶI'M|Ao1Zw#uE6VydCN4_Nx[j$(#%:I%BWv,G.Zֆ7r(QU+n1Ἴwi*̲.+?׽RR, lMTsAZ&WJ+v甋aK]SY̶ T22/VX3/z`)Q88 1[?\7LÑg[_/3(%Bl 3 "c΀L?>,2[Hf*倀ixXm1ibr*Ib[1] r[LSu+|ך4 ՛"V Cv# .$E.aFЌKin+itNS+?KJ~FLͫBs,R|uK޻#lNKK[us;TE"oݍ|kw#i$ń_ K8%{箻 {ZLL[@v?{Uh>X>$Z66}#p%$%QIcVO[|nbp)&JE:Yƫ͛U{|ۆm/wv R"f'0RL"3/m*:#=og a^1d t>9> ZP`]hC( ¼zC1J\ 99q5'r4HeY3f12"G8\6WEqIDP亂.9C"9k =riMĈN۔(:ِhMދ9h{貺磏iX9]5VSݘ 2E|}GR: ɱ肠^X6?_qu=oo3gDA[8n*DI+iٗ~o/<()W\5v 91mGђVb;G]Oӕ'=_OŠoy %+dMrݤeODSw]Uq+ˑ/uK2y$m)Z8mJY~}Ը}0fDj/?AP' X\P8ug;@1 (W ِhaA-NWcL#,6deO; uAkmpXaVJdTBP)\(#'μ! ϻRC\rɆc5l b/*뙭#wﮐR.((ֵ(cDZ]cS6黎;qeySfH¯%Di Tv &ôL]+{Ήe1ELnɮ-9}ikޞJFh,erMFЊ-?_>45NE"M2:͓QCrR%>:Nmu!?yן܋hea hDfdd)0kZ_Ѥmt]L8yKx>c2M1MT@RfOQo}]8EZ2I.sׄ m :3.Xf S(-{ '/]sLήkVXpࣈQ{LzۊyugXu72!jxɰx3 0 . L#PȲSWtզ&FvIZ[z ߖ vLCflDӤMYE7s%O)YfS)Ljcr ڑʨgv%֖WHvC;qkN<͓x{ 0rOOEYu=9D4y:Xo>YY^?u7:¹PpD:6lU xĶVJ) ǺEvJRZ##K:ݔ1_w\EYwdh4?hM,0N+)(q%(qTA''}t{_Sr}UJVBlE$VTU!c\pCH~锧Lte'J$ xHru@cz_v5|c0hE8X:>X렺F9W<|2a3\%P%K?0!4Pc*X n;R#[9ey+T2GoZ)K薜bYNWM`lbRLhR̿vՙX)e$6.LSlyQh`" ;Oc=]Q,˾pXV@1D[V4YV)KӕwV/G HK|n鴖gk}kyaڗJȎDwK.?R?\YM8 MW uu$%ydሺ$`[LN0æByKmV2Y|O>!\C-ٳ :*"xES8VH;dbޜ291`nєİP!@{0΀u.L kຼ:%^ZMy:ιdǮ+Iy8q$e2{=N!XyG;҈F0 <ʹT:{ڵD֣(D)a[J]&EkL`rnÂO'Dk3KIt􃉛;#O% ք7Ǝ{+Ow&%'}ibh]ա0g |ްczۈ퓡Y̘=ojS NΗᄈ#_zg˂/[NLQ֓'++~Ⱦ?MzJRѾXYdDVjyK%WM1?M+o5@C1؀n+C^+ Iy N);)`02gs%Up.0%64SJװPզ0Z%бTd˃ [3y2^cbJF0b|Zؽ Q^Dd6WhAA 5쉀Jkk(Բ-ZKWX%6q$j*C;: oyDe%.]y"MtYU.Zt7n6lX?tdt&dJ)ə94,}[Klm{D=ENXudݔm'J{krڣ4Җ[=M鎸0Fp]x;w?}y~O?]~keedwAX@(|o?@H?"pnJ]Oo~,wl7@uɔz]*cu[c;{PǷWqpFJQ2Rg<_fZg(By̝10XWFrH==I8xYu[^ 8UCg%nuQyH-MꀱC4<ÃZH@55hAԶDOK QW10 aP->, MԬ"UTĄcX Y4Uql,1MQ3&(|j:ݞz HB:%Κjjr =ʓQ%Oܵij/4ZGȊFyʽ{k/ި~P̭tӑ> <̉p$pi4_7wW Ki,ox}m7umYJB(Z+9|Y#S\;K~k/ʎ?8Z% h=kK%[Ewyz։_WPڶ]QT c.v9rJN&<6_m6ƌRZ4EkQ,ly7RЮZ Xp4nVB_vKsţtZb:V >7\}UM+aUZ h"Y62` U:W`€AHp@I=9 gj`5^}9{'CT+֯S(Kn~#՜$,QYޒ)זܪocN`qvO4S#բn(ؠqDN"HH'Dv)m'smG4Mu앶()ZLynˑ R(rs>0Q֔fW{#[CFb=GneU ye+#qi'-<?Nv~B%[}L?e2}ɶO~xgA [rԲ [}IB}@V ^7rR ^]A\ۭ#pO꒶FRfR!f'&X% rwj ئ^c)T1bS ΰwQ8c i,LU/P0u=MA) 읃 7KQ2O Oò5Y"^ fcVlEF8$Twz|paS L<W_%,Ǵ y@%_\t J\rG| 6bAӤѸ.ӵBEM˲=R|F¼ދIZdB /&ݗsԐ$'=v@U<<$`(=[M"'kd%rrַ˶x["+{+k2sB#OGbcEOXKً礻0{-mD9ׄk̒H1iF㣛G><`Yn[dsuJ# j>9T ff4SP]Os:ѿggo **(QV-{-V5OWrEvɔA.wT &@3Kiz\ 2j!6ypS I-y#UԒ"paĘ#2pQA lB?ݓgMANJ:,G.,ɮT/)ǒ_)Ϯ{QxiGpQKX,.Y4>nIjwl(7 մXY~JU{Rk_kqnFdKWw{l]v,{2Vtɣ VkJ#z%-l#OO(EZ++/PH6|9-o>$"cچm <%~Zdgdin䥝|)ׂ;e/lnGbslBjՓD~(uX"ڜ5&գ!R.KBV ^̇'??Zc#|0/)&NZv A4"AqpXr/W ^K_bXó>Xg}P'IïAYTSHUPrY G_xω7gܹgFAX 07_0SMw ؛aSf |ݴBG9K[ƑX]l{Rw@H1;<\5T4XR7VfSU<qKFHNWvB@șnsFc`}ªygw /8jϙPur=keN6eNF[4{)Y3dbt[N2c*꫶MyXJLG2gݷ={/]@;% 9A$IqXeImt d8!먶9]rFݔAPM^00.KqnWiR<Ƕxf5e:Jׄ_BmsbfB-L4jA8|L-F5՝ n?*ިQ-ꠘ=Eje KlG0>-BN/>׍1j9'(W֣Q0R1;^1k$ Kȱr5=~?} p wH8B\F&@1;RFfy[UR, QcYDP*tCaڥۛNtuRLfϛ C$<=ҊzOn)7@w )RlsG q&G%Ml|?ɓ1!E˂Iklv%qx=ɣ)I$O_hg߈o~?nD>AϢ$"hȎ7)n%>u&b;bcFۃ( g(V߼5,G$dl۲%׽u2`8μy{+nFՕmSEsܕ7&|N.N?V\*z{E&_zh(w!&Q)t60IǕ{&af^е_xRݗ|Ri"qtٞmlΎf um{kzL7X??<=zRwŵ84Q>jK\%A (WX8t^FM.+dL`3Ao؛88%J'\\9 /3w`ƹoqM:u4 +Bgpw˙P&:.ߌ,}_~Fٷ#SPdrl!Ёǒ핫^@\ |L@&S\(ӷ:f\j&ʗP'3QC齀$}'>;EzkEwցN:>ONsO`!^e!uHlSYR6uM" {;"YWظKy#i!ڶGf׭"dzx\RiS\r"O$>%d_=.J{ƚ|IN5eB>9k.-I ]omD"0LV]Ηߗ|33GMD?D|O"-I_.'5-%Ѹ& \AuV:B퓍?%LT*%.6A(BXnk_ ȥH$KM8o<~:3dZR\瘓_*ȿkvw ; kX$GwO Lht./[}i 0,tʹ*"jugA.%,փr!7eiB&:ヵpKpXY>v0Tg_ȴ ՠ'%9bDJqd*ZKWc,4zPCqoEcWWi֘sok@}O0y?$ ԇYw KA*03c'UL j<8,Mv "<ZvP)& DEZO Ka ڑ&76V I7 W ыѸ6\&P4ԓW*2`h腡Ѫ;7_ տн?xRyssGjѶ*H/%7l8.ED si6:^L\5&0M I+a=V!k%FH{mXk!ӬkF`6LizuDZÊ3,!p|ÊFHg%Kc֊-Z_rXsÉLk};|Kw}ҨAhy ZE)pj`.׭GK7p!TRڡYq{ȐRR[]g>FV|p"WaSI6FQq!mlotizŀ35'~FTĊJ$>ΨPծYzD۫a~u宸T|+C(P³5R 2YXtydRkjdu4}$5%'HsJpLKBNs;lBHJ- @cHPә8{i|ˁ9 ˣ+$ 2,BO&o,'^j YԐ`O)زеc!4@ZMAxV{)w=={F<<̗5YQk=3 >ltiX?_pãGT"r:M=&w-po^GGOwm%Li.OyS7j8SIFћ$J(D#RKX!* ~TX%iǤ0{ΨI=G{vHc9^TwIMB7}捛!v#p ׋m] {E@ 5+K؛ˁ"h=p][^!bjc˶[C?Q#^ `|YܖV"hQ SFj6c orcI愛s1A`瀢,87ےj˟y,X6~gj\Upz po.Dl 'O[)O_2F#[hO(+f,X5"O $eHwГ@6&.BGqFus+s$cCaQWgѯu-@wVӱ ?ػC,=yo.=S2nzmVOͯg+ҭv+CUjvn"yp|:w^m (˒6sn*pWexz7""mW'&)MoW&t" ^u~ @oS,,DPL,0a94 phCĨ_Z;y6$B ؇Tpr2{PXi0e3t:?aTaM8I)|^W:ٴkk!u"xz~]Hag]TKjBy=MUpl I"=RSTmZJ-+DMrA^uhNaY^j!ˡÐVȺ4iM9u59Z/qi g ;nm֔ ~-AGNB%qiNj?"pKL{r‘7!sr?f<ifcy@]VĴbwfeYjwL ^:4zi!:1@Am̐z-tL1QA%_iH1KCڝda,T]'K\bixBp^&>Iw /.Qdw~bMx+(~u*cUyx  ax[*>[ }9 |w=$]Y䁤 DzNYFRS##U\ufVo?ZLzUzLEJjqߢtj者-:NܾN̙WoTbe 3m㕮{a"hreʭ\:,DynLd¦1.KWWVS.q?i0t /,<;|/' UN"1TIS/igTs Mx1u(Rhn!ZC.hYY84,7~/狂q <ǰ΋FƱ.: r:-OldfZWkk(#cHEHɯmoLH- FCkCiCF4\ riU5y;H a%G{n?uOE'ן4mW)?|tO]5m5WaO}ǃ{*N.?Tt,Fb?V8!zUջ{vNv,vIŕ)gx(}˨mj-_UNj1$ӔʼAFnd|Bߧc{doFHj1 ` unY 밮Peޜ6 vjp.gQsH:&K)|mPd_E/BuC8a#/Id ez_wZ]R]Nӟ/>-ߜRliF CmmSml ņVBaG=1 |K;AKLzp2кZuiS[Q/[d4tLSYoR#dvN_Ku6t{(xz$6CZsuJJg(D7}Nnp!$Ajo>"nZzPV-sW/*XxoKwKE<#z{RnTҏ7n|Fg>uc#{|l,X3ge ySQ -|*= ,%|% #k #G J:MY04ljreٔL[J^R!MRVf3PrQ,tORPcXa=R}'=1y*)ڤ*,hh2ղ˜z푒vV@y~/W<~ZO?~ʍnZnxkD@oy>gVD |2XSY53:ZNYH$\ѯ4Δ'$=+TyY VD6 YW #M/pi/eVmh#e3eeSz:ca΂fܲ ~g2۷huF3܈4mqkz4[,6u1q*bҲV0ITl摞B:mbuhpP^ \݊%OZrmiI92F87y dZ386st@ߌSG!dsǂ}qVxYajtfI#$)1l騿~^{lȋi :R/p;)ѓV~OeG_DGA,OcI yډRvG-\Dv\qK*ʃX$/8.WI{uWA'U'qQλqxq-I:1zn?' 'z,II?2tux'nRn\s/[ETE8tjQtׯqq›MdyN+IGvʼnNt{fZ6juk/ʴH_'oFkj/_5vP_]$y/mn Dk1ш @<<-&"AX}_ 1:<t8uBR[XFqDNԷT"SmV:+ qX_ws^b ~Cx'HB\pDn| u9G2w <)t/W Lв”!o94 v@iFk[ZndDZ_}z0bW4clWM[-[-'k|xl 5)БPH"a,-K>. P/ ;j_@Wg%n힨BU'a2}j^!wt'i#k{|”|uR:W+d@="w}]dJ&&«(VRI [sHNXlZU^n(9OE=X@6n$FI2u5{Ѱɺ,30ɝ="d]CY]/[0[-=Ӛ9EZ~""':79ueMd4Fh˫K%yبVd!ƸߖjaW<*bt% +(s܊*y9esmuy`en$YkL<7m%rW"*DvZԱf΄(a]."a]cd<~|n ^=}zr94)FτuȺ94dyIa˟_;dm#ޱnsRǰGi`3?5[@~/Hkcú^[A)8@x0XٚD`HAulr{\GVm6^6w:W"ķ !ƟdYpqA06n%&c9-E0I2twI2J2npO]YBkH1ekH vrTo`EaFc_GgcII{5.Iz5|\d@z/ :p+jeJbtnRwrS?y/9n+YV?~yZYV>niNV>T}=d_FkhLEw2Cu2kpKioJ`]EbkE`jDVR=WS=FV1K^5SN:b`F?Y-C_0A>-?;,BK/Bl0J, ĕю|GRpT%hD' u3>,7}&/a67W~Rn 3gK qG$ݶ-7wܴ%pw>~~xjAJͿ%@A϶I%ȾIENDB`lbreakout2-2.6.5/client/gfx/confirm_buttons.png0000664000175000017500000000363012140767213016511 00000000000000PNG  IHDRP(VgAMA abKGD pHYs PtIME6E[IDATxmh\Ydn&4Mfnk3ifcRa? * "-5|Y*  X(Y. e UۘJcm:ӤLnf&IVy>=yg`2{tGRCJڶ6 ᳵiVUɈ˪jM󮇵mSSS---GM$E0 pN>3F k{p gn>i]ۙUl}(xt?*vV_['a˜Rm:bLJp@rN s0-W+enYbxEem޿[[eYjvwr2׮]+uX <K0̕-c%/SUɋ-ql>ohh( CCCնm{hh(H477iZ(|B.6! q8>s*oUQ@W̸ֶ}544tttD"c̑#G d2yYxbن_|Q|>$tB |pz8CY7V%m ;wR)q6nX(,:}W]Qx >xuUU/UYֶ>˲nݺy斖۷o?Ν;XR-’+19|EX=vPJ\XXMMMgΜ{n"*e>`JU[RbzX۶3L&f:W{i:akΙUU^fѿזڶ8N:^EMUKImӺۺbKbcltX5YcHRU3* ߬&N&;ZQՋ".[y |he˖M6.\lٵkeY㌌J<g1Kj]P\Yb) 'Ć`0m۶bcTX,/ N< j߂ρ0Sm`/{NDU3@Lp8<00Plٽ{w$TTߡ̇$܃e^O8܀/Vc"^v*𮈗 YcLWWW0t/\-رͽ3Rׯ6W`>!h9xrp R >" {H5 YcLGGG86~󍍍:11Q(n޼ueU+p 6@;<܅+OcV'æR[n`0X,CeYdrvv6MMMf+oc pUպ{=!R~{y=yrr]a˲r\6 W^< AWa+"|; @?{``܂<|UĪJ˪E*+ͣe[[[3ZbUt@.ynsO4U=#'(:"^*𪈗}!a]nb"ǁg}aÆԲ@/p apA~ ,\PYoDҠ)zgƘ{G"p'L:S,cX$ihh>wttռthMB3nG۸S}3-cbt tՖm$mxb^ 2+WnZD\Knlle>Qw=\ NA1]IENDB`lbreakout2-2.6.5/client/gfx/fr_hori.png0000664000175000017500000000171512140767213014730 00000000000000PNG  IHDR18gAMA a"PLTEjr˂˔ًقɄЗِه֙ٛٚهwٙ١٭ٰ٨ٲ٢ُٝٙٔهӃΕٕ٩ٕٗڜ硰睬畤狖׍ޚ琡䣷祹礷琞ś磰#'7*.B+/C#'8 #1#'6"%4'*;&(8"$2!#1&);)-@16L,1D*-@)-?-1F%);"&6$'9)-A$'7(,>$'6!."%6#&6&):(,?!%6!0!%5!#2%(9$&6 "0"&5%(:05K签秹磲睭癧狙ِጚܞ瞬硲+0C),?,0E$(:#&8(,@'+=#&5 -"%5曫盪哢䉕Ջ۟昩原⡵棷梵掜}™塮檼竼禷硱旦劗׎ދٜ圪咡䆓ӗ匜ޞ柱挛yϐИѤѦџѦїђЎϊς̅y~{ϋϞьϟѡKbKGDH pHYs tћtIME #)C!IDATxc`_@PHXDDTLL\BRURRYFVN^AQIYEUM]CSKMM[GGWO@8&6..>!!1)9E#995-=#3+;'%EE8U5u M-m]=}*j&L8iӪϘ2mYf7͙;c -^deW\b5k׭߰qʕle0153;KK{G'gW7wwwO{ Qѹy!!!EQ@?0пؿ JI0u }&IENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/0000777000175000017500000000000012610471364014531 500000000000000lbreakout2-2.6.5/client/gfx/AbsoluteB/shot.png0000664000175000017500000000064112140767206016134 00000000000000PNG  IHDR( DbPLTEйfVfWfYfTЧЫаП~ kuЛYmc3e6fJ\, e kЏ MbKGDH pHYs  tIME  -%IDATx}GPDQ`Q9yvُwt]iH5 ʴ,Ǧ\seO@EJET$ :!C+n#>"ꉨ 7D} ,˩, jڶa5@Mi:Qs2Ԗe׺ڶ] (B o= ·IENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/ABOUT0000664000175000017500000000026012140767206015243 00000000000000absolute B v0.8 by Jurgen De Backer annejurgen@pandora.be New version of the theme, well, it has changed a lot since the previous version, and looks more consistent now. lbreakout2-2.6.5/client/gfx/AbsoluteB/README0000664000175000017500000000104612140767206015331 00000000000000 * Title : absolute B theme for LBreakout 2 by Jurgen De Backer * Version number 0.8 created on 6th December 2002 * Email-address : annejurgen@pandora.be * Description New version of the theme, well, it has changed a lot since the previous version, and looks more consistent now. The menu background, the in-game frame, the bricks , paddles, weapons, backgrounds and extras have been customized. As you will notice , I modified some of the original backgrounds a bit, and created new ones, all using the Gimp. Hopefully you'll enjoy this theme. lbreakout2-2.6.5/client/gfx/AbsoluteB/menuback.png0000664000175000017500000016246212140767206016756 00000000000000PNG  IHDRKfbKGDC pHYs  #utIME "3q6 IDATxwdGq?^ަ :tw(I 9E 6M16`m#r!;P;;͛3{cv_uקuuWWU+f1ߢe,Z)Ak]2 mڴJGࢋ.R(7U T50עZ3Ƃ=HYD>uI"d2mmme4e%,5JVįFƿJ` &ǧ\\jh_x‡@ŗRdhߚx?by fB Y4!5OImu\A2#NhS|j+ӀƤ2sW5kcR[/5W5/j~3/F(M/UoU꭪pUfpyW.f(a:P!f,{a"?sćE3d>k@!G Yv#B[f )΀gz2&ZUfE Y4+-X\ʙL^Ȣ]jXj[օ0fK -khUӈ_"0pUTU;ZìW\A YRu@Kxp_Ӻ?kT~;&9@S̜F & TXBjaL`jX3!r+&=r+&8N!\fm#_ᚮB@Ֆ&D%͕_{p%[Y6Af0fك C@K)y6P?jQ5 SwDͦJj~BjpB.~%IJC.~⟔gL7k&2 gY0^y&F%4i+,YGW##f,{!"BM)>O?]U5T)10 Rb[e<?qD͵uZ? C[X|8yXSr >|8H솜j%nɡ'kl(+FFF9!?K0Zxq/U#y9D"RJؼy͛WIEM@K<#{k0ٳl[kMTEY/US؎BX&R.]F2m ׶^H(֢} Rʉ jZ2!-,{URurR񡡡*D@(k Shb-!A݀Z| `ȳӊ H e2AyDޯEel! Daz0#fى krrWmJ_x&)B)T^EVR%B $?$B $mHd/d!P^J(&몄O 0 Zi!,{>3@}+KUB2N- ԋGV׷Iqdo7 WU=8ggB VpZ0Nt(!#F eцP6-N.Xwo!ȃ.U4 U婆+Y6Ah(fSfӡ @et< i:XM/VH-B@h@D'"&o˷B&>[O "Z-V9s0^U9Gj/?Tsʺ`ޯUeB`!@B[]Bh*,(V@r)ç@ a E`gЯjOB5j4[]B`6do@V#syu[]B`:l9 x2/yFVC8hdB+xjBUCf]>a%5&E B Yv BOg>u^bZTȳou}R&_(Q[eh!0W54B-a&UȡB*5AWa b{r#Zt*w=iA4eF}^R_V´Z6/Va@ B $Y2|fr*S+"ξ ^]U9-;hp,,T4%7AO'0&E B Yvj(ڀl (E3r CB'x[Tζdoޯ|kgehB+x MZ!,{MELXD3VUq"I-jFDs]V׷ .{uȑ/Ϥ5fuX 1kZ B5|r  >}X`q8tD(Cs#񧔽5A٧

0ZɡС=+TF boan9;E{d(B1h/-{M͚Sʑ۟x4̏uX]F8 =;2818#AԚfy;.sEod +Ye_ʓ@r .\3Ev{4؂OXhpS5KU93tª&P^$bʫk kJ񧬫5(9p<3}ʫmтK'uJJU+@%u%@V(,K(į7%gix[,^j#{:ɠIj. bԚ=γ= vE%ɚ,$R415 9fP:f1+'n)-PL-1̿WdlK}S'kh0< &9@_ZAz"".Uض%"Y4@I|Ջ-3 Dd[h`Jj BSF5-!jfű3C!*^n "  N,hj$}Qθ+3rLkTZkr@\J˶1b!"%f䗕O%&\VvƿEq'`S2L˲ef*Zb@ >eNT4/[g]/~’ṢA`iߒgT8ؓ'}2ɌtqƇF Oؘk`.pB+tޟ[|< 螧`C;G 螧ËnSO=5m۶}ߚ9.{YXze_tBD"λDGT8ߧK'; 8ȁwpM7Ua۶mG/v￿Q) -_G?Qџ엹.{QZ|>SO= _BSf9Zf 7gDܼys) D*?z w %@Ѐc`݊3>Njp|OmC \yKE 7Gͬvɳ<92JKWʌIe2Tz2麨0&,aElaYV`3Q+M!nqӎHlˊX-mZ N >o3 Aƿ%:Lyok*UYtf y\I]fk<$WUz`re6ZS<7~P uS.3Π1C˟~U\ipt(Aٛl,R*6i/,Xf3 rU/"LSI(]W9uqtF:RIϩJX[ؖ-.8f\5 hDZ1`IGr &, -k 0ljvc6[qq rrә#;1_\ e0ߔ[h-}+Y>XMQC?ݯ~_ ~5"P({3 G)Y}k͏FH$DQtfpT&&0f-+bGbH[ԊFXԎFml;j[QۊDmٖ,n :Bc+e2Y* Sh5s>ˊK 8GZsKζۀF&LJJ+.885׹0;(o"GR&C_]koܰr_ETaa[3>S_O?2 z:^gϹxgۼ3zv#@w(>Ay i[:g,^d^WpKQΑd19TvLk Z3έeGVIJ˶|@JRJj!zTLp&3t{loFg7FJJZ@IV2tDj82(8{ZK9kFrޝCww]C1+\zςܠO[*W ~}?.޸z]R"ףk7\sz7wng]wpƢoZ>nCcu_l轳YFA׿9/sՅ"F_l߻TTO%4S\AECC0{A#J̹BH%䘴g0ޠ$W^"[`$i.N3㿖TS)B.ykW +=k^qMGc08:,a(@wQv=Kby^t/ qtK?n~R>s͆[;Yk7[W?&XQ{髞s5wXWwG?+@*EgnU IDATVNӻ*dXT=9+zgYӟjC7y8FߋtRJ` |jO!{_ן݋Z7/bUH{?c&]^re)|Zo嬵>OGss}M2Ի v-wQwp V-}K^r{^^԰N(bݪ5??3` _Wվ_򲛞ko,}`7hSҙko~`+A*Jeگ?%z Ud:G*lFg^$ 2ED.Q8嫕 FR^ #F΋ƙ;vMPNA +ZbGb~&)Y*vOETۇsWUZ+cq^_}{YY{էZOg)Jļ{af@dW_]y6tW#2T}}>s,:6α?<`Uac5_t]uq)0ܶGrl{xo8樁>z(NVAUW}X{ywo`2=J\Ͽ*X쫿o_ ccuPj^TRi<rA3΀Ŭa'2mhMD5P=W=Ujd(x5 6AIek=nxs.z̽+ cHH ,&V*@Ry6u"+Kړwj7/~QoAY%ȵ_wկ}MmE(ÇyўS@33.ްrͮJJ\3ܿ*{>,jg Oqt*z|'+޽hmh@|b:&O =?U$cC-{/P:_,T5O"@v!C9f:u^~Ѻspǣ[xVF~cC'r82*ˀ@L&I}E#`#&g1a+h/l w̮g 2TR\f'LyX;Rm6f3LmK)1&?}ߔ+sDUk\⫮_}^m!'Njc;I|?~_ѿRn?cAP.7ߒ{Kpp |[_;o?ot/-/ꆷAzgoQNO /=402|T*u]_woQp]O?}ґZ)4 .XxͥWwtt٢{_W~ ꓻw_Zn-[ya@(O;XAGO} )}w ^ Qko]ۧQƗP @s&ZѾফ^g)mwGKG"d5xhd9B5LK)])WR.GL(-! ٯ@wR'24kʛTjFW3d0SsK~J+3׮X,0fZj͊eҦ*Je2uRNҾO(Cn dEā!ZuJyN3 ৎ0>mx]l9t0"_hOW^t:F@10+әk6WS_݃ʕ"$rKK?o}㻂K{ #8ty/{w!ext0m۶ Ͻ8 zBV{k)TJK%R)hH2M{J_ӗoߑzCMĉQcEt?B`B%u]r\2>+W*%M,2S2I+)=+i__nD_c,ûC^ZiJщJG*UZg"%,a6}`3Nn]ŷ~%ӧ&B=dFPB6SWPTYh#\zb6 ˯.z`hOn"/[>X[3ϐks}i}˺;lێbH${Jҁ.Zc®^{4 ~1Ɓ32JØX4<BI&#GlZiR=lC.Dq}'T929GFs`L1}V;?ԦH^%& isI")#݌CZ)})߆m49眓>&Ʀ:/d*A. m(򿬋 +gc2}?{cO͗ Rj5gO ."<lSxutfL9 HZ 4w rcL \EZuݡ?&, Si-F c(3εO.WkM75Z/޿޹ ,Zs>Z~)(KJԑCN2 97q\+VK)- ɽ;g2?īk~_p?%l4>C/#?"Lwpx)amg0G/L&9OǻKgz͟u٩T?Σ6.JǸX/lORʧ=IWp-%+VѢA)dܽ8i+M(t=Y)B^y eDDGSRuR04r223nce,b1EoXDڷû;ЈZzB#GIEW'd KXMaQ#OS*ﱚhkJFSS 8b+=Y`E=JU? {w24%@DDZI x…?˶?Z)I7IS^(JFixy۱X,6{w=:>GCD'Q\wĉ>t&FԴ !-,Bm Z}=mwՓ%]}/yHGoL.x<^s?OhG s_ڷ$J9~Od7SA'@pi*tFrkOzV!^bB\t:#?oK ]E:´\F,YT)k0!,QT:HJ%)Lڦ `___ rP3,~D {; Lۘt|K[\ds/x~l'Rm+mXk+!PM&FŤ"<ܻ y ܳ x_]m"_pɹ-XsNY ur,::p? &Ņs@I9Gshb7B: 7=ѽۉ&c̏)5`[0}+) ٶ#3~8=;oppRv<3h6"KZ4FN[r8"~c3k~W:g~T6,G|-7?8hܸ`cg_u3 Z_M;٥ c\KMLLV _rr)ݒ$/ӗ,/vSiBXBHeE4H,JqΥdRʤ0iA4Xfivس>ӛ$9zs`6+К(_q19(8k w7TeGSj6JclTt%z%-/C_V-ܶ%8OޱusA5cO[7T{ztwt^x{͛7y8+9_V%?dSGШo ~g]L x;~ cLuZE}=K/[,b}h*Z/בH$,ˢmm24c uaat:=66;aǍ8c\rǥf(~`=FH_piOT'tq%}o<bfdmV# n}pڕge.ڧ/wS .\qiRT*n{vm֨_A&_'UJ=9[lٱcu\82.}/EWRzeKa Ki}݉D¶mwLB .,+M7@:~^n/Zyw3̶4꒔Qien&BPkРs- g܌9𳘗zhvdDJ@YY,AkZf<3Ɛp ǝ'$;[jk]_7ALNTN"2Av|護v+-UCCC'N8qh:m{…&S{;\79x !tǏN&vfvEfR UĊ=ӹh4bH$Wݱgg:J&SD2h_zH[IAe]{ -|޹G#"_){D錱xzbrw[H+b/y΍]]],9;7C|=7mZ ֮_p~zCWƏޮ.J\ЬW~Q e0kOߜp챊?Y&|+;#oVY—i(ސqhBds#Q&,jIj(Y8`19"5?u%3@qẘ].6t!&xsSу&~˫i_9zb~kyY%Eh/;eFht2}itrܿmtêAB"_G$I˲'vwJiQZW\+LJFGG'''AD!)9#4 Y|r|⥜h4D:::Vz7;C''' $Xm\Ո;.pN<-Z.D"˲F"_066 IDATFf<\=~d* jdt;_ Ny9<<|ĉcǎ qy3:x=wzVjs94{w$_׌Nikk;gm=Dʿ#ǏtBD\_=88822H$ֱXlѢlZ:nR bBcOqlcʼc%)pݸ {oM7F ?2F+]3ґ&J^k@`;&㳑p@DLsmQ! h`UJ(&JtRU>zN:j_9_=-ԚTHm$_~  mA`!"϶i$30F[^K?Кg%yfQ{b- h ^/9Lp!(;.Cz[ rA3vR)RX>+b3NtLVh4 ꋯVwtʤ3^c}oQd2:{VJy򱧏<7#d\Xg-o|; EV뉉x4LX&~p|AmYQ 5_g3N]Lh2HCC##LeElCQcXC I?7>ktoφI;F"d|<~lĸ#%+l NFHx||oxgIMP{'~&VYYkѽ~t6J$=]c]I?ru\ңkWo9 z1~u|W\reN}x33N2sD/aMއso\xY"(d29:>Ё˗oKE˲;Xqg4֨~ޚHm{xlpQ/✣\iZ]Ȅ \@8r΀s-\@oeiy+(]t}p(@96nB ǧqЅ0s8e},z9iB5 .{׍. ׏R-2)d#@ HA5zsb ׃>?ydzIᑝF U2ZkmQ;"V`|9ZtTnqR'vҎl D1zڗZk qa +"XԊؤM Jtҙd"|чeƑRi aٶXm5mHyo2`wg+Ve2N&N%DbǣOؼkWKZkZq.sTZ#c lˊFmh{̎Ei۝y 5d8ΡSc*dۢ-l ްj]|<>>߳wtx]?vŲ-+bqˢ2δD+ulמd-6H%%Hш,2?ёf2f+*D1puH1%[c&eTCK0^E֘-0VP?O ڗ ]_ͱf+]uRir!\0nY"bY(`r),E#ynA4\+ R&Y.x 4|0I2IW-K!R(S3 g 40;֞N*P\2p0Lh/n@ܲe /ꙫLa -A%"5 %\8gLaF#î DŽgfC٘o[c_>i.JĻV J斗L`@Փ`i3;Jj 722^V Ɛ^3i~RKm_Ud7X &"`sSZ. *C0>:p}%U``)4D䙋xQ0If-E\j|2>8Zd+ !\㥠"F\r4Zԛ-2ߗ6CY.K6y&#`s</{^S_CaF O/ ~8ȁwĤ |">1? 1xd7$P3aZrƩ6bħ}q3\E=ܽC2&iE )ub_@liNh&,!3.Db~`oCKFT&g, Xw.B(0nQs24΢d3p ]0g:6֨Rocs!S!s)ըLܲb6Nd4Y{T~~`j;COy%k?'2f R6; ?qw:&%|kt\ 6}~ p2k3Z9%1SR*)%zRk||þכAЛmٹ}yW_)2p^@wlG0cW+7\@oϥ 0wLZ'{^_KUqΧ.Q@a~-gܟsx~qSdMgVlZSdU Ky1~ViMg2JiGke"XĎEmiVJ:8sfqQkrX"6ʕN*J͎F,۶"'ojQIJM$;;]qӎ X$ȱVJwvӎ;,|)/(7fU'H'Sd&쭫6)_gqs^Kb Qp*MI1NI0D.?D*]=mE"mQ+jSDVJ:8L&$J9Ehaȑ;Cbd"7$RdIb.XH-jGl˶+z#W:8NQa ;b۱XnqN&W+ mшӲ#5$Sw[Mۢ%`t^[-jE#s$әD*Jb["DbymV&j 4T( ;\B48Kfp~=Mqtw^v͘m[H-bSmskekWT24ćY(U諚i1>y,\E<pMgF p!+<J)B_2ҥuRҕZ# ɃTQpJ*RD1TZjd3$4Mg&Gu. yX^T(uTi&q &lQu]gݲۑӭ4bL>$`"bM#Q+s2 rL3-QiϕuD":\j%ώ jɁr 1޿swmzRZiv[A^?\c6\K#p!'^`*#Ĩ mv]*_6# dyn%__ƸX㩮i6^43TnZigIJ'5ٶ`h:kEy<Ӕ~~4-[sZ58ɿ 3y|Sb`!+*9+ ?YFRh:о<ʕdR)I@1lEkhH+(FMͼ[e9F*;1һbU/%,/"*yؿM;u2S̕.gJsWR,Kk䂃gL5ל su99h܃)ȗP zk`C-7.gțjmnZOruәɑ¾./k3 m̊Kh i/k>ƀ !(ؗ DqVZQ ֖ҖFmp4ܳTKi!DـT2k(/" pn[[sBDR+&\rbhl؎E:wIҜstGUpr NuZ#HV^?f²P[Ν{nBX]I :h¶ +oL²"?y>[)50yl{ x c: ٧0`Zknx3AF'.885׹0U| PBhJ[$GyΩꪮir~!yAV&j%LZIf |l@2k97 5dOgj9'3w]@D "732#NEF|ǟ{2{L<1A vY΂;M\uvfW"FM5IB2`|p]sÇ{Wjw6ƀ&=*;:ITbDLtL1a HHʰRŒ J]_<Y v~]V-Ӻ?6Jmvc*Qv F$*1FVli D߼NvX([l??f}2Y+R X-^`50Y13P )fV$ְ'w_߾эEXU˧uM5ˬ澕,lf"XDNH)t]'"V0.;E$ݑ֌)I95|9  &;"I챔V%9zj n2S6V|<gHݶDiE hSTBnDD[ihi=A֬{m4 k"BA]dO%-'̈́ۧVCΎoЋPZQbq#{扈5znSZ2fϏD޼EgiѶЉ IIS߻X5ߎ6(P,\TrO?ME^}g} ی\80kwvDWn?0E,Kْܼ]Ԭ ԽJ(n&QlH-a0reao{vS [NZ=cRUmBj6 DҮd  d v1YTDB*Q 5;dacO/-0%J)Nz*,L Vmr4!=6ҮBf}HRg~%@Ęl1))nDP.ۋ=ڰPvn^DM^lim9z%uˮ&" 6wHm, `b$o7[jhhGvtdab0*[XnPzdX%qN_mwbNn۶ I^?"` )e.X;E>[U:"(R, )%J莇D֫G)R$-A,Y@֤ fYMI%ܝvۗl7V IFL +:{%l٨ &"R>y ψ~`g); @Da5fE_#gv7(د x6}׮60Z\N Jk6V}<+@Txu#Wp:=XHg$pK@DRʃLdn#r+H@H`!OJ@ѡS!:_m&gPY\mY+r'ʤHc-…t>OpfLRt "(R/V nrVɮEPuoVYϺ)!kc#P8Xi^ IDATʙQ͕1$""X1A #")&E̊7`@.L0%LmNv9"Zs&Q][D׹T]4Ol{^NQfPPhh?]̰[:uh\c{{&6hL:(kl"!*"l "f[TբS|Kks0YM2trf-f\dටOȚ +0[ ?' $ aI6(k-!Á52 ~89QRl򣋶W>26@JPUlXe'"ly'|F"$&kN/ ;`lO$b3psW|żG-`XdLug<& kSWu mUڶ23|F7AS!J2ݟK޸A@ 񓍌5hJn49aw,mmd| fɜL"(͓y[ZF= 3c\`oP\b[xB+^Bz l~mEatNַVd9K@oљ.0ȁ@( @hQ7C֊ElQʏv[Fw>l v^/clc )Z,9D? 3#Jc8?~?omBN' 1%!5`5QrMѶDl g4VK7h; $D.-I|ÜLlA@ $f.kC pv$P ρh"v\g*; ]Ow7oQD"yF"Ğ#ڝJu{Mwfgq] H ŮC|]g v ֶVӽ#R`$daGX4'\b@2#<l9w@N1nq6LrKHKN}us>v'15)TߝX&I? p@/p+-|l]dc+}A'V]uU;O`GD09K `]q)`;"tkmv|4RqL8 U;vl;2s܉`{LQI;G)zٳrDPEq/uN m#!W~V(6&@ _(xYäcQ$aAC;-e3L7:&[°L (X$| Q$[+U CQ$[TŶ k( f,e_s^bl x wթwa1ũV!(!&E-~eUbᯍ$Qg9`/r8k , ~=>t^aUU#6{? M%_S-I˄*]b_4ȰM }r20U;\ \$6i!0 7\X#Ȯ"M}UU+6ȡQ'> HLl U*Ǻ7,_ʱH5ALN`8S \*fZҥʹ꿥(@2^H$ctX8t^6uIh, Dfϧ^yz-O˄*$$XGBN) i{iD&V>!$dK#O3 , G@0nli>`4 %p \ /_$'VYc`D5s뚥I/8;4vIʿ*hy&=4vISwu6E$s$ />c(_}ƕ@bټyw5l,DGlvrl١&X[C~wP9ž*y:o , ~{'QD^߾=%dKniX,/䐼͗_/Hӗ_arX2%cUkrOH}OW]&浇jVd:sA)Fq`y#s$z|>$XU[ZBmO߻8!?+]Dr"\Qs鈐mۻagjwRRJb$YBYZ@ѻ,U,OoM+i"`iFeW(IK>(l334J"$b_?*UlX2䙅oO^~Ϟ@6o-4 J"$Pž*vEt Dd6C|N"L ?paA )a~xϟ߿$tQk6A* 3A4aH`Sg92X lWr~O޽.bFj|ܔF"J^?R(x4aucA7N]!U]e}*U]S~vK܎IKS.LV O{>+ %J`aXĄf"NTM6U(iLK:G{*s@g8 GSMH 6nd5Ӱkݪ8M}f|Y*%`U,2)2$Y~djQTѿ ߭M񬧞rX%pU-]pѯhêVm+ C:ٱO!b"D 8#x<Ȓ>dIWᬰǃ̦8&I4&_QDGp31AáW @"^nѯhU]ӕ~y< 5rȱV&U'@iГsg.xF$pP2oܰ71K Zƽ* ėE7*Q$ ,*< xŠ>ua*?3a|S:ϧצ,/~2Bë: =Tʛ~\èj(Ʋٶ !toū0Z%0RL-bD3K+ϟr~W}{꼜@?}ۿ*eI`Cy/?R?,[Ğ:(_~/~*տ_%Dz?,%cOod@,ʫ3{+BB7H=ѳ'?z#4mΠdP{h%J~Rʡst H}Orǯ`YK Wè/ojSx tE 1,'"$U`XdA>C%ozE*/]^r$ kHY{JI*Y`%.DN?TR`-w/^QDKw__l%Pl7x_C4.tGl<)IӔ l7ݛx "F\?'wSf!B6Ru1ٺ6=ۯ}W~dΥ-~ePʡҨ *Eu s%,HG+M,ٶ_/ ~{)h>á:3||yX BA7A@!g !$eea]۞lN:B3_>>xI>>ֱ52R,CY$"h )#$6J064,ovÛ_ˋ'MsԡF+:i0X lHhNĬGf*9X 8^4ov{Ά7߿ݣ1L\g!  UBjX XH) xd@.e Eן?q/`ϘI?~19$I0in#t1\@Dakzv1ƙD܈?n ŜQ͋onm\+ ᳓C> ^%P\_f]ȗ,X }J;V,w/^=F$] !Zhտ$kf\Ԗ]ʞ_?5$JNtՐ*|CP&pkɮFw d=Qt,Wq ڼW61߸I>P @E kH8Xfeԁ1vnAhCHDD$ LPmCL1,6!O8͡ a x׾eafaff6F91_MMeG2R<1n5ʍ) _ %K}q߿/^X exWGagY_bI(BuI0bhտ{kXPt(y 3pKy蔙$jՌn3m 6l;`LҜ8s6,oRa8)$r+vٔl7a/9b__BXtI%%H$lpUZmI'(0yJ!\*FG¯jN_*/ȳ {YjVp$;j>d>HO~3`acX5ڰ;`kUw;Z1)0AwKgwp>I>Prc*=0>BJX$U_(¯A/Iw_!EL 'ɯ[FA@E]P ⭔uH0,RԩDS[ ќ ZR/uAhCM1H@a(Yu4@ _9bw{AhtQX 1h$~5{3K I!8Hb~"ytU}Y/1Ae#:sH@@&Tʍ%"д\Wb;?11,pk{_Úmt[B8V}HNHU$7y2)&QFϋ5Pg{umd`^þh64v"  iVУT,b9P ějB$@q SY6G{S!"0 "1as0!̈(,Bb B6vRfWov!sGdaþY&@AA`!3a֛BnkUjg>J~{#p&0,(*>Yk;y|]|o0͇`zbmz@e?0Pml L>in[ˉΔmh%(8X"и,{x-0;wY6;h=n/)l%RgG01a;P?W;V C Ӡs< alG~y<>g `7 u;FlZM~6#xY)eAz@ B?F^CcߛOі3]І6_-%@Q#ou};"9nf]Wb̌=UJPgcqkK 3`!kgՅ_%ٛ"(iE:ˆsuVäy sU k{_RBBC:+mU z^*ۙF1LgjR" ]BE)Db#H`coۏ`G -OybÊioKDQ{*ڬ2 BQy%Iv =8#o>JIj6X,jK. ^XEA/c<˃@IL!"a,Hh9R" "7IHmbQYvm9ur߂ny6*+?jKZ: FGWWkJeü7vU,{yb{:6`>H-1Yks\ 006ư6F;W  4QWՍ{h]t,dח<(W !Tq[%JM/a}Ѥ ~xDHX@+EsU6'ԥ޷&Ն=q,Z[h;.bo$Jܺ/KmKRD`ZTրPޏ J֘*tT }T:m@bT}Fp{Z1XMF+SWylckr^(bvtw>PEddSyާz"!}]˳ItZ2خB@Q(,ZV}mȷ NAk , ~ }33g-(YH 63K|zK3sGG i!DлI,V$.T5S:B{igSzw6 fBrާ:DΛ">o_7_|Qq˪o0TmjxnIaէ^qfk|xkG txCë́?Ip>ێ&_?I,ZgR-p4,DģI6#:!vxCA 2d}0kcTH2I5"rMPq\gzeD#mxx]LFQ̤ԡR9zԷ}gP̞gYUMT^ZhiWK;lV߅Lpe$&fa-w]= 7O5zHr_SVB{Cj|Sӡd& #1jyHzWw^t~\L BZn$gQ= rt/kpQXֶ P%ࡠ:u =.64G);$o䙷Du|m*@ kxG&8h(ͩNb듨 ڲҝ_G`qUWBL|{0]> l:è8-[L_ Or)T,KLShHU8!)vOq/8ss>/;)ǯrDYζuhsjZ2^e(ɤ8Ҧo$6$zGm-'B` P 5+{/:/P 71 3ǂ>8H㉾X&cv {@^=4NԲex>CᏕ3_w"Ύ ی,k"c}4-["Ulri w?H 1Gyk(2 ܪnlkoh8FUTPI@cK`I- UZ \_]0g>QDEs6#K4mυ+@@?fJHr@D|])BE͗W};Zcd^?te/ ]ip#_}> sE?{Ʒ$){gI", Jr /rȴt=4L~>~;/{\E\2%c@6y}ݩs Z/ y'O?$}xgDet9_>ӟX[C!]|s4H-k #I$8g!FᗱOx: zsqR6HtӏH)EDR0Aƨ*S>}O]2ƙXK= =%+?xOۛ+}mueHon@)LR$8(wAtDNVie?wӟt׻TtTm(n'댣Hl78$ j9ɨ~H .[.}r-q;ۏ~ǟ")R6IIOz6&nH)(REE6]KG]?jnw>^R&&"JKW~^F8WT?" "^DJ6j&vsUI$zںTbI2G{|*f7Zim%}ݾtqsƳUjxI KX|WVĎU$Pr9,g.hS{6jaC&5HSD;0h yp@=Ɩ>~MeMA x*4ȥS~u(a3ac c&,$}k F,DXWړ߽zŷ׏orOҐľ0\ĤZS""Uz\g h[$./!|"?wTͽ~M ĤiY69ULsW D%rXD{Dam6FknT$]ݨMEJ݌9 ytyJ!DLY3 li4ͿW?,KdmDhaac1Z DOjߑ0k!rV:$'V\h@; vԌ'vƲ>.SOT%~5(ʜeZ/RzT3SChQZb%0@ʾ48-{Aml=ڟZ84"ys.Sⓟ$~^ԛ* bթwU|Iy<芒kT3.PGxz6Wre?ggLY/=MНFdBj/t_6MGG*i5ԭE0t{X njsԶbjD7ju.&*:m(,6oW寧3(B<~Н_훉hB:'Cfits_Ѷ_-Pa,  7eMе54hE_Yt60/q*~tݘ:_ `U׾7ѓ[yHsU5Ҹ2﹎{*v4U @d{W)r~ִ@UHSd1'gL5t>pQ? \܆Cp9YBHU~1jꀫ$w ݕ{bFUoyۯٟWoѝ<|ϡ1w0__wJ`uxk_?w;T7 zLҗƿHךYS?YCCϡЌktȦVY9 NKF |Pv2iիpn[ʶb }G+#D$pq쏏ۡq`/3zK] mqh}ָ`tgAok7bJ0ȴX |˩?i 逫;/N]ⓟ0i@7 dwq[dh:0CUvPa81X%ʿE[ xKNտolVIrfݸbqK/̾{~[̾{~:0Kjz M'aI<ߑϣFaV ew;f}_ׁiK?5*py@6+S-j}5oy-," EDb}0k0-r勀:Hf(KqX oHHDHgBhU-*A廯["-f6g OZGflqJV:ewz@2ғ>{I坼{:3d//rPOFSgDX L <5ߍyO_~O؊JQhp,NLU~4왖]<4!oed\$Cb}o~/ͻSgDdX0's7EuUK߃X) $ۭ٧Ht 3AMΔ6x;`w@k Dv)%0&ZF gs&]D\1$oCTh-e4Ktë!kDWo҇)GϞ}vc ?F-ݪ 9&ɷ| ~FmdFbQ6/"R$B$,v:oGv/)aюNh)v XF}*+!P \sۍz^=YvLFkl7@y.K* ;:_ăHђ_**U-QT-*@KZ8|8#5_?7 %ÿW6= K.HC[hlp;[hc(Xf/{l,}kl0"3>ghJp+%s1/>gZl CYBpX8XRD,ikf%b cbw\c}(%?gD{j/o]\_Z2%cYU`a4 4Xk|98WęAX2%cԩnks(} G DžqFڟLs3ZTCMwUQÝow_Fu~+.CK݃dS6dzqi Б:J ZMgAoRVdt’/;ZVuP[.v/ .. 9[4!Y?Z2%cC-ǥ+É%̀g|#D@2DK1P>ʴP.FC{ ăUς^_h%ؠٗ~_}wZ}[j+QjdtqchR KÁ?sl`h o^?sESźODab3Ocu¶B% cc [0 |_!EDDHD6Vs;խ 6gxɳg("01 mW,QVVˑgz6c=Z2e`j " ׯnN"=}$6uBp02-?vw !#3"U%_2v`۷s Z,>B )O~IiASBwon@Oֲ_q!b!F ${8)Q Y6Ӏf#H`=0Ao6(6\"R &hk~jꟿporC5A"6Y3Hf{c3X6ip{summ"E)B7_&?/~v+8y)wA`T:"'l. }?Z>ջTtTmXcL$uUquZM'[JbArS|'jGu O UK@` E^~?H)IMrѳhsIjڨ$QD%Dd BD;6]K@fxt}cѩ4nا}]j6DԫBU?ك %`ǩx#C6*lfsIާkH.օSR5?Ӈf[<*b2mxMʅl ,cAVF\%E [*vՖYD'6Ml"Xk*W(Iܬ<- pUv_~q؃~eFa&Ü.h($ Fuկ=ݫ޼xy&۟ FC ^1@ i@޷9/ETݬ^UӇݛ?珟=ɳHZ7<̰ϥ>};gêhVC30sht%,\$?"&BcXD}2p5o%T zu|̄L6za")6缉V €ndT(E*QJ)Q o?Z0?yxI)f+i-e5\ *۷G*}pZq{<囯ꔊ|u42ξ ¬owJ{/@Mo;/B`G6Ȩ1VM ĤiY6:vm@+ \8p@LaXhvIK.n&Q=9w`Le_ϯsCkR06ZTk5km6Av *[ ,{ 5Yco}NWQYt-[J* 趙4r;¤}ҁnYY2vwGS=7n֐SChAC3Bf}s9hإ=AJ*rhp^s|]/RC*n֤vL.p 'Zl IDATOZ_2J 2{QI=\/fБ/HcJ`3I/JDKց%cwLе{*(;Y +5U6 #-VG>ʽα3ZB xS|OO|Z%pԶ觵?ÁU<Τ3 P% V#b%pqI\ϫ4x1Lе5tW>HFJ` ߻jǬ:U[s=c@xRE'|ǀ=h <#rp_V4/Ycwƕ_d x:jJ` DۯZ.d}#+\0ƭ }'ѹxZK>uS_d4_#A8O \4,,Eݥ3ᛣ&1J_J`ǿH+b%p&EesT  >5u5 PCiڟRKs0gQ#ӎU۬.tbX}qauGkJF.&Ue>.^ 3wցC),KgJ ĆV&Nc#a.@9RX#h~UJ0ofCjGNKVn"N]'?,WEWRzuy5וa4C#̑i0SU޷1̛Lx9 h+7u+6 տ-)??ea/=|1\!:oWGub%XA:CMSU u,KgJ TxBJ uzFwJ%0Wǫ}g_UA!COb(E-1X%pd߳"T3ڷX 3>vO6̾"0Kg#_-Yݥsd Ēk< G2@M?cY%ЗRg̥|\DE~A:pygYfsmVkH"?w} 338BAu bf E0ZL@w8f܃"$B$$ɆT޼x˗|l ì 3 'ZUVيp{!!I |ayI=[o^Wqe }0ڜ:+'J`bYAn$W+Jem$bwxEcrJZbϴTQE5Q Y~￱IT3-VH|_oOђu`S4ZĘ?Dqs?\;3S1A;Sڰ1fޮ1 ]'(JT|@ƚhș.6ۛ f DB3A|Q|]=Iv>ygO<} S0A,bXʔM :@°GN%oN6mMDHw7CuFc@@ fֻTkwi}j76ڰ6:f @ $܋Cvys0)Spp3}ghmذر0ۭb=zS0JjkI,̖Hb\%^6 ocF@rX2j֍ьK "#"(]J_Dk+XѾR+` ZMZ6&k\CHvU~Cn\g( ",L?3Z+XkVn fGJmNL>TйviԿ=GK3̼^Tֵu[nUk.iԿ=5|8N$ PF*ԼDJ?5`I.(af2 "a"`$@# ,s+P,BP;@ާle>w/Jd%s#*WJ|rn_6۵4o=@DOw6;+ ըVMA_$J)"a02i]8*?tQ,N_ |Gt|뉈"(Q$*I]b[HWZJlGц*m`6)^30c^ujLM #{N+:jI*p.EMߣi4F9+mwǰx=QKch?."b}0- 8B_K빎PoAkldcx@{KKqlNSOAK>M_Pc,HYgbu6Kv g$`&X29`v@=6u47ܼh+4ߚyzs7E?jߎC/hEs2?ZrZ%ÿ4ݝǯA=WiդztoJlM]L3t2_\Z9sU[[6@ˀ;йFhRFKX h"h~_g[2DK1#HS6`>&\Çg}\:sQ=?ٗ~_}wVѳOgn mSui )6#T86ǀcђ/.8Z տ5u pL gt$O@͋WfP" ß?afaa쟅YD$=q,`N9?/ E0}~P~"4'nWpwwo}շDDHDrP'Ϟ}l )0mk.U=){4 ?"S)""R y/?ůvQWƐSaOF9-ާn6h.DLwi{N"=}$6u $^ ia{h}w^$zdqB6y}ݩs Z/ y'O?$}xg5JC)vw3|?ha6FXٝ L vrpkg!#$(Q Y6Ӏf#H`ا݆r: zsDDBJ?y)"H@ &hW _m#g첔1ZYĮ\pN{K>MIц 8*N!dKvY,CnJ!XlS $P>\'],8[,w$?ERHmd$͓ǟVm6MݐR*Qn(>B}mۻag,?~ ":z^}ۧޥFkMME`۽V^!q كDD!PRl6vMjI>uvŒdlc@ɩovFX҇K#g<[ձxO9YqeE8X%Ne]!c8-,-NlaC&5HSD;0h yp@=Ɩ>~MeMA x*4ȥS~u(a3ac c&,$}k F,DXWړ߽zŷ׏orOҐľ0\ĤZS""Uz\g  I6g:?3A P‚ʅA"#bTd!wo^=\?)!rwƇK&^qk MR,/h:>?W7gB`0|tާl|9oU$K{r-q&c&h"!H)($(JL΃?)a~xϟ߿@l% 0ҀC8?Y{7z>DB w{]Ga+VfVW֏K# "}݇Tqą=/#Jd%1VM ĤiY69ULsW D%rXD{Dam6FknT$]ݨMEJ݌9 ytyJ!DLY3ÆfAi*a ,@_ kc",lL5F_w:]=Drk!rV:$',Ore3qHJ)+ɷ}}C_'>;¾޽lh7Kђ9 ̿ BQ]@Lu/$pXl$0ہ;>&nBS֗HU~wuTGQ,6j5\bt}V>ϵѮJW7鏍Te͛} B2EgE& \8<,p.k5=n%p#Y+J~k/v1`XET76CU:Ke zzLZt hBe$PG׷m9Z藱?wа-RXu(b Lbr݊ z$EM9p&N@7:ώp~o8 PtOfhvߖjۯ" `t_M1Vâmx%uG =bF$y醀ITC"'0O][(0E1lƝF5@% $߅&ϱfiM)W,P}msWOL"ݭ\0-!0^S ?ASȡ@ҌkvKfۍmu)I`͟pkg um6Z*n {Pl/f+'Z9lyFo[UoWuS;F7ҙavV[OšJmc22uK>5S<떾UL+6-j'% a7d+z_+xwq 66&W-}Ҧ1gA[o;bJ4ڠfeV?_r?0yC:<p{Kῢf4% @ e$ZϾ/ZhdǹN|`l7|3K}@C?,EJ9-B<,a zC4v$p*ة}EՁ l s{Z&T$ ր n x 'ky.Tgpc?ݻ":~4w~oO }r۫ `wd}4#cI}q\8<떾/j:%MuhV|Z՛_?g""bf . z|7(aaTJp%8-7To?ADDD(@!AHB!|h c+(շo|)041i"3Pm*,vXMA<=_ŲM&fڝ:=iI>_}_>=zw{9(:燣VYE+%WC_럾,,k}d˫m{^Ruܐ#B+/>GBTP8?Ε(:1tƺ%/{^sG i.LiǼvxv \PTdRdb>!c}LFqPPf1D)E5AD77&xR>ޓ(Xk0AB&:C(U~V)vG{ o?c"!LL#ƣR\)Ny~:sn\iIi][}%7xn yj}U.+%w/_|hձE[P?ӟv~ww{.R)M? عjPpY@H 01izYruU`K)J?wXR]i2>~~hht?enm?u%"2\`U\U0\ks`f5/04I#V ;`?Ƞ:> g$v 'c/Ց5s.d9VŌ l<4[tTȠҹJ+d7F};U~+R G0  231 "PҤVB) 0=9_Mo+>Vcذ FRs:WSjϯmb~TUܺ*z>o;0q~:l\"L;qw;&xBokYq-vs{\ 5I*xqÇY$^>稰n)Ea/6ͷpa &3h3b''l-Y*U,ƥ30%50bpkS[x+WJPw+fWJf1`cnh:gۯJ&}m+5^kZ231\o*8>M6h^f[`+! ?k+(>x2[/20t5ŽU9|(o3ߢmYɶ7nj?,GeZ?m"[v?p6а$.V|C`hsCq3!u±{>\Y x7.t t-#F3om}5n*8>K}tÂN4"Aw~ߙ;8;{xsH? s{Eg.f٤ fE1Ï!XB߸y r:g/?ySOD&f`GfMl43133OVr Zx¶EccW1{1f og/B&VO 30<} `bf&J'5ۡ2TZ@o߾~ B0LHR@_O_}r{򝞯̌yr0:燣VzNB1Ï{jE˗_=?~{5edޫ02*"H>?ʽYUU0j1c@"zիo;~vv@w>lCcB-YꗿeZũI["sDNش6]/C~<~Rs~)W 2˲.g~w]w/>{se=bygGc+/--!i]=o}Fl?6d%(b9% I8GD,,J)R( DQlŲtoixz7" YLT؃Q `%|2jbK#sEL-"F,0}jZ ) ]}{"b!:_<{FhJ3a83\s.JL+5~z{A\ i6'bUVvv9WϏ?ϞnfF 1#" Dȸ9c6]{<VTao(x/QU~: )Q̪TJ?rCcj"7*߼2c#MiP/gLDe3{. PLc8fD,jM?{vzs|än\}rF%fRaDc13JsNjD;sGIjݝ7ņ LVY&RʝL@_ ?|gip ;f 3U"ʭo3ݟ>|#57+RaJDDBHz4Ut$ 8JLJgs7ڍ1bƖu@[@p[P ?ϼ6ۙ%`"3Go`}U|ksVs;XkHmShQ(Z l8۵Ool|0{SkBJ) v!-;5kO}Y uvZW'Q.V{]߽{;3x-/JJtLfR}(xE%{\@ZkMZ)].+yfGH[[ME}S{@XP7o3`yjUAJ%ИVFjA B9G1&AAǿvBcJj j $I$ pfpE5+ZiL'Lpy6QdkT?jeҾdd^|w'ǥrUt85hqofl roc"KH~$r% ܬy*1-ٟ+FK7bR@Uq?&`F``)̮&lPڧȹ}'23ղdI$]L}+0+s`@!3D˯} 3É :_fD(.`Xwg۟`_,E8ADR˜cy3 d%fٜNi1ժ޳9ʘ{ӰOm nML~Z 9J 8FD^B9QLpQ1c/C.+Oq#~u'Pt;knZ$s|"/Z X  䖹~$*;75- #tgipo a;XPyd՝F'arΗ%0F)} LflPVjtWEcbnw4H Z-BD b?"!QbjMZ~b"l+%8zeY+4;Lz]q́f\;*eGvc˗m.$@@f)쵡3 Shi(I Z < `_͛4 @:tlX-UmsdT k~st%Ĭg 7۝r(3YȍNKIXl-f%FذS*UIWJB|-ߩH+vIvw<$Uji_)F*XQ 9޴sBe pz*E!GX?LEcb}CKEJ*&/VX(`Emې6?M|k\k8lvǂyh~Lg\,3ݯ}8mK9glw8qbC" 3U9̭KX|U-b1 &Ć*Fo5f0A|qE6m{O"E+doleE˨-XJo"Uy륏C\r"\\8($$p96%<~뀯;Vܾu*% ܬy*ڟ&Ŏ͡+4ja 7-!':=5gw1=Y3l|MIvR鋚6@'[9$$pWuJh76W@؇f+r.5o%#d'ƁnlιMw%A ;lE)v72 U@R D ܊u?;6lP$|) /o.蓪SJEiCX_•$`v6K?yK>g//Oozy ꜟZkgJn_Js~8-Tbۗʕ(f D}mH  $1:@P٧9B qK f솲_Wk63񐛷G?f@ꜣH-t}0ͼ'1+MfȤȬ;YG.{ i ^4@,=B&h]k_KÓ$|O?b}mQ:OnEc{bܶ|Vٞv_J|Zk >""ҤR\)Ny~:sn\iIiYM3w.d)fPpmc/ZAS[? ;v=ar]&R~sɠ_+V i29-:Z2S/aMo?ݯ=㧡'Mx{%x_2AW ·R!B1ttL̚yidvb13]9J0tH,N'd?GzǦg@H ;")wo6m1 "`u΅,'ܮ{1#;FE*"$XU|ж|/):!G:# )6+Ȳ*F_$;⍿Vmx;ֹRr5B熥 ~@T>;m{8?Ook6iпO/>'ohkц%~ o:GeeHYIkR)`b4 ΢h?^ZiuISy /\}jDV`o(v|S ™RGR:@4@ds~ e[ 35W|Lx&2])„_}ë7n~{d-JLZ2`V0[.mа ̦~*1"R*:W:W*UHi5k""&6k~o:]l.Au?joRæ) ?HqE^* 39ۭY+-r%*%"(@&vsr)xD?t][>xK\z-PL;ʆ24H8F$3-`B_d׿!̻GpՕJ֭~s:wR2=ͨ%o+9֮M> S_W70"#?e=8"|?܎>: j4rqNef9 xL؝NT4zzTO[4jS$kz<-$8F]%hzJr' %p7[l#|ȁ}=ᏣέKZJ^oG`)+-ry diJ?%0060l}v9vד:e~`}M?@N@C%K>=uO6Ʀg&ơSX"C8QTс7 +?,JY:րͺfKWYDdk4kuE廀tG~azR$CM-cs(!Q)l Uv$nD$Xzz QEs7sWvʛ9层`=kPVhv}]=V(({B$|_w.OȹUUWJXv׫f~uf@:'a<! Jʿ\H7h̀Ǜ R3l-uYEkW[HΙ9f~(29cAD ߏA=b/nԎ=;wa~Sd[vqJF[M·8Z2OULM*Uze>@ا/EFo`(~T21_oVHu-]P4r['dZlL(/wEۯ:(>_[oݐkUN?`#=V1"?kIDAT BDBh&kis6Wd%Ro&F,1Q)K7656}a:$ DSVA}GءVݕ**YC|o4u݇ZGUJV@_ ZBF7 &BȌR "jZ;Db5!)^!?u\'{%xM&_fm3Wt0sH *rm`]I( ym+؟ cEY^ ]DW@./ DF59]fGӱ[J55zfTXn=]p 'XKlUD,ʝq8*+ l{ E&R #h|".hF2qA 8&ߊJʿ-r P̀[,M DF`!9 3q(3`Js1+"Y6Y'f뽫S}q:1„I *ro^JBݑ:v3LXv"BrfE\|˝hNPnx#rul4׀;K~&3'~W@`7/ eo(3xİW(~!{]WQ@9YP] RLjڍ%g;;S%[ t QD%J(QD%J(QD%J(QD%J(QD%J(QD%J(QD%J(QD%J(QD%J(QD%J(QD%J(QD%J(QD%J(QD%JAqξ"IENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/weapon.png0000664000175000017500000000115412140767206016450 00000000000000PNG  IHDR89o|PLTEUBBB111YYYEEEWWW|||hhhkkk}}}~ m} ɳrrrTTTXXXVVV<<ΊCIENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/fr_top.png0000664000175000017500000000516212140767206016453 00000000000000PNG  IHDR0SfbKGD pHYs mtIME 6u IDATxoLg/pe# eS.nh/U4641I56ئiӴiҘj\mrً%qkOJXAAtE`Qf7#.(W[Wyyy6:@^^B硅NA+4T NG!bn:KGFFy$D"_ZN&(+]KMuB$=+=^wi躎M+`nܸiEAQ0ý,JYo|ggW^ϵ NAq階ihڭ&~zrss-4?n44$IrssY~}d2I,w~|?orݙ*++:u궱g"|6OvT7Tτ蚆h,~:K,)(f eeezR0x|byۧyD"f_o6ƽyO)[{IT*E^nE"4]sxI#iofJ8rn`0HGGgΜ`kk+lڴp8LooY0vSVVFooבּN-[(6`)) vtOU244F ͫps;F[Fzj(" VH#,Ưk:)vX,64Kaa!===$/^vH$ء!󘪪|>3PWW\;cfÆ TWWg-~򨫫w5_P]]mc hhh08qTWWaK3cN'/322G}я&snR\]/!u2#kF`f+`VXLs}ᇁ(zJJJʩSخ.VZr*gϞ5oݺF$FUU~k3˗*.][RRB45c-[L\,&(E4Z\.[n<o׮]#x7cl6q Lsꇈ>k:)`X|t}MӲz<$s6hxg3>;v|#vϞ=X,F(2Gv܉f# n}~>c񺲲1z{{"jƍL& Bw Ï?Ȏ;n9|0V}WTVVx㨪f,ѣGEη[G`0Tυ ,#l۶zzz|{CMM k׮eǎ+ === SXXڵkx-vTTTd툑Waa!555dkmm7Ro&Ö#S.\166F*26sŊD"|/"ˣU%JBZA31>)!2mrtL}`NE}}=>oUU)))H$bƅaGyy9.X,f~D"Ea߾}(B}}=P5kp8p8vDUUEᥗ^BQֹm%( gyƲezYיpQU+Wf71ۮ;ZbxڊCQp8t6mⓦId$Fl:!]ۉVQ\aLOΝXaDŋIRTrA8q׮]3w9y䜝ihh@QX#+WX2F_>S^ݻ<qZݻw( 'O4*++0Gd'~KnEEE<#>72w&>FwW7.] )$!'mNZoߎSM-044Ċ+ؾ};@r׋$3::|`> }!}Ǐ?N UVglbkEÛ7o y@ SO=ESS{% S i0~`0Hcc#f^F@mzayF/2>>NEE F@FFߌܞ|I˽͞={8p@F>05siTU7z6473v g}ܚ1iTU5sصkmZo[3(..f޽ffF>qz뭌i?<!69>Oi{U]]ܹs wep\nS܌墸_ܮb~/y~M[N0 !b1w W,TϽ}⾴x!AMޒ!O9I!BwIENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/fr_right.png0000664000175000017500000000426512140767206016771 00000000000000PNG  IHDR(2/bKGD pHYs  @AtIME 5BIDATxͫ$WƟS}'aIfq2#a\q\ sU.ܺw .;M!&&nFuqqss}Ty~tWoͯ^m #1+0Ơ W?~.ɳ !Ĵ4Fwb[- |mH\wu=e6l4qi,[X

~=yDuĉ2v1Avj>q&!"]u׹"8UǾ͎rQ: PP 0,hyM jWaa.I-BA-΂|9׏& N PP +Ȱ0(䛑9]q7"vs`/U֕gDŽZPP PP OkZ(Z(Z2d@A-Բ%f;ǟ~|3;g LxM j<GO:CO:BN9 IDATx}B[ْ, ' ll.N=wo6ZrΈϟ_llln>]/bl~RV74[vp4/ΗWϮonnno{ׯ<}>|_~ۯޖ`4??znVU.M` Μv:v-d>Sf@uZ=S9?/O'ʞa`w`mo[`#`tkkP͟Lճǵq2ݾQY=W^Ϗ?޾-w߯/F\5vov{ YVn {{.`g [vgfT*Uev<!3%3- :Ϟw3f ?իwϿ__-GiirV`2 &pH6@VDZz0pȆyOh 9 ŽR|tÏtkfDI+riN xn /;NL Jxbk503[38??d.   4;WN߼+n^]2x>"5: `^ 1+`Ͽso=vvۚ׎'3C*] |kohavU8: *d DOw {?p< q'4sZg;}{!@7`naB8pNr1͓Y  ;]%s&8S8``JGfώ,3-=6LpZx쬑 f hR00G06r+ u39,*#EBGN|ybG={]'f %4n _h$|0NaJ^ѱ`0VbC{/{T rX8)d=d^؟g?P%NQ~~bom,7PJ,>WX},uX mGA !*28>1+ǰJ$ 9hax0pz]Urog8p) ? %/ ;`fa+HCZ2+c jDfSE5|Q6P*h @//nov3zNCǸƴY\<@vIX'""E?0QoDd"2՘+N#&rA%9gI1nwCx8Z SzcD~D0RBiద 'E0S{O1A~IcID3 '(A! #FW6z@N@:ev0?\ăo0hB@H{hJMʾ:R(J.5U4N7:<O)pPb Ȍ sX.NK؏S (F~:};|y::;8;Z˓=%p"EH^޼%|=;l̙#/ $j@3lXr2WYp/uPPpYÐ>\\lUeR^D&OH T\ y "JjJeg9PQ%&{=p%.P=͹8  4Gr|,``> saO(T;s@v3A&Vs @`LY_~59;oi-A2>aD=c\mt[=H}T)0e^96EEfHd4~ã23d.GQP,~@ r lDzg5XT\)rEV}@}dI8Ez?ab8B n#.(# GYX0`WIus*@rs4L|yp"LcZrp^K Z #5YV `n=nhNeP0:Bt,ݪIYaFM@D [MΔbA91bްQ9  >O?c?Y"GSstT>ՋcUYPPg7u[f`q1!"/hpҠ~j.y}?^ـĂf&GQBԋB>)R}-2VyP#ͦ;ΜS(#f0gA Z_d5FN|jK+`N2`P-)eW(ힴmYC a4|#`} k!z~!H#>"A=-u=3:q>]_D)oT*0 OH/]C;hhBP#$ r@tXZ@*S 3DҚG?q}3wwZĖ#L0__"Zqh CmE22w4P'94 M{ BgUw.q}4@1|sde1ݢZst4 䓠 ?LfJ=g@c/%1oWqR>vboQ`8r7[I f?t=_nz}嬨Yv;9zx˓hrW"zb"#<*3,``!G<¬Q_m #tD' g&rUPY] $984B7&uc/?i,&SWت @u'&>'Ǐ4P0VXlS$??u48 #+ X[`~M \&ΎM&8K~%A5,YNt:}~ѱKNEeʊ 9]yxGXg}bX[XC}-PolBABN@ ᙖfSV# Ev?&[FkC]ZS@44`,nlL604\$}Xj9`V @;6P5Ƕ͉V};9/A R|/m@քP*/x fip L%'s*+&l@v h9jvbk1 gWXqGX<>; x?#yB ޻^1 <>Nۺ$w[z\n c\p͡h\ M  ph.Nbp;sL/"{Fga%<0@!` [jL-X(54zURBO4u9J;<F!p#`O"mx|tN_h9p >ϝG\+x[@<1}OU-(Sd3Jd٠Zf h&c縄ח__ߊ lonf7n6/eHA8p8IEv'X\Q+ t p&re.8siv#" xn; ?'y#.ŵGMW $ `/ _.`h?#V DA{>7"pAo 6[NpQ5- ]Xډs[=Gsv'~20*؀U@=лAjpj?ŀ$w4?} ahAJ 8D*.}^ d (}v޹ çw9ҘH\y `P1h3;uMt _' Ƚ]!QnW=|d%@`D/BH;j00`6' pD@Wip'pL-.\S'?!Dǻwos/ "3| \_`i,LL|SЃ5-&|g IDATf4!U5I5! \'R6&A ;x'&8bk5c a`$WT+ʿ5爓h4[D6Ĉ"E73oaK~蟌gC2G3b?X;v[q5$.8}r3^nigIb?-않:A I DR3 y { A  jI 3 4{ɬ#` \u=,+$P'G+ W=$]07R00[ۣА`g' k9y7= K-)樓9zG^nyR9m[u:I"!8n(爟[$)7_< m]R I!# 47I{ n4]1l¨㉮7^i4f<\L\+M7p.x?ЯTMZ.Ik@PxP;;ݢF+ךph-3^KJnfbS *F-]uWI=*^L@T#?%LlH% \[ħ>?_^.+]K?mkL@ sfk =G@,2i:$8Z$oYc(MT86"\ T ]FL0?;> >K/عIn.|Qt全pĵ7_;f!'BNw D+KUŽ+aE"s$ʇsLB_CW<K2Ro^wEksj5-A㨔#`MZ.#y{#f jxLg?o輢lx`RӠs)],wҾ=ʨ`vͣXGi`, ͸aZHutDrw;T?ķ1EhN`=G+NJKiW#iL BcЄSp|CTRYvD,a90z/]UN0_.\t0\+~{'|=;l̥.__P*6Q!梋T (@4~#%4BpJH){`/Or=} r } ՗+Zj:T *yj2 /; 5v$MC\7URn\}BWeU4~e N( _;6w rxXe!*1*~`Ag! qCh_HۧmC@*_aGa@/~/ 蹴n Cd%RhD_95!Tg5c`Ct">NZb1GzO|K Vบ鿯O3:wzg5XT\ͧS!\FLsRxgEh ciS ؃Tҧ 9 bse{NݜJvI;hcn7݀ @wSCE>`VF?EbF`.y``1T)4;-:Iw5TIrU@h!w"#Cgs@n2ыcW|שSs`ŷ9No ElEP{oRQlUIValMB$b~?EiD/r@#ey'ـ;u `t"*:)Ci$*PuUa]mB؅ 7`IDkd8 EKPJR5m;uAlR$C+vsCo*<)C6v|ѰZ./mVx !C F t]3Uγ=T Ӳ!X>]RofQ1} brh>r7?u: s˭/"" $K(b@rIs"R xj@ 0P \V|5oIsۀmzO;{gYs>Ou|o0T?C:4CܭߥGGh@g8o}7T0 Mn4#] ~QI`11¿H2DkR4 g!l@@o0lew ##UhbnV~V5+KR@.b@h_Zy2wѣx~t^I @(H (!<lZŘ]O~LvPF2>)+g{,x]w]L ]$0@]-ŀ㷰}59[InH/l v ~v;F>/Vnܵ9ʏ?8u=WHY(u;b 0oDhvxDki^Sfӭ,(gICBdid{)z_MmDUgzzEI>y|yy.ĕ7$|̺ |(yʇlX TV{wIkʿh$z;'erKv]#vk-ef *B";1@,h٫)k6T+̓7nv ^ŕRK79}Xpciy GR(2--W\bLF,nC8k!No$t;P@Q[[?0.gY-} 0d+-pi\CQ% pE[`0Y/4k,HuรKNfEsQڝn؜ #dc"I!BK.J Z E @׾Mv+T;'f5l"ߏ DE E*DOcyҒڟbh)قԯ77gDLPٵv,ĕIn1 qP1@}[ǹ X p2%]S. nxڏz x׷t{}ԹFd  Ǭ8zN$>i4 U@[I7@MvG,sA. FO׷׏.@qu p[S >wyKC,= Gw!}ҷ G} c+>^wb*oW?Vx+Ha9aoPv OZ7q>wnG<`}/DGkk9<H,@> ^@\O=~G@í$|{"݀z% H!<~v_:Q߽T +O~20xt͓ }38Aj>pl?ŀ$4/ש}1Sl0u{[{`[6@~Q]ܥ? _\d| BRQb-`40M;Q]c(}Ϯw#` # px(Hp hEQA0.L p|C5ؾKQ$<N öo׽<B)=T.rlg+ XU_NPh>._ϳ4 @C]D($׾RE+ pSO\pOW>ݒœT~vH0)R `=$~cl?ɿ{/u? Z0ax(>ܽ|ڷdUHe4T`̫x$@.`1*O%n᪗Orm<9=0KW9͹fVZi"@QS՜˗q|C=?( i(@`pgV %J]ɧB<&j@_4PR>τsسdJ_R~.y !(J*G% ?~CG?oo7o`XfHC/S+h!ԯFPhU i۠ Tp6{(m>az* J$όjv*ix%?tL?M;d-xɜ<}npEi#HgN^翮ŽYELBy/tQNaq~/rT/ rJ>~?H0VH$s<}(΀\Eʿd/IwH@ׯ_}OxpL|A(@$pC̝ Y)eҽ 7p G:m'j0 YpX\p애gYxsǏ?}ߨo_>xxx Y+AjQ`< grN%tX*  t[u@9~~@aO(|@/Ӥh4cvT~Wgq|&x~7PF芧av8Fōr"ж+1Mz¬#`? *ڢ(jïQCCa-`4&)D21bA   1Z>/pD1%1\@1`@-J6$=,0mD   0eB0[>0gB1fB.uE0kC/rG(G'G-zF+~G.wF  (G,{H⠢NbKGDH pHYs mtIME  }Md IDATx,CȺ'l TU NSc3W2QΠsmg~}/jH= Ѻ=wͣ,FܱaBaO;oc a`XٟzGio3_okVA֩SRc+'?}i|JeB4'C1Ys۽}:aW7wz8 -А~_?ԇPS?%X/ҺBgop2mEF_rTqS4!̀;)|wXƱYXP:}gN ]U/Y{Zo-?/JL)~)NhO0mX:ӑ~_ӗMgzYr#]sdpuV>9JqwNl<'ħMxZiG-}YG;5,U v2ԑO宩g۝Ċi/amtGf PkSoo?v]U>Lg#ԋiG7 q°$s?|:ΟG}O;꽮wz7)4 Yg|=Gl?;]ݞX% raNr CA.Ɍj8EodtOxmƤ͐Wd鷊\ɉ޹}fj:GW1YR\r퍺}״O \cB*噗Ӫ\vtu/b2LmnJUU-'8P^[S͇HqIΙ,u1ƻͮi{m@B2 h#{wTIڮtT?i|~~5?Lw>i7ZXu ü{ј{p%9᣸ϯP7-+9Fӳ%N "y&WxҐ W*4bTgeR۽r )i; s! 3 # rY[ފ:}=moyV4~X}`wetƊx{SFIo嗿uWcOC?IG˯7ݟ~rt񵲍OjW$bC4w!G%yjE{J'jS7JjԱzƕNc;cgt4,χLۘ{ zHeEUR6 ~WN/w˯h qdĽјѤk^~m{SS`+l%@n]0I~c02|l ̷%_U⽿meS@3PCeebBz n x=rdv,Y7S(I4xF}:~iz']?qq͍nTҔ0⣇C]]pj xgRZJ&OӰJ0DSьpвZ:l]Y^l8f`+Ŝ!P%Y)SKkiC $,^xoM~CxzM/0>f܍$ 3u70=?i7;=}c]pz б]#W8;yTs5sφ(׉wLdVօ`yb\rN _QF7& &xRӄg 3WbUF(G@Fn*'ÔgVdFrojk]SwS_PS}w?[y:?k7Ηy7i!O{tTW7^1"YbN|Ŏ8rqmO#數פm4_5MYUT>9żZK\W $Fͩ909Y\t]תͷ`VV"37bJ!wF?' '%/<492 Ώw:'4usx`|{rt3?Lc}+GhN*HWBŷW^~<<%=rڂЎ克mޜ3L1[Ic xinaP6`"2Zrmͮ؝B: 0aR]X?'s ⓣ34` (1 ݓĝ_NN:'_:'=oOڧO{ *2L+⋞t҉6f&9^~&gy͙7|B^ST")\Irv`Shz)5sEX!_f_2,CO} M(fŁi־2CHΦu!F(cGq3tMτLPΏuÎG[X?>O{xo]܋93Dtv~] P껣 FeO\iڍV ݻD߿6ZFjfɋA ^>.ᦋ2f edjRVlmOmAM{LQOuQ_% 21cR!2/Ox|GuQu|q5'Lxw`%݌o?Ïf(Z-rf8gs^xd6h7z%y9vp,c-c %OJ i{R~UѺ9]ɃX. \ƵQOZWD$f,0re[ÃRwѰ;7^G=zڟ￀1~8~誇 GYNl~Xtb~WS!})yu&]U¼-K[/g[8nʟtTbHXhA d , *sCFʙXѦwߠ59adH91a.$a%rO#P=n?{qk44[W Gd<=6;4H`36",ջ/#ܼkYy+`U7Eƿn 6kU՗0ޫ )rBב*PT^<44VO!0E5OG YUU  @te6FVqOi12[3K E<{9ȭ0 z` (+S'j^uFEx40'>$#47:5c[}kcQq<1ɫIK6 kQeC$21z~3He5pt`@\fւS˩|=4Zpm9 (8̇QֈY=7}PW߁k۞L',eX!Cws4OW=\oL\5Fn@#c,cz UI7 K?>JkrC #Q C"GjJ y4=fXK!7o TͲ9T#!8|0Hv8 ] ?["(!l-y˲k8|~T,1 )%FfTCUi /|Fdtj4h3%!x%pڊus(zCFm ZœWr.^D\A͠It  M|0dBm~vaq~csѧ#z1dwQ.!w /T/!d5/̎ o2zXM5`kp;G“l'NZP_8 `[o5lYNit}%2l洜0g[fٝc1b{+r>aR8$R!%[#n'64羈?`~;0n™@\#Yx' I0_P@^~4j#Q_#R%]KW]ibC+kϒl[uOWUھI=k <|vT†@fy5Rwk,#]>]hfU=H A\a'1 Fb^Wj1}mdzBHIx"fxFA'10Z]Hqw]f8i(I98z?218]#7:ƌN-ygLZ+.d`G `%2 ̑ ү.V)x 1eqY)@A~H9!#g"I< NylR%DSpYyl2&щ 'y%BȊxݟԄI Œqh: ){f\̡_ڵ[TOFV]6bNIA ՘my6Cݣ ,ÃPT]$ u^fvwx<4 y(M\+21gύtͱ9P%3r/Ir3 t+jxpIa؁1[L귊tw֯*3Q)P2؉Y9z.RhEG0$5L@T8CɳIB܎z^n\ O/sy 9;|H\2t=aeYƼ%ۍ?O=d i̧EƸ~sonZ]33QK߲-̋`V?bieȗ\ל MILZ1,,נ!T&8P*V!Ђ4<, aLǮ)~QlLJ͇o F Ȑ e,'17:݋~zO!fiA|ʸ?cZv; ~쬮$?gv_`Y$AC,XilɓQjI9vhslBn|rJ&+`V bN( 9#3 װ4S-3nUF `1TC١щlA!ty;/ Acġ4ǥv#JzPf{8BJcD,vnS˶jZeyβ$40j˅O)LףГ̰"Y%sX$, v_͊ >+f`P}xC1,xmdQ cw<72VC韫xhF ?v6-́P$0Zf{{ԏY) 3 X߷񑮡QN}00joYJH}FeTx>WV.3]nzD+Ugr+PO:ta_f>@8\j)V|V? |( 0~6uaV0B]12PLHY;!p$N㮦2 20Ax4#أn{C*JbE(OvgWic9YYʫZlK@Žj/Kur(1AЋR( v9qg |/!tL|{M)_0sZ؄Ғ׏b 6zQƠLIt ℞ L8K80gE2NSmOC0?2|mh%bpk#y Hem^SH~uBfWldqHr @ : O bJT&D n;p!$#1R=udclIɅ8 Ecg#~G`pB&OWЇ2t<=_ *ȤN.-*ACAl]W-o7>dpV";AUk$Z2w͜27reO8Ձ~n@$LAr (dF_>Fk]0wsm>fG*͎dZLgy#:} ?*=BGz)I 15Ci24ܠcfŬ@̭ҳ"ot篲GV-*~dLMЫD d :z 1LfRx~g$C*3K#bSۈ_<@.v((`|{yGl$} .U2&:,\: V_#Όx|DT2\o߳z4NݶlH6w"TDJ9$* xd~6/i H ˆl㦘xb(?@gb1^Qpq! BPJ@qp};:qzbֵ 6N}R3(bF>t i_W{{ed*x0}I͛;|)V{`ЪPSj. ۞`-o$hR~0p-tgK 5~4.jB FN 02/=$(VlxtS߯,%+]Ë2/4&C[A#_!ԥesj#V=ؽ )1䝋W^N+n. M_$;-|j&7T%Džl*27P~;h}>3;!w2\ҝH={wa3w  4Ɵ|>%kO=_83Gݢ+w8#}tA3u0q ҈HKן7m'3T%TM }_bjŘԀa-Wg`fCk +S&y^"3p z̚}|A+>tC,'ި+,}T F. hFp1~`Iڊuo,2-`Y xmJzP }kQ"=Y8%[yAEt 8 0'p(2v~C ,Z9%A)gQd<srI\ NgD%!zXLcL9_T6ъ@)tP/[q,XAXglğqBrmM֫zg氘]LY<@˂}"rI'pf go dEz ?- d`oëDp,^m] <+-!FבNyAwL >JW=a#qm utw:~|}FXifL}_\<]d!vI$W9swM)1I]V[Z="i'M'WXOtĈ IDAT5uO>_ʅ Ƈ)r.Gؠj k'$ا9yWD= @zu-* l3lg_ߚ0`s\mYD]_@qz!*,)atkdM-2unًcd׍9r*eVʡ%eJkil[\S"S[ 1Yf : ŦՓ9z\Hp*|^,5[ ث^@cK_8CpA\ȼ*Q6@eѼOg; 2D G`u(+,,XI8W. eI_[  + ш:UV|y&{"xI z℅&Y9Z!!J=AsB_*"TxI1b0i|epaEylB22x>Ë~&לj8xUG6sn%Ns,T)$Bv. L1;;<7 '\?n9,졂лp*Vޏ^(Zցxe~rԐ !#N54B[.Mf /3ZF.æB&1ªL%NL@pNDJ:9HM6(=!L jBBtꪙ2ItbCJ1ȈϠe3^<"hWz { k6SFȈ3jTOjl޲d;j* UO x#T1{89a-MZJIz}i@8*ߟ xĀ2șK}g\ |@cRj8-9{ަ/ FBJ!?p͎~yG0c{eu oP*Fe UG8gO/>ҝl<+C*qku&6EzrFjӳݠkM& )ScCAޭ[L4IMm{"Lt~!V 4 GvxeƝE"l(%"lT+^Bm|S_h^a"FH:NC>0oGG7J]@K ᷸i&UQS!s[{YXFF_4QWtV5"Cu(z=/E̽GjNMޏɦW+2UBg1,J%~82Dunf"jh2@ ^ 'RP̧ "v;)Q/=>z%S#?8vt}":֕K1چ@jRxldCSa^0|VpN(m^Z轜k)k jW.HSaP iL&I@T7*һP>(PX %:Y2LJL{ щRSƥ5*>\ҍC=Ïf{E =ee @N|˩4K^/G{\% mӪ^Y<a~{M$$J| r3:r(wsA6 Ql{~(iXn pVĸRcǣxj?B'8TL7ͬWvNsvX݈oi E!x<1!&i dJ@a#)rXAq67;УYj)|А,+3p3H.@ [yv(0= ͙Il!֤ʽRr$nd%0 6g V+3H^|[妄s=0̽\Ok8٪ O6 )EB EE=*TpjK5E@S+WZF- \xz*60br %0˘!9yd؟z4W]8@^(85p̻U}z͞$Y76&A11:(DI޿i}Ó4糑DЃXƣ-r|V%C~lͿ@v_!}B1Y1lj)˜u6k+K!DAb0. sQ#HS8/86X @.P*]Atj xOs\9s!<2Ѽz>gE@6+_"4 < W!{ȂgbEʅVljhpfKr5rJ ㅰt.'Nhrb@7>"/9BF}O{w}˝(w3+ɤ 4rp;& O F8AU]Nomx>ܡ,)/CCUr@xǼPMyWk#ޫ,A+!lڧjlLi\(EH$* ⎌#>_LRyw^vl6]u|,En?mfiD8(|tbvaA"+A(M{ ;B[`7٤3ښ)&Q42p'0(=_6R5K._5ClmiD񀱂I$ o؍uګJ5 r dTJVf}{"Qcc\L )֧aCs$=\o6"a#QF=q[ʔGr; KrM[:o\Eo눑P:y㴱 OyVUaNE֙9 ,OՌg>$^)! )aN*C+1YZƱ WMFX4fq>f28%n!ã.Фq8 RJ9 "N0"[hu&&W eI^AAiؼ;#2e7(K a-p`x4\g*b5f"ϲPmG:Eq<sA@%-{&L=oʮ3Uu =M!H.L Dl` 9AM5pH tsbYVsJ-¬y)zYA|Y1ّe gܯ@P_ם ,㻧ڶr&UpE9g&{RR=T+B86CJh2۠eړ|f ,B.ҎGjm[{;-DQ D2%K qAҿnB>>߯$ьDag (@49qCjQE2ҿFE-IWyW,[e_֟ q.-&I,bHAsx܈nQμRm%(AF3,z[aF4oea=^FP^zlFOIlbnqG-ɤ<;p`@FKVdqa&~ &}4RHay B4&-"->q jNG݇{Zk v~ `H|ρ3opx9䙜 i.OwWa 0g6\G@ CCai!&2LZ3|!OrI"{Y&Q%x.k̅dԭϡ&cldd i2xzq,mIQ$Hd;2!Fhm'rȕȲdU1nѮNyw{vnr%'psǁs{ ]$4\ց2^SɶRwøy U8dxaHDVny zJ~tJ݁CVT)_ ]oUWjfMڍV\O_.1h@l/Z"=H{~G^O JOeM&rV H g< w+”^+D^| SҀUI2"1&4\Afۈ1fVTn#v/Ir'C5;.*b].Ŕ~XP@8\+i^f*99xRD<~w3(@5كrܣ2>M磵rEu knBB.JTF\ݑFBfz M+ B=G?6o=~U3ZAs^FT%%^V)!n^ [B܍մŞŸ!9̿UJUG<*x/cr{̴;fc|g}G%G5GI, ``m =W5ޮQ' Nr(#"Q$rPgSJBOnsWU ,GL7*W%}E@-xY OF 'c 5(G #WVtI +@95T*85~ԧ2>KoK<ͭo.A+GWmm#y|/վξ+BӔ E/&֪fP1kYWL-aX-<$+_?GS5P(Q >:YŔ&1t$o8{~V@$ bt^hꫀ(*ʳ=9<_|<6>Gr])H8㋾,:ː2Зq>D6:/80GJ$σ} žTơـ8x9xw|?{Im'h^` ,)d@ I@* ivmZ m (O 8f=e(}!Bl]H+XLrH,H8W/s<0 UBEbUNp\>N+^m9m86O,ԙhN\NXI9KyoiXR2&n m#E1eW(C;0 HaH ,[ B; | ՟JjTmLy#Ѱ<|W9klн-dϑXVo/UܿI=/%= ZڽAVؾF0zS(mdCheodLַϊՓlldJC| |.$\RٛŽm[f5wB][X(䉍 z;y: B0pp~^muؖ:l,{?63kޔS^@A iB۰'aJ|jDcLmA8>NbC>ISHeD.%[q+25@lJ$BfyX6'm@H %dMP$Tx)/q CNIsˆf,e5. HふE[-X2*jX$=V*ͻSTfnU\`ܳ2;Y QӾlK!wrH(ѸP`-=&\r,GBe{ð3ft]+SFDpj?_f:< "eV̢) oC)Kf$SH~ո:j$۾n*Z=%6q_ۚ_'uVԓU<Aa~'( 3y/b::* TRVEK:֋Mo{EfPGu ͑C`tҥ,BvJ2g*.D jl. DiO/-*B+d@9/2sg6/f(uWb8"vV(ǣx[5lREmXPΆ-oJ )p? ZɬySĕl:Uz:VͧK˙6Y:;n IDAT鞛1IanFZ. '&1v9D٣J ml dlX7a! y"0yf7 P"Yʩ qaz"@7,\:n@ \ˤ_LP,5j١*[kxh"%x c'jշ~mVjZ *IB92H{Xa_Ak|(Ϲ#RL#+wfnNfSaO4&̶(N>so]Qbl~7CܘzB]^rsZsEn9$tt{T $벩%s(mnIFefCxĴyr.?ׯu9.U ygFXh҅s0[sOsVo[:9a5zƈ$)(%SӝT:T? Tuܜ+2PXyR$⥧+1=xձrxn]iOmz6rK&Ži,irdS,蹷%#2l_K6I9Rm|U˪ڮ2Eܗ?̘ki:p9 xUѣUkcXWe\b6;=KWU1mfP:Nj7@^DX@:'V!DJ=zla\[O$"Fe畛uzX[ln^ݽG ^ GZvTUS*@~bgQ[Oe‚ \h _ǼT"ϒʣU;GBmTqX.a$]te´սNf`h9n#MQ& .1{r,}n3H{T%`mwXNND&4\=b?Of>,@gRnb=UX$jˏM֓yw5.YrN$BANW]"XAvoXϩwE!e@*D>灅pGQBX}>ѓPx**ԣˣeur'EѼ)'֝mPtŎhZ32X/69['vHyf5A{' z@^U>jYmRJ[RWC \brE{1on§KR !/1D3陎c0"u|AK2g=!MADIR _ſ 7,*KKu& 3a7b̻]F565X;XKtfYtS) Ȓ9/h}˪:Q>qQ6f x=Z3YZ%5j\qhL0䅿A)_z1]#53 3vp NEbTߏ͍6n ֺeǡ37<jauL$ͮM&S`@+H>J@ yrAyx]y=9'e>'؏}H0;SXH];%>o6-BEJ0d|%)_8\& 0j-˄4 vf=;pR0U>]i恈El#Pf`c]'/ Ʌ%om8+~kD G%!2ltM`^n:j(TCxʂQ%c V8+ABQIBA(M_Dz$Y;T`D ,UcӁυ-MnYWWig+OTCS e|jˎ#@tёNI0VBѓ|TN7ǔ+=p:O;fUiWK{sRu^6j8)/7 z.V(G|]'ՂR{?E ʕ+DN'[r(<]j[OL7t[R16g-L;S֗h;=U|>R% g7;tfSt*B$'2O| 5'!CejUưBt6tWb*LnZU_:LWl4҃OYl^9VKtʪ醵PȖbS`~hl̨ܘ/wn(o 3=ҿnYBz$ZMAC*ϲ/!(ug)^.C»*#"DWl4maݷ!.\!~x}X d[TA,B ,ב qL\S$e^,Nh W9^u:$'/ h(o:[(*DVfh'S]_`XZ0L0)"Wډu{~heH)҄K%l<D3o|VcaMEwǬ"=x*f/jBQqբ*3\ Kn&3}]k4{ҝWƿUx+8 )φWXs*4kv\,{E'JtBW#(9>ț΀M̵ul;#G)4u[׺պi;uR ݕ:Ȣ)qn:zԴ'^YВ\+9v+-^ jHxe2mڞoax8%N8A*=5-nC&ucsX~$p{>4e)ʫnXKНpYnRH%<{xno,^Ӱl'D""+L~t p so3gd/~gsj̻MӃ5[ !y0\KI_ilWZξC{7l= ;vf>xdD^GŕIkϱPۮ67k5f;jO׎M|·a;>xcPx[_ԥk (q VS|XWFs9-U ]ELhH1V2Շ$ jz?yADmg+.~ -K,Swo]7u\",]{jH@=}%O4xF8ˊI"+9jEUrcͰ5Z0@5m/*9{8^G c R|# NO';o_jPK~F8] =tSZtgMgWѽzWƕv[mft ևPy&)#Fd6s{D ReP]1su A9T[/҄5i/3Ŋn3Wx#07L'n3S"XOhI^B{GGP#*퐁i 즇M;ж}{.IzyOPô s޵άj;\ʬe38 d*Ok@5uE?SV7֣p8ʗoê*x1A IRaʺ ~-1}m:AȩC-dنφB;oY*Q=E~:oo,PTHBR\y$ڦȎ}:iTKsu+{;#\Fu۸S3ų Q߿::3oH*C0G_giw[]ʎ i+DNh;.Pӓ*\NB@*j$m͗V`#ä܃AvXž䊅$қ >kl<㜬˰Z=9̖pTmc<9x@K(P/+=&P o[F˳:B -eCk\zzwyqӊZͤCS3H뛩`핔Q(<.7C]eh;TeqqobbW[P*uB^q^~7זk#3afB3v^e0˦ W(8PD8^伌a@R~ϞE{֒0?Ի0Y'-"gV#\dޭus3j6k+ڝEnږ 0%a4" +V$G>nV𒳒c_y㐆X%K6# (~ubгJ<;U<LJ؞f~]58ϖa`Mvk$:hMHi4$Ocev|/ZkiPMBx2j_-u$o3Hf;;5vOd+B +Y|=pֈ 8O&ze}2,` w} PLrCaD D`d@/-܇elx\oQy\#q`˒CGN.eG 7,,|Z[!DilW Fə{g[w)Buצ,Q׳PqJ {7)" k1Fr*y?ǸXgU a3oߊ5p~YDG_YX^5/Ǩy>j0zbIsJ;/j Zfs QQHGq΋D;U9UI۵ړ]]3SrmG+d/]( Y"`)W+z mAcƪ~+Z2&5JqLIc+\L.=d|h*zh:[Wϕ$EAzypUbgX|x{./n{]I'`&~?]!{#'gmrE4-F$9;8afqdf"BbNi W,Kg$"8Z4Xp|FX&'\r0PE3_ o}y"9FŽR?/᯺Lm) =S?M(F'jiǽ~h=AշQZl֕b n5(0pO*ě3+р4C͉U8_u)țvhAI ,Ѩ܏}^-ʪAs #M6'9^II2W*.K*/]ő _\=mkƩSܯ_¦rG?:݈jENdǻ*;mDvʕIݑ[-ܞ˒K(O/5=E$5jger36^2DT~=ʾ}\˷i?otdٕH%;Wлv0iǟ[~#3;PſBٮZήۘ.s˞|}0?fbh #ZGlղPvK 9Pf]}GJC;tųvGAAdر$O-,J8\dL!hǪ:ǪsHcdh>o۶b'1{8 #Ӕ̻">_/0ɋ~c#c84kMkT{4 KG"]`IbsӞ)_`:_E/3#jhL"[n39bg>VV(|,᡽s޽-㚜9pWn*mS;gǞB^1IBILYsxm^j:fŌ[eD? |)'QL?>!ZWsbRX7ږ9ō u[ ] ?(Ԓ)p'^_Ln~2dw;r>֓`&y6,Ov~{[J|9xe2O}*Ր >ӡg?ГJ~@tC3"|׷zzR暏ywYOj^^+&ٌCT 5ߜN]YJFXN$4}zB@[02Jhh¢_ϦDx3t5mjSqPhJU^8K+Ī*gP1b>nYN?}v>IR(7k mtn^@H> \[jQu~P׷?ߚ7e3bѣ=~duwẈ}og7m|Rt ǹ yayOE%QL_Khigaצ_7v[c,Zx_V*?V I\)Ehl1XfDwvnQMw͉kFQfBӱ!#t_gtPx1as"ฯ~dFXx`#M!on:7='TIDTDI=Zeͥ{j;Ga8\<ۚV)^W!"T90R^aB69 _$W.:oGeGΙ.as,ֻUߜGe-X7?{fNxokc($Ï~K_hk׃+_]Z+!a$!6ܒ'zJ-?*7<`7Ĵ³h~b@B%9ݫ^L~RI޻ctb{ai-sdw=% /CH#4觾Wfض.y3ϾF -ڹ2KA`W2oE\%_c-[D=aHúN4'쫎Ic?Ri4}I5?2LM4 kϾ3ŗW{wN7lє$u6*k$Qy:X:@O/3J=ޮi/JeUA=nmNXD9קw:IqJ|>>z:G^ _2fBt<Յּ{S4*A' , xSׂD2&:2hl}Dz"ѽoY1[E_fV6nb5=OlitԼ Pi3 9E-x=o벹#'S~̫"F"ʉsY|`5lȼ~Eǚ>ӜϚk[7]?MO|B2^.CLxgs|jCavV4DTd'U_ ?iKXF~E𩍼/:=Ƨs,-mh@zڞJr>*|<~ci?U(@s^iKOk-|~`U-T]p+OϟJ=ߑvF;AJf#LrdB;&睶*?? :~zrS+c!Qs\.G%a>3RbZ aBȝgM MRCQU75ßCJbDOygHpzlrv ޯK[J"-ud|9Vv;_k* W}Qϫ_3,Bios5c១zqt*{e(_Yu%M\%w7| Oagq:n *1sm_QWQxfu1/3n^C0c?Ur1OBy@$eRSDfK̂Q2,CE3{ҿS/~o}|x{wm^뎩>K˝ֹ챨Mi6]>β^)Z#f@?p8{J~}Tcl%}Y["W΢<dtsLs_0m9f#e.%wOt5dmbBuY?(#B@ALU9 `rBq\K98wZWGջ8SK[7E6s^sZ-h~FE@b'K+a_Z7T(u$) P|%oOj!`(zʨcR'WElLBi*b'NMU:}A0j_(qbDj4_(kv=8ʰσfIk_Jxt_=oǘU'cݟB-_F%s@ KWOn KN9/H?4zl?>^)**-G^%Ȕ;F'hr5Lޘw߽"pWR pT?!gi/KX0$͸0l;Iɟ.A*V<B(˲P؈ zԉ3mvsz!$6U˗CB\噷-X]Tp?>%  ϓL8+zҧIS#/*Vg ߯pW!^wAH}rɂ "( UgNqm 2VCIPúW߫Pq$g}_Y7 yԕ;lj!/!R4~G?vxCKFm -_1cj!0C H7ZA ~87{%;dOg=:[0(_Wy~U>`ؑz#/ \ mh9Ujm8l=Z4; є9#D-7-͹ C}d(գv١m7苲GGw :Bș|j)ۋn),< 5M2 _=L3(a ]`^?CA(ۛWi: 8*I j*}5 6\ v(\lc ΕV>w4oEW1!7m:iIoSfA8e3˕wOYѱi_+'va^_^WuM[_ '*2SHy!"iGMÄ|qcUw/Ͷ:xwaH]w#}b[ -HDX29QeA of9tOd^S?X +bK!9WJl/q.#cV*fv9YTmZޠh#H&Az!(JǞR.X4y#[0tM%qݭfvӎeE9U{JߕNj޷ ;F7;#y|2+dfӶt"=6.ϐtu{A)@1gjj(zCB,L0 ː h Cm=.ߝ٨.a %[+]LNN_IpLOoI ߫\8MW :G0Gnш0ϒ[[)(7"T\Z\}nW6Dt+^ ׺T'u9ݻ莏&%WQ@aE+#J`taS]=`Hxhd+IFL#ң@e.[@gȰa~ζtvB~!`tbc- EU\Hv\ő1<. |3@x"ru{ڱ {ES6G,Xyޛ&)k7~w0H^wꝲwף Uī5Uw<.~ ߺ"s' Xȣ s 8+I Q[n?p? !CតBhH厸A;ufGJoG~9j<D9\hBB zmwf\̝!aS!3wTm}Y{ZvtBb=3Ok W]&]A-7S2w:Yu/+nx !4yǣZK˿/&:{Q1dKЇb6EPPkVQGO_;]1D??fޫ?_19ܸfO`=SsLqVd퉴t0HX,^d(Vm]2R Q:ɼ"!6汨v_/Q[׷¹+^<^"K>#cVZnAs)mcQ qpe]=G@n5*ߟ>N"uyWkkR71S}W럽7Sҡc*rɸtC:dxf"b%pݑ5I!\E@e-.B䊉v v%DL P6+IV:GDWZlmGe豀oU"ד5It]C1(e hNiWpO B8{YBL6WMhx˲߾͝=mz_*64!mmW_ &MIzFnCIfSr4k5%ijzMc+D"'83Z*Y&quh : !Ь!zƂ, bBNP";[eZYkZAʲtmOBv+TCU Vu: {B%/?-q>'L%vN' g<)yM08!P ߥb)؆DxIQc1-rE.[,_ܗvZ 4LSl^sxiqb8I *9) MO4]}q(ޏz' y`^^8\bGF~Dg}@]da#%,RIDȆ6Q:Aw [[J^>ap2j|xjRX»B؍ FV5S H5䇶,/.EkEK86ncߴ,)_ UHȱk;v~-fTvὪpEslAG[%9mܳ0-Tc30z kR:7wγiOygXW\ /̓A"{ĭj^b+3Pc5 vNf?nE lC ӻıbl㟊Dv4'lMIw!I|s.s<;.Brq.LrNbj^7" "h[t2m,xn霬kӡ!8c `7}+zE=EL]Gb m=Aa{NaЍu,d 4d<&` ǿ>Yg54J/g's\ߟdev'N{\}OG0;B ~^ٟxGmL G F +y??0  ֍ ݉0uh3RE.㒿8?g{*lVA'V΢ 9*1t.u5/9OuP1PhC:҅l}\z)9wa#ݍIpIQwὌu[*j?[>J :4274~5=S6g&kp UdP=PȊк }pC}h-91m$b0&* EqG{i_`d1m*Sq\wㅂb{MR9Jt- ꯤzsӳcL+yǍ$I"D;ҚW=HcZac تmceDP杬VAnЕfLRB,L|,z<"X w0 sDB&(wɨywe;`rkh4,zJMO(Q{ǧ#?cVLU1/`4T|[s[?<:Cuob+0Dlrq 'UǪL< b$"rktnCm<խ*LlTYm,hELP^OgS_;c Nq!pu|ձ}yS}=N\Z\ᅅ+:/ԈG`g(eMbV$k@*A&ovk,g= pYH] m9b@ŴjkG yI6ԗ^.ݱrQ8痲t~Yf-iKtOwr{Vߤ][ vOg,WJG%|g$ ~N0C"52ՅÞM=3@_m!\8by @iF:\Ϭuŋha5RA&#dwLx6ז[0"i5G:Z.=M/Y(==5 n՞  ۴ gW u|Zo翇sG,Zoaǧm8VmU5pF'LhO0X)1":Q`)[@1v>ҩ\,~/8*am?֟'pҦ^bzh4Ot`8^?XϏ_yv(G!ض)9[gKRGk)g%7 %t#$EQ 96SA,2;Z d\DRq(A)шp qɲhfm)N4f9O"ѐzÉD`i9msRqI*Ȅm3|E"pHggŷfǠލf{#D*PjS'Bħ4&fX/F۬AkAts!2g{Gj^z?aw7j;ڝ=7`[Mf;\?q G7qh?OkpHp(jk&ai2eւJ*6nݶ& [PPQSx)g[ڎ^F2\&4%fC=.Vj28Z۲Fl>N$]7/LBFuܧr&o8~΄n-RުL4˚~uu=3h+[5c鶖3ܞ]2&؋ ۼ|Y`u) f9캙;||ZPt/F2TiVWk| y|\?T~8@asߏrrJ/ԦoWzu{;=|)|ZuaEn%v]18-ݭ@2 h}P໊|ݫmVƯGJ~ e$哀H$rsȤ-Lc{^&㉔OasVLs{iz3Us*Ehٳ+<- Cw(f6u Dqݒ5d`A"(r+ׯr n#CuHt\SUsk Hܔ sIO&ܜ|,&35 DC`^u/7k[AD>y@w(Bmbfdh4Nsai|.`Ov*\wIzs'p}Z`z#&?_t#9 č3맻cenĭ"{Wz;Z@gy ԇ<.8"DD2vI۲UHci0KvZnjm5v'g<{@z(2$jF6C3 pr/7eߐ~ Bp+ NWȚoܶ{sȫ_68[W75n;ISH"wR!|!|Q (<4]+?k2BHZ@L!Z80q5[&6`={)Ɗ'9 W!+ÇMJq6Xܘj8_ #cKW3+›O쀖hiS" h(O=﷦;4`8/lϠhC=Sߢ-Xt]FL!WF<1[CD^ 8M u h\MaqV"|\驂$6O,̲uWR ~v)h*i];eaWW-$ *p D"pzWg4{ Og@;;# JHV[Z Hx K|uCyjT5c`O|Q| WN$V>|S HC( jی߹%L cKad%gmCnio(UJu< ,%8w_z7p]izpI!CR; }7dc 5Hq'^ c/oM͗ Y PܬFZh ^JvZ$N8wCc؏A.=1nm]xo@bZ0`pٞk00CyF˷-Ȣ<[Qut|:TIuѕW\|@{MXMD` oɔ$lI b>qۢ}dۦc܁]ThXpN0~]ū+[VV@Ja73I%wB7 GL^-j1f^LTfCg uG<JK\Bq! Kc4- ޻Y&˿MLY \齽 ,S52`0YUWMSYJ!ŋGP§0dW׺̓==9ҍI 䧰0y꙳m@%CIZFJ]7_N# gڥ&PD87]o+K aywo]'5֍m22KiNPf(ր|qJcYtUVH /mmZsܒXqmv1sqfGո_wZåX63 [AiЀg0ÙpI]$& BPv1E,m;ωCuN,5&$͵.Eӯwp$!ӐZmA9Y醯kDJi\\jOQwEAn}ȎC'?B.B&\ڥ!;|>5|s`l0SA)ptaq!"ؠ/x`"RB6A^Mj <;#Xl;tþ?u昬au2$VbKQ5U~r쟌֢}%n)nq WVll f\K00EY "y K1zK]h >Q*"q<.t GgB#P櫂WtZ.s+_j$Kکa7/o#qh&6(`Uׇ$')LK}s[M?>(> UX s)NOwL K-$TgmCFzK:4fbCaSD@cx\}Utjp]Pu2t Riyj45ٲȝ/BZW3< R%QQxIPrL$϶'{}MuEVqp}V H N?s1,$:'C-g]h벑ErygP{*mC9&*g`YOyǍ8>1R8֣Ģg6]+U&?bJҦISR 0.8@ O vJ}7W){Wģ! &7?o0MV =4 L+ a"-wkk/Q2sRYDϭmdW.S db¡ ~VMiLᓐc,A :O Xʕؔ$ 0B.`snuZ7ir"kc|Q_vwS1:J4zbK#p{߀ai#jÛϞAi8f`h.AVuSr> JgCȟS5o{UådӶaj*5@s% XVd:2k+v1 Dzk0Y;ߢIq )>0&`<ukJwfu`߹?C5mte}-AwEh9jP_!xFŅ_e,zF>mfR YfC 3mHÚ&b1DkQ_*ː"+jh!<ƌ]Ea)8ȖvI=Έ/8;!jxYq{͸&jWܐ<"52m, K"B}4~UZn2l0#LK;|FX}uVh &=5 D1 H$ClG%ǪK0c mYAhfCMht8e7-Qc @2 )Ya)&'0 !fA cq! 1v6`$M_q:yĬgvPbABY)}lzlW#]~;܊#+OOT{[NI |_\,\FFmt Iݱ<o"NE5\0F- Pѡ FHa TEe\*6T2NFb BjȇC7{$yé\5Ytc[FTn @hceT>FbL8cP 8'hůJFH]15zjG|?j'RGI' {7, rE1_4m, Bzud_^)Ȝs0lL| F6i@\Xn%3>6C4W"t$ ͜\9 m˛=Oӡ}(L68#UߖMP_gRr7XE}.'&f$h6P[: .{L2kDԠn`9H m ^ɲFz ($J wQ2 $$eO\Wz"jXɺ^}7,;D]9b5zi#Y7 ٳ |bW%!G.U5J$a'ZNg$_?Lc6g)sA3DhKrdX#Pd"H2& B6c%q ! 5u䍂ͷ{wIC([hII5y;e5蹨#{-!kRЍpVlM,ٓiǮ*$CLm<]xd+d1 8 ssqxXk;6I& g.)j+#^*LNfz ;IefZ~hռ?Fc PxD3hی=qyQph-NOżnN⬇шjñ;f :3R[OI]Lu@`(8d EA R*dQse,E [&M>5L\iޱ>CG*C1{w&S\oYnJvÆOsq?TGV2crq4%ijq˪Y0BXO"[ZGȝE;lTk[Qy^Z{H<9(JkK툂ePS .*ZPUʆNW7,9̗@jg ap.6,5.77}?7?-Uy>ĜiځYrgnmX ,\Nti>/;5,)5So!&KfaɹhZP#,͋hƾ$:N-IesF5]&=xZ~(E Zbk_`m;\\nI, 0S7:1 IDAT/ŽIҪnO Δ™<9,jF4ܢi[*jW~1uB#2D74tR]#-H(ZF2؄OX?g*Z*Zm" jn)A뺮Ǜ~9=g]֝\$Y! {ssow7ꀍGp[H!V S>Q8XbIU4`}q,߭ wi^$`g-\ f\(K/k;0[rĦ۷ZtiJӣꎦKqBWªƛ%žN䵴|{*=Ԩ( ^1x/<CMgy&Fz`-֋ӣ?oW{[PGKikx 8<կU`Ǟ!oI:}4^ ,,Z77l"k}{%LmTb҂NxȊg뱤w%ĥ4g3 63q~؋L.Bx͙[N;vCW&@P;P,6[9&lZkxq3O׳df }>sܯma=M!W8&ܺqgad4 \y$[+!_."gk%B9IG\uYX,uz#vKSK1dz9J[~PMLw(l.id_Sz!QX[y*Ձ' [\(Ҥ-B ĝc-?r|0B?oN"Z\LO2*%k]E>b@IO6orZ⍔l$ KO6;)v;]sI;ӨK, &5n`1Ǚ`:~}Fl`)e腲Cn@,  Zx:F(bo>toݡkVbX&Ow//N3^;0ǒt8Ń@3y &_$~8@m+{)!Wf[n@}k6@a %=IhG#o# yPQ\G?Omb-gEsZmiY:t@ T=?nOGD6iô%tdUr~`3Ϟ:I+Wߺua{紑l_$ѕu7b VCp8yY fL<;ʫw\Iϗsf@z/ ֒d6}H|^iN/PI0,ּ,.,ՔӖ'⦶|CyFwWXLl&L4gci&Bp˕hfj3Ye;Uħ\ö"r%VX9VyG+b3.oWwvG: (aSyprA?w?m#xP&!mG3FEFh rMв 1#u[zYz :mMP^km/"9?0 ѵr<Ԥnn 4q~b-BS˜= 'aכ @Q`.E[YiyS G)~[XK{/8MJ5o|^.-1MonR 86L&0̲~ȵ:u5uAjT 5tT\7-DB0AmV7Z6a_mרg+n:CKӆhb39;AE GM Pg B<:b2,=W"LjqՈVUW f(Hiy>tX?n&+{6uMN6a-b,$U{Oa7 )Q@0%u; j&S:iqھl-@[ zMV뙚 8j*T;Q.QrcL:5ưr4DLy_`DmBh&98-M Tڣg^o7ȰhbcA'øtndP,=/ "DSg8H;],|ƧT`aQ\ dD:!U'mQ< VKC0jR%LJwzҲI{jټXD X~`w!)e C>s|&0khЃL ł-?dNW4H&ae ű?B\lS06RD`jZm.(i#EL[Uzmi[kw:sM-['Pv٧mM\΍uPj:j׆MiHx>F]r'aĀc!^((ؔ~ k]+Z&:`3Pw~,I & 'NU/UU7Jq(YVUR:¦\V؜g6@Ujw;,UZ-]\~Fکt7ݰ5sA"hf<-/AhBBV<64i٠!<%;y5H+كZCCZ!ԝ43`5 auX $%^Ɯ/@ҬՏNX^HF!?;*/yQlL.+2Hm]uZ`?aڭj ш>WQ|%[н6T5 KOhJFˊ5Wć 8;2 "[dADQŰ?&ӪLr  e oĶ7Z oi?!j6R-%U'TujidlvCH$N = rm|~1jb1a<`X 7纮zuJu]<XLoу3TUJ gCG~P.gP%t5yI[Kk%z6pNJ^0PT>| FFlhFe޴7WxeVAMH=z=DCdMٖ9&!'nَ(KNcׂ+L sefϛFd!R~$A[ .ً `~l%"A DM,2LpOoJbXh ko`aӵ95!8,2"%mh$ bXtB5߄!o,epemkM1UW  9/ϔqyB$dVTNP{yXvc:`\iouA qɇAZܶW_Z 0N߇d fzD&~3 uUNX)eUH mdp^`n| H1 9`-@Bm\f֖_姨: =; z=t6^tMF(XZ3 j%eO;rЗlE,dխ3ˈX{cI"Qd0s*p5$.`UVՅ4!B%KkSDrHgI G8#9Hs\T]pN?>Eb;KpT=U|vY4go}֟&eqpo!X4akLJ8V h1/ֹ2;5X8Ws=5wXT4BaO<HRr:x& U4)Xة觃!>6&ʤ Րƽ \y-DRz.xi\KهHNS[uIO#´{On#ƫbȷn,VL9 `mԁFyle2ŏ Ųzv/=i\w͟!p3f1ib%C; 5p2,AQ7پC:`0e>kcґ1D `=P'/yʵ%X>8oV ֢HUGf4if)kmNk5M ʁ7JׂتwwqogKp-:P^Cͯ,:oĮ[{{;:;Gdw1 bdk䠧';̣Drr z )a;hV74gU=\+y߰k]S;U"[;5Ddl֤]nw R)FUqeh#>N"z3I#$W~ , 0G:jfn_}i:;z0eSfIe HhBA- >/DilG)SLb"IHzXjЕ%B`e CSY>KdEEҪz`[bp V׭(Gis@ èܥ4[wg޵5sO 8ҵj)~m@,?5$DՔ"%lֲ* "̌HUofA~$ 뛾WǛ-0+:Gl:=㾉7&E^=mC:B$T]yJkά~YȊDZlhZs;}O- OSIO ݽfZ^sfR3 l4%Eb0V`UohyѕAB9\z>]NQ?'#Xk1q^%MhԤ䄃 JQí͍L< EYbSj ׾Bkިc~R!y~jϝ3ڲr@‰DŃJ |_uV}_tx֏u9غ=:cg#>*O͉MmH]kS tSrhU+.GFeZodslNb|;r~቏y"UHVu6 !y/='Wc5kP vߺҴqk4/ǶmK\sg;}TVKo9~ T)?m\~th~j/o7:cD,-%,8Yc]^m'Ĥ6:J2> ;69胶dٶhR|]~-%X= x+}q\ndX?WSM 'Dl:ga}u^7-+ BMf]='65:/^kF4g-spMbtQFWS5vI$XťswRc=d􈓛"Ǡz9PI59JK XJɴ`!GkI. )܀Xw 0e3mKvxjߒ]}~eϽr 맇`Y-@g*3yu}j6P(V"0d.aAOAal?RHFrl=>,`˷Dy3rE\; E^?F$Gޓ}(vqxjf Br KY瑾zOn };{5iׯO4r޳jtnZ2ڕً8Z~2ba8 ?Hؕ yZؓkX> ([4iڏn!OFԮ:,jO#<`)oaXvo7W Cj[EPP _dhZLnL{ʶu`25^{ښh&D+D{Ljytnr8Ra9y#k *FgWݐ^!"TzBD^jYG`A %!x!:l>~U:v?[ nCqqqX}ۗUc.3^<2-ˮIe:pĪ~8c;%̖?I&ja*V-H b!(pmӭ坡>URQPGwK,4@N]5e0['{}~t#wi*_6&uVrxPժ5 1.{ZÛo8]sv8z\ɸsޫ֮Ͻ]gY4f[6bq8C9Ka e|rf,YҪZ:7#ko,2*֐6{{ڡ8!(#dÔ@`?IVFbuĕ)M2IZ9A(RǸ7CfX&1}_Zu3U'|#zVSSwYjGB R [8_h $19BNX?"s'a2SGq\&Se؎υE h!ƒA18KEr1K lg> Ĺ_tTT3ٶ{;}6.HQ J~trR,rZ _&a_|հ>x~ɍX^"P˧:kLL.(>ߵ/s++_ZTJІRsZT݋J@$ѩј-}))vVk 6Rvo3d0gj"گ1n{*/7NvÛ| 3ؕkoȮPS ebAW:zG! Rso)60`H1$NǪ;Oʘ۞4@fvWui3w9rI{YN֎u58FAUa`o2۲+>3|>(+IDAT 268M|Κv. #5m0:`R/(R@^9J Gb?ݮ:A nfwg;S;3 i L"c8&#| õo]Pwyp>(dF9`tUO#ϙݬw>ڱ6-h{7r_Nrt=P~sFh$d氻lB58P(Jran|ǯoǪ;@WBq>۱z&̦FSuۇ'TH5M;V}2kڧK{\ޚ:I9znV\ 3/nwqNi.Wҥ=Zx.zx;i_`;칔U^A`v'�e)Ew[X*0[Z nc[B"`==ڹӟC-Yh؊D$*CS!~pc]M2|׵dǵgj`;Yri涸be8뿂Y?sùzvzZ>߆~'x[DE?Ը [xg2Ɔ1c8:N'h7 J " v{~]כq '缙?Lݚ.2 Xwe$fWԭazܻ4ձuU2cKCRIENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/Makefile.in0000664000175000017500000002522012610471343016512 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = client/gfx/AbsoluteB DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ EXTRA_DIST = back0.png back1.png back2.png back3.png back4.png back5.png \ bricks.png extras.png fr_left.png fr_right.png fr_top.png \ life.png menuback.png paddle.png shot.png weapon.png \ ABOUT README all: all-am .SUFFIXES: $(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) --foreign client/gfx/AbsoluteB/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign client/gfx/AbsoluteB/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 uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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 installdirs: 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-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-data-local install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-local install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-info-am install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/gfx/AbsoluteB @for file in $(EXTRA_DIST); do\ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/gfx/AbsoluteB/$$file;\ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\gfx\\AbsoluteB\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done # 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: lbreakout2-2.6.5/client/gfx/AbsoluteB/Makefile.am0000664000175000017500000000112112140767206016477 00000000000000EXTRA_DIST = back0.png back1.png back2.png back3.png back4.png back5.png \ bricks.png extras.png fr_left.png fr_right.png fr_top.png \ life.png menuback.png paddle.png shot.png weapon.png \ ABOUT README install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/gfx/AbsoluteB @for file in $(EXTRA_DIST); do\ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/gfx/AbsoluteB/$$file;\ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\gfx\\AbsoluteB\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done lbreakout2-2.6.5/client/gfx/AbsoluteB/life.png0000664000175000017500000000167312140767206016104 00000000000000PNG  IHDR(<#gPLTEľ}||vuupooihhcbb\[[VUUONNIGGBAA<::544/--(''"    ...222:::VVVbbb666FFF~~~"""ttqfffzzzJB:^^^>>>NNN,*(&&&JJJRRR!1(7QB5N@do`acP#(AC0CN?.D8V}fzuUjHWZ-hUmDcQͨgM(`sqʦub`bt[mxk`e_jTzdLo[Pu`U|fwUN9M~T3K=0F9ZP@fnA@8@mm@QP5bKGDH pHYs G G/*tIME *6rlIDATxR@ag VhVb/ر!]e73/(,*.)-+ohljnimk̀'؇a~ >WW`X_PI404'(2Ȫ5 CӨY)4C߆h`63&RaiDZ6 @X()THRI I(%I¹|1pF)32x` ^,+Ux(0 α )Þ]3ٹyمE״ z\^Q>QR\dE5RjO;5Վַ_%f3++2<Yuާ^_Qh;X/gG:+'}U=[٪ϯ5ܳ5.EƆ($QfQBy{< .4* 븯o4\y"-VITTUXa Rq]f(0aܤ"e_;Q/@v\r ɸo[s3,Sg+g W'6nJE>\kY,k_ 'DUrg= c1׶&vFT}璟(s'6_dɚ5kpTO˲r\ ˊKɎs縏MG| HspշrUj$筿 Se,]l~ DԺPO>,J+QJ @8?Y fqn0TW ΥHKx7ު㫜U׭EK{1 EQ,k*E1-CB`Nza&Ql].rQ~Qnr xgdY16o)ϪL&渇B!HŵWonpk?0u!g&\Rsc:lUb/^vKg%+W,9+;:Rs#}<*_pb۶,˲,wXjS,GVm9r5Bl%yضQVxhj~lo7qVp|Y)߳U^kg:[{/Q11S' -NZ3#Rf.'Zp#N'%1eֲ(ۧX^:gM\(ny}Ju?Eklr@< eBH |3+4,d}bx[b6y=n]'ሒMg̡І#J  iz 8ԉ*!s5g3R<*uR<=Xb`g(_ do|sxCX@ :6>LeUb\wJKPcAC*3 H$ 'J4m``4M8a0ͩa, q9mɿrP(t2.c4M Vuk׮}G456v,[yb:`ٜr{e1kPC ! g|L>dYj&4'k'::==SvteK.ϙm+YfJh)Um4'P۶),˜۶)dKX<σ/nϋ"xlឭ{ɖ g:ƍYvJfebQ@8D$I\*S#lY%RMƪjB8xv;1b?{(Ȓe,CSZf9tToҨeJnt֬#ud],@7@y=zv1MZphsSݣGypU+ZOntpcQMeU7˲Tf9ۤh-.vskZ "ɼ,wώ6WwͲK{j_=6Խ7]WUP]_Oس7*;c8ؓ<-3LTU2bA*>L麂a !nwX!mW=+1vN"x8(4leW0҆a}VvQJ?b߁;o~[l4Dp{zzXC}UcRB0U} nHui߶r?Z B ߯# D%-`:_b/;Hhw!Y@*5N0Tm9wĦ1j '{ƲaY6>hf2P52cs[9ߟe}66&n >>>}CCC߹6v|GMPJrfkTT!6gkfP=?= `Q}di>pP%[ 2qldQ}H\=7 8v uLREՅ-L9 zpxz{.-jYĀg:뮻wM)eVU<3lm>|1l;>'7vZ0YK()3<|t=_5ێ;qq~6o#[Ιfx=m-{/nG<<gΪc,Tr/X$`HC>1x{ۋ:j|紊hloƵ]/?WjX6 öG?TJYGw|ᑇ~xEW~6ynBu̷34 1kOb|Ӑ=;gb >r]wrB@JqyDe^DM}'O3[q~wU~k]~~,0>-3{Ό) ]WH& 5(+0fGLWh5 +H7*x_7s0ǡ q(% #Fs1:䰋;c!C $˜tOwU'%p> }NKa Te`-2v!ҥ^ù.I" gcx b` $]OvV%2eFr>?`\sfUS^dx/oyPm7oq6¡Gp筿^n˽q_O_Mj O:%kW5-ϽjjsYRmlw|y7w8 {/--f{e<*_N:ATv$)A03Qr`ҹB;`Π߲; 54B!\hDw)˓C\Mѣ7kU+ $fK$eYa>O*rjlvw1dMӘa˓|R! tP{RP\.rd`вeIͫWc9 αcB ;ַ6yc`*ȣ#YAH*LQ9lө4tM-W^q,칮 (jPU*KHr*] FB.[q K0kc== ]XRmJ~NYMFOm-K備mMMZo38UU :O|1Z.;=RC+W˷Z cfqߪiZ*d})vMN'IܦXXuAxś^}i̞_9$D!,_~T_:C=! M%p]w&Ui jsRdj*(*4DqbqdVQU\9LêqLY$X%[?+ydon;#4Ɛ\EM%y)'iv| <,_S_?BۥJo978`YO@h*Al,YR*LN@ 1e#c7>TYe_HϪ2gHRSjz9ʦւ{lFɜ"Hw~0f,tim֊$~7N/:)*of iOa%f&,3m۳6?I q h gxVTY~U篻播<  ~!sʷ*E2c շ_l,UL@ԩ1!QLcU,]@i(9WC 헾r\^kZɓؼa-k!\f8'>s@.<6bK dt;r9-#D*A),3 F G \*BC34qP @P @agi,鰴N_"T@x0 1CUa$R8L@8p\ :5 @ m#UIkaff jEpoK[?:f>e ^|^-=`׾}gnX} Gnj^CN} =lwx4lop߳'v--O.i43\!*&r3\h]lڥ+mLL=<syEg@8XJkna92د;EW}}}ܯmۧ{K܄<@tEC}pR /ێ& ί`i \ĵƽ" VQQPR(\CL@*`&6&U^ˣ"]l68Ʒ"ܬ6sFa<ƌqMn_\ա57Ԡ*Aymuڞ}!(&O]pUL`Ě'1aI;m7;)sbunnX5ktzSёy1EvЫ̘7l*ĺۮ[gX&ѱ)S :fm[fApd-CoM%@JcD&A yߗƤ@ToȄcIL)sĩoYܦXg\"QM-YVwXܹj7linY,BTU;>9 "w,]aY,Zn}}ݏL֭['N`}ͥR)_["*【Q-Mbw͕b5܏nS_04ͫg.v 0V?UNΥ%*K*7f_* ^ȹhG$ fyrU7\|RK:jпT#i*a'aJl Y3aNSjӻP;=Κ/taSߥNa) a ^ZgX"$Hq&aU{ IDAT&þ gnzk/?-Q,?[= on-ܷ]`şkq;hA X/+BFHV+0}?U˥޳E/×}Օgn^E}?MkJ~b(a \{X.y Ӗ$>(cl#fۮr;ډ֎=O0dd20_"kt!a%p:Azi@A(I %j89 Yުteu%R=}$4 Ĥ*Ij$ҹBN.&^KΥKclLvjjqdaL#v:'`429fpɯǰN-[q0:::FGGښs}}= c:yA9*t0 HEKeYH((5v N9ĂYrn"5sےO @蝎*tN넹̽&bƘ/@ jpe\' L䚖o-3{r,붻Q8X wyayԎk+Kn#TUjSmیL^$3NӣS8K ֋rsWKнw,[ 6sú|׊}L޲q7 y|y13\ӿh1bp3 `egl$m5ݾxGO 4n,*_O.G(IBB,-ؽ\sՒ-aLo\v ЭzApU}?",^vW5ߣWX=0Ǿ&9i`i\5&d|mez[6[e|wy#me>%d3H ,4Yn $$ Ru^P(Ęɘq[x#ܤL6INu #e3CfZ!]Yz'_ ufψ'Rt=ɍ ພo5ZZ >|(r >Icɦ}X%lQ^RE7E .0;5 z(;|YԵ*4hscFbZU*+ QBeҩnXPWOS[ ȼd-GTŵ]@M2G_?9vpTrʞ~߻sSGR:HcW>3_3_;x85x{1UH$1{6Zs2$yDK[ H# Խg牂,H DѲY*F4nn8QS PȶmVi[!*d(lXAutrMo<<̘~XR@ 6xش 7)6/f}S[տRz`}8wiUOxV!ujP /+11A?{lⲮEJ~}C_Px,ЦWxݞ<oнn۷` zjb(~m7a;'7K`v9`odo\cOݣNc^p/h^ׯ[sRΔks_;>>gqY__ǜ2/zn[x>y=ulu{畻~P^4ͷ1_G²}w} MJP^,If*SV$TLkqkE4|g3%}O=qj;}x}V4}(ah 8'^K%vpwc~, ˸\lHZ34@z uit,0 Ի[Xzt .q IR @ HZ9N Q8p4Mгpt@c8pRYzQKPFuX$dxƵX0CNC#el|0: Y*KNcOUse' PhݺuuօB!UU HRiVmeLo/  DE -9 Q*/Z6lkTGH TgoXޠkLGռ,m)Oac=Gȳ}Ip}A|w0闐)5Y+_KL5ՙF"3/j`+OU᪩*9N1܆@L4\5Ao$AS$p >dgܛ@Wb"Kw~?tqd7Snu0O8Y/,rmSV4mu rV]nçn~pwmm..ܳ< T=6q2|b(]"RD$ obe[ZsSoՠ9\WHt2ԗ˃PʺMƷ5\LXTZTUճ35Rlϻ.ƣɢY2/8㜶>!<_0#نE_ߏ\3ΓRb0fN BZ<]"pɺv9 P+(U}Q2F(yC2 //7,AS౾4]*2\,sK@,;?z;zH8<ȗq. Ap#7A /x71 2L$)H%ɾG} fjӋ/J `t1e ><>'_B=>'k)YuHtKs5H8̾^;GݡԪ9.?QU͕NƝvFC!YYl=O;M*_}_7w\E~^*y\$̦u1O BuG[:I~>S,NJDȌڌIU'`0h`r|O>Ю^(:h Z&qJ*kU @ _?7-/Is쯾7vwگ `hk?]fT6c.*%rsSTj4X?[4k+(?T_*҇YoĎ03 ;9̄{/v|;b!OJ1KlClč`s'.mQl}Fl>pi ، ! H?y k.&'k_|ۮ^?<+tlx΄eytP'Dx.}Ofw7+?!7|_dv_ݚG>r%O|oCW}Ø1>|yj_~a((WLS@U*/O=+YbP2tñQ\xZAֶSK(9]{~9\~O S';FY.|1ktYlQ>&P:5BwHv =OTglS~Q/|PK.b.Bé @ dH10q$ C#8fS`ٸLǩ8D;' f`z&P5hYL#!' Pdʹ8JFbDtbZi8$W-N\;g/,---X遁b8a|Sh>rˍEQ4x^܈z^dQ|:rŕԠE7k Xȑ-) kVCy,8N7VOfS_'g7 L^W%!Ze;ERY$;+A=^\?;ssJ(7 /0Y-۶S0m}|4mhmW}KMZ0-3fKA ":6"Kp8D, 1H%fֆ?omdy`q[P*@ ^bQJ#I$ A>U$'UJƙUSV'?+_f'-}'y᫐^v` U$Ir#.Dꦮ-M_+_h) tjʁ\9hI%E |@niy=f;I$O] L~{ddz(3^LkbĖa9ql o"1N 2AU+θP=!J7 sa<%N ׅ ,SŸ /o-0@XJ,3kItzl67:1ge5DSZi}[={K:}CzC}E&ajZ}bLljZd* 64$2ܿj4:_ mliu*fpgx!.BcKsd:!1>6S}V9plceJH*ed"Ȯ;5M|DS=W%m*zzT>ؖY*MfGldJPhttHl>czLeP-Yy{|<2V|Ǟ:5d-` g&#w<_Y nW3c1M ۭZKS $uf"̉_؃^eoV G Ѝ==;+')aqo^~r}.w71n'~~M+pߋ{ؼ6 7}7n$1-xrz Ʊ3w|qMQ\?}cp7hTkmx~ Ifb,cvEPg]sV'~s7xw D!fî w}c= .P+*[b3K"8Lhاy6D L˂lǶb`%f[py=u>zw $7 y9b{ O߻f㓿E,tq5e) ^p+@ H2Pݏ+@$Aw7OEΈcbeV7Ň%R%h69BPt 'tN'*Nlt&J@˅9!$Jq=z~K UDZw\2@)7DؗS  e׀n00;]pU_4JaǎT*(˜Vi Ȱ(K6DRW b$3`볿ՙoa}Uovz[)$}YtP{|#3)$I+ )9Y,*+vz_@(c2곦ippHԋlzGX- ̿V:Uo<^xB a_~"K[6&-^ϻ?>QAE&ukR\׏ǔTI![&(JWedY /lmy ֊@y ]\68ɮWuU3fFʒ$H{S/ٔZïn5:uS"Kzz˟׼|K30Xt]ނQ3HTǦnyK/l-ql~UR|}W[=>2/\6ؽy{;zU `͢}bv9/q\NKr-V0N}W{G=#a/ǖY/w~O lM:Z%pu?!!OR`HDY 0"G]-Ҁ3Y.,J:^ QIzy캞S<ɚXe֋fű R+0Ґa*X}~iCE K"IxIs[('$})xy]GiL^5QOBZByfz=ƺ H ‹'S4T`*Y+t:`aWD깇P枇}-&ˑƵ|Y+$0fD"Z0%*̊EbD&цuhC\_Ԕ=7$ D}fCJ$M}?M(@] ၣd.&I/=Y$((|ADQ-A!@EY*h3͌XT*XdN "pcHdpYe9^mͬ2`vTŭ)ckO/H(vYÍ?3.4yȴYUO9 Wf&~ 㓬KPU`X_Iy.Zmr @8<*~TɱDHCMI`Ym}Hw` ㏀vGj{r. 7CqWUe-' Ȏ:[Koθa1wrˮ]*̰k(UyWR 3+OT %۾k. x'?~_WF8UVV/C:8 H[xK'" dEQp00`[c(U) 2=u`+e[+k\>7O;feq }*\=e'*܊ @k"EcC{!Ӧ}?'({hܚ0z?Vr>*%@.9 .鋋é41 tMm 0@T8f1Pܹy8Y%cԖ#'x4b BSfz 4Uca9>x_P}ZV^>B!4GGGGGGeYr۶]{zV0h4n^n%&( N! 2DH+T@Յ[D@9Ph(JUc)VC:pk8b>Z|q艣v=~FrX/Lq*l<\WS8͂0Vjx 5`>v&r\EZZZ&O$@D/&-~<箬=ܔTǟ$aú}=x^)h[GQ3bCg6N.3ȁYp _҇fNg{j# Qxzړᣓ#c޼u'ث9 |[rS7^ܺg"lLw#/ 7_?~9tq3ӧr J<!$ Iu_Oֲ˷&Dzp\~/_OvJjE}ޱ%$=%";^x>~W~s~Z_)_Qo8+tj3|$sq,^vecʶ1|g[fdފi\. @wfj>'2 '|Q&㺾Q|7TD8bK{-Fz OU0 4#jl'gFwض;9l6WdZq AŮPH߭]U]jZ-MF3h``c/f0q;v^7vM|dǻI{7ċlj {5~a &6l 0O1IbzZVU} IDATV.Z>uwo!epƘО녍9EJAAhB)l3vkLQSRJ)U-Mq6l ϨE7<6H&OH(Ro\g;(“S Y$ڡ4w'J`nI5] =]z?@^`왞$)8NMIX ȓF<?u[GFN!nnٮUZU5 inq hMҗw׏87C ߺTġ#t/ynQJ0N Tݧl6K:RZV-2Tᵅu)PQݴfEa40TC9\hDJk2%B>/0bչ4M U P9֗fZ4~_B,+cYV6varn>fJ$DL8BVQj(wz츈KMvl7 ۶=ѬTw鉰/.'O`kU\7]FlF5A-1-$=]EO;ƾm4O;}mD߯>6&= xE GI~ȥ ӫ?MjtXp>F2~ J̲/5WW+"}o_~ ~_3̫p 7y0"E7ɣɩ^\ ? Ōyթbg<_T1pM:e_ tZ-0 eonpOc#/Oo_4d}Q\PgM>¸sP4xd씿!Q4,h@rN=l5xM*c||;oz`M0>=<ךn#zz-pGJDX]aSI58pe\N?KWҕrԲZ{Be]_q"ρ)"R ²Z©jB x:I)νص=#a#!0 #eu_r%|IFd`ݦh4kvh<b:(#ͪkeq1~q.2f2@Rn%qKH\ij*!D0q|iNƴ~u:s8.εwl}ܼ`T 2p=?:WS I,Vp]G]Of][:Jy]G _Po}x0oilo[Z]0jou߃eb?c..:kD5\55Ŝ=k,wQ9rszOUR bz%٬n}n9t巺Ϊ6ɇo|_{5~P=_)s+di..B^h >\K !ͽA]QfRmѲm+_af($ s9U*>:s\!t1FwB\W*RS0,=/.l@Pf,S(mIjJYj(d+_d-X,2E)h-5MjLk3isѿ=&c0uE *Bux]9mY7]Tn/j2]KƼRawhYR|tn(0RǽcE h!x<WvJŤf{LgfK} [70vwd'$.S~XV&1]ı#[VR.?\},$h6^r+,qu0@ML+Oمf'/ ufO># RO fo``Z4:<&}iv?4`ld ֮]0;SIqΥti&M#ER⌑Uݖ0 f?Y=0A)2L~pFKh6[^VA?+ry&~ɢqkb ^8 oV+ömWͱc G}׿+r<]'uwha:D1sțRZ/i ȳGFFj{[[s7 M0O7#Q~}rVݹO1{B^^OFo՝uO ͱ뵯<"5;7<$_͘b,!m3KU8^fUgvU_}>q׼sWEqӝ*=V y"DO֯ש_D3CG"S(I?ӧĊ<,Dާ>Q +όd&qV0\pu1HNNkk,xߩ0bAVHQ*(d}1vqZND$q~ř߽޾hJ0\pT[k}epkmO*M cd,UtP0Lva[~@IG ~ڕ]PJ,]QFhe. mX !K!,-km.9 ZUw}5mö--W<ơi"bv*uk(; \ZQK mj{R @<,Wt\ETݻq\.h44M}vvh&M2 ~w5[УX?ǘ1t-:Buq4_>9ssj]X$^ 7|>PnVԺv:m`q1O^Uَ+Ba2(J+ՂJE*dϼMX\mZYR,M%|i#7Ua@fM8" -2Tț'wԗjGqк}P:͊KǛ}>3+u'IZӟ[n?`3k2$Hi~EHJI$n%o}f{|Ζ޴n9q5 mKcj]sWxekd>'Iz&/k#]l_oۥTuϾl.q17m>Kc otsKWvzg{:k,O ?'wl_9iW7\wjgTwˍW\m=/!]#Yl'LCw/3\7>~4Doli8bo%se߽Pb;*s 'xBKL&d,vPգ_a+9}3SBWjDi>e7l.8p8aX텣BL+]s1mۃkq<X ) !jna+m| uJ>!Rɶz/a>E:654Ed[q;ZV^[K87GngK|) 8"S8rӀH!132"EiRA(R ݶ( x!>6/i;SRPN:˟'3~Fgf)\_2/0 SSEaGQaH@2IteSa$qm{685gҙ&Cf/΅ff.Eᚁa"Rf5 k0Tn׍ROL#硻ʀiZLT|R>Sʗ2RP P(RLZ@)v[uAP(Ի=Ѧr.}UKUNLLٳCKJ911K+ŵF,akֈӧ7wmZtaa,;HZY:MNί? |zB+-l:G3,X#ovyz>*- %b{Ѡm޾{>vQ >n| |ugԣS1O9.atC}vI{mIP(f-߶g!/Ҫu_›߷&Ftgw(.a𕇍C_<߬ݸ+TVz{هD<<<<K.aL%͠Du(v饤L=0S*h#_䧛*%pJt$Q@a_11ɈicS1ѶR ݐ(RQ)( R48SS($q{ 5Pg_Ⱦ/MϾ&$u |Jgw.w_BK53Q@ZAQ ‚LU yua,*T^f- uL*pyct4Z؂ p@jw-í͹mq]0#+B,ڼJO&2 Ҝz ڬM:3-*k$) >y yωu& 8ȮJ*rvO?лX?yLtf]w}ɲ{w7Hb~y ZdɀV,XDf\Η]pᅍLUM[z[r}Fڊui;x?}tե7Yo[xe>0;z?q^uۑlQ~c.=7LB$ܸ9o00?\I}^O/:A/aٔo+Zgs&&] hڝ ZQRJ|_ BP,Y eGu䌳y 'y=#-y.{pi,U 浦 (=}L mJDLpi1Gsuit2 8Q<fT(*u n[ͅ+Ks<˵',֊vw;q@9yk}ܐԝ&Y8k˹b./Xahhtffh Yƞ!yh&?/kk͞O&9v A7rY(% i$M ad3f m?83luVg\Sl  NU)]׾٬ErŃ5@WP7Z:Aԋ0E`+EKy׆ uۦpb?Zuv@&VVu]@!R y9t<["4ʹҕn9o9oK\α *gaaaϞ=dyV+I1c۶K/=cα}~m7ﺅPK2Ҥr+Xܵl#GQ ~E3&`LO3&$/U>C~=vn|<J7vBGCmʖe][\.WkP]Bc7ϟ(t;8 0E,=3qzïp;yQ qczX"]gR\V[$uw,BqchƂerC : ;zyT\W)pκE2j,d :m{r"DQW)EuMBdJA r/7,jRFEx7ӞBkߴڒT2RsC&Β-]uhWml|?y:wM Ӥı#qgMkq;RHotcޖeuz>\W9ۀIdǩkGndV$n04 i~k N0f;MW 3:6m93uge?w\pE CLAqа6b;esknmOUT᪨Rr8@'\/y+ߵ#g)JF6T3ClQ>.g/ff3s*)ul{z)?f=ܖ\;]b1?=PXN#=y t@\1+kCb/)Zf˲gyP(:EI^j5zڴiS^Sl6RǑ)7F&XǩQ9S{G떧"Ӟ+u^˶&Q>_@6k'8v$%Sqg֮:e(_nq?JRƸ)v:p/? ީ_Kz{+O@RY!ַٿ '*:JM8~´ſ(E[Vj|j%N?f$AƼ>UYh93a@u/B+"3׶~cܿ·^r䷽1 vO;\ Iq~N?Z1^x; x0^~{>wWdy{U q_u]Odp,^?/_Jf3 뜁|L崛۶)4'&1KIs1& CiQ!g3$7 ]ӒMƇB$|I$.t}q-aZW)JiQ"193RZ0T)(B- vCsb5z_u\ϋV+g)i!FR{q/ǍA3d򉕍UE!sO92Y΁8גќ㙦IiCӘa-= A 3t79gq¶Iή9{H<=`u{$kIDAT[o9'NrTtŅK~uxc;Sy<:Ʉ̸<'?8(k6 \wtllF $.YqJ&Iz]1&q QXVj:?8X ;Dpcc䐍q|z %!E6L`)_*fõln9セb27[1P|{cDd3*P{|vOṎxr$E/?-j|qrD;BsDzFS\[-rLVd_Ggm肋盵#=;*dU %:zzf|B\M+nc~lS>m\eKm`KrO %~~?VE} jw]U%ߩA۴iS[('q9wso?sؑ홖zh/͡ ~n o~p0+R+-,E\XBF-״'N%#ǖ9_0ѽy]6^NE~Ϛl,4َ 4NV@ ' } KNSpwyg`Y*탾ۃkb,+]uajzVҒ'K.Ww¯N{ekGvSA]yul!mf=hSu\\j|<8>NJ-3i_"L[:܀nzTO)ļk/?3ێĸA_uV[bIbjMĪ'Wĥ$/JrNO~席4Mix/Pο z[mQޞM+@ oj9{pTq*-<ڏ:QVTu;V!Sff2 /GP=h{^)Ub!KIbU=_Nd z qsɳ@wTMWzlxٜId䞄i:q9?c=FL7D)U/F/̷Hu=xlm\.?SoD߷X,IY& Ījʢ(xaaabbg]1b͚5.K,ũz9M^ȴf?Hbou"L/=T# _.shs~~bE0QחHu7Y#M2pׯR;`7Q};wu-/G7Im4N6sCn,ofud}Q 8:Wwulr|spc$_c% )K 1~&"k3K|ٽr735&1\OMs^D/'ħ-W޸.eKs"]%Mے\Dn|{@caZ"v-zI2qf UGu7bX}:-Bp:&NM{ ٧{ !E+ﺮmq׶EU/y2Isc9z.l.OLЛu>`*7=.۶Gkk۵J XB`eK*w޹;˯RvJocf Tc҃٧Km:gSE˵2K V`0?[V&9mIgtk4遳2ht:z(}ZH^hLR!=4RrJ98`y9ؘsQk d?s*\U $:jq?ٿ-^`F=%/9P%~b?.97LrC\8?1n:0SUF^D #>lIWp;0@XVv|qn^/f)֩׼~_/׫;kKuk0^=ۖ^z2mIENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/back5.png0000664000175000017500000030510612140767206016150 00000000000000PNG  IHDR,PLTE/L=.M=/N>-J;,I:,G90O?0Q@0SA1TB1VC1XD0YD1ZE1\F.K<+H9+F9*E7)D7(A4'@3&?20_G0aH1bI1dJ0cI0eJ0gL0iL0[E0WC0UB0kM/lO/nN1^G1`H/pO.qQ)B5(C5(A5&?3&=1%>1%<0$;/%<1#:."9."9-"7, 5*!6,!6+4*2(4)1'0&/%-$.$,#+"d5tRNS@fbKGDH pHYs  d_tIME 3]/ IDATx|}b"Ԁf]=Z*I 3ƘեToh<5d2g)r<}~=ϼ+8}myt]]wq#{w>bxתkſ{61bұlwŎk}o]b0.W?48^|8~hA^"pWzlVAN#xLq[ AZ;  |D< kM+9p]>?6Mab ~W0Zn: aԟa}FX) gB#AF3.G1a04Q2א'|l~L 0oF0vӸA:i[K``C;-n=vmgyMΧ F^ptQAqz[O$AVgGL[{maD Azs? 0/G??QW63=#v漧H6> JG}s LX$tK 6p0O3?"^w+6gj[gs tbaF$Avr!AL@]iݙTFƀx /?zg!DssA;3r-KDiׯNręٍ8įo'L_nU`ho8Hq8+#|W< ߝX]ݝ囶fܹu~Ю9=̄;*((Ow1?KӮN %h2' C%^} hO_wIzk0} O7ן qFh sg&Hu)d8?,30dgd㎡q=@._3Xvpd&!&@TN\!34sL;uGP8 ,L@VE] -yhn= KLX8@`X{Aꋋ"\@/!~~F`Tź4Î?՟L0fKx_`@G/}_σl{}Zq#IA@ΟRx`RKoȒ#@v8 ydᡇqwN`?'$wگ,=I߮׮1sF<_D`x1 pO1hLa~"3pL3 ͩy|$@H={'yHvHA0kd] o0ooCПߐw!HNfz͍rÑF=4BN*["Ln9JF5v{S$}NrYlX,|{ᕧbtm{;$d^<y}-0@q?C{-IУq7gi`|M4h|Wc̀dlXNb"=7h2{(Dd;!c8",J~ hj<)rAw'h#^=/8OÏHoWֹo̠[aWļX82O؃Ŝ_~9~t:򚹇ܟ/Z~'P3[q/}σ̣d†Ԉ?`3F3 Mt0#;0 Gްr μ‘D\E]T7V8DDA9BKDL[pưe^.~kX]ͦ25Ȁ9Ͷ'[Z_.濕`tt*IB $RG0K8 Gqv t57ݼɄqi} [dr1 !$TcD^±ULxRfIP6xWJt"%!hx0L̬ggN<٠߁_ZYv]ŝA`fdENKJ8Cq? 4??&PW`)hڡU)?!/(7kN p`e"tvǠ(}ce/'7'u1hE3~}y_D Zio #B tkbxt*# }3+]+ cۮթ1vR.F],F fBpz p'L+l n O<2+2= ?^VELch7 ()ՈX-x΄W\Јq&+BE_DU.Dnk΢Y,/N$ pLjW zPBA-, k*z _<2o$< fi : :MC -][mda>$ ^͖>a?ߎKqy?M05& ~t2ud*kWd==} ȿ(< Xr\̲ΫWV= H !?1gik4MCݭ -߷D:a =e[P= *⒐_rIj91aV,#/2fx؅;s ?D=^I/i裡4BןiQq+B[23qs\{[f8 Q(w n s>lg@gI8ejZ HNӍT\40:2LO i# %qp,+Pb1q}@Fv /(7[E omVRigL7:`= }N>v{Bk#-ᯟ.PC!sȹg|]£spa6O,AP92e` G,#Z6 ~oE8 heC1s)(Tkj47ke׀VCa,6 44ݼE8f=M4" (ݽR !j:vy4aO{x)Q-e҆,H0foJج*ʍVt )M+n2a!w%zK-8nde-Tf@߭$Q39L1YfI #c2Fg]:5q,5蹢&{!=חh]!v|v|wPK.ĉ E!NĆ 3G3G%VfJ0g-b4Jx>n&ٜ.lD/ C8(s+h_ |A t=V᡿9|ɢB e1M\GI⋱^sD!Q70Kl&\!"njzS"\Qhlp,%(/RWfKXxdidYr INA0:h]>>ei ,#kQC?C0HTTFS`˔Yx2f T"rp gXJH_E44n4#8RRuFv PHoo2}% 60KO m8]S $U;ݑ =hƒ+E!~,B _0ƅn\ ?p"w~\>P1>xxxx6 9 Yƒ<&yκȳ48R㧛pdAe# ^! ';qSTiX9;B|! 0< awi 9FA \5f{!@Tw udVA5n&U&a}y&<#1#iQ7Nf Q^Y[[4`{(~V z.<M[1ʴ[U uksTdż@O C"`W҇{Gs+ۇ;$HnGUOh6gHLA3=ALQSF7VW[Zx\2_\.NDdmQ ' & eW*JSš.` BA津TAbp-??~1a3ܡ怉eh%oL/w''IHfi[xCWM2]ol?z9J{~|d.\. !Փ9O^" >PSD@KrUf*g x{h+̱4 1 k4p&xHdTMt*ߩ&Ow %H#j-iT5hu5N遲U~RZyAfjѫo҆o= ek)P@-҆=w ^x'4?N~C $),=$2zE\gj\Xl2Ĝ$ (&$s7 #/m}Gq_ r2e/KZ^@AaO.`6t8u_y=S-1˔@}mI Bv#͠A ,kok)j?vƋIG}~'Q0% lrAtK: X.܎Q6W3GγRz"Ӥ/mG! 7J mpܯLpp f.s -ys^1>Nq$'D%0, &4=aґ YAc7զܖ;89g7,E'<ѾhW  |աK.] w,x%X^s&QϛQ)#H2&PzyiI@'tHqjWxN7d0 L|6$<@0 ӌ:Z ӘPǰJ{NYgްpm٥6S蛃Y7LHC`>$CqG$N/ qy |ua@Xܟ ]!Ȇ_:Կ$}Lm/ {P/n^5E9fAh{a1sqv*ќV+|.9ضVWw[a|ox쯨tl6xpϻ%?f/?0݉i IDAT-ntxG^C9m@ gFxਧ*vjYBU 8Ǩ߼Y>dP$ؔ~u4N5HߦŴS>58㱇ߏ1-(AVY>VLb2؉9L|y<^1^"0ހ&\T4>o$ޠYmpJn =@+pS_Mp+\/nn1܃^KI_a2p h5GK`$3NCgV.)nb+G[ bOI\rAH6q5JkiaT ˊNv)ž&"*.GL,J>ƥ wSO0ID7Q$[A sR&)Vq >>$#,4grF0nOm-=#""z [o]Z&ͻ79:N_{D! =@^'5#J BJJwO\[G:HO{ u/"*VO'P @a+D-^J7oG8׌_8rWxd"( ,U=b}`@T?~6; YܶC(ӔƐ=JF.+\Mvw:MXuN5rӓL IMhs3藣T 'x,A7rp**GD#r W~g܁9D:=HiFLی#nwL  2@q wB:?ʁG: BVqs6|1LIp?UͲ` xr Z.x|`|ooO@Ny~]I[W&H.11s!% t֋ڄ\ `8{_TG&5f G;w; B"( ) qɠH('A7-TMcϚ"ZOr_Z_"Ve/k:6=V}؛㒝N>^;}0W@DgݪI\1LL&fdp( 17QNuEbз+eFumHuY} A@*ЎE2>, :.U BJ\JN&Qa<"%" 삪x$WQZϫt}Ӽ"g@kC#(X(z: DM^4BS>;S*^ .ĠgUlL =@z[g!nOmDOta3?9&PdP)N`KpAIwGSވĀzqr/n [\9]}w4Պ-opiNxb_0I;6v[TMHN|vs:Q<^<+Ӭ͝yޒE58I2/Az9!;BS:c~[ ޫA)Ȁfۅ0%#PƂEퟨAf:G$cH`'P0]Hbj6:Ð:;80 087sݛl+?psv| ?f+_h6}xEjbSa r2>#~B[P!yy =b_g`yy`zvj M1TCf0թ*N¥*:[:y#Jn{cJ;<Hp,JӻRHư7a.s'(p!K K|`r,ɹ1]T]J0ZIe&'O&C$C : ={,|0U<]ջjQFT*?L;Ӎ 1`34u!Q ŵJ&U aVgQ CmI6Dm3ohgb(d(5Z :X^!<P~'_>-n{#_İc(b=U{a}9WRڕҀT218̋,̳@ށa;kZ&Tr>$%g:~kP;JȀd"J$-(xҶx54:Y5bΚ l0xCb h͙fgTn{Hd59 So. tCf`TZ TS!>էǽ3D7˚q2ڸe"_K%,sW.= F%ݡ(d~.%v|`[QWD!N^[z% 3$<#bw-&|OJHw5e9}L89"E(C k$f@|-$o 1 fsK9Bx^mF랸{b 9xUB\)ۺnPÈw^VqN ) nsƉw]A+s FRL@닱AyˤtQ$M#!"ˠ'|dj>f0>kF}L$Y?!F9<͜)y|D5sH!H4p$x(B*c9n<ڬb00.I t On:n3 mHUa09H$lF쬉"DMycĆjwabT ȏBq֢‰#rq_/Tq=4ҟ:W3K ē|HJfFVb@/@u@J{vl#6j4z {-x= ΈrsBo|$|F2C8+\L{l cfFKz7GexBH{qڄ|'CXkUHE+M춘}az?Hu$5=”;-v[sdBZ鲑]T/8YI}P$06=@P.,xSR` WE" &A%"&1'>:Mz?g%jq8pҹK<*?!09Ԃa{Ga#t?75F{'f h,r~#\[j<&EQML}#H<0#(gF@aA(ٟL9*90I.|d>~Xyda/Ӌ+ï3(9jÍOdFiIq*e2YD$ˇ&<|*T ^YX2F5lhB*ƻ4g_-WD2@]h;:ӮVۈPc6k&LF*^LD:Cd;)%5n$J*LQf2^-ාgOt?m8&H8 AӐ"g#vtX$gLr6+W(ln5ٙɞUyWր5 |{1>1˗}޺-eѯ8{t`Bݡ@8C"hh L7CcDNe:A4/n4B:PߙpXnC!2{nޔ./=d7Rl]R5?-d>rpH2"r\Xw:}J*rmȼ톝qon д}@UA ز %oN}W½)({тp3J݁w eF 0+b8 ֗ÛƊ̴vXdR-yO'H`Õt?O$[NdCO?$dZ%g[+4!itMρ߸Q>aypH"SD08o^BwQ7Nj~}I/5Vr2 1`y*ܪ/oTANV>; in$1'# ?M26a_K2R!oFch3멁@_?H1DZN3{f9O)|jmw洅4ltiD~L@7rlUitDZOݿlly`KoxVY1?e87&v߇M^(Jn7 YQm6)Z"θ8Ze'0r'%];w7, %#z@pOm9hSJF ݡDX(Vx+& +%cBD[x?E"%"F4RG}qzѢ/V| *&mo[p ;6P<3 M6rǦg0ly@w`&Ivz !spfǬHtT4ҁ.F:f˹ La+Э!Zح(o+@MBS^@qd8'F x< ƚC7e;c` iJ{f`Gm043yĕtTg"Qji9xNO\20%4=`L@ Zjf]feFeBzYtL`1|l!0&eG s؂ܑci׿Nz`sxtؑ$O( x@ave\!9ǍLy@g,vrr#eTt-^MumBN+|o0]S.^8y6a?C"_lf?&jnbVzqhKqFgv{]oш6x :VSJgGi 5p9W4ԚZ} )NC19ΈcCn/5a`ӄ,f.dQcVQ;$ zZmoǔَc&4k<2(/[GglQb012zA ωA۵h*c{9ަ#8v¦ {JEvcF%|~c.r+L@FH(J pd=0ظ pܨF}Zш pzl,h B#}C0zit}SJgyӘ3Mq<5E*Ͱ. L M!m-y6$^ЧN^/1zM8BWb1C%a6^#\ڕ(o_R2EG sӣVNԁ9d׌?D! `/+lB̒{BXHq ]RG, diEx O6m.ɤ=` 1Pm#U2Ud Zx<_~őY[iS"G$lkkm#'Yj^N&`э#B &]SLN5^?7Oe]!*qXQ%RF}lxu}j [IBHjVqvh<ܹ1l:p#N5w aSJM$ H|VLo*"cHk-YC 0ltk8C=( Bz;& $#F~ۑRW\|N֠Pq@G X#9]_X!sc*`ŕKxx]pvتFV2ϹgVqԈ1Ba&h$==Pb{=)8&NiC614* 0Y`c"kJ /p(B |7a'jPWL|HŌFI+S ]tpkK#𺻣f{m㼎 U ]S9CҠ% Xq DôrwtZ_ƃrpWJ FE߇]qH^0FBU39 OAT:0#Fk:p֡ p%(cp1_qz+X&@fu\xh]ƐowBML g*۳aWL&&S {ptz@$AHoބ]&Tφͅ'gL>"tJm''%|=P<)i 4Ɛ,8^_:sЪ= oST2MsӸT-$HA5Y0Ζ$Q2,az˸H9';u8x<bCZaLxYԽپecz$h=K9]،gcuZ)A (S/ I~G#(Ms1L!Bs {jopC2n)V)!V{lH^ KW 7;3,X]zB t:4Z,x {;N)0vJ#l"NlMAh C1K6,/qV725[hl;t7&t)D!D;Q6t>?XGhmѶa^B& ZJbM8ԘBRL+` : .= /'#P|C/H`4v"_+5{$-`)7  r}x~1*=Äzn c#p6pް sC~B TZl0xdm,l!fE"0=RcL7s=758tb5ą u}}`-;VUO|c6rx #3x?"2L:k64/,L%wvP"L G{ۺFrj U' }dT'P!L!>>> r]ӉrL]#t0o.1Ӱ]"=[hjDT~}d΂ 0ĺW߄~=LG>WȘH+D*AUT;tV`{\_ ? 1J(WܱMk;J8ͪ1,|Ay CEY2?p4H:<@S#&&~Ԙ|kZT+^];O8GAOYwP~jR^I C N2!'Mf;$g4͢tX2Ucb9>ЧqUxthyTCv׹2*ȅ%٢K;L\ dqnc-[#An1h G: Σh $K[1٫RNS5>"Xd+P&5 ",CX˴sw4WzANK?lDia8J[TsG٠W@9@zf.\;盕PU[8W8`M@0ʗˍDE A"?pMlUB67fByB0"a1S87΢C;jyUi$p^$#]jS; ܰ !96kPVLM EdƛfNU 1oVO V>r7j='~ Qe0>Uq֛-pw98(ty *tFk"c Ho֘IE_<hP98w Gt v!2r3 yJX9 W|9QXavD&+x#F'_ @9MɰlUV"J'Ƥr y"Tg5viƪ"=w1, k+Hk>bA*.բbzaR =A0B"U]enD@ޜ"Vv,1 `h4M{68GS"$Th_PnPҹ*:sN fْ6iJu <6.j!2Y㨏N(F\jiBr:ۃbuO}󲶡rv^+^sfnnSsF2]-l𵸆j`kYT گ@< Q[2p)a^^p7/nн99*rl43ºza '"L`01Q/ǂW#5+unj 5ұ}!Qq `A{!bmr$3Ll.kN 'ZwAZa% L2R1ɓC!t+r0 ŢL=t:x:R25 lH^hEvh&c81Cƚ+IaՇI1sө dA.yM%1U5fz )P])[|77y3LhCxVPG ^ v>ټoY0@`>|&lUB݅tZ7DdQlbL0㍀@sLHŬF%Ѩ1s Vn_C>"nͳŠP8c#QǷ?2kVʐx1uKx#IG tVJֲX,0idžH4:šװ Md {ڣ7эaѴ]nVYrej֛pfrp 4l}тw`nH)fv3h;I|PFU1Kx0͠Tt`i;㚗-kq+s E2l&9p`Ga)l1p [.V3:;B$. F=Z \$Hcn\8aD/c6Gl]'Mu3wvd#OجKoA&jFY$ @X%1VLg)`[rs-Hvaة<47GlфyMrDVt =Dב҇Na72)Ǹq^;CtNGu$BYA| g&ZA}⽌ r]. tZ1GՐ]GЌDLpo"V-x!mqE/:ڽt,г;f{5X1|\r9AѼdyDaqP#TKFG.GXp5(~3!ñӨek4$;H2lw*w$%lЄNKLHKU)(- eueP`ŵy+4:\p-) ^Ћ(U_/̔;{U9bis\iNv@[WHt }@4_.pMkJXajHU=)AL wQm`B%` ?%Bv`[@(ApԅAQEr꼟o0S=^?]{ȿ qOG <JF-2΀FY4 /K'=Gr 4`>(觋NW@{d?v rڙFVA}LRl>7a 'Z#}0Y@)9p$&j3Qx^O>}f(?u:}ˡuߙ$VM>hb0ti±`MZx`+cL΀ht "r6 yG9Ej !YhD=4X{9T8΍j=Xs1º3 'N!WSH! ADX/n0eEw$Hz=~ ?:'__=zO_poaө g+7 ;s۵zdWb:tI†фF-|Ы 0/;xR0b}x 9ua˼\^T"TֵĶe{{'<M0ږ4yɩيXLy6^zm`{!hxymw2~/:G9G$=ŖrEw>bM1!B!˹_^pE,A|<96u;~yy)OhAwZD(BNGcrM8Fq* ]GС༓u tvdyt{V3BGl TaA+E%nE AgTKPԁZ랝~v[aO8Ȃ< f"@<͸,mpv7s :yF>~e#ƍ bcȕ_bHir~5^֡;~#ٴtC(8MQPLLmbM`?D`@j<r8Aƀ=#4P ؋X؎/OC çua)f`lR jU%Ǡ%uH/1б\$F/pՐ{nDK i06Sgڋ^rؐk-F_b훫&'Cك qk8\Ѳr}nY$K`zDN Z6 ⍚VDR $nB BW`/P0m/`D<>U Ʀ&{ٱp}UZHYF"3eMmˆ]9qsp{C!d28իqK|8Bi @!Hq~~>HVd@ ]3- 2$DD"av Q0p;t Jp 'E*( tb\m1OҤxV- /F[4Ǹ]9MTB-F{2[aa1OP?ȘFVA{&cFC-䛖 $(.1D#r>B4?:Zkܢ [G"?es5'ڼG>~>H%*~z4F_ ?[Q$I(ޫn'e~8aMq4X"5@!:L~So!OxR00XÉ4`v\wMJ5urKW7}f,7VW\i 06X'8 Tbrr\c"KG\סی.a12ȧBD_d|"F$|' xu'>GzE??/:ߢ@+FQ/W_Iq P!Ek-<+q>b"aE&?m }CT a {fJN Z%ֱŨ-3Iy=']qʢ+ƹ&d[7lϲ=bg-5%sD*K"7ǑU]Z3*0w?~4݃`=+5* ڄ-sALuOPx`6ݴ ^%L̼-e=s/$<`!CLJMV;}іFM~u-C6 -cNP@^?%͈|PT,miu';B*hM$| W`uChiOfj0c:a'R$Β_T_ K{~&"R~fXO]!/ ADV_6ۈ95F5)L|D&9Z'r 9&E#pe#%puquշ1|Xq#JDT \cLRB1rTCŠkZ]yCiu%VM Z'hO*? tG{^;{~3sΑ~̒1}>Wwd"cA}}~*xp \V0m:(8Ȍuƙ1'f kX@CqRb.Lwqr+ZnɀJ W&#gtQc")W=#R(bzH~AP EɷH; J!=r&~2!S"G_߽ cπ3" Dѕs~q?K)T E!7F3; P6礢5U,k`s~/iwZJ\ "xMXAwkPO;O'kc[gB D ŗ 3@tEY\2'9`|*v ,33mǏ}fg;7 #(/eYB6\Of8.#@3\Nkl=k[vbp)j5f-^*vIn7%+3+i\Қ_f'W;Vq!BTHNا1Q>E{}_PAz>ëd94 O4l=p53Pyuru ٯ;BR0_q c YJ_617w!z(\KRZo0W$ HZxI0+pKc-} z7XGW0]g@}[;i>iBEu̪ϟB[XŪE8Py>'% &؟Zȯ*{{{FoP)y‡GeaFa|8@ JYjRg 3w;@6EBx]Ik5fƌAK=e%:Nq?*(2!B`rqrS#5! ?ߕ]ae cMtUDR`UcoiP`c4LGM6lX "RJ t&`:C{&WU{ѣxYmL8Trqz}> H <.gD}3IUF*5 &ʚl`;Sd&#g qi`wKM 2L8pq2W6eIw&ee0[Ft|mKYtMZ'㚥nEc!;%a[:fT&:Elos9"L~dhU4LGOx?ry ?0Gc>|"b-F'NjHg$̿WDhJo^41RK E5ޤ }|iz .(-syu(aiui q+V}nw$ǜ_%R]46StMy9T!|.Gh NG__AlsjAXXx%VM-0E4#% H&k|z zJ\_eR7S;F Z`D$>C{ @]\Z΃ü,G «G 1'| AH~Ia^3PI\&\d CdpJ0 r>>3_^OYL9Og&Dg5;NGJX-/n@#w@n&A ja1OaDIc 4}.uf{G /,eɗ`jP ]{8cßF͞Ƭ٠,t+el|:V0oG^^&Fj*9 9?}Ww\`;05/poktjNQKC(6Ua5<,$2u2 (t v)~}q {M*+옣Vߞ{ E!kWyaE5H1.r2ޫb/Ԏg Yf[T.+B1q_L>k >= KdNMNm\+ܶ; 1Jvq }1C, 4n?Gq'LeH>ƄX /<@௟vh$bt,cd5+ry7DO)+o {H/C!7'y':wS bp= ](bB+wt&opV4Z\F<4@4\steDVQw $>R2ŶrQZ&N ;6W,& x^z5NQmed8F=xР.1 ٗ 6< Ս)1SۇLp*[JژLM$yz1\PZc*C֋!11<_0XzfZ"aPyylk*f [$b;Xb: @Xb=f x̊×5'tǾ %40+kGGx-|) y 0TV RDAۥoT\(D'{UE{oQ5m21p'j$'Ͷ%4\94žVdD  \Qw Dyi֘ Gazϩ dXRX;bBWװ\a{(gM!ו6-I/ .^V0ʥιgd7Q*%@%)*RGj tƩ2W C2Ƀ@/j-yCm ks0M5P=p 붴t<40 -Pm f<7\E=MMzHՓ9W{:#9q&@V`.oxKu$a@F <'K\cJ}Ѣ5 SC5.C&7'Ï[|`(MAEv3҂Bǯ퐶J7f׃gD wAHItNrp~Il!<Ÿ&yWXᯓ Q EG.:  +EZmr|#/Wž{zh i&SHel1kCfr 5c"lJww-IjtZ_c" 94!14x?wI^f1~zx~f)n lxJÊwҳك&Is߂_0N$]4aL-tn:ƤVBZP~TÒ5)du+Ԧk$pȿGP'ݑ|\p/%1F_A'g*dT vZM @l.*|&aT'>`o>l̋j C7u_;kYT0h @rAדuo~m6k[,܄X3Ht-t.hl`v2dc ZҺ.j髻cDdJjwq`$.3|;b鸕31kݏ`N-:\ݬ.2!VC!WCjU2 tLY"`|J߼ ]})z6QAðw9uTfyj58d V/D[t+/Q BŊCeeQ}K5:B=k)'@L6Zʁ 42P&vbށ>Q xڪg>% Js('',ל {bOp+( M/z_OpP9[鞟S?=S) <=MAYJrPi8抋n`2T3A\5T,e-5"sp8- + Њj)E}'.pK_s775QXt*Ug/ſ[ +~&#/Ӻ7#`Oqa j`94s0@<营 p d.VIcpMfSmꇗ<*TxsvE+Ÿ0&N8 SlRJ뵾e$, eV RHBdg?.^H* L0(7PiSpSvKKR(6t; fRRx@I"ւb#5V-:ePj{}6c"ƅ /j&+c?3OK?3zmء蹌kkD6* 6'$`&8v8uz CB#lEc%%f1llt|du\GʎWCء$U0Hvۿn?r`@=K!Tlhr- ؉PaO;D~G7 b`DHڳCډq!nm mkˌRa߽0! ]&tfWˡI*, w/&__[_:u0EbSΏoHh, '> gxr80(j }l{ Gyu0pHDxG \Ѕv\:B#Z̔:kQZ!nv-R2g?]9@7W#ˬ-8qb[wH93On@ IDAT0 X &>2qݑ{K5Yh1II (=2Kjbp8Nۈ qHO~3&`i$RvbSz7ĵb.ny}IMM!N9V/Ww͑d8O>vLg4r4+ DB6L5 rہgb,TPrȎcgډk2w` yKE Fh^NF Y5, ppM,Bjb"l8i5@r8n&Љxo;bVu^B#w+kLh\\+Jź;6F*EJv#ZOVwW޼# M9,**4]œ7)z%n,uu#OUwMbf-QJ0Pr@1 p=I2 3LYN-` 5)0Zkӯg M Q)^U2kJ~Cf4)ɇ}8iMMؠ<$K]0sgԣʩ?͜ wJC6Uxm D!Tw! CZK\Jz<܂jג>>hXഐyREi1pȄ , !C3H9E:t f8Wy3nˋx@ЎF+89FIG-ӱ '_i'0P7WpcaNymNPkmp+qh3 ש:<*CdPVYB`/Xm˄w\D wɁBQ$jkY20.%ExGJUDbԢƊ'7d%DSKdȷŸ[r7Dc}k2/KFTNrEd j9pҶo@~9ĸDCaQ]v D%1XзH.u90EFԕi') 8=%RIca j9&x:G؂7۵p*U0{yaBL&)bD9{F{d<(# rVĜ&nJҒb0)Y 2 ps=|Gs⢹D /\//lA!m/_?=CD-ѵaVm;!:atm"1 s+c 0 JyƂF ;6ߣjƵwD>-a#!2 @:`o_=n˿vnSoS`Z6nblFKp^1BXNucn230]Fwl$̻ jC0O=ؚŢHNXdfr4BrICOAw6\Wv\K}^D-p|dl,n9'ZՁ"j] ^;X|ܔ$EۦxG*FM>q3ǽ ~4xn)+ ɖ ,ZYzci2XSUfnSY m>]:"210*Թ1韚}j/ޖKm ]y^-5vS7qM?#עݥ {.x dyc ]Gxk)NhdIjoWd3Hr1@Z-^f9Ă ,ZmR"Y>O-}u!]gu6Ƅyd £D;Y}kZڠK'|;L>|񲂙b3ؓ !caբ 5r¸vx66lKu`. > $qH-!KY ~iDa7*i8i]UPE܋ ;ރKEੌKq{WC%[9d'o1.nR~EF &l]|Z&BO35"bUIEq77*=y #V4Wd6fd:9N8~ױluv+.ThB4hXmAB|" GxKrn?2M-:?-$nE(MyυSekw+//~QVHq,Q5,uTgޭ.3g?I,KFUFC^qJex c]œFfo6lW,͆~_ˆQ<6A7ː1Me!ԑ-9dR Y,7hvmms35l%diNG5v-q\YØc% צ`+sH2&t3H7* c긥nl3q/s͇Y5&p_xz)?ja;)2O~s?q \_op㬥7E>>"\J ,9Nj]8&\rfhLsv~#B.@9G#cnT*邲pyd5#μxjYg\ '<lFr\ٿӁr13c%S,G)\JB$J(i`09])%],A50ħnpSI *vG.8̏|AT׆|!|*O:ƒGUn{,8yl_Nf iw6>+77+UKXHO.v\fN)3mxB˽bq/< GqR.#=Ĩ(>v8encOY-><<MLF).aR/OR b-,4}:6dnW}g`Ŏ;(~_a:G==Z(E ڏ\0/Wp) 8ucJUyEUЍͲR-z&~Ču*f9nwӻ8Z(-L|<^ʏzgwL18^]O0C ,g y題Ef$gMk8}{&тҏ0TD%FKM|x? S&tY Jךi4߉Dn Sp+N!?-*802SFVW?ƦtAMFA`KQlڤtbIuvG9s>iM|!Nj[Y񤕂ǥh7Co퉟~jR3Xv\} 6v3G]yg21x5㰓V|߭ئoEޓ0sew8EP~K}gz\?GŊleu`E@/f3uLsx qGcWƽ s0kV|@p: '͜d`1" c'[^10.: $m]Iz2NpO\eZ3'|>Ar@-m88JW)1Fqrg}T`jGhrQ vwm\--*ep6 K4r rxlûqVԣ`;g璉MpƐD߽&,lol9̣&/ZTV~IZd-t̅#9NGw<$qGBP`|!cFd3 ] >x=VH:O58]PE爲ydÐp5aYv/SkF^_鮕wp厛PXM19Bdl`E< ʒRER y8X)xH@`>Y#`9{Cd] IW>$ps5ͳs锰#w|7C9#=,Ly ;0 @ W!JOVk~u\1/M ~ "`5pT}2DᯋQAOOrA?XhM&51QeJØDݞgCSnt-APLfԜ_Wù}Ɏ S|V10@e Ci'~I^$U,A"?lv#|o1*%g؉&iauѧSQ:t9k d`h3Z<;a@/yPv  wfA N>YdAȗX CZ UOzv$3ޤ{yZj\M姧$+HKt8 ki1w8#6'7$~6!e*b|zI$bۋ4›C0O*iXY:s:! 2! B$ATn+r>k604xn ?Æz/iIIc;I.B`Fm]dIU$Lv(X\\TV&ގ{,`>1ۃx8VV͵ D .Gu4Lx;Ub떜;6d ZԖ21 @  ͏w {ezV0 Q? L:p'T6~S~/,i6fn2fٿJVg%ìA`c ,ABu O߽IC>$PZp{qo4x͒zRȦMCNVoI/MbG<} s=:pАvO?|n{PT|"%Z㡃hI:F'WJ[7AAӉ6׌|H_&=h]TfSkL1{~C#<0e2&m%zЬ$7Hg'r2P2vvH#w&Rl.:oM͑40VM~۹B!U/].g!?Mbs$jO ˾+"QQŤQq9o4+. ytXٷ@@?:"4(Q$U;TaMվqH{5X^OA̼=Κ G0o>XP%'"8>J=^D{OG#keޏ+;" <ױtk&iMe֦8M:JG!>陥)ܝCyz6`-G,D 5ѩ;t4R[B~<B"^fjH!?߅<&:;O> QzvƦ?ЈЌ z%k'oBH`M{l7qMg$uƄ0-FȱOm + 'w: Isb/{cj7uֽayj@f3Ϛ_6ۮieZpol% (ʪV?=ۛ W^b(A IDAT H 笧? [>"UWaKlsOPLr6QD!nMX5ؑ{ZC(k>ȘACv1&)jL?/uwЉDf-.s8.j7v:U*RUU36Y>S=G |'GZ{&5nYÝmV㣦Ǽ+?ǰU KI@P("0>DDR͆#;yCV,MMƙ\nﴼ?;hZ f =00XS0w-*& @z1'ń %EO 6!oFaWBM' Ԉ˅"]Mq4JA`g[xzI%@a].`ԭz=ƽd@% S:`Ɓ@ܮ6Ndbf$zC=tуS{LIAqD7}*", in=񑡍~h.G07<u^gk~#hW v{7*1I֢,;^I ۿ<2X:LKnzCVrwPC,I 4Y)*ƮiI$^=v .V$%%w214 T_"?=ZFO,XЅA5eCڕ,%A3 aob^F ܄f^*+5Rֿ1}϶&rQ(FE`Ya@`!u",74:Vg'F)Aɍ]NP]rS$zN a@[-֮X)g6ܲBvW1UqъzTl5eq'+ ,윯'ȣ.Ȼ {T$̼nuL U^;GF`dҴ#Oo ғFGr%C7hF ğߘRbYLDqeTX,/l!jMǚ69TAD=I-gA@ Б" leYJaKd%/Ku\O~"#UZ h9Vjm 6ް 8Klub+{ ڡOoDEuoKpln{ Iٿ~Cx3cw:G%uLu?._aRj L@nkE,duf=I>g)$@Z/q(( |ޘEU$ Hqwj3p XE83?hgN]Amy%50Bݓ3/j@MOL *^$Lf=y `1.leSeh\ߟPh=( 9~ݪGL2^g5ĸGG}L+!8)ghu^ >SMxF:vU#؄0~j!tvs%H{!rV)8ـHZ.OS9gҋ,zlL=ۭ5lS}H_xxa/u늀 ^]l:w_""z8ny4v)rKtfs~׎_q?3s0ՋY]6.V۱Tp`ġDoʬwtB=QZ Z]ՃT˙?7cQ*dkg~n'u hI"\ޫ~Nx2ҋΓȐf(8,Z+30\W@HxDH`J؍0dٿ\0ڛRtf4*V3hClv;u¦ڢ'F+ pZ;RAquԩ2=1SQj`5;#Ʌ4[UYMW0}rJ*b QX1Rj\СoUaԄ޷ZR,b o %C׳ZMV^Պ'{//&)cq'x5 Pb!@(=M0;\mv,L'Sw ?h\ х|t^شþ6qbId-iM u)"BN(>O젃v%"CZhXb/tTK:YՀUh!Zb4FH u9'fW>N9 i(iv&OOH Q @eT$ʤp}vFnA 59v 3ބ}]?^{caIsG5S!^3zDƅ'ۢtz}I 3f7!0!r*Ǟ74 L+o_(d5-ZAXngK[lB^#-x"I:'٠_X# q{9XgIDce y]1٘ x2ә sעYR& 0`\->X],o8QcB0H{ \)*C1KR& QOؤ^O^i;~ዅrS\sXq6&pb'8Fduso©Cc ul m! +OZͼ!K7Ž#S@ڃR%V"_%`\o_Ǽt?=j\Px4Kx߿ ~_|=Wf-* $)fe,\Ė 5hΙe/C jrM ~f 8{A_|iKۛXzX'4IWI(}$1[%j*WLzJfVa60دq1 O2~o (A-Npv@_:v\ q% ž ^bP%̣0ۏXy@ݑJ8kYދh"g ql@B*ifT7zs)F6LT,qE* u0QZ4qPrlDc޻Ve䖛 x <îdu )PD!K]'kM ht!YvSS}IUۤ&fE:wҐs *-BNdV&#. mGOO*K &1&^MiHHрD#b 4WQ ^l1Dun'Go͈p_.[ S^+v]!|{u#)N'L1%j_m Dp5  GBoE7Nr.PzC-%z 2ϪJn7@,ɧYgYR&sʪY-cO~\ ܁$3]GEq[WkZGŮ->" Pk漏>sŕ1i.*V_0dZW-0Cq1C5wT<T SKՊ/Qsf눫|whw.qu0w] @:$i[t*m7l+CW"+Y%Tdt'aDC%aFQU;&I z'=)>afBL8GpҘr;:iI l;tDN}.8@4 PTuOA`pBR!!P|! m d~F'>HAAfō?K9փSy>& :㳩7T&˾a]x=FE%Ϳ{ WVSzʅ`7Pmv6ѧ^d= !pPKz(T5Clz "ƚ .Ńb c(|[h]d&aіK[*r8.DC``R$pA$`'>Y1VpEcӧuRqf-z½r](XoqJu X@t 5x+PiR]))0nD lHZ*%/0uEӶI5z#CR)N)d:9U&HmD 8 0 6!5zXL{$:#y`_߾>{i(bx4X30ÅIfl^uf ]?td%ҍUM$Ñ4430kM 8MncMU۵8#8jz)q ӠGk4`(iS?s]uFޔ;m肿\mQAk$:ڡ=>T=MY*>fu.zI4Nq|ͮ"#x=<߹H)Nt A2!RpD\`G/<=vpVuS QXRoo+ @}Jxg#5z\/PoZ|p5 H*mjaWxh]pQD#c{V:24uFnJ&$-6쫧YQetH*f03摬D~a?rLZoB`]0 ?OJjj1 DZb@8Pd[u宊2 I:!v䍀(zYCb=o GY[x4iq 3E۹jG>3ϻ E,@lp쐈Y@jyR/TJiqDribbjQpNxge+WUWW&DE=^9PDX]OuDn8GY5C;D,sWIЌ'|AŶ˙~'*3L8d_,0)ca9A:yYgJЋlAVh8c\ëO9Lꮃ5wPz/Hc^t2'5TLe` TgdU iKHߠEȄu{@UC-O+eg{8NIO7j!0?yC}Apyd5tYB>P,v^^I50FȋA$3;o` aX/dGZ=*e{EIc%XT=1ba ,X0!g/,[f@ v,4ZBB .AIX`UG; #+{#fȑwtmAHöX&Zȡ;ZK3<]*S Cq S]ȯ$Ka{+NWl6Hߤ`J.uR <@7,R@U՝^VD Y}{#>ű* #t1^JٱD픵A¬3x_ 3p3oo:c-RY5!n9dٳ )؟FQK#!~ ?V!.%JFWy?]:*i.Pz^$ƅ|EbTb|EAܤAb(Ŋ@Wv(G;.6ߪkp  cZĿÂQMIf/$X~ޡ`-,Dݦ w}pV9k@Jjw?;ا G#u,ee5zmG* YeP]"t$NCqˮk"GvŹwz_B󍂬oskH``;-OǁtkF[s\ ၺ (|R̚eXN!;DT>Xhނi &`ށ+Vែ3큃A_;O2L` IDATrf8^.Wg-8lD#?.FI`N]uBo ? JmLu}p ꬻF c0Xha}o9y̳Ⱥ2ſ O`\L=`A`hY9 h5F=Q<Õ?e 8I/yYiްK ]7Æ gE.s'[vIᑅ'i@0'\A;O%{ӓM41=6W^%,f8K/;mh5H1{%rLJ>W<938k]`gwx ,q:`BC@U*[R~ TCdqIJMR7oryA* - ? S2Ը=ѳ9?}4k@ v9H8M0zu(!.5`g音;*Bj#_MWm@Z&zPi P~чt>*}2 ܈+o^9aCV7v$%/wj,w|j*enTq9Z8]cX@d沈 "1,Ouz`R*%5 X~BGh_83{ZMH-Iƾ WGv';&$ W@Olz슈 h{F/UuJc ?NQD|3' M}w-ҍkQŌ4Y:ꞺRE*,8w yxQzzv~`k-e{lmb!#2!`5 S QT~[8vO ^mxoOĜ YpL0,E@59sX3࠹چ&'M¬r6I-yZkkSjүmUY}M,G$`_#Ⱦ,_,2-6|^QbDN׳8s勝~M}bxGP HRٔl_\.m&W]-i y uarM't D).G؃Mf82+[y7ovC_0w:*| -za0} U`^D{H%W*@뿋D+9UXxh4Y>KS1ݎ] ~0C^xp~RDWYs!nvϱ,CanUN0r&k>7z^)6vݴ<-$:W;/濈_VrCR2{hdUگspSTu1//X_. 6A!沇o/lGze>ZF+5w0ɇ-0)@1P5Y8X{ b=3Y1!~!Oz| 5U.E2JR Ta),5d.5wϻ$HOt'{R}9!p+M RP-:r )$76 ~01# O@[)CUK2M?BGOVh ^%X&v!f7*WBIC&:ȴ#XQ8}k!@Bl @!z9>ck~RbE ]x]GÜ8fq hF@AH]>E48~?e)| :x[!b [+*ǠYZra;`rAh3%-t+buјGcߴ˝C:>L g>R$TХft?nt6^vG='[ €Lcr0GEHݜZQf@huv ^Jm'H7+mDזՏ W.rxgyp 4/tK"0 \b0pQ(60 H9ڑ-JbxŋqQkYiY0!=՞0ث摺 njC}.@q=6J MMը}HdD%o=t) kX][cӄ!_4~-OQF3|A/5!@Nz;6uiAګp< 2R!Ps ~O aĩ" +gsߪ=rJGЋ<h,9%ր ]w;s;fɞOXSH%.2Uy`W?ϡѸ r}`04t7S]|_w݂DR3JTDH# .v//mY)e{Z͹m9]B>8.?!kr#zZa "[aTNU#B* D3C]1S"S6Pn`*yO+9cr@~\#'{Qʽ=WTsשCn(R-ȣ:0EXq}MEz繁lB[ g<ۜQ uC p@X\oERK_P:V\q !*=J}p;?2dR!D?tR.FyS0L*$Gz.l-)15R*xhrLz>8f6]1ʾ8e,Oj)88z/L0I#C\e dz ?ۦA_6rfz 2$y/V,MN[I^Kf#UCLk Q?qPWb8lUk0h3]&˚3+F@PS*0`D482K߭@^4kr@d\V{XX!`JwRgJ Ce(˻+%/mze p'5j(wL0U\4ϺavXW<hT ҫ~sE~Po 3ٍ dU‘1ex?/FyK& rj DM2SxZk҈l1܈w$5)D 9dNrgn_Yo _}TLqZ3d05{Ӕ (Uc,zCݓH(?~12k飭?0ϾȊbVm>FpP|UC~\N}Ί650C/gַo+oWRGZ(12u6(f#}k2<ܓHtawcqR>#FqGޡ(K*GXP֝H[ yװ^^*_\TFpwwB<&E`4 CRÏ"pSoxm?1ЉG@ȿ(]2*]PHc%G%G$Z c^3N'FczԠkA09WAX8EGm.U  "DV\11̾'@B:TzFʎP)`D&L5 r ۚO?_L&I3?ػs0‰`hCXv0(:8j ?qK˫o4z,VlCOU] sJ0%BfbPTuxab5-8  1 zwxsNWtLYMa[SM>D鷃#shBznB9|y! rhXZ/g(4xUW<5G2Rӥ!Ip26o(5Q]_z]S`rpfʌ-+hgw6|+])4(pҊ"l=f*fZZwtfʸy7Abֹk?&Lsu?󉓔5Po"XwAлLT]Oߕʿ_e~:Z+\Ǽ^V3n"w#mp/݉`QQ<$,Ԝ?:V #vBȳ|ar)__܎p7DC\E);"bYw:eyk:yI#kBԄ2 d'&#a0O$!ݱС7pÄWz\ݍ+wf##{%WPK^HD>ٚ*M6ۑ09\btK̝?m'9B<; UTTV)4W lRR:맔hu*~_؝rKmv/`(W {=Ftj]?sTԺh)bg%t^ iHoC@` JH;̉t<3Vg84p_rQ&jQũ(.G,A )Ē0 0>Qt_ua+Cs#'HEj/%W@دv~ l" |~:1:k; sr_IA# ~~javCsd`*z[0щ,ZؔC_ze/ݑtyщ.\AϪ'V+A0t͍87%^.0H I?pR{ 5$f mEg^Ņyb-YW1~?k_b.] w,\`AKSIE@gD?<> z|#i@w̆SPGjp.¹l5ìmM^RWiFڛpM" Kߣ|}ijQ}#gbtp"iT)j0e^ PauB PCs~MJƿB ~GNCd㾧ssE؎]V![z3F|i_|POʀfqh2֪?>K Tl= x a_56 4Yƅ^USpf2ewfg"wPD$3֕V+'-64?_K-;&yRvЊ|eo|a1^JcPӓ E_5aTy1\fYNIOt[I%/0[:JrqT3T5!p'Xaۙ^/r|=~~_^ȗ~љl96Γek+E U#79O3dTf)OtO%? g~As%;&q0mDyYo1tӮpNF)x̆7]D 0 "F(c5L&0ĝpXDmo}X|~DH Y!@wA0k :Wߟ_ؙ/g#.(@`Mk)փ_e?OǾHA$GGbqCj`D+n>\U˄D-_Ʈ/i,Et c)v̪E@~kU7dm|SyȮ} 9n@yuxzd8+'_7_7T%ŸeEĨa<kIK^1>eE^lk ƒ:ŏSO#GRo#aJ19a) :2^'鞥Me>Rs)j ~TpޭhJF'rMp a@cL_k#pC@E eKK{T%A/ \lIsiG]wFZ$\ G3}ϡ|\ ?{F jH\qH a2r?2~AKm4}C.qor\3qyȑTWV\Y>/ }M37grs ?ؚL3g*ˈ.Av3y9W.ɾtv>c։vh tWӹ'*n3D`cĤD 9/ E{86/ө3e+€_ y*n}?x澄R7/?sG;xCa. U+yo7my7n )vt@@1Yd)r 'ˋG٤E,e\wo]7L!j jc&(< k`/oOpum-PF6ߍSɛ[D%~rp g. 5|{Y[!kX#TR|$K0z`EE?Ȍ勋uL ꮮ_VkKv!l1#`h0o0Gvv+`^jk֨¼9C2cF;0X8\r^]6~/%`]K.AZ3&Wd7p k mǢڬ@po K`JUt J®{::Xt8ZPlDZ&.RWUw裧EXp1W5lxAJ["Ht(Eèu`[`9C! TXbd!jOƟ~."& |[_+`07%Zg!EɯΝk"0>z1Xcnh USlH*@ >vH:$c%< K췺<:G_y %]'x |8oE 6oqK߆]^CHuk=* ȱq%*}EN_- > r6PZu!uB..["80]7IB (5ST X!Pg4LNU֙N7*Us Bs:xM/Wo6RG?u Nafi.pur"/C2^m;"E*smIQzP=3ݲ,I*! $adg'E`r̤`Q"k h8+^ |4Mpc1vT OZyr,G5I|2"9鯇)Xu^|D`M&S܊KD`ARKks *Wy~ F9h#8BWz`.σSR&0Ff_  < PZ sn`fc/jR˿&0"`Fks]"I`Q E3ض14I!(mtߎs>X jW_"4?ϥTep%Fp(>= #0iDE巢ɂZx/hḓ?<1=")9 dݩ[^kH,eT)+Ԃ08'Nog8BJ]B^<}.BX;_D{"0ZJC '8y0?D^^ݔk5Udpu]GB08Ͷ^[Œ|u/| 647!x[F׏S=%ODcS*'}{ڄ@!oZ!P/aPjrmX6SV9;@I@HWQ1RZǻ..ͣ+Ŗ.NC#<{_N_bDvWKP}ŪV* Ҟ9-z7[w\~) `>i>5'wTZzab{~]n5KNn8ݎy~yi*@߬5)t]!`p*ߎ"w}uM kO=Iڿ%mց~ 6-kO?M̼=@ IHkt_@4kYgˋ}5C˱*ڃw8~} Ci:ԁy~~}^$w0Hr<`Ŀ(Λ !IP{SOSP ڠbXV;֐VC=Sx!cwqZ-0Xݫ\|(q-Of(v5!R;K#A-։ bL Ħt#/H6G7=q`z҃.{pخTn H@EJ:< w=@t{}{{~^ lB<2)@N%0virOXQ,gՁ0R(OĸVH;!ޠҏ-:? ~0I 4c}#%KgK%.8`18;]Cp >+βHIf `7\ xXu |xʗ/ vr@̊><)>F{gXɿ.G[ߕrYyO%n8IA&@ Qb6ͱ1uemsFCaT wtFq3LiI W }d]>I | ^_Ce63#32ǂѷͷlm7l{n[7jE 931,ԈWC/Uz*^WSҨ#K\,63? &S"wS^M j:bHAs~JsT5Ɩ7Q'J$>Q?4rc- OQAvIM}S"\bnȔK_~mmt埓e)ՂTs6\4߁tu/X5^k`0f9h|C=hä?%N|5ǬQ76k?phKÂV%+sCtTH^+lïIh?n0l>Ѷ8О%>xAH<61+V F|| !\ {S\ԅ$EBŨ4Jlo{"{}&eƏ2 _ԳIf_j;f^,# >OfʬSpĨ _h|!`>rF ,U%gE>8Gj8+Z9d'菏2>]ɜ,,ۊ:x`/(${5O`o}q k|n[FT'M !]"}}~.kgؔ [d7\z ܖX k 揊v>6-=ؽA#ҷEY`")=Hw1yG>&]X 3u~yst`ӗ7{Jk_pqdO, %N?Cҽsob/_Y8"OCkE |xK,0-nDh=_8@X.1iڛjZR!DԹΒsg31duץ4Fgy7vr@@+`P*aAm[Jokŋ7G̼5u$!()e[kQDJE^}fLhW2!pBNߩ u# IDAT.S1E$%t)x2ʍ-6=RgM gc ~V`#2 c/GThGǺf o; 3h4d) AbnJp)b 2H£9pi[Jį !uxh1- :\넡0lQY8m#5j&b]f{Wm<ː$<0x~GKOB(L Vצg! 82rğ‹rŁՓi m;t q{ GMu3ik(cLtRzކWg.iمh$`6F/  $#E5r Gtq[/zkêW7w3R L/.wnhM"_ƽčğ']ROeux\Go - ew|Y",eד ,oI3eBϽâL_\TS0JrX55#a\{ld Q">HoI`_ӥ`4!Gæ7ˤ_wş&p=_  A$9y[z`-vƯ7}kn:4f̪Y0>c Zࢇ``@jEՉO0Ey2{L<(*2 B2Si*s]ϹXhM>{&hL:,FahE`$II3{w| =cnr͝pG]b EfcەZ0xSK!Bǡɳ^%om/͔3 ~ȕ$ &e`F|x>F@Ѕ/ x/!ŤgHGpKXX,7RcZCs,ۘ_XWkhJ&s[G@T_ [ՀT,G{$ T@.!A1ݐ v ڐzFa7yN@,MZ ʶG@q{%e?orޜU^~ĪCG Mb`XӬS[o-Dl|7^@σ{ YE~ dd~0 =^fP$Mu^\B&'s9Nbo|O6E8U ֊2Ala& S~pf쑁Ѓ̮ħD߶_Q@sD6;L}6Y*> +XY!*@PeE0D> `,n Q5W^LJ8lWVj qfo Y)b0,++M(A(˺I_`fтyi ?|(')686.}1uF@GK]6{KH$wzARWOKGn޵bi/ y+/tC&7L qMrIF:ƶt,O|ЕD;d/jP6XdԾ8 *%x!Q;2deM>69\NRC+Z$3!Z A{m"2eqpwLg}|ijF[w;2y>:'~y@-qW_)I6n஌v0a7. ޏJ FCõ=77EǴõV(!KfkpUC6YIB%@59No_n4eYAE5nL?qM7j 79L:tCaBm[ lքOPYX8 Ut?-kpk.HPfE īE$~D5 ׷<=a/ց{?@Q-[L:b#M䯺Himd:/&ih:ɂ#:n8C("j{צ9{<$ȥ?ia!i=LF18CPv/Ǒ:苪}0Z{f ٗ)mz_r0[8O%vK{Sz}=`>~81[HM Z5Hr^2SӘnנb֪1HQ(`#$ q6Ayc)nF]|*ڄG[+c._dCp UMx=e2Dh`fBx <#nM0׏ kC'Բ"J9 Or=q>!XS0*mwyY#l&CN=FN ^d߱"" @EP`A252fu/mb]>_ gwyx4jpC3gN_C +@/`R'A/O8U%ye:M|'9>=Wks 56 RC/" ekB6hw|jx+~O` {AF0IRG>R1P fN }qD}o-l>.Y#ւnr$r-Ӡ)֊F/giR[j6+_hF1(R4 N#/iXQib|t lX+ t3kl !{1& 6Vm~埶^9!Q'f4atLi7/ jHW/3=2KD @?_KRYTf BUeP=rbrg5aSKTi@7G!—+h >h|AC+Ozt0$ȿm(Â[ޫɚ1SvGwҭvsrD~B)_wC< 1̰cfHE l@fʷb낰T7$A0`?0. pMl̙؈e#ݷۻ*DtT@#Ư|o@dhBc6|]= >b? -wac4&HFIDq24#two#(QI[#/ADkw S*S6M!|TB ͐gP1yJ{Tf4cAB^+ՆE2|ՈM֔c2Q -U#~@sd G<4K9a/Oa-xϴPrRr=Pc"waj|E# {=mV&35 T΢Ϳ( 0mP`t7crV:r%= y2xjW?AFpRkϯ?!v Dl_܇0%H繆]j4efJ4Nǻ1 !0"pjPe:kl29Gi vĵ flHb0Ri>Re QlRRS(\q0ǀv<\kBL/AB݇=`jJP Ʋ{@q㣈fԳ@pHhC/"Zgz6W|/.wwځTrNZn)p-I8 -{YL㔃9"swM(> S>C$ss-^> a OAr(ND`  [Ũ&^ ZQƒ3u#g(y[͹ R7MO0P{>bm4fg[IGI]=IWpyk_ؚ{~932ђ.V"H)$jkɬ4)QG ǸN;b1)4AVA~.DlR;yO9H2TNm"7ԎH\$p$+ 4jIb}mo;W=,t׮_Bs(Oo(ژD $k糹$5uj4hfx MѾ^ˈ:8fT]P4Dt{9c/SRkd >UEꉰ0 >r(rX+(˲yQkuYG`E`^$۾=-~HcѝƇgvb5'|"`0 /ʊ/YƞP[ܷ~paL_;N&[6dht3vhPkn %,bPBRbjC^*albXf[3B 09ݕ 0'f)A:-b` 9V{ߌ Y A@Ovv_z—hd>]XM~ߟ Т;mEDR'Ô+?rG`c}+.(ˇ\G"kwG" =͝OU{fVCޢ˳8J͔i7cf>(dx!gq9 @A!{gy^&GPƌڭF}nA$ x cAu/9Sd֋op16v])2 sO \Zʸӗ|ɰj7rhWXGz½؝%Q"}KKT7XĉOrIz@e;}r>M1R$Ubu> {C?uP}j`F'p < ߣ2i/Gu6,un/¨d0\jZ`!cbb9IUkJ T:mY"nd툷ܲf"塋 ]H `Z;=7;o|𺉡yLD+W, =|օ[(ׅ#O?wwE6x]aEǼ!MuDZR|S_SX`}w y;uleooyKY ;m6 | ^6B(SUnep|tCӶ[7]){$n"$ lG/axqD('M(GZԵj$e{seqS>']SL92E(kPvG;@poB] /|[~ !(obah;*:p%K4-SꟜqT t ͍WMR:m}YZQ=x+ &,2 xFH2=_^N2$Lop3BG$j12]}DiC]#G>7h/[N#/RIcG_JS*/cxZi"lm-5cB2u|[ދeb`s_\=T62 E+z]E `E0jOfX6` `,5q 5݃]*nOĝAA 4CR^/(V_"{F%"/H41D/]U/?mU$jO@p&a\hnؾ}g R#kKd54-uy];b.F[x'='u~@ #됉mRG_|:x&3`@jD=)R{ &jaG4UGX6=I\֘=ӉE&h-,l6\fڒ]Uv03)9>gkax4O٪NxEmH:xRP/Zќ:w|~|6|l9r#^ռ5vA+%+i,Oz G.`oU[.vSF5ZݫēW&7~}(A/Lx:1'r .`-,G6eC=Kj,I,, kVd6r o 0àoU@ 8K k #_Z?`MIۍ~B)*ygirkXkZZ<:kUM@ 轿nZ1v^К/gVmj}a*jׂхjd }-![C ˿x=Hrf.Pyս O]3g 50ͬ)Q\T>x}sk{φ= 峼^@GJ sǦxI)eMFQU6uH>B>8Օ ߈ 7mZI>e̷q-1WzK f<#K8`74 {K6!޳/.")u/s0HÛ:$C; Rd5T1j6A!LdwB~C ԲL[v1eE!B|02*HVӲ:)Hzj)VoRb{L::ا1c(<>jÒ-ݡ9?2NE<wqq5>[[- y+vB杭ֶm̿ؒnu˿3 DV{ @ϟ?;(O>{1". b}%R*Z/z܀05C`ϯW`Ŀ>Ex6/<ǢjWhp)L"i/*gXMF__Vx*6qȻN\اEDf12?4oj_AiU`$c26صG"KJCIL_$^p&S-ї@t<$v 7x`NDzY^Ffa,}< SCߨ~ca{໲nC_#}aUh|UUwK|rLGb`pgBًhҾ &,Z KMو8쮾!?O}w# w[gd&YA3-"^ Qq4].Mfi_؇=m-QȀZ p|/Ozރ{-- $4"{t"1u~LXt EgQ!+>]$LZg%\ilb8XEI.@k Gш>kKeHd}7 C "?ﶷy>gݵ%TMŏ-T*Q06!R a y7^ Kg>xGіݷodg+/1y(\t'k)9X2IK, pH|5#l}֑?իG{9x Pw>]- EIi2 1B6b{/fqЗg$MPǘ[(d5ť)=jJ?tw}gV~֛~1#gV`fp Ū)niq)2q_V[Ze\L({ћ$> {|,bɐ<-sIdRߤ߿tO=$'4Nm ^(Op +?@#G3C{p_V ev{aUb P#mt0b <{k3,9I8ަ?ŷt%0o'S9=JaĤkb*|Q%,e!/#= sd|Y`4]*fXW76.8'!)%pFDJе a71V#hptW x%/`VZnm}~lr?v !yШeGHޟ\tݷt RAyoJ W<5uB&cxk^UO2M/<}}%+U;5詶i1$2+%$`|ԯR4oFɗ║S2o>H*^GY7rUd5/8Jnl~dmd.d+'m$TE {@o Kc▃q.H^|i%l*fxB]^DvqPXn. 11Ԭ 4}gs sarN1L'LBp>;#K鐇uQ[ݑn%7R1L3m o-rjXH7>sq\| 4[5Nu趞RȓGM:guoI$#|~w[o,=ajg9?(W/>x!pWIz]_<Ѯ]\uPq0$y*W_[|e[(/\H$OɳgV/'ccۡaQv%"j܈Ps< n8μu:a}%TWsօ9q0'ˊQ 96و$j׃IzD"pNoFwt p{ڎ{ Fva?}~9wc-d+V_|WؕRlw1w6# דJ_80&)CgVZU^oƼ؟#y@3VF!PYPU0ʎt!G%CR{U݌NYza, JCLm+Mm 2XTnID#Є_|`Z8H%*1&X:-j Z3c;=CcD8r[θ2s5\ؓ?|idnXB8QcD`3BY547"E,R,g(H?sArpDIS4"D6Y {  Sfѱ~ @@a Z?6! (<y~ ߃vtM^JMpj>2AqJum#⛞J]q]{?]u^7!V}I2>H_ϥ|.WE`61H+$"Z*@#`Vk~R$B3Ĵ8O|-2A@1$; (gkqq{imk~ugւa邫{Vv!VVxӺ S:e䑮G\nk] |xq@E+Sia{˼1 l*$qܜ"6~}ȿ@4~4%DcmÎͼt^GYś`^nO99ڐVڦDwXtnwpsПѕkhYcǞw^VA0qo=U7R9"1HN$ %:vI!82*(QK5&`3 1H .E>E ?F)n,@F4f7`I0ԩ?n*}HK(UE P J ӠL!Z* 2@`bA08=;gCŬԱ 'v0^8KlH:J߷#eKM$,06?ATt3;Iv!,*Y@~+K)aBA=#NүIͻxUFun;ܴ199NEeDÎ4as PL8 7[jNp všoN0mIJ [Ǎi%ؽT̨':B #ߎ EqLڜ 3c ǚ@rRBр XmgŽʌg_>T1fnRWE/ mXj5"vvNuGM噐F Ēe~-y 2*&^/svSwN$Vgm=15P:`Œ~7ч0wa. BTk3!@~㋀G9q7dM i8=@OaQ)3V+/~\N6,덨Y>t 9S?=iZ&: i`~@;f2A\Ie͵iV֯Tݲd@l6j g)ۄ*`nѸC?}/|?udň4ZUjȑ*3sSX6w;()_#Ϊ IDAT8G೴|dG#ic^ sXWd>R Zj>#LP0# m/Nc7+i#H0pE֒Û~kp-P'N//>_@:1-]s;[`EW|g"\Vh//F[`S9P,d `rb5jI$xGG9^grsQH[jb]í8($jFo_| ړ1` ˨eyK%֙'s6 Ȫ4R ?+#)wl<Uiu ɮEKbϞ_1GT;eD ye3%*\F0cfr$ ^u_HQV["!ϟKK zѓ_Nc ̢/R` ki.̰].}5:4'T@3PBzÁ1P=͊cܬ4 |Fx,# S ^dOy|ɳ̕-,rx..Ȥ|y $h }|98CfYr Tjo}܃ X[x\`FoS KBP\UСB8${ˎAy6mSlf`EA fᨌ[-~fP7LvyJ&X{.kIPƒbW..ѻؗJ9tW87NdB k"`¾ ĦN@?D` y?5-L\8= |GFӪOl}po 3@@(!B9BEӕu;aLo3~BZԫG)WZܐN8*@t082d]:*fIFs3e'i3?Qd*F`]E㦶)VP1Pl.dJElFH2h~p$TK |팰#Ͼmw%ꗍ߲%[yQ0 ~нs8}[]Nk1~[T/R:(CY3ƽL8Αz({jˠÎ\`,/>>pÁEV~nT@|mG(OȱPD,?$0$C}D 0m}//2-$# iDNcbȮt\h8"+-daߴ:&sLl>7|m$$.ql#M匧[_H!\"]cLڴύx IR lm6wUniV`Ғ@`(@7Z,yL# a*>/.XP釸!2 9;០yKN,;JaP+4' 0-=]!GH[@!(}k,&~{p( k߬.՗H Zrϟk3ć[֔VCN7]pZ vJ,xd=n05aGjcOe5$kW ^ mr]`lM&}Nf#e  G1Bʢ%XpFAׇ<ԭV$giOi[P#NG]ftża4BzsY@^}mO,f)aбPA.,Pnge, T++~ZbA>@$Wze# nFvUWvww0qa5-FfXg:A Ȫ :r!tfJ *(] sT{K; ~oсTWؗ%d0mU_e,=h^ 88[`&Xwpt !oEBRzmî)1'?[e,]K{}a1{ 9vyh-`_4\mofVy$5 (JCPEr$^ tsW8-VF>]g`ݙ^ l-jce\lw jz^ ϟJvЫ@[qkڢs&T.󣦙rn((F,W"qO7 Y2[=VzČ[l{mK]5eI?Գ"#=Z@„9,ii O{|j4hчmNK跣"kMI}#fv),#p@-~A]]hd8dL ć\A  η^c#(ߤ;$Щ* V}52Z_F 6}-\ۣ3ꠙf};2p<N8TNe*m8Ժ6d jZծ#=bۙEsK sLPklWte'1ӷAT@,հݙ*[ b <%W; 'HxוgK@ Nng!>yCvʊsR ~rhkݖd(w-( ~Gsmq"nG^3KuxfeQZvIՃc۲%ݥpXL c 55m6> mȺB+ApRr,%Q0E Gh6zN2uyEf}:NGK)Eod bmY{Z}-N4"YaU2%ԦqFt̼\~\PhedO`Р&0bqjz[Й/U;vM2Rp=%_P7g!֔sWYx"̏b*QT C:)CX|-=&7:iy~-,JRҭz<ڮɗbj X=<0ȑ^M ؤ&g`mAJm&hfGvta=V'slRړ4Mxſsſ;cDY / ;{~}M^kŷ?W]%־+lR3  p6F>̊5N#+?}]D.RrvVNi>agê`$Hv\ߐ­3G oH>'tdRӸ'Yr,%T_MxDc'|97 ;-\Xt7/zu?Lsg5esVڨXG^WHyyK;dJ]rU;H~ gRFat| ~C }vQ"_c1jYx|dy~i;fw'<6Os9Ҳ绪 c}i| b䤉Em(:|fW2z2_#P~宕kݚ& ^\qWr(,rE@Q} gE\pvAķڴ1cJ `s6>Xgj$gY1cY $B_NV\{x-*Igzv*, C63 Y`$p U2ׂCQU2,i#p,%^,3sR7fr>C=+Ko㣡j`ܙ(kvŞyGߋSj?G\m9 t#ܣX0y @ ~+HIV T u4IHȔha#EPg|{NzE@IDQ s|/U}߱8#o)1NQ%JzK4W׾9:hJ,&KφkxENZo e0jvЊ9,I^ 753"l BsT:XTh'O[G5L1/O9=ng=o-OOV`kju,W/vp{Us+Czns?%l^ن7ZG/!ͽķtX`pmH۴;@H P[o-7s=h! irB kޝB62#(vܣ .G 蛸@gg6YK%Nڹ pl b߫>WG>lTjPe2ֳ_~g~ 鶮fڡ5U9>0qɃ_}06ŠƋnT|S 17x'c5Y8 [!=vL Pu!*MojCw%,x+ :;}H_ Rgy 5rRfDgՀ d>ȸpVgB;3uߚ j`%s]1 Rf_*@OwaC_[׳rϼ[5]NNClTDg2NHD*b >j(|o/(hF''X`]eNj/S1b`H3NR I4bL@xYJ#Yk+ CPP/jZ'NYx6D%Ҷ .if s/=~>v1Vd-s^u̽K#̵Vt|9)C$ M&CZ8#-WtOB`<$ah^͍sZ?njoBз/m rzY=ycl%`ɦA #bҫF`>ch!SN^(K=fK+:P]Ȋo+5N-nw;3:"ǡ"ͨ}ҹ4XCjYOO~s 2fs)}gSlE萖MTZB}Y%z$I[Y!lƉ-0޺51$ (5f.vKd4`i@#"nط?9x /ATqn0nIwQ0qhU/n{/ \!\$7[G|5t08,?m9d6m8kI6e3) 27HlFB 8V# wsnϩotLV?]IKw&! NXAP0!h{>gyzn yL/559=5EJD0;oc+Z& @Sǽ93J@&u)%L{ZV߮qGGjBY6Z_1F+o5zHGCWNۃ,nάWF]e#5 6U~6o,ӏG@{1OЧXPۭj0XP`k7xgjfvt=CoO WMao,U8^A`!dl SFۓ%J4tovp/+Z!Ok%FU n3RXئCB”!\?-l{[cO"5D=JPPJ?9LB*׊Z}S_k|ԄYZ?j(,R Ku!6gyxXd减j~Ly*ĀbԬF*dΕ Jn嫮ֶ'`z^gk`Nm5o2tŹ(`ol)Ϛ--mqeYڏ"Bء+/U-fŖRY,!-a}~iXLEA˚XY'><2ߛ5`;J WH4#-*xt*bWئ[M7AK&Bt݌$ؔDRF's8ʉB,zoiK?oL{pj_v bTڹeW׵N u!Ό|[춃߈b[@ P c@pllsw7_DN>s4`ܸx8ߘ;(d\`Jw!Ce5ՐnW/k_/R1Μ?FoD0G8RnH^<}}~R#Uh$ӈdfdwE/pS5:aw]BI-W5`2Gf5Ї M @vNJ/=gEG;iH9̅> WiC5_ j܍ߥ- #hMr5eg|%3O=0L΁1X&tTe݉J^k m6MpRҠފVL"%F[7^` 4F&z2RxLNuWA ncw1 3Ervl4&nqXW_nD"ْmI=bEW/Mi(j']IlF!pcVotKtO։yw2x)BOx~;P@{sFK^ 6Ցɂe^n2~ި'Zg%Pn'6[I0MM"(EBN]G25}vF-QWE&Iw1'ZD5j^+1޵j׃ޥWrk)4)!kG/J{^)CyAwaѯz]D NF6`Dj Rd>n+o?_u3wЎ,,:ѧ?)]4i"(00r#Ԡpkg`&giNp4/@ݦ!SW^+h+e6TaE%b(:9 'O6Aߋ Fs3ɆXZ\;%m}M蘰T2֦R("wY;af{5qj9E)@p/ϯ(p/]ڕ _Z(P,xYH t gP q4Ou+ I:' C\.)'K2&jzY>NJ 9C}ٽ?u&їF+St M&ӹ!G!0 (Dby3b:|hc5M\ƵSbjה^;76dK ^̰A-s6wE@,#(4o'G}5 yw/;"J*!7\.և[$Yk"Ї@`!0׌̚Na;#o;]wEz?B rsP? ]i{M!E @7]fy/WMLg?S`R_ݔފf:;-&wYnK󞮙*%!PͽܾWKiSzSz]vp&(bG:eˎQzK'us1oh EqSt^ZcײdE[3 iO&30h=Kθ^8aO4="90r1?k.!} [ܬ5F0?]0rWhvrdR0ai* u"3 )R>lp~9U#x*8U|;Ow,=O]Z6;\2!R漻[PE"qpQbH`~"Y8~  +`B0@ 7 &56GIoE$Un҈Eu3* ڠײW-q[ݐ_>*-i=Pm ?|FVF0׮MR)ʞٕd)᭘9o՟Z(}@Q@yIYR?&t3hYLD8)ieSAu݂7]av~ApUt!CFX!JYb{@2=q;֦0o(.G_9R~4Gsݐq>ZfX:Lxtԫ}'x>43]QjYXL lEH? \K_يqq8P 7"b8n+M7ne:R1[s$U2>Ķmu)p&05`䡧WN[55]=~*ɼ0ƙ2s`K$w2`&xd?tM`;&#%nFHm"/Vޫ彤~mF9/-F՞Ĉ0jV4.mIγM=&v6B9Z35 ^*HvB\Y'$%]](}J~F߄ fk B󂉡d>/,R[nCl)+ψj}ns2)lYhpcɃH,zau[C_ntjl.شcS)CcMY#7@XphUY (wl"ү`[pN{FX5նKՋ~ 4m AVvK6k%YQȀ󌂫k _X<}N &cA>7"z u"Z^`ALvx1}J (9xFey=KJ@N$q/E7|d{ϓSx{O[>`rsmsI@TCTBxDR}{A 'a.;8Q>Ɨpಛs΢nK$WK=tE -)b]It{ߦTEc4 S5ߛ(/s$n.`Ƀ}M5!olȒ{{9ao@ eT3 y2fI"Q]K6* VEׯQtUþ6# KaGڲß.VIz[d I 蓅m2Ēn1:4.[26#?BF\զW·{y&veLZ֖d@s<:gi4n)aˀ_(Б:X6ckYh |Aeh\M:׫&L?qF_>ש @u#\ `~6O;O37#ܯȀ7>ot&Ku4p֋J7 =nQ\ hm`Ȑ1&UZ@q8D$@,뾜Q&Гn-Tz#b؄4)wihĸT@(66+PȀ 2^;z& kY[s۪7hsr>esmAՌb׋߶G 1FSkNw/؃,.koHҝWXGD9֦=@(3Ğ} ^ͯH=)H_6rTb`>[4tF%>3jYmM* !ݝ;#Fgu,=] >x`Fy vSKwzU9x@տ$@/H%1iFqc2#6&åYW sjBGzJ:y GiWSBHeٖeSX9D~qaT; 5H89 ǴAȜL${O̽ÓV ڏ͖}mu* %ɞ0x%0ʽϙsq~U=U嶢b^>Rdv嚺}|?.-n7@3TJz\90M2#U"rM:ANz3/U, ѧc(=G(Emfnm7N]'/7oH)Py,}R`S8}>~+"a\N>n yH?+FrCZAnϭ%I _jg̭۹ K1WiB&XHmScMy!eް e9)]In!/j ")?:bBޞS MҦ5R0}_%U v[f!&|H{Yեe9Š Ǫwˀ  T&:QjS7tBf?+<71Ǖwg9#gbkp1{Q8L@Gr=vx81}Ŵ]KOP\7(Zk}CμUE:fT;VDzhYtu\Y 9sT7ƝDEAkA뚻= eE^lTk16 =Uh8C48h2>)-/>GєmriI4]1@w6|*.v:K-W3vKŗ4jy̌q#[4hz95iX;\cIDAT"$aC6! Ona~-.R K&mI|皗  "~{Ji2y C57EnlyB)`tO \IpKm.WFY %{̀M}Da30ܒy1ł1`tl΅SkN=|Tc펀ы0بH=yKYކ&\ S΁ܱ+2F?Z`/;nJ1MqJ.O^dS)pa+ZSgd%v+ "ݡawn5/wȤk >ž'DZPH~)vWt_93`6k?*.0|"y+stx_.]t9Gkm~{cuMw۫1!PԔAb;{gr`z-䘄]uSք#^a!\4駈;Y FF-5:G!> CrNh- kZ&| U)PO[fʯ>BAaVBb":S-^BY6Ƕ8FU#On7 m" J\Y,8 4]6K|~F̗V2|,kꝽ F<*I/_Hͭ6 s]՞s(2haNQ9jbآe_oNv/eA}OǗR. X}c '|sG朱|Rاs|N0)>G}(w%|?iOm+SN^zBnf |tL1mk*w=7BUuQ|u؋R ߼pUht?">tVXà+C٤M-Sx*7>fō2h1U:)Aur4|@D <3IzJM;Jn !MֲE&1x;G+scӷ\v^)Zʖ7AG`_}ڜO0)@!-i&Wm5 JS>J zOa-׺\@ ΢R2-@Ô^)rof \#XKrKL`#dD&㚆մH6m\DS๜ [L37V0dVȿh֖71j'k*()tsT,ƻ? Eg3LVZ~`5Vʼ6 m&Pk=[r(K y\aZkn4)!ـ@Z˩#)@_ic&ҲO7aC)[A3- ]k~e1o|JޢbSԽ*90aqm5ZNs'9U~9Eҟ_ϵQ&U~2'!1,6 QT\zݯ79i[`@@rW ( mgsT_Y}ހ85ԷF.Jnk;(Yhht^㗣]u=gVISs7GNN`VRғ;m=s%Zg (}rWmXLșpEh_ӧʔB-(z[OOǿ?7ץ?2rq:M+ fFcVbʪn~Rz~2FƢš~6jzbvn^VNJbnjV^BJžBNzv>~:~>~z~6ZrRʪƦrz*fFf¢z~:ήvz2~~:žʮƦrRZvz.ƪFββ~~6rv.rz.rv*ttRNS@fbKGDH pHYs  tIME j IDATxl{O %JxH)QlBDWԬ?yo}r^[En*w^h9;4ƍJ+*kcWF>*~}[<x>\[㺛?RǏ]vQ0ed1z7zx}5_Η79~~x=tQtJl.:2"OOq> <*Hƕ]BIʸ25vҭ HU +oԓvn<<1҃jMgwWna57}]:o8by(| x8F<܂ox.>tU?Mw鉮8==}~K?;"r[ᄉׁKNiXyyrJ{.Wtb0xzJK9~Jл{y>y||N^09aǏϿ?~~?'`Q ~~}]L|x5?l2H60!d&TUu춇7<^<g+[d?Il;`jf?ӷxOqix8~E߰'?i<}HzNL}0麯qmߜ`*؄ӄai_4L&F0}:.!pQoՅV`,E|OOYAAPIPyyL$#]|~}`BV:0Xtw^~髮#oӅ !}~ ?+T d]Np$N}tXQơ[ACvѺ8^SIfxI&YӍ8w~ɨ;p<]K }jr=|q:_N<Cq-a5}Nؔm&M%u+/ҹWMoڑ;dgzN"Y˓]|z  &<^R:^~>Ȼ~R ?,cN~2>'d #럄C=ס1j.H[X32.L̗> դ3p%y'ˆֺ Qcbā9f$HXn])+;,t-1n?(W[ 1q ۗW NYq"V2]Oȧ@E?<_hXm5Yk"YiISD0P l%n-uBӥ/*YBA!8y_痟B ƺ}O?r w2P~Q$'ck{&2.M0#/<_N]3"F$ta/ڂp٪6ƺ.?l_jn\\8LݶCffWջ;&?ݶSE;B]a&o/_ɡ^_~y%H{'P]7\MXL߈S8._xmdSuQ-%}'p.;'% .W'-< OVdr7)L.}<lº~|rDY7;B[K-(R1_m#QpׇPH6lJ|` 9# =pP,A`2"EڀOD{ jmW_7?;a]pR=E<8RlW;dSXjVv\@ sKQ6f{%KQir en̽)%V'b#U)Gn剓!}uŝ)sn|sF']'^.8tMB`'a2LjeUI= t[ _tR+~~'.u}Q__/D:#7XKq;@yȣk ״FnvNl֍nWheKm5-)-)b,ܰaR\.', ߕ=B׫+&3^:lνOqJЕCbw[W$d#+ZNWT SؙQt-䃕 ~`eOeaB<AsJ_T{{>Da>~ū7ZFY! wP612?S@O jWFp(ݸ"nt:ݏe70KvPZLbU!P[^'^rׇBFT!BV(+HP`˥V 'L:ԍaqVV(Vm8<\S׹(NU_-C} ]7R`H~UR!z?Eײ{T.՛u% Iu$%#N>XK1d'$ 7ya;Gv۶}JmQl$a:!XNP3!׿7,6ڇt8ۻ$zE.W?R=66JK˵iNzVZ&l$JCw$cP2# ɾ% &,\nSW Pu((y;uzmi(S"|3ՖS?YMn"@y7mRsEI}JAvV~x)^:Ґt$٧ddJ 0E $d}\e ^'8%.$"C1_^ HARvAP' /*p7YS~06O$=n j]C%U'dXe;(ꐜ~}U9cn&M(=cbJ".)`ٸꐂz!ӡ8$SH*\m8u'ꑼ''㣺!_N? Y?$C`PQ/Cȃ2@7F\`Srv&t9Q膍(K$:GP!vi҃:r!^oMuNc87Ш`jqmwk*NoZ@ip<ݖå!uo )IA0|"F#!~"H -@ǀ;bU8!;NC%E"tS7`RJAJn̕ O~2'UtgȀ0M.>$7?m)+yr+Ӧ;4G 5e=vn" iz2}[:#+) (HlK'U{@Z0pg&CـB16J{f9L.\lRߩ$C6݅*+( )ܵ#׭톪69cB{@$6hX ?g3U%}( K_hD9Y 1e'esB;j޶UHGtb#*.HU0 G&CC(l(0ʇ4UUʃ}PzsA-f'V/8g^$+.ӥ" ;%2l0e#U 3Sx.jKO$.l-{'l ݽ^:2קd襯3#OȜPdZR\\n#sl<~\>Y\IŅIs6{᷉d0AәL%)wԞU'ibrKF QUi: AWP͐I &VYBy[ pnp|FNׇSTs8P9 v1VD=v!!OEwV7Nj/ `?]5FV)R$T{8@%"{mW9}ҧ+dwD^}af$}_,wLbLJT;)]Sicg[ϗ=jRfLΊoOSDIWEXt|X0q(8/nIՈMaӱ_SKxi36)GgYሗv K0xy! 5锋<ܼ!0rSeliҿtϫ9k %URHş~wȆ"K>Xg3*?ĩ u1JH e6R2C˙vf(S^Κʍ{澓١Ei!SKekPm Vhi1{є{h'R?yåQP n>TS[88)š '+88dy] Tv껅ҥ0z#oт?)bLzOMz)/OP=9&)yxRAx00L_Ĉy.Ma^TIY˕KhIomWȸp|eB]{M8g$ GHqT *k*Ϥ#D / S_9pa^ؙ:Sݱq (uwN)mЦ Bq 8:AFSd`(Z6w Jzu ʝ~ ;o2q$NS<<\"yILp2 !mem>iLOd$'KSk^H3dDHXΜt@.-ORb_G=fEJ2a*˝|](%NzV0 KPRJru%D~|~?ܽs0ٿ?yH<ۜ6kݜ}2~i5)ʖ V T/wC+ZN1HCw#:ʾ[`ȵ+&-;N'"ʆ[CnEAtY y0x 5)h8u.ǐނPE!fBr7FiU j*9ZEݓ0v7ZYeTN+*k$k/R:<(\JAJ2/9 czX r2jWB.AneO4:rّM'\zŁ)t@ɃoEBG. tH2 :RX0H= 89qK&7A.:Hӑ7vѐ)%zqNrwCj~Rrrd |5eRvJ\ngxd>%yx pHS6 +4m`nD > NS ҏ3I"@ARd_> )ts<=L#ʫlhkvΔ( c|#MW~ڙk$2iE} 6]ڗ"cVm3[X@x! I-HV0u.F\% iؙ0ފ9؆GN&G(2FTo_['MUQa+nn,;57q%'J ': mkrO VL,Q#+NN$nj)),jLfMwNZ($MMJgdr }V=]lD?r1lu\i4JS}+opװɌ=(ǰZm6l$306b,jhd6PS #9W<65*٪ǔ1F°R4a}:w} |vQ$o3vW.GJS$eTTJ b(< aVr<LI2j~L/W"p7$d o#x;6~4!77Ǐn._И;mmh3v?5gU'] Ӻ*S!8&>f#rY vdyʷv1u"'Mg4糄Gf[M|D+y,3X Ww=0Q} (M0LR EO%^ljiVJ[i|`%phu>zPa|Y<2 Č MwT^،"u7'B?BQU8^Y혶0l{zԜ߰z_S|,"3ΪÕDAv~2ۭt0/\I?1,pq/do2>YI=Ȥ%ɨTV 5:B^5Qc2* 7ga}-GQKiqɈ-Ńk.2\dhB{#={7X+QL+mdc` ǎSZ oP 7)GDihl>WRq=p.N$ᤓA!J@D;AkNOt@(4dE>f.0~/(Is)Tܧ^ WDy &_'xAĂs恃&ݚ/ B:E9=.ZxQ6&3HgEϻ2uN_||o#B!CZFeLIeTiʘ99林d3zT&H0+5֥"3`(Z2d$4> }$ eFĄvVFxZ4y3>kH15bfySWhqb 0m9oNKD?:R꩸j5|0'9ٙ΁r}zOX„r)y:Q2e&'c.2b\Oa8̢0;0;2Bo"C~>"gLR IVe)9S %aP MA(X"a yi2z*(C&9كC87F&f㌺!'aLJ^(Gzb)jJ@ Awѧm[E^X{ar$_\F0&Ϫ;IƔBp\z\՗v{ybU#q0c{ 3dQ"@[ .8hZ:\ 0h@)WQ80ep?8~  4Jo& 6ΓKjx|G^rwI4iaf[WEhCAjFPYʔJ6=aj0Ml.ak.ً~_r3 Bc!,hcCG3 RiDGaɥ!XqL)p;mVUI6bqH"ݽeo߬!?1@WF7 ÑH5ɓPVhv;!S"ߚNYNbλOWdg9 `V t+b46'KP<Ǻ4k2\摸9Fb ~e\+<HySbB՗dsmi\ك@4afoiݤW/E\=) YIޞ7G k7fz narIp-ꪻR '@z]Acm\S#0N''9oeZǵ4o)C%dX:09d,ܰ] 2#8UE6zv)Ch΁-#(VV!QFQFsO"M&&|ݛ;CC1`>܄>p-HBNx?lqMg-" \R!4\87vFf墍N\>u\DF"~0|N;aP"ED4ʭ`3xML&C[VLJ,AItF}6A{tw#u@`;Re"3eUa$pQ_ܙVJ]EJ\A"Q(u%-NoaZݸ]SqA-zW2+ -KAlZ:Sx'þm$Kw׽(sLE:,w$,]V,9[s[s[: ÜwH4aĂ[tgL6n1X~)a\.",@{jf H]@#PTVB1___='|}%@| j  萳r7l_Yi҄<+ 'lr7H<^$]ZrhwHKTa4IL5&"ĵ@mwM0&W|'(:`hkk03(|A0iS-#K\Fq~6WL!rZz uc]B䴙MuU,4zyua<+R!0uvoeuVKEKBFr obDşK~͢1Hs}$&<Xܛk64iE93 ؚF^tEMbxNPwuPA~82C[*1}'m }G 7Lnpj#p6vDo?(~LR+O5N+bpSE'NB#J>ak0"Yժ%`L0]M3iI\_{#bj?%D_QA|?)m} K]hz'WI o$,II6Ou{7TrgM ו3؂Gz*DqbB  eZP,Ԭ})C^=wE}b@-,#Ͷ*J#ݺrf$' J0 st9GS}zKw8AVKY228dꅹ R*7|U 5UtODM&wGAY W6>e@$_7!kHx9ߦ{( ,uZ&e8KPRPH{oʬ?j#љN1g 9dhY\-P=ŔdSGwq4nD) :_A`2oy>ɰbM[#(0s*tَ3QkL ;A;p[sؖuS!\}^ASa|)|\]&H>Rc!U+֍רC(,wa4h]`sϖ"wc9=Y\M{&͐or$f$6+C34~:gM-{ՈXlƽ#݆VjG#LGS[*+{ZסOML+[V=YVQ' $^ fjCz1 D!zr5֭^_] _RwKT|Cw`IKh`;vj";H <&9_La0:Fsz.8 GApէPVh :+n9TyOL`n%f1zڈ mQsMM0X]U VTl_W" t%S@xsD_+7} -iVE=*.CsQ7do:,W%եjL31I ~'`աXّ=z4D~+R<Í[`xħ+t8b eD 42=f^X0)oRp 5qA`bWW*l̻VzAC^<;dkᜦ*u\pr'(xy9Gp{~3 Y #B uGBh^ށ}?%a\|AAYrƖ~8dҭܯ%rR!b[ 7;tĵ DɊB/64&DzBS4?,h:oM9$jy-`rN-7%g+">6$Pȣ,4!m6 {BIҳ)p0*M%T.<'hU F`u3,sl<񍭃p6f1砆pp+ |`\qu[E$2A^ؠ5uj"o $ 1>rUg7q"a>e[]⻫EɪT[N,areCeDǂXV2.P]Tqݼ~e`BgsX6i AicL/Ħ׮{lNKQ7tLbf`3n up mef+x$&ME8 >5P6n#|3Jpe%2uiQv‹Gny6Xh?pp鬲%JaȚ;+(s(A g^} XӪx$υsCORA,3t}DN[vT\ZI.ҡh^As\/3rD$JscnDF./"YD ?ħP̜ \6n촙yE'>KTۡ#@%B*D5nO?ʽfIT)rF8~G>ۼ덇I!D̀ A'B kjw0k M5 @%/q=Bl߂Z&p4h\墴:o`ˈ^R,xƪzwp /y"1Z?B\JZ#M/[S)y^:^{1\2s-<Ur¥ LmMh]Ξ8`yƈ"*g3deV^Anݻ ?D8cX@RJ͸H!P=܆sBi#w8@9?YS#)h??Sjt+[NYJ*[V0%* 3i0Pog`Kd~ckod+*1NcvI&XTMkx]WvmaPfߞE^ɉy%Lz&ט5vS IDAT!"0Ibi9Mu@qZrzfh|+dd=ҧp«N~cz[Fl [Qj_K*DMnN▥ F{ݜiH̊yra9ٽE#MX|3ھH).b3У̃MPsX0`^L-(Tc-hF,&7bw}P Ք9NIMG8aH[4f=o5ikGxK3%ھ':\{yh}LxA;Pv/x) ~D#tΟ598 s+J 9nA[̙ YQDXv+~V=`7saz5ֲ̂Pk){KYz Kb}ќ#zt BpcX nFF90 oNjnֹUb4Q$HX2OӯvQ CYrܒWBB$Hor$)Y{6|BO CjQe ̮ђ %0Sty~]I^p9]Ŋ4ZW/q}p-Ƀİ0TS56*I(2)ǘbi38^optWuBK$ &bU?FO*=ŴCCk`10B/Va#_PX>IBY+kyÜ%cpIqg")F(77,s{LbyMF.ĽttUɲp-ۊQ|3TGkBؚg:ӟZf[D RDiUaO:f)f$ssBxHrEq+*9(>ȅ;kMw{zUm#im{[ N/hQ-bf:|J4#0FWG$(=8P} Yq^{+쩜:]CM4>TzՉÓ C44_jy/G}By┱aeY[݈\D5+!/BC$؏[Н! @1jBTPQ`-Iz%!89sB) *UυPma ?ϫ#FEGjQe#t צ_q YAgL5a`zD1|y6%LV*/MyWg^G0ۛ>jo4 (\ w (% c'M3f礧-ӎ59 U2h{L~(mi ȵBTq~B&qo燕Eʂ%b FP‚ 36#&1gzH7B҅tzݳur]b=:QP xetż* U!v2N*3FD{3:6}*A\3׏lL ;oyW 5(˻tPr/!y&)%%VSM"qӉMh@f ?hВӲ%GaY 7#k2 J󙙓 m['Dbɛغb𑒏1bqVVˆqd ~`PϢ=x)Ru:xPP \-sb>wsrBDC"rfi!G#E{A&cH <4>f>"^ 8O =sa*VLʂn6&@tȫ.AA`fZcY| J VP2Bt&MEذ ކ4F $Xtz< IV| 5Q(TFyrLy jx&qAfimw! 3+"=9z(4{fyVұ[n) 2\H82N6y,`!AP@nWO3KL8"@k>&{}&_,e%Qx$'[DX\jyu+.5!ؘf1JdyJen* lX%Aw'kkj%:՘0NwP:47ޘ#&ӈf4!I؝(fd87o?/Ѣ(BIB(<ݛ@ 42dY+7F(jF !ȕ?BK.kO 5(SQK >C&ʇz2a46ͲJK7+-εD.v=<$&{Qr>Uz4y4Ց؍/l s 3l~0 0^=lv׶B)8z۴3?ۭǖj'oD̆pW(ACia:B{{]$33rX/[޿t5^Hr`Q9ad`9hTȧ>(-Y^2[r(yR Jj; -C=z`ZJ H>ƚXa_z×c6rSr~G7f7"1Ѷ~h[MaZ?iq%@ImZ۬R3ge[ihdN`j` -p].и?l 0#F}lt. PBY3 "dSBϱ0.7RWQ ԂW2#U` xc W0=d4NdX9nIҎΖzhxN-ZE<(0B,aɋr8U)0Fft䦜gmf1E(,(?1ɷ[ڴ diz31ЁY; M) (?:]g | SU͑]K+eYW+4 M [L-^uo3=31 b5"^zNϣVcҧȀ)j~PIK(K`B#AY(YnS\\6qc 9d8CvMT4{TVN1!ثPP\siUW-4ج-Y~opI6v'}} 琖?mdLG]ZnU-콈91Dq5ݾ{ZLpޙ[Z%Jl} r]1s,aNWD9 0[xesG:d8L1ˇ`y bn7s׬?ܿpE;۸  Cx@,3nX j#gyZv;=',`ȓIW'N)Irod0(C_ + {tA$ݮICB 1TcˑJJ5ߜӔ:ƛLq͵l䂀?/A#8DˉnE4tWӶ#jlQh`Ż}O%'5]z4?\TH zsu̠Y[_{VB8{z_$G#enO,c8fΪdR/P2%Q Ęg <@UpFEZ-Zp*Lb"*cO"N΃]M J҅f`tPaLLb ?PSz{JGo=m4aTGBn]ǾT2%U@ư  %C bP'&H4㈯PjeK 1Ƙ2Yh=??Nu\yPzZoGp.!^] &ۀRX#@4[a%D!:ZK%*aL*(h.pyJ~CNqw}8EQNN-+u٣b}`ۢB@4&=r<5sm꿝26!ږ5 }<4V7djBv׮JT,:fbt} \wJCBȁAК{>Z1.F`,2gp-;Ɯ2hei4ИuN],s?!!i@'~ynRfcHΤs=2,֖ǻ# T-5 Am XŎ?M2 qmo%QP\+6*9!0M1WL>^#L?4T:0;GWwlTWWHR((fm4Hr٨dƱM`$" Zr%}8&SBRJ?l*TRc2 v1ʦ+4 G:"4<8S 㓓֚_+ AN8' C ;6y槆tT;XK;$O$: KYZDe~BFK$LT`(Zd&U> UoHrВ+Go. ZS6Bg%q[a.&U2Y@py|a s@6{ѡLgkS zTPXEV7&ju6p҇9oh"0>cŖrhW.5OD"?'?1#J|rZwkyȞtXemhKT 8M ١W<: 9T&!Kydg HYsQL!xq~D^"SE&{[le̖ͮo9y0՝a&:ê QV 1"ol v47DԜ3Y@J-FAܼ3..3u~ UyLd{5:nP/ӍJ4 #Z}֐WQqiƉzn &OugC\2IjZ'5JQͩ/J;kB>ᢍfT(T3Lhhw:}Tu_cJ\P; 0dx)pυ;DqMVgKWd ^n? m:sFNUz'EҚ궁l[sf2VPD}HiՍL uc.[lsWlAr_OU.Q\ LE`,V/ώnB[)Uu?}M;RљL7ONLTHR4h``Q;ZV֐J$h{6I$RxYk1\Uw94,H/ܱm_k f7l FUzyBӥ9 F_Kv8$lQeN{  2IT)I" 1v]%RVfk|xAJ4*樎o9bQ7󴲘̡t)FOT7M#d'ղYF:ֈ&`c)< )#S[Sbn?Gxy遀5b0.n"cm&vDypimi z4`Dl }ǥf 4Pٻ)Pn42q+<7uGpmkEc rPn=8-dȣ,T]|&Ef]&4>vP0_H 0h;x`]j.T{nB1,ճ!(#XSsSUm,/:R{߉u赈!rQX+mpcfhmu8ЏL,ys*]HJ\'OOŐHc^U6kBZjE7}uA_bm 0uF ui\ûW> &vU Hoٞˁv= K| ];Q͎)0mGr|cHcB $`zBq0X<37b;9+OZK "dZk ',&_Kt-|rp<`1+FYGԹ}h=JR,ȝUeb]l1.C9ke-b]#Ф u7Tfbʼ^W[wh .ǹ>xGd$2vjs2c4da~@l ڱA`RTI#Q&Ë}{{p˖Lr5Pܳfo>VAbQ]Ƿf+ %cTE{駛[ "&Y+Msד⊂X7 UdPIp~9. 3r6{7yk[hsv]عt`Dv+pG"~\BY?Oj2)[Q(ZS""d%T'βo-j;}3"4XE|Hٶ;/xU5m'1\Zv9{{ y H.Y=J006΂jO?9 J-AR/ QOF5hآT"&)EδC?ie^:R3a `С>چ{2_h/9A xȵ5u v0A\0fҨ!p-{aضIvo#ȌД4a(x,C 1 gD.Do1`K:6dqD27ڱ !V`kjl YAg|.&- ZG/oIɄ.x& c,؅%G TXura m1mMհܗ|֏f2bhı<{l zo,,H\U˛ ,[?رW+C~O"[h|x1(ulGMy3jSv,KƎkKj̬%UXϙ2ً>[|byj\[d_ tIjB2ae2W߈^I fƓ5phcA+WU.]m,!~ h@UhOJ$%Dln{y4kfzWv|>՘&{~Yc눆y.bpƢݎcl,Z܀;/cњ Xҽ'1Xb[#}d"McL#e3G¼i%*Z[B}Ki>"x` AY?} {![ -ֶs)MDᑇp`ӌР8-͢?ewmdm R מM9;͂2POD=nL6ȁhUεhzhwَn mM6,yQ V7{W, ++tpw&̯Q)ʋ1!⅚e;Jn z['Gj0_F\ǒX֥6 ?^Bo_ˤ&QnB<`PlWU}^]^6<Գô@} mw+C\?NX}iBVRaFXpVI8dHvqz`eVC9xt!BbyNAr̟.?ʻh viZt̗ђGQgY%-PFK2OlctZ fd-`=mmMH9bSw`ZEa|E9O+]-eO<:%@:!˔Ќ`Mh2=*VlעCKm\Y5XֵFYDx܆2d=2v0nQYJy8":2I94 C IDAT'^=$X<m@aM[PX턷KB8rPLiƾv IТ] )C1=oYJRm"ܲnLnBݎ)Zߓނn a{l`Gɇ5zO|pѩbe4TlExgMi\fJԢb (Rj/{7Yb>Xm{++yqUTOyV:X P!b'o߲+r5 Q̱gEY0(b%ZPzilrOelʃC0b ӈ\,XޗSkMyyP&(hd>uT3Y*%K\F>zp&8DRJhyq|'gڗ{-(_:1y*YwrF’o pnYD! .vOӋAg02"@TOY@ql|C=i7\c#UvC1T pfSssXC>PI"̓:֪!81tȀy{Z&FLQ%ج>܍h6b22 lthJJ*z4 hW]L^.`QpOJH\,0=0]\ {`vyH.ñkSTYWɻ 8,Y.𑗑MX>}17]\xCY6{-<} Zۺˬ"YgmJϑB 8VH6=s?c/,Sxw) 3~b)6SOa)3ΉM.IKܩeQw,-&L/2f_].3u8$W"N#LD*[]蘁xmnIL*xAN&A#.GZ_{'I'4mvYk_A5g>Z&grOAf\jY^6$Sz=QZڤ7tu+գ1N]Wt abMU 2 uUxH,3܎; BjSo.,D/dfb QLjA*ކvjDNK-}3#g'kyu}՘5j41U),+ejͷl^McѨN*1;۫wVR ~ن$΅V'. _1ϩh Rcqfs"J9rpԱz*нAˋ#x4Vn!>͌@68f֗o"Dx&I`%L#K& 7ɭ 8@5eQh4R6"Y&FelD RjYJucRў+3ʂooX f)7W`P KazNk PSo.X="!z> Sql(1&݁ޠ?WkrtP%n:zh%//YVPYyvBh͒a"(xfIHR΅ vΗGy2c}x)2`iݿ??F0Q9Yq:eF^rqb磙]'JEzECIt njV,kX8m$ xvU2^ fwImE+t=4b3N8q˭TelVF-m):ðdcGY;^sF?Bhjip\Dw4Ih\Ȯ,cmz3;^𢏔/EDs $kJ7|p$ \}ԥahi1.Oz %"1Oۮ=XYJ7gyTQD=x;ðd> }P\b%iy%X,DuBy3E A /:VLżg$Y,+fnSM-p=`FP A#!bq3X1lѠӝ չmьRa!^\0q͠]ŒŪTm795^Y`g7|`1a? -ubQ ׬פb" A*ZK7l5T.tD1J=WkXw5bk\VT)fV02?;/f C\JKPbWx}1a@ec }#$*mdv q. eQ[is"D:-lN-]i(KƺD+;F8VPEi'XWf^cQX@B,YͷӜ.ru?*&206n*܀|LI(VQ&*<\V#L# MCkؚٞ;|G\)D%3#?8hcz+-@IU\" yy0t7]i!}mr9eh_)cUɝcAGscs}J) ʩQd$Y!vRm2`ze6\{X}EtKW3%D,("!v,|*_? B%fKTJs +\^zHݵづLX%rSi<|})Q:aiȼ:fM@"=e>θ^GjRYr$玲ߝdta8mFVUTi2hBC&H'#r27L# R8Ȁ z\9rt2% 6.rƸ բ6s7<HJU&xD{Ѳt`ɂmL4iMb 2((cj.y¶k³B,jjiEMzEO{bMUlC+TbFR~TsH)}ˬ7+RIٷ/=//Eůⰺ(ޅӈRX)Gzp33y1fLě2=fDlyGǼ79>pLxAJ>H};斎^(#z@*|Ru,Ζ%w VeD}9_oYzPjid盔$\9IEjWYmVBH,Pz,!f hTp vH<\m1 3~ ΕWyL~i˪"9AP${ QC), kfv`0T0DF̦z,˫)÷먤[zWHBeVkCp!#SfJW)Nd -㶲9{ĝ38f.6 ͺl<-ĹDS#XSb[|6K֮Hve[ T@ B_X aU1[Tܳ_ŭZpm!S)Sbeƽ z8B&霘e`g9J2Ay [JF ZȂ;uK& 1#)f(~G"DΖyJ1Leo_٬XG}/hMwtx!pCGJd.7Q.岠2i(31ɏR8: E1T ߒica?#ԛ ]t~cܡ&j[7a*:%JST 8VP N%V\r>!ukBڑ@x趏{LU |F6Rڿ~+z.f=zL{yQrV2/dtZ~9=^iDK8}CmeMk4-Jt;sv,bVA!FT^EA&+4Z%َU^aH՗?繗f81W glwhN|yf;RͥC6[ſ:\V*<9: UR7B(\G^E B]Xfϋe_ǹz|cy'LG(f!<&u[LM=ĚN1=F] vPQ:7iYצ`618_dd*!hIZuIOtN E\M zukbJuCq1kQQȋm]Mkf9&(+.FE9}K.J(^P8dDaЯ9Y>,[{~~D~G/f5A5ە5q58N3cT]Z= u5x'XޙD)zYro5˅7Փn:Iy;-Ea.5_,Bd`Cݹ#_Ӣp2)!Vi %{VgbR$U.4G_u`|=vG㵂};^)m n-v]"eli x(/@ Mw/y©9v RUzb"J g]y!Z{ʟA5u+(d¹9u=Wv{읂 ԟq$LԤ' ZLkY6ʞ&yvtEv>KtĞm >EM=9M215社oAK~$m{Ѵ7;UY^%y#Km6k`I^GiU @h]/BXͽ{m0>iBk_6;R6 8hQ8R3x86V9Sħ ϕC#2ZB/ʨA(AXn/k{ZH>&)n,?8s=w'gUS;(2Wr{.AfmEnCEhtu,{kB踭s|brO5.۪/8@՘O|#a&E-`x4?c%R~:ߜ 50O"6]v8C3pNs[bfdcgydt!^G$LQ6&u";7*17Lŧ|>_5qDԽ>owvT,HÜiO}Vc>zF H3 LW|DYu Ol9nKMjh8c-:eb)6*NG!h }fq_NiM5J-A'GZYc Pę&Ԛ> r;l{2ݔW/ĥ({Qp|WP`n`u{;/]Ͼ??~~|V1$[8Ӭge=$P-1$ω@֋/{Mt*Qa/-D= pgI*nI$K<Nj  2QU).^Ep1H]Hٞ6l:QH PJow .;5GPtMF]*\e:pOR˸ղa2Cim8o`f޺_M G} AVSO'9{:Ԋ&=6%A$9#VH_VO#Mhzf QZ._Gc}CGBބ`{SFߨp='bBM j^.[pF]dHD^Ej|h 7cHa60PtQ  % q;/B 4 x6\Kڗ/ kB7>|DK ڏc0О7`cv?(,,vv΋0EX\Pm۬lN BT)§9=|1VOUa"-e#Q/>85@trjU K&ll ֋\p eF$Ȣga,e>*:f@6ˏL4vĨ~e@?_e_[!A( *ˈ^fmk=2smJgQ'm3|Z5u:#\8ҁw.fS(M1Y=dV8N ҏ-ɧ-ۜD:},t2Ål5Ckx>'yɡ|bp? P"[r-XH̽\Q26bH ak;iZ]kr¿$Q;FXqkks4FXly@0P福e1hYd^z\ zAOG&7=u0851S)CE (:|i𢩼~gݴ>>>R"cxN{+/YLbn !Jm_Y9ںCvP{1`3 E|Sz;N9Xz\N ~NY$6*Gaa誺{ 0ta队S2*U) P0 !41~k_u%~ D,?elC9G&l 7&[/WpE+;E uTޚLze^A?nxq40ьM)pzZגCym??] jE6|_ܜ,CtkgSm-d,CAIGq*MzGXBk|]6tXxoU5َ( MKB,,V^T7C6mlB5p!Ȁ?mTwk[ 46a&g]Y&,N]J&>-,*5PF[, v-Vj G'" L܆+KO,8S"2#P3-pTiSC0F"{s5KcaeOhN zgm쐿65Ov?jQCwi9dHʪS-ԍd4+0Dҁ4~[txoiGpd-0Jvj9YpQw0N67;YX8[QN|OjBɟvk3}V;\L"L8e$} Sޏm~l67vFuͧ~}$0O&Bˉ/_Bp/K{VO_<\ZHJz/[tK.If[} -@6!B- sM s$~ RDz36:1gar Blowz[$>j d2phGChAW}sƜ/[NW<0h"Xl4Ⱥ 8|2ʡv{h Si27+Qh#eFHP9BT?'(}ƐgnB %|\ũ.!KH?^!^MbO? M׼иxjmLKrd5=xV]ob*Wۅ .kgtq:F o]#rDxQ|ҚoA7Ҙ/.Yúk~s|.j_w7f&EH_ۄ+7Upߛ)Hm*&/1[KֲId:DSs?mU% /_c9}tm ?[mQ> SQ^Q".3:.4j3Gl;O : ]HT ٌ.bVmQ/Ls:lBo3H vn؏j1Q~N*u/lLdB<B2F9x8- Mi׹HK]Ħ#o\1ں2늘^H:pD-0&.G !VX VҪ-w0x;XC>;(P|bw會iVƅHEFP,.0*G/|5ԓt}I{`%y2+ST!6n$+,̨ [V}aW M쳹%(~b.le6ШU%K ^*YGP3a/UeDc-$.e8y}5p9(Lj>f ruc1*ֆܧjljAAbGgf.Cl$vWrX_T҈c1z$Hm8Z~:+he;;5~\KFy_b6?~: KlZOdN Ls ʉвp]4hɭzҥ yp5_ۗV #Y},.h FM}<a_vbވT58qQ'로ue3/!ș7;k5<fn)O$% EmjJnO+{NkӤҍzpymD)Dl9  bNA>e+X_+e:BÚWpq+ӎuU60‘,=M ^_6Bd1&H 430B㈏5$FWbe2<'G܁g@Kn-·۞AsCwr8M7MŬѧy8/̓(?M23ri:k{#Co)P'qI-I8Dkago>j5G4T(-u}RHe#UVh${o~m]uyY> ꩇe7mK@Գ!Z $244F2M6[ dJ9 {16 Μߊ,62qa7]k⌤![rpڦ0fF !r3im,b6-Lǟ'{# Fdba[rCPlCaD O>ڛz[{GraU-HmRU]V(Rmr_4d2vVa CHy6oH{XH__Gf >ڛg_|ou2.ZT?hPĵm mZ3,PD>u~EC77]{rʟ /3E|Lwp<-0A7QetT >?Y.%|4H"rЪ#};\\yM3]_\ԦO/?2[ҧ݁( şll8ӁLX ΉAڴ28Bn8y%_@ HHԏ-%tv{s>믾Xg_vL^S#%hLԕ~Yfoǚ^UM'6fzd4?/mHf!r5Й[Z_$"IGx|| G=̠_s4A6ۋVˢq`Uu4=  jgK{/Kc7ǧ_a~/tOj^`l!_ [ )huvtkW:Q!A;f#0 {}P~1a“m pȿ ltrG?X(_ޚw9#/^Ǿz_RHMMU>% Bq*D a:贱 IcrB4i?( 1zSWĂ}3l5&cF(LDzU!$(m潱 M^Tr C1yҼɺVgz~p~>ܻ4I 1voNAyZ qW]mXk\ZSl9v\1_ާ ǘ,"O_/6=ݣ+Y>)`̱FS Պ,K~-^"w6Λ듨tuZ'հP(#.@Ȧ E#LH5-INChwx;8@-m@lHyJe] pB DPgӈB$y0IJ]xd (5d%@t#7gP "taSJC\]/|׼&M1wkoZoz UXr{/L(4[`i-׫SdbУ 5D|,jl`8Hźa&*w}y& \O}%A8 S4pieN%sJĨ0u{Fm}q?Z3k 97& Iltt-z:սpQ\~ݮmnlp+8BuTta~O5Qkeņ^&N|99CIwl)LHiuI:0S.l"N K!0jDLջ6@\F,$id{g כ* r7W ó-IEr0'mcCH8/|H" v^;>R3OGS/WVjG _2F)7B*b?F{KEdnUZ12#cMlRf;EEs4W1`tfXR{{"Qk% X\[ ",оj/,|cJ6"ֶ5_j14<67pB*7/[Y[Lc aj>DWC_́op£XrE?J^e5=ZtO MG3VFχ ELyEByoȳ) xG'P>ҿ[8AB"3vB&kyyWZf)(ѶDZgna5GY^?#Lt_Yu,/@o;3 @K8ܥ=E#Kݼ~pwui,l(}7Jڀ'ƺYM!zLjFmd" A4Q Ӌ[+rI+mZ[0B o)xؘ&𡭥<"!)#*E*s\*Ȅq[exN1BiM'BTUvFcb^m197)W~3 j,l9GۋngH~S|sOغ.tyUQ7ȂpiBPY^HKZFU1KC[1?_l/qj]rXyfRamz6FO2$CZق(-`"4 ahBAǾ*ovHG&S WSsݽt7q[B1ą5[&9 O$nI~I{#^{UTd섭T~e &WllˬcVgOWSd!Z4+ S}<"s%l:^er>" EZ'DE:V2u=>>KVt_5k dak8Ap[Bv?Klb( =UchA5?]TQE_J;(ݳ}56;E4L_Sp4=]i,Ά:)[M{`_Qk7.#G `-iݢ#6v,!eYDzBV$:Z`{:Zn}`嗝L6F̜ͮrڤZ)PVG2^ .Ƹ4j?s nABGrjmh>뤢{aܟ?=Xh8R2z;>[5f3{\ŌI°SZ|F@j'`lGIR k+bH | "lr7x͕!IғS ^?nK(J+S6h4 ^ KS˾8~ E& MVjɵƒbk[W<:H\]L4z/MF/*Q)LTi@Mf7=.09M0 nNY.0gKn5/7h"D*a';JwFҪ*0'K苆nPr-,a,XqHtF"\zUYu~^>} /JF2/ kqTJt !=9aؗz:F-:DrYr Njiט޿K86ٿ~1ۺNXRHPb;%}<eXquxm | -tӑRPEh%0h؉v 23{1J հm᠓O ,S%l"cKXg*镽m (>W8a6)~EܖV׭ࣇ r ©tZƈI#=]?v5Ee%,ir k&uOm0gQ&E MV|- g*a# &{%E;Ԣ/p5\<>Up_PVF&&[f.khU`usX͐v +Z!;% " |{)y>6M ƞ_X""){"{|׉@#:k"*ڢmkI?_G?,I@vP;h"hj>[Gx1ZIa@z58 Aecj䯝Up,E ge,vYS> S'@b ;%Ev;y_i-Ok UIOi Iʝ,x/&>-3oyjeY$ 5m"yVux8.!x~ؼ4ȕY sͷ,; ne(҄ <${i\5pG-b_?/hxpFMS0I2_"=Ԧm386=<)@+.]Mjo߯T{5z_(϶jش=8tx3#[,uT|78P ~ $i>D T?Krq+I!LĢYD<H^(O=H#,[zT:A`Я;\f&'j (;DqVl3 Ƀmtkq>tB*vyJm s'6pG:YgK$Wf  IDATZ@3k#MK}(|`isivnԃ`5 @PÓs7 n33͏^NԳ>=)2H:5 X| [6jWڴb7 l} pg#u3񚾩s?h4vҤfF{-ϑE /3~ 0jWd>v`F,}n: $;dTuHe5S]lɪcJ]_.+o8)Y@FOB .WQNmec AWxvѹj?L"w@ cI'Dhcvuni`j/VNٜ}Ct%V0>Wؼ_46)߇M Z)W<>LקĹdPweGJ!asо67\bȭaqk}3]v\0EI%yL5P-p}` XA+[)lKa|5S>KA~B0D,E~˖{f񘳤z9H6gVI МSD|hA#]r]gZ)˞L=%Ag;gsɠ[C4Ƽh?&I0 #i50·8ɦv&SjzGob5CN{D5ˠGԊ(ik2$9a 7+ rmCbPt}9ǿ?aMٯ6 2]#C._l2Ѿ֞?zs"`Zz*=Yr aZ4bb3BUcJksٹWDpH:"uhoS{MQX*{Be&Hagk¶s0Ybݮש+0{[s{y;"~0V-ؼ04Ay)A[Z3N<@>kց1i4s0^@lsNē=̱I 'l=gUwȶlO)rS+uzT{lǤe-~dm0~,[ 97]v3#a ʁ@x0?Z|[30U 泶!=OeFjUlBg,g,n u,VdCTShNbbؼܛ}rr^j#՗Q45xEi,g< gB HAb_b7~L,b{VӦrz?҂ƜNuǸ:w>s' ,8e;eY v9ylLgƮ6d@d}Qh\Fk6AٺHO KژfF I ΠZC|#.\~q {=oM鋂Pn1iB@t>fvHzvWx} M'x!__J)fn>Zy˃7!@ ˸!vjFaoK/Èᵘ'0CI/cV= fH.,ק,nfXt VFaj4)xc\]n: BNUD^%/ٌ_׻6q1,b{<b q四nJr=@ֹ.*2;L%Piby-h;8zz>38 u,F]/`&$|'*:Ɇ]baD¦l oΑg,HDp4pPۭu1`s 2ڴԥfx+]&j{!b6}A':+%_6Dj/WQ*z'jJ.T8!I7NUnm :G$&ZחJz Ⱦ^WOeA$W1J9z* qҡ <gtE>fU<%&ޗD-r<4eᄁā^%CU_L*Bfm$ (Uҫ|jjwzoD֔ӻU^zZOS'1 +h#-'FƏq ,ɐw3n&:Eŕ L?‡ݯ_Fxrk~ZyGKIyמ3nYWvRCj,sͶgܧC=R^K[skj!kW_ߓf;ZcҶ_ܠT3uLc i5% ;l*O;X=d0^J姭f:>Sbǎ3fW;=+50‎F , 2]jf1 GpƭIhmpf,HT4YZ2Mڦ\4|aڂEJ"nI {z$s(,|m"' FhQqgK< =ͫ^sރ |0X[oai`S&>*g\n)^QqYFiD#g6r sZ_;L5A]eJ諯Vo(Cإ,L֨^Yˋ%<^Gf"G^bBϞ |@T`wiua:Useɛx< *YT!iX)ZumNBŭr29i BAU"'*̾m6e0kezNIO:\u}(taG;wPаAQ*>;j Sg55E4٩>\,>@1HnPö0 .&ꇔex#2F1l _A}c/y͛QkBd/[tvBXVKmc#$QQE'2L\1\f'sWL% @nwj7* ȡc0?Fndۧſ@,B073Ƨ(YJ,XuŘhͅ6$f8:6|ڛ[Гir`ЌзDϓ,o =ec-`XMɒSr57uWdgaR'3y;N:ӡY;\;&뙰ƍZ'Dip9.jeH/&CaQN$> ?G `M^- y, J'DB(sufy u6p3>҆mEoy@-PRo8蘒B`lg7 ^@VXD`E_XP}i/d;ƮX;c4aS:fNv 4z{]v6zEOo4؞Lv$v',QOr4e_&n5>3o6gw S'ѴSJAz\*LG}yߜ'WD>_ U.! XkHMަ=ը\ƥRO=Gx4w=H@>b]NT Z'lHs'D[Rw[E좛rK4  }*!`q{d)YT><hVerVC]Syv2*1z-ͶZ?R $XF:sƋЂNlE:Np8ws(TN- b-GVVCɉC$r4or楊uPzXf{IylUzl/m؏D0]aUձi~ }-.Y-<2htA^oc f!d)·76 Aڮg18QnA?ťxy>}~~~*M<塇[,Zmn" $)T/ aP'La֤-J34i IDATGci@6z!Su]VyT¨቙ gJ._N ?ϰ &wDIjGmz;@KL_apXH >MۚA@.rc?Qv~?&nUWw2!!E /0 c+A‡YT+#;ΊηOOs'W7(v3xwΨ72L8qahi%:"nPEMYu=)Yc4<~l#6VM.#o+,Cj-G ڮ$RDvWH)šfq;ġ<͘7Ŭɚ-"\Bguݸ:nuC3[x~Cqf^I%&>"GhaYgs-L+n qTV^QeC7 (^M;њUi$VZ ?͕V"Ķ}Vo^DC.]oԱILF?[85o\K}c?Y<63_rSW[λx9ц I C,{5,[2asH8f{ޕ[ |ay~.p@waH6i%I]ydہ@,ʯ!k9Zbw+p8z~g%ϣȠUjン eSh!V߆ ,hŽtG9'ҳfVS=5 g`nIկ8[D/h"k% Ь"2C<.sɂ&YOj[Z{B!77`bȀo >7ӠNIOlWK\fVy&^ [wP+Z[U>rn[ײ֢zm⺭7xD!(VFvkxu8mZU?z}b߰I C1c"TW@] XZVX*oE{r=-bz۬Ŷ{zvoU6SnLZR5,tcdY'CnCyD RlW{ˊЊ)6= c0/OR7\gggɽa'PImsLX cln) cEPȁW6aٵ1Ml@+G)x ExQlBϬDyϤ{ *+DF9I-X_qb]FYn6 7mD`S+OlPJmr H5a<hME]k1(Ax7l]Z5S^[0S(( Dp&׹m/-'uэFK31'|<ۙDaøG^MM.IWL%Orevn Rb8fBE.??qqk~{sXXrgB>I~6LRCx}gz~I{X|3QpG={p_ڔ/H[)|90h`G=FԀZО9&>-et C;[z TbbB0 x6>|LL(8iQH#i"'Y:uƘJ9ik5GNԥUL%Ɉ{,HrDc̺uH!I3DLV$2!'݁ ƂLq(K~{߇\]z`ր/]`#Bsh_T[A7+aF.S#{Y9k- ~!XH3O7 8Ҧhq3/-_@!/(e|Y&F-YZFq3@3 U^cٰ̡AHZOny>1" -3{=$H;XGt.G ߼?:-RE]aEO;;A =D`6 zZ.3~C #X:ݼe|ɟ $O{v=s-BgB-`sb85 7pVHI@"4Ζ1}{ŝ[|4ab g޵ذMj2 MIѼdNF'])Og Frx?Z抸YDgY C qyub%n@_#faېaWqp/Q5D)9#WAN0{޷s³KQSE6gtR&3o-sJ6Ͽq\xZu͆ @GwR- ;Qxbfsގ7GwU!pLjد=m)$ 6jgu]BF-YOEw/t`k)(hRP˰ _ּt7g1l;BX+q[YPq x7F G#c}W2#MuMۆ3!ЮW#kQrK1*eN1;n澧uFUpIus4ra*Won_N+S^f´,Y4ek]F=/$M4,wRO0^l q%Qn#JBܸZu/͠scUbyGA񁍎ny9&1͍'lnP,6iǻ).Ֆ03!&7HGcttlެē׮jE$ŀakK֠hau=iµ]Ӽէ K?!qmdޏmـ\`Ut;)&~B IֆfMa 7'b *[gM;1V̳5_kI3;+EV.Pٙ;U0an 8V/",,%g* HDP-]Vs7ؙCȦĜ~AGn+Ԗ^47ut:Nޫ2 ׁH8s{: Е۱np O/; `@_\w@Uɷ Wѱǖ \r9+x*]GMae$f\Z.,ZM=1^J?P9 FB>"}D RJ̘!Mϧal }jQ.vM;%Y)`b̢2L&s{A 8cu^[45 Mz8}~Ȱɖ$7>۪ufsu[5ʵvCPTX4I,cbsi笹]wcX4tR\?xDd;24=Lq¯լ7ϭD/}7MԫBdg8%S9Σ+ϗYrF,F^&VO]lS{N5'lXuy/\|ڍcqkhMO:~iտ~hsg¦r.YC2{'b#-6Zü{iKnO+˒#QY*xi8p oE^w Ͽl[fWTpKb`gP)b1dX>gS!:eE⾴[tTj۞K"B$Nh<1uK[ y7ymlSn\, 6֥x&,}YazUi~oL#쁉aec$b gj8!9 *FW~ $pg֟"j*ZKTn%c(X5@v){@\,jNPU[\'hA[y xlC>`OV8zK;[?u}@eVT&Jh}YTtQoS=1EXm0D;ipk@qW,h2:4Rj\ya -a46071Q{2f'@n 욧ҹ|Ֆiu]w[hG $JLSp*,ovIy|6 2>Ȭ 8F׽^l]ϋnyJ$qYEJ1<a_xԸ_{T\$#.rN /CK|@n5k8.@(I.ߠe6B-U7 c0Τc v\Ԣ%BU^M=\T.yYM֮ \> N/-oT殽Ar;$]8m f`%Yec9i6ps53Is{&SZwm\fgNg(zE;;fU$ pcVC!q 6ZBobUUW<. /*訾Hg/c] :.D[u u~a$+Wox\ vߗ:5u{!4s˜&Iph/]A^z0]Ҝ4}Ƈ[msےoV8طi۳.yZKy|{'d#;BSlc=oRUItfA5ͶVN U$bt[@` zѿ|+ug8 ݽ[9#Yʰ>1I ҃ՠh)B[Fp,s.mn$%GI?17 d|mA:KNkFY|NV-7IvØGz(CT^vN8_@QVU67+6ޠ6*mS6B?Q3aۘusrUM *@&OKk@gtXzɖ!8ëbzF&yIMZ'ϭm$l4Jg/Znz<^sb {TC)1l5dZ)ĩɁ\A6A$1*ߦcg׻6s93Xɶ#8ݽjY_F_A[AZgι۹&Ǒh/E-SJ.X +%jl`"9g57ttt!\Lx@Mt󦗕2e[G^KZnkĘAH3g3^B=ꔀԠl۱%rY[ibH^K^RctE]刀qӱG Q˗_9|C5HB5~kE(Id}ʺy2`+Hh]|ΒfRGV4fTu`M\-KyCIZW=Oģmnq.KhWtF==pΥuvWUϣ[A8@mΣE5&CǶA>Ƕ^^i2MC5<K$ Oݱ^L`gn3i(W8RȲvVz, #xۼ߿IixgJ s.'8W+J-&7Ycj_Bkh KȆ6+VNPgu ס{P/kAM`%X>Z<.bdmy!Fx]]`Y6kP˵ {fCzрN y J9 GcYjZn)7?9FW4-vhhaIa6睍/FW% -O,"}ތz .n^Wp:t녻FKzXU3 w}YiZh|i,ioAmt%*Ď VԽy y^ͫn׊ٔH}{yFܳCǭA4 DƝnkKiWIC9^^job H00U|ƪ.Eg&@ ?Y8Y |$ VȝEv~"p/ AC۸.3`M*mbB9c(Ug'@#:U7H#[0D :I2&xB> 1j|Y H"Ovf=7P ?Eғ\HsNHlG sE̩e1{+@vYB6̆/ {ܕeq^ѿ/a&V+~_%[7xihk\`2VX_z$hj%n-o'6?k^*Gu1/ H9-߽EZ>vqIn$k)<ҩ2?؊Yjdj+Aqușˬ`ۈ޸!1yHA#χk=t I3MA!EHˌ"2fYSlZ}XT(\;]n_I A1DJc}X#L,#)[.X9jk߯(KGwcBV&x;-( m6}UַoYzY5t RL%=i*8aPNrL-"y;S8xk'd;oB90R*@Yxc㝫츦Һff4_zZb4\ǑR5O9lnzy:^480!rzv)1p2Wq3nL%?,+J )xf8& +iV+-_Wr@q5 YWK(zKϋ d`ߪnvUNH~-U(ΣV{Ƨ`>Yضul&_|tPލn 5()v$BC* oR HIp\ eͲtLJz ~ 6+B7iJ EƩD{'7F`~^WV=jq" 7cʬ;ߩhCU|as]spvj/QE VR8k 4 {;ɲM'I -JZ%:2{w_݄͇#j):35?f:.vH\ږV2vN# ?mi,b% к!Gi>gMH$Gɲ>*Ok1cc;.#oSu7X2EQ2Wjg1G9g:`_J<^;PMh8gBX1( .yUcx3?J92#_-0Q <~z,͝)vdݑk| F%v"}Vhlodtfй 'iwRg2nFɜRQLr JᢊXZm?bFBCKr6K(A~@E*|!떖-hiyKyjX-aFs lR|c˂D8Y@^vP<\ABVȶ- Da .vJ{hʽ}hdo{]f9>-㕑l0Y=}g铭{tƏAygOW$ Rttv{2RaypݪR99fcv1 `%bDܯHWY]5WηH\2|–n7kIM28"^@Ԧ_zH@+.-Z 6qېwh2̥?\8gn=~r22u223a3Y()Dyh5\6SR_5oyc)8Ye.!^m\X\h .}{*pHSA9m0iWru͸XC` Xzx#Í8ps8{:uFnGlÝ˰>_x ]\JC*Qz/m᫳!3S(`L;҆Iu-g@t-NPL򜹓Vpu%gւ. \Vi˸6j+M"FgS '!0C> v[X fQaLXyc9\~R(.FmXPo,i}rM(Cf"?av.֬6&oo< LOcujٺŧ$G,Gn¾j~t} Wt}3\K1;@WwvQͩjּ4K9G0 U@uV $Xz\&ޭs1Cc\#jοAQ+B;_sfJm2ظpkǖ2D0B}=^m}Qs{f/(K ȀYT#r=SQ"aM[33ΈP-u)vd 5blN?>L7޺ݝ$k 'H¯UtZUdpmS= n+LB8׫SPCt0%; EsJqc"TQ-%/k2!h3uY2ĺ['&:Ʌ!{#F#{jcD[Z~ O;4*mVwhܫQ{۴ĪJ{5´=n2 V:|Pt,SBFp-ؼ>2>vTc3>?"zǡBqϢ6#6R_Ja됔9p8tBYNTW+Zp_2n^YhĮV#07<唱H_a2R`0jLБY<9ZunakDAĽ&)8i'͙;*a:Se ?ǵ {Og2VPg(%;_ 68@߂K%#T" JoضTIxBC؜t (RT}H> -'Qi))|~zqEe$⫸kxɅ-m"2Փ{F7U.sY< U6vh5ӉlA"j@CW#h ^ڀvz%T!Y(Vsg׍Vob 2ڸX IS5d^M-U2=c,pM Y vhn|kz. rO$F_4\ 04>_/77֯cmQvv,#|d]G'n_%kqI-ӕpRW']qQt\LzL|hꊮ[v3$,I![aҁI62#7 [-t c+mc[3RQJs~UD%d߃`9{y.it" 7#\UPcY=zAazp # f[ևpҪ.U߯_`W9p񸺈>#ɎdO5d()M A:LJ1mKwu8\?f<$.ij]~E \}];0eJ*Nc؂3(!r9!FOMmy0_wuB[)fھw~䓽xOݯ:N-h{~>fXwN1j C9vׇ&+.i"8nL+JCQ-?|g=ըz#re3!%{,o0/yhćwHdƷY}jV,B)ZPzyΥ } j'q@N?5+8ŽAn!W\sC〝6z ]2q탠=טj @[T%'K4@=ôuF`[, %X#58}ϵd@;D[0NCy]X*pߧ`ܨ'D܎_û>́@"⠭񫺣X%M&F![ZdORxl-tGZ FlAĝ1H6A&&mڠ?~6:'*zc 6MH\X:] f sPr)1xfpH)$ԝwkU7Z:39Ѡ6clzqG^ ;"Fkkҡ{IJ)i[rNpwp[p;>=* &懺z\ryl]ȯ%pS塭@7ZFS1ڀxv_CЯj`9Sq( A:Km8I[\Fxݛto ̭+/0zX)Ia>ɭ:AH[*Js1\C&Wcf!ѧN0 ,+2&4]PpLA{g0kag4U(5:rT"ٟ?Hq^ #dug06 Y>_޾b#>b  $zҫwr02I7gH+ F%J H 0dh|9,ei2s Oz (}//ِr[p1vJÜwN Ih1s}! cTC is{kZ R|̃a$"-6G`[t#v4%Sr2 WJ51 p>kUF(6R@ҤX<λp u,9ŖÐv֓>t%#dl)]G dS)F +HI'HxZ93-f^\oCp~WjIӴHaf`8,0̐y?L%%5C=CJi^?"tq} FY^(fӴ+KW!j;[<(<>?2Z?I<Y&YR)//%Iy hUnmeӔ32+VEW3hLh߹. V*R/rBƠV+%?ohj!4Mֳ^ĺElD UҢ|j5 f0swcRڀ0c2^7Hs"-fȩrG3ߞ8*ZlU]}fa4Ԭ}wf.z9}#i{{2Qz 9dK)T`J:L M>\kX te* 2j`u;T>dcU,^0.#{}!a T DMd@g-7!'aͺ0]~872:=B W˼2EIN^YGOQ ")3;;ex֯`Fy [D[2F2OKmo4FÙWO4s,kd"'B $ V̭f/ٴ^*J6?M?@5s<[~aE-:2:el\W@j5$~*[ Š $!w_0WyTaG(f^Vt-nfr{n.%lm̃-u`>l^NCT0ByjF~઎D[ú^qȠ{uaVItz\PXZ7~﷛ah㮓H7-#_ ׆WY ߜYa8 aͿ_-hq\_,}fF#-8YԺ 0<̓yúH,[d 6(i _e-7W63HO2M˕w*+C"VmpSUĻ㵃(:\VZ_-XјlhbŲYgc(c_M ri&,[5?oYWA =3&Nʀ3W IDAT/*\͂f "@t"f j옄z0sFxV:?x $AN>d sxƪ͆CQ}z9K,'I8g˞6$D6Ч $LI%bձؐeSR4̔A1@[% ݠ-߄S j|7FәnJNlslDŽ]>qkRRc?uֻP:&{jޫ2^Fx3/#w2eMQW֓qgpeV._>"AGӶU/6'1?N0CSX^) VRnK?> {seoG'^@% /Ϭ$^C[^g^j:mKM©lf>ġ$u#WF *.67`pL+\/+5&cj2:V*yȚSBN޶:i 9mvI ҩN#Վ@wb"1Xw&̭4}CSf:z47}ka̹SVXLj'SSAPzIGZ[Wе w^6^1M3K*\"P̿3bMM6PDIʤDAz.4uc-|Ryru?K|7u9Hj|׭7XrGPHnX$K Qq0h#W0Bg|,!yAVԣǑcMRUM" [\[ҹoNx")YΏ1#J)О^,O>} gPdu6:XW"'{G׹`+ܟYp$b=k Y+u*Kk\Nۙ6erK E< V !~`>oXEB`Xʉ~p`P _ #:_\̱UN`d@po/VZ(zU': by2dD/@tL) PȻFKH㝷Uw1?D|e9NYA$qzf4zn@d3!?{UcG?,7RyW꾱>iI3bqI0?z&2SWi2[NvE1ꖍ5qwZlЎIpbZln [F_"4%1W$JS5@ G|<8;jꇃh.oSRKMQ}/WGa =I|n]k i=˿U긝;FHy. <ٶ"x}>yc^wMrs3) ,?f^Ǒ"|x1\#s=k6x帮 9k.!7M}G,EǬ^ (eݠݻ.!7%-~/"K6Ӳ}=\j*Pkۏ[8m/' <Ljv;.`TqOkç{/ahA(KI q(meUȽk 4Z1 f57\2>ĹD誦` 8ӽrf2ODzBG* 2ETI۞>sX1?$$sM*gKy&uj ==_Wcb?^Y PAEQ({*xhJ#]v*KP./ K%2ٶSb@S =eFfu,VeY՜*~9Yeb&>a߂'!6ɤ>̕]&lN6ޏBKBP{Jl\K/;r&bpԮn6nd,E,c:'2e'x-Jzj)MekȢuX,{^xkh`44z@ +\@i~mD8kio`kF&1\ٷE뛍C7c*=`>|^GshWX1V\ YH72%|Z[F7~GLK9s 0(P@L"T:nYLrr٨txQhFkK+>#ƈ^zgxeekax}ЮbMKXqc}DӔ#KYh?8F|̳FHr)`ujRDU?mbC-傸z]D65 F i +ظ)]^\,Qq?ll/vB+迁3 T- iMROJ|G XhZyӆF#DFj)J[%*ki٫yB!T& JێMUpq؋ aonep7FvKK;\HK%^t"nG1Ti4T#ADhToå*TlCmYŠ_i6YD%& .j1W?a!q7a9o/yVHo9!\2ʬ1Xlh0HDZȓSj)x$R'w: b X0%Œ%Geo/(}}BK$|G֬8trsGї]= 2.Ϊnl?e֛6~E]=jKVh}FT Uy5Ŧ mU"?l$Ye[}\1 Q4aO#N]DS2kE _D:@5xgǞȶd BC'`=!?xX̧3їuwo^hm&BzW:N;$͏w5_=c Jl^ r%+ó,5Fpk5^)׍Uvȗ< C髽gڑXTPP^K?b M 3ZQ/RVn"﹅ 58\- v@ 0lZfPqޝg3v11&FooGֆpڴHz9'ׇz̀Pz9p{gO9 O\cA#@6 biyImBXӄ5_[k׃Wvg?/gğqIygg|澧Z˔.:@)źu[uN][%R_wd[W2 IceT.6qL8hUœvМ۹TPۗKc$$+?S uCgܣ5}呙4aJ"-©=܋{ټq?HtaC nsk w#>ct3|CJmB:r ?mJ.p`aI "\খt(u˚BKa1[]uQBZoؙFs F " 9Vz9|@Ǽ8t̷ؘM0[qdhؚrf V|gypk¬CvJ)yDp$|f،!.}Y3Ʀ^"u5-I`Kᰅ[̌׳BI~q0I *m^k#30J乔Tꖻ+hťcsA|7-{RaR^aUw^ϔ^*곅X _[-0@2^Zjozoz?nbR&˗9:Y1V[l0+Figvef{P\o4|-C<:#0 o*YmubSh!i̕X64p.6ih ^1M FטؾqQzg:~nM}`|FOQ3A=z{z*Vn4,yRQXUڅI{ r΢ C9\kPg>=d:z7gx ĬEB8yd #b J9,ot).gӸpw:T Z $~A5wO}սYho1$vCK <T|Xz:?:_{Z'OJ|5Gi 8ƯF(7Y#Fw n34Lc߿D&ځ6q*"Pw%¯3Of wJ;VP JՃG o)=@R0u5#>Vx_cS٩\?~}e`O%R08eFM .sڵ2\)ⶰ)1I> {N\[T#O΍z{zU,'nf@SgFRƃ8 Jkfe8H\ꯂw'NltM :Z , |7eQ' [QWk u}p;ε9 oWiD lRB\a3J2ƫ~HuG=e E(ꨔU} a Jg^#H*4:D-co% F* mX.mߒ.+K"6 4$с>0m⟿]4VZjy/$%LTKQvE*dH*#{sir$'j 8 AWZ2' ߞN֏eѠ8"e4l?5 +ڴ| Z՜ş`K_j Eqf;,K0|s XGoCk Av-]A*[(#Eiղ-NJ[V ,Zp:fl%yg" o$LW-Z ""d\ysd'D/ "=T'(b[(60A:C#oP:4O+HHog9y<zF;cW.r΅:!>rP%Ұ1X&1Md-~#'̂"p{t<\RI㆖1aj&s&I_m x6I{-ya$ ]RګvkkT] aµ )s:Xg /n۩)ϵ\/Mi}SͧoPTo(}kW尴:**aa= 띹>cJx?O9{#ֲP1=zadfF ysp@,j!9%7 yquq NZyC@Sdy%HA88D^qJDYWXc5%v).FqH"<)^BsKX^R',Ä 3f64 ksWLs!lGѽkHG^ }zF`sl^0&+]2 o3`xP@?o^v`u+!ru1|Wp H>a7"7NpqnSQ]WS0Qb"OB<<8s[ZOø :1g :ߴ̠It}rC'JEO*t!v[G)ľ]\%&2!tjس e;L .yuaƗŘV/ K*+8|VpWGO6l:E\i"*~J$4=4I@=h)NCow!ݔջ 20dE[xT%rf=0e@"X*xS`2}B5VLQ3}IjBnk.Xj+NQ x)M^zA:sU* &E0uz}(^ LдEe&~xP>IAd{y[QRMxUx#zu>kS~@N[5[7ݎ29ߓ80NhwrgLAbδېX [Is$V-PMGH5 Qº5"\H'DG+ѷEj@uY@G긹/^68:3Q9i98^Kr ģA{0_$<9q6ïgFĘgY"V2cr 6Ú[)FEСhk7$8Np "{ws0|jL|NKǏQ lb4[ɗQoM*u-&*6,0l*ߩP+9Y"c{,u3E˨J9]o}>v{E%a)z7>6l$@B&k rdu Ёt>55X"6 >uD/B [Qk"!leLZFu@ @R5e8*Tc_-YFvubtŌ E?Ǒ_wJV:h)!v.V'~s~^S@ 5c@YB hP?Q~o$0*+pvzqgYYǀ 1gҶ[k5I.>DOZ#ٸo2),elǸlU3#p*`j-d Mwd@O.v?|hT;ő}4b=.|$Dr;x /H^g$y%?`Pk2k øMB|Aڨ$8:{8=?GUI,u9u_>pN_6'9%%Jwvll8\fU}nnȝ { 4]Iv^U"7W+ۅ,Dz L~|~>01h.#fCW÷j8c˙{ӣclw^~V<KJ #9Wo%͓ Oo523;+C e-6ؔZ_cFbB3=o $X\{} PIBuYLZP@Fzw˷&tpZYI!2}fdf ڷQ+ÕumS0_VqfBт' |EzHUƓ@4L$5xM"5='T/(8Ur&@փ/RAr+? $atcKBu#TS$c䍏XD *+Zz%|M*‰.BQИR! XȓCfH[0b2,H{vE#Gs:Qt K9G$>3I@VCD}M ZU+{S2?MMo< dN &VS_!d:ܫ_L%1bU-![:SHeY*6sJPQ8]9^hFx`#.q[ ^8oX kDCoD}Ȥ*J5BX:u&SrZ)hYcu*6pO&x0ݗ|+EJgx <;s>OXTZ:#gMӢǹNOO[8"vy/^+y?4We`K)׌vT&l}l2|^6U$6<Ʈmj&ũc7eOՄ/6f %DynΪl_xq[h m2ˬYZJ8Am| ݁;&&lx?aUVDW$5>O~? ?*o޴ƧDi\Px&v"`~$UmhT*T]Um!鶥4ŜZC~ lZEpBhևY%Zچo΅+YhJ*N\5T]x3\kxm鲩k3ՂG`U+62WW))@H证"gqqYBg^r ,2X;7]7 G#K!%;d}[:09SR~99FK:{- ;C $P:8t%m]B%Yay4sހЂ#Ax 9~#}Ej*BA(P{ :FЃ:]cYBc17ǕZcCLI QҼ[,,#c;+2puIΎ1!SدUV!V1B㞉Fޛ3F:ty z7l8N5}|)!R31<ͷɗ/K,%7y1-wO!.|^LvN3hIjW:&ZD|жP^ $y5#j@C0\<e`uwԜC4ީq)bK?To? <.naW xs+jm"N [s5_7լ*W5N4%WQܬ^xX5cfiMc'L|E.|6ߪ=SPAڪ0@)8hUi\S?EL*,1v$G51_A_Vɫ~U\K9I"89Rw=>ڰ$, {KCo_-^[[yeAJ/+=MH -_ҁm]I ާV0绅Bݭ:MyQNM 6!a2b|G 1QGa19 m|Vii5Ϟ?7e:@e|?iߺ߸T_q" ȌnjJȄi[t9X[HbYږ(*"_#у![Ac٪-񀒡z@nirlg6 A:F臊pmOàM} wy%Aw|΀b頼._7H "fWa,p^uҞo@rlaxme^ Zi._E%D, IIɈn *p}*!Nu\@kySDor6x<JoB':@l pD~=U[fՓk~Zh^M R:W{gԋ I޿x9W(GI|Ot ˊ U%̥J~\id ͅqvEaC#w,VcPK@EW_0 ND{0FIޱԋzBivvfEDŽށtGzղI Jͤq/ (vB*Ԟ2W~A}]ИײbvF ]4MuQ^*"0 Un`톆/|>LQ0kQP\?|k?Q-nĤIYQ?=0XOÃz?E ͔i\cI?x6Oх"quvVulr$Sm)t~s7,BKp՜A)plurinِJ}]*#a("7ncu%%c3s+C;^ʅGxhVqW30J֫KD,X*0他#.7ԇH2Vs? N@BIz,iJO?lI>*c.^?O'MD!h17F3Y!Ȏ5_I%{lTKI#3[z4XoW5:Ӧ5!TqӥU&{NVܪzзq #8LF"lEOggJ{]hEvc&cR`Xd~)w9"0H K Y݇_&SX;]6*m4Ń*@hLw@#I@RwuI#k >(JxG\~_,u0Ogl(CޘP7#:Se=Q=9L n%؟,]uN/G|=,X&`6oOnmk[ЩB"DYIS|@»ew~ u{!(}q )רi=l?:Ђjj-ȼO[JXԇ[90>4(]㡱q嘾uÉ.jr0k.X4|_sAFDKc* qJȼ*P'ND6|ڃ'O!{? a`2QHkez{өDߟ޳(~>GIN./h L9Kd QmLL#,l}dÆG\@/ 3ǟ +7d$oo IDAT9k_= ͂hEp^.q)}@i!z̹u.yl{{Pf<}()Oiir[!Pi;FO67d.&OOVfMaUEudh[ZĹB?Z_ՒL7*Tjx7S߁iJ南 87 3#p-:@ [? QRj|]Rug_73í,~oB\{]IcjQ~$ rًSA DۈX(x7aIJ~9a^nc:¹@RaO,u=9U 3qnHw% Vg&7?64: ~*j"|͉G=a?71 ~ #qVFZA!} PNJ=7۫Sp4bч_2 \3Q !֢@ct!'P5-sJ\yNPx>d8y tkuk8Й=n,h5_=~K(o{Ay BG4v A)=:!Q![ߞe-DžhFTPGV2` $17Cʷ,\~*9j;/ An$OBLŪ{H3u7c":w! }k7ýjzv1Cӳxqͬ= &@otL , t{]UW2%Ѫˆ(~XD00|e(QUcëU؞}Ŗ |jUav}Q)PiW_YKnt69j ._E{rjdRy)Ӱx׏tI34*e~|ں)LI#G¿% T~;YdsCU%޶~d1-FN &B];J{2e`3籙8/FwP%@up 4[q_ aN6lW}cilQO'}&w8n>@5S ml8E#rL+o~|d v#~6(nXƚ_}%"]%Dح,З^`:XV#>O<1jr*Pxcx3Oy,qj%Jp-MH{EsRNJjHh6]}600y o(2hm̛CX!Ze{ jLV4R2odE>SjF h9&L-VqBNZ/oooUF c>xIƣ}7P޽XݪՔzcu c|Ul1Pxek+{e?lbw`@*?|4-Sl釨x{O *x- %rPB۩o\9)2ۘzVR(;A6 yG㈭= ݸLQq-eO n}$?빮ޏQٷ0wK6KXy8Hދ`"Wae?7{ A e@("}hrX-..4jK/~ f0 % x &wm|'>\*Ud#Q #}{ QCőުƟ6-o>3fT*% Mwb/%6X4K=hvu ztZm:`D wNFt(VnX8˂f[D^WOO`;  S/޸oj$i'2K~AX7 [om>H[[IN#Sd`gUߜyl[<=2yъFS0l zpxo f5tVjWikh<=UЛEZ6ljƾ:Ǐ2o7_R>O64,+0i\F2w:`6wB0 IamEԆlh9\H _0Xò 3cǠZh @Nr5H$ԋzH*Qn`EA6Ŧ`":kwhڟl _6-8jM4[pOIM \6so\RN+5~0~ dMܻZ3(`׹ X(ʅ~E3?l`L%Aw=\5ZDЏDa.lF^ ! x"ßfWDZha)7=ny5r=! OG'1Z;VߏߋP,[mw"~Se7ċ"xjS['˿"\\kxL0qzMr.O^Pe!xrdeQd%0Uy5؝axKY̷ˍz ;xv pPNjb. R9h߾_4! ҷ̱ۏEGO!3A^wd9S1fu?SުQe!A`2^ d9H'$`1#_NPK8haS7lLR M4ΆC9 e9M44c1m%U㯑 螹=xUbHx;;5/@F%:ⓗ|>i߁A$?JK(6o|O;%+ߎ#GŞp$Yl^d{ō"$/?+TC}KY]LT{HS?;̦pb HgFs3F:ZCW:lnHgb+ ЋAx9jhBf!ӈ"7|whBae 6[f w 'Vlٍ 6/W 4;pTšJ|&W&/vI❾M@a߮C.fS;;H4E8rbi"lpCC3bcy_7D:YV,akUZM'87y?ߌ?I#N/@d*@kJ ']׍!BwП1&>G]fLi! ;p&'V !OxYHL"$jh~j!M.#sIƨf6nL3(Kȝͱun$uL/[(pulmi4-7p{{W!75¶)fp/ 8o!E-Q,~[p:843;*}Ebэ] ůIe 9:Vk`Lgð[N'[-ovӵ3},Z9Η2f7±Ck!뽳{[%lp83P«E䟀X,!o5;// {o/!@_dE?/0aS:!_^^6n&l2{GZy0W돐SU~[oOi!Yn6OJo"&#7z<%~tRѕ Cl~%B#h@]`eNk,QДTy!ue9V-1uフd Nu+؟9$i{=DGFմp&Q+enTՅ߭u=x'8Ш,4U [ o_B,*9ɯD7 0@Wny9bŸ^ć!Vy|p0iy"kqJwj#8)٩1w{wʥ_~ { a#27 +eqųnZ( OU10S2G$#S֍KŴ[dOka0#1m Rf2bu FPC\@~M#dgKXxոCCzϹ7LU3aKC"O*d?Ȗ`^) b \.{d. \jp ?Jgf=t* D PhyCxc6){?&b, 2@rSa:`Z`zB/Vy3<#ɓ.le[qQD |{S[Y:^Tk-l$9u1aO|%ne93$m,m&*A,bY8AVZT] wI/bp˜iM6ҥuɯ _˗Z$}qPj5/Y}٘^;GQp /_ ʹnu)_p.X}ќ~ih薦]VIPϞLad+,~j{KJ6|_ M{I>;{ť]3\[79aog@gï%wo  7%5lVo @W7|Fv5l:7oW$vڂ'B΢.졐l܄ef;UM q 〈OXF;Z-_F*^1j{d$Ϳ;铟$Xd(QN4 yn$K>b̠VicM;oLy*Q$W65hTx{1 Inf뼷Dd8jLMQGK<YV}}}=X>l@U;ހ4-j%9lS}]#{;{Ig/ou T>&V~YNF UC,.FBo!??T l iUSh fg28*9ٶQ:A5bMLLvE`80_E.YVWxJsP֢Cf 0ըlkOi6iA#d^*BAHMC ɨ!ŋMRsu^䥻-VrmHpn6/Ӈ +BFZHtal )sU7~ڌgo 3 Iq=uh’xя o nڬ#ܨ8EK`j:?/Ɏ0`2 =A"F',/[mb$ZW [_Lȇ'oEHchh;m*&0oth܍??rM8 *fFEP5[\. .mЕK *,]Ǟa&+ONS;8 ftfՀCn ۀp@2D`U|-)j,j𳷂SB=lWxo_'~ԁdLX:%5X85 u@ALfh i{ ^KA&^;M:ae4x4lhcKR\1ْbIН#h#X"y p3ÔɀSyNW$87~7.h0Jߢ٣w`S:\se0!8x\i403r~c3Nwaf@[g]k tVV/*rI C\EveO/Ri IDATpn_jсU(]cŒԧj儘 AmS mآW6̼ F%?iH,l _C#}~} m"?#^O! ؏ani[fV0ZNшK2WPj~F2 ʪk9Rrf:fě4Vl ֘nMV*plb•LW{Cݼ  ^ei`:!F0HFG;`$UtbE_m1YG?l@h42fB!;~NTtxqِ.=Tj &S< v2ƀ_ܿK_ЗXwvڄNXגÙ@{?1q\Tk7,LB 4s@IGIM sgL3]-F)#WV@kڬ8?$B(aVYCC?v"`0vWRh@Ę 5|L$s?ycSM9CX<4!6oDIEF6& ,[ u64I*oJn.'Kpm=wϨZ!.jD)fNEf>#o:ʼn$.{ 0>D:4MnYy8A':p5 KKW0Y[zgCВ5*m竗 'ARCsWS gQ%N2[>HY9ձp)Lc-m W$" X#~ -&V@P?2",d 䯨4wW:˙WP2tXZvRY{+-2S-7dZ<SH=6e 4"8AGNJ5ј|$ֱ@ށ/iDcG+e/(Fn@^ <<ؓ ߊ*|J* QWwgȡDv,ŝ 28|-U!j7$|'_X9Y] J?ց>֟aot(9& 8_ D۽/7z1K!KBiw'oBAS6gvCp75;@!X>np CN?v :Bg7`q(!+!qc2^_Y\@+o첳S;kt1P~dK, T<_k0NLڵ\r3(C]!UBﻮ&fRqj"s0S2]?"$}' pt.UBYKA^B 9vA<04.df2@tWڡX$Ɵ+͚/p)*M!jp͖r:5MW:i-1#nK!R`^.yʰ(4amdqdO5g tVІ @l^<1הcᕱ-A  ]x,:t_8{EKUYQ Σ%j9qL)}Vh {f_pX1z0Q+ M~]__OH:e&y{ds.nh;M?  $xbO!RK1%_d0}ZlQkܚ[L=Ur-\x&"w;i@D&KP8 R2jr9d/xdpiYL;z w#:@[H0an&tO1QkRJ JEa@tF3OjkS!3`*@1CrXђtGخ\m(\ l$."[S2[ 0;)VSeU2TRn/\^*N߲W-A`=!dv4 <@;߳>/og3#E~ƴr.h"|缉En!O:z<=j 9ܗBZ2NU6%`SEmTseӒrnmdzT7糙]ޘC2$uA|bL%^߂3Q HQʅtQE1Ua%) ϖᄳ 6n6XLN []>'T v"D@8'}x誢kG4(3 ?+KY$K.N=f@ШR6M|ʺx滔7f*y,dgahIR+Nt $YZˋAQ ҐΨ@)rKu-, B Σ 6 1)g& 0j̓0-ߪ}Uf~@ҫڅtʍY$J/*>*kRʒu|YkIa-TMWA,c:P!1yrVW80*60e%F~cTiv<>aY\>B5(Gy{f s]L5R+ZLm%h\@B+Wش=Q!;;SݷfEкr#{E^7=?;ۘ\ 8#`1.'-ҥW1{F,mGTg턪BT1G@΍$@3HR 'XQV+FI3@Bn7il§>#ՓB1?8G`^L f8Gbdp^ϏY-04ο<[>MlZ<@@M!QԖec^aaR+HƦ&2_´5h$zҋ*PL9c!NL5!Teb)x~EN7Pun;%B5%xQg_ |1U"PqQ֟pP9}jD7HSc_\B&|~+Bn)BvV3 q"YK(<,^.71aR0y-M$o;fIvyPL5!(u8H6g^s1?q˓1>b0A!TbWYho@a[of?y*ME~ot1[sи7 iYlc<%  #{dLs?+.4mO! ֢_-8 +`hK_+J!oS=RPڌV{QHtm<ѽP+lV=DAO?q]xQd ׁx!$۲cvi=IC!("TǪ{gR".$B]߳t玦$:$Bye>+Ё7YC5,Zp%HέTI1GZ%p~p%4S~EPBV(l9pL4< @C>9hNSͥCyWSK S8ۤfJʊD*Hn?x(X0A||qw~\~|-?xK) Zoǡb\j>>J#_Je"qF4m//= crFq"8 6s~ ՠ,YLЬfK-qεw[BK:k& klCg`[R/T2:wC-(C<ʳ: O2@_o}pIJ_ *Tjd%V+'9VZF#y&1xq:ʍ4/ڷ7E9Ý6UZ5rTI:SJr%XH VX :" 2 tC:_F8*xb9}3HXTJ2!uUXr修#G? ϼ)ΔS l" %,8)y=x'}bBzBjLOnbGKwPwchG1k=;z5q>FEUiyȋ˩!4!W=iD!- f`~8F7o \$QyٱAEі LH7Tӥnۥp \u*S2/-*}ԅ,hc7=(?0:SKǛ C x:<`7e4OCN%V"ג lY0&f$z' 5U12LE ZM7ytPT"SvŎ TGҌ;Mn;33z#u`+9zc1DSV0i s4(3%fD8jp?TqX'vb^OEsqNT-WfҸb^ A?ёoӵKgBq9d`!wk-;ʥ!PxOQ)}O\&:.|W6E}5iaK4"86\E`6q0.42L`d5}Dz(P[oZ6SlSɤM;QS ΂NW-h}f4)xfQ sv)C04j}HٗF1uE{`gnZ*[$Kš:"OcҬ[ Z3 _RF܋>Π"9j>Jv/7"NIcz1hCQkvl Ys*aDT"=ҴUdIdֈ#qP.=rB'_=ZR:&9}/DY'M%5yNwjrQ8)N8 fE&A05e0NnP7$+V6zfz!)R?|(Mt!Gs%] Z=鳳fs`M߁ޢgL)78::‘8ɢ'1gWq^ꖬ#\#\/~Јl7DbHAS!3;-p{nmcڱ!FARR/xq) PIa=4k@6cNS~fy{w1(: `PKHR%[oEiCRam"Ll BSX5j޻4+\hZ7&/.v(/Pн*&M+ ( rp;.^m!>3u,[4.=ѲшYTC6-1O/*Ҫ~4N$K}̹,ƞq 9$"fB zC^@蛫 $7](5 AQw5EcR l`uĘ{0,QJUb&"k4 EњzT í#ؚd2mG_Nr(DžVbPfL=ףz#urO,2(2>rhyUw\0iI:[bKlfDpB^sSP MbL\s_ !=cuD#<`XCb9W|H@ 9in~?X>@=N9ВrdzT>`&% Mͽy6dRc T~=McYl}[htdrae7$9xo:@~C\)f7k㎸j'UI]Zi斯lc$w\We6ݼr:_42Tп}v,֠-%:ZG,*5BM#Y-R}_!lH`Q:NYlI`\t9ZxMMsJR(D?ۈIxazkE 6uv0+^=@k"G߭o.G]a 4|@gvKՑ-dPM־5FpS: n6wrpSShkqsi@\v/cZH4FǘSHi:oˢVjea;J ܕ-&Y خw-O'}~āÊX6v?P ~T>\QĹ9C!D*nvPOѹ#cٓJ/6(S{ SKֵ^L'lyk\7 (DSTKdMuUФ'9@b M MP-zŘ7QnֹB + H_<7|׳܋v`:[ċt,UƎtt,<0!W!2%mӁD1%d=Bo@3bC\ (f%o Q;=gty nT86ÂX :ɰK?T ^9uL{B!ݰ+jcX]"B8zӜ:;v܅Z-`j8.}Ray"\5.pe]f"|"}mK2gKaV6Lqن亄jA4@DO2</.9iru0X$Sbʌ=+噊^Ls?>b5A|Nk~&ؒK_jX;! hu(h F`ެtv5]^YzSV$i5m(Է۶ae}yg\Z?IZ&=9kT\}4EWev,|m& ȹ<}&"Q>Z;e.4PkICo(j҄JLF,0T BFl[bp~@QL4 .9TÐ0|_5T\"g{?>><,IF$3F}wQ&B! zg_ H} %M JpO8al@ZmǠvBOᐮ/f>_eXU،4+ʺU!T'ŹW2ʆzG{8}dSΥ|Jp4,;<>D 1yz`=4b6櫡a{0j+7d)>nnYWHz@k~e%[S0KCE|UM6) L 5f]YGy&jn][ BJvTFe$bM{u* =F;G u/TDurՕxvlɎ8T|pncPƛ*ij4P5}h/.ӓcAj$R]i L}ҘІF#gA|L8?>' or{q $"׮7DwLUuMmIUYWjoHwԦ֟t2 MeRb_0+qd("}IQ,H7Su`;ىЂDbHf'^Uk+qףq[4*.h^ 9α!R8vχ 0r򋥸򋻐LYi at6)-akcKi-yWi݃[VNgײ5T'0dd9KcX2XYB&N,u]*`Zwd\u;yㆄ8bSYUP`C12jHu;@dh; t1%9pc#$gN1BM`(^lkNUz] &SY[I,mھx~ 3\?&r_/$8 pm{בB -/f]xHd"ҚmY!GDLZ;UNNW4tiinjҼV!ZH¿#hU z\פC6a3{4\&GZ} ˃KKse4 1az<"&oÁB\W|Hxxj ˲ \ LYw -Acg$إp.t;m(VB!:;RW)ƙ7pVѝ,5ae Q8SB7gm`x?]~)w>c@Ü:Oݛ[vVT jms Qvj <͇$YJEe\BEMZY905e@hs/fqi*kJr;FͰDv-@p:_g32\}':fEF " hFׄ))\ O$TNM5g\hbq8kQZe{;M3qUt~u%^ ?\^^j?BÐi8"|nf)fn74]ux@淝\G_ig.]?,ld3Ɔ)L41)!A~]{^ءqM7'&f0:^dX=9kG fU,@zR81,^ R+J;G'"w┤A~i$\tjJ@C4ߘq `! w+˖4"~nKȳn!)~_Ljs;fcpjtSh]gAX& XG$Spp 86',1$2A1j@P*m5٦)[ؚ!5^$Jd>+>M&6b0*/ U^hhyA £#^hJ{9DGQ(H>IVףǏ"Lv5ypS3BĤ M(Dc`_5;~\ z)z`5=6[#(ee[ AxBhiW8 y]ȩ]hj[.) lxgWмSkR'6ꥯn kݛkT'WOĶī;tn Cv{@9ksk* foN)E120P#.y%qN_{  2ړe/HjqI K8`YIҬ9O"T\o@k"ni[0̃C,DM$ԦyIĚU͸ sdxsl @AxB/UqgqJܣ }$z$6jHtjgZf+8$,?+/-d\b[" c$B/ǤxS8rEbD7A1|)be|T 8E(<=ޘelQC?^ʨ,L!)~t~UE6/MR4tAW7B0dDho[wxihAu|+[l4E /S8 DWKÙpQjǜ>\}XӞ}U[!fֶ_JDsꈿbۍ2[QMH ,m4A78 T YiԱP4.g\R(5]%)E`v /JS2ŪꓸAMjb߹ƮvA /غ\M %$R>z^p4c2_ u/KYwV{ o$Ll?=? uA><[n Oޗ |3Фe?Ɣ$"?G<|8VX:#/հDt?ʜ B=7 \C9Q#)#TQ  ty,m&g @OE9$9XYCHzgVuUd|^L C_NS̀hV .8meW 6^u w?^%{|=A!4C 7Gt"b.L4\Rr㿺hs/G!!bUYxNR>:j@ *ԱGUwFiR^ )ź>5y3SKB>IY{W2FԻ!-D=`)n ߥUj,NlS̥'Jm)vih!ABE TWcLjHC}?׶8mYhE-W­z<;1JY"f8smf6*ǐ*og,> dLl\ȣ;"Ah)=<b!q}$bȫG{8nU cQB.ۭE-^[p2ﮩ_-⣷ج/%! *ZUNTġދ ]ህITrn`vD@[sS,  `uH=SLT~Ix|9~rKo2zk{}C5SdzL1!~qVA<` H l38@yĭV]7R 7c܊0gT^-`]<-jj&Mh/c\oeu($@Ij;E웺"!eJmA  ϩ.UR"I@kȗ]4yܑM7m!tm(ܲ\xw!ݽRY=FOj/yhՂwJ'yٞLSCD`?ީc0pʞluLu0S $Jg^DyIEϮ:xhLwxFUŋS:e(GώZwDFƋ5 2=\FvoLu )rh /N,=4u} KI!Jڑ˴Q"$O o,L^kDK/;NJWCCi珤g/r; OsLz:+XWMqc35ɒ{Be5 U;+]^/zsG7^On^Su:+e+̾o|xhc)WGݽ9NQƵ,n8\5!yj>+̯(!@c9aHv[X1X݈/~.J8,"!>SkJ ţYIF-)q.gu<{PdGțB4K^&K~ Pk>6}A2o"it?\a9ud5f\r0_ð#.F0@VuK?=p̈́SRkYLEl];q.w5@_7z!tH' SHKA(>y%{[ܦM;J`>=˓̿0&EWxyP #$&qkr\GEw#kҿb<VM@ @':zؽXYM=c/Ȓ퀗Nm8`*>'J"r|đ#v)&{)5F)ze ,R'\a :@`/BBt:@{fzǣO(DÜ}FgkT"X 9f$,ƥ+zɂcF*0--e̖vQ[13P0@#߶*Q\6ʋ:8IӈN!9fJPD ݈;yt-T2ŴxmBc!Q&troqXδ\Ei|rʙϾ ͇#'D{MB/r:1v(zWӦZn0„v)+2J<jzT? Ƿrƅ o*-:ق >us$_~R4%t>9']XR(ٗg'?J-@_[CU]J{Nb Dy g9sZ pĈR="p[9Ip`Fѵkn]mWpmPFQ@}ć@qX=Ebcŕ/\zUE5ЩU4zXє$'>k &p9xچ=fY7~")O32;G>%n#CBSqp1dݣ׀#ϯj BߤyʶNI4@^h!G@Jᖣr&#ۭ6϶Z;ғ}̻k6"(~E$rM, cfY@]'"c~ ѝVG%r] sPcɕn%GN(pHsH~nu׸}J0U}ncƔ˛bŬ`'tज i١FHJ+g^-CMg0lY m;@&Fe`7ʏR,܊ێDmڳB5s:y=DIb1?u`@r0 A.q[hm#^XdW,Q0sI3@z),ec&"Ir qm{|>V P6kyݣTޑ/u_sy Y1c;z UM zH[PR|.PIay>00>SѧXqcaqA.$^ִeQ8~~r1-=*x! ua[fآ(6X_Cmۃ4[<Ǚ{Z"k.o#kWj;uRn@g5K46@?CR XRCmXג AD2~`/1zn N>ؕߒ8 ^"BC1r{^o D0lYqq vV9W:>^oAyj_ RtmV933U3wunf?X r֬պqEPS|zy̳3Yӳ5ҙiq([=rki>dDޟˉCBțf2wW +Q!}!8:Y~~f#[B8PM݋ .WՎHCu\iJqq* ۹}x`j {P- ,\g~+r9 %IFB`~ae ipj:kEy\}P:]Lj5w@"@{ZR<><(@xZ (ÛqoCȖ<,+U]`rCZߒGK_?>l:T'v0ۂwCtZK ;LEQΜl9rk#0dewWӭH"PM9| $uN`V8P}]š-em9x%ZD;MIɖZ^ r|`P"G6Y0 M-F^SxNZaa'zpOPtQ9]rCC'}( >.5Ǭ n1.;xh}H]aP˹t& ǐsj kiGxW s qqRٳ*|יI 'MX 2ký8$X-/G̢#)vgDC@յ[]E(^sKQk{P򃎆]Iut+u9Ю\>X-{mISqpK1 |K/yZ4?xtE%8i'$'V8w)p+TJ_vR=Oz g}aC^ODOA5^4fX*dQw8>:61Cu*D~B^ @RA D+`e ´F07 S0F%qӤ:vgZ"˜d++~R'k9{z.__m+!ږuE ;~9tM#YdD+` su"*U|$p7 ^ }ǯ;򄗔[~¤wM߀zPXA!&w#$ {6O?bj~l<8?.>ud=3-u%9gmJ #0Ҏ*|rV*G7hFaVψ]y5R1?P\u<zڜ(l'ߨɟ|8~*,4$Z G G'z6WgUuYz fpNNv*0kPnW9e@3NECԚ`d> 4"0GTx7{R(jی?-KD T*oQS4OI0&3S߅V/P'Z=X\9CڊD!qscE;j1wu5ocBhOgK~ۙ:A * ?qᝅC0S'X1Z BD68ݗ*>{ŭM )3m:2%ղ0A ._/u`R[m[7?ET!4"`wJ!{P^y$v!V1wN*YeZ~Nȓuq1V!W4b0rgV7G40 7R  q}tm&b'}~Ζ,YvJ\n 3‘8`c ڥ;nS @}CAg|y !ʃ 驱8~ᒘ޼95r!IXųZg Ik BеP$8YfqBRnOq {ӵ iµM&i&ˋ5u2rlfZ敚DW]?J[YV',1It[a!s O~`u+jeB l"0j!}a4qQq2˝ೖ0C#wC^"`!IpL&s@s!wvF['Ý`Ekzrd_YqEݗ.*M= / ѭJKv> M^ ? Q󊬥'ߩ;l9,m.8H8Ow̴ą[D`@YtNҥPVw?D~H".oz7Zl<2°aX뜶$=N2J(躞3ъZ8@_fv-L.5ܟELP"&nL(l!T>̈aX(uAHh B!?y+nc5 SKhN UX;6U7b@U*WTҲ xcj¨|@=I m69DHUCܠl8nL`z˞n/a K8XvoXߠP~&܈f6ŒG:זc6N n_[`9\Q@6 v"Βm^^>/m[COfsv}y燛/v.qhm) W4b_o/3S4(YsXg~LQ6w{evG|rK(*>a@)/j"pcBV Gޕn1IrE9\y KmW%ƙ@J<[*^tKl,?`n툋~pd(>BA;ұ>/F8#w*zL{w1|M.A0©J Rb$ԗS IOB?_Pxk'[uVYH]_G5,ɰ@*gD@ G箤[5TԺ $\lNy$sd4)p<= lFzv `Մc@~.0IX0:Ckʄ 2ٽџD=$ۛʮ9ҪakHד),訄1\8H D]{Hč ^B ͍ʩϣ$E[pCr!Ub᭗E}"˔gѭ\z MU!R=^IDz=Ç(a?UƈS_v=m8,匄$a M+S Jvz0-ِ̀U!+â1FԈN7t29CH"V).33;M4!1Tb5iU%: \qAy uP{ z$vsTgatdỸq/b5%@+`/=Z@[㌚!>߫$#O/nDLL ^ KB$0JD&)b;q[[%̫+X2vU,otHS.?u&NFnɕ'Ә9'YPˬg)H>zdLɮ %ʁ=A.>8N Ҟt5/xnj78۱v6v#sR[ڶŕUڌuX4PxeX9-w)À='7 qr;+5HI4Nϸo7P)-0E>h.a<3:*{3q3CMN50_,6K{ڋAHAEv{- I^r$zAuUkOtIRԋE|jղwg,-~m05ԧNQgsMyX\hS d DfJǎDba[lgEm(?Mb0ǙLSmӾO@{\1_L,=Ez0o0"++ϪV~Dt<gڽ+u~=DMڿ`.L|UޖؠtC$ɯ'l?Hs~4sl76Rx ;-12>˙l*mK]Ѡѳܩ^zbS3P(d/y3a}Ĩ3\T*u=ӬOB%U}1UGeIDATyT,PHͰ`<٥K&kCJQG$`TsX6r@[:HfjkK4dLo}o:{?Y^? ]ZJ,-[;T#L>|a_Zʋ_Q-*G<4+ƶ@)WijI-+LfDP45LavM?gࢲ(exv5G[<"/f>FJCt>ܿ^P;Cj& Xؤ.=gV%-Nm|Jȸ諌5u44u{)ޫb6fB@6>y84ơ"{UU@8_1@"_iddy9G77?I*(l_&"ZXn)q2Ơ05A 茚m< IhHxBU 3'ʏ慡(H60]i[_ OZ $2!"Ы̪,3Wq>vpw1MK(lann'!@Oi:Dqjgz U}(f3|?&;-.` xG/vpL,5-2]Suh{t[QLWtc<͗2@k^(+4LgJX"bTiN)v-`ߐ-TfӞ(MڅEMי/?tb1G"fH,e06K;7w\jRpu1*|2_&N]b?d=`6±%!ȵ49,k﹨{ c̖oڜjQ^wi0“tPQ=3JkG$#ᒒ.N= /)<,SǟsoAn!m## >Po8"'=@m W$;?>95<K L^SZh,Դ:ϡFB`Q:~v)$a&740+D n:m0# G[ R7G[/$ivvR;U{F1F7k/`Dw"%[NCcM$*kZ۹E{N(',sAuKMcf:ywyi8}'a.7pdppSp}TTYO:‡Z>RG28hmD*8kv=spAKcyCBx:2 zY` ]}xM@?TWA{y6S : "CҐ0㖚۰@ `:Bf[*QIlmZp~{TNU/;$b{DQ\/IE+N4{?ƉcCȦp|FӏjyNLqWZ%223 t.N9B^Gs_^#ZpȴR.ᕺ/1JK뺘bqKW]s{^(d~ oy{()oCz]b>D^m' 3_f/pҘ_$*+ub \J]qn~k)5@xcZdb TWU;AFdL #[;q̶3ǩ tl70> yZa>-cD"S*Ue.= ^^,8QY+Т$q0`i r4q*Kwľ/N*T a:c6լd;XȲ 3Z5ġ(e\9e̚En Z)? VԷTgQoٞkٝg+d]E< ٣CKM* >ZPSYBV+,]rKw6b/s:o)z?6y,HLObrx-b+46N Dk9ݜM&|]!qNa5Hۊ6 k,]٪|=CyKzᴊL=VZiNwoܿYM>CdiǙvG4iq ]>ZIvb-dZ]Ȅk2d-Iz^%Xb~ r~珧dj|$~2ƞ^-xeYVaD2s0=r` C@@dTCɕ'/; @i=f)}0tV1Avzsq05XF3H^;>z+0 C99?uhw&&AKE[-HgIĒ;y5 4SeOz᭥57 @!-cZ6N3xrG]裕:ı&XnC*,)ץX҈heԁ]VDwH%ҥ>.!=:EdeAiߝ1f~C/>-=FrֆM7¬fb<?#4F)]|&ו_~>Ji!Fug`7lU9Ӷ7*.*yCf<_qJD^YVQ˟~7wFR_*AiA3S*DIY։H41Q.G?ɔ>wu顯f@@(MW>"XxO wa{42QFNLJ3wuK/(1e>M xfz=h;*/[LA"Ԟ'ڐҠQ@wX٣+ hHe qG1LCY$fʗDay q~1r,\r$dY z1FSFjTpG}:3%ErlQfh*lZ5E`0`Fu#VBɜ|6,1Pe"5P$4DIj,º{Bm ƞ\g iph(g)iI'.bv՛+̆W)Bࠚ &CB1zdeZ 8Q#F}åsYUK\yq[$->}> kv3?2!&I/8"si;{ B4㍅I`#E~j5]|*[4 t)rr&`YTՠ;Z kaj #t[g΍PFBx>NĨ^<]|՝,eH5 CBgt?w4~ƀf'p>z-Y/ҡj,T9+bsS} >N7U*SqftH=orlpFHQНېI5 BEHULT|3U 4],DVa;JJ$賨mnO([A{Mc Eaѻ,- kq y >PY2=~\ >Jjˀ=='C{|˶#Xu覤g =-ʄBlpF-{Q6펫ޗ_+&}dt$cfDD9~9֜=hTJ le|@|m^ /μ"VG&:7 $'1Arj@WYW&$ͫHnCWެ 6dDw/GLAn,Ey`f'e#u# F#8Ÿ۟M5_^{);\@ 8E*,%m@r2xg2xX,چ/ZS'x܉f%Gd;z[_08Ùr92 zǿ7F/dssvTRCN`1<%{I`)X^1X|4s3N$6-r@X,.`J/itA/ܧHwخ49Ԝ<Sh(|m2 j|Ǻ+~B1$SćI[ ipK^%QWGM =h m+> .cUk_%RWk{R&K^LiY30Qqf[aD#aKV8MfʯW)D}1QF6]azY)\=?%TN[~)XW%TU({ i0\ le7ǒn} h?ǥʛɢ ӫy 7fa ݃[ c *c ܆[\ 6x1]Fw,d6b!)Z'5&Ϥ-q)<3N}@^DQ3_0zf;# 9^I@FߊO28 VwS4o;.6)^HCjsIWDj&f<6`¬Qk^z捏] h}Q n>CšǛ2bts"5ZCl$|*]Fgm21"J>p}pC;J< Wj=՜R?V9kEܼEjT{( b7n$( /v[nLQLT _?!fx#AUGvi '"Y\ pl'ݣ?ͼ>oԤGж6m8đT)<*^St*m]5%}+ 6!TbjjHo`ĐĴwǮ !z}%a)zm1Ɛ 4o='zlG$tlsPJ4܁trLu6_LJ?~xOb!ju*ﴑ(c4ky9CMjLIENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/back2.png0000664000175000017500000066116212140767206016154 00000000000000PNG  IHDR,PLTE.J:2.F6":&>^L&:ZF6:>*B2.6VD2:2BJF.2.:J:&2"*:.2F6*:RB*>*&6&6F62B6!6"&.&6RB:N>"*""."JjZ"2N>.>.*6**.:.>VF.B22>2FfV:F>6J:" "6B6"&#&FVJ>NB2*&&&"*2*J^R>JB&6*&6.BZJ*&&:2JbR>RBBNFBRF&>2">BFBVJ:B:*>66N>".**:2FZN"2&2J>2>:&2.*62.&.>2.>6.F:.:66B>2B:6F:6F>:FB.B::J>:JB>NF6NB&BRJ2F>NbV^zj"6.:NF6JBUrb>RJBVN:RF*B6BbRB^N2:6.24&>&"*&FZRB^RFVN&.**2.>VJBZN&"Nn^".6.F^N2J:>FB**"JfVJ^V2*JfZ"2*"*.JbV*.*NfV.&7>B&&6>6*28NjZ&"&62&*&6RF&..RjZ>ZJ>JF:BC"...*Rn^":."**.62**2::6>>JZR2"BNJ"2."6&Vn^..&&>.26:*&Rj^"&..::""&*:6*22:VJ*>.*6>:&2&".&6J>2>>FRNRfZ&:*&23&Yve:NB.B6.662&*>2F^R2F:6B::B>2B>"6**"2>6>RF*6:6FB&2*&:.*./&&"&*.>::FF&.">FFVnb:VF>F:*"&"2NB*6..:2.":>>&***66>ZN:ZJFbRNfZ&*22622662:>&:&S*bKGDH pHYs..tIME 6w IDATxDV' KbغA9 \P,($k7=p|?$x8L6L` vqJL0t3IL•)Of`%#e,*ݜ{}Vx{w6q|koMmvd?qcw;8:׮wW K+g/gggEU;㳬di?>O? gw{,qjE?>Oz}сxoLGz~W޽uOIӟw adž޷67o/럞խJ$I/q8/߸|p$;qn Kj=kˠ٭.8??O6d{/6曛ǝ^6jMhu_e>g~^gq6\ͼ?8:=<]kK[?CM.v[۱,C|~O>_G?ӽղ~eaHjV$,!,?|ZΆ0FxM?9 h)wfQ~{??/d/q ?DV{_ZܽU) +U禵+k̳fӢDܪM@rv;o3LbgpBbQ //WڎHM8>>~?8gK 4o/K-%??po (Gx]{~s?|8>v̧qiaM&j-7]ssu@j?n"vdŌaXI~HTeRogtbbB :iҴ62w EA;ㅠ?B`` WYhŒS|X|J_ ,wx<_z?6%CM^(v>)>JP+)MOFF#ՄRTʴ&l;?tz.g9Kui1{gF,$QQ׫c?`>j},-~s;`OOwS)48Q{644YN^iQq^"))v(ݐ֒9X7\[VKLqRTq={3fjǩi Sa hڿ/t[Md|Ǭ{1W<68l VߓJ8Ãwcuwpr&y 䛥_W{=. brqx$TEu$H?)w’!_fq5N.R&"8޾~["3o#\]\4W/}gITNox W?ѓ?#w_=9]|z6ŧj'MU c^v W_+eH! 1f`jd㉉δxٲXݽ?yR][q|_mϽ9YO;^=|7Tp歟淖ׯ63GWylq\ԫ7s'~=?Hxo[6?%Wfbg˼>2? 6_A]#z!~qMey8J .ȫbdFbа3DCʻ;!vׇܲYqC`e}YlEsSR:IDfEI12k.S5 e<,@i Ry^ !,|f0LR7`)|Ď 3w ^m&a}{P]֟/ 2+O_</,7Bt3Sosf~%u)_<ӫqkYxŅE^ye7݇.|u *L>j:p[x{3h;y(ո%?U+g7kߜĽ$FLxMh0B;aB9/pl(- []'^p)sEǤ-w%0!ly b}rrvXЩ )en]G͎*/ŖRnd=2PFtW)wYR^ӹ~=\YfY)QJw7Ve{_mO~i^EC?9γqbX4 0b2q" jKSճ$?hfyk'z@(z'GQֱ HaL$N͜+'lʼƟ<9+PSŧS_haHk w,"[dIYYgKtha"k<̳Ud[ ߖkk'Aj,ڡݚWՅ{ղ]H$%y='5 wzjf ܰg?uS|oH+:ˀzMWzdYs#u&ǁmҝeKG',qPAڑVF - E;9R PrRdp|8WNZ(O(L1f Uj v̗ZL: skG*Bb%ȕPvRV*H U%qaڞ` }-Og5 CֆlXŲ0q sVu +)CC+O @tѨŴ2"MN9u|0 |> !Pqקv'ͧƀp,㱭m\$^eJ78[@JWYs[Vis 1ic'J< }uvj;ϮuY54t⌵-J>S岓s[g&V ĿԵ,`$1 b9ӭLp$KOTj,Jh<}G,2:dwP* AȄ sMu` Ms$[7MaL4+iM3xbweYڪIk⻒4`>$ۖ@_%\)`\V-H] pR—- PB[e$2Ət@oV2XEasUENAk)8䖕*mC.fW(4~K=q6609ww*6 su1L%䙫;ETkfsJh>Qfi9 ˷0DH8 8Mqk7IlaK%"pg΋IA__f Fne&po/vѬxMtaqqJQ$IQ 0AH*7=?[=xkpvDxikO)so6 N"ioN{bک#1y K t%W FKpU!LV-q -'Z֔PnK!n4%=->4-i-_F0W@h9>LX~$gIX\ȷ#fi>ˇr,bvG,=%҆ ;y(!o˧3ߪ֓ZyڅێG뾯 #\McXluXudi! !a1ƕdMh gHsy44 HvwV(]ԉb궨a⛮΋/M2Ь7|A 01_nj^9/24V-u g'pJms0|~ G *dYu*YTDSjVcIx80#hDP ^2/K4m6M-ijN ,‡HkhTGQL|{>ω[E5] 6NQ՞~G,{Qb:& Za 79}BC%,]:d4G Υ[p è¡Gx6z%Q/(̓>M-[&.8eK ӨwWk&i`-aMpCIqA0u)<1dRKA4PjT* ZNͣ;\vWc[|\`VNZ4"q!'YYPF\|PB %32ykM qLOK|"tnEl?M"`QM;C`ƷD/o `VYLC Mh;4QbixAys"a~ ^1g_vi*H|M'uB3*er$ tDCL6J+DKX^oN~gՅC2H A+TФOw*._j7*T[@`B &;1M7oAnj!kD/(g50=ypp2y|wa$d994U~(6abCKǽĺ ^GWN@b7;_Y.\cR3€i:(Mm?c,/Ԑ4%>ŐׂΆ0uԄgo. A6 .8@ƣ9 D$>Ǹ&#^F2Sn^=$?VTebK IKun}}0 yANHp&5FƋfxY9ہSig^Z ,D *PU*U^1?$V1{}>yf'`Dx`8i<>2'7{ \.&E%H k\"hAMУuk7@ F+Q\m$uH 02lJ46Ժ ؚ[6tYs?.v'@J7UnjO#jANͱ S#[Vjz) Ĺv= W + a%} `1#z @n'R:%{N׌@VVxjs;-Fhһ #GQ- 44C<}^Jɓ%7- Th +Pe} Ұ3U ʉtdx(*p_ VJ *sy?N*i~|*2+k{N5 [h/q簝>7&'MDQ-,šA3['HR?/͚vew91<ٝg36n|1^'q79ϒFsNTŠѪt呩&b&Pa":|nԹUl֠ja"4Zwh5]=?c; b6""x+/ Z 0|5`'H"v: Dg ()D 5`+겕:r0 0qujR IH;vdv&> L5S@H >b.y+JoCQYT:I1P\4 Rnb[& ʞD?RBXF7m90YeY&@[[kcϪ׶ݿ}ok%$4n2$eF~uT8?sqS9_;ۺ=M/fYb2OwֺY6}; oO /;̫Sbؓq#f 79غ$ڪN&갪((+]HPm# *s#J 2j,pe^*e0zp~};NZ; -pZ/+YԶ*Jn/~WDAUJXKPZ& Cs72ws/ڒTa['\d*@Mܑ4/jݺDRCU:iN.8ުN+VMHT.nGDk7 a&e> ^.FΧ#-*WDQnS٭jѴa[I=?^r!'pDtp}\+$ IDATdN+tpTs~jw6<*jK-d'\B_LJES9`^&y0+*S0h͉vl:6Khlb/OT"sX,e Ax_^3DVEhhP,I%{x( A[& 6.G& -Ck ̨/5jW~@D(]n:=w s=|èawvWٴͫ$/M%n8Hq(yXw^"ǢF6pSnTPHt 8o1̐FկDGt 48‹Yn LN+FCHŽQOMNB07" )X De,ՆRЌI!71ZA_;vÃ)QDb[T+v(.+&ߨhAlۘZK|%m;48vyj+!# ۂTןG(I=s8}Gd馝:0;&O$/=Ug8kbѕ+\\ f׍4 3װ}Z+&4<[d}2|\%(RℤTÃE.Okj)ya C0pN~$LYR54\hj@WH5(h SEU[wO:#!}⛵CU=_{Л3G_Մ뀬~RB!Zy<|u yO갠_WU#}\2x -A l6NU s%rwh܄ʷQ4Cv~F$* H0J1J 1yۀSC~]HuTvz8!y؝&`[kWQ;S`Y:YjG/ X].x%ÊtƖ,&MDZVmiQ¯Dn>.f=96EW DRaqrSscԯ'[M:o^vlf~!ȣ&=Sxt'8Y8W(@%!yN֢gmf?\N.,y B/i fNQѺ*'aR=Fx6*tA<PMZQn]#Ӊn~7 gSRUS0 $MQԪ,G($i|(?V^- 0suqwydozqT3i Ww5I\ VÛ5`H}4Km0eUxAV~ waZ|Ƃ:;;;&I<Ӄۣ S]PL VYpc6kf4;ݷ>ޔ3Ua{˹A^aΪ+V/+U7˗D§XZVD)OhP12!.-3*CDσɜ.ೕ~ð}DgxHӗ 8|2Ǘe.UEQ[D~ Pm k@\Zae97^b-Bp(LC,%/״W^۰5\s[;;nĬPC:H1FڔɅd9+6ɨ$@?L`o}jyg!f`Ю(e0'c32r>5 H~&,(& ηkg"pW ק F0qVŒk;$vT1{R[]bz\84fAQ'-˶ 3FdE?"C\[z uL}&y my;z%u!/ASKmպ) D2!ss>RƠEz1ŦT\$ nA[ @1'gVuG1Kʃ#h,SP 1B 7~/Ψay)C_-%X1-5"kr!-KkKxOΎ!= `&<'Ovil8|Z؜ʤaL'MZkA`WS{hmM< T##ʟQMB+WeI);YxخT"4dI}Xԭ;JcZ 2u/kY!|E7Ad-5cH 2+m_kL 8Azs" v%dť|@e Ҙ&| HMke !1WگJgr᦭ |F]2:\ʊ7<\Zi5Q&E/ridz`e~.Gf$~I(zq!b1@1q#DoF[/@d)"G&@Mfc ֙O%$Ź`аMȭ* V\Anm&@T/4~@VI3#8OL\I0"\Uŝ&E%\(?nqh<PVjԮ*w'Bim"6i澣Ő MԮ.ɿkF~mIA9~Ԃi0s.L/ʘP^楊WoΧg:uUT`JKҭfTufvJ=&IhȊTJW+_w$5 )0OӺܒ i|oijw#Z9M. Gi~#+}u#E{ yp Ծ7:S]&q'qOu婊Jf%,PqAZ髆?um*T< RԐ<|]582`N \.nZl)+0t@um= ĺhEh! NdCodF`;.3i ?%+*|7{<Fi)E^ Bm @ s2@Q9`7@,"{i"7dg&IQ+|@G+ɾY-t(<㳳3璙a>y*.`NUE$[b~5&nsYdMJ=Bv2Lq|@]Zq,e9A$5LZwiVWhץG ߣЗG媮](b #EnmҀ]i֩}3ۧr&5U23ba/?1e$ԕ/em))s+]O.{>!!O/V_ 6Q O /rhzK͸n|j; ׹\Dݭ8o*@Yqn\G)Yj9Y6^qqE}[rJ]v9.jÂ3HM;KmjV/[qcߐm׌nX",Υ2'+gE!Xak6R[k;fuRQD |^YTr# =˧&-p-yXmWjJH2 RI :TQG9W@ R ${&"zl+%KnI¹JkgSq Tvi<>13AT*5x ^-\L[5J4QP)m56ĸjs⦵B Qrm)T؎VEuliBJZVmnj^ԯ\ 0nLqvD|b#U|l[|bҪd$g `KʄowCcУv8M̈́v[aA8u#HmIegFA(c_ O;4n#X%@D38K -&_6'E߻w>rH(jGMwϏ"?^M] M{|<~ub8Ti=NӼ!0I@Î %Y-k&.`t!m o K'EIB(=(蹯ֵ$ M[a -2!D:UTUBX~ԘaJ /n{+u I=|a 3mKӌNOcΥѤ-kHCԘd$wihUbPFOmLWQm5;i7^yO-vcC~#ݜkZd)Eޗ,BdftƝɋ&/O?Ϭ[[ 3p)>)j>Ev5b@%})XJ vȍI;M;@/awρ=s T`+ŐK mWJ;DG2)vfZK9 njtMx@e,j=+:A;!jgj+'v@;dY5&dgq6]/Ħ!h&6Ru2>sP> d 4}iύ9B K7WWz[Qѥ6߈/O'T^]V{"hX%&]@'lQYtXL~|=&ѺDrLB`xm =#Z=sl'xӞ:%6~[T-v2QPUZo,Ŕ9s&.`/a6?ȶC*>9[qC0Q0Yo~44bĽлx)Q*0iលLf,v!ޝܶ k++Y1GMRuʷSwI8q-AjyS9Y<ưbp~f3{ zNKMz^aN F>K)0t/ۍ'4Ϝz8J#8~5Aj\8ٓF3l|5A%3gϨnߦ`GaӼ1kșEAҙ:Ckd`v䉴.[,:\mg,|)`{;cv}T>uLY;c?M+pjaUQht†+ŸQg}nK"7*L:Yv2*Aue0(u7^O?9uhA}#;4iWCgNdMcj\3fJQjY)é0KFP=%ڡҶzc G1vdя* s5b k*~p(;ju2+j$2$,/g*n6 d^%WƎddMjmW50j= gIꃒר9$Թ'-/ z#i/hCYo|1xyٔF5k[ / "]&4Wsx2x?[I{f(Qv㧓}\T<r, KOՊg~m@RC'C8n[rAK*J"f\o*C`o&ܑc#e:g(m_78;ݎGRlbcx֕AN &n! ln*Ee]GqE.oExt;OO IDATӥ~Ywq[ꀉB?CzX{CF'2Fk&Ѯ(g_R[*.Ft7IM.vA}YW !z0ܴU&>j ^O|ee >K nHUij?^mD4M :(L~J 'UPcҔs3V*V3ȁ,ceԜE@ 53cٜozs͸},[6S_]ŶsY]Lh &hyKQk%屶Iq]t/-JA'QVWj!J6X*Rf^r̿QJ_D=`dЯ3Y{zsm  (^LQKjAھDS'zBFU "Crql~c&,´D(Ş1R˳l Ae4BZ& R*p{Cʻ˾EneT1W.ReAڪ^U*|`3-d+."ۤ1?P3A}j4Z~B?Al=B_;ɀv+Z^/oB(%$WCO[U"(fF7w\0BBl]1T4R icxi^hWo{ꐚkrt%=cZŸPuhɗeD;zfE;v_ {xnNDRנăF?\[;vcDJ}JR%nV-̒F8,MV~}4inq'w=ԨlAqmhn;U}W<[!u'|3P >hf ɆĎ=j p!lPktP`K:plX! ƃ*?o^f'ߡ BpvSS\z-]ԣ3"p=Hʉ|(I$DB qP4- WP'=x`mHý6ko]✙kַ.*gFZ[[ߢpzs(~TinSt6Hzn(f(Id\]}E] m46hC6*eՕؤ@@ TWN{r Olh7L_{[y-g*j^8 9D -\0 Y./Q. 3ʛ4~mx2QcPqtd3Ky{ZwB|pNн47IԇozzA(PY߯0E6Nh_EI6ֵ4Y&+d)MLBɟy*i/ض,Q 0i22u|/u/ZÊ:!9"v4KOZ,%9EY[!&R<)ZxϜV[*zu GArڵD1iA3|.a*Hd]ݪwe-۾FGN\牪ֵjn:\VK+`!n.(v6&>(mO d`=!.tv/xgYNGΒU5E;q,1$ |45pfǟγ,]"w*/v݇In$aGU!U@1MܝlEWh=7 zɶ,l}}<†^8E#e^)%PhU4"; 5(͸6AGc ]cMRfM 2ȈPnfd8ANin04cRt ؾdJ!/!ڒ`Uj:1X2ZVnZ9v;Nϥr&;˂J Q>-<%-ن=o7I[QYeg|=h7Bd68d1'$hv{{{: C}BV#S1-ML:v![:ʋk^^L xǎG2dw~t>{f&FWw ߐ.! ^*rMf s훷bG@eh<7MaGfgB깽f֦tBSv5tnӡJ.xl)䄲RNUӹPm93Nh݂i_~vj+[t Yn#85"^_m=2ܶ`dZiތ{-|x};Ck j55N!kM5:"T::Q\髐0?XA2zswNt4&|cM-_`K.Uʎ˦ec4oœ\ n2YL uŜ6!eK1ҏ) 튐.ܓ=z o'bJjX*)}\pom /d% D38. у@3xl{8o;΃ I;tSuBWs趎o@bRrah?MQbHd{+f+UMA]qe^βUR`eK]+w`u.r<;O|ҽ'0ݔs['h,aFm#:"3)..DKPYE1yqJ+qg g^%cU9jyx @WlS$ ltF\,+/Cˆ+w `"1CA?@"LOqF%0ͼ<$K::/Yn#7gsOġNR,]GSu.xN8OO9ٞCIM⚛m`ȝ;@Ž*[:6f?vW Łhz۽ #jœHQt^><>.8 cuU7Idj@2$//3w8$yG1n@OJ`eϴt geMQα|_/#N9p,C;m.|?N5I+é~2 ++FqI]))uN{9 FwЫ65{N!r|[ݕNn\A ~o|e'?A/-ilz5p߇ylnviZkefECu.v@H!??{hJDƾn)( 32\I!rlj}W{,'OZ9]T9g ѷ_l^ yHJu_ L!G]]`p~I@1CcgkA<C~|r@j("G~?7)mcXƏ߁˭{/gJE!QvVu}ύz8X\}vY!dh7*#D)hj BkWEYKTJޏ?YH4 385̵@(rե9TS\=|O!Ϻ'H ~=We%>nttb+-9OyVbIG6`h & bs 1I%`HK6LHH@!}9)Zg8< C6w&M{DޭB. 9U”})3|unO%F:l+c@%Z7iw Leŧ PG1+f{;kim:WWh}" i`Q v|qү .fWP^JO iB`k3A5f CuCA7 ?VI(/R &%}e%JC'\փ b_<`d>JVqjW2{W3lϼb^Ob^9W= g|eg;}/;a?l-0̬EaXm nJ&ʛ)/>{MP lK(]" eճ(Z+-X bZ^,~$#o#{tctaooO{4gQr}ӭ[l%~D~=wn> 79Cu54^j3[CɆna ta E(Gz]ϷɄxP /x3_@L@"|GQe =%ʃin̗ȯ74]EokS ug(2LH]+G6;QWK()~\v>7땃)==I59!R-J8[29 GN~M9-I2rttJa%LYUf en0S~G$͕e(_kڦ†TTAiCH sm]S_Y-vl B -rڕi #K+ZLLkB'YIBJ Zi=y>؁Q"+m@1$g!~"=nz~l5kЋ>ֺ}lJ+(𲠓K$f3ֱ=R' (%m79Bw'ŠeN^ag_t~ݩzeB#Ui1Mmr9l)"hL ǧ5zs>79졔k.{2=KL:bطv}~_ x_' r޼6b҉"Zz&OYnmVWנieJd!kH:Z12"}DX27adg]L^bQmBn̂hRpksa؛Q3ARTpߺ+ty_'} ʷq2{ Jx\Ai)Zզï?4iu*lJr%Z/mz4"nG 78QptJ3{F#no({ۮ²-?Ҹa u &Gfm,mZS8@q|uvu@ɣBgA &!hvaǀ6}7Ɲ7v `bfh^&j&`#pCaZtj#VbHfVh+Sd$2+)TnO C.LGXްVY "+7 ͐Sp$~!ɰMͿV9&p)Mb(?ݯUۡCjPN2T'd8$;*67djh[&*"dw?|1!;S\]V3ܿak&j6/`& - ŭ= rg|TYn$ٹWY<vo:rkkIrS$ngu?r Q<|~} 7xWud*L%ˎLzy{SZ U+W82Z[!i&̖&kqo$1(8KaEftEgz. m~4Y,:Oo<w E}k]^{JtB!Bej'jwERԃKSd+&  +YKwlO]W ZC&! $մ0lc# =qˏ*U@ß6%vl 49-`19e5zv2Fl qPR];6y-k\.cH.hLJe܀2kFr4D@AP-z!Bfd4{]w ܦ`e]d[!f2(&B0lmr) }l螥YWPLA^T,Wqma5._aU_{բt^y*[TvĖ s !oVZNe"_SuSlw Ҫ'q~p9;R"͗?Q |ȗLft3 0l{. F$kםC,Xq rɮiyihEm^$Kx AO!J0@}wuGؾ]E]DA/ UA3a?@ͺ 5Z0Ǝ^Fq# },y{LfNPtk- +0Ri'_KKAv*A,/xZ{4"^y}2H1 z2Zgۭmt|];kN;oZl pک-Aoj0 ܸWwya}(Y^u3CB:3d{ڄPN̡+cEeAbPLHd?esEIfBҼj7i ;dkɊte/0{ȊىOra1 ة$~;张uf Җ#pZ;̥mDGEӥ© rfGV1CY\`f$:i_.C'm@P4P0hMLN֙l t $,htjtrvVfZ40 !XGe IDAT0>oQaƊVolN,6AZ3OmKC_ Z ^O h|!9祲i{ShKۃ0*9?*a ż 2-%8|L'F!!5j.izf| uKqI+i5t M{8ؕ:ӎbҪ t]3TZxBN^H@wL}E֨\\cPu0o@QbpSDay0+˭cdQ MvZN/)&y9JrҺS,LO37*gZN d囫oL1jO5Em71 , @S+ITF>e~C17Zt/iܚTêJl!2U6N1 12Yqt=Dbz`nDRw>`0\tB$eYY~W;`Ȋ)D@M4)Q1{fN_%JcN>Κ6[F:@e|a bHD7N:0i*Z]Oh& rkH|YέMQ1ChXoXGavu+1`?o  ^4=YfzJ㗘F0%hB];t=]&V;8APFDtqUl<7Ў6hq \~׵$K|C~~vfaH͌LATrNUl'PoA4IL)j+`@UySq"MC]#aNE(zr"*%_~|9iG˜7PWd᡹,œ4d!i_$B2!r/֏ :9$dAY!+Rri4+ d}iLOֵ"hAPY%4ȕ gSsBxDLӆC!Bܰ{j&w ]IN۬7u1dj{`N\`>H0AXIqGޯ/h+6Ǥżbu:ae$_FIO_rKms*EV@5}k:Nq4SWۺq1*M~(rjI+ulA&/9dcnޡv`Lu$7'9[(~`9Pz܏{3-cڼyjii‹t3s}:a&dнŰ%''`=(j}Dx'e<=l܍ܸ Mslv" MS|fxyLa[Bz'މBp^\O&^rg Q ~;ߴٮ쟊⇟O¸; *wD"O3wu*[М$($!1ԭK92}>D4 k8#DB*ɏnYywh@) [ tl:ime+*|'vIJv4 ,|ge,>3sb-N9o/AHcduڷ]^Ǘ*^zov~n>loVHǜI`4J>Os1aDȎUzIc3NӻN{k3:<ӽD7ĸO1-zBtH)}-$`+V,#L a;ȶ:kxB'O46F9=w-4tdM.W3eЍ$&ąs{" Q5F:Xr9*sW;n|t%@,Jsyv^eWo8c{dUE_(RMiU>e =3jJj g& fEÎym#P!#sCj|̻D =3:~oqoI_̣i|f}Mq;E):es~>Z)=f 6=g'o(8]Y'=؏L:E\w?d16d76lsl@}tS)c;ǎ>Ӛ<1!2cٞIҮqϛIϾ3,rc{&HL_\׆%3Jm:2NwvbI}ǟ6s1佄C?>Ue0lӨh3rLQ䌙Aqh)OTj_o6lXK$==C%iZղ>[w=h.Nt(iXho_L7t<ȋi]܍܎Jlȸd9qﲃ;ߧGwzwWƝ0.=vŕl@ޯͱi%jjYB3arʭW?΂ΐ(l`Q8S77h9"YO$@w*as. Q7Ŝx"K..K ^ﺣ4w]WKOohNd._>LnYT(Ag2V]p!!B~#m++6P_&?ãl~-@D &  ++ =N4O4W ΂^_tP͌%&T IZ#} Ctx jv sz1J6LvNۊ<yX£}7_E$gw`k'^W3$X%~]] n;s}M#5;},eݱ]  KByCtJ0CdJF34hsi 7R`y@Kz>12>;O!HlM˔L)U jn4G"r0%jD69#3кнyK.f1eAg_$ytR0-edֺBXƢ3{zm%Bc(ĜrO7!'e YzfyqQ|E+@l3wӿ"*Y&q=?&dM'K-5SCk Q AmAɣU݈C7c0mq#Jܱ0XPY@ϛŽ:׋{_rNV.}w쩏\ӽ{!9WZA~%w Oϲi8**9cܛ\F|]W/Oj2Kҗw@4ћS:!+E`eÐo|IyTߣdt=HaJ& >}s B9 dX ґB ak {?!?1ЛA@r]Y; 6A* OP[ɉe(OKJIG-7۾W_~/GcE3|d2ݶ\ މBdWAM|k[gz tȯg|r4n5)>A*%sm*7տ̗/o8㬔n|ϯɨPSuzF>p~&|0tZ'Jt("p${ݧ呒¾,wi\o1h#@a7TfPQԸ^ӕ}߁|43d_rs?'Z2Baoޥ׳Eq0D_%(hQ7[d} HvftZx&:2=bp8dy/|IWe< QhhZZ켦m!3]StR̶[xz06)(YVNoFo"bTSFXFi@=ȃA?;(|s)Pc 5BXx a*_eLMtN ڿQHeXhYuz>dN̕痗,Q;x .!bE U8z!<ĥEM A_k Լ8;~ȊsKl7~@hğj@I2^~[9.# >STʌFS7&w=o9uR=XbWls?\ֹ=Z X?8KSq6zn_eykia䕟X9`t</k}`/r J|MŒ2D!g\Oc7&XehDz,6\D&? JgڑQQ4KP(`}&\ТXD\j_=CJq_6Yl4٘6Y; (J@wys~= @rd.=1*bx/PfCG0UCgV3yݢ1Y+eņqkUî8mljE- A;5A]{̐ToS\M8 ۸ν'>_Lr|ӿHg}oypYl?韨,ZN#O_]l6tQ,A"d O8֔d lZjMA*HuT;g;a/Xx3.,Q|c%x!0zV\̟JM,чSC!+o #K`$Sw@q_k=. j.sЪoF6l,9s9bZ e -ycTz`A\u&€idVׁHaB>}m%2B?*iiJT 2@SY^"[WdM`dQ´ l@];!ofyI,z'ّ(cmUXk;SPy9G蟆Ҭf=Z~GaYf^!t3gC2(dhgB83 ߐMT1խ^*RKw}bq.tGU<׷$y>˕|eP9UO%h] z|dBW[Vgp;gY.Qz]qӧ_=u `.VK2rṅh0纅,Q@dv4%ݕw\-{Z7#' = :쒢˚-1X=dEM_ԋ (nFP@` A\c4%&ό,\ *Ki56N5xH`%Ol+W!C`Wظ{P;dJ?Ċ(Uo5NE0Ơ@Yy68))\YuUtDd#Ae{YY(/&:hQ϶q'ܞ5FU,NJ a2YGg.&J-FBO@32]5LN4f"To_n4 VZ'X@ S?m!7f쫿KEoz^cnhd\X|4 cEǁmO%1E}<՘vZAyac"Lu;OE.hB\h6$nfQa,vM$ݓL*ގi Y|R.բOˮk';TwI2 jԅ- *r;UdiTGm#DnMf,뎶1K!R1tv%5Du_! -ׯ_^tZѲ(z^[2l<?By Wsu3k_P ܕm7q/ |(zt *]= 2.~/NWpJ`ԪgF(znJ dtӍXdK1T6MQq‹#q;#o.4_`o~|ٙx)0 .)!9vew_t&T@UC5C򮠉 }E >~eL;x C_"y.E!u:}s͹ b& 5hHMBNT à2QQCTaۣ:Z<ĦL5Ff&($5(5 yw!M?*a eB{Me4A;f%`yzB%Pʻ|e~0ғa萰yf%n4ԹEo4j|݀A}*!k#Ӓ[[A'=$ۨ^a0+8eK- 50 d<cz|xXǒkMݣs()78@˪[&lj~t~cr]Mп*7fM~twX?/j&}d8ݎFBOu!95(`$KR;r{ c [L PZ? IDATm\+th I=w|AVJz.i=!DYp'7և|̚ M9ɪិffj^څ~OH3uYs{Y!=p9i_lˇ`pYD*talgZ nW$C9{yF@]Uh!Rm?>#yC. Da!ѩS]<%Gw'}츕ͽ\W9PFYR_6P `)E +?=H}S5Fg 咻 ze #SwslY~G56IwNڀ SgW)U*^Z[Kf=*}4gޝۜSS$oE,i_Cw-W;9!;\Wc ~G5*03 ~Qܚ,:!9yzCE6LTCω<^d'3L.i&-m z σ hơ@ hp&-";XdZF#/C0)&FئX+Zzq ]|_A7DbK~qi+6B|aף~EHS1aV@"_EX`M34AQfq [p62&9]fwO'>^ĝ#3T(|u7vSWO.lS քL&?ZV}KX3dO>"$]Ub^󰃾񎅇hf$z.Z|C۳A % !o>Y,ߡlOVmԴ1 g?;'k$Yz8w3GwhuόSY(@¡l4ሼ&%+Q=a-L(xS,}Awѽ~_Zim֤|%xZr)Li+i>~2n\pw^w*10Aō:! &rC/,:ϣ/" N)^_1PӠ;M Fn7~s9Y^\\:$WPԞ:v"< ]vϫNSW:͆skW4v hٜ_> UYlF,RfOb}Tؐ<ӬvʼnU*##ii&>Qki)G~k=#VWRGP;=F\\\yo?ҙ9| 2=H? 86| G8Ofϵq#LOG^973!l-_cj/t ÒP*PK+3«̷~Awv{ߡZ:sEqFA tF1L/rC\\4Wt.$sKve Sf|4KVtMF6k,ՃGOC3h>K蟂W=e/hw,6#Af"@gm>p&1uZ'3:Ѡ#:gK%R C76Z$&$Vgژ#-R N!LNFoEEbMy/ /@ u8x4qk  ~I _iE|N'slڣ $YVbќީu8FE{L.Ng0:TЁTnpOŌVLKu&:)H #ڂa(c}.P'.!6:]DxAF-nVwͧN NF((t`S6s:ܵR` oN4k~Ͼ5ROXmӆٻsz5ms/J֍La]ufLE)'e :ܽDttWI*txJ,Ϝd./pc*;bwU,r{p|.7SlTU3$XdD8|P9#\쾺'?:#lNzmFyF1_ zr'W6O}Ǔq+1ZaYrU'C:FuA,vfYJ}}cA56)6KtnH-jf9Õ3Y;bI0/Q9o;cA!40C$@HA(Qz B2T $(CPP?&s^dtUC(l^2Ék`" $i8MX*cifħ57H::`"`3ٸmQv A>߳.9h`R.TĕLg3˱~U#Jc7rc"~pz}+ Dy+'t3AV]g(O̰ʍc!w m3kŽ$֍PԪ2@Q2YLJclDE40s=L:GCKwQOECS)g_ #1Qg!HX'g"nG·cT?&&H50z{n*?wV3t,4$v /~R˟3 )Rr60IG E}cX.:_NNeϫP':,ĔZ`2ItPb$'r*5q5l%(V"MrOG LgSや5WQkڰSg,n:bq"GNc,(G,P>1~NN~w4ii7(mEM :,N\R[K!Me5!߹7 JBw𺖴#@U]mgFT=+nD=XlVr*aڤݶ6rT6BC%M7uo,BR89XnqM]ME(X@x⪷yƷjqlg~)mo>ЂgٚS ]sKc PYEfi">T@N6jboʓ`j.jSwML0#sb5_$'#6VGm\fـ@d3xm &2 G0 ?6 _^^\INW^و:KBBXmp`ZY[/2>ʬ'9- Vj8݇[n5NR<v $côqĊ~l/ZڶkFT VNo_YD}eՅӡc#jՒ&}aKW1mOí5N?8eq/M[Bfq,"h/d~!vL0Y[/Х> \/3'ޭKڭB QRɓ^p# E-Z֤:Ec˕Xb3:wضTUtA"+K|R/Pp4apr|I!':Q?LaG}b@[A<%ణ]Bh+e XZmMLTs(9wU2a5 [&Vs4=Yf7٧|75O ,&σ1vL;srMkϙs/_ɧS{OuL}r/-ox_?Vr]Tz1lqEHMh,]?wf;Q j۴ 0b=C5I T/߮ȑ,QMS]l.דٙJ*fSQ3u6Ǖ$+mt!ySzEh;X A1/vƕՕOD!F978_Vq׵8[U35zR4Ma"Pa] Vt898b<#Hڨ bL͠'me~UO>?Ǿ?w gCy%Zg7!_777ep6R?/}iμ /0ѡ0VXo3V[ai b5rP-_2HomhQtjw>`Tk\) bJí>x=PpڀB$p^\jZpFCUtƩ%`i&+R1DX{?K_.)p  8{XHXpGI2%JW eV:dRM;q&~;tݠ: `!*r$RĄ.[35"SJLHQFg?= F^I]=qIJƙ?v//2*bm?߯ˠ= `= % e2 E176 <)4I8!W?3̏8Ӯk` *X"~6dOV\Aŵnb dP!ñM cQkO{0V) ~,z8V&,]Ԙܧ0tge̚*fDMl>~qJ; Gu`ie8$RZj? jUqi@ s$^Veׅ(Fb[bjuge6OƉV *h%nXSu#UK"iTFe,[\?Rt8żɶ>zW.OuFyD7j;~Hѝ~Q!i\ pmҐԄhu!)HTO/O,VJkEL!d52?U@tZ0 6uF$i$ g d=fuTbALqMC|Nʩ.:?]bu 8c >+3H;P.Ko>Upm-ٿN7O{;Sv`|XD( εZ%3wr 'fk&h 9hwjvK-ts4:dr&cB B~ƕr\l?.)?XnͫY;;5u_7lπSӿfhWA#D) Rj- {$A|F.Wi­0taU ׋-GfsywzƟ.l3srM"@ BW N06[qlhh,tCnY̋ a|e\<k { dۄ~5[0K%η`pkzgͨD5pc?vt{x1n ZԱ@]H3W.CyV}p0Bа.Z0GR;ΈI#a4f< Nvw|I&6`UM˪ 0_W~kaяʵYD5/z?(1vWVG*rcJs3M:3>Y>Mp_QjL$<R.( IDATת^U,UΘd.}lw+'j0\LօyAD q^u % !+TJ%Mb{3Oo EqȀ?yHJhP8M]GI,X-Lޝ >"#Oq K rqf5 ܵ*vԪՈn?UQYIշm*A-@5ޡlcp$\8GFS:x!w'-MڟtCN|4lo;εEoz.YQwe&,.%O}tcsDױKnܪ wʧ#83v\–[ <1mͩ-u۫GOZR;KgT`//&b `CV!FUS-D'fc+}nH%^nEJ_֑a QG;ᷥL+"8 [4S1Ս2 ˙`eq\ }hJxVpkhWW>` LUkJLwծҶG<| E\eAn.FܠVRmZ-[-8q-bPg6Mp5ڽ]W.QBY`:$|j NiLJnsl"/ncX%͍S!D*Vw=U^%$ tY4\%?g[hoZq1 , )ot:'-vA'g#GWMt 8 V V|~ArRwC p3ӼNYc.P_"Q wL&ۭ^<m\G`;9= .yDs]iz|sbGǕ hinoMs \(C:m$m k C4]6#,ampI0s&8Րz5oI,P@[ʝd=G!) !ͭ2HɎ!-z2\Af4A88u.j!61cp&GanWGnƝj~La?1`q4[Kܦl8%8Aǜ~ i^'ZG^T^UB(WEWڪ^p:[9w2Ah%p uELΘqլ/Xbu&*z.%Q?`7[͂-> h ``Z737{ܢ1ZKs;4`*‚cٝ" `༞cʢe Ħ&?6`vtd]xQ93YG';~fppO|壿1"D@e*j~Y^oC.Bct/Fifg&80 -B}0 Eh̔N"إupw8'ҡު0:@XfD M&鶗LD o'D>8}r LBFZw z+؞_\7pp YnI|Wn Ti+#cMf|El ;˴DkL5{ F.E53n8[=\-2ո\/G芼 +3UJVGBB3THmVk% XY] /3eU;0T:qfoP{+LRsbyjhnQDáo>X߽yu&f,Ipg`q:EMXsr0liXު9Dj?dE!蛍FD ^]?QD(dnN)_&#S>/=c%>D<a:0_ LҮ^9qǸu`$WFYd< Ƣc;3eٮnvKVHBʘsp; ;/2a2\XbłY,:L~$>Tƕ0ӪB5.&ANkYpxB q (,5NFU }qK^]GAudCQr/\ @:zgE:piQ1zd|T?ߜOl>c o7Yз/O.urB_175v&oEA+c#!V$,zLNjᢅۏ*l;nX%ﰹ& gzumuH/GkTN2"LA(q6^>z.UΡ Dmᢀ\WQ=1;c/ ,Yy1kR Z! NQѠB6ɸ$21jr^Ԥ{_$0Լo bS䡘lD?m7 .Nz Wkq}*[N+lQQ7Շ4?Oh,7j0R`P5| j2E. 10)a޳0$%4Ѯ$`LnEmQgjFAuF(=v~SƓUmUϋ'SvocTG7)chQuȩg쑚R|bs9vо k B&^[ִ &oj"Bs~ Lc,6-R2ʺȉJ\E m,-q1]6~P_)?ϟSlU7\C">%@''3|1+#9"cm 8z:B|3&&ey.0q'cs) HQ-e. y:~"D8Rhn I?:&@\SAa?r?+}5!gY]P;+<<؟ yNeT,fR$ LrԹ﮽d\Q#*PRQlg >fO\l' jdsa*y 1w})9@0U<:9gҜAұ\W;r. ugB7]F\' ^{QeBQBͭ2zKlX.9%1F~EQ ѿѾj @T z@׌vSxtjn7 uD_;,wh*1bTZe߰xÄ ZlS)YY<#=~d @XpI&|hLeh2j̀HJݶDɚKS韅~GſHҕp4mOT6xv5dj=G2Sf6)[bjP5nPQYQWZZ@p9=D̨vNԴ%#s84Ԣ.bWE+Vv\nFl|4޻ j >g'm\[3]7"#AnM:edͰ"fb̾[ҩR;}a"!J𹂦$a1C{k:# $?AHo!&)P *k+Ӭ sgz3-"ԪR I8`LM83 Ղ86zrъ9jݣlNguԓSƫm''$􉒠bCuʩ fO5)dq |TZ{~i$Dk0QEUfA\ T06ݴz8AZ_ E,KN_}:kMxGʌ,: k8x=By|pXڀphX`Ɖwupw[қDAIa%9 ܸd4?-S>…A֌hQUsSsDbo߾MMljζ+D\x `iOՇm(QҾ>.QՙpyHSxN@ ,`g !jc/\ĩ7>YaZQ1dAZo݁';ܟ6_T9H-%Ll|lĨ puMV5BVDG}K7E)/wŶ]71 pJ^_˰=]{i$yyH,TBkPnɪ]au7 qᗓ}sGʙzceK;P@&nu+ތ=62aeQ=?vOi^K\X#Rbo2?v#X׆"~,*>s%ݯfk p~c쟶'_V #Q=,G# 婄'/1MUL`mXyMVUyUziCJ!o8kYt:gN5S2VԪuu9N9kv:>u1>Om{\(- 2o.r0󚱛10f@d373`yc\\\-nW> NadV[p]MHDI _d{1L L*`sᒕaB0p(MGުmhS i:#s)EvZ?< nmLW|D9/*-U\T~YVq8088@kxVK]lF,x vݞB\+fW%)%Eo@0 CdIA]vA~-zL]d>dz(#?l-ip8N $r;р xAf2 Nq6-b5D2TjQ2C!].Gg!2cÿX~ \ RX3N7:O9}%XMJ!]QO=}+1xمMp{```k5#S[m%5E8)OEH<ֆXNXVnB߾R˃ k&&USF@;&@Ex%yq +ʨH`6GJcRHtǾ[,,1W\8*%b9%w'V4B U5k1S{E08:EjJSzmjx;T Pu !)f9dڅFn#xqb!?Oh1`hGXpw 6ڂ+=ԲVԢ(nIswg RL^cɢ1)[7F&!'؍R4"=ڦE.y '5@Xd->1&ߌqU<׼sY)DUĎ."3iWn$H&=mgŝz!^ .}Z nQ9jmB"y@ϲzOsL?ݔk-1Wa.Yc˭},CZ!|K ]?WB«6%,$ ܍+'~QoK5 px1vh~ ͕+6 `{$3ᶶ%7-;'anԭ%M "DZh9LǦ\ev qbڡGc6y6&)+`M@pVȮ~S>X}{͎M[ ܜc_tYEq{uKdns=uJg xעV{%6B^rr<'dbY7©\!osl\קSkټCBf@7p a[>q(LȲ%rez'D]QZ(eו}Q7NNN.O$ EeH!.Szg;Uze qs0MF%( (HRVy?«њߴk%.l uiɼRC6A [5@[5 -o™Iozq!wg'QCx.׾xAscMLñ p&'8wba]  >a.">#a?yU7j/@&~&}/^../p3nnJs+Ujm\LJN]g(+ڙ]sim( b[o3h+uk=e쉽 ;8m⢈Z[8.yQ?kO9^u&ym5BfMUv~Ef=mQ o[=Y)>!.8WXUȶ-)ylj|Ĩ'jUuRU''KUWф^Pǂ P\e%SfBy<*(I[4-+.&5/2P>2ܪ+GE@6xS 98k URxع 3 *x`&7OZ;-*tWmU4ma߽5A݇(y IDAT2\-%`kp"<#t*c3b˪Vq}f3 ] iPG1Yb.;=.1M+g< ,[b7.@"^x2DwTR =檷PK61UaIlbZB./ 9c`XLm&؄]5PMo[n}?ǭP0LO>|qDYx~h+~܅[XCnE5ɱ0s֯QCz8s)_Ǫo7_`g滬fx`LwXRڤퟗbT[4jV[5 5$Zb=gpL+-s>܋]}8*0} ?y% OVN3.Yc? VˤLcX70zl4J]b*oDqm&j¿0>X@[aB8#[ aAF dYi[9mŸv~6@͢VDH;؊PFaZY#|n rU|Lv'I0G2ld:163g[u^ lZQөF-좇z)]MvTWzJKm+e@1a{FN5lC|uuFEۀ[bƒ>Vq#q,W}쿭)YBio=ꩊaFZ+n{&7t'u~= He?C? #,P* 4/VVl_Kǒu*SUd CQp&z8XJKtlo4fFLD̼4+2qIEӇH# p? w}y͘Wh}1es;Sf|:=Qƻ猰C N2-KG"Q ' )ݔƅw0է_HKH`S%C!  yyXĻ"FnpO?̦XmNrWZ`,k{捥 <_~Jp`)vO! pygq>i:tiu駟OH ˿2gH@v E>+gj0q sJN`a W 2CQUa3d5۱dkl²ūV{KbH\a&lFB@1aD qT ȋcG3(:"JgDM#w``W9$Z]8Sۋ%x<G{ko#ȳ̢Ƶ%]^p.qƓ(pΫiF"3&kI gdr5!II49hXك{Rs@Ut`VMxnp(FF洰? 0M b46t7Kia5$gBOID:/AIyZqP9LWSjՍ֏ƞo|VϥMܶIǟ֟3oQT_?q#K 8%yRn0-0bB]Mkҷ45_AX)Y(3!%^9|9 ^xufVir\uNAؠ&J_Iv6V;%NZVͪ鍃JT6iQv5ik2>p0d_3gNPSyut&5vf|wFrˆ[Ĭ3lFJef(~">Q'kYvOŃ 7zpCM+o$@Uϭ `.nqٞ0YqU5TE9}1"P-Dj8x{?Pd& }xx];8υR5F1( M!4ac'^e WەC Vزךh_L5߼q$2L. !%qt! vGX6w.pn h"'/ ^n{V8ձI @$1YS%ǰLikjm˵\sd1QCF~VPe}6pK] ݸHS1á2H_vErȋcy :ZUM k|P;- LO|ct1?Oa?¶8x׳@u>KրY0/Ǐj͵{: ))6 {ln1ؿNwTHK=LJ,%UA|‚R7 ''oP7V[ݴIڮ!a3B 4yqFNt, Ф^7[怡nVj7)m]_8dLi5+J{"I$JXꮸ#~4 C ^[Aq\3ܦ!`^:tj,̗EXp ›dcBAY**SY6%5`t8#Y;Dji W9GK$C.ǨT *!{={h#g+ӚlQUv͠kL}ipv:%&ݝ*B^y"ǏG7C (*ܒ= 0G)wV(m0dUyb# =7`M#\_ "TYWqa! c#/ ]30w~pG˭Pp֘CpDldNǥb{Ʀh 3}p3pG4YPSp]MBͣfP\Сn .WeNm*CqK'͓)nçc QfzHd~Y\Ƹg1pď4r[Z3FHLGb X1FgƨDٯ\JV|DO\qSkxDpt-Wg7c?`sҲYKp~Dת @? >3E, J{ߥ'=o0 -'M>coݞ ZmNc },ٔdғή7Ĥʱ T0KmaS9/oooKkZ^&DzJھc3ǯ cZ{ǣh-%STzJRbiXry8\ʢE%0.5 }c/n⌭ }53Yn+߉ ԩez94_PE܁%P Τ&GnxUSᎯd[ C(*At=`Qӏɐ=!0o fi/}T3f}Q(Ԙp`_ΰk5r'h'ӡ/fR¯hL"=4LqLjpN 6Úv5ls}|:(0U CZ7-Z^=Y d:8%-H3^wWG]:xҥ .|RQZ^Kk"hGX0zA]|Lw5l~?%~B9o]=8e>>&ɨjwFX3;/]+IuMul/B̈^CT yE./Zp <^LϺKͲyel0Wpa;\:DZqn`I5.*ԀX$V|rgYjv2E=Hr\XT~S= ʔRO8?$?_|E^ -`luCwb5lwlOL|K5I=O&xOBHQyUhC=Ҁi$0Zt;q4niZe9e3}vmy_ym'Rfv\4lp;Jm~>"u. bTXF WC4i؀,]aS+Mt:2s4jAsS`]T.炛mZ_?)kޓQFêU`řz7НINf&U|c5|^_Ѷ`.9Č:GhWPBy5ho]iіV e6bZ6+楩ŰNvaag"*QN1Vc5}`r'H?AvA^ >j-ˣX`1v۳-*`F(ù[ΞL_HCx0lYM YDPGM5>+_aU뎨^:H)umI0Ns/VU.vl5Y4Ju[Le5}#z8ד#-FVr:N'W̴$jJj5(k,?)`Ø'+rz@E>vc8%\WXg֨9U9ڠ[(9C {S\޹͕Eky_8?l;a0|߱$ zuO$p<6L82"fC kΝJh`[1_`nBԡcQ /)F83BNր|8#hR ޣf d Թ<8V}7kc<@?rnw~j!ȤPy:=[U5o m\0q_')\/=<5~F={S8U٩륮Mt]vZt*ZRlmjtsԶncܬ/ eyp䝚a Nڷ/%ĨX}jR|}g`lViTfbc|X|?;k;au"_,hߙ33jZiQ$p06y Ϣ?f^W<'CD %X " zr5eWݮb*a`(p8y97X\lZ9w֣9x,Jv[<|PH ha˥䣉>[,RP :7K %`'#q[W$[ uQġ*q^dh/˃bV+G1E8{TB+;/VFX 3a&P# ڏLs-aF[K%Ȓ;Yv,ʇYAyZ e`ꉑ sjy.:Nx#oLg9.;J>@fιH<'Π~Mi9b Ju yY)b]^b\NO͌83~8(*V1$L.7_3jtEVĜ 8)1=\] L \#އ?$eK-qęM­` ˚RP w+@8a:3>LoG  ]9דr\We0( kt<3| ~Zsʋ(-ڊ ̈L*#q ݱ3CRjhZ S`i9wp)lQ+Q,?}x nUU>|+me~=~eo18[j=]Y!ǠxuE(cƩ.(Yx 7X8j-d~q3sؿIlfp)FrEp/R\KضOH1~?5VE .fchYUXBc b$;Gs=G8G}NcyQM"<MwiM)_ꡎڭ"9ƂH(ŊbTi]+LH8<ø0CxcT;O;ìl}̛E+w _`/0{DOLUƿUPz]䫗/1!xxzY$Q IDATqhMFV؇+uFzA믏O~ةKK o&tRNـbbj#1sx@uҪ}kib;P8_21wZz~.H[lN+/0{?ZMXJB s9,!ЫK~Jpm^j̨0&@W*,;5-v֧3a( gɨ Kt\:9HuMT",!INA܃*&vlHX9"އމQգ)8}RSYeYY4R=5ZyOwx02NYhjyʎӤʹn%Ώ5uau_T@9Z(qEvHLu#5Y.epZo|84H1K1| rp V I)tʖZMA<~[`y*\H=T'@_~ga٭q{{5=cTaQw ׅY|i($O]d *WSrsuMZ^0L̠:`mSIbp|űxQ>-j|x Cb+ >k%ƹ k^Vw(%2;Yf^7T89Gj9s3Vx(]EL/v$]s0g#7 2`/FV[t,D-X`8GN*4Ha!$Ǫ~q!nFnV/6cw L7լӟ$o ͠:1ێ8*͠Qb8Lʼnzomb< !:/ Ca)[H|9r+Z;=BObrf_I"-oR{P[Y7۷;>4rCsl"Yr ^k_@->`*΀:8@Ԝak@ȋx)J dәU*ܸډly5Y3{1}24F6@ΰ*됷v;AϺ]\/絲ld|278~qɴ ySUႳ3׭gp&7FqqQ jf\wY>L^4tV^9h)r,XQ0)͞v)qf GrCa(PP^l0>^=+-.L`5F ץSL>&L1rY\T;o|<kLKEZ)Kp^} rwD'Geu)$'CNpVSoN^₅Ufp9t, "l>:.fkQ3lSݞZ'e< ŮZKWyiPi{E-Gܣ\Q̨˧~phh]2mldD`~tprk ™*+x\ۋhuR^려e 2dM{;Dd%Vsc 7`;\Ǫ3Dqи_pơ'Ş +` ׽ c8P3SpЦbe(GtP%j(xgeyTx=ZzL%@iT~fR,:=Ykti+#'sרH1\\<۫'+9u⋧'ˢ`h]'S _#0O&'y2{NyvG% ,DyDݵz:ҹb*M0+Όwimdnjdz\?~O>pqSQV:K㠺l>LY#N0vb~X?ZMۨF0Ƹ-Y#W4U<"sT8w4ФFBmxG24a%88ԉ I#Aܔ8Tz&ÙNHi*[q%d 6uPtUNϘtGzÍ$<27q\"(y06I~>\"31<۔Ȝ~DEfg()Is;'B nH7ZfW?NSH&Q”0+^e]Mzڃ?0\{JηI^Y<ab$U#Q"i..DVK ;`< v(96{t,8+wCc닟Ng<䇨F]O(M- Ib10ں;&*(/=مm#Tbj*GQ&3?S/n|44j/˼cm(s!hc] Ǭ!,k;@f)ϙL%,\ z 14ӗpY¤8xs;}JwXJ"JZVP2YW83U0,'G(<+V9ֽuPR N9Η(:F@OE=Tw8 gSgM1VX$W]_%J]zqS,Κq4 ~38փw?By B-v)cg''g`paLj6[@܀ i$~iv8㯏y4ifK`eO~ai8͔eT5X[@Mwi<{ybw4qae9JI&@\bQaYn6ub#~i  LKjpOqU$|2|hċO$_(z$1^60{b$ NV BajWGF%`6 ]EJLxQqr`(&y ?spavF)*쌱*"eD'40 +,EnQ+ؚ7vSW Tdm*_Js ZMQ}X_X<*3/f&N_ s-O& ;:.)(W-y/Z[ xؽ>)drv:XVe5>S[Qk`nA|/f鮡ZhVs nPU$ pqTA}w\ଳ ROoĠ{=6K'fCw7]ۅ]~5*>Xgt,fֺne]Z֓A7*H4h"/t-ElR8Iߴ OɻD)eee.e<:N%CY9 I~F g -t<Cl%I { WD4K 2kAaz6FX%g* c9.D"cK X~Qþs{ߊN{ *W[{'zY5쏃V ~(Fb+[9JKO{Y)2 \B[QLrvōf 6/UdeɭoߤtppZ'`hA6"pq0rj sJHTyׅE6.-xb^k*rpϾQX&VW;&x|nBʪ +g|٩38X` XS8tXcD+'\wnuyI![0Z}A$uSQX*gHm`><]46 1㬨xiFlX܀95 4yvw2Kb&U ~TRe8\ KEfq+r J4-1x +wp@r7+'n.g,@/qEvet؝OZ&pj(k4%&m=1ăŅigb0yYn00QE׉DI_yQi$n?^qþG~ؤazDk8LfקI 04,8r([{G~>x IDATԆ#%]=DGd}[b7lF81sQH7xOM}@Nz' G}&j±%c"CvT <ϔfOqj/(dp-kzLuX L7/n#wsb8P"h+pJOO6l_ᘯʽ3}U3݀%K3L@9>Kw]_ZC2`?' y׏X7êF[3{^3s"]F^vƶԞm+;QM= >(0p%= Q~$L 2rڕ 3V"=RN/T,eR̳"f$z*)Uu߱rׄ5J8d1/fFQ!06. &ZI?>yٛ M ry~^اȪ0㆕䲌ލ:q;tpb?_MlHH5#d;B?;QV{ l 68oGZb㘞s ps a?؉ٙ ]&o֝0Z;ZY9ؓ n})6nn>h>Uݓa$]púr?9EvAUvyd >syySG>ͫXFްx|!Vp4I2 v*ZIP()oO"@&auM΁k+Unan`29qTs zIYdWuWŅ`%Fũշr@rpl7@v+I8tD l8ia+PzA ``B79O/q.6{08~bj*䓱h?WN5gQҟp0]CSKϬo)j097p95 F-Wg !APw[ ,guyʹ#C53 d mBqa l \ZȏB/X$@JAl'}LSvGٶ-HnL;Iof &Rw<Ċ jaS aUӅ{R$/||:cuO9ɆcO>zj/WUmdUgbosmL?*HQو$o5lsTQXQHo >#q_# _]‰fkVG@pl pkV#8`ԭݨy9eLg# ߨg Ϊ#f'AMS1YW|Z?ZOvCf;0|49sIsdaQ -~ [,iz1VN%:77E 6Z;݌Qb7g׌%5hp8UϪ( xEqۮ$w{9}&[8T6Rp Ѽ|S0?рg}d쪛HUqd+ӐYxcLQ#1v p\ڶ؟ hxL<cs1=׮w*;Wy~%Vw~Ȁ r[;t1#tf; #u2"l7׿b>ęN֢|,E86mTc um*oRbޞީMn/~:kR*d$os=!L>s*JF] O1s|" :(0&`X{Uݙӝ.ⳉoF[Tې]Uutd]\wdeTewe-:X 5Kd6դ,δn /:SL `W(g QS 'ҧcȔG[u^eOE80(bd vp@/n`mqߢ.\[e/~Oj&* kЊfWsp.3p'Bчm18Y桑đLpo4͓ǝtf/.fS 7 Irv`YgT]@rTu`9> ?m.ac|p) S%ȚiI`1'S *Ƴ< zQ] b˪ՏCE $hu _18e`&}boÇއxSGlqcvsPaF?{XRzeu__9Gk7t@6ψgF)1A0P0|15S0j N7&Lx]UTY#\Wh7-:p\mYu8>6(sJa.Zբ1Ԅfã赙eŜm(e^&[lI c3^ܞ\]w(Q TtՄc{E(p?*_eS ՙ-Py 8^,:% 90 xwK &`GxkY a 00x2jC(ih`D sL cuU N= 6l|zW *QSp7Lҧ|܍0s~CJf[i o}og=J6eR_z(ZL!;~Qmk}dѫq59v<@Ų}}li~sSER\06(Z_}na<,i6PImKP;!̂p-i +i)Wl 3}}K͈X"ˬlYEWGnF` ".jZuYNFWSߠX@liL(7Lmn[7}Msc)Wdmx-^.Rh8fuZqNt!KQJӯʭ`O,^cr=u9ސ,n7vda`C(u'$-(n*4Y;T1D(_`>M`B8#T:NbXZ^ z^n7bd5AFZE^ O,_z;Rmc8|] >XZ{BqOc.]Q+њ&ͺ)5S< %ͮ˫l³"pJ먥*dKǩ/d0JݕDJGTXƛî `DE Sj+5rX%ߌis+EluScy?m!Vʁ$^Db;*qxUE/4sPQ;DjZ1Ԇ1Uu`DO>^S"Xˀ(= (;]9e%x 棔DHAA1"SrpEq. ${'9X7@Z=̀ r{Cxk^4BcFy+<*g`E05z{'?2Yvjz[bxķyýZ ɗ:0vKcAcx&n`@vdL,N´.FIy}8;53 ){<fik!݇?VnR`VU/7C٣L]2:$x37 N K&SJt8+ h ,sau pu,Z:Izb y4"2{5{vڝrp:3p-1By7 >l߼<\ĘloL{2*Jb~t#. vcVuuVfH9 ay'f[[썆E|W:Myu F>GeYJMrRrpX qt}%1ݘ[i^4NPW|)n3Hg` fU})DG?V l=miK \<2^:uxJ}J!k K,p(fl,lUA#\; mؔs7*^#'m\~i5kv+)HZ-4Nvf?/TYʪ3;3 [܄Wwéi rL$Ho+5iu-L6uh uا=>m/D+b0$WXać\&]-ddDF:#Al3R %p$EZ[=t ܡ`4MLXE9CdD,7u_$r*{w@5ۅY,]nB1Q*M5bH$Ze?=J>gۍ/U`TF go[@0qЈXJ ,ΰ)k/__+3SKihUN""]N^~Y=KUno !jxECJfbbpt0`ae\# ?Ci±rܣ˦8>L{XU3I{_f#q*&c7_WkI-bg/aw d'E|PyW*6$ ,)ƊuY%J7xB PuusK<5P48m<{r׬g(aDs\SgŎe1nZedo߿=avH)cM~!ܭF($uY·Wk\B٨e~Q"[̞Vfp8 fKSSg3'[ߟGbѫB6}zz P\oU\ﻜj'>;.f$: 4<`vKo !^z8D]<FRnN5$x$w(Hn 3#ȸ $?f3#pB"OOޯOඖ=e`Dm8Ύ:ѭ)2ZRS52o>?F? g8_m .Jtkx C}9kL9>yףm>E)[46& uYӞ ''j e=ae-k W_DbBm${zpQ?A;ߩuHe1'.;v{=mh4z> P`f8hb['Yl?ۧu'u4p!y)ڸ vHїb2qj1V ~d^˦Y+(:27-ۋO~\ lb )*~U*2àQܔ IDAT#Rܙ&V(p%n9pG qX75h+: P+v(p{[0IcxqI|_xgatqP<(0m':.x|Denoۉ2Ƭ CeڗrLk\n(\G/Ip}oVtpwMb>ؘCBpZ:?Digv[xQkcT (EmyF §Kg̀7WyYrWREge  ;Za,+ kLVI27쯬grZX@IՅb!?,tV8uI.Y3+D2}^,O3x<Օ0e>G(=k i-Ymf>Ad}:y$at ΊKV}Es\3t{ 󢝦/nB';V 1)7VV9Qp wԩnorY.|ڝ ikqƭ844]cGryTʽnW:Q>i])("}8ߐ-×QM& b g%b 6W]}~ݛ\07f5CZ$x0pwW30I>0({0s0+IϿ<ev[mi8G+MNVd<ĂhQ]XQqCvrv;H{[dyNv+0k[[S^KJ(,`Xè2+0Pb S`2>T}r5X=rΒ 0 +vz`nG{3rblYP-7cwK挕h|88p?8BMt)G]ˈDSk C]0W*-ߟOA@0aPCGA]vwr,!}lcmt#zÖi!cLnRr#ώ2}uh}b|@Ą5բ2toHq<\" s\őR)iٔc8Rs3z6Ÿ`q{a#k4mAS J4(]qƧLD;%TtT(b6͏}搽6 BK _Z4 ⼕eɰM{[Y X; \|ޫn'gEWu=~_-p*Ֆ_÷6??N߯[@ӜkɁy*B8[)c/7hjTġcL4 +'*Ƈ:XGu ߡ>?BPn|6-]ľ7f:Pf=3Qo'Vf4r]Ma⧈W$]E (-;3:QN+nbۙVF|k: ߀v^Z"u;GPLkTyp\S>y"]^)x~$#K+7*GsӀ{P)K$ =Z630?pct7}8ƌyS3_"h^,75Vp^&}]v*ڙNYm VY wq9u cR~bKU8B _{O#/p{*-[ߐ|mNJmKI6P Q~_3Q>JӐ؉@@2_klܟ_ONM S9)׋8pӊwdE4i=7cg5O WbA^[a.UNZlihF)OW=x\Vh;SY잗_n7*iE2sQ؋W{S/FhT4wSEM֛. HôJIΫLIKT#ZXk:aCzO>J(mnKOԱKSRB?Rz"uGkyWH4pDAk WiJmmdY:T_Y{URp (Qs$4mokbeۊl2c"KNS\'vNlQR#,EzA% QxʓEF5QyQei퉣-WTS#Mpm]76ڈfB]dܘ/p畨sGi'?VŅ|dgSx/|~w9K#8p.x/m5_9Ń__ NQ74Azfz)Ý;n 1sDžj*ՅDpb&Tk;g 뒫rF+8DM+%/^P.Q5u )6_E 8{4 J(3;ad 5ʬÑۺajZƟhT֞́Gi2IӒQP8ŵ`%xĽPl<^uE!y_w#!9{&nhb;typ4 1NbTAOz"oU"GWcx6s)(tYۅ"1veRN39Əz=↎o.+\nY zZh3l@-d07;!1鍮 O=H.JW~f Nt dwl |*I-YnbiϘA4$ r|v]5l7˦e"=aj["^ԼଫY-3 &B4Ş *Wd EF2h8ъVjM)j/찀ÃLۡ=依jw}^6g9eB=<6x[#B~ ;d[q|?5)fM=y qq8M7166x8u__1*%N=;q-tH\{O$^(O>#^Ʉܡyp2%0w'|kK:l V@^ᡪ l!!)h)^n;v\ Y<'8"\J;`y wcAa#zjɤ bǎbV;IGaG~ËAmgfssJkр2ollO:D)S7Os ]2Wňԁ~8F)FS\2%ǟ*iR;A!UCd,݃|iZ—}j"ՖL0]CVT`L"y_{[pLޭ$B柔$a W )u%vPMѩDOE6*>X.ΙqF:ܩDyݳp2v] Tf|R ޱȖV=n?0a,FCZo4{vy.jE]ƅfRio45#WU1PvŖ=YE_>w?Q@1Sm>NxV J_,{. P_.h":C@8aY58.V늟zAIVlv'7|=âzR*{Q'hnj[veФ\%zma5-a;\87`p gV$C+ ICWbQoK&U`dX+,bT}1krruwixBh5.J<#SO!)}*XC~fY<(Z ZS#ޛ_z0)'4lY83TBf2y3lURI!pڷpHa*;i7˺\2VޫPco<*&g'vzmd3@"("PDcQ#m&m]7{h[-Yxg wTJroZ~ꪺzUχ왖vXgz9a,q2Vߦ+~?D&9 w3i,xWs:8kۀ/q a7u?P'h|;PΡ0=,CAVU;fvxBBMx_5rݬkg~$թ. J ~1Ӡ"KPMpϋ.,k ҁ@ WyQh53,/~owHwGP2NPDmsU#i"6.q&֨Nkr9v`s QpcTH-BCfaT\t~cPmBpsk4)Q8jͮ=y;I'žqjƄP9^i#c9mDsЁˉ|Yiv+cDc8ecg&c!NKG-9M>> \\u[汋"uAbpoOʲLǑ3 <; myR3T(܀f$Mv()H rK@KQI=L]~Gۚ7-oB׺t{n5u#jZt=~0҅pw{0[@hB|ybs v ga-3luF k_L:y~37mafܩeYg(3'JI/V|FE‰:@g^q-eJ&&aweC`G Q7 m6YUVHVUfּy RԺ=VmpY] ؆_8ǀ^ü&#ӋXC");תbC[`C"A~<)Sד{9:CqKPm/TR6RSic6XKˊ8+k!+Atѫ5Dηpݣ5vJN=̓:G%| ]"pRuNn8/[ W.c7:ܧ)%/?~ںNN JH|j$Pg&aV/G/s];1AHzͼ\2UN>9?29ǍKqvouwӰ|lxpB\ݶE;6Q1٫ȝ~9k6cloKci] 12!! IDATm2zM?GWK&|H8F}r@2lvUq > +rx]bob4`50 ~PM5+cF(%F)s#z J/mƜf"8x1N`:+Cbŋe3YݖQQ ,9`{y,U)p RE[ N/+ډ,WbJV֓[h:ƽmVk+I 2 %\SK#BI_\GIS^΢: X:7uy0$03-ӹ7̚m hbБw5SOu68MuI"UW;'w{e%nry37X-%(#\VwwP$66N OP^t~;^OCD[NНցrl0훆iӷJLag?؉/[ɻVwk] EEPB T_&ęݟQFwf&5 8SN_Ukuc-,ѷm7^?٧"mo]bή6cNָ(?P~'{!+vkSo>ހ(Mr/XoH#q|\p@e^M-ޠCj$9xGyia:t0z]4Su.Nx;a9RT]@9œ:Z ʊ D?(CLDfmlf\EvU'8ǾcndDnf&8vs)/[ [ c=u΄M܇H*hkI]? 3%#WbUQcW{uhp#4(4@N' d`.t?)<0MKrXX0H9Zt)@3ZV[tptM4[٦uܤx3/enDTB@}uO Mlx۩-k|~b˽c>i˄u>G&|0n;ۯs/;<Uޞ'8 2 k,-F^ 3 ky<moFۣWWtK VX#a+5XW6u/Lb!0<]O[Yn2LĎ"'IKuk7gukPl 7\_;{ձ'cwM 83 ߘ("kG*#/{4B/.e>%2JruxrD,အz){ڃ@$tP$NTs;<%0KϹ9*W)u~܏^XQ+z^3y%?wD@ 5y&CNd@xP')G(=ń {tٌpխ?/i~ g;HmΡTlU G۶oGC `SG־d{ \5e$9a7yk.rIKq'aq\@J~`yþpKߝ)v*=jI.D#0_/`6'`J6a7L+tpw-bNoP@v8 Q󖍣wy0H`5;o^[9 ` }<됩njTVR4.<{@]xSҨi f6%6ۀ>!1]O_Q{H4tXauQ p{BKG$F}4Ԏn-eu/ۯO*xYnF.9JPf1Oc,9KtvxNm6Ȇ^"G.9_GZ $PPȎ\Vj}[hi,P61$h:}Cd+ yu@"fvXƏq0:ŨEL1--N.iK?fYǀr羕5G!.XnKwìgŃ?g]Y{ MVUq]u 6/Qk~!n)N:x|EfQ0Vqp+9baZL RŋG >-f$v_ O6f9oJ)Vt<\Gͫ9TM4 5 =bO7ŵ]5cqU;^jpWMb4߈E9βtv^ыrX<y֊Ҭ  ~Eq FgN0]c?!K9ԎesS2fo](F@%!;:8P,m)QvoQMb>wZԮtܧE%A X(EuP^ UQG CY+%|v̺v ь±yXï>Cqȱ`sW!<8'I\fB!.2˥ӡ*w, W.uh W1(Z?FQy f#=r.piA>p&-)Q ý~uxpo_.nefWbѩݛ[q}) [7KʬbAyR8<|Y?%mé prprKH?S[I],\ γ4vZxodЧG8^{Ŭ-ON,G}rk\_BJl$*l-O)yB$p N^K^D]ro|㭝C᷋;y;6Mʔ 6ؑ5D< $8a >͠9:W$8džӢ=d_ɛb٪gB'BynaDS@c8wp)pzRԸǐAV`ʸ([8iE/"65"?fӺ~]bR<(PqpD7Fr W1N;%u;Uv{{;̢}uzKuMXʏxL]tV?cO-&jg*\hǽ?aZwQ?!=SVM&Ir_pt(=ǦvFqd.V_+q/x*KFG쾩港[b>0;a${ܓe'/m }Dn4*8XgQBt.pVݴ,^buAkv;uh1dPє.60ܕP;>9AZbkáMcʾ Rj/)a"8ǮQK \F:Ixb|efvwG[Dy"ei礤!#\MVǸU"ޟr@?~Er+y<?~c΋r_ك}]Ft&ڜbk999( x=oL+m%a ۠y'Zcz_K"L<:" /GWi1ᏌR!z Ib'@z̩a6}wm.1% ՗0#~Yxy53ba~DMFWVt,jOSl&B)ųj~erUFx9{mfL뢡Sf_ 넄UBuTuύY5J۬%VS,LqsުḰw,,? s}^Gn !Ókbiܱ4@;7ڊ̂oқ1|#,߀RG,_bs/v :U粹Mz gQćQ/7s$t)$[Bi. ?p᧴noQpRRw z$lu&[Uyp TE<Stc٫#Gv\֭@wMɺf>R4{|̎"m ~$%|I6%:*+ ؟w>|=qiGʋ#s;#%^d6vN[dJ+B6 ořI0ģr$e}y4'=N6 Aðp󴋻k 4.{3\~d!*yD]Z8Gm!ll;j2:Li|i>PP NHeCsI~봟N s?]ֲyʓ8AyꀘTd1Eے̚qa'vteamVDpQ~S$Sg29[7lr&~{XТѷKoD3X\Fɨj"vK0xR$_ԢduWT@H^Cav>$Z`IlV3r4cAYjkp4cpp!+ fsq#,"JYW]@ ,!pyAx~PE ܖ>DּB[gǖ-WYnrQgn}( "*MV`r)1tk⼬΋]& яq8|LZjnPϫ0g}n,w]ɓVF%Lmg %2xP[ͬb]H RgX aEs.V+X5 l#L*>dz3Rǣn C R{O?vV;\h$Ǩf55kl<ժq|AG`89p̷_,V˔ؐ%ZC* ʲTy@6*Ci0(ե3=ヿ礋W_aĦY^{պl8 GҹU`REVEg.K 6i;YNC[T9b3N>d|D(kսή6bn\&C@6NU3[OZuS):@Nq'U|$7l\يUȵ{ɨR?r^PU8'L7qq!m<8(Vw?G[TŰ.I6ǒЌ$1n젺6dư^a1YJ8N;GO<w,lh&nCJ3gFpV0`i%q DtRTkE:0~8~F{*>ie)sv Bߪ{ŬwuH,ھ>5}:)/(#Dܣ}2vk\5CPS@% g2}v[;`N:8uJ˜u6FPlŻ,H_2"66R rjW@O?mxO-pu"%IRy/9QFFsْG(kݡ36 0(/'{pI^]v|.2lfTimhOႁZtpd6=V;3^mZRW 6stɪ!$9mv`U/6{ RO^d4׫/hD5Π> @18~> x28ُ̇ IDAT2ŕwwWwۇ=r  $mrBm>&"O哋ݛZ|'@Yj?zzedm8pHE{ӕ䫮N7SxA)҇gIA^7h90;N\WǪe4HT| #96󬩪C #k]%F~von7Sr˗G`ONt>Nj/T峦I"7Xl~=}e/q{ޝ'5W=q'Of#<~b.O/>~;S-8%f4*$!׹bN`D3imJ蛡Pq߼!_n:pNsλDjՕ=pN7g,Ff"|reW[{ٱ٠N|Xü5[bqz%zoVNM\|Nv f dq4ƘTK ԭlq[G}g(Ψ)`:/=  Pn;A)~mk3Ҭgh1jwq  7WBR\nj K tLݡypIQQHg0󻙙$@1.`KOꞯP!uI4|G7%?1y⯮6ݡm%bZ5ҼPC7kuSEn,[4Pz[`<.t&LCvRP(2& qM>`c}o`i8 ԘSQ RИC!-))D(@_0kp=.Uvfk}-]X# bCec鯽8Qb#`Tߔ Qk5tX$1[}sA hLѤ8A|WIj&e!O5>Ju阡8>,Vܴԥ>`#(H'ӞHrc3Υ2?O8 u ISwgɄԃ W7$nڗY4F !;ͬ<8;3E/H&d edz XWq?x8fdd3xH,u kvşK@N+?վZ D;6!'nbչK5n 'McgE̷D4T(q\< tR{8N߄;I~Q#tť~rŜb+t#}wN2\d>#-Q_T?g &G[p\}97Yi@.}+,p!J|ıi[)Z&U$~_E?/*\Q\='yD ŬX|u"ہYxupeu[ϝExh'3 AȱZ{%t/0XdO^!㻷\F kp.ηNS[FER*%蒾LNB^XLE >O+<ڑns߽|~1bQXOkqp<Ϳ W~yjdj9 7?[Gp/C,׷`J.҄fB(fKdh#S|E$<Q$7uIc=KųRhph %AS;U<Jߑ6d!%fx3a6AD"SdIHrsUʹ\S<vHV 濥 ccImQ uQL!; U`+߉~ojYqsc+]!8V-۷NTI.ڭpe="=YRϝ6 M6Li9C3l^YY]9Yϱr2S-6vZ2h!TQs86 \`د4уW0tuo!F6#p#V=S6coi6]# !{8 oyGtBhL `#Ir'W=UzP%T;A=* * G4pݝ e9;D3Fqj]|s,rNvVUAFQYum⩛4m,P?'3O] CW/Ϝf!Mt9/G꜍ Fegں^ zkNC0Yhŭ$A~А(L5]vZ=(4gտj ^Ix G]C g"VQxq4qv'n{޲ݗ0R\zpo|Ҹ-5 (jĕ׳`jc S'1Bb!k1X5 nzNNj.y>vs2P ?m3;xeUV@]* ͦNl,OY. haɛUY?&Oꤳ;f(SSyu8cŮ䪺cI[]r'NX/sn5+T'Sݾ/fп j8_acg\w}+ ' =l2ޣ{.aN_]j;$bb rַ NG|=wc]Rǽ&_gp9S4lE] R?߂_'HW!&;-5(З*1p{uMmT};2! ?cĦ4FԵj&BWar\8o@ |w NG@K{5`#q㧁> KL^;CiC~49 "^׫pM,.XyGb@E '%J?gʕ~>A'`4l*e0˚ 0%|! Vp&3qX\l}BY~ca}osϋEe& +aX SX6dB6mpD vf50̄n)zDPы3OLB@Onֿ/ZYS)[OD9h$K5ex44Cx[8Vl_d >g4u׀eiQ$5>c2̀/aBJ6~#CBNK~.J{Lliii;Cxf;pY ^dp:hmIkp%ar5#]BgFbi2~h?Xd%j yͨ ůEm;fy $t1Q2u19Xh4yUqڨN4i :kzR8ۃ  E~oceHW?J4죬Ku$ `)d`o_b/1XW8≛ 򳵞)!%/\z(~Ñj(6Rep%:D-b#dUR}7͔J"{nGOEiT,c֨'zDioZ"|ύѰoWST"z7=i,ƱL"?VwG ~:HQf8jbql(rH#D͵@I={Yï,gͮu9X ]`Iӂsgʈ G Clt̉.|݅Ӯ$B\ |Fݑ)e`xJ]&hї V$97½zXҥIvo. D`e]UOl+Jr-V?w{K8YѴ-,F{dٷ8RR5%zӈw=>N#z=9vۊ=$(LfqԮI) /p+f3ⱥS>VjSRztf3\ݱm> 8]ڨwX Ҳ`*{m>Ɣ$ܙʶA;[Rr-ǥt4G߰~g![Z:ьnEWS1 Y`\\ՃO[_fë"DY[^&BTciG2eUF132x$ cUq60WӇ8mS];"6ӻJQFT\A-a%eiWiAշk` ?tӧ4 6*^%~&%BI^AR ŽJ{U XR=P|6$VX2-(6 DFfvoK,hOofܨqLvg6XNaGE ިd4t'";4Bk|wrްLw(,dv^s"#KRin7h3qTeXyAo8Zu[-kJ^KIXNaG `u~MHKa2JĕıEs劘}M_HHZeq̢nE@L*Cz&yohYr-=T_JR/X f/f@dwn43g=8Y"]݉d l3L$"Of UN\l婺Ĺ#LQebVH4NFQ:%_ZyN0FI.|ZݶX4Z5U2eۯ/py^xSC!|?3ulbDXuj[gb@ٯV!R*| QW8AQWqtfDZuFKe먀+ ^׃`xt*LHmXkH3))w~i6󊓟Q "C;gM{+fW -}o$ LbU,i⩿hq֛"m,T&v4 J+12peUĵxBepq/_\bTEYbj,aի~Ep~8,/WbأHm*ǩ-F#EL»֙8 DV,_Ŋt"{f@"[:&ꗥL2١`Od}{hۖuLt}I{% 9᠂tsj!/6!', Tz. GuЇS>AyQR0:T=I~}t:wnڿIPT:ncK~iW7Xv~xab_%VȫR&:@&6 Cy"W$׎c(F IDAT=J)U`tϱj6zd)NnjB+ fWcq'Z.-Mښ~~c"-ƲΣjiʥ[f]ߗ6YJbZ ԓ*{(c9L \(v7n, [t%kYF%R><7)K_l b o8͵T Ո11-eVvHi'+[NZF65lF9dYh+i!& ljEF m0mz Em?NTt a#XSzj̮v P%V{@*Sә/{HUGEAw/Gv,K=Ȧ|x G[u_ `ONQ6\7DX/S]WvwoC 0RPHgk@%N цbm\eFp*.V`؈J@aS@7|6\ԓ_[ dGlFJffncA߽w>wۏZxtTo?3H8t]\eB 2нs dJڝ˗/߅D8vm~[} sr-򀅩GRͯ8hn(O&R1xܲ:D*D󅔇7kT݁iY]㓪d9.ND'L_쟇4½=̠ðTi/l KxuG["[_#eړ$wb UHm.hOD+_D@tcm֨epBa2* Ţݹ͘os>W>lqFYa]<;w;Rմ<|vDD͜4܊5Z}=(vr1 _rzpɟC.|\䪄@N. -Hj!UlZI!Y2D1W{]<il)P/rg3' 7'WQW\vj_=Xyu{V*q KSGg׫_lU*mmĨP{e+<YLn =q&AfV}EUu{yYSCV`Eď6lσK. 뾃J9p0 N%̘u ĺESgUt~OrD ,,,WnM l׽¯Pyۙ!^Û7> F:l]- v:/ٍJ;fߒرeoBHw|Ѹ[콄 Ib.y<[\Tz@kCVN￷V wtO?OY5f19`(`iEޣ>kLWO^z(vZms>˖ |8\,CM2)8t*p!ײ7Jf+f܃}c;#yelĆ40O+h`!VMχ@cS;;n:~@>鞸R /t&S jL2u jN&H0*p[Eb{-<p+UQ,ǵCp'4^+t):E| eNz._&YC,5tG0\0I/7G"˨E6bc{ ǭ4n@ (G~K.]M/fUTҊ" R^D}jӱh?ï\*ǭ?~ʮW=9GЋ><{KM,xgcŌ xd-@tNιm>m@ Hų6mhZ+plBKݛw;7qswO<U+pqt`Q$w TvڤWJ4\>`uԽqjȪ(N`m K;GwWH m!D9(387_bjO*'hJ\S?xyzAJ#q.*pFc%5czpE4=Dp eQ:FP7v>]j:m ,iPs \L).X5<[ tV"ɓOpq _"q;wxM.mgoSSbd۽L`(%BDhq|wHh2 ?j[ťD5Ej;p̆$T4c.:qH..psa)tu;drpLF.QW;Y$p8!b+f =*İ6^_SNڢ3=Rj ,$NvBqK_֯;|Qrw=J6> ZB+&(zf%HHv 7q5x9SN)TNd!QbcKێՏ?Sxr?8WЂt`^FuD`|m8=;.s9vv H[8Z(M?: J告mzS]+v4b;s] ?˞j#bb>n׏[m;v@^Ca4]W/f9J(o|htk4{I%*XImUA,zgW4S6ܥŜ\@2qK\ZrZ@.ށrHъ8h gq~[uWKȱ90H)H̗?`58}5G0M(9ׄGX8g_6x8RqbY^xAjNp?rЪox"zŸ | q%} ~>vCx[{ZE#-f>@^h:CIlݻl@r5Br֍PwY.<HƔ ?c윏q-D>BMrTk=:~ +HID}gWZJҭ+n[RYڅhѧ̾XB8aGU*=c p:%(?M`l^غּ4ةvE(f*'XYav$4)4RWZ5p <#[]cy31Ͱ|i\RJĄS(Et>x 0p@h3(&~0F i4PsBDܨh+M3@;ؘ箋#1$g%Ersp-f3#FQȕeX6cx~VZ__t6b0qUbZ}5mK+ɘCvٞ!P$71+pov2 8ig.~G)㑢`[{ħ^k{sΝ\찔P,p#&.ٙd&kێcyr])&M%XFZرzLi@`H}9\HНۺ0ʩ)Τ'ꪋoA/mg-}J,rޙpiX)c4MbϞ8tۮ_@G=0\X{c%3 !+E GYa7U.§ 0ޖxT* ~!3/r`Eu0C1z`]l\qE''H}x+NgsnoBKUM- yz)6'Op 5N1**|^?`ÒJ"/ >>N(@Vw b-+:XAF< !&Hv1Cܼ@L~8fӥn9[oDc20Q| " wE>3Y#*jNȢ1'Mc}(AK`*O}$Өk-/ĈF$Dґ_<_X`q*%xvf 9K5-jx+AH+ZD/smJqn%9"g W_za ٲg}T{bK]}ʯs!:k}n2N*mFDkt~Uxk݊qa/L[(G3ڠZ98V X^nga΍vU/y9`5oP(NO2),# -qk{Rk+T i%;+ "xy*T8@|;ە՗I-w{(9uQ<-N}fh>T%_$р[10}]$}bN<5NZ4̗0Zv^fntPjX6ґL\k`z9ȵ)x2Y>%z6Xt*nYl_'{= )~<1CG"U|6)H>]*`\_F%:.)RV|0ZY@8-;ngus򏛶ľ1"YiɀPvB#xesd{,6C OJEZ#y\:c9SQDI 0H8ONP48j|S)>+WU+-t߄ jYFG2ұ@DVƱ); A`C/&l*Z4xFmQJ:BҕO,ln -z[퉻4ɮ{>9wH6Bs@gQaV<5}|@t7$Iwv_? hbZ8ƅSgA EBad~*?,"M^+uM$b>޾쒱Ҕu+~8\XGhC  Ff o0 Hi=GmXL:)^pA=Tl2KSRK֏RʃM.3fDԡ1*P.̑*QEm땝mIH!rbM0Cl.Y|yd\׌G}T6[Eqօz"1R)7Šh35+BHp`K+n?4JE)Ϙ@Dy;ێ!?8H %D;w :wQXTd]sCdKgG!FP?pٌ.% .U~ZQ ) lY~3W=#ae:BJ.FG]-8zWܕ̃Cb0,ЯC\- 5LP"" pKv+ndTMuQxZ+"UUU܈Z!%6mLQ|u9]-n\ÎiӹpX)\pknxAf },F*``HEl9evwQڬcb[+ZBu-`P ^b^`ƒ_WŲ-FbTpmX/X;è  IDATj:cɖgUuu7P>v@f1D-4ufOTUBa 4&lB4W!]L Aϥ9BXV%*t2lQb;ys,T ǃΩqw?R͏'Z~' W;{ K-")QΙgj/!f">"ƍ\u#e)Xx~YYPkYiZeA FS~C .n:vȎf> -]w`b!Z3V1K9MxhCXi;iP| Trk_8xAbAXz8_Mkk0R,5r_N-fo/ߟkw! nffsj0yeLi%S9A&UeHSe$OUp>!*zl uu9Խ6=LEgש%Ъ@h)Y!k4dy8pgs6f3Ʃ2xPvHsӿws͈fd5#zuADt$m>J;p& !Z =^ٲkm9#0Z#(؉-#Z*CNR~m;T,j)XaO5.gnۍ6%7(ۼC x7>w^5L(X(3%"Sg?,P)+r`N w]#-BvW<,G{B~Uq̆iX֛7К^vulxQ\= ыj/js\ lfKxccsq!<6 @Ε`/H?&28@6է>$ңPwb<.;}[_E+Nw~*Dg|:k.\'Inӌ2(33#x>"u2.>q|x`/̽MC O8ۇg?mK?S4RIΫLE)%8VWF, @m*?'~sxs5QҮiK8Y?5wLd~9_Kû/Mb9G~y9bbڕ8I`.oTZJmI3 _/ep߱tƭzTMdsVg$[?Np. /fl]l?-tsǓs vtE0'"x Idp!a 2ЖI.RmY\I˕Z]׫hD ._^P=@J*y[E}uX\)eU op:sfgZw0㲙IQ1^+>4 IR%8*ÝۡKmYq]翶5Q8-d'%/0?@6x\[A(-?E6jDetS4;1&eK./ sD7<0ST*j-# TQPpsy! // ȉ(rAqߒD-@T8a93d8Y8 oqB~(awNT-..9W! X-̠c+n?vh)m^WY^NVH~^5xPLΜXЍr- qr|MRb5dcffs4 \0zZV )c\`9pb=2TG 9 1(1KnkX<?q8tw 6B>wBqw#Pd3 ;A* ̳VIT $ra ړXVLR;v np"|Ap ip+MlJl֐pjkvh9J=y" HYSuF΢&9(57aV%3سwlrߕML$}l#/ q./(gS&Ll "&PDI+'vpAD?bS쒩^ SG]@keQ$'Ui[KR=.+MAxhaMJ&>W/GWǀ . Dx9LkLTh;b RB.~_I9x-)fW"4y& D\m2E$O.~ |]i,un5X /b0i'kC8%(7ZW9j -Y`@߬,Oc=WRSL(t-)yT Lp(eY"D1rKq-wXA3I{EVV/ezĨ쾫Qi -FtL*2 j9o/eq Y'Ы"th mť 7\%6<0mB/@jӇ }h| T0J?7q>q_?aëWY&;¾(m4r$`d-ON}>6ؓn7en`#a ־+?+t+ί.ET41;3/`yS`re2sWEr͈5؇Fs>( ^R_un* 9"EbHL ]?3tտRa dEQ#^jdqlI9Mf-!-!Q}|a*Enůb@puԄE`81Kndf=y7i,D>M"3L12\\/Ŕ TGFL-=?Mz(_S-"sFG$p Ѱ}ѧ[?b+ pPsVQv/F;l-3lb$$]Z2TeY'IcIMe}%͗\SfBlyY5 2M*}+# %~BuW_3c) ?G :_*2Zym<̖p=H (hRQRkX!90gᰆ߳?>9Mib#xWBď8IPelk rE݊_S{eF߇sp Hq*XwȞ>]ߵ.~L\LOtgO͖75=|:߻M%vUbe$/&ghIUn]uwide6IWD?D !ȺĔ|S\!\i#Z!`[0M/.u:}qZvB;iGeY0e/f-Aw5کJJAwZMpH+ aʇ\MX")dl 4e(]8}9Y֡n,8g_=\>+v\G2A/o%%x/~aB67& fC ]1d4(GOqHEGqjS98C8*7wo/9 L %g ly<5c N7t$p) c|# t&\}=oܿ<9䂿D"bRٿg㈅/$|JP?aWJ|dгR J˧7I "Rձ7="("7 0_V%!nbo.XKv嗫_$l"਀|SBى`yvqDQ|^˄hd{K}R*+ŧNSR`28gt s 80*{VnhBDox2(X:ż K&+0K!$;hҺ'oM-bG=-[|4]Kc\aUa#惒>eup|g0Xm.u*ŎGF6%6Khu^,QrrynslF(`SSCR.quWC~_v3bEOP;ۿ4NHT vىk:P&0)Uhmߨ NQ>5.]).' RVMĎƛ؛ܱQixPUFe .S s"`fws-´jzMH21"~@!uQOpO(a$ CHJ4qf;gg#4Jrs1w7]vx޽9Q7ැ˓6MKcsEJ=WtVž 8#fSC=X>\b>{xf 8k,S N a~]h-?2TW[qAc|7VJݦMCYx<"WO'p#l>~<1xVRqEpMvˣ?dpT=7J..32l6(Ą̌qi#R0צqNv(+췁w&Ow*NqJ ƌeSd 9(*.m \ VBTԠ*dzI'ܲ WWA e+ήq!^EaT՜%F)C!.u'`- y9?J\&3 {.='}8<#@]TQz{PEUJOQXJVLc |DA>X`eE.q\?/LЃub{P4(Mܹ&T4 ?,>e5ҒXx}od3YtJ)r"U-93gG)r%I$+7TiQS5֏9{Vk/|s{FY,jX A={@T`ې}˧_ <\ӱϑwK^.v>rk_498:)NJ&\31H7x"h];*VغyYɩRLR h?ȓ IDATo`tYáWNi!S ({J%iAg*6Co--(SWȰ|X%yYz/=ý{i+ gYzh9udLKQg$V0K#5 EO9[7 /!r@Z\;t3E7QM+f Hw}cW}$}?iw!D^}8GRTɈZgq=@{by!1>; mVH9;bvbiH9wjrz4&iݴxwRv%swh>5Gd-\%F| Gvda;]Rt4! ߯)-8$y[jR͙3H=/nCgȖ,\r{\P8pS0F{i)dwHdAF]o#e|NK]zˏVH7>lܿ{_!nlU^VcHrx YoncCE|H T箻qIXηƧ5i8ӀD{ WSIb/o 8_N^ ]1=\FA wc(* ޚARftV!*psyWCEz`ꔐ}3=L5 `$ҵI*9S n|u-8+Qgy\2͕ |@!'0j犠$>MDȮM :|%:DMP@~&7 ufg-ӱ͊x["l|`OdٺDWTjmwbWpY4la7AT4c`[>ȍPU>3#- 0 |NΣaNz䚴X!V%jF8SkU [FlBHQlUnwI8x2N}ja% ~JQ|$ˆ~nHAIIvt|0ܢ"E`I+vz\K2fnCV[z;& YU8*O'a]xxe;B]!J+D}kq G. ŧ"WŲSy4'5C >i,䏨^_J}]/[Le;*l ܯ7E#LeJ] R[ǕET'@Δ~%UlOlG&1 {s)4 6-78܀:߆at饙 d1,&v4V`W 5O5 ɵp_la׶x99n#5㏊.qÌuOI,?CHQں:F| d?#kpw^܊{Z]9@e"ī;9Q24qoN 8 h5>nXw>RQ`ž >`P\\/hZDYߜB^$wzނ7=#l|Ev\^V+rZc+4YNIZRA 0I Y ̨O)6<8۳c?^oqΔ|dh`Q*[QeC hdzƓHǽ]4ׯZV;8;$Jhg)]hjl}p (7kc@|N潐ݢD}4Mɉa`+a gT<=lƒV9n,`-d1(V1Yj)̟b~!x_[lW`*MfN;Y[O7k-'O\qlﹳN6G1'* T[NP*]P 8N+LQuͭVlizPZUc._*˂_4)w6Ɲb P* VX`ǀYweg6Eb#bbP2v%|OO\-_oo <ٞ0m coJR_1>i8)dA"PSkՕrl𸲠> :^m D !wUm4ي/.-dn/GZyBB7⻜wcT&ǹTJղ?:ʲe W2#ն[{eJlTMX'&L-57qI}%Qn*̈́?`%mu?y8y>~Ӎ3rͽQ`B_(\,;Fq)d|!X^Ѫ<JճVk3ȭ1Z.H@Ѷ/zLerREQPeyCBKC-ָkذz+Ri61-g5]vE=+c`E3G+&6.$K&csz܏_HT;|7 Z1b!zX&wx%M>ġ6)p^hIdȶ8ipq\;i׋_QpzZZ򍘑"{z\lR,;K?\e||r8 v &qHً-x6h(A rɅ9/:F(1@eun !-Yɯ9RW7$]낤2yF"k["%NŽJ d@hRlQա׳RrhuSrTG -j2Oq9VZJѪ`]:I7[Z^7ar^Ԃl1 ywal͊ މ~n>)ݟ\ mvtLrc*$ZCFoiCUP`|ORG?,p.}pBEcJy.W>R.__7}g-;뗞5cN_"sd*N{X$@EH)}cgKY,h" BUx*O^ }io,pIL$8bic>N`ݙfz^e dq"ˁ]لb5qgn{mɻ-yz*C$eo nÖ)Tp+ ՊNIC!4Ewdl3ٹ҆WZZ*DhH:d?qi^.ҶV er%Hz!'۩?= g@ӭ1O912\K|x} .<ښzcW`vv).yؿOnv yoKq0|oŹ+Cn^3^S2W뎠)^ePp!,sYV2֚ѱWA:NK`)Qi0Oo+NUeوOȕ2JDAξ58^nV1M~y{r:ޓqsAn]5ΆgWi{ci3m @VbOX vb]dK=Zˆphl66X1lg~~Z&۝ wpp3M.)>c wj'qYH HyiEW܂oKZ1MK~TҏraՓw8RHfβ n>KBū֫4MQplZPY4e'H)\O >t[KxѰ0~0;1 Cτ%cPӰ( MA#">Q]-QD`|Y {'HGVKXLT/gG]+,^aq(r o]pP?=o|viU9>d`G[5c3IX17Z<|=|;!dLgb.9V?ދSǠ؊DwAو^e|q(Єy{{sݛ:7|Q~_Z$.;Lw p՛$dٓ <ٳwu9lg;@>Z83"{rQm-gw/d,cˆK?]M(`THv^ /e$xS[lhI z珇yn5_~y炌,8~TzI#3I{Y+MH/Fj| 'pc;N4eq[\`\% ? Īء&\ p-Bp`= .GGc 0p\}Q Jᄐw{ Ç6غ:urKJ-܂Ȕ-{Oȡ)HEd┯ `FWv&8O^G"?M}nH) tcMP#뽅_Ykv^8#RtW-]?>t[zx%I/.̟dBއ(K)?WSk  z|+%a@)B_| TGiBm-!U"}h?WOu1QhklS%7ܹi yD lEe]+O8>߾5:sؚ>o,Ҭ"2#c֗V( ^4܂WâUӢJOrF|c{d!?VzF0~f?mW'3~cߞ7\͙QQpʣ?Kǟ<XtVE Zu'O}k ))dG3SQkJ$ Gn[V'2[fZ,FIPMLr 4~366X)}#2r..$*吁 W:@<ꛤz!$+pLpNPWGYd~[z<}΅o`Ղ8Xd0F&ҝQe$hۻQ\C5noo:snhiy7AQv>( "s{x6;#ڄʃU{6r+Ad3uG[lb̧ @NdjN#jk~_5EBM[0f ):kԢSqEDE87gmlGg7,-D>^0ҸO Ax&!2bQ9~;m2Ԭ TvdC8uG(/Ob-/L@v(&KaA bhc+VfHDnIamNnaVT<^ނďVQ>r> Vͳtݎ8) 9IL1;{%/1D<0jrcm{ _N5ljԤm׉ix\Pz Ɩ-gJQ=R帳.-.n|s6$` cӈ ,x1{?%<ٜT_0ܤNc';KDx>ͰҘP|6sl}GKxY>m9 7bF-&cB8ϝ0 EKA~/e'ܞ:Pxi E.2Df[W,fN|x7;)Ygߟo(;5c v8hS^zءc<ްozk"6xwqNE5y/MƩ돪(7\q;\y&; =C7l!dRxZB0wnZ,vy@[Э дT۟\{v6sz>^ ;wc%ű)s!3fcN}n77u\HW7W_ ckq Ksִ>o\g&8fomefXCL_/E\t%؃ۿu @X!P+ T ]p+0qr'fl7T1{׫E k("Z#)YTS+6ҋׯo\/Іa }2R[Y?BC84P:Jtr1M~?.HT'q+LgJEK  AAG /q-uFf,+IJ ǘKA'z>t2kBk%>d} d:']7nyoH !o~ll ݔA {`+8Nb`)3R~Ҕ:d \\ܣk8qō GYW@jfb %)2=j"x@9  C?8|%Le#N1%tmG棝%<8|mp 0w윒Ùc~V|ddڳ2g5BK)@:4c:/:qcʭFlL| HԲ:*ɱvHfHl8 pݾ"n߿&oc)aRoF/p/UϘdcO!K$@qdѫl J;?(uȨRiyתʾ9iyukD&c'KxeZvW+fR~]q;.6?kK&k!dڊ!4&dk;[sou[}״ 6ۅP=@t3(|rT̲~޷ӤVY4!Oڋo߄lv{:Jڋkј| 5.E̝Y̲I< |[2IPS>DPb`P!p>$P"'McJEgb ֤<3_,ʔYyj*pRV~UӰ\G!VH䇀Hc>B۞pK.DyoR0.}x3@b^ =n~*ǦC>7~i(o?aDfGFytwIha|<v/+_kpTwqe$)U?]ZT"kc);DSED@MΟc' W)wdy#:xvk>tC!;q 2hzM:9:"K]%jǁSjf1ugǰ*!'vd|YU?h}m=权e;;d? ·KM)a]@/=#Cf[[6#l8Ӎ}"%U},Er274Cv;۟ 3@@qQmmi[V l>51?|p)R3h} ^K eDx8vp[/LșSܵJ:@8V8_Cݹp`$;х_g2QX-B1µ@f;ny8M𻞎k.I ~ڰ:RFČUB:J\aeiP-pp1gvEH%]iwIFs*/nR;.woƥ#]./,FGWqw; .;TcZ࠻౮?UEWhX>Fئ&@܍ۻES"UloA,6KGAp@!228x|U)4garbˏPO{e_Z$ROq@W#I)40T*LٵԿщekO(KCve\Z춰_)p:UYAdOb]~EN[ς24XlsKxh~QGKqyIk.^">I Ϫ۝AmB΋aA7 %i_&-@hkco,7@jKo|sO @8,TIl'E= %NJ^n_32>)M8`rK^V qK6w!q#v]IR}s ߣp4-hʃ.U~ļpn 3|]0fe]==]-'TPH ^S'^ȲAK,5M;hbu>L+((+DÒ+卫 !!W6nfċaa>AhgzJ~iӝ 2D#3Ɔ% 97]Vʌ{=pGya9dr2\bLə 7WSXiNTdYx:A<H^x4ƾJ_|5!:&I?|;$/Z.'ġ/xgVT1(%.N?i-䘏p/уNj%d\|?6Rr(g{8*Bݸ"=9X&sn%.xPZB}ƧԷ51{`-K% b^C' vY0s {5 kYiXR~9' IYO%pIRmGÇ;j2Yޣ@Xe`rɁG` lUfC|a\cHM,y[Vy3[V)dҧNji[85G" `*9f@#bbmǍņt`Byo֑Xhc} ʼna%ۂ X0ΧVlݝ oEDwuw -[ap2&7I,xUaMNE% xow,-4dVjN)$τK+qIۜM=bPWR gm.#1ZC_F@ܲ,l-xݴqEWg!oPi2繣;-㻌95<2<*E0:a= eN!&Hd +l ۳Q㐡Fkw ^Yq$䊝H- і!WB@&`4epGK ۫8˕9%l&{\ެHlîeQ_@Uרv-X()o En" `81Y'AGBLTPGd1~ p-/V Y I3>@usMP_jzSxxΪ|3a?Z={Lb'ԝ"U~Օ,-UF T,Q'˗kwp=e1v\Ys|`m4].ʅ 4^ U4v)/yf@'C-c*\21V$ եYb碁ޟ7PC!C̈yG2 (rצ2? |HL{xa(VY(s@ZVb31zOj٭%$ڗs"!d87Oz & XYr[D*G0l$JQ.ͨo]$Z"pG_ dOhѪx)@1_ Zr5pb`+zӵTTv5%.um[7ZL_$d3$ʊجkT4V-@ 2]ɠ-@|4Zc}ߡ@|c!n\5r߰\݌DNl{/)X!kBz( nX7nAQTUi*0'^+ N*Zc]_V[A3a /&đO}'YwG{ЌUq[dUbQYtBw:N'0aMD< }EHK =MqL"_K ڷ[JgVU.[[ItXU~03^]O5Mٺ(;۱1ն RŕP`\,}eZrCprvkyalO+6J$fO~ \$J*YT==gwI̾$资ː ZBE2HjWnS |h]`k|<qBiQ"ql pK{CVbgQo 2q(Iq<t@r]UߠV`e>L鸗-Q0](ٜytL,q7)! (5Wq: ^kJ-3i3ª)/|KS;X9@-c;5TGcbX70$ZY :Bt['c{s6 g,̥m;_xb)"b&kܧg]!Gikko|/U4SpdǿeġJleYziHI[IOщ/t)bgSQHK"idʯNb)9t~ ^dWh'lK{m de$7t IDAT\z$ԣ<3-CO-F~(>͊|Rń=y)?=As?"$@]z eXp P8;suE4TH;{"׍KE` jCʵP-)mdc/sjShXi7\X  LW"VC^5MJ!  q{nӄ_HMR~j?\*1Q/LcR姗Cg\6gIQ܎e'uw#+k'y=h* Qts>Dy*rJ7V#QR,-s0I*#a%qۓoL޿_w}`wlvn9i$6QQD Q8ҁ7na₽v.F~iTVE*Upߔ66T˕@c`XK>ݟNtmS8N׭Ε>l^=>QG7DݴЪxuͺ/FB wI?8<3©11Eqo>l[\YTj%AQ}6.!DU79˘x+G؈ҪX3?cet]%mqن#0Y|a otkb/F#Xذ1*R,os&_!YKT[FE',k20Yk_l')yl뇙b$7.]u!-GoL(n]Ny欓~ u,oI g>z_6oQ~!)>6$LOIJ3Oy[ha089ъ0uzbwv+Bn7z׏}:OJ?lz( ђ%Ko Q5^iNڐT?yI!j}2^No8u-`~_%Wlt$YRTy>Z36\D6Ǥ|q8 \Uecg\x2/WKk]ǫ[ )aQIuYmvOX跠Jݓo? LK?{V:a+'8AHӚ5O/V떴DK!.[¸}k4mZkggmpnwn67*d/ ð|b||U1]Gw!Yx.ooʹpGrކc0)ˬ"og$!]^bC>N8aYѐk6A8_2 ޣ_G-nQ l]ζA]|r I҄?7ke桔0PݔY ף& \ⵜb9|+I} `/:ړ~vq'S4Ge+A 8c!w$[,oiAB}nz$ 98S6޻pXNsE.:@jݩV#Vv" P\+UXa "*$A mW۫/Vj;zh1#T "̠)]ڪ/ܭִZDWUw ZJ<]m &IoxqgH-8bi] Ƅ\-6Q(=i. ;k) G֎𴘒Zhx  ǢDCڴ)wq|DM7

恑}R І}{ ;pGI|@՛d0q4㬥˒$8Zr8WaiR6JY(`]p̿#K#oЕ*=H"M  y\Iu,qX#lZѰ;(R^j NaCKP0E}*\pKj'OtTw8xMi5du(@DG6`^M?t*jۃ_!Q ~WWz@j>UmA* wWՊ9%>wN^RiWS _J%"Gɏv$1?A"#l5,붃9R#NʭqICQFČ= lg\6Fc&eMߟA xYz=e=ٴT^ nU{A8KEƎ;j³,b`%` vU쨅a@Ee%/~?ɇ_!A`ߖ*٥fӆhKpktZҺaR5J RI-wgH /z#v3dD-L}ɢu$N9\zOIl!M83R ϷD]K:%;k C-ц#67R/U :nڸvǯ-^fl  hӜVu22gDcld͆2jub禛w=VGÕl!`V ;Dݦw~?x__؄u|I9U?pN b?!i5坞Y {Ԟ$ .D'o}*)h_*Y S}3R"q;s莅hrH rSvV^.(+¤@_`]-ݴCf˛ۃ j?Ovf,p5,13%I4-60fmLqVOj/Dn%N)Ȩ,:8Rń}xV{q+s:ݟBʩBl2?Bn9zr{{2P;~rIšR;V *h.wj)j~Bwg0lBglРn8u^x.ÏJ([;P(tTrGMnzt4;ǝ3 >F-t ݰRi'#Ov׆lad4p<:ia%{y65pZ}X!! - ƀ);#No|^PBBv0{) qWN 8u3hheϘKWfAͪ4OwyT\*{_'YZtRZn с mlf;kGQ'HZ<9*Emyן ߌEVkee`Q Rj5`ZpL4 Mѧ-ߨ^ ޣg~{^^~ЪóTDi``%mW_e MNw0(i\7k~؀? f ٣=Ǝ[xߚ󛃃$f|t43 !e6-!F\ D65jktbTcRe2')+Dc)۷ xKyx9XqVICͲ<"_}]X-Cߠ*W`P,/QGzG #Ye_Sa #+f|E;x';\j/ȪTT*2 Z}|'~ǹ W<,mAΪP|Wov2Nx:>ju:6̍ƺxv;:Vk+kDRE56u@6 aЫ2!<̨jڱ1._WP^믝ϾgSn-b`x`qw)ؘ!'1֎> U!t/w6-(RGjn7^pqaXW)k AOר>>Pv[v%$9U,L5T#ڗh #:z`k␆vׅ'h4ye9/ h[8!',B&T.;FϺ-zߡ2<)[畻&b2ڃuOvq;&zhe 'ש{Z]ڴܵ.B׸nP֤+= /t7S$EN>Ϗ y]~ۥК>4dq.# D:k-`0&8<@1ޏL83Bk/$%8VAr`7Fj9:w 8rٓ*Gݠ58Kx߰񣴇1r6x|"}`62 ۽`f ^׷VT8x;~ J.*|$M` 5M$Uxѐ,[ܥCS= tC%pϴɮO`#]^Z1PFAjN-QC=-l,qay^7"-_8"IUģ ؆j4Qoy"rуw'ݮc-ؚ>0r'+~ӧ1Պɍ|Q8YꥊT=+]re;ĭ sTQ,QxnK-NĆdepљ'.`zg=۝Ne3wYћ` dRG'yf'`g3@l}%b/ 0[׼ v}nPPi`ۍƵT8kw:~ vBbS$$4<6MiTpmXx]$Dn)/dYMx&ITږ&Slv`FIØ,AbY}MHU.Xõ:B?HMt6$-at x-U-٪ Bi-].^ڼ&x*]O,(E%[;G Q)a_V"{ymcӸjrgj6tzy÷anu.C~AiQ_UÓw-e=Ru%;v|X] tȅgbsQTE<{uetŊ `]Z K CI8yك3~j&% %_,(?~/Zm@>4r},σγtB a{Ҵza=F.qK;}R|HMi¢|ї'&4)2Jt%ïfV6JU IDAT<JYhI)7t.+msgV;aIY`i9@|O<{ .jS6{ i/-C = ^7mvttq\\ 6 ٓi5 yKx1Z-LA? A)GMUc`-`'ˤ7߽{t=L XP"PrnC2o|=Jv~wpIHw*eIf*CHe UbqX XH t{WID `fAjI8j,YbI:>wdI C?T2&Yn&7!E jʈ즹~_: ``@]Hv4$Qs=-e_<|gLBzl]$2蔐F7v V<۸̃ѩReZPY+:I- >n뽃GËQS qsaUJ6ĤLp i r`sh76mHb:ғcSwˏڳke 퇸]PLw',YKh5ֳEyPXHoh5mhJ)U&S=dZVa1 D'KB]Hs8;=<ܞQncrd5-jU\5JY<b-8!t^ CC`,_0ˍg:|ƍ̏95>JKk)U w u_~n$-AٺU^F?5 j@X@t_̮["ul6"X2Tm9WC3݀ɽ.g壧rrng?s5,`cnAC)ASFHE%*jA=K͂{j+dT«۷ZnK>ZbisV/uAɡK(^6 K<*worN\) V: ,,2e<ǁWz⋓3x1%` 5 ~rehuQ(b9;@`ߠ-Amg@yt 2k{MsuY~WuUfq{Ʋ4Py/ȇ!rw{K v(;>+cy} 1wΌOE<b8p3>%lC W]Zr;]"ڶUI {&l_LyLA8nUA-2A xkt􁰩\I1KKnJ,A, ]ȥsTa۪L  9G_ oE@5ij<$l7rY,?\<&l+P *v2ߞ\Q.|SA8bc и&Mp8W"R. m&7,լM󁭛v4ÖlсY* _M 9"Q_./nO'?/~ٗY'zݕX?LJ\y FA2E9]͐īVˢq>k@eDTyml0fcKd; iPi.9Dd#N<:YGXZ]Ԓ>j1_+k}Qye}g6†PNwvT hlq9R)ZXv{>,d@#N=ͶMz@qZ kJX||.#.p -a+ O8AU%8u(QơkXoonc}~*̅BF! IzNRO~qĕ=17Ro# 1ltkBY,Z?~~cMجX7 #唪 vhڬh6A.,ħAoAw) 5:`AO?&K ,fZ.̖j /ѐ (sSnFmYI̩8?et O<}{ZʥlIŁ< H'۾غ'y6]6y@ K,7qܖKsEpk ir ^ZXHe=X78?r>(U$Om4%1j=} SW̱\YQVN%G%泔a>X^Ay&j)R`uz7C5+HD4(6[|5k'G] /< oiȂC_g9 UpDr\h"ӼnyJ/ˆ06b [k|=K _{,0/4(JU'{sL>JHNC @H{TX|Wfн몤M_8А$֞̄N3|-br|է€ҷ@Epƨ8Ik-db73fš>?}cf G7!.nwc,2;EFk h+0Hب=l3&<_sM`^4ah.ElJn֛ ,5>ce nAX7ƥ8&jZpIb) GE*CHmKxWQWg~+T$\T?-Q@D$#KMbQ;5v瀗=/04:;mvUvJ\٨O*Y,=;K H8xHVܶbx1i2K!cGAF  /GNˮF P?TO )[5-5/8fd,w @uG㎕_OE9 1 ThpZD,wR+9m@~MDLxKo!?4ڪ8Ѩ6$ez?~?e̛]Gqjyj3wttEpN髮0 [aY/IuBf= }|i55"_CJ{o& }[ S㸾þ!;EXAp=,lp,c<12}[^Ĥ %Y nX7^۵|{oV7ې,P{~ɀ-T䞛} ) NcᱧW܏vJZ$hXZȬ.K ?iFl^h,LeM6"i-}0rk2t&ibR'e%sݓ25 ‡Vǁ ]= 5 }$Âk5nrizA.6 #׵mkcS x/eH>+ o*/芐?z|Խ{u7#z_Bk~JO0JF@QY_Hl&T,ĚhsGQO7lZ^ >Kh1g[t]K!5||^þktNm~O^ޘ:Ϊ2\Zbv-Tt,MOsR/c> (-Xy28k=,\ "m3ܠbM` / j6a@ 9O`{+`Ş@A  P,~Mha=uQ Iؓd7`7~_m1lsG_br^'M$.G##"ܣrVºy=eʳ413#x SLe\ğׇa0& \*r0*vTf]ܓukedyBYp cK5;6jGG~:yG3q9Jybb%$i 8=ޥ2:EЈ",aYNwtA"s9A tCȹnu<^N I-[؝!fȁR]>0qP*4NC8C }oD8dr:٫~i4t$N!l^Ohǘة>fS圶mq` 10.$o;ǴNn73A rg+ec"tU c6r⾞A>`2Bx*Zb٫aHtUaǂx[@܋%r0A[mWeTvPn& (ԉA#L,5VuѴkH?3њpqE&@j\K)Bp>RZ=?*b$l^HV͇Frz7|w!XA;x=&,5?赍lLPܗ affz7>(%թݑh^bSKҊTe$Áas snSlnÁC0ҷ//:8K-zhaps$}%'۱JUk}﷾W'+zq5Ϸ怽LS.(a!QɡF_hd5PDpK$\40K84pre,B(cĢ5@^^/5ѡ~!P ܥÇDȴSa16 ?|s(!&?G[8uclkBFln%YT-N/SR׬ ށ̽ou\ Ddd,Mw@\SÙnF_?5xM9E#iLQN`mYt/91~PD鯖cG:K3c .(q4s.1O'tT?Ʈ̫ zn*K"X1*Je`ȩJOvnNB,{!'PSU3J@U~B= [M8%wiK^"(۞qF!R $lʓ,P8=vĹxHyiHB͌L_UH?_}vmp0QUIO);XLdq#5,:Ng.O> G[.ZTσd#n_ Q}' Y;XPVUgo ذ5ՇRm / ׵ʠds&Ps 17~&fӃA%'J޻ ؇4ĤEۑo_lQaF6ht *'IP wy)p7xN9dJVH< ƥ^Gk'?ɲ$'$}t~RCT?m )gcKQK`vZT: ObQ^4@ϏT'&\{բ +%|kIU>DpCpF:=VUoE?1#5 FLUI@YZ$ǿLt+ړ']ÖS#{B aq>`o6EF.XKBý\/\ OR晉ezp;JW~W;Zƣ 糸:zg%oJeg "r^0y/FKry%Ҙ^v"Wy 3=(%wd+jkҟ[N!(K3Ch7ۘ)k,d.U,GQ[b*lDQSMy6{ gO~QUݠERr V,(|#e!Uϭ?ӧúPMqK}Iugt="+vcNȿ^p\kr3 4?Q؅bZz-GNS{*TDt!.92/gcC< YIp- h&ֺmf: 3"*1)\ae9b")LIgr\rq]:dUJCK IDAT W9|$6z,7fO?㓏x׵+=튚v5(dh!T8/XBB:15ѹg$<;#b%C~Q,fE7~sHR֮ve7Ho˩Oonj:!RYE=*5oG(0(:4R!ER|*4SXs/ֲܞ$CpOeŷs6!B^vO_O]Wu3b;!#4sg|\`gb?l8uSEA̗~pڒO0;SᙰmI/r!*>dpEFcEHzdK|i~-IQGE^a҅؎HE~"vwخ|XbRc8WQѫD"~j= O70͋.]T#WK")d|@C٭x IQHkݲ?P2+m(#:6 v& :z}j+= a0YժF0ef|jR ӧ|;F} U,ٔe 4=7 rh:|& Z}/I_ޟLѯŠlh0rv{da,RRL:O0pwr.Q峑7ub]-x.gx~ﻟ`ן_'(gXuNvS4[!v58l2vuu5vU!P8ns#V& BCl~P5l+wBO/aN|yA臦fێŠ'J"_؁ǴmR孹vˆkYK}(4B3?pSO I#^+a-wIo ɝU01lX5z_bdC$>3aܵ"kF0tiݴuĜXҗb}4<#΅w픇G/vH*Ds8|.㚢!me|HrQ[$YJ3jkr)@2黨f .)'r R_}}533CbeLyOo`sԿ\˲\ADi^HռWx[Tlxj֪ÓFq2^==vZn9:9t.6s֋[-%>!Ti۝cBjR *KՖ UXݤ 1߆!x'鈋0kiYfyA$ejNt(VXi~ hEƲ^:؏O-|u~^dw'>RWoZƘ@' `t|cJ[^nӂ!-B/u;Ɠ j-_E]Kqgd{^걚zݐyuUJ/o?"hWx{ j8떣3ה"\(#،͆JÆAJȰ`Ub+1Zе$qD ),j &OC# k{os>_-i^&@gVuǑ's ]p, QbZ~٫&֥y0d%~# '6!Jm')CZ˽hta#}{*b| oUO?Tl;ZڦTE)HKZ 윍nj -zi jGIT~:aHR#$g8͏7/?~曚kNNA>3߬Y$?T0ce4]FMZ^\[኿);SO a L&>0\3iSFשD[|;L Js QV;/7 NN c<4[yN% A<}vnSq|;NgɏyaTQAX~+Ho¯7ܝlr;⧧?R;7;J^< ͬ7I4T ^OKM蒞S:D+{3p:1[FZE<_] 4enxI-k_??+n#,{y? HG@陈2PX6<S9Y$sd6(yDC65XK, LAEa_j^/:. N͝[ det4w o($;фE_K&U-we]K"{-T}22j}u]k :A#`3*u 9\q+ڈ ̓Fl=)sϹ"S.>}}Vn@k% i'!R5]]^"Z,F %e,AE;W^_ 'VeGoթh>n/5llo6ža[*pځ Xc^g)EڰqJ>'bS uNQ~1rvtͯ$TQ4[ϰ92;"!^_lMw'q=jrgc855 .f!/`1j ك^akc_9Ctrw;'GTeyP|?o)nLW :^oO^aZU$q@Sj`(XQսu| -v(\FvH3jmc:(4l&@buDq jͶS*ъ W1j]ykI`,4F3B3ګzN)f!džbpPOYJHZٸ;&~yT s[myc,@/:Np]LŨTVn`9(J;'w5`b=:{J\hxLU@Sxn4ݭGO,DUٖ;: +Og*  D;߮k'\.%ؼŮ1e;ޗ) ڷM(($}GՓBIֈ.[x~n4; ߱NA 4sȭO;(#3c#K_0 7W !Pc^5 ҉6ɶY˚IDf*abu;27_Ti{doٮy)Wɓ#8ڎ!$L $&@|H p|}xXY bO&Q͜ *RtQ MwT3j?^ۛ4Nې^}X}w/.2N{v Ye9)l-+[C0)WWͦExmF9@nsj97?hXY3׫Q%3€u!n~ʠVD}5iw%{|xB!|ۍ3gxE2Tr`@ л[r`oДD]itMR,X딿%g!zj)48؎) nXtww@N$ Ԛm(q0zacYJ}$=jI,x)ڌ=_PBnʼߪN YԺJ;glU/t#43xk'^E͵6&)/ʽt[ņ:>>Vԍb`0P:-l2ɣ9 X^wf3dǏlS >#4Jǒ*g1o=Pųj'cd:l yf|=t9Tò_"2>Yšs$pvc+B/JpFW'b( \  0^꾘-w(cN=.ɦ~0G^M6>KUOg\K#NGWs燪>;CeL֞#WVkGV{eY(g~Pø%FF'oN0V$gj2AR,6OAلMfh[g=]Qh+ZjYvE5-mx,q0VϱE+?hfhLZP 5)qTc @!0F}Ჹߩ#6Bh:`w_/_O%' ATg"c}' -4֚\Maz[&vPo"u:&bd"9 u\SBBln9#=lmpZ=w`Zv +,9cRr'j&z5&ڂҒ%7z|K`a}3㶄p=>z1Br$⛧}  D$!@4H6g^#i4"D~sxrq3X^˂TXLP(I6Z;֎Ugެ)EZC%ٝG@.8r$ySl9}!h_Y!]`ᒍi}rqLFMg :_xa7'!+`)sa\D qnBf4e Ͻс2ώm x:=aŌ^/Hx"@,_ (F\ڢ j-D.|}rU]%GlLn1(juhU\56V} >DZÊ}NkB9CY5hrIΨV 1ܲPg(Uޡܠ'رV\j}vTuR0aEaad¿FJWW@x㿧W+U|uu" @`$ zq6~oc-kYby$ڎY֕U՝8|YpX˽X*F܂yyb _ ['棛&քi2׼)e(F9ƨc%匆F~Vd?9w{maRewP.hA!G=Knqtx}T#V7nK񨩨e8!/;EgZgJgfI DȀ.7'S$edMQ"5}b&-f0Fr/`f߅sFR\S'h˽)ׯwאo.$T| wИ:uBrߚQon,q<_}GD2=7Vf[UM GZēp-3nӳ))JJk2!`m=I.: p|1$*FS^j5L9i[[xdλBr]o|'OʤPaQx,AlJ߆d(Z v5 W p ƃE<Ʉy1pEٚ]HܢStG_{x|^x(5a?M7( 9v.Isq&mf*վچ˪K]- Qa\PeNEB׊NJtckj=pe7 &['+@M2<:^e]f|ܒO|;&PdmGz{77o dHbaϞ1|%&Y>uM϶s_: -6jb&hr.[Ve^?867Qs7O.H!d^Qǰ}ynyH(*E-^ x1,v-qqm+ԛ ('f4`8/6N&fPBWIn 5bs(ۮ✉ҊcoZ+UT'@ݞTZ-"p Nd?H?jj7Rđ g;[%"~o/9$jJ\&(Er$xf8=b{ԬRmp]kg_{X}EGz6-N8J ?& g;ni;,}'z{YoӌtKĸ!GK РaEpC6쿻aU?FJ^.#JчP&+BІ%{I*g 镑R``& " ibh]mj}ͰRx aX"n"*6>l}MCHέՀG/OG_Ѱ,a~nV$[&*4⬯DSX c IDATeR@S|Ztt9%xKOB,噩mmJ7@\aa*iq`*|den A| aǩDpdO+Ȥ uVnd2)Qћu/?Y/>ezQyNI*ԾÊ4|`Їc IcvR(I602&kZ~JnRi[^O]0'fc1vEeCl jH$Q׿܌h?_Cl_j3L'hKH%A^KwA5(aJqjƩ;B'k5MjhTF@UR9̈́48(BDU<G\`Sͽwdr}uMNmJxz+Sg eQ61,)s(SJuC;*.j)%4l%-tlQu)Km: 󫋫Rl%몭|bT_2}[`(Gɼ8oΐIt>E}_'~˖Xsj(ıH@9 vvz,41SÃNL*q85ՉCH1 ^ qk(Fsn󁐐"،m~&tt|Wo7_~䗼i(?Udo?j~(̀)l5-fe{6)y˩Hr`&xSNOT!?MStRx ?"@]$6_f)3nqzLVd"Q$KTt&(!1Rrvsj6>Ŷd+PP0Pc۔INL짚G,#/kGb{6Piq)LF"LBstZajЭ owas=k-Z>PFl8X%7`d[ E8 Ȫoѽ `uZ "h\n%m m5H>f~Eށluc#)` dJpTǭSGtf~Z[zP{5es?{%": @8*{4 ͧc +QZ_>:ꖖ66|,XחI^]@ w&w78eZHn/anϗ#ة/^}.mBOk )C'cU1J(2X+X"1\`y+UCJos$mCb'>I=/55GI b*\^޳!,w /MgmBnUdsbt?uϸ)ة[Zo)ޞ$'I>k5`mHG!{zhgrgE MKY} O:jZf5E\]lk30g藻',K$ n ?778ڏ?kWDE6BԮJTOٖ{=jq6wש}4ls56D,\w#]vu;W:Jd98(_^1F^{^akrz2+e{<"-;dPGya ;AV4UA7!tgqЌj"N"ܕ*䆻dɈZl S!EYC=CB&UY=^l>,݁U){ᬻsŧJqNy #[P'NN"{"}:Gbc|Cl {to̸lyj`JJ'Z1,Q,>}>LNBZGA0mk{Agϟ-ҭ2RdYNC#QR~`$*6N22xI Vm4D5Hm 4C9ӦUl5kwzZtIJ2m,Z! ؎B-TGa}I Izںu~U)vPf` P򶚓#KސX!6펨K뛯k>+DJEiKB#[e!F8ekO>~|U βJ&!u"U:=89E, r4 V-&Gxy2@(?7=-ve mםFQ r)VaA]ւXKҞY^ 3WiA.*,1YL|?9΢5T @Wz_5P+w,Q<@z/?Q^KT.\Ra{-mPSڅfWt?6? )$^3z.>ݒ%n/=OG(Y'S02;5zD.=3gbf]KjZh6MG)m}bR_A^ y櫟~+bwfn׈ذy~]RzjŲvz_prvr]il_,)k\<+K Y?Q>0%oX/) tj\y?෷("nj'ga_%94V6aѺǹ,S A1t2Iѵ'<ÞZI?H6y|/9<n؏xic})3;&khh,@~G)4??jvJ[|aw*e\ 6е7y{7³]/ R.~fjrP̫T[2#<;d쿊jzF,xؐjEQUTzю $dr'R[V̵ 0}ErW('Geb'lEg W{X{Ӗݥ 8t AFLƒnہ /iz͸ҭظ= C\RB\xӺ 9D$4k!?&(WKL*0ULͶI6J-Y2@7#i}[H\8u>ArrU,<= 0?н@G)\S+Rɤ)%ʼS"&bl׿1[N/^4s;ZUw A]?˦"]Znһ) RG.C 62Nz{2.T"mQ[BفbSc'O=A,׉2($qPU =FZ,6 ֛\j T;"i[693D3~W4fw8Z5O=[.g>!WdTB2gν[& uC׳@{Q?q}=8q5t<OJuKzzcRpAL>>elZ>ɐeo?j8/R aQU& }rC-A3Iœ1pX;fܺQjϙz`r w!nKN}F RhrnFaz>A&2;'a[`\9~!Kc:Fat Pݨ@Cx'Y ?,n/Z޴e_[ZI A2axV=P/+걓Sq0FQ 3OL؏kp!u,#@mʛmX_~yHno"I"|q0;o{{Qbxܬw/K˫i r2;Ll %o[.nFg= ;2yגSl"_L^~RR;?l⽃XPB;b.D a#x&v*5y+!.P"m&_Ï? JY IHmt;fL~dTךdRK%LI6j8q !\>j#{ I¢a;(:@T e[h5XKn%$kGqO `Pn 䊤vHxq۵9Q3Uǻf׾"6 vXYM*Z:۵nܪr˪+~<<[€g %5)OEoځgizNnUעJjq# 赨 Z-+4q抡_d;K?=XB)Bz='|AUz.YE5,2uD VKP6پ2Z!%@l)N%!ƨ@Nm #X.(h. )lzD n=>y𠽹gA'kMId8~3+|˘ nWJtjhl 6Œӓ50|Aus ??[ICEb4(J S͌*'hM|](@qUU]ރ&'vlpseƹtTGx,[eC/J`;(Ҩ,bC܆x]N4@lS[Z0MFFmk@.t0VL֧.b43rjpqEU<]#p DGb>&ͨ\AE5ӫ9An_>wJ<3e:wM XeU(26(^xn#O NJWCj^s"+SUܫ7o?5X)){\4QL{Vy2ǍF5GNϴ?u=xɛ![(̸9G7^O-)Y6X2p9 >Q5N(iG_ X3Dз@QmvmIP s<|z Y,G%K#Y˰gxyUax#xhTIܡv/zlƖ{"D'[pf;{6{)l*QܢSh*ZG|b Ps!SlaId%Umsʴ.bx]kme1QRrMYĶQZK AІlHfך`YB>@fP\ aKЀa=Trj@,6|G@aOZG0s;J3ɻlZ$;H&T4r0DD}WCac(wn;B!9ߌ3p<(S?]Mo1;Iz,r{R|+FEIf_[ @&4вsͭDJ1NIJWSgg.yS:NnmS*y<ԋ8 AF_`;<ݱܒGG3]AN1E=NJUv!fZ֊8Vd RUEVmHrRu[n!2Tge*{i[{%YxГX1Cn#4r q/h\e_z|l^&z9EmkBܺ~~|_~森xSEͿX{:-; mi'>(4 h%Rcի(NP 8]}mW 6^aݗ.viM⌙̠MOTm{<63@1;Ǎ0:,6ǡ-#4>>>|w?{ݣ(!v \7sQ'R;ǟ\akI?E`%g(fŋuOۄ6miT xK\0M5N` Q'S "PT(B(I 7pDE<;y@'/Al1۝{PMQ]+*;mKX{[?zx*^xye)bpOwE4R]f;"FdN!뼵[b =VD0vձ "㵨A"B-乖; $wPXזсµ(V-D(1 TV\l*n%8$[ jTʊ+n45x{ȉA fYp}? ~k;ϻf\»r@4ZWEy nm~kBZYZ2lԟ(!h|՝^ϓ\zpUBBJ 'K%8r=#^ݓ^&.-;[%4DDZn: kt&3 #` 僙rU="cm]!b]'טvs;i./'kC=ksAM)kq4a"8x{ N]3R~t~5t IDATc֏3r80lK<>jKA8GF=\ Z3=(}*BW{Y8qh󍐄c+C|(%-t $25! { RS#QOccf{[Zؼ7 x~M^0:`Dpp&r1Vbm[`r!=Rp\$HN|VɁa@y.QIUp o-8U-B|A rN}ygŸr)w08R[)10J֋VhU &n"2ךj@Q66 ju0l, |*ʍ! 1ȠpSU`UYPZY"& 2S^ b\DiM~G?;y=KUˏR'^+)@qz\TL$j% SrzY"F'"s7G?EφXy7/p{Nz(:Tӯw1Ȝ'aӁAG_jzd'x}]f~1kFvR*MvZ?^JGY{Ԃ72z 8k)>EK5 F+g:;=p \?=8bv^{Mpґ]zIn\z}N6k, J6r ZJ0Q;eWx&Gp5AWXtd|NV%}OCGKkܩVdPF kg:*=X+ݞ+'=[',AR(P _p̋3tzeppgǣŭR6Ogxm&&z4z`btpkZJzʧNXF;$$A/̎άꀭ F[i:n$q㍑8 Nm;8,\8`:\ ^_m^xBA^2^Cܒ \gK/z]X drqلWxؙaX"Tb=/I zZNXQ0,3"nyh bJx&f3..=|WG%zQZV- ;9ٟ(PTO7(u2}.ovwRz'Dh,{eY9q'S:4NNS &%qOD~}L}'t@$[`8|Q, Նj3~+-e\}3_eV<"㟷OsQMm✵/qAiJ|ta*9.BqA㍣kNv;;!p#C8wO׋i#/tOp*8#q=8D^k<}.hVۏȿv??9U0͢'f3*':$컹[Z|oR=P?D4`J>0% iۜѽ儣C hjS8#8޶p{G8B ^gf0ZjR+ˬVgzq{|jf]?E,X{!xc6`G˥xIS_s88'5&WC+в9''UVEdjn=h2G ^AU(IGYL~#ws={Fve -xL0BN^c $ᎎ ll4L/6A8(KPWDӛ 3٤fNrNTrJfp߲Pg}p#"6DP0&|_|CD=?Դ?uS w2NGB/;;Rs0*f-kۢm ReX8́~߻[1C[Nk#rѠ MFQ2KJT[Ն8"4[:*Xzx%|Qg-)͵2cI5-"^>USʎ髏˿<'pe }vDl}琪L@9SGz6~J63\P @Wm̅#-xm\8qEVjɱՙӛޔ=<*JjO3=4OI\Dֆ ߼Ђ!bTmv%G 6YO}9tL%})߫#pF$Uk )u?):?~Aayv%\aCokGgn2N8zv;+%wSCҸH9Bp۽S6(A$i=:tZմﯳj:8:,ãШ-#&^ѷϜbHp|h]ڦ Q=1/0upjqc'{έvmx̟cJªpPÅŦ,-2:io uSYJq?2QD^$֦S Wvz~-9vN+ɣGtlU_c>:U~N^5<_ۧJy?`(pd / `u^b lq~LP\Ԗ H+ hVpvոcqV<_8neE'db+1姿OM]zxrQ4̗9eF|uyP)3Qpa5֒ $;*%%ǀf'"6uGM^`5\0z=eު '9T2b 7\!vM\pdW~ߑ$DQI6vDء[/SL>`^/O6MKtN8.3Kz- A;HVK>h' sEJm*LQ_eJvaL'Fh|ͯA|}bx/u4I+Lܕ@9͘f )+1I,h4?_)yx`n-#pФ 3{}Mv}]-߹`>tlQ˪<&yUuK1rS"]i LLڵu%QYZ" HP*̬P0,xa W ^n8f@6J%Phv@Q˚bŘzi@Wx0`İL0n?K5 VJv4N)+K,TL׆sI2Y/Ve[H.F.dɜi7:=ǽwGk@tꚌd"v8^pep>7喹zqhpZd!57ULG3TX!R ޤV`h)嚚 aA$d8pWsDi̘ ~`@`'u0tn,h,S;-z^LjL$!)4x7zBnm,cη80, Xj`_W^#4eU1[RFtg[^H*(bnpwN-.+=+g=o(B$3N[T`-?! I$ n_o]tspyyg'Y*E ?8^C9qyQv4 2K)#}'93F4-X&STga7%k*oԃ(l8i\sSo"uڔrY0M皷GBGS3}M_^~6 Մ6|xqR.&&O"[$bUH-Q?s+뢳ۂh9T{ߤh).M(I!29Gyx<\ű%fa->#r6TZ^n͊ǡ`r@حÇL=_~.^v+քNm ^_GNQ3*AT'.sQPBv,Y4ˠ4!c&6kUd8l _3 oKj~jZw3J}5CEU* ÷$%Rڥji7W>^^rG[omTdcn8Y1Y[n¦㫁e޷xSavg99v$6Cf~Q;gFln㷅wyѽJV4w> ދ*Wtz8skn ̌ѩv1G&Ϲ./>_vDR5}րMD' vrO s  eS=oPhda'gA3wDKL\Y$~mլ hno mO&,|# =+M q!ꉼS--->Ǽ-ϊB$;.0~y^ewӝo {=hЮCU7 )G-wp/p'FFPaa{p9z4!tOk:]A< Ei_F_u /tAĢ~E7yjzܟ'N+ԓU*7Ym(ǎꏣB?wFXɦahoܬ C<`1ʚ^KQs_7mCpݛ qӇT4"1 nZj]*'2kahc1j}>' Z{N >hN7Uykw4&V^,;}_KLuykWJV(MoG"ifU,8a-lyQo}D{n" "siDl5L00gٸ0|GMKkt]UJAQr ;K+•P< .MCȪoXr&Y 򅡵 4ҫ,|gᾖuTy$!`R>tPG"یE~!h '6P4a|C=j(k AIY$΢.ZnhqA>Vde@ۚW)7UE1lN~ӲC(^a ݮ?X4 +((*ѱ~@njOiT}m&^V8:n5ܿv3Sivk E:'|99;;Ĺxh%do>(ͲB {O'o OV@fpx_64M*vVJ -䮸NOilZŠ؅.~s], x Ys۶Z3"{AxRx/Q"Aڬ-tp+e3PmĀf9s#q 8>~k: 7O IDATy] 3ڨ#qH~z(LyHV뺈j|4ǤUMEŲ2-] 8 &4ߎȌwM^ ׯWN3wKw;Ttbn뿾g=LZ`̛`c%.-u`B~Ѱ6lN5k6oh05IeilҶP uPL_!5!- ( 5gx=e6`aL\'w/InwPq#:xaD~4:O!**D/[xv}|;c@mTto@sdP57/+iԏh?dnT]k8anxT\@>,O08v w~"EXNqaAZ'L w"RJKZ]h"Pd% Nζf*@,I6ڴΚSxkź \쥋c ]?/XG)^ap^ag?>"z QrE *G$-G QyˌqvxnQDΪ5x+4?-qq淣Q^jKXz Ir u]ov~ԤnV-u̷EVI9VR1,\eJt77 6tf V4=5i+gWW}LuI/Y`86۶YX,wN:Fۥ&V;2}tulrJtg׊^W )ޝŹJYACBZҬxTzyyҢ&VUD2qmG)|ZJ1,S+.VĬzQZ!EnmxIݥY8*x7FRGC!On^ ܀(( t~b1Zp-FFtO(9Â$ Ћw42s'|9v?ݲq_97Τq4!̋ÃC h.zSQt 贏R4wo rյt8d JJ('v cvxO/9a&F,\>P'өڔ6=/ #55'\P.3čFȘz@E7/,_Mp`es%Ip8WoGib sҮUZ D`і̖Vus Tn>?4"Mos.ZE+@|,h*!𒔼Z:åke+YXיq}T<s]Pa4fo{_iT=e؜"FWF43B̋d7!RtX ߶gw#Sx bcbH_iǍ 0-% `h)bmJխ컢 Bm8tMRdɓ~A*rf Ga/9c#2sp6MᬕH%UN{׾%[rGBNq~݊:vqNj&`I1#0pBܿuG@=Wԥbsvs!3,k}N«O֚`<#[ 9ܵ9:?]T}7'j7Cqٽ/Ur-)'rA;P̱ kS3iFls1jO'|s=S4J:4ҵ 6n'cymGXdq'P,*[Agu^QaWpno-MR[cI%21T%ρśoz7yQėZi/zEJ<>6b*Z@05QZM&SZd L2Sl^jT3W`(Z#ά#0j5Mvٳ|䚞a+Ltx41gQ1B =O\.Oj75c8>؟(SZ)@4@/8-Ƒh9 [1L 0B}gLH) CͲ/K| [i!Cu3d \D9+WP K%OEf Jp'a^j#F:N"zQx|L")*Yϭt0,<1ьKE$P=z4Ad6:ؔۃ6*[ Wqkq)f'a)ӫҳW3y[PVWe q:XwxnINE%ҕVrܦ `$\& *((DV܊]nbSlR<;f ^ b#dϠ0S/U&$VM .Kgƾ`,f V*}KY4:UBB)\M`?kfa3-#2{3 [76xB494aLLrXXv3C\ע }-nJV$ DK5\_e[7;F*pLeG݃?HU`JKc֗}Fٴ_Ҳ!&T p [%ܼFJUJ$lCE3eg4!yٓ M1 P/@6Du%ܕސ ^ؑS*#,!KsLXRFIz=}T*90UPV#qJr_:18#ϝ ޒHܻn6xb6kU:!.VLWkdz9Ӹ(L)]Qzpbb}{j#-eE6CގԔNT^xϙb9w|;xT _76SfUJ#6`$Y;c8[;\GsfYIDn0$` @/~) D?-U0?Iz j5˺oBY7.2k?~!oN#p=V1(0lk(xsN&_*+5'Iiw p$`Zbަ1Pj pMZzbzwKtapbQqxk GWsMx0$!qi:1{% ;3T2JK8>q}>f)3ffhO@0<^)۠2:Pf@akqҙ7!Fz׿x!w3!1$+_?~a= I^ȵ4DӬb3XfKjj>v"Qg2n"RE.K2~uA\Gm nFKMfso?N&sv]\u]*5 Ibc=8ԀU]a[Cxlm͞R+ħ]5S̊W|!ul /q+1NTl2-l"Nx8)$\kFg%yHwN-)in>L/HLLɺS7d`&Ƅ6q·:Wf[_dلoF% vƫ؀vq uut`m#FbZIDCO-!EiĘ G;? :OyubDnu(yw_[oహUݲȨ3gt(0U {po ]yd[.`D-IN n~(=L]އ@/> 8zYXd~&Yn>LUwsTO5{l=6bϩ7姏O铔DYkj^1-pq. TTM= \g u\ATׁl%6Jx25? d< +-I߰ `:&IZ ᓺr= D?lAPlӑ*2+Y#1d-tll߾6ʘNոh9".:,RdvPgO_.4Ê 8P%5.Gx2;*&a'Y ܍ RShb C[' i;fp=ˬ;ܻ̭ {<;0 5S~ LY}K"j\&-[wHS]Ly_?.u K`g89Q99OqL oLρf*d`k\ &+\'*NwٷM't뻔6q4j΃*w(3 :q' 3q"`j7_.OKY  h? fh6.ۻO2EP> Gj_|>FIn"ib3v!E]b!|].c8+ n}y<`O$܇*:a.8#nPmϡ+D9Iyb}s \ ڰH)HáM*p36LM*Zaᅬ7vRl6Y\ -yarB(Y{mV&ꄎi{< fUCBVӛ-y)v+o<]T-¶p cWρ-tbO2XP ๊kpH]pRC'l: Y& IVhe;' sYk0x{` < h&Qq5PD-q_rM95y5'?[0YңiomvHHaGvd u0\W̫uNfʯV/4˃WvQNVZ!q(33ĚV%\8E?[ֶ]`[ ZFQ}9KaxR#۩q0fTDߗgo ,8]ϼ~]v!]ü+QES*KpZ,VH~s⧩입68tq`L nɯN w* 1܊~ec%im] =*jTI5[J:r] δ}"c!;ǔ؏z.Yk g c< :ޓ<E<g /mkqi:.D1f:f1ltH+6GlƳi[$}_wgLVفQ .Yu3+wzi]k_EJ=gdܸn-OL *&vPSjgRTLrQLqkIէ.+\љˎaUu~T J@.-||>#0iDhc 8\O`"vVLX(=m/ZNpa'6-2#2UTx`pf<h ߓKHڙ_xZ&\q7Mczu$h(4%lV1FI9y 1q3c 9"Erw L=OhezbõqBc'4,^l]D@x IDATez^uTt0/IUIpo方ɪt&D$szYQO,d5-"^Wge0 SVGo>0 R5KFFߏVYiV*Fl:Ҙ #kH+$ S)ib:. }r!#^wHY :`pQ?>^u`0q"뀰 ^igSIj4@L[Wv1\yR)xo A} P^xI܉Q{wz8wW֞AC7Kz9P=^ll!ud%xpv*ϮfBFVɑA؆^M鍅;5ظQug"]dMJ/NP8N<-<)HN^Ay/8o{:9ΣQ>!nch3R?L̃2/Ǫ$@G*u$ղ$`ۢgu '~h{Ԭ892IN 7h|pIzp[K=']!*^{B9ρW-I`b&>E7<ߪ 9>R-r3ԈB MA@h~8|־B5k͍+ :h4)+w"&_i90ȸN:c\o׽K"DdnL?/GD TS8Z *~ ?Ouzū|NhussU](lB[=-cSmRP2Y>EL 'kβ+v>GK]bJdIWsiͻNoX\gcNHi9zH`R{(lζ' k$7<)Q=*;~~ 86l1wkճ}X&(UkVZ KVds/־C g[UT`ig?FK nHhMDHmUp@쑜l6WeC5"< \CVXZ;]ߧQ]m4Nu.)Ы3Tr+\Of|v T\LesSہ!IXn@?џθx{#Gα] JVq C[@JIͳ- ap#sƟqyв?U|H rm$qx)EKעV#䄰;p'ccȗ2-6;aFf J#W&p5L-3!i.ϰV]ǹ I(lU]l ~k7{?F=$̏Ls?)6@wy Et1qtoKja;Л[O#[L}԰qcc[?VCٴNnģ`B¹Nk_;$ifSRuQzLz'ëvLBuȲ"R?Xϓs/m_xd((-g- Jvb৓ѧ{%Z:S`LӛJy2r.㤉yםBO`$i ]ѯ*|$@}T%u&OjOy"Lվp1[|ڴy{-;zxL楑\nr?Vԁ σUe^FSLg^0:@RVPNokW#UBJhb4p9qWuזv[{y0 У6 K 2ЌH~Bummp/ZN)~DIiLb5r`MA!y=){!U[ElzcmW9$ e D]gv>UQT&]+N߶ժ7p6?| ӲWd4Ƃ1ٿǝGP%*Z(ӖR8TU:{Feua͝ r P  2~gkn:H Pqs_{SyxDFM L|M` [:lmiD4{pKP@֌{QZTaWQ z%W-L3e,-y7.rёVOz7q"5!MPI8!GZ@>:$H޽["h*^DEDZ5p ']J5walz+?`'qdž-5q^k&Eu$x2 wHGTFv^T V/ n= 0JmⰦxBe01 uv!(Aa(x{a73j\p%[!B꛻%=jͅohGFThV']4C Jn]Jbbc3yR㏺@A1+`org| Uo/}1?L-'v2yBTt#vgѣ|D~DѣGѣ/>5gol9 ?:`)!^;!wuzFYG̷mXdzy:=G$~nzQm}̭->ݵ"$^Nbfx4Q0nmUOABQNKsFV~9b>DEjz7ry{7Bf>iz g@\SְN)2JG}E$|(1|#GfU]r?&SAm-֙yQ!s[Yk'LN%sU .A S)O=u D5tPʟLmc nm9/Ir!̼=h܌2Fw`EEX;Q54hh+v߯׿laX_PG'Po  -ȷ^t}+9#@zөg6oTVg 2 7? {39jǚMڞp1Aܳ2l'+إr =Qno&@]G0ttEJIWheqz;z|;m6DRjVF?$;G8>5Zȵ6q6oiK͇ݺa {2#-gЍ>m/&WwE T8r0=1WmB@hAu-$ɐn9Z}32$A'MF \ӬYOQ[V9[9|zVYo6ղ=mK<(N ^ʼ*{҃JٙqvA6j?4j)yhŭ֑co`l-TV4KJrA/ Դ,Oak2С7 *o8jR fCjj?YWW6\'ˠAPۃ4m5O婖A~Iڪ5 q_>aji>E賂'Dq,Eq&oUl&FjR6F3"x'ZIz-bohU:zQMuN:bnZ PYbMXR IVʩܺs '8h,`A4xs^nz:pˆ,$UC4Ɛ{[޾JnȀT"`~cVo,m+15T/7S$3Mٜ=}ߍ{(7iڶaA-v*7z>e՞N pɱ/W\xm^ 2,7KUU5X @,.1%s_NWExEAin v@P;D7u|uާn wV8` U1m tkܺM# IS d_A7 BEZ߳ޘ uPLw|AOl6f u|EUh7Ji?]Éq}zZ16&Xb޸PRe Y۞ml(@ȣUsFứ8$_bѴqAwB'daB"G?=ܖ.^C]ܣ˚%hE {Q+/+5-_ݓY 5P=lNcB W7韛By +矩e3JC=û9ɆV8UD_@'&Xxe}`R-MyO~S02O_==;fo:3FH"~b(y;-N\D >Z?oUs^}o`%b:5x%WWFپK8{ (t+aR1vq(vFnѫnޱgA.5qCSpȱzy3(b^4/>[p%'$ =s¼:[=;?~[݁V tFi)b,b;|a~ U{[C$l&:V`\BY:JlPb/n?9 @7~|bTA@Dzر㨲̃0&1++_z+C`w0 SyQ:NJ(0ć,;2Qd X;0= Hf{; #1ҿH\x&P u̸3LW]CeEk߹,z{@ ɏWgQ+C5ZzK7 8w clZT U]GoۈUiR{TDY+]Y8 Tv9*90$@0p>+-bL+Ihk7F(tY(O_ow .ON%oRmY>beM~HXLpv@!wkwMN% =DE zb Z.KVYqbdqWO(_*70UwjZpѴURW`1IfTmyo êRn6zO v7_q`gOx̛Hb(6]4`b?R7rS(xQL֫3,A P?K3p|ʜ3$I"5bJ85nFqc];0IhOUh[߀n aÄ3h. ur0lxggբ.ep+pL2<.@g?Wt MAT׹ ,B IDATэZLr3Nx/ j1$0f+t@B߳-Z@)~qLwhh ~T b_Xe,C":)o;*sq>c)71PoT;]AS->zݣيޠbk.拤Ⓕ'yzMC_FVk:Ix;⣪-ؓ:3ך97ҦOC$^8K~p([]& `:It/ƊcU@K5eۄXfW͠>)'%/P` U\yfw<{|rOs98Xp/$jti>rE2B1y/~Յ&yP0OZyjC` !tZUT*5$]&<{\plcms3-T0ܠ`eR.]Oa({Ϝ}DJM+15V@=7{]bMx7UA+mm4HqW_[|Sh}+d!UQ`wgHT-5ۨC WX&9qe%MC0A _21kK0 vw@P1<U&TJ.H.M3Li@6܄XY4Kb>تC:nZ2ب=5yei$JmZͅjU^ :jOq1CoPTJCpo4G0YaӄPkpqMmo _*}yŵDt {jŸKD"!]u$p.d0T9'{v2b nhQWE,ƒ!X+XW+ Bxp5q"/E\zE_]?~bFH>Fp5z Ϋ1\͠d@||T^='4+Ƞ KD8ʆVdǺ0le&T HEh.N#ԿCi RgUGP U6t#pB#7rFSq0 /%j-8Cٲ6/?UwUG $tFJF_bQra]e@(;_p>iT*K-RlSfx@NG;. u]XtJpJp븥DQ< +7XhLlNMmIxhY2NN c!vޚdU\@BbmzmM|~]s/_rJ0}匝nPc->oEFMZ&&>8M}@;6ST/{!FmLtUk}hf ;{odzzs8s3E~|сU1ZTOR % 垩BFH!%K{U݌? TDr9/X%=t}V ΁]|[уrq(zcu?"lPmQKr!N(zNZs5ȭ|򸶨{qmɓ6 Cr_J(pjN`)CYr*(ua82#I'zoPC}z=lYVwmQ72վ! j5e\FaWіLݮD,g@or4T6T"l"7x .ǓB(ŋB~Rseܞ< TwozW/ev$.ަe*6*%DI? ;9k gZ#h-MJO*$n33E%OɈyj 2SL͝|ϫS7#]~N{fS?\)(N7}(dk=6RCn0kfhiT `:(XpqD>{#$OXO 71Ʊ3e,+LY^aqv7ăI<=B]kJsU(t4Z@Qwm@~f 7 OxӁΡXV_eVq&P*'H'ób$t8) *2mzΜwzB&f|&9iq,tynI.- PVJE`oP̺bɩ(Lr)ޭPs¤oe#6*dJ"|m8VrIw.n-99MgLfwg2z8KMʥZ͌" ByG5olMϵIX<&1fmZLRJ)ߔ'e?16aLa{)|!<[n{aL (0J4Qwhw׋ :}O'Dud>NJQԳ8-͖ S)Tɑ%l>Q+TYd"4a>@Us+87K=Gs<y`;I}K]W|3=xsr@a VHMu˗>E [C=;{ \&؜>*;\lp\JG?T:&gM+d6vVo4dx2z5uOH~:.oW[(2*$k&CgQ>{s.p<={aŇPāNJ($8i %KJ~oyc 覼,Ɨ/;NS5-0pVnq 4kUUxٹe @gM*JXᎨS [7aVb:$9p\j8vU:0 {$'u(&A&'=3+;#hjRZsjsܛ96T8*B$X$|\ZD8&$L!( 6@Ҫ)OFNMz[IDҌ\)VgjI>֨ǣ;6~7=q&pDʶG \Lp,LzPnՀuF#~FJpQk:U!1-O\|-U(AB.:b8=5Ԍ"ßJ TX 5_%\ު*\nqJIĔ@٫BQ/P`:veno-Rx_n[iɬ;u)tl7;]6ؓd^8JF*`NOLͼKxܳ(s6FdOL n뺟mR ΤǵF>[H]da5Ca;^ i5GT?h@M !0a07Eg.nۏVQoPKܾӍh {lY6_ps^\@: [.jIn E!nt'y90VsmL!36 cˀ*GHy݅Huo9Ϟ}8YWO{ ׹YbEsBlcHzZeU\R#aj''9WSse Pӄȏ4cù]dž= z'c3ESL`qi7?{)Sdkbpӓ(uCr-S{ jwuўkԒ%Φ ^V|9ϕRt3./ liLjG]s.2摅9ĮW,U ao X`ݐǺ>MH|lAj#'W0)zK${' MXM^D]ԬS>7}ǍVTX̡j+Q|@#h"80;㲋pfN4|["<ۑwVp~&R~&od2E.oz܏ÌtD#mnmnqgpSNX,j "=G nὟE}(az&9ct2IKe֔n"o [0?\%f @7E_\<01Wxݳ_\_:8ny`Β|4,  /Vn&H=݄Ԕ\5#&QzdQ$긠JVe{gb A436rFS ZI$ [{n?x`:<dII_}UCRqXGSڜBBQ> ZɌjK?Ji%_e;r *ԈѲaĀ|%q#31T @#9%0Ӝׇ?~9JmII_&ݙ,_A:4@ !ͦsNK~{$*dAYUu, '}3A3HQd._?fuJfsݒr2}1oesMkPi4£Vӡ0xl$FY<*gdD?߾ۯ9on'z.=fv] /՛P%,=ddCarJPGk##Sdu-E ^oOV"F˖cW*,J0&uO(χq4ofQQzO֖nfC[Z}W~\֓x6/g9: Ԗz)y臣ш-'r|h֭dY}))-2gcDJ.>e"'-7T@@a݋sfxѝ)dJBV*zGd m9e؁ m3iQuaj7֦S-mmZmK[kU*uOb~7SxgjFiWFo2sAYX]nފHjm JQnpMf~XwU`xW5t^}Q(W.QDšKz ::V!6 y+ݒ4~+f$QX|X,Qbo l k $L Eo `P#?P]N) 7,elugŇaJ`ń%, IDATAE(&32QS+a-j[ ! N[>(19(xUa3˒RrK@<R`o4~wh.qF v;*HrlmJ na>!za7q(x${Rcoڋ z 2vnOE f'O Jd?p !l 4eKFKm9A~D)0OM3XwZPw6罄w%IP|: ݡkݼj㷵CmXpC|7E5,i%:d,} \镪lPcO@}c~ߵ :]Rt iqo9%r?5dn2~ LbM/[X5F@rs{kP$=Xd:'o؊53iH?p]6 Ee v\}2 WD}WG`S6BD ^H2o"XX1Z'bwUD7O,!a6(yd)e-a巙W֞I"IlJ:*6Ѡ+|Kj V'Z[8"PP9-S:bw K y28ۋ#3o\p\M*g:%$Amb<ğCṳ(xg3~T-5aݺGMTk bߓ}mi :M}F8̌B^jU/];词]ь4~ kb6X@9])4w~N|W-@EDa,M3DZ,U^4GM;1* gduj=X_ggiی-sx]Mv'%<1+g 9Ud,wWH 34Œl]7"o @3IMB~@Xp&(y>DpyU󱳔0FksuGsJ_=d r?ϳ#;2:7|޵[(糼S<^wv:=1ɹULG1I=uubr<mo86xve`>Ώ 6<*-kC8scZ(}8Y.< OK(ԇ#2A Vkq/Ui*o|16LBQ2@,|F>+O?l6\E`pQ#qZ?0 AmnfPSU.f?hpҢܬ FP0t%èE8w54QȝȪ5] XLiWh_Oo8h\GP'ؾIMUc+X mߟ*;,n)Ə2[9^`_@#o ϯh:\t'Pˀ$DԓS'2 P <(yHРwZ*ҴJX,%Vp/nLG^txqЊud"ʜH~ZVL ˩{R3ҫ+؆aؕdqZNYȱ-E+rF +WIJg9G̿8;kDwc(`tʹ /rVAgsa_dwȞޑC;-H..&rx` wwwd2 sVB8Ὣoէ6k(Pj{`({2V,y0`5(1ʲ/O?Tq2 I5)p.Q &1 9Q?E+_al\~XS7aFfJ_:M&s\J,,4_e&!}C_0*0XsŻ6XR ۂBw2)Xr-  W-ʊBއ#]#O*y<H#$g agb滴z2J`kɐMFOro 7/-bIGtvze.aN EUV0#jOanwI&c&Վ)AϞCN<8q*I3k=C+8~7p~@LkxUEȣmG#5EBw0U[<{#f -KRnOałfٱ(.g'rX?wVmKעgeɻt$!Gx"/'1)^M/It`q6dίΎ tm#H;Q"j@>ŝ@rFՂa Bs ,6I]1dK īr}6.]W$~SIvaÐRjOO٬&X)51{=ݼր !T<,U?gW/%BXlS>dci&T AgM GnR]vA gM`ӗmփ0N|Rro6NnWMN8y5n//Sz%*,fxXx)<}MF?GQXgFG'Mlw51bEl6n5 1i C kXN+9NbYl*?C+MP6LŒR.NEǍJ9Y4ydyĶSovf'/d?ыqL<<,v4[yQd50ص \Px:E{57Z|5ʆU,q /L\t#Nۜ&P^Nt(o%m6%.thm]8g 7[u|LFWdj5@z|D3qjQiaͥqCKVy $eXxu`d}:3Wi϶7ۛKcx;E-Es0z_wpʠ78>4AHX]ȱduPӿB\ (Uq*!RLl##ͿIB17Jt^5;+rY$Dlh 0|-Dz7o~G w"n9ecIrRQIcEU7Ÿ i/rZʘ*C6.JIW;x,5Btt.qcZ9:8i#hS^|hZ4!)G2CZ* ::,cݾzyYuzؖɖv .}3H 4z=`o$^/ҔjCJf 2q-!T(Nl;C[@vvW碵N uN~>rLf뺦_،p=f18pצ۴Չī7o72`[7"&?\vR5Cҫ,.Z=,-W_]PWO ~ Cnd+ʪԀ'Y"ý}?*'8MW('氢L)|/wK<%߷92Ţ:^7j盟X_xn v%P3T2m#.jZM&yΌ:XK" l m]g-qI"U^2Z/ęg1W\}gQi b'm_t*dRX\G_ (SnVJ>;zJ<ꉷ aoL ,afheֵh͔]E2c&ؤˢ  P|OWjޔ*nkh0t߳ByN clh9:X&2țWzv->.5leOZ7ۮo#F' <.gCCbc2Z \uOѠjeU{%\DGX1,mOZ99o֫wHF“!7-W`Mdȭ%E~~yYrP4%͕Iܣ 9S[4{~[&>$K Bi~_z?=DYe ng]N+_`q N؍RZSc9 oRbˡ[`Fށذ}ڕ+[ &@Y8ABLӁ7%Pù\ղFrGTaLd48FJe{wzJj)kKxf'hN8!fx9,ةUY9>y|ɻ] .[q[+z~9%hm"7sbУfsX4!}1([m5tY6[u `Xu a* 燤vEf*gCZSCFܡNVxe/G:\Pw8컖+:oM>nڱ L_TS5ix[h*е4 Eyg+:і=} kQx^d/6``\-fc d`If,of71 4sБD%OaU;{a/(B֦a 6Il_ڂ OPUZ>> &lm*8윝:Dȉlid|8!':6;y3k`^f C =8EE1$nGc 4_!s;K''@mkY*Gs;`ll]0n~p2Oہ{9ݣ"uý{Ԃe/R޾BV^\A$l劝tJfQP5ɺ@8bt^o׵6 ~~ͫ˫Gto4~L^a:5bU5<TZM'_t15D$xM&z䶞`qhM 5p*9Vч_B|ɛ3(*m.PNܭҢ+Ul*{VZv,L@.@#$["Uez&W:fTÛ6d2)}P0m,/+`xb!y60m~]u-i|dw$s2* 6~gB4I" IEtWGtz{(f<].F[Й~eJEwu7Ȉxb e4ˬWkBsI] -Hձj!ͻ"bP ww}h=(Q*G43{}=E$AV:(Nꌬ[,< :zD<8wwzݻnq\Z&0(X7LTBWMEO-4w;!Ύ+ 0<.YW*|V1塥etQQcÏrWFh<` #zJ%jT`֖# 6Bټ*Hsφ| PhDTRJ96?tuޮ~F ~$Ydz%zJvPS*ނ؀U}fYGe{1mb=l?Pwlc( iffa{׊#f1bl&Ԧ_}䎦62P~Иgԧ;>q˲5:PQ~ oڿ_iU&fl )Rjr1@AQS6*D>>d)E DALJN'>=AI~V3*@}gӻh{Gl6Yv;X]J9ۊt -- {a1B'n7XbM,9~1EL5m>$]# &r.OGOmR$Mc\Wg-_J"bM˰3%5)D?~dejWGK#7{I72dJ>!h|{M86]3o xEs`6Xk4«_:J;r&Ȧjsu.rUᾰ* (1gAQ<|OLQam/bQ{u;}eYY5=ԒPǏt0I VXOqa ȥhȖ%6+Z؇U*x42b͖ោw` (ƿB\z"7>\޼we"~5r& IDATOX=β*lL˥.d<ƒTZ.=l|O̥V{bqRvꨜ)+g8e5Agx4hQ%4)(Hk V\LM'14R rj榘_ojyVr:N>&KYhMRg7 AHӶnf4B3ƚHdi,ivʼ8Ǽ6y5A9lE0WUQG긵ֻal2*~LA`X,u":Q 5֑:}f 9/ @ b56vx͢mXrz p~U1w-e)Em6h瀤2#0~ְ6 UH qGF?gԦFzz .4}x_2 SZY]W:O]3W4o@L1ɇ,b":S:61V diI F(L.m_ /Zk]%:FEM:o!؁G}j&9K#:. <*uU`myyl/ײvg6`7teVu3ngb1zbijݑ7%Ű%a kSAdklIi)NJׯr`lհ_M^YRB.zra@&G@nB}]*p'";+h8bx&l21HU-,(QV҄_pEMX8q?c{E8H6-nA{?C/'MB\l Q´b$s0~(C0KxK#;lPlȶXL}bfA$D 7fkQ^ޜߜ1Bc9C&q33S-pFʙer3?M*Rf0tRje n*5hDzr/)uf\Ԥ{Qj.|EF79{Tɬ 2)ڼ&Ya<%e [˪s"zd&uE1R@5iWk}"][QRZߢ!P;T;^;׏cȖp.Bnpm%ѕmO9u\}KR;Mu4 +JvQRt#橦YӴ~3At"P[pJp48΃$ (6 XL,q lsuţ_+f5A16p-*Eܜr0vA)j;tpsi RMT;V,:ήُͦ|macWr,' #7<u2ݎB`J/1cFуo$mg]>aFb&@ ܧsR#%=#n|s$&9g-ѐ;OձSs.)D@!N5u1z[߬l:z?FC؇\gcߐ-4߫wc[0FQB|Ba68ک0ڋ@U@:Wҭ0%l)L6`iߏ dUa5|u9Z@fZ9aXWC. M32$֡*p $i\N/oa 7TN~ UΘ֓(js%[h7$֙D' o ^=pNϪ1Cܘz`xPφΨ)hB~ef/dM/!E5|Qg\ pre+vN|1>!c'F /=$볋t.^FN jC2tf){Ti,[^U_o!<(ĎnţRQaͧ{t404admkE&š>D2>} "S*a~ȃ6nSL8~F`RE FSހ9.z:gfjuɹ _WїS-CݍS0)J0T*|Y*6@)pȢXHYyP$.M^Mz5LDxo:/Ū}aÒ߬]`۫^U$<ټ{{5(.v 獤NNΑTS&&nY\Q&(#4vؽ9@x\T@~a*{j~ҝmJY+&NnnKRr:#AV.bw:$5H=:0i5[3+v>qDme7)H>FsH1!㮤^1me.]~q_-ITM{LXgIVӌ9t^SU~8|`M 1Ҹ?|zVY[nvx4"K7 ؍m4]ܹaFY3Hsg/X0NtnPxbu7 Wvm~rdzDuXm1yLEkZ}B b`1V5V2RRǓuӜsVeЍ QXQVuTwȾ@36][m@ F@,~V Cy%jV-/qƠIcƕ4M-%mmË ʽ8ʁjnְI7/\ I@ya>mgV5q6`-?ߡGpdL/2jO\Q`ި»FَtII~`9őNpڞ"9`ra~p%Ly˧^:0I֘tr Y2$wKZR5G07wX ۙ5ff)j<S&i+%(1dZe,Q[M]J tD-@簑^ǚۉ_gnkǙCSAu<+U.j:,F ~T颚>M_JzB8m.uڸW33 O0- ,o75=_MWXR]4vy\#ֵ vB<[%zr1ѯ,cvEٛ7 دb|uAw0cO^^H c,[ѩqAgd:c(Ca-ۊ]4f6:Xn~1mZ1[Ea &͛axyf~s^m.wX h{(aKlSsF5u, |6f&4G9 ~ D f\=zT~$6'GG}ĸ nUc{n5d6crzx:_' e54U{eV ap[nCm@q=l*v߈os/N\ZBeUC |SGX t=EQbMjR%Փ؛L.)%R"eϰfr~l)?c+{9?Y@hK\}7WTW-JvFTl/'v`'N|T= zdRb%RX `+@],?@ѠZp 50# L'lǰ篇C0y(*&';R"25ldXz(,",R.ˡs] ha65|Fjm4m fu;m'aUqLOBN4%auHHK_34wÎهnͫW{B0T6GIl.T.,j3jz{YI)zBĦG~#'ɵDVOV9?2Ȱ̪JIGNR`x3hI k?HWz+릣ⶾVk-(!`~S1 0`UU- ʔI˖躆{I8o2.;ʙx 74u`%yuwTJttd˨n+0X,֋pHWC(x\`;]QI4f4 鹴PSđdJIJ10:,h`OaXu]vcl: uXm+a3c*N !c Q+\gf26):l\|zsiֽ3l=LDPd>uxhtm=}Ie mó$ܚxfVx87;c_ D{J$6( ~BU@aOa81%IY ~b[ ZD$}};Ѹ,YJ7{h,,J`bN4&͊ڃ딯x%tReY!9fyz~rdOH3&n+"I2/z?q7._tf =dTpdLw.fѩ;qpT'Ԍt6VcžEMX̺σqf(`Zd?XLtJ#(N ClfTb%[ghúZ}sPyW \ק?UEQːeGxf cy 8I(Ak{y^1c Dz 0eTj3'x͟=-zU";m2V  e!ˉo2WͯU7aNOb^uh&0a}P<$"n.۲Y6!bH6!Gᩳl݂?K98?dl]&k5H5lLZgWH#e4FgAaFL/Cͯ7׸{|I6wɜr4c^ll?wm n33(BM;Zn+%*VY`; z:Ûvb^- `ЊŮ@GY%";4dsZvzmE &UPhV[U8n(ReE~២F lbk(,D/f(z]1k47H,qMpI$U]S#ta50bc-. 3>=;fQ1E>ޢɤ"9PVjQz{n"/Gjy!p綌?GtKҵQN3Q,RHmDnFWI~PUE7j9lZjkW=|D~_E䣓֝.\o^C l@K%3:ۼڼUUq\!EFDhsEOޱ&$#gAa* ԞQԴS5:֓V}2 G x|D}V3=2[H@bmZJQ7/gw0t]71SQWo|bKa jIj/~DM]fmG%$ \ofUl_ߖ9+]A^楨|L{v/GN.Ŷ!J',uq lܗFQ?%f~К4(3ܐʾh=rߛU·G Pa t:=f!Ϋzk~;\e.N f=.6L܇9(SȖ{pO**B 96lIDATNpdrR|q(& ~ww4A 2o%SCV&35/ߗtSmghʦ -%Tg10g ʧ36*H-^ƺe%-ekjɈ h""ȅzZ[ůY(;OB v U9@tKJuGvב[vTxLlfc(4Ho@)mP+c)o]M+qM`2 O| %!Fs>3LLBȇ4>|_,nNfVjwO>i6XL&L>52 O|< ňt~F6eU쟴K  RH蒇fY (6afl$GvC ~6,K@|QEb9|*Wa,N%-61}e;W~kuG^oMլn<}Wݯ̝F9  }'yXͳ к|&j6\z/1őa1 ХZBlG$šbkTkÙ1 B+.2dҒUiɘlު/eQgjhagV'$~M3,,}@j&ZM1`bTM %CX rI CZot2 9&dx5f3wqѼ9}E 0*vڜ=zdoojoj~@m7}@slluZ4~LoF(ql;[S[ܘo[n@ 9+a內rr(j&//tm;aYJC܈QhfG X\/M g! @M'ol IH#ŤjgF&"jlk ϋmgRʰ'TJYQnXHČKP.GB ;_tlcGeV`1ܶ%Y}Bҵ2$,Ά G,D"9HҬO3,vԨy>6^=T? Ś$q<.d^Qr:zɘgY&a/4{z~Ȱ6SKH6BV=v=)UDvA@ƳMFVTrzKxOc`,LͣX]Lsj\^nޚiOFqfXƍXձ!|A/nPYdL돏۪]9`%=k\~A-g&),#A!?N9,ŏ>n'*md$eq Y1CLK%2m :c𵬡aOASbጄvB&ؓ|O}ӋH d)ri7.apZ e+NquǝRQF-!TFEw}ݳ:F|u*3çpIHB=zC\n>\PW)JXf->CUXg4RzRYZc#ն6^)-:>QϚ'X_9PkAe)gN!jt:ې uL-;e艎R>eKt͎3/I1'~nFefxMp;Hl>kѿ  ѦP#e^ndQ(:*@ĔhpһBY"`wừz۶qbrlyXӂ #NgɀY:5(z@ƶ 7lZy7 J|0Waӵ4.H}62ԋ*rk` #N`^(*ܱUOV'HSwBkKaB0iR ,U{ sd"B5gPǮ.c&6+df..^Nf=F}ls=OK0z82)_5a1SÔyۓ+$\ż11c+պ@Zf(n{ZKQ?T$0j!읝}M\9y=sJ-SJуRuZe,Hn;* N=bedUQCc\Yp8:jQV%L<b6lޭr.ؙj3 YkH㲝9s2t{ԝidlNNDxd_n^t 33[4ZƱ4]F[4O:D\Ա׮Bj,Eն:v)4}m(/{>'5Ǵs)Ò9T'USE*-8锟C$r"kEWLy.”L[Ǝr]a٭N_N<3KPnhNTG3EԴj  K:f=wIBy'V8(HvN>,FmSo`: (a9G_NBfhUs&/0~m$$mm*$Q>׈"Use<XMlewC)tO[׏Tƣ<C ă$ XobUpLy>!߇4|&k+/C ?c-oȼB.?, kEMi"gCL-n3CEo `롫Թ,V ͙J7Lړ:s'7^ Pv]?J}yRcRZu2?ꦤzJԥ~XPz1r]aVPq٦6 \A m*KHյ("uQ~AerPߧN&>m}~;l YlaR夓¶ݢgzީoBXfRp^KV{ay2DEeiFvyİ#י(su}E/TؒPs[^(%zy*jވ((z^vs Y±M*{Xftb꡹tdy0,bpZC+^Um7Һ̘3yF>5yՒb,KI3HϤ}'DRN7wola6nKWO\l=H0)DNH } #׼,C.hG(  |'۞!=/f6}ٟucK&\ xOwx>N%]bE;]9+ l(r9 % '}ju2: ؐ#GGmUԗ;PYwrL4*b@l>(R3嫷^!B[#X{&Dra>y'(5* Ѩnͧ铚W1DB-/^DF ]? X7$c|]rHu֥2SNR |T/E9%@cSc/ЏkWV#(pc&k\M@ >VFX0f GuvM>*X5OFmv` P0fgV&!%[-}.vdhEV|@n 6|bECatc)N?ZIl;ils1wpnXgM,`f@1Ýxb+Ĩ7Cr`1M" L!Ua6LN7;Ӵfn,⑦I5QL$EوhNw 9tܭoik pUgһwO%ɐJe43 "%7z>}ބL?wU+a>OLy ŮL_=αF D?on5^W:Qm FLR|dpC;ThG =$M vc4ږ4 cpsU$ሊ4)QQQbz|fcпXOFRӋSNf8c>[z!&ku\qx##\D<E;F?8{wXsRCb<[3`4(u?," _],>>a*P7XZB蔊n"K$B`b/ -o\9JWpL5xw=6gp4|jB 0qv+[R`robxAyh ~򆷕DH_S}i IP%Wq{(Xɱ,~^Z|ע&#LX&H-&4DŽtu7rr֗3kBGۡqJΕCˆ(k!7ȋ霶t{7Ŧ0&8eϨ6π~3Wf*F'( C3hQ&G*yܹ#f΂ |"($0QXkȉ=>K9T-'OaR8(gDqPvO/_?J)P,Tw(lPKٵXED*X!‚z}E4bee=pgX!{)-;o#X4 YߙvFP3'=Nf$8qԖբh1>kMcx bǘ PsSupױ)kٛNa{IaN̋=0|2*{Oܞ(XW%&uBL>B6{Z$ )l\sXeԻF׀qqu\ur6*U/ϝɇ/Tp2#m:B`Ouޡa;p %Wd+~<k)Nal \&cԢQc!XiҬUk66u 9loSJ\/3v^iZ5c 'RO܇ч鮦@6㓋Fx|[۟ŭX*Le@(fzvI? ME3Ul!p; ~-3jZS({N曆ZT{WrlkЖe͖eR=CH8gN^GUUuX5?05jaᏻjʆ%+95a =8Պd>x2ʘ|.ile[i2l?!g #P뇰:@ҁPgjkij C3WI=.DRزKpQgh+Wee/N?[3^aȏ'8 r2,ٻؒTO㲯' a9+{clj-"N3/Z˾:?ΌԨGo_Lf!˩5BQ%gr& ؊ɢSzS7~qs,hPON|@ktr0xӉLc399pz愞nj!d`D1 )`xJOs*Vb}m7͝O bMq;LE_{UPQ|V3c}\_gZ6:BbDB%:6$WgLsYW]]smL7pB]*J|D`~UY)r$nQKTy] K"}Zkv1>~%e+vRIӖzeg-PeJC3mK}z՗>Ĝ_k|h557!a$˭'Pe3Uh1CwB?B&Ʌ\q>b w2c!/ EdF?/Ǜb߅ZTuإfތ)$rrl$6w?Knn:Q9sl>aJ:2>/66&BB.FB2::*2."&*""BRAVnVSfMJ^JIZF>J297&&"*.. EVE3B3"."4 ^v[rnšzu[qYRN&F:JBNN*fb/njf~bʞvzFtn2r^v^wr6vV{y~zbzbRZFҥeB&~"΢5F6nN>ªBVjf~tfZb^ZvZV>rrrjbnNbNVjR^VKʲBʶFN6.Anp@"6*::qj2if3ҾNb]-  &."^Z.ZU)   NJ"j&6R> VJzf&nVB&. /.,)&""  Ⲋڪޮ֨趖‚΢z–ns|ǜvf~jң^rRfFnV6VB2O?>bN:^J@fPBjRJvZNzb*F6&>.vR–:F6JF"~r*"&-5:B*.6&*..6>.2:""':BJNVbFNZ>FP&.2AJSR^j^nz~jzOZg7BN"*2[gvbryhuHZl3>Jrr~FViJ^nj^rvnvvVbqn}~bzVnRfz Zn .*"?;62""BBf^.z:NJ>NB FRrb>RVF~:zv6~: bKGDH pHYs tIME.eU IDATx}\SOVEI BRŀhP:)(LӪR+IiB]mB\hb#`¶K‹`S! 4R7!?7sO{r? BD(TWW eƌW 3g|Ş̞A)!EQ]O)cEHHddUQoAތZ22rwywX0NEf m2k ,80nW _:^a?_>azOkKx{/BB#Yd_#6/^|;A}g8Vfrana-[.am#'UW16{x#Om۷'&ND|3ĤmvuRQh3ˆ`EDx-ky `yT(<=}]|>}N+%Ս#K!_7kt+7ITݻRNCP߻+} ➚n!y \TQjjGv8Ⱦ~nq+S p7A|ɧdH@KKgJRzHMgѳ<`xP,a2YN Q?ˀI >'abd0!cP#?gDByCyy;z<[r >{9mj8O8F'>朩*OTgNVTEgjKϨjWŧ;ꌩ+q疕)tbUJ2Kw,//Sη^J.(,[p.ǑrqEv//*ț:/_ewZ¶VZ6ܝŤM}RB6. V{ܕΛpv"iSsLJ].4~79@YV#bp$ܲ6&Km;eM]'nasY,%8S+J_E6SÝbse/iR]^ܠIV./RgiR)\۹tܹg *%eE8UZ.3***+Ro%JIC΅TL5D 'P;>TÈ8u<%%|R*6Spr/gRPiBQUPIL9 LxQf&\Q87ٜ{p.jj8)h Bk'N)`ϛ:p.[.W0|0\PA8`jJ>gKM͹[i4j)^7*ր5bX؈FۖXVYohj9J[mhn9bѷ뫴g(}U}[{]KWu{Ջjn]~횃tw_mC. cK{ko8uvtu*jjZ?>V߭>uqΎSD25u\\yr=]FIoՓPMgj-qJ'}}7{Z{ZVrҷ際xzƴ]K(*rd]k5 ]1 ѭQe}eFI#KJO6]Wo/nj8Z8 jli]m]S[  v4ZFP\Γ74h+& Y1xCABA9k͐i՟ !3BCg$_AL‚o_߿X† SDoap0y\%"<`qr(1HgCu\?<9s֌J:swJV0nNsgәL-3+9J[? ,$N7Av(F9C +,bam.=A1& O!>3W# 6, OўXpj|bQ ǶzhHhJE0Y 19OFFG'&X ZR`tXL%L9ɖmI#Fc$E=e& ݛN=MI~asbY+ɟ6?$$qLDCCS($?MCCl65YQ[)%ub%by0iLr2 JNNݛ<: Lf"hHDBn͜q:Aӽfyay8 !K!,)Lʹ# hLL$$d)ebT:EgZԉA(;[$"!y IB&Ţ|G5f,W<g:3g> 8C!t6W#&kjSjjY"SD䞕 ʱX5KؓT\IDpIENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/fr_left.png0000664000175000017500000000132112140767206016574 00000000000000PNG  IHDR(2/bKGD pHYs  @AtIME -&#O^IDATx۱jPX n}/[ZuH;uk{3|͐d ~?3<niy<pSjy:pS{QT DGf~iqua9 rIENDB`lbreakout2-2.6.5/client/gfx/AbsoluteB/bricks.png0000664000175000017500000004430412140767206016440 00000000000000PNG  IHDRIbKGD pHYs  tIME m> IDATx̽{ey~>;sgw r!0DREK#ZTY$ r*Q鏘IDJTR-DzLǎTlEY#cJDoKbI.f33wfνO?G{wv`\ v{׿?X,3vnvw}h{ut}iwl}}߼FBVWvngp2lq5ýSkNw^moue}k;:йg^ۭuh=f[gmΦ~#_ c#m鴬_ /}fp3QۭQϣ*-'?{γl`Fq[)GLpYv7OЉO~zڨq[)GQpY}*Y6n+娪~)\V8{C|=#DٸReRp\xWm{n OsLJI0礙܅vRA8?[[]n~nm]p{~,A`cY0/1,`J`wY<L,E [\&V{3پ\`FUn}c0\] l;[5 l;򽗶< |ypg&lnq ƖņA4m'[M@ʍ 5jΌIqy .٣~r0. O}Nקr wS;j"9-Cʱ9`Y]bS@:r콛f:[?~#v]h%#n㰋6oxpu!@Je~Tpo9N6v7Û/@6OzRudYiJI.)&4fˆhcBh[ 5j'h)! "1D$$1 Q,dhDK+[׶v"d""].3Q&&"b l }.D@ 2\D}uz?b5yj|o>xxs}ۃmRV׶98&PgzS]ܹ|JNtμ3ca){W9RJ ;Rb)þ^?cYK(O)Ngs}C}PJ9IJ+W9 sN!\RB !lx}F/?yɹD޻9bb)EcBN$1H!APJ#eUU1f,rN̂mݔՙ9I) >39SL)~|s)PSL,@Yi]PZbAZR'bJN[7Uavavdsǜr?K6.C ! DE* T,},ȼoJ\p5XN\L1sξi4S)elRJU%SLDDLnѶdGu}s:idk}|p@= B-[b}ym(2[tGph9yJTumiT r߅i򳷻O'{~C< tMHZI3 XVZvgs:!XX;n.`K_zCx%  \ o<{-Dorc5a݃1ܳ~V֛&ݓIr7/_jZDA\8L@ N98 G3PgUfyWl>Te>c:8lMY 'cFED9q13D 9L!9$mhvM^OtM2SPxo'W}葳 Nt?q֦BaJ7r)EOn_H;OIz `67릜BԽw3zH!Dq})ƮS,dyz+J9ٮSJ:;*]uٮ6u YݬcJ)Ʈ]tJG_=.b1lbH1 A߷RRuJ|*S;窪꺮2uN[T )ƂnSK1:|y-!9Ŝs})T|蕪BB1yR!)N+KIJRdrR@wD?:)fS9HLdg lK%bLE٠*ϜP|Uω~XpA1cH/Đfw!gbH d Z>H%Q!W=T%̙.];RKyK2~I iz`r9R.p| C*xλ(AH.J-r|@3/9gotҥK{[o\~WU{NֶS8\@K9~4}/S*7|7=K!`w1O'/5Ϯcs%$GVq_ę_'7,e ^iM!)1p &~j0GRrTf̚vG'Rɶ?G~w^p]{{Rr"`0~9d5y<3yzMMirW]p F {3bhj1ü# IχnSG߾v^d؅4[W~~_4-L@R)TX*h߉<!{[.5v[^{PtIhPtBC<70?_߾|R0`5kƤ866`ȱmmQ*mkǻ]i d>?=ܱ]y e%a(H=Rǜ1OB6J3Q,zR1†HD.{">w-[Wwx拔C$HD>]As29gBfs1Rι(N@H) eH7֥k{[|ZK>wQsgw眝vJ@ΙYD78RӇhڬh:n+??s{Dc\rJNt]1v|h<xЬ5_szfbbK̀`w[,!|w=3#LggS S[b9`)j1.!kI)Ulp6 1%Tr6u͈(C &b>Ԧ,cZUv!ᰱ,!iU1Zk XNS1#&dDR/9!ƨb攓2rtCBH"B )xo1H)#1!<1(3L)&b<_ĔbJ>ƐP;sB "ZH=𢏅>cHD`Ԗ3GQ]Bx1ȁ|jłsB oitwvV9LRL/<'@`BJbf LD)o*̂SHEUc)a&OH!a׭=~WOgNUvsĶmR^Y1whvdd_|nCr-^AuepX}u\=Sc[* ` N`) %t[lH%YJٲ!oWkS-wԣK/쾸=`7ξl2 vK`kKhimxl6aq.xξt~mt}LΥ[@4p~#iL[_}eѷ}wujSn44Z}{Sصhomǡ^w-_jw_slb [B5۶S/Qʿ[W;{xIkm` AB'E#&øo ,0 la#ʱ[l4c;~ڋ[h!"AQRSmpZQzWu%3r9\\H&b(bc<=< v HeR'؈k^zSO+{fE4 DXe)@„w\n!+ 2̬YKŤ$"rBӃ;|_2(r)TSlo3 ޙn*Dc1s1b(r+NJNuR1Ŝb)cHusbw[v9^g;wZRY I񩮛u릣fYi)2H)Uژ:BӌBhC RdL[UΘLϺ޻JRNYJkkt:kgve4su1R6u]b VBDк ! g!%@u]/;lv|OT2`" ss1u^ )L)AVJ0N1*WZ5vK)k;;GD'D99R ̹{뫡6J 1QڨbGURqV pѮ~WXQisN) )itjϼWMAUH.ټznSeBhxE;u%!$rcA ҵ>>>(#)X2uX(QX:"!A aaN>^<{.)ַЫ|c}-`Lwߨ{۾7/_|nV:%tG7M6W/P^sf6#| C?][[+=ǿZywfG  zM_,ֶ3D\8)J+̺rn#z#:ڙ1u a:m{gv7UuUvBJk-fS"j#睒J*u@ڹIN*R]1HHJcJ)U늙%B1>]Bq2RRhkUN=CAlvtRH%K}RZhUՊ%K-X»:O3G!YjYP"X|ιnPʶ=1{tbH]ZyT%HY2Q62\  J|g@=ϟPb Pn'@>(-cHB攙)eE,Xp)ffbAB ,9&尵UW6*"#V񥳓Ke͎w.w0 `{;XWWtrd/~۝Ff}mǜ݋׿-wG/}_BUv}oycH)dcL9o~bnN$AqtPJF ywU(jEvZn 2-sJ׭KBh]ٖ5(76GlDo;ĕRe s΢KET;"kcpRuS&rI!C1%"::: !`!9$1Z]Ӫ1yRm{$MS9u, -숄8uS\iVSiKLR*\@pC88/&$A NkUǫwJ=B0s`Sb[0C9\OD1fb,]U)vvFĂf8RaAێ+U圳NZWLލNJ8 )f39~(Ȃ@_4"0`eH)WMIHF U+.ӔU }J(C=2)~a1D١5C]IH.obZY,5\5ݭk{sVB"C !QS YTY__yfRnb2*(pb-%X oG'ړXv2 m۬]2o`O V>8=Bk`:y*KvḚ.}lsD+:ϽZҶ8xvz0N0ugO| l1yϺO ى; B^ƆAw4k)߁Xڶ]r[ԥ3o_zN IDAT?<U͠XNg?>/BUxoy w~C_kV1gb)(%k%q6W t+% @{sG2v!=^^$PJqI2)2HmTu= oYRvs"Z(YYYK1re)QJ@C9H!L;fTbB+,_J+mc9Y@j3H91bƠoTyr -=>D,)ώTB},di9Q]9]jbǙoR#T"b*,k{!YBZGI-|6C=;s3VUbJ-4Ȃ kC>12 "RZE6PUR(cJ)T ;q|gϕݝxܶm{xRE+ωyvY_>JuvGq2eiF,BwнC9i]SLJ)R)twjM)]J.檪S8hwPY;=R*1,޳R()JJ'BJQIE1+rNZ?:_|X0rN)ЖB3̗&%Z%H-Z(*Ys b9-pҵBH*R>v&TZFӌTA(!u1J%΃CTF`&mTJ%m<0 hcb%#L̅J,9M|FKQIH%DS*-O7DLRWU{f"mcQ'vXd*Y+9i,gl-lOڍY{?T m]&ƔyN.' y41zZ;YEk`x;c4<#X撚ӿ{4V>͟{6 zsp'/}~W_&ƪCj!?f(U1JkC?7jSDk B>QN!տp{7 %G1."\٤jEķ[pSG2wnID%i j2Qzl| 6WM:C@ !~8TL۪2>x%UNIWFiVRJJ)4I)cY[UUJi8 sL;~U=B|Bk1k]6U]|J RUJW۔,1#cLiFBRL)Pȥ%2#sxCUe$RJICpJ",BS眅BHbb┹{UN*b9c! 9:X1$+O!Xl$2Pb!޲J6;Ӈf 5ۉ>BX VATgRRVZS.v2 \U$m{u4oW2۵󫚞OڍͭmZ HU`MqvsݍDwd9k89lhcWrb9fkzp6ez4QMUefҕ15 )SL@N)%zhl4Z޽]+!$}7UTjP R(vZJxg}4k2T4Uݒ&}qz]ۧ릪*T`V0ê9XUn*eɷzQl9u))]bLK@]JLseJvP ,(_R7:Iq&{%'۝1h-b\gq]!pJc܄ͭN]b)v,2 ܶ'8m[vdE&lwX$~y&A5Y7q Llf'͸ M#SD &9KF`w}|Ϸ?F+JO߹ӛaTz׺{J^oKғUU MT{O(iIBHB" ĸu}WM""'ȜET3k4J"R Zy2iEݡ:<b ` JWGTIC`]@InR*-YWEJ]RM[!RT3Ji4@ JoBS1Ef.@&!GF+XXUzCԵAi]Z9VJyueh0 TZi"TBtKJR %y~ee qLf0̬N1J!Lܻ^*%1J!H늅,dqXY)Rf"f!@1UfPc%V^58_asĢZi#d;ss2K6d!8)HH.PT5fnbp,prqw+Ymd Qj-׋H$k R8?)&f72`Up,Qx#3lvRʚiB "na%dHM9eJ"J{O1+~j>ԷO*. X.\9i@UzH%mwt6Y,x;o{︻ lrvDžX#b\!4+/tStWYNvѥEF76'/`ew 'Ԩ1ٽ vNP*#dʹ>}>۳^o랻|~}#9>~B=i>~O=y ? ?3%B$k5`ֵ_$ MR9ރO"C8JsT7˼3]ĔnaKC L̴JDzS̈́*N9(X֮u rAR\D&]CU6VN+S6`0RL"9y0ҬJ)LcBخOuv6$˩c,T)FӬk=huתJ9fB ||L_/.A=U*o2L**bTBJ -|1)dBRBQ  2kQS' ])ff}gY[ȁV)CZ3_pwєe$j$nQg^H-tJZjjSG!(H)Wd&3 8+Q-Y ,8SNg!h:`W|O\bN1RŘb\b͗M) )":}@#k 6d3. H onrf bLQ۝]ӘcRe0p.ͺ]:j&=](+-Z{lᵁs򡶽_uV1Ҵ8Xf AN&W3R ;>΄?S/4Jg6{O]xw5?jkNt~jnM%qY)-U NsBHrJ9j ǶtC $ N7wtqkeGo;-8S"B/_pG]F;p丮!:P~lp8/0p8 !BJ Xٹ^j:u+ժ2BJf6U-) XG=a޹7Pi1s3\B(1ruuM0ʹʸJ끒*ƠUM tc Yl83XW ;"̢LBR|𵩕T$Da Jχ$ .FƐ vJyT؂b`ŀj9+F5_f%TF}(JOſmnq#"f%Aj!JV9Ƀ#uiS(Fbd]Y@YJQjYr()k㖜v!.n'Y#1 cXuZ6J*.*BbRJY{s^~?s'' vKҬ ϝ %w1/=IaAmnɂ;N lvRخmdoo{}SO3k4y;x'Nݒy/^:( FPRgB|,9mF7GM?ԵҶ&} پ>fo^zͭnzNGJiG>" >p9'D6p v< ՌShj⁒F}~YQITlltER.i**#G&)sd Hn!8YiXE:‚JDw\ fŒS/_p|PׇHu'K߉n%2=˒8ZVw]3\Z#{SiT Ӻ"\RJBǥw{!`!n4ZZ7ȹιY7ժR^JYUUyΕYWUI5\1 e<1wΘZQUUAiCC{)$P RJe@ E dΙ%ⵕ샘 e Y!YYMUBjPCZY7}KJ_~sV"Bc3o/o )X/GFH6Aq:?7תp OMʂoi,#1`"%ĵ+\W(-OuSY23I *X3gH)ʽ,@W䤵.m?c90@ٱ'ƒzf_&8bG"D\9 $"P8q1@82&^ٛxNv{g*vv-lZ_կhBYg3ʲPw2aCfxqK_|珈2O oή 5 .=Q6}I\qU+rU;>]َώ(՗ qu nu6o= yvT8ؽ=V2I_Տ$ӴYջ7MYuK+Y1!LaUk[3;;]|Hm("5 3M'SCg޽\9S^{|hQ\j+<0$xȘ@p)o|?_ .pM+A0o̪I(wދrb@Ij_Ս@l0K [) 4NC><\\:6.MI}} ,Q+l^rU1of1g/U [z",G:$άsIh:=o#S~S:iC !Ƥn+F;^+.A)U: )2)%;܍9 9oLE1f2͔w٥mR=ITumoτJӳ)5({hݶ-|o갈8޹(N;Hs'$(Fm#L DaP[J)(R""6t`م0oqu@{'xZASwRt+ .uOR !bw6sY8CG@9IDATZERti v4Id[ )F(RW9{?JaFR± )Ы*0ЪHE'g cUkpιSVy{ߛ+@$2IhʈŒ15M`JCi*~ !#,7c5OFFt09i Q9wnpM&"E*lnM("I(aSd3.%7}Pdd/FXzҸJc^pZ, ;%U$ jj۶.eۺK7m88~4omݪ~쭙h7^Mjyco P+ ,dwN1l4(BFW¦*T1a 8v|ڞM= E*auܻmepU+(>@Dnݼqxk 03JYݜ+&mذSiIW! %JIYiC?n߲г&])XB/K!ێ9%1+IM)jMjcڔyRΑ\([gC uɿ;w7{'|܃ufm h,:.sm H=.=i@{{7CkY<8>᪲?0vis-E= '6.apX)teO{\͢FCz9=3sɼocS9xGf&`e1eظ1>>===!!! :::""";;;666(((*** ///<<<999888777.PtRNS@fbKGDH pHYs  *tIME  ״:IDATxmSF\^lH7 i M1-MCc J]ɶ>h·Vb|3j0̧YAu}E,JՀBoC ÇjULcj$UjTFv5c[f,U*^ ھWZqoP5Qc R5Fqc堞0UjT#YCX ne u_/}`h qP#f J5 Y=u|4&cP+znPuN`7r@R5頀ެV𾮩P#f Z f}| @!۽W<U' *j@e2 `0ێU+:4T& Y`/`M7k#`~TOɞŞksnnͯ|\}V[wGs[%ŝƩ?pT~G=Z(5;cƫ-7]d'nn?^)P5R*GcrJ5߉7]T1#E=Pu݃ZJD>0@*=P2bsTj,{R#*PrTj${RKrJ T1@rJ rT/{`RKinz(@+@`"uPsD/{Q!=^Gs4j9${Qj;TRF5Ly2]'@LNJ6IՕ?Z1hŃZW_6HkVL\'C+KWha6oS_C^ái, ? pCtKWph `6K~PC;!<F@sCClyQV4u ɕ? @+40>( 2?Ll{l :P@+49Mw6]ápR]áF@DOx:' VW`R+8 h@ 詯P|V  NZ­Ԥ4;=O(!@z.Ts]__jz>o>|uvnѱqc\w޾}͛o>zӧ''''''Ϟ=*f^?VUd!i4ӧOWWW^^^VW_>xj^iSJu]6ggggggo޼y5ϟbQͧOp߽{コUJxX,Rm u6=}>==^ڶ=::={o*B൪*ޫbpm^]]|?8===??\a>|yd2A( ׯ߼y\.4 hכ~Q0X7Pl> maW<"BpdW}=ml& XdooGɉpU]amὗǏ;6:88`(s:.J4k\*)V !@6pAZˀ=P)9)\3.iؘK.=йUdA(Ȩ7ld0n)5ϘߡR5͖%傓4< Rc1Ʈ댪z4 WqԚ*Z]ގVSc0(O4(SQ\_w'<^)%]oLifXV_ō8w]etz7ڶzoA-AaMGW?fpoR?sfƟkcD3-a5tEoufƤ ~\"ۥ(Q5lD!Op:5*( ;ϩY+,sa (lˀ0jᡒA5@+"UhT34fT\.A )"@{2M Č$$jp OH1F?"5p@Ʊ뎄1BFLCX]ׅįJ#/r!SK"ɸ>)u'XsX|Qm[#&ih7RB$UƔ&4V+m0" !O ƪ1/VeQs / jj! BH n(O*0 }]A +$3QH ڌRR6NelO !+(: *z*=5؀i1%1Qm&8'zj+!+3Mc5yv~=c4O1(fB:ϏM ζmVڌ [p Ep4&1(*$n_dj>_4Q^Ûc$/!ԇ)rp)|ۉ hm nָB=Uv yO}ʳ(ԛמb(HH 1Fnu aKf i0EZ&g"I r{Ld^CB;FuXg103 $?e^fzhIi窆Z-Qp^%dTCHDWSb<J=* ӬFqh' wɅFSQ0"noM yB+$λL Bv Qs<KU& ?CHi|o<6Hn6@RIH>ZwJ6n]k%3" Fo޼!}mxBn}„*ffln*Ch B* B>LMXIC#&cwPl1+bN7Q*"+AOMpPim]bF  -=n;S!汴1BR6[`\MHUH @0v(#B2:a*yB y>A5iEyVjr5?LD%9dOC]LkTEGMdjkW/cڲSBl6lCy+t ըTdB6f'O۷o9 KC{Q#ARZ<!oci\jZvaHPKbhZS<^[n寊;"URT,THCt㢞 #ʰNjau 5ze84MÄ}t+ M&ɯMnzkqɛRȅihBj\~}`#5vB@f-E+9QWiz 1NF?$R䤢cp>&}'C H`]B,bK46MoJ0TA2=zB 44H+$ +G x5G9eHHib $ƨX6hI ~IqIkUDՒuЀRG.3d!ޮ,iQޔ}g#8E2 P-|W߀>@F^riXaf8:WN%3qҐM|_2 XPc vR4>gMvc &wIU~P-TD`긘q>c8@6sj>ʾ_=!Q8LRjK udm6 [ |l2Q[ CH\L[E~VfF[hQK1Mjڶ5b"S~1֝.5tyF:N3 BcN6F)> :oܡbS۶f%d IDcۣP;FHLc|i$1'Q?/Z6b S Z#"Ȇ8M1FX-5_Bvh@QMXǁֺ %jXQ0EW_ Ao aK#ɬj]|_̪U*$U^5 kqMBVx=Ԡ‡ (gS Q@,WH ec>ӶmK*\L] _piCPߢиL77W)+\7mu]!JT7OmXLOԍLxWBo%=(GuMӨރjX.*Z#8 鉢fs9[Jf|sёNC-H["隵d*i'SW!GjhbHsChmfc$.i 7P;г+!*MǜOt h*bw/s~>ڂ@mnyɵ0u8$]Mo^BI^ T`bDyW;1o%j2$$cO6u iUǡCEDWUen!Si! '$Ia`(n|pTUTe9:Qp="-Q˪8d$$d[D]7ҾPWxڡ; ~66@6)⨓%ɔ8^HNC/S0+Ilf%{#rZvPyÔEL{6P)،{H|^ɓ1.u':>ւSJ,Jw2C՗\˩^ qNbR~Ԋn7RoquZ :Ayue0Vea8k^ZRp4~ QZIV}6*VwK^\F̤F)>+xؿ_[5bu|lF˾6a.EKARF:-yGM`5f^2sckfұG$BƠ m^13.qcп/./{wJ<JA%P-jl0V6ĸ1lE EuoOh/Ue|_Ɨe|+GcIENDB`lbreakout2-2.6.5/client/gfx/Moiree/fr_mp_left.png0000664000175000017500000000044712140767202016634 00000000000000PNG  IHDR(YpbKGD̿ pHYs ,tIME&]:bIDATxӡ 0EџtlfuZ>[&w9|ֱ5:m5F=^qnk^^ǭ}qf@̀`5 fP3 À`5 fP3 À`5 fP3 À`5 fP3 À`5 fP3 À`53?IENDB`lbreakout2-2.6.5/client/gfx/Moiree/fr_right.png0000664000175000017500000000055712140767202016325 00000000000000PNG  IHDR(XPWbKGD pHYs E EtIME3RFIDATx1 @  ABfaTrkIU}k|̱)`0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 y IENDB`lbreakout2-2.6.5/client/gfx/Moiree/back0.png0000664000175000017500000000033512140767202015473 00000000000000PNG  IHDRdd } PLTE}bKGDH pHYs `tIMEi,ZIDATxұ %0eFI<%7OC&=ХzfpL1 #Oܕppp>7~P:H t~`8>B&*IENDB`lbreakout2-2.6.5/client/gfx/Moiree/back1.png0000664000175000017500000000040412140767202015471 00000000000000PNG  IHDRdd } PLTE֒HtRNS@fbKGDH pHYs &AtIME9zPqIDATx풱 0 1ʞұp>Ń z%VUuU=rf`3،|L_/ K " {==b<ƃ`<ƃ|IENDB`lbreakout2-2.6.5/client/gfx/Moiree/Makefile.in0000664000175000017500000002516012610471343016055 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = client/gfx/Moiree DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ EXTRA_DIST = back0.png back1.png back2.png back3.png back4.png back5.png \ bricks.png extras.png fr_left.png fr_right.png fr_top.png \ fr_mp_left.png fr_mp_right.png \ life.png paddle.png \ ABOUT all: all-am .SUFFIXES: $(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) --foreign client/gfx/Moiree/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign client/gfx/Moiree/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 uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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 installdirs: 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-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-data-local install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-local install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-info-am install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/gfx/Moiree @for file in $(EXTRA_DIST); do\ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/gfx/Moiree/$$file;\ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\gfx\\Moiree\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done # 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: lbreakout2-2.6.5/client/gfx/Moiree/Makefile.am0000664000175000017500000000110112140767202016031 00000000000000EXTRA_DIST = back0.png back1.png back2.png back3.png back4.png back5.png \ bricks.png extras.png fr_left.png fr_right.png fr_top.png \ fr_mp_left.png fr_mp_right.png \ life.png paddle.png \ ABOUT install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/gfx/Moiree @for file in $(EXTRA_DIST); do\ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/gfx/Moiree/$$file;\ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\gfx\\Moiree\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done lbreakout2-2.6.5/client/gfx/Moiree/life.png0000664000175000017500000000052412140767202015432 00000000000000PNG  IHDR(<obKGD pHYs D DC^GtIME HˠwIDATx1 @\/a,@*9A."wVVvStqMp7T#,|<%Ib/EsUU@@u{ebxwukp>qP8.˲m[}3,}%X`g~W_85p/-3<4 LWP-u@M}h,X` ,X`wbMIENDB`lbreakout2-2.6.5/client/gfx/Moiree/fr_mp_right.png0000664000175000017500000000044112140767202017011 00000000000000PNG  IHDR(YpbKGD̿ pHYs  @AtIME_IDATx1@ DQ/rlg]0U\>so۲\uzWu[?<XǽˤBP3 À`5 fP3 À`5 fP3 À`5 fP3 À`5 fP3 À`5 fP3 À`1Y2IENDB`lbreakout2-2.6.5/client/gfx/Moiree/extras.png0000664000175000017500000002510712140767202016025 00000000000000PNG  IHDR]bKGD pHYs  |XrtIME  IDATx{x՝3s4I#y$˶|Ib'qHII& -Z.Ovwan}}ݶn mO.7%-mzr- Bر&ۺ433 aIKdљ07x#N/_~ƭqkƭqkƭqk=m\s:_~/Xָ5n[ָ5n[ָ5n[ָK v;vD[ָ5n[Uv>tpϵ{qϵ\ָ5n[\RvSM=x5n[ָ*UN5ȑ#g\;\5n[ָ5nbAVK/>ƭqk? /RhgsY==s[ָ5n[S-ƭqO[zٰ/~SЭ.sؼ{_5gl9gGH,ʒan}㧈 3{8Sn}d:yO/XܾqJ[{I*\K|ڸqc~ﶬxOWݖL?,[Y<\/]U<)ӎ b"QE@A1S,SʂZ@8fᏗ~ ,'ֹ Va%X Y* Usi%'PX`eS3M-4U]BH%(H$[z9I$>rqgϞt: 8p`ʕ v~iXR Kw9ӓi@p^`KgKp4ipɬ?~ Hz%OxYc 8bYˍG][w ^Txf"9Wu˲,l۶†>?>wћ@3 Զ4 ́Ι>ꈬSgjDB\U`nVsVx[u>^.˲eYyM+o?PwXIYhXXU%+TBn!WΝ%RT켄f3gO3**+s[E b[B\Z%N֜w|v28Ħ $rbhFS~QH9Y7? O{3UNJ7D=޷B>.Y E)Rk&&鼪[[\xw;<02:\s Br+sQ˩~>Рi@"'J9|d?iӒz}燂L(kn4%|6)JS;xۊK;r /X ~/tA=T]Ϗ @utJAoHL卉T.Eמvi[1ŠHN%a92n\^QSy玪Oꑽ\huݯ3,-4-~2[]bMXdt't]S:Ȋvѝt'Ts_Oro w{zNw6S#Ymq`O CZ}! /Įk _qKB.4v@@D@v GTJ A"UA)(!P)R*T({UU!ȥݑ>QJ"N4 "i @3iZ$=LA%9Ӕ򔪪 BHR?u)0eŋ94=% UU !tx<ׯEQU5kPJd\nrrRl6r~ jKXW`X74[ڂmmn/k~Ě}J-Ҝf 2i;a&7P'tJ&ٌT1;#-oB⒐FG["=;K w!){rCk:i- O:Ri1̨yynu1'9 UT椞z4Hk_,~I n6Dm޻m,-怢9Ji2-BzoޓEM>F/i z K͡"f VZu8NdbYr!(ĂK[-ub7tE3!,4͜N9a86Lf8, ,òe2B7a1)hug Dz*JMP\<;0zGl۶e1,s7Æm ~*}鹫D*&otO"*TE,eL J|Rί!m# lXtnU/$>'7ɟI>9][&H(]t2HP'(2TSJ8a | Fi0\.VM "5"GH,M*\|DBD1 INp % 믿nf}}=t߾} (аb REQFFF$IJ$m< E!i?Ս|lN٦0 nw4y˒MѸ`,]-lC|iZ֥Gp@+RHiM[_sKx"b#C1 YZ&O,XM2<50'[ՌٶmۖmٶeZ4aZ>=7|ܼcYeax*c蝬p9iSungy4/ν.aXO -mM~,ZN ~,joz*L~϶(^o]K19ܰ4@8J'/ ϪՀo\75/{ uE]p?Q'c?6o Uax'fM9S_iQTd>pݎ}Ef֭KOdSWY#^y' C8Ft#?aQ˱ySvpf WU2]Hpz""D# @P(%<% 5+˱Iy*wlX!'Ab$I  x@VT\zin]]`` L&5MSU5Juu]'  099p"0 #{<`0z-JR@T{Ir[lY09"kJc4h''Ƈ48!1Mfy\|$ɰ9>OJh~8<ױaaf.oۦe,s9˲/nyCU5%$4@8["lÞ3L_\.س-1gE34oS}6/α.[yD+~3woLNdfxܮ?sׯ|ZE}jUl~O IK/\]u[y׳-)~.]O1۵}XK^c}vzHR]0R~G'y6{͞ӕx8,J:厣+NS9s{4;+`.yѝ@O;!߂z/SŹ҅F~~`Js=Es+˺)t@s&J<nAZoxjeK'/@jx]\#ѕW|W8"px3O>\v&;־/"-u‘MQH ʲU1Js}_Vy^|EkS䚿8a׽7rrX6tmXǓ!0#.#põ|GOGZ\X ?ޭ(!TVufT*t4,6j x/4f$ABe?$og͸ hfF\&*||H@1 P6AU@Tu)}cXJ`ΨFLHa^'ǎ Ŵɺ"м D*T9C@դ*+ռ%$`IGx1S_r"aiKH/6;6=3B}o!WAz<5c9ܕ_H\n+ϻn49Ea rvC-Ӵ(5Au jF^ղ^mmm-ā4Kao23oy3'Nu78=g>*܆fiDuŪ7\DϹRsBnk_g`Hb*3-cD k_gGPLg>f턓omiu\lJwa>m;?t]N{b|x;v0@  =s+W|צBP.d2ϏD"dMuyæi~ܭ01y2v _!ء!J=!j rl6&e&,۶-mI3Ԭ/׉A-aRjQjtCf,2 6Sh 060 06TNf:-tqR97Bs棍E~K -@%w9pU|;:rk,hS\^ j4&␜ 66ŖKWBUGUvx7W~F׬8˪Bnb;^x&̡7w카.Uu IDATYg=~Tzjͷ?_޶>tuZsOzqǁNmHI!Xhe ޻ b bNRcOJ<hN ́bt r]bóPw?%n{w ۷}.bbg^y}kUMa Z[}ֆۯXȱ|h\\zLj۵Q?3+r@HOH\(Wh)pӋ/rNBSmW&'P޶ 2YB3ZMjޢeIMJMݠFu4 ۲0e62`0߂䈞Mfgܸ(8 4S wQ̭JW,˰GȮ>fy0-۠f6<Sko1,Dzsly*O[Uq'*eѥW8)O{¬]Q?v_XҊ8e[ j-i}GQ]{XslRMg\u^cdr|[;EU{aY _3*,Sx?cMJVBnc0@96Yeu@F J 5"=nI(`-6xI*p  (q BTT*DiX$qRʴQ\ΗHI1*rq##oHR(bdfPaa0L00 XS9ad>EtM&^-J Nאlq~Z`04aqɚeִ(kEm3nMmeJ+?6jRjYE٢5M8)i8qǯ߲l, x#Ze.$:)ϊEzո5n[p9R~_=׸Z}qk~?NlO5_,SkOSQ7k׮==qk-s{9==s[ָ5n[:".;vfp[ָ9}9==s[ָ5n[:bӌjjjӯ4)>pIENDB`lbreakout2-2.6.5/client/gfx/Moiree/back5.png0000664000175000017500000000066112140767202015502 00000000000000PNG  IHDRddbKGD pHYs ?tIME"|A>IDATx1 A CQ;Sl 7z0ogffnfvcocn.Kh'Dže)%Xв,!,S l.K0T-,2`A沄0 L%Xв,!,S l.K0T-,2`A沄0 L%Xв,!,S l.K0T-,2`A沄0 L%Xв,!,S l.K0T-,2`A沄0 L%Xв,!,S l.K0T-,2`A沄0 L%Xв,!,S l.K0T-,2`A沄nM(IENDB`lbreakout2-2.6.5/client/gfx/Moiree/back3.png0000664000175000017500000000067712140767202015507 00000000000000PNG  IHDRddbKGD pHYs &AtIME©_LIDATx!ng:RUԲU||硟|Y}73iV_f67kpӬMiU|PT+UA|PT+#]ܴ >* >.nZUTU F|PTU H7*x >*xVUUAQTUA?M* ^ߨ* ^UUA|PoTUA|PtqӪ* >W7* >WGiU|PT+UA|PT+ѹMnIENDB`lbreakout2-2.6.5/client/gfx/Moiree/back2.png0000664000175000017500000000027412140767202015477 00000000000000PNG  IHDRdd } PLTE֒HtRNS@fbKGDH pHYs &AtIMEŜ )IDATx1 7ʎ2e$=Y/c1\G6bIENDB`lbreakout2-2.6.5/client/gfx/Moiree/paddle.png0000664000175000017500000000121512140767202015742 00000000000000PNG  IHDR6HmlbKGD pHYs tIMEspIDATxr DW"N{tdjb/=XC$"!#2 \9*}7(iK?"ĪA0L}XoOFL(  0`@E?=B-f7g'¯ c]#T, B?6*ּK j/O E:(.5 _Ys,4 !taGMhs\clB衤P {Qsn6&t z? _kԖsR!=PC0#2vb;Ȣ=@EYn+M'N06`lT+zcg(T+z O5KkALkT}zx?ۙ >dE\#FM8`^<xqH$BA DL-ia.img-& 5W9UيVi}n̄8J>W1la)V ;;/"Vva~aQ(x uO䆽s3Ψuəzi( mPpuKSt#"a]PksO-ܦd)y՛]ۖ.@<.p.z q6T~Q|wp!EkZ77DyܰwnE|΅۞s'ekT.. S2J {Rxw~p7r*5<|<\*C0ru.m>iY`Yg~$Q~U_yiZtjQ@Lmس]w72XptzP)n*Dys)3.ϹW lE]i y(ʶ Ju<{VvbzǼU*񝙠~RܑK)he'S#RK}V'k;2J+;GWJ:Ь$!M/_qtfn%XXgtOZw,2r.&a!Ȋjbؼ4S!3!uPlqŧ"< ? +!σ!?;776eǖW 9u][aQUW=75+I{cJ U|,QyP|sSdfп8D*k S= qOa"Um%\1Na=ZG]ѱB˥u[!lu1▽SN8aۿLRT gTP^8ª/˥)BTE[ cՔ6: =:׈[x6q5]{ۅӠr倰zKDDGo;x~6qFaWS7C##aEmT5 d&K]Bk۸ 0# 2NUVq@y\vV7{ـ.MKx%WijVSuC*j`yO, s98][$lX|6M9i敆cݜgz21\e&fyhf>OE )c 0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#00fdUGIENDB`lbreakout2-2.6.5/client/gfx/Moiree/bricks.png0000664000175000017500000003606012140767202015774 00000000000000PNG  IHDRH8!bKGD pHYs ,tIME7 IDATxwŵ?~oUu` &eЇy 'Ԙ+XLǕXj,q5W O`3uJ<~|6Z  P Ht@ D&''ԝ~uE1-UcV3n=t뺦i뺮R!lzs9RJ!Ds.xǓd"DBUUUU5M:nY4Ͷmu ?vL'7]rt8fA|"Pp(w~WV>iiJs(ks=}k/6c-+0qS !F | oV}2kzy(O͗쮮2Ux_/kŬ%m a8ܩkn9/n={S^2Λ)U(ۖ}OW}#f QPDCf{§ p`ĤD"bFLe*3zi2yk8bX,*7l6͖J%ua@D! /SoDT.Z8gH;0`gNHXvZ.v i6 '&TO<~[BQBxC9 )aj>'9KJ $_WF; E TP*(ݤ@‚$o, IJ²dlӺUt 6 cُM=҅mqܑCȔed~d]&9vITPJ!'7U$+O"@)5xS*=c",2b^E'|پ#a@xTf?7{s8atq+ECQTJJjL7HD#?7'B<EYiA%+/=u9~hI)|ge9p\t9]pN}{kZE[u_bn;? ?0P`Wuaw{ Q/+cMJ*h$oxPuv,ywQ !@p)baY!6V(QqVRy, `]?6݅WIpQXW1u.h iwMaH?9e9?O˓71sSL)mjjd2p!"!D1O&r]ײ|>_EIRTbFUbUAmaGn}`a}#f*30WWXh%_N^Z?6a|i?'j`F4i[eX@ }EӚ5JO>t-uP>%jf](?\` D"2ח@&)@DU_B*]=%O1)>\:c+VoDz﷉x:(FblD@[(ZٟzE\Wfr+1ed%@[^vEiXEirJ+]7Kt4S.vs%C )a$v獱zs[!۶9xy7Wѻ===Mu?[[E;oTelozE] "ݯVioV4n7R AcN_sBl4@ r!7 !pa7G9D EHܖúEd>l]_-H8` gkq2F^jğx]+Gd_qʁή7fͬJvX]]ѣ!s9yya9<۶ BGGGH$LdY@*cM݈n#onjtےIvޭܲkF]:*f?;+RaԜ}h{@˨nqUѥ)OWc\5PBa1WJ\ H`П:`tMM%ދ8WP[hgntLrήWG+GzN &L$jkCK))|=!Pr)% (KO9焐FBJDI1Qb?!1ǚ;q9Ǭ5 ~HQ$ H@Æxki92xevMb~oRRơ1vm,P,>]kmmmllu=9UÐ!Aض QFEQ]Y<;ֳU psF͢D ;C[v*wu+>׮1HOwWmm-w+l.5,HB Ųx,O_C+dY IHKNwm ۿlX[nA"@ \%etHB$7-iDD|K?0Qg[9bñpZܾ[ւ ʰ#F b?ȟ O+AgHKK& 8a; [[[8!DJ"AyC'Ri```Ŋ[^sۦحة#$ fu,Eg޾tիVx~w<>nSC?;ujN<0J}Dp8Y% 2*@/9Sۓk;X*x{= 1WkK(G. Vw\Zpef[ƕ/]ŪUkbIN!3'+jx>#IA|_v}?5J,!*&x@OmT}!{nmΛ=%[7rfd$a眰b{{oB4,ߞ/H0㸥/)AQ^݄ޞ65 D.+$ 'zo?e]ʲƚ-mq LfB(*z7,˂W//}vJ'ߪw)Uo"Бί,mȤ@mK^:ݰ2=@]@&dY3~\_Ͼ igm j fo9( A)Gۍڬ+x(WQ/iDlgے D"0 Iaw9Ɗ>ho`81fCfi./+Ny8=;yv1H@<,6CϱKz䨤E̊ȼ E]Z:*bRe*8lwR:Ce!AB8S(zzz\֪Ji,3 Rm1vd$n#0K}IݣPӴXs?6V8ώt{iRBRPOiq_4潾9U('~於:?еǚ (J@T]LJ}@ x6EYpzCޕ@Whq>p-M|0z?][o};p}:t{;il6w=봋gֻ̨.%UK6㚙tAgWo H68  M^>(lBT#CV?UE/+b1d2Zu*z?͆bSS|gmZ}U_}_8mJ^7Lg41}}d_>J&LXdVig|b;?]wQJURAPw9~ۂD'bj2s/5 f3=8j-Ne^1Fdބ/4(PV7Z.fS8]ښJTUEİ5AvTlޅybq``w…."jF)em}31vl]vD"$|:~o /xץg] nڴh4*%g)HJ1 م9%+u2F瑃 a:`Ju8`xZv=@ސElqsИPp*9aĉuuua>P]hҕr庻\0eSdiӦbpۖmm=+c72;oE~pܹ 7)eicIEQ Š5]tUIѴ(J*dD"Q,˞_WRny-ѡ1 <]٨i[H+N.-9G`@9',P-,[C݌u*,)]OiRAeV=&5R DIʀIDr MD[PTl L;J4iZČJŋ3V{Yg?#_~ل'/[ahSv5~m}}~vVQ A1= >\MԶm?NUx:!W;D%RcR*ؾ@ {ﰼ^c?FS .ҘnK ՈDK/*z}ò]Gq]\.gř̭r@744>*+*éwVqpmBDC~Gd|3{^SNO4"Y6 ɰSb[Cù\'<{>y/@9Wr=()q@H)u%!RBb$H"3YX 9]Ooғ\bVeS$%# - cdžCӯ>C eYmKdwvv.Z"RX,iclbcoK7c1F0oF$Bʘ @q}a;@$mvT(l0 Ïjje'SSϫLQ[|" i=Fݜ.|[wq*ھoiIDATv UẒޚƓm]3۴溊zPoU❻L^"* Mq >-ƻDgMX.e44 ƸəT<;~Gim,#ev +/*C̔ͿQUT= "6Y6sn}x,yIgMإޙ>%FQU(RBdֱIng̉QQZڮNoqgaT.U0X,F"h4Y*[l6;nܸ?^ZEvThmҿ|~S'`֦Co!*f I/ @@Cx352ABE=pA|YLԤ*i߷rn]?BNH5_H#/#Rr>@I@ʞHRp(!K8H: (ch h6Nn}م3p)An2Q |0Ykjjxay^8R9mJ\.aÆ :.R ǏOӉD"bSTFh)E&%"01&t|mFL{pCfa^!;rgd/ \/%Pȴ12u=S>x_!-FF $jS+Nj%o]*umK{$x’%ˋ4!gXpі<ڙάMy9/Vxq@u ;sNJ">˖UQ<5hѵbseB.zڵF"(݅I&}<_߾lXwјpTPͭVZfC4׵VGU d@0 ]DF NҿCB 1!6}zaӮ7~Rhےʼ_|4sn&d2HjZ[3x#Udsx>zf`̓w:ωx%k?IB :XqI Ί鹿Od)$ ' \J$l4BH)4"D /"Kɥyk_4j+Ġa!!@/\(I! |Ou 3&UGu;֎3&H(9w]='øЪ 'a/^ UbXSSԔJ"6쵇7qEKK)ܿ@]]繅f lA.DsTU}&=bxEu~0P >!G[~sAP0&]W&t[IOъcP(-#ksvOv}@uy@)lOtG*]W.b)ߞ4q>hi{NiQ)kGSײn{'ou+wu]Mꑑ2LCCþK*XfN=T\^-3}3*NG3 r8 bIؐ7L2} T/"@ (>:>y^j!kCj #;!xW?T/" DI TPZuB8`BhƉ0; t5Sa2qȾIOj+ׄ&mucݠ'Jmۦi644477qEQ%B\\8ma7l$Θ1cw2eJkkk"PU qKn#&k$;w_  C).b㬟>jͩ hキK"E*@Ar)/X|]%{R6+UVF\\T4m^R MU/ tuFMha\WYo)rcV́@ UR@ $?z;loƶ?hԿ~}z߽UQ}COxw=:uUi/{M>LzgaS DJU#/ҿ>\ӚFH/|ɥ@B/l9J.䉁l6VW-y1ff Fè1c<ھ=:J;s*u/1y\^R=0qXYz֚vJ;3ϠŽu=`oP$%@Ӑ7n[~1@$`m aR)cA 8GI o-B`_*+&R>(&rP=n%0C tkdX`\vY\GIGЧ2rF;Llkkkhh W pYО,+̹s&l)NN;M2-J-,`{`[bRld*v#&Qp))q7@ izgPoM`gKVnnh*$aZ,TT"NWe&{ drCwO$q|k{҂ AF)R&=_:ck` etUYnqpJ5/`  Wi&5g-y /]/Y˜{0@qH .9-70ٹnnTE85zҌkUvW;.cl9;P(iܤRbJT5Ҝ"䬛{AO%kcu}|*8 wO2අ@3Ϙ׃xp (A)2 & N[9j%rT#1B)o5mWqv\_OJ=ēZOB|P$>D )u9c}Hl]&@@"L$"]wxwXo>@scG׿=3aϝ!l wܯ!TaJQyDe}^ 9<B*%c9 ac*ܜ.n]2 'ǑRBx"(*fQ{&{ѳ![y?^vay#o~ĉOc;0}{yXZG~qR=UPO-`ѕΏav;"@߼OR뭿H/~8CμN c𪫎9GsfC֍pcR=58po"OnN2& ~]xwr&;^Iˮ="2o@oF *: 8 < MG"h4jc l "TW\===SL:uqjkk5M *糿b*-F0;WVHBt, .l~sce+ v^#KiLpjEFUOR κ+ۅ\15b+VUc䩝땆T@SB nNEU*-yJه IahES?U}jyt|G#Aוj"mvSWp~r9' PR)UY^{6דK@vg$zRbOzk.=f{- v~zzQ`+W֍V_:J0pBPI*9U|eY{{T~>"S]<"Uc^cةViNJŅ?;P7߶O8_Nfw0X~2}'N8 a E)AA@?[mgxk Y])`כo@A3.ւ)-9B;NwxEq&TB>-7'?oKg؏S'19ք&Upd7)n]#TӴ WFn966N&3XWW{L2e̘1TJuBHxR:/lu'24mu]V׭qVFhlll9_ !Rõ 9^yZٳ?^}CS:+;6}X•D@T fzfc6l7Q-]QXn]W&>EHD! >*} JVhx%l ÛBK.hBB!`I1H'nU2-.vz|h4!yKm+=c&N6?/30&gCN].}p͹7Wj&CP%0h0%@%Q""H RJ !"RB) QLu79=ɂDS̥c=11@?.ޓ~t`C)5r]X&ͤgMsk庴z]lT"7dɀ.C*#0.4 ܬE|g3L0a„ Gd2.V$l}ln[Mۀxl+bK#'ҢJ zIYyÍwᢅ?y \ɗ^:}ѧHLM؇]hh͊ZݜvYQ{G?aq|!oIuqcz3ګh8C(H rD?XչniTj3޻>B`e*bBrRm X& 0cƌ!ޗ@JjiH)U|w-Uj3J˽\z.|-!*pɎxzn_NK.^f)Aie>]έL~5X6IkH/aW,aA~aؔ6lSJ@;ok{\7]Ѝ8rBP"CR>M7wCO4 peZ ZF6{nsh~y]K?ˬznfn"V.zhrQ:p92,ҮrZ."I2&lF/˽R?5F7-?* _F7q^PܷL6*X>2 9*bSHycUb>.$/pmcfOD]IM:.ub8*$pVG~F2dLߨy^MŭkNAӵbL>vZJr] XB5{jc|ЪmX~s ԺfR#^:%˷C."Z:jW}cL禅q~eU!S:./sZ VVT8.'v^ggI;YF9"^0* 6 n\z**y. ?&ƚ~ju`Ʈ2G2'"6!(" iKlRC :&Y:sfӵnReU2"r&v}ئA2)| bKGDH pHYs L Lg"tIME , ;IDATxݙx}ǏUZ2JJеtq dGw˺Jo$,W]`l5u+Bdّ{Ҝ8Fh@'yEu H$U W&ϳPK~~Ħ҉.+*DPÉ(J4(\% Q"b2\f6\.ۇ';m`J=6aHϓZuoJn<ղp֭4]:M^|-==zMM3ͳuG'.O^]A ^~IJ҇:Z,$,O(@(R(pMH5ʟ:O [X'C4!^cE +!"jOKh(ƪr_<iVR|XBc[|{Mmo>{z̉UcN?Wv}':ͳ1l8M4g**Eи'RdQ|YGΨ1KUp@ <7[ DLM7 厄r/ַ43|6p'?pw+_)$ @ $ZuO]'tEؑJ@Ԇ]G. P>hQ90пŽekBsҎcǀv?{Աg/>3#_CYHj h:p,H3_Jp $G(np@Qc dNVq@ s(n22A(Ku,2$>j" v/!Q֤-HT#L*rZY`lv%p)$8&V]BB!<>qzGd<4)n7G"[iOD\=ٲ}~={'/7W])Ƣ'l")5RTgt䡎@IHCEvs8XLp1FT3rD  HiNIlrT#M\fׁ.{=[ѕFu'?)`sRH|.O2;0kaG[k_<}- K>}IkjLΙPLB Q:J # MrOf9'Q{g[p7q$ .u(]N?ELB"R6p' (POXxnYSgH8"ࢴgBvJd(WRy~[G8<1/P,DvY,ճz/yg\륎F|ޒS?;wm5vpi%n=f1ےZmHHcJ| gz:KR Cfڑ.dyFAOڞOAJHyj/ n*QD ~O,B)ʚ RHǿPkR<,@g(V~k_@պ{E\Z?z(g zN^{&yNJFΔcmj_7;[g]'fLKӧ} GA[xp>&)Ǚ cZX)80O95dcP#M0SqUG#[a>A FnQ*H#tDV7O %+1=ੑYYW1}+G/;kݝkaN0~ [ 8Oo3;G!g:F[Ǐ}9SѬ37>~ڭhh n};vۻquʞpu켷zu :ܳ&sB]xׇidpq< XRguur@V,JJ.>TǙIJ4sɒ;pq R.KJFD(( .Je9B!A#",+CH?'ZG#i4Nd@p8ygⳟSܽ=Rbhe~e忰s-sPzvMu?oo+x?\<czwڵΓ2q7s.,pJcs5 Fe\>ːeGa0% ۼ\!g_>KJVlG͖A7 jo=VH#ÞܸE bebռDw7ALTĚġ4_\MœKdv<6׼9X uFX`+ : |MSəl246G b6:7zu;Wwiv YDxPIW0T )2pGVpHZ'Pw՜fv[sDV\<$E,7v 8Mf)Q{OD:42TSYJZ3;87_yGqr6W&WZ O,^7Mtu\}wCWz.cfoC?_|?~ЮWW7,^;W=//S&>x o\|]"/궥K.^ׇ >=oSw'xWx?}whöUBAgȘ(j 4)xs&Z! $`0P^Q 5faC:S78*ѨL8Bg DRQ9J_te",&Ye 1@ gұBؘ)L&0FSFQ`@)*6pF0FADhUTa)dc$8V`MFVt0ftjQ pUe(IucfpΠSН)I'I$Қ6ji..l(X3 8Yyܿ.XS?3Oa VlMO_zБ)jvȦͻg׷N,֟Ñ9r5mF;g o} (C{9TMPL1SV*UjOJ4t ˪ UcÙL2H2+P@Pd C2:6D6%À@ m 1 :.X2.D@h ì b"18YpX+%"H$Fm(( wKcn`Xq@(/X YZM *J1x,Z7kx4X0²8tn1 )2hpbm\M6YUU f]oű-m\0+gKxNj+歷,ukbre`oYrpRJZe}~[?Vq,mqVH|d"c_bhĴ&d cR:^m1#k SHɄ( х L,Ls<é)&GBer2 KtM<35Z+D=1>ij`EQI%hL8N1 V2\#nn!ai˹3jVraaN(17t$-`MbM9iu С1c؄qaXQEheX3`0FmṻYKʲ & / Qgt  CqeLѤv^MC&gv2U['5Y5hqppц1ڤ/ Op ìZ>xjXGU绵Zc"E-%Mƭ,B"ubF[+kaeÉ:& iF(&cc`#. ~%pJ c0|!J$B0(]\IENDB`lbreakout2-2.6.5/client/gfx/fr_mp_left.png0000664000175000017500000000154012140767213015411 00000000000000PNG  IHDR(2gAMA aPLTEώ~Қ~~nZbfJJN®r~nnv^^^66:.22ZrjFZNNNBBB:>:2:*jjfDDb~r**2"&.&"..Fʲn:>NjVV^rrrFbKGDH pHYs  d_tIME "9f:IDATxar0`9%NCH+Mh)$wL 3 ?W+iϘ,Of6/6MS7tX.Vy/\5u>l6Y0m66ۗn@x+3٢qVue~eϬ7Ƽܪ0fQyA6g4qD;! bs/ve{an4g"yݡcѸFl  ]IN(7>/F4b\nUvr#a>\2}Q)z :l]S/>xNUTJCkDraypj$cyJYZ*>gzZMf xZxTۏqܥڽ1t)\LL1Ӥu'I#fNy3ONtyX4#+__c >hZo:KMzC34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C35rYvbLWXIENDB`lbreakout2-2.6.5/client/gfx/fr_right.png0000664000175000017500000002600112140767213015077 00000000000000PNG  IHDR(2gAMA aPLTEilRCZ>(pZjX}s`J=Q?3"  !yZG۸oafV5& hlK4ZIfPv`R{aRp^RZJ?) !ĢX>1+)"bD,w¨xkmVG' 9/(Ϻuj\W:+`NB&5*#ybwco\2":* .'"[8 hON:/@.'7".A2(."oZM- k^F9:&I:0A.!kVOJ?7QG?@60H)rfF2'WB8B)P7$YF:Թܿ|_HsR:.xpjsS:z>* O6+rbV2N2&>&ͰylwbI6). {zk' 3J2&r~sUDiF1zfXYB0b>$bK nN=x\":^B3Y( \@I6/ hA&b:"J&  ~VAAr[ƬηŝȬЦΰʞpX"zV@ձ俥uM5J0 Ⱦs Ƨ䱐 ȵȩNjlG.$>"QA;ܛxůo=lǧЪֽiMgM>xV`JҲe.ܦwA4bF7B#( xC,X0˾S6 Ҙ_@edSGt:6 R2 b<)mPʴҾ趕3Ӿ'zJ z˕{Zj2vK0R$rۧjCޱٶRbKGDH pHYs J JBtIME:)2 IDATx{XSWwIF&KId' $ PH$@(E#Qai=RJ&m'ak[t&Pztqôv:=gt{ҝ9Tyy߬o]thbbLž V$$ywʤԴU\XKck.\+X>{=#̽Pp_^J~Av! K6A*ݥMH1Ѥ2BW(˖%A-.H`n>uEPˆ1ٌtalݵsg"e[˻65bl+]fMbݳ"/}PZrYuz,QjhٽVW{G-/́Avy-~a56J'qgh8VTWpA{a1qmURR[dۼyaPaC+L|ji|֭[]?hZ/瀵coc;~JYZ$̳43s$^]tr/hb{a_r5d4#w5DאRcIgb%;~|UDVXmXy_CC*{E;zJO)Xw.*8>Yb4Tm~p˨ʤv~VװU?ь2(|U_Le[-T_ܺ)*8vߗ5MpwSƤ3)>HxsQJML^KI+IHԌra|U]Od;{Lt#ǭ,Y'_EE5b3KxFD3j%]i^p)e ۿLN.^bŇ5S;b[L8,QaIkrs!6nRZc2_K-G7Gɢ?,U ?O9LUE((Y.(*Kq532 |族dff|]lƽ |+!|¸c_RI{OR,?>O5U~vz'|T\Iǐ }3cN bo7]M#rZQ2LR'&'Wb>}pKZζνQktjLii iapVf]'>=qnOd&4}-C?:x̶~ <Ӕ 2تNKjJ\jfյq'V?v̀I=}<"!JyMЙsІj۸e~(nb^hŦ3Yt+2lIJcm̴:gO񘧆 S?֕W}//Ws照=HPxKύ?z^Wz7p!Ct ]E5=`wU0c"7GIIS.;5Mm$2 v`.{H:B{AmI~! !631AClvK, )EA\Kt:L>t AW;RrPE@p)1a<2е(@0.D"4*b8g)Qt :\+&Q0=.V٩8%X$xŬbz [REa(x2aW؋b؉9Pn@hf5WbIȘL)R]0fځb# /h4s\PpW8|1!2 ,rMp\v{e'Jj!G^0jKb"2lQ*9 -F 7r"|w)7KyGh"n|f> [X=ׁ]5铡óng^fO_o r^nB7kԖreRf&Ap7,p͞XAnfR.7Y[ T'zR9arsffe7sGYY"%0=?{ 2+TT D^!;0&@aQ^/,CPT DHx$SLU8h7e PXF=e{^+RcxO瀾.`DIB)i3bɠ(کm&[Ukd`;i1Z)CԘkL&ChTsl}.5FCgK:jZ> 5J%"s$H; =IpsJPCl/V]``L0ԲJReBqacX BPB C v/,5(=*! C %96i.A @ FDΡ4B~T5 C0, "+9)d( `X0Sb+\^3_&!:^,8a٩)*" < 2Bpބbxagt.q_EpE[9A,{Fz\R1 Isj Pj"(RR6K^! JFt:rxFݑs4f> yIb|Ht"#0DpP)(HsjF!4ۋ!'[*YcHÃO`J3lL \_gˆBbR!(1\)ÁAh0:C 9®WțJ+ &".e ^ { 8GL( `t"Ǐ#6pą n.,i#D%=s29EB.K ,pȆɠTdHR|,&PF̎)5\Ԇs0JEӓL,DM'0p#ȽN Cn{uj2'"a;De G^u T U*Y=īE1Ct p auG<$"R2 8{ f0h1L^+v څ"bTP%mĜpUޠPVˀ/+dr:,f΁\ő*'SK#f!a!X"sM-#&qFho3DveCZll%y>0Lge>fsnVrc_N7;0ft:p]5l⶛6Ff݌fJ\ $KYw}ªĨlvM٭lFlc)BM q=,iT`a4AtbTKĔ\TpQ t7IQ(WUjq !Mc&T)1‰X:Md)r"l`W #& cB&"M]$a( 23 `n \N/ H!MMdq>>i q80&e-$` M\v iR!ML1KhM:0ZH -"M6E[lJN M(W'ElNigC&3"H ۤɖP)8ԩJ@Np9d))#Q!!>If &44EH.LHK=Ȗ&.!I3Elir) ,<7G,,E(4)'Pdp4Z4%bIY8h ~iڥRo4Ys!iVOQiP#M)ESCچɠgk)%i)B.{;Yftu%EEb,iv%[r)7lqҜfnrEH&LR" H\4 s*Bp$6^ MN"MJ -Nb| Br $j%M HQ,i[MjV%{4X4>i#Dj_44_" ߝ4HDur LI3}s.i]4U}w!MvHIa4K&Gf}ɆH3 H*^4^>D WsId|4᪥HIW [4Ѥ"M;Bj"ߑ$HMw%Mw Jߝ47I--tEf`4]H&|$iim4Cf8y"Mv44F&zHM&瓦}>i} D&nE&H]C.x֯I3<44wNEHHӽ4QQ$M4g!i3Z4 Ii`HS}'i'Mȿ iY /E# Hi" I /JlÝټiw$` 4uj!im\fٽlv/fٽlv/fwf잛s{n?!ͨiJ;͊„7c! ՅB>S1]儑iy4EtuQDi]Lq`#TܫbR6lZV9V\|&#SP8i^QZG y8L;JɽG/l?9^O(a ^z2ytE+/s[W31ێfKg@Ȏ|l{,mg-nnJb)Hp-u@#,J%T2*jGXT> Y FB}y;Cht/t/*-5Tμtv Vs({LMVe3&GVǯ<mG (7cju`ϞԊ>?ff۶PL۹gGRV@ ~tui: lqeLv,j|ھDgF+IKJ^Z sůM]^j:FPriD=ݩt)Oʟto {Ry&aܮT~ԩWlk‡  cGcJKrK֦ F]=ui{ٞmT*xՍ-bWH+/$,;'#̧~|Vm2Uפ+KK+ o~wK# 5qkK꺔l/a}We45*s;b~}l[cSE+(.ߚ-M0֝2 \殄=6AZ~ơ5Mm~V>DK%K`ьtX=>-CImy[ef7Ѝ5UtI &+o LIƳ/#xeR2|[+;7ҮLƽtnkI6 TYET^ˠK*n?p mب5 EJ*n /?s]A_bw.TmgIfx͜>iQT zϫM4r c\#QݾF}yDަ~jSGʯVkHM\iLjLI0 DWS9ÚkoK#gިMi&q ueYLZsWɾbRډL޺ocnJdfCeups4-d68.ig3>|!C&qќw/i7LIM#*)=CIyGfv-Fà*x"ws <1xauLdY4QC]y^0rT`N!Sà¹{_tڷO[%U+|0xu>0oqO>mgtF1.\JW'߲ TGM&XW6]2a]DrE%g}#K7y2EZ8Ɠ?~ve1=V,)[->6`E,A^U-|G9E-qq  ^:x|c+>+\_>aǙK?_}- 蒓9칺Uά\Jx]a2_~]8gh4HDr+=o 23ddS"–|_h;X^׽!SY / {_k+^#V ^RVϷ=%_B>Лùn >飃GWv3d^xosҿތR_Oko>~&!G\Kxmjw׹l Z :҇Å^CZj2yҬw`w06XnZ#cvrVf2>IyqJ+`n_pS޸3Rx2ҧY"O_8hj#h5/s[S\˗>Φ?a8"O,0'6>Xg.jTVqDڮْh'{'?XPeU(7 "{zS/}>Zo25`qIHkWv~u$~p}Ԑf4e4ZoƃW"Mӌc]kOL7Z_<0I]1&u?]y2woՉ`YYŇ3 3W~BJ 5 U53)IZz˹K> HHS0i=H2* }nE5 @)ҤUzOiܣK+4)liZ~7.42,$]v# M: M 'ڋE HӤ% nAys]c*Tl[wK]"4cmݱ4?jՍ%4T//ѕ9#)\f~RUf:@M-t٤i2\aT7\e1jfS$j3Sӏnx i6><Fa߯ iY2"M¢Z<;iCJޖYҤ+h3Ψ?)VhiǩUˈiTJWz祕-iWfI?KWDn-@O?n +6Mg'xRBtX۩slc 3+v xZ!9]=1MijE} k϶(\iU>_ sB<E%4Si{snorR-FE'zL=L&ӺcZU"c5d54C]U`ީjZ-ιiXFNlm\8fkzկ+n:!վb.H,sր5R$'qz\8%ԡ9׮Iɡ*\UCނE2c!rΚTę9D@U*0sZ0 "RR5!sfU3LN̷ %Y3XD(H5Ϧ'NNlɚ<&Q5*cW51)"\UU'"""ڊ\SIse̬PՁ MUOV~LiZ d`lqA(\XJ1P$DT58UZ'RJ*% FZDDkmJS_~qݭԼ&cd8;e udΝ9weSO]k+w`O!9Ff(F~^ǩ,'53s@Ԇ#?A(wwvvO(vb^tӗm͢:O2 S-;7> `vpxwVUᢋm] h._}ŋ{BO]0|YK]k5+G#%'NcZHl6m|;:4Mm En\;fccbN]t:ݚMڦ !cǼ{ot"n[-c;)1RUa[K*8rN9er^DK)*83s%"Ƙ !RbLqUH1 1srd)"h 5`КPU[iԕ#EH)Ea *wD΅"*h2. T)js*j:8\eNRD s%qxQ`@UD1qj`L8Th<Μ<&fV-%HΣ1Ӣ`*7 19WJ!qB9\J)FZk**cOpy O꽍)I^uѲ]s?Ξ_~Psy,`Xy"*%ƬxZ-U2`& pڵW.)4W[UqQI3CPpOIz_9_UQHׯz6x&M0 +y*_Y4Dn2L[!T>\"d)hC45My"+%)0EKU0pQ0+gom۶n&ͤٽistt8N;ŪgӭtU[QD62 *bY R ʅ:XXJ) Z"R0ExcDc H?mgI%Y@-ZUs΅:PQ)"EJ,EUh#YD!TiiѺ_iSD`%# Q@UZ4ƚ"RTKQfΙ 0cJ}nxXq }7Ē9c*EE,Y2"E@D(s)ȓ'GvlM'MTJUq3s-ĘhQ-¬ cygH))璒JfS(.E.7Q嘊 13)Ԍ@Fٟ][PgxqHh8QK`W~9V2[GM; U@.YPUS檪ڭFd9e4ؚgjĹ/],섭X}UU\Z+r"`q!Cܸ[[S*+ + (,C "94ƐAƂ!g$`!Ƣs"Zk""1jɀn:lڦi\|ٽ˗ (ETs֜]TAUs8(\ʓƪ*1%N)041ju=ô }?aXl$ZK#0FDiB,z""LtWgNTUEV 9nv"oFUJΐޓQPV[n諪p-7Ŕ-"Y vs[ |\8LBUDh"Y"Ȣu]n]5b@191s)E&"l,:TUD1jW$`, TW(yLUU 6xX`r8)"^18}|>*BaSֹ0Zh@UoAXs 9 !GǑpZ.V!Y\;6,niQS25mο;8 8 %S? Ey'gyO?|<*o>kN/WagYM x>1bg1w$/Z!0?CblWOXXuY]iw2y o=ػ3څˑZ]{7`S֑2WUUUr{OhK߭v""1>1NPc+odQD r\("d2f9kIUUu#R^Bʓ;uru])%h6Qk1&8:!k-BG!4ֹz WUm'>dosfw3qYrmo pc.w҅+\uX=ȅū+.{Gm 0mk|9,1Ɠɟ,p2mbߢ*Y>)Q~sy<2py<ؙ_£^u޵C{`ѯX/AKx`~G0ִVŵ@feD<3oߴ_0`ٝ#_}gn:C; =>WUU 5PUd 8"GE#tmcfUE4[)YC5!"B&al@io|VJ4aG5E' (,j & ̅ȩrc)%klL-K ';\L#sj&!4uhv6QR 9bwADXl'ÜrI ,[&CUs2_udueH))0KqΩT~ & Vo{TTӴX<"0sM916I)Zh9g*@I%P@7N'5Ey)3T 9GV Yk&uZj_&4=(+Z{d]0)Li3da׽rI H3D _?j%̣=3ՆבG@``#v@r|Mb 2sz\N >D*2Xεo}ˋry?Wz_P"{qpW[,m\|[?{;F}3%Ђ |BEdVݣ$%؆2êd"s;_dyK䴽)W<{=~3uVkx}sa ~{NweUà`O]ңVO>6<{ݷ}3|ZepS(}=Dpz|ŢxP"@,8~'~Pz6uvRWUZD ha͆EĀnf8M[,XDV,&_)yJ4.+t6GfɹpպHWU"GDUBTUj{56ryl{"ygޗRneTUUo)587>w8X{#:4@D(uuWUɴhJVD}bKmR4""Hn2aX1ƔRGk7Vgm*#Z'eȱ#L0m&tB#lt윚-ԕEdcA.U "֫U3(@yA$:"ȇbeU }7,$"k!JE@QHQDH2ۿYVk`몃OHS1VF#ZBoQpT7{N̺Ĺ;z@Ħ(H ҥBgO'>5u]׭ =.E@||EʘAc 8hm):T +Dt}\BMSr ZLc컾S12::L$d18!NjEqL AX)޻lsU0-Zj&;[[[{<>VDLZ|1coʷMP(ƂNPdch\$Dkh]hZ5&¥j5uz4R RИ;sPyjꪝhWN@q$k#Bh7ҩE|]OBݨEnKMS[@DDk䰩k(Tnz]:5Tԩ*PӸ>حΩ+"n}XI1`l. hR*hba)E KN@H" `TM) 0 %rB]bQ>@j%g ڔJaɉ-HQQc EK 8K{7D`fUkq:uaP%r`pYT"ܒY䜙, IDATT8r`.-pKnʅ+GGڣ1@h(T ̲8aJ)qk@G#?6fAۑ"c^IY3ݚO pA. DzkO8UW]OhHFp;'/VcJ}L%& 5mda7U|_󨗋^/\޿~m"ϣFeD#'RhVȼ7Pς4o׶6}#}foy'tpy+o%W?1߇G{P2n2w+O?x3W~dlZ/}e73;z.<˙_qϝ3^X~y>~Ϲ8w; ]B_u1oB#n8{z>FUhԀQcZc@IdҬ'!v=MYDw,,ahx-籞4>4%a\v]gĴm\H)id&a=\"lDQ *oR^6xֹͦqt2MyAuLRJdf%"GUUUk!fl9oZaD491ZBDX1 {  S\4ƈBJɀʦbln))1gEU5ŜKGDJ)*n*AʥϽa$"hEr{Kư*g! XEYT5d ZcD4{Zig&hvOzճ;󗝻kg"3'0(0;乳F+GUeg/M@d ^ 1.&x~챙n|/\1u+]qj" vw܅M iZcٴG̥D> w G]1ɨyInfuGK54&QQ{mhkK߳#Ӈ>]|Ouݏ/kw f:vO>{uη?Et/G+P?3$o}{~\+Wja^  /EnwwݝgzKxî ]߼;>kU$)xcAxtLAtݯ<!)'vMYa jd榩,Q|dNcU9ն[irYJ4vNBUښVD9fYRxyۻ2@CO%A5FEp|\w}׭Y$sI)u*;_k>竊1M MDX_җLo~Xtq}u?{@'A4< և: GŽ^[tva?k...]Ft*Jo}/ozɝ6/߻O<{_8ݝ}ft 0Hs|W> *' W/>/\}!:r_|.?8A;z"`_S}t~P8㰙E~-;bRTPUPqK<KJCE8t֚1m۞<"qe!qZ+\1E1 lޒ1ZJDؘboqVZB "G.&Q"@ @)6>~cqbv8Dwt88tm6.q  : O3K z4tbl 1Km26T;~//ŅGG}kD=/83oc߻0GP?|Y92Bs$/h4˦I&4^ 6)?mނ8fryxd2Bc// ~qX}-|eȅ~K~hi@e+?1OKvէuzxKKncو>q۠o~='o^n9sߨ]3 %''됿v]xKV+dB]%h <9FPmBSՉ|k؃:m'U1d1):GMک#ǙUUt6%g9yrDZl2䚦fU佯lk>N~U%ZSc)zCr LDsJ3F/,EsPm JRJ)% Ơ4NBQ"8txOL]WWb3iC]/{Wøu[3khhqMS7ezζaR윸MjyܭW팈RTvNmϷhMҨ VD5Zr΋ȘRT5Q6KA#Zb USU! Z$Bz2n!%o-)eԵ"4 Wv޹;APCXD,Hk 8OXZcΉKu8s#Cm-q-Z0SJ,\DJaWںٞo1c@ʩCL|U,)eP1U@D h-ymfwK.i:Ms/c`Z0ڪۯ?r/iڽ܅%bJ}!x"=^X ,ƻrP]z~J 8=9233=j}]UuTKo{ 7t Ϸ/F++&r̒6MˡU05=V1 TU6QM R@n978pSk؍g:hETXP1 !09t7n۾cMQa N[C&'{"/X!&S4u1ˬrFDI9TJkm9.Bk,Ji$;c 2,t;6je6P7m]UU!xd!D-, 5aHk-!x=ڶ%RZfNȁ9c1 F$ ̑5֘,n;cksWׇ#'肯V3U9 ,uP5yƐR"QiJRk֭ x]ѶmK+yfv?%'GZӠvmhRMH+fs Dp?|Fӵ; k^u..MB&!,Ls͐L`j&X dX[uO:qkImd yw.:EdeՒUc~?Fqjم +ís3K+k"Ye! eYNAHxnH]hfAՀ6wyM/^4{D*D+vա{}|ȶnﯝ͋ _7?[#ՕQX;>Ow+#}ݍ3NC=o~%f͙Mo~?wp~čW?t џڿy꡻nCW{cbr}8<_xi2B855511c9a+[("s1F B6Q6]*t<ϵ\ M]+ '&<ϻ1- uzE^791%LHV[ 'c)#"D`}9*Ic\1[6 G3jA]>ϊ +ZtFk"0#*1]Af}מ+op3_m7l 'G?̺8uٹ玝g9 G;z/S۬]^8/_IsYoO=Ue3no)~{_8}>G\_1kW=}oCpͷ]Kgο]Z}ԳN>҉?=ϜpEjK۴{NH~G?YҭVNRx !jxOrמ;N_#ٷ37>o?GxW]ϜpO?{/H,-.=99CXQ1pB ́ XDɋš9r-D4J"T:H}/)55 KjN%%) @Z"RJ+(T^Q{f8.&8 *,AC* CDDT J)@BTJ &ARvN1&p<UJYE B!#L(!AQ+1%HN]שO@D Sg2mLXiz\9r-0u;YL=hmefR&E5#0s6u4YF"y+C%;;Ř$Œ)"uj*s%S ɵ{G(2X,B`BL#_jm9#D)t@ǓfaYAL$WNgN+5VBr1i!뿇DH)fa8""IPTړ58&ű֟(9$u+m҃1)21Ң_qpL'M8%E H:UubιRT1\ABR񐌯P.G$Z'PHD:ALMCRЅq"5a8^ɗ/X07 i/T޴֦ XbRiTZmA:]'^ 9M R?^_%$c%gȘT 9E攥RZXH|Wc&JJ֞t%ucF@7#3#ajew_"DkD&B9_ƺc[gQ(( Wn3U9z*5B"8ndb+2~ V%xq׫q"M:A1z H[\OJ҈KHH2cos"|03FY!Ă{CKIENDB`lbreakout2-2.6.5/client/gfx/Oz/fr_right.png0000664000175000017500000011447512140767210015501 00000000000000PNG  IHDR(2/bKGDC pHYs I IJnctIME V IDATxڼyiz{wTUwuOw{8/B ,$$aa ‰%GXr &6@b2falس؞}z9#bdLW:T}=y庮B}{$ H[a=W0_Y$ 1FstmO[UX;`o=RK#yjZ5PA{`1GH&&!ՂHOR oJAؾ&D-yYN??LӔX?k{T$i @*R()lo* FI Z)J4Jh$cUNXN2l~YO@~#ڤdYFhmJRZH"ݷ8X<12Xg3Mx{~{Ϡ@CHgb(e0:AHQaȲe.oG;ku ~Wa==8i+Lf" ate{y6kUIc?'Q=U3fnR3av=RJo.x|zQ3+g=1 ~? \vSuH&I i?k~?Vܽwvhm6bydzKg=.D${Rs5q6RW5apo__)L^_o8] Hj2ڶfˮɳV?m@ņCӲky{ "o=<?]Pmv7ox}u=ezlW~ ]B[_0-zOzgWW?|ue z'?_3pqW ÀV%pαдtւdi?O0dL8l.^\pq&R:!@[aYK(]_Gn|n>]͕W!F4=!!Ru=}?k|-_=9bێjmjG"PZ" 2b@[ň1~,8ycB=TM@" 0-2hnfWqhZz(IxW&}'Wg="+rJ$hv{d_o #Fcr4}OÁ(&3tځ~O? dE?>i)Y|`:ap\+Lk-u]?ꎦEKvG1h R,s@hgco}s!J D=1gr͘}]OXZa87!"J %&IW~t+s#eYE,Zk1& uzf{p!\YJtQ!$ƀ֚r54MG<#X;PU4ᴜ`p8PW5:ˡR><5IHi"@Q(- zjuYZHAm蛚"I0J$ yea-o Qckh%$HH/?<(H!ǻw"ĨwKZ)0!k4\9=yÀaYZC+ o#ʇc`?B`>21p>"(qcxLS׵ޢ$(HԈ8GIP:;b$v[mc{Kߏ.PMDI mivf{mH50s@J B)e5Zg!+JxCQddLb,i lBj*"OID y^b[m쫇ksJ*2gV$}@"aӌj%;LE =hbMLP?vPi ֎vIj'AZ ;!ZKմ ޣ@7 DbD(3B}o<]/~=QEC)/Yd2a($1yP|Nd&a\qUN@+D?RJIwG‹|Ns 锦mچi$ i} K,CHsr\^}bN]!I,q.P5}f}dB~_[bwZ|魣 oE(B?~ gX,1XEx7IGf/_%|_bqD|BiǿG(H7>1z'h K|w~ןk ]ǧ~]Gl̯_ȇMܾ{6H&_=T^lΙ~_G IEQ({N3fC^LʂG>맹wq OTm z_a۳]oXז_쪎Ǟh Rr۶36/zn?*Ͼv{_m٧'hbpMÅ~7>na=R&ܾ9[+|hN\|g{R#b QRqM͵+Wx ^L"Iy[_~iB:J5/~s('ܼ&QϘf)'[g9醞wQo?m_b &y6a=В%(E#T@۶YJG28kUU EQL),_y#LJ[c҆l銦i}݆fl:bɕkwMӳn9??,Z'O'Ez 4Uf34( mE-(txϧ("yyo ^{!,}7D)E5RH4Iȓ,;ӡ OSViHG$IBNNY88v$yB ycV1{:ιZ"I@p};4]Id6eZiiXed1R1JGЉ&H^LȤHhZH҄T,^[wnq}cr#b@xr yǡnZ$IS|ce LBXWU !gpC!1"GH[Wܬ^nM H1}@ O%RT)#i:D!'ɘ0B=avZR$ebDMudڌiZoc~\ mGk-RFztk94J ! Ih 4K@J<4Ki[zg2M!8& 3[.x'iڳv!"#'ۮLj JgmM[u˽ e#¨tBl6_- .XCG4 %AF2O8;;lS9iaXhg!D"#O1kY^gvs+;p~ d%0&G>՚~kӲGdC2~>K0ɲm&HӴ $ƌ11G[{#&9hfGhl:e eL*uAtiBzR%)F!JTA$zO "0 >0:`"fb& ߿F,mWBJocS, ὠjt&$F Do ّy(Q` BD&r̪powg-崠<cha,]ۺazdmێV (=6i!wXa]9[6 %jXbUUuy;؞ (P."ICk= 9#0I|6#M &5 ^ pu@'IRzp$+'z\M,CO vA0\&eIjtZ'b M4hΑjZ- x@ʈT)(bt]Gs&!8};$ՎKQJ 5RJw0 c+ɸQF)&Si!dзd9f"{c'hAn+٭+viQrԸ[jtJm(~w !Huco69CM($ڮ&DF )1G;XQQxdR%Dy2a`J0Fd`@0I9ES|%c]@˔}Gc#B(4'Ms#Mκ,qtgEQ`麎n1Iβ)/5 Zz{s $IH,sT]O۶OatVddc 6]בeK&KDȊh51 \:KsJ(1Y=2"~Fohi!b}T݁r:glz(_q1RJ?\TzLHey^^vH.C (lL!k[m1j9g9A$ сAyBݵm٥ dYB^H9&IPSZ8}7е=a#ij;Zk@S,f>v.z.h4M)'9`!NJڶc1̩uO#jmdzB賳4m Gj:u]`VMRdZ"I2FM.Gm\?u SsU Q 5B;lDz3_jhJ匧?EzQ޻@ceYs(YS_^A^|#}"ͽ[\zY|4i!o?sn|߂΋[RN܂ݓ>MaOW:^{Y2٬x{}TyQz;9!Nd(x$(up=ǯgx‡>!Ț^97{_;R(gϣ&l_R'~zˮHý7P wϩw> >yw" WL>u^xy{EV'+NODk'Ԃ]U^/\!$oA$orqv7|𛸸XuM:) v@$9"-՜<$Ͽ<o-7^x{J@Ƚ EK_^{wc/B ʈt=P\vw=mˍo$yN#&GdQ캎+<Ɲ_YnH{%IN_~9=g9qȣvZHz'G7^7XQ$)2NǤ( R%:OvrXຖf⌡in^)vm?W_EgIBwz\ꄴ/C)BPdж-rFV(St-!jݖy1AIѸ%PT{c!CMж vPB2-dY1# R(,D+B&B h3$i49TLg3Hȭ J)&y'"/6MG*Mi}ujqێmcҴɄ(Od/$}7$eZ8c:-zm%FApwDt =` {va,m$JH&tM8??'7 iI9öjʰ\̖ o mێӐ\]8?jv{-jn#`cV<8lۑ]LgkfWZ!5ػ<(IvCJAk{.=1ʲkW<%JA5̓a\"b?DV $AKdqC4%M2k몪8;[z >γbJ}T鴤,GL$%>X! %FKMGӵyAYHGDOpяE>Piښ:-6}MQf(9xt^Et:X\DXkw ":&y,@IB) 9;_s~~I<%F?>gqN\^)ɄWZwF]@1*IeC|k8C$sGqD\q.ʲQH@I!"oЊzks6EY4'ID4f)PZAkf dZQFQ5-ÞC3:,-\1X.f8Svh E6~hl2a_UzJ)VMMfR cH2M>)񃥭;0cΎ*Y|FYn5HӔL`C # 6Fȳ ɜ<5l6;Ucwk-bNHj^̗,GSf#޶INXݿ'%YTxF4 M} 8F $d12AO3*=P*$AQrzydyђ,+*C Hc̘\H.p'i:&/(=in|OVWN}ak;t` IDAT>z@oQ$Y|> eYBے% G%#`1;@ Ek~L+ zgyhjDeZz ʑ00l"RN&LfuGBp Y C1Irj$IP( F._lxnc>dsQ-IpqlB&H)ѵ,L ڪ{bTzZ0F3)r,e:5=Bȑ>T]{k( m1Hbyg~`qqqA('M!<`-MMߴihQ!д=Cx$sш(ӂ;3{r)f71>0RR!+3sخ'$4MfsA6ˆ FG$#MS<GuЊGWX!(y:ֆT3Xޣf#3`GQM0' #ggw躎t1ƘD](ΖyJU.P1*-FXk0"#UՂޓf9E:¸R"FaF$54t:e2-H8{Oi0JaLQA<'$/ ^}MssLBܹY//#$t}rLq&,g@M[ǤAjĀ(Riꪥj5\rz8^ZV53.6kRFD9bM~lnt֍uawvdܹsfr5g1)GDߺ`D+5Î4/A<:H !z<#WY.V eBۅ~:'W ]?z|R/&O>v?{ ,˘>ႋ^f=g/~+_-_ =ͽ3f7|BDE{hS׎8>>E=~Jw$I/: {Kkx5y:Oν84rd:e2t[6T6X{3 /~}߁'o^Ǯg/=x1|4xÿ@l5W~Ӭ/:~[su>e: /rve ޸}咡1SvURK|v o޻7}7 EuqK/!%1gLʗy$&[Z%%_B&`9tJqz*gD^lY8""cćH>ʫ7osڣ޼{+ʕc^ui!C`̹\4Wn< (?3|ӟa`Za8kB@I1xQFQg*%y0_,94>54M/Qa>Wqzhnbc@kT 9Z "Gg)YIqBb }O߷dEJ9 ]Ei9c:SY g -aR1NM ùG|6_RUV,+H"˸v*ejPi[ _ʤ, $H?XfGCiM& b&%I24x[Vա F,H4kj,s|W3rƂCrZL5}564&)JWQw-}ukL3a&AE?2R "v =BimCk;Yf_6,+P&GS1lVG\7^|wG~x%'}CF UvCMYdXU¡JbTUu=d,~B#ִucLP~z Y攋ń`>g~h'9WNY̏x7wX %8Rm9=rfB.щQ6Zf8ѵHJPw#&'և-nul68k ~#R`Nw$JX,ȋfZBh)U5XDq.[zJ"bX'U-Xf 4N/p2-FM.Λw9kʲ#Kﴭi\nA^5He㐹|bD)|}G-$:M(bI X9==5`i4XSW=}E/0J&Wbz)=Lh 4agŘ5sI g At w.9$d RB{G0JT%yjX_1Ct$=}SbYtUJ;a\P dqƵ ۷Xk1fJƱ!4RgPJnkv C0_ F@*"aCblYo.F݌~,R!- S-:Mx+.g x?-3g2dzGt$hs#pzݍ8АT[BM;̎ AQ ' E]?ȲYYHyUg#~} ghɳ 38K i1ͰPYkAIfpPdQYl$1jyK"xQP[Q^kdY2v&sHXHСR(5 5ݖvLKNOYZ-Ib{f,a :"2;ܹђS|dS5n\ZJ9N2i'|}哗:viJ0Nv#أ5NJ#,<d4Ձb 08"`ǩQj+V+D"wxfe_5e26bm[iN>`i$!z&a݌e2=FakGt?t}GVDZ] mCߌA<#Z;v9ivw[d-2D`qC 0t$(<z|PX]R#hc.['K\ dEbuDݍ@&h-}P3|'Z3=ap`;;uNHZ$GR`nEI҄j&ȈRcF!x94 %ØfjUӣ/Uok[v=QU"YPr(e'IN?E' ,$زDXiMTs>gW?9Řgӹ]c|>i 2S:Ă>xWZK$ ј,Q5mQתho)9c궧]:xJ)ڪv\)h|vuZYu(#9QPT AgYEQ7݆46abl≠~:'''垺Q%.nqb.)" :-=͆ݾ-UU7 R{0e moYMvج~N1$0Ju ]Ab"TݮYo7TM2) I"ф8mRe#t45dGsrϘM S !$~#QwշoqbAQ\=rvvlLocԎ)+ߠ>W(%u-xqqk7o}");(-1FǼ7D qHc oŧ?կÃO?C%Z)ڛ<|p|5xRi7JO3-}u~su_Mo%F1X<_ihpe8bU.Z6쪊9[y윲']KO{d'H)G_ڷx+or;cmf)f˷{~NmglSQ699*87ޗXR-) hS<_kZ4%_|qoMFC.XYNW>8ʻ2<+{>cE+YwTIǭ[xͷXn|xޓ$1EQ {14Mzg\rD/6O% yjyfcںbG+KQ6B?>?=o~I>BIۖQ#@k"m@g}ы5:2ܿ%վ bCIoZsc ذݚNGx,[lo98W#_pvo"MgAp4MxA׆.PhKjf%JeQ쨆ۦsD3fF9IbaYcT "#h M}`I ChR}pi@h5 ZGa';D1sLH./ZJt2qk ( h1 C"QRRu> \Nm m$F8NXp"4舃Ju >eqqp,Ka2 v{A"f6 J\[ŗcX4(b6O&_"ꖺlhY>% GP - MSL$CIA$%D kTH ?l3F qP gIdLa5888iim7 H: 5/43v(g(eˊ$ LK !'%$Iԙxёfy!MgqvƋϹvZG}ly_/~M)׮4yE&Z'w^,j7jqF5_c+'[XGU&a/Jf=7\OOhɕ(v<8բb)`LTp #zg<{tbSH5垪/S{Vy믇]0Oiƭ[|Ni֋ ?zDQwTub.gy7{.} N—OQD@ tdt/|>#>6ZK,8jZGC"r֫/X6/}ʕ;8(:̦<{۷|( ߽mzk98#/SNO;-& m[4i2?iETEJ zuqHa,kuÇX%2i@ Y9kƢ*(F#GY?|6::]tiXmQu|e(3#(HvG-mעl/%qjoB 3,|2uWNqF ՟/WUY @AOFKY1@DҨA~h3ϦEI{QT$R YI8_-9zqTmȧ3 =m٭7\\(11`~އ;T=JuϙH18͂7_im[r]B%i\QKΟLHes:dyˈc <wڗ:kq!͐w(w  vD` ]&I3C0x<IH+X/}Mt ۶Q#c1"IGI-ao/FZG8߳2E+1kXb^_׳xqzw\zJ -ZLٖMI x L^O˶ضKXEQPEH#E(M(b$a+* QRc'Kb^GTUžiXN IDATz"'X2t-U!D}Q*ϤhE5)JBh-9>>  8o"4Fj4ph-eC*.&N.Z 66ʃu4M9Q@+F*x!HJڲDZR%JJ\"Dȳ&RB81m:Hꌒ(BRObaILd4YqM^=A:_Ҕ_.iB'Ć dY7gcaҚ|4o1Jfe%5i`'`<7DnMo[`%X.AcFq8 9$.2ɟ^eZ)*톃q[]sF!oK޾ÍT%'% u-mPZ#폟η_M4"ׂ+ b>"{|/$e ~(q$MM.*|8Zr)_y s~ŋsnN97џnuԍw@%B?fqzj0=E.ؕ%ۿ}x|ؾ'p޸$e6bn?ul%/~%=4}<~{>绚}}xk޺A<~~NZg|ɧ}OVT\j>{zk׮g򝋊s=یGS?ڬ97,Pxq3n~{|_`'x#*E8c.&mO%쀏| hvQW9vMGf Ȉ^Hz'/N޷{9Rq=6-һpFw>aY~A%O IH_>~tYk4eYWt޼ɍkDQbų'qmfuA]\q9MRe o/2R[%1CS,g<3F\z^|+WoR65łhF6azcEG8Cl-zg<ΙͧL&(J#~m :hr||ӧO9==%Kb\d o(yҶ-sg L)7n@kh}kk"&Z{Hqrtwm-1t}o]Y!Edv$FB#<&yv/Aa-is|GkYxs㓓4Fzkk1jbٰ8?CJh}f<'x%eԚy>"rXrXPջ6%~0X)E }QaLd)`]#P=sp~}HQ# -ZJeg(w/}o⻢g'BXVd ƣQ&af^2F\~-B*a{<:IRexZi K%M3& |~SvQa ɌC%Ʉ+s\J6BK^-Jh31uHʒ,TmvBƂQ>`ґFhAI%z͏pڦa6?^5L6)mAYhi2&A- ɓGilo{͎Hy$&(-y&QBEW1R^{4 ^4 鲞+'+zk, wiq ;t9b-`h[nIL|2&ztx7(Aj*/%BxaCAfXo@kMYV%,0B+ Ն$9#˫0ڭ l•2XqZ&\fDJԿ.(u$pBR5mU>ӊ`k!`yv :RV9YwVHl㬧;L Ay$y6lCJ ] YBjR' RUPyPTEI$ut62е/ h|2A)ڐL96?_;f-QFlw7Nɔꛔg?btuQ~/S>4~FFsy7R\ Gr\]6[owł~C v?O5ܵF#,gS}Ovl?ѓɿ7½=?#+_ܾ}n!ǘW_,͞?8]^g/쀇ڬ淾975Cp!f`B9LdxWxߡ-w|q !~g~jŖ?`Ɲ#<ޓsʶ#4ZY 4gd  ˋ%Rޓ9-5޶wYYW W\gXs55㵛׸nAiь]ϓ2>}J3L8LZ3>%fÝ;wo2'NH`O?ljۓ9W\e2Uh4 {68Xڶƶ ؞81FkFY~g޲x~Ƴϩ6@86쳳3`:LFQ{β~G߱ݬ#IL3&Zkf20[)\oifX+C{$Ϟ= Xml3ÒOkzkO\CsDڐ 8/0Q!e @b"f L&bchnC[nm]4MM[\,!CuPoؗcA{r"4 ̘VIPz ؀렣9㌲LYEǁ5T4MtڀTPa2edYNl6V=j2D`i@K\~\*@0T5uբM%QSlyh 4UP!('MƃYob[ nJ.Rcۂ2X=/E8lU:1F)GG'LS Ia ti[diElBmeཧ+tdhzLvIR"EI @cӄ|4"c>,Epwm7\`7F#ں^ s5e])^Ќ)*s ZnĚA(Eb߼{eZKW$I}p 4;QnOY4mPRYkp>OSL'd :IS8F)M%Q^|]zb oHJN/UF΁::S4uKfR˯TK5$A=uYQ(0:36% `!>prq(J|L\v]ƹUYTK&NRTk{|YI6f3:H;DQMP{ KR$ko1ͧ4nyz^lW2Af2 BܒzZʀA6L"BH!R mkx2͘Ii (7%žkPZDb}y#:C]4c y7]FIp+@'H98ڛ_a|pH:3_ayx)ѣGtMӇDBW4ϟp;LՋ'wCGp1X~!('Z}/𕯽ͣG_ںkW_C)-v귰]@}|ӟ0#ī3%s^;1?<>:B7nM}-2{^\Ͼ\?o6Z5W|y /كg}<Oxذ@S6E脃# stɾu|zų}?)o6\_{ ߻}`_G)G"dwǿ?Cg K_|9w)6]`d>EJWNx씿~bO`zH:l7|<qE?}wq'x%1z誧l[׎x_cl%ER%gB0)W):V_7q#v}vXH'9CZѣGX/]O<#߻ӧOiʂn)l>y~j Ch2P}li4An\/|Vᓔ$.i41<;)TMIV*'gdqFUUԲe<VгDQL'..uCEwm۰˲p}"Ez'΅$28Fޝͮm[f,GFѯ~l ѿJŅb%m*\p!.sOtUP vbyӶ,2AGeBc]DE%0LJ+y$=@^~CeC)u8!MRҴ.A2k{VꐱuEۆklX[ IDAT^axJLgxu=diP뗘 C]W 8$qnG߅̦4I.Vm1Z121];b+y3< 0 }2!?e@i}2wUs~XgI'3U C6Pd(0w`wa6۶!>M9Uҥ4ё<͐cfG c tde`p~d(pF(^ *{Sa]G /Nغڶô K?mFZn [!(ݾ N"Ld]N!c6Bptxi}m\9Wܛږ]n{T_Vr؎!!OA x *'26۱ݦV9uݭf?:~cS~@:~뜹s6])d)UEɩ>P5kI6w; ]$9I *^>/ت1պFk91Q/~*!quמRr7h̲'fe釞{^0liɏF1sb& *BLn^MH$vɤ䦷 Ӑ)b, i=]8vz++qIƑ8E?Rb18;*33*6X+gUb{:a=oon9N,hnm n2v\\\H8؋]e(MizHRZͻU 5lk #;^xs4ݲ]x qfӠ!OsLplssn$.VuY+Tùie~⊤&=Ud9x-q?K8EU6f+' Sf/OKYCTG'1$uMɇl^Ym`}yQV:RS7$m~hZJufP֍B`[B*hS{bGqiw\\ǔo3V]=@JBF@)%FQPhúnW:OQ5)[꺖[Dv/i !d<~ihێίc݉9U_{< ՛\`)/}D/gt77<{WW|gToW=R\=y/?o_UlUx @hWnyW55|7^|x@5;(Ѷa&cz ~WҌxyǼk?=- kF6|>EYbn~&wݏIL;)AoZa>;8u ?Cw@iO~]]lLbz O-?~M<@F ?G<}qŖ ~o c/^2WĂ$V|ַͯ/G3?6lvL݉|{<}qM}Sn?}5n^>G~V~gR/_<f>X?(kq߮+nHt=}34N;|S|MB>C~ ~ɏiOGq4|Gj3v٣Iǟɏ?!EテՆSw*=J!w#=M-cio24{/rY(^PsD1*+ֵHp]R~6Ca)sE+h#S(x|(LQrf/.U 6bX8Oooka]cM7LO zFQBHDmHJSd24~l AO.k./. $ܭA81EQe/USSmJu.;KՙQ.'sb5ȩPyZBATL㉾i̎"͆vzIA#D3BXIF:d_Qq(LKSPSJQ nG]V(/Hk+3v|2X+=eUvO˛sW'%2{L39i;U@3 S񲔵'7b]h sb(1eI>$~k-UUc4OqKJ_֤$D. <S{'={iYkYwſH&O4.㊔ rܼy*ge`312n֠flG)@ ݢ0 z !Ҍ%G&7=+6 @cy{eY֯#X&tӤ%&|]*S޴LɕE)qzMsf:N([NHf\BY4 suΩ5FSbKK$Bm$3\K ^ 9(?ƹeCZ^3Zz#ɔB(,! RT#vm Mi).c˳͆o;:LQ[Rۯpdx+?O-G_[sbw[> ?x~}*k[R&ҧ>o|_W7*֮au5Qˤ[lu>c_3qJ" )UxĂׇi'<~+kJĻ+^~}&i³I)[gT5Q[^޵[sϞOaoKvyyG\}ږ,y/wӀZ?"* 8tJOo>t<2+ʒfJ\^Bds4H?X7 ft%D2&L9”&"4r8O0b2u6td'NMz+cgf|Z9Z,F TͺnrՆ́iI^ʲIJ/@$qyH8,iQ[J]ਡm(qa=akag#)Dꢔ,q~AbufQȳ0!i٤O.]v"P5/F OAV0C 9G߻f"d f1r78JRLHwj)+`CMWg׼WZ)(:TB/^-)JɹlܦNA@wm"8<^rJz8(KAlI8 ժ?IZP *k@$lDj&"QZ6^q:96B<}f#K@9B $IVl*ӗT:!Vx~_3~0F#ĄUpܺLکnq_ͳgU7 {a86}. 00YVf|9{5R;7 eՠ@n: Kʕ9ZjjrhO,jV;<;41O<Ĉ>L1JNw@Ɇ+3B )ž)K1AS)={!_))EE%amxԐ_ESgy{Ew3iQz)#{vEi(Ĭ.g-xI+Ynyc6bLNWIDAT.V> eX9` R$]#FG"U>G N;!CŃ+ 6RBu-=F|Ȫ(Zt$yͭ[Ry@M;*N/ 5KJ,4R,eu)˒vv'E)t2a9M3H9$J݉5FYVfa2^Ԣij)Y}/&s1Q$%6Ņoq;JŐ"Z@+/4Xga[EUYqd䧙)7Ī;襚vz%6 Q 3GbiZXW!>MCh\xp6%땐|vayZ\:z6 u!sNfzFkV 펲Y1#,6Qx&b,sSR7XSRhAPj(* 7ϸl*v֛LnZPɡRNXvhwwwp #dt3EE(% |Nu!"D(m\iĦ-3ҟ"no7(y"u:qX;R*BisgqJۛjECT[ ͘smFFGyPZSUBZۉFьL6ܼ+%a¥LPa'֫ L.P V1ň\uU]bws&|=Ib¨D#/laVk#E>Ć1 #e!A(S!8'v>FQ/eiDohv%U&aeISQq ّB鈵R(BĴ@27gf#Q9UPXnV)H'f'l f$֒b>%BT(e1Y#r=jӈ[wih4'5 Xu-ǬX`^+G/Y xz䭷ZL;ZdC?QWM*-ڸyɚm۞۰*e泦( \^0>}?.Y$CBۂ^alIߏv2GqQ&nt۠ƑS7ȇ(o1 3Wab/o{c6o憧OaM$XUkʺ qE] ť)+BHٱѲY SSVKut"ه ;t-cw)$ 8|R6(8 J#IK+i,lmz&%>V+O_O<7 (㉻;bݵr̈́(1q+ՌC@:+!tGN]R)7VMALa%e. 3M%Z/^xA{:1g_' L{6ۣm[9"C#.I暾ssOc-I3#]2”4$MffJ6k?5͚ϟ'$D̟{:(yabsZ%\SbbUz)S=O>#*JNw.Gm˸=S& y|JT)E*4:%\][!?xvId/-9Rj"JÄ9O׉kv&EE?Nf PE(c!-ZH*@a) q ՊfʢꆡHiЖffaa=}K!fv !<BPFKJЊZx.Z[=ۖ&-{|ܡE8?xKK{4{"y(T%9b^RZS*}<2CMг*8tǖ٫ Ee { ޖ׷tcG?cxpy!7D) l!}fH e IVzCl. uŶP%c?Ҷ̈b&,P(mEA"ʒL?0Dr{kk-v<&Dm-悦(nhQS1,O.KHCn|2f^CI2N}GFRR(m9G4P1F^4ssNm#,%%oBSfOD8ǹ-Y5 :>qXr*cz('P (g&(Gθ\ӔTU6c{oyysMٲ*ָ_r%m' F1Y.c67 z11I!a6,Dx{?v ҉S%c3E O  0ga'bPgrVc }0Di#vCדRÇ!ZKRi11LFg1yePDX7I&qngL˗/6Bb 񊾽;HMc/d?De<2S`"Ü= JXI8#^ff7*Jq 1l)E^ERp.ROl|uuG9H ;OL986|?~.fg40+mRސLbB{f ʴwR98JQT5V5ڈ=QgL.Ԇ!.//dkqzau&͟C rwqfAE,d#>,rgA+">ctb]se>z/~TVH[NUP+bL'|BZl6eMf+ 8ir?9>|fG]79RR٠hiaBf#/_p:P ]k2V䠶uxutL ;(*VJ>NLE=!EECbGzN0</{ IE-A%lh֘B1KJiR!ĜQbZ3=00N#_{yMљ~C<3}W!B򑪩W Lp:ʢƖ%:$R~Ƒ1ZR Ub 5)0e1N#)ONBTҼB Ӏq$_𲶐h* {n .洟s@JΩ)eM<<77h#Q8ɁnܜjKi $z"$aD#0pw<<ۺiXS}*JK4O $o#iw}GJ&W%"1݌Ѡ^\.lT-6NǁSI oхΦ2! 6/B7her૲XB%Xb! -%zt\rsj[>}tsK7&ibF~_e4~PI_ZU1{6~ӿtnF3#w#_^ C*.;M=ϲx/џ?o_e82[hq9-Z)2r%untRɛHJa<{>>l>HT)ك7t;p*j9{,N$B 8 dH$h.~,Z-k!o'}:n_f^v0Tc*N!_+j63 R%vBp*x?D ;Ve^$V%e26O-cCӚmf#BN2*h$ JVJ!b)v.|4EU)6o0FN)F)N!njb6:Nr+Y|-Z"^&NvM2RRr2RbBߍP:D X^+:X8r5|2R)j-Z"s$ N"d5v-:k*p=f*Vb&{@I>Z->YJNo'|7ӖhU5Z51ׄD:f b,R&I$㫁k*JZ#F:VV&6^Sc9j"a%˄UZ-^" N,f!Z q:J(=p/f5C=F!m4i|4f'NBp=:|% f#V)Z&F v8^%Ҏ`1e^+W):%N1>CJ=Q! JZ%N<bKGDH pHYs  ~tIME9 IDATx$ \?n6;JFNa9-AP3]rw 9Y{.ԸdgSġtr !9o218_SR~.(O!H<-I]`dB4ƬUXpY==YI2 Zۈ+VcEu/ gX ;/\<5WUAmm-9.8N{ȑ#{GEw8lclvs%hz~ӏ\d]2O _ڱcGݻg(`'ND0%JP릻΀G/J*S{Zp$hŨ4 F{ϔ)i(d K: X?|%uͪ\eYFǎXC66=v4݈ BBۻƙ™ŪBMNݼyFv>u?x(lfcۍ2e@ԕ FM}6`gXO Cv@TF}Ow{L833,J]  M& 2l|CqǏK:cg"۟=?u?W}jenl"9rA@#7tvh#Go{{32cKF6t=Bp3.IM]/>q7&S}}$X_=Uu È)qL68Y,Nc"w0i11`޹;W-IoY-yLe c~ cH׍3\ 5"#Ď}YDr=R׾%7YY3Fq jG٘YY~}_޺y?_~֚š?>Ty&*N|\.>E."Ay-_z̙|iǀd >I'$$( yϥO ~wC~-) >3=KNNNy.Է bmfiǙCΔ$܉KsX`?V".1!LKJKb& l{ԔL]#8;ONbe,) Q.ci`Uٌ5+nj+Ii"کo=ؾcgͼ{ӧ>z>~޼^/ eqFnbD1egx#GGl#G{L/%b<+ףGy<|p|݄i-|$LK4D |tFU$qmr)',<"yQxD0`,)&^XQMMvYvXՋ#iσEҧPKCeSDj\Y9B`]"A7N {p >TWEyjO̱j`_RS}њNdDQ˒쌺6U G:k)K }w`a1)9N,L6 ,q:5*.IHݱ dյM!IIئ6ɑ7{ .0i 06VŤW9@e %;N > #D2!:! 䇂hRYTa22Ⱥ ‹nڵƮ[Ǻܷo_dU5l (L-*ݯa( 걅2501rӏ?/50b 43TkPL@.n`w޹'١r ATZ3 Gqy?.9M!ے d:3d5L 0\ZZRM ,#EWM\7DzabQ Δ\0^Gf7D Wfܬ^WyV^XSSVVS3?5VjLMu( `XLvr-G{6Z.-͎ͥ0A8E9Igb|WAAaHaZX&dJ '=)_gHx dV,n!h5~`S[]:Dǃe`=4_.K*,* %v& Wm,L/X5݋|@x0keG#@ ĺan_WW=aJ WUW?9ƪf?Ii2nk*_6-KvC/"wMLp+O wC'`&AM|m@ -1) !FfA;pNNiV-)F/Ð$e򐦦HOyQ2ȕY".~dJvb x,ĶHҋ#F=big9} wnrYfcmׯmA\u׋'XS4ZyZkUݸM\4A{Ȉ˝P=FSH (ýۃ B{7: 1148 XQ uF3X w5ungۇ`ށ{c~ee['HYcpEUsUs3ffuYc,+#A+Lnfid6 Z6slX#s;(_br1hbCDKTwdiSIF.A+gawK.J ҵԅ$?;hS(2j_L4Y0^(>ߏ55ǪoUQӋjZkjb"(T6 +!8/j!hm."ڨP@sg7kaR.ZWv ZSՉ%[[ܬ5΢C֧W} ?.pׄ䚘Lx(ePnAeNQ>+׊3A/IҰtr(;\{1|^D;ðl DʶJ+..V|rnf^t? i}i0L&oi 'V4E^T(A dDݥ\<^ B2Ib`PwP;ЛZս{l%a<ѪHdAܠALnrrh=.gh2u۞GW9ʈŢ#NJCW=eYXhc*\t@@[A'4e6cH\b\+*VCeQEUMj\4dj[2Q "=}>*zf/B4H S;ԬM2`Ɏ`Ąf&B,R%MΔ'  cʯj5A`'wWwgn"hdR۩1%jF6ڮڴH}Wt+}: @PP$ѥ㦾}ih C$2G<0Ġo1z:- .FdYńxdyyE$m\呥R:Zcwl+,/ӯwzAuLa!(V3lIE0Ldh Ͳ:rh>pel7v/.n+,k&e.ؔJj\[ԁkyЏk Q [5L&JL?!vwŒʈ4P(.0`F|(Uq0\LV!ْ  q3QrS iy?"7nk,I 哝'){0BU&Gc۷>wfjrH[g2(f')t㉉l, Km=W#G="ֶ cWډ4550Un/[HݢAȄt=~ w}]_ч*yl 0].-Q*/#z ?#? #aπ @NHxtwBm ^]bىؖ{|Mj(~wH YX~?׬|6 _ :}sN:F~U#NxvGdHxO\sIt``VD@|?8ՌUiڮ%S~tǔ>OFи<3/*@ @%$|q' G #=.<ԠV 6R.x;$կ{EKЋ&N{9MR ~T8#|5zs;O9rdݧu_=`IEn-`YBBVG{Nokm6 D΍~b>>>U{復[ V7 DLޠ(ZǑ&3@{< oDZ:XD@qwď$I)PΒffa D gZK/ٳ %FVhH*r8q\}xzxz |۫}gnΏ^|=3suf,LG&+ٰZfl eߝ/_4k9NX534{Ebjֆ5^g!my@KGeKiݻL!E.&Q Oڎ3΀H1 8%Y&u -J9OXYݧ?EVãszU>/7o:rwyzW~EJqJ @0*4Mdcl^}@S/|yfA"EB]Tjܬ) u.#So~=_rW0wMA@@kM3N>LN0e&x|ЙGq*-ӑr\XGD<2IO`6L&@Xi,^qЅs?dVT;rsFt1vY+T6&D-jHāYlb$`G?ͦB{r[ `Ը\e57[K{]NF68hdͣ}l=>NLmdoCc.׀,q$e f"npWf_3i}* $,VYOLjvhH\Zt3$q?lz}L2Vilt0]jQؼ\q}GvWuXLa 4X2fd2"D䠯jlGFp~8?xzxw\XzH%aBYݔ\ CH_kl(MwM/H}L)(2# y4(E-Lw Պ3TwUT@)9Yńb8eÿݙ چφb$Xޚl</a"JMD(1VO?} 'CBas| 5՘CzKjy\ m0h7ůƛQ=^Z2嚙Ai̠,&ef1'Ltv `;=ɓ'OTb ]f4蒿o;J` ?n/f㱀ԇ t7W۾yS_~[ѧO"E:GǛ ?(^^7)=}M'T*S D"@쿝P^;7rReDhr޾wrMZFz"L|D"с(&bLL()IH2RbY-IJ}Яxκ7ϑHb4H}=  ?y׭[ѻ^F?غ}qN ~|\eƚT66R:2"`?y9S_9] m{YFvЅ_.Օ_opggLw  [uMΞ嚘k6!"@7ׁ'shA#Rc>^l"*`0]/Mhd~?1ȭ?;_xkw`C3e" UEB7{O6+sC=^I;(Dr{:? pLq0k IDAT(AV 4hDõNNf*n-'9x_"M(xӇ%F滑ͳ%ɦ4,1, >k4Xr[&(g$XF?9퟾uvn|p0ŋ!X%hlB3*^9a9|雿reQHDqR|iNKRt5I5,iQ >5~u^QY AgZF3ɠ1`OH¹Ӈoyrڍ6'>/y<08^\+!y1]iUjGrIBʵ0ٙ L:Am`s*XTʆ16 0Qhqp?On޿֭}c׮oPϖ1d v׷[VvEϟqO-f;*EB:k̎Z.Q,պLd_Q ȧq"R E$fml HSj;qj;[؈d-vVɖ)jgiLb .E ʡhl-y= LRLZd樸y(W{Ő cء*a ,X;cW$?FC5Gav}?|V/~ nְWWq % '9E3>5x|@Hj/1JNuT_ Smv{zr|\J+{:.+>XH5,`ll5A,vFqX+ (0^@L1͙0 . _KvNK|qHYdd\ ;hܯ^^LUc:Ͽں>6]oοk/\BK. xzqt)J9ossܡ]܁R!i""/ @*yQOF]1X6P//7^:E&-+{;o%e@1Y@d.: еKx*(($Px/P",wɻ㤙@4wV$Oт2LJ+9YeVRl幉6ZPAZZ ]džd5=[v}mtqz׮][,]9y/y6pN\F0D fT{SА=։ly<|D@ )UOm2^ە:XXC--brM)cȬBvQ$hIMДVj$49R"xͦ\) Ơ̳ӳiiHdm|CPX.M .J|xl`$&IôDPpXcjsӏ`SExya,bdaFLCDpCk<ƣlDN6@RxNHhii o\pO%X\u*BP %M^X%x 4n&Au(u6U`ڡ., ʎiQ" ܮ0RXzN;"&a ⴴุR`&o $sV]^ ?ىDq}B:hzzx:72ԎnYaAmr4'l[w}H0ޢ#*y9E ]nuɣt[k-0~Zvmyyml3JWQ`Jz4Jc鴚,}]̴le62c&n -4}˓GUܝo׺[f$DM NԍWAV+~pZmqX־^gr/>JǗ sˈ]YtMh!ކp@ 4tKơ9 {noW9cp h{y^GF۝pq 2i,ge@fl!1ed( \-inl~PZ#'0@ P8;/:#`21["og`nS3,]3ӑ_wtӦ, fXuP/=I_OYt2"@o8U C*03EAbx٫B:+ +5]ٽc-l;6kQ5zj,6P ;Bb\k6#ޮÇ4uFDq$ 0}jYSn +pPk D V~ YaC*[Eq^Z O?~p@X t^jBLH nXb:iv"Rȉ!!Y'~4M_tE޲|OAW_,[XCk*ttJ:TBXKB.F#Zvcfkf&f:t@|\IC<ݬE1q;j~ tuovv֘A2dUl{,/ChbT A Ax^IM;m>̐S ''{pakorp1htK.*/B6zuMW<lKv^oV + zZң'afa': W{N:-Rċ͙ĪEt`- Ӂk@HWs. (m[(z}#%C[svWG&UUE7߿`}D`nq z$y[A3jIǍEBlob@pn8L)@|?b  +rm6ejV:ff^ܡ ~TbLr$lg'DL# ggQ1BQ[  +fvMta*e/ɰ^an&:/(ϋ=Ȗb/}3 .FYLu8޽1 *z~g_ȟ왨%f qg9>1aO> "B, QH7DB Zlҥ=qxl][0#Q;ɾ+}h0c|ۂAfhۍs3IryiV2= Vf\ Q% M?mUXyQ{2|'B,<`?C/! lYQVUЋ ģO?>}IsA$D0oCN"qa'$93`0gvbexܔf[ c_)4"4єHwJEC۸%fs|6:&.dTZ<*Eu&%E5-Q]gKaBBjh4l-zU1??dO_7O^wb0>t`duq߶/+X<:G6<]N dݿ?Y 5D@&Gۡ `E<,i қS@C&.5X=tvm k@PI=;l!m R۹8kF8&t|&qPI^ә1h](jvY>gdC^r?aϪ oעBxآE*u' Gn$둢EUREJ鶈9|C$ai Q Hb8!n"BLIbt <6;"+ua˫:|Pп?*9^ p"_'-9Ґ&ŋI++{r'W]zW G鬈VZ,Cn2k3/ zD,mrȕ`l0۲ӫQyׯ. hW9ٻgMr"WR$+`EN>Ba0١{U)$`̈]YW&-0d zuO{/u7>^\p n$'WQ?T~2K牐U:K譊EO/Ak۫$0lnb ;{F'm/ڲᲱWvt-oБxDPqI "!"'isr1@4N(@>+_j֦QckϻcdO D p DNɚ~>w Tdo"D$ 6-2 }'|IJzc=tBRG(cO/_F1h4[:zI,sV}ىJ0;!cĿ%o:11{p)^<^Be,iq֕pnҒ)' E3d̓400Ëݹ+5vpMhcH Ą@-`OI z@"̂9adAG'7 DjF:O|JI2NrbAo0[ahEHEE)}›\;^´"#;r'~DA rw*]<{p3w,X?_ dopɳG3nL&3G6Z:E=z!ԙ21"'a\1J|U2*Жg@;'sS2A^*(,4hljt:Xlk乥=|:{;ɣ -)߆tv: \0 H kd0rDBǤD - "SJ*qeSdo_tiwz @ &Sm( :'8x\ ڐcHh94q b7QH Dǀzt~+.kD* [j 2&{&Lb"TzҰモ 컓 !)\Y@$bJR?"–тp)4wfb@&3A7%Do}G0{funm<+4& a T0_Θ=LC75!@ lf8x}+"fIB<77 %k}YPB!f4Z0& IDATw|XW j{؂1^aX!oĄ(W>^| 7OzR: N`p ,XD{Bz2nri^ P:(&#*!%XuM#*h̕>칿RӚZvlNI࿯qucv>zj)SZ3hLJϖ76YX< y AK3.I}7KnM.Qf2wChhY VƆl6,[dc@$6Z=,O_Ε 6mJ~Z CDbq>VCG}ªOoL<% H= ]`=YU~Sf33h;Z޸gOSdg?*tٛi4 %(>C/fe XH >H]IΖ()nnV]H$5K9d}12+AMVj(^P5ln9dAv NyKL3 aPѣ)925"ss[666< TKaZct Bc͓3Ʌ_| A8˜G9-=0͘nwj8EpV:J;옭~:˳# { N5A*c]"LE>  ،)tK@?U/CY Z<=['Z2'FڐJ0lhAhdmܬ2 W\fid8Т O # k>[*s2̊Q[aHX,&ݜKcns-3bBšGk vPz&Vj}Q"/$JAKH|`fl &r9)},Pj?5bibHq᤬k[.dƶ!ZszA#1in=]mh(Vi)Z-|Hj68/ºBCB^>2B(r麰DK& lpJBX\RcFѹzlq1! "@Uƪ^,. jsKZT[xgmA5QF #De[dTa@6nHc,Vm@ȴcttLgC8D0FAдߴGe ?,n%4D린(4tBQhы50(V̑EyK6F<-;~{`>|D .gZd2Hs<הڶq r͛uĵx Vˁ-WbS,~0*s33]@dYuH x6"B2+a 2bnFR Zzd⻯"Q|f6%ɥz}|h8\,Y[d{Q: ͝w͋.]hdc*ēK7چ%p \~=?==4O9z91=::#E§ǵMGJsC`kKQƽiaq*33D|J|HZg̡LBUxb@`A:ˀPY9c2Bm>XB&0|/;%p&dM1v5N4^6fgVt]ຸF܌q}P-7am'foHg&+␄"NmsB}OBΏ;0%2Gw=a;;حx()=/zr5ڬJm@fD*Up Tyj+dYL$@U(PTdb"m D7.3IL KL!p֎|.>˂-+fƚ|}i8:VJM+k>ݥ@Ѣ|6zAcX ϯOa~ϝE0/:<" ."6G7i>x7ϞŁ 8`d;kd|VVd$gŖ#cqr5㸬,E2chyh |jr8e эG'N(uUuUU@#"D>~C,{ژZq-BBUx! s'M-s=ܜ!E HOzo~㳯m{#ANINx|S-g }s35VOJΈh载?D̴ nyW+M#k\(dR;L,uk| SM(0% ܾgBDFҹ9R~}4\vm\gEjXEGWcOjD~]h,+r x}kl61 6Hǚd2 G'\ #X!3>&lWo449J^_Ppj͆3)B.k>G;GE9 ySͺQq%`!b/dRL](ZzOm0_?8&OsAx|2jȜ&̮%8YW5W,WiqV`a->R QFu:a`"pp.gf|gMR٬Sw2+-6qBaV M k`/teTR&kUYoZ_]Z/)6cYbD0Yv'AP`HtbBdPH`Bx̅ƌ_N?|QуgkxBy9>(OxwAm&iyc03i_gVH4I{q_Uk]`ug^'fE1l4&nDZeQ8ò [3r I-I@x.^/$8T ȧ̮4߂覙0B|">CCR jmw{+TU7yAJ7PL*o9`,,M'g =? #LqyG2A_]d&| fSqqZ=~PpbXu=9b4_]}?+rdɦc l:*>zW}z"4^?mO:(&/2 g{~gReo`9@z|qیOu:p;<Nv>߿u`3>dIuh@g1񎾥.YX&IHYg| FRhhAWEXv]I@ۮ߼?\6T聢"=={ǫH&qd-~(]kWZ IguL>ZzeD73=cFƪ\*/ fRWq-Hc>ef93 6E°;w{ l6?%q 2TtY6ɓ2$?C1/Ȏ B2'J&#`o'mm2AE`Ê}iVVK{_`Г^U51+$ Ry@#W v|OdlБ;UJe(kvMMT&_:6#U|,L2ReA%*j5-Ky@84;8Xvuݍg_{nlW0zq|ѯJbq]7}823zjO l1!$قG',TW* m[}޼,}bð1ʕ̕7x`l$Tk:PAJ*(;d"TEid)1"acxkwKŨՑ*2`hh@IOgWWճ&3t-zwAsq$LF|lPL]3.>J x&Zof/:% #\@9$𵲖 Q8>阵XP:ȭin%: 0!]￁>:aR!(X{{N@R.D -@mi)D(PjχPA|cs@-(X]%hF3*!mn~7hȁ?{6?322NIQVH/a๯#U(*&u-U;`8Fx\NDQt}bP0|*T}G6|b1>R{9q S,,ܑ-$Q-(w { IaQMmtؠ EYk|GIC ʬ,eJYo>N`vIz|U NB0AhBۚn.V0'L&zP"[||#AA|E1Xl{8[[0Ɓ jJ֞2]a}yw= V'c"-6 `WU?ʄ4 >2W4l2tedibb0&$M Es(k8N _ r\qˌ3?=##ss?A _Ht܅qՠK39бE@ )mS L@ o 8pq#CZ[5ݱ-{xa+{6M| #~#><6-6-%*Fu<"`2@ᬉ16T &clEK4z]]ܝ]惓GT CW/SSw+*Fvm{ sb֚Ftmꫝ(Ih1OyBיs`)&>,tԽjEj+[?ێa='먺:hRǤ#UPkbR[%' H OA+.lƻf°a61 @dxāKtD:\aCJ+J%&*˺8t8mmVG;$mIOu c~m%_Q!aǯy{y9[ e>:GVqp`}NǏw<fe;a`E"XX;}ah,4&gk/&k|GG<'{:zR'G&C9sLxhnW(Hh8 `<2[AڠJ:gw)8:T8grs)"]B__{* 5w:töVX;fa2eD^?< i&֌en G##A_}շqqA .ABJmH,ɹ{p& &&֕O߬{!dBu3/WV,$6OzzdYcɎB&rː=: eUL ll:i4<æ1mO7TbuMo~֮iK .ِ]BF"ΤwcmFBx&U6Iv~|s~Pw36PsڹcΝ;~;?3/$& jXLeeII˃G^K[|MI18JE𖍮Lu@ LP+r9WpuD$U!2D-]6 u[ :ncc  &6hK6{Stm'\j(5I]J41f]] ӡ]wC#]:b(#NN<['7 mg~qP!p< +)gRlo~o_8m7m@%krDWAQ-ٮV(7^2Wd;=8H%Y-B0覊it @#DCH~&b:@:i$ytIKKNހ 9Ǧ߿xARLtML Bx`p7"!阐Iΰ4a96ߵ˯?ԏ?4"䓛k~!q@o{}dX"?LT}}^Mipͼ=[ ;!`pxl<2aTS:u65JE"'ДHDkD,|\ ssl3{%p$92 $VgVDԚaBqo.qz`NLrL@6>2s>zWSv9F8.lFW ӝ/-`74R݅P[[GC"ᆆW-n5XG w$UpY*}HAs D",(V^l)K)h]dH(LK%:v)wc&pA*?8.W*idzҖ: W.PF5 I rn23~p1kE @mak&z@! Lp֘S ~pvqק;(YOH{xgصUD܉MDD@0V/N'*\Ӛu@$Q hi<[W-e7DhV练 >"4Z4 ȗJBP\>=wd1Imܶ܂8YXam̄ %/"F7uǶޣuR fgnD"L6>rSP! +w*L:|{ЩWl.͉AT76nQY`Mj\ ̺pT"}D!@ 2tK~#cW IDAT#}>UGlVirABSSmUH4aϜ_]]mlܻE#TUpx˙QS뚼ۑg`Mf AA4؄ubux@zjTyЩ0=1b&7&}l"s:ۇ$ޠ3L+ # 1C40qNVX L Fk<=mЕJ9}k itWf`'O'x| Yrɰ)5t̼J]]32'&4 ;͌Mҧ|ؾ6r[Wۙ<>"vv3[ ܑ7۝#? va;S3QQ ^NrZ}e [ 7 irFMS5)c2)Q(Iӝl"clOt *І|ڥ̚Ud4f\~Pi˅_IJmv-MTp1`v_+F"ZXq4}}.gac52rpku>̋G ܊.Nӊ}>]v 3~|o|/h MF7`w"e)|TXL$*XlCRBr?rߴ2ThHՌ܌˯_nD]U)k㡓XvlAJR =ɈsssW,8j4oc%MJdNϪ, <ܚOpΟNCÊ W*_XuP%WwRt<f~XoIɼ[[1DC5l=9z]`'(VEYK KM9/ Q!M+w"-e,}r¹'Oƣpm㩤ը(YHn~3/L&+ ] c2D\˫Qrr}p D4a &=阳0V~Neee::w*(8 Q E3(Vy!Ʀ;QzbϞn}["̃ol5z(ZYYٳU7QEڙLka0|C<5[\HBM^%e].g\LmΤN/VʵlZM}U[s A rb{ ݙvL&{zr(HU`w鞞0:8s-޹6/b +gjٶ%\S\ Jl@2>ÕR Q54Y]*])) _GaxP!H6F7jKVߦvԩ6.=9jݫƜ9\lFb:|V693b"QI9f"ڮ_\M&TFW-B5RDRO[Py}!ps+5$8=k|f+l~{6vzQߔ;f m,Co6 27ɺ2Złi,䰲H@@hh. DdX>q)a&pfE&œW*sk/=? dAnۓg>J[qĤߟ%p7ݸw#GeUp?2<<2\Rp5neQD<_? w!\0=An(XyxTZN̞LZZSʡ7%ѕI wE|+iX݋Newţ MftR**;N53MDBZ=o 7zt"~#$Pj[syh1c2\6CAnn>NliWrJII?`BDy#TNvi\@Ra7amz\LarSiijB55e9.\q.KK|ݧ/w(mY)_s IKk63ʽz,grFhi?:)(_6_0el@`˗zAL`S.s^hjnN& X d2l&Z%˗uF!ߦʚ=VE%4D߸N'+ XaG/C3 |Sg&C1]voD:F&:2]7Al 8zo۷oCGo4޷8߹ɰcFȏs'}1C 0)HwINHU_{ܳˁˑH//q;=:r9)o,(cy-@"ؘ \﷎_nh?x1S{i`].K6JJnТ:-QplOȈV_($b鴚o5m\"Wܟ>qҽ{*v)'99tl)}O,,܌9{.n@ё?IST.{FWFAʑ8.YgZE[Z&ZZZl7#$%%W; u*+wG4lhn4EcQLy{f7EXI752 5&`߶CHr85JGclbHRΒ䩤ivedr}r]: g~wv=8c3oR]]].B %eYRFÑl VNeHWʑA{{zԂAimwbŵ!Ik@LkX|Ҙ489XWh)Qłu9U&߈|@fQ9Ewhf0DWKiΦ'iQJ%FIũD`9k` pӾ`>z|>I,H_;qfqM߹sՕjre@?\3'np؜#@Z~t"XF~iw%l jJ5ݾG̴kL7fKk?Dp٨2 3:&*8V%ep[NQ7C՞)ġڋF%7T܌S'w=HRc6!2lQ]YkX\' +-|47}'3?_}mn޵םVVV!P TIOܵzY7@"|8{ܨ  Z[z\Hx x)Upҕr;Ovpǿj&75ȤVWi$ŋQ8tX׭eF#i`7LWjd v|/Wԃ2N T-hb$Bg^,H9Hn߾ >O+S7{G>3;0jAʣ#ݶџY/@̕ϩ*x߻Ư> w=Lx{g cc1wJ詪͏B8 v@G> aV+`p ѾCV'<яQy|?ϳբK m^tQ;\ZoWKE͞omµTSRp_L.O_=RUܻ*FGee)YU],N1Rr6 `6qk$y奣?6`ãGo~G,f[،ܑVɹ ȼ3P=|fr 3_ewwϺ?!a=Θ]Rgj{{G{~y,yVWChFې颕^uP{|J)ڄz-&(H\'OhOIkz5ɴENշoWWW|;(u>QKϏ?r/W>Oj2Ήsx@m|F~8~C#>wJ] ]́yz02|}eᰇl:P?ƢZxmnu/7O|#`{ϭ;ڇAxx<()*x}~OW䒫p7oji67{pnz2k͔Mgotp5w=&=Xzz~ͺ]P{%Ҫrq6жm'?dO#|H?X~8>>N ||zϹN\*z G7~߼ Ν! /n "wn#ýqCpӓG d #2 / Hd}w`|b ӗlWSR%6n,o]wU%AReȆF OVM{~r6m.'6Ƿ?4{4]ލC މO|7КEol`Cﭲ.fyせ{O ݐm-@<$ǻK݃-@ނpJr%38n^rxl9D[6&,]Nn_o|YƧGnbm*3C9tCG/Vv6qJe'\G/4 y{vZMGOn{mIv >@(m_KCOo 4 2lpU$ڋi:HK?ux/ t8\Fn~妅 7  8Hp'T8\ no1l?QKtO4z@j0& ϧ}h=*Z9=ơWΑ1 P|``mHcWǟT8K䦂=U` m;}СC8OfF=77vWˑ@ZElp]NGgs$u =(%=w"HBE[< Ā߳ſ%߳CF:*qK{"@dm5>)Q"+9zmFʠBXPn$Y$6ɴە?>y(wjT-qnTs}l;tG hs>2$'?h%e* ".BÖn tCYի~,oldۣ^n#A =oAkvGk`f 4oy\7`첑J576š&٫]NS$kE"Fq)`8_"\CI:ݴM,{KrOʵ[>e`==vߡGF獍$zHYL،Pu_VY54X5lrDd`Xeu5Fg@fPE•2΄ǝ=oV4I/\] 6-Z,xS 5j۵%@'$9<Ƅ`0B=?y}hȗvsi*N8kY@Ϸ| +TTY)Q\x$LҴ  [#t Go@Y]6ؼ7D/3cc,10}AB;/iIJhdN{hr+ѐN5R-S֣SDjQJtI0xk{QA/9J_bJF*W?D, =ܔSDgL7qwB߶ܓW_sf6Q@]e5h/٘sy}\ U >h @n7"v2{?V$>L%rgx=hL*O480إ 8nqqh}&)N d$7bW8) Z_=[-X] Piزa6.Zm; Mv-`0Lph%l>w IDATۗ~إcCQfeUX,Ŭd-mM&@1>L{V@ {.#A|+@ۇ "ޙ/{^xh8Z5ǚ`?z\Nq/f}>ڭ7ܽ}}\8W+"p~6&WIjy0>>a(D} pH'ma'тi?C) p ~w1Lө. @ >Dtɚ0,&V%_^=i@ ?|%<H~vq9 ZZ`vy|4_tYYε,{.҆X[7-2M97Dj44NSS奌 \BF:q :KZWrI+":Lhi8ӧ9sm$ p X%|CYfo;Ѣ4Wp$zq}zrf&R] @_ X[4`B @{=Z'vv|E Ir:i ]JNPkD4a].Eυ<L.%ЁHH Yt&E5uCXl2-~0۶?o hw( wg-U`ڥ!*,3AFJvg5I**Mr d!~B#\AQ2 Ԣ$@ }e Ã=x[\ۿ/;no6V,s# ( cipok4tQ2>]>wŅ? |K kltj#@3%@R H":j96RS}ݟ|t:qu[}`OW ꬋCoHm E%5[?'үY]N4uHq}W&Th$"*DdCU#`"?@xWapg@=Q]}6YR5.R'sS:Hdzԭ[> NHlH}5]5L7-Z3> 4ʂMwj#ކD=cŲMөϜ7Ks68 :W Pb!3ySz(W%ͮ`2)ث:&ߞ@Ax,z \U`ozUbܑpEUw{ok;ŞN ѻy?E[-= \,U2=$EБ4]6KiiKkdS˕a&B[`[٣{Vqr4iVmr._=O}͂'hqꋋfYRho}iӒ{lZ@p О&Bƕ( :z)?BeeD\C;s-9ǎW^ZiȮI)IWU$XSW> t$lce Cl05XHp)W4C:9`m5m!b28*'>BSLPCAGkM7n,e*nX04T0Yފ5 $h1zoN`eeoۚ5fc@+(l/kDb /z*Gj$O@DE)==!c !%ęF AzA`^O3IÀ\qJ\!;po`|!OVS(3e(Xɯ^.,k+)QJ79?+ۧ-A<4M-r1tF?{s>z^[閅e YV]66qq ]ځ*83sy).M~uP, Ep%)i;jM$bw YJǀ nb޹jWxQ{/DTTx5}~cGFyX 71rKJs ]YYEsrȜ䅲W/߶ꩩ @7Qd?HE-*ZXx=v pg/9V . (3^o$/B{JM0x780i$tw 11HĄ뭭}&F:b;6yX*r")g򹹂!^?\bױ$tXǍʮnS -\irw29gtDyxLE-[ P)=&u׽.;-[=:FyrYrr2:sl+|_;Ǖ]JI({<Ç!<挌z==6$m<΁A$[ȥuO[=+e &9'7I5^(apԽdk\Tr_pق97^&'jԔ}+s6c*]T @{[3& &EN!BݐpiCKˁ@%XZw&j b(cx"%b\+_UXv43B|wyyv֬׋`%Q))OkG6hrٖ6~G'O=r7~i<(jM#Mg쓴Jv__W 2Mu A7:^\kgJ?Wvٌ$dq``E7gP#ZPW#j!I@~nLS[8o[b Z?~|}ok+BAy{ֿjCw0GO+o0;3,%OXCRMZ#Hemן6~yƲ7^ϮzF)Z*2`ATKmfns6=[X菵K0A`_Sh֯/,H UZg~e;vѦgta I{rAIaɉt.<$?~iT$"J'JJ$jRҁA*ZH^PAD,b9- %'qу Iѭ{?=ᇩ"w$r rQԪՄQUጌYXߣT;h\VOHXG keyYby~/_֬H~iS.vG &:nӍp`%k$Kuԉ3\^Yș! `g'm΁{ hA p ,|j0x )0 KˍX1W7+OO&ɘߴ Xĉ bˁ mfP=fTd\ҷ uOZ L@$===%YsT*ygzpJnM~ï?5 q@$jҖ1>C@ҏHdEDbY8zG%|sdwN\n򖳯ֲ7 t #b BCQ3^{}#72Y˗O]*5 `AY?f lxg+A[<>Y"XZZD%jj%ӊPxb$͓*Bxyyy?~jFܵDUhxcʍ|b W3իT *1zKOz{ϼ(~;}6?}qw嗛n}% 䐙B#,y_ѡ͹㷮pܟݷљGFCpYŋ$ r1@ 3l]),|pKğ"{VȨ)v6௢w@>yT36!U̓bG^%1!dC" m1mW@Qnp1obэ(QSA~ W|=b:,`Yߟ*违d٢o޹ug-{`o|q絝@(ش` 0E1B%E$2[svM|?CQQ>iɯNmjȫW~ _)OzkKfmbZ-(D»"-@k˂i5:LT(D .ߋa3 xAOWoq0_o_L1ڮnvm尳ٲ>Ͽ|箝ڒc6Ht\3MeK,٠uG?Y ew ˍ9uvV ·5,F;>N`o0DE \oRo` N(&Sd45AjE0855z8Bq!LS``\mA5?|GbLVԻ;:b 湡_?sk߼n΍ʶ,ϔ'c宅#?FtBCǥcd2Lk|_]쮰uEPYpJTU=UݳH/6^^3.V\ è4!Xd3 0#KK0WHr8ES%P`MlND577ĉ0{~7܍v)Pr̪ƖGG T8,!0@*gA0&Lҥ*DY0M$ED*"J"Ed ,lMO[i4AG6_wƾj{֙Oznf>Z*+ۼs֭Wex 5CBRVj4 ̰b/ uB:3@NQӇccc D2\ԗ2#,%RTjXֈ+"a{|,Y #|*qe4E%7K@ ([@!>HP,ĄE(yi --H-p j~|60 KNcp>_7oݹ]׮]+۹gۃ9 AЁ(3.&bkOKD/g6WVu2_NUu͎R)Ur{k}ܰ_S{rDdlR5Ie)~60ڍW*BQQ;˂{PRBb~ וP(QB >E Z9Jd4n\{vv6Cvo3ofG487~ի{usQKMv`v|=;e|Ye~pPeeQS!89a =Ĝ8ss)? Ȧ22R'/=eɭS ;b: X[ɰsJ媚oqeB iΛ@}i Q (BB( 0).yhM4h+}\/Brh~z^Wbm* 5g}D֫W.s kO׶dg0:M 3\k' WTxX4?AЃάI"^Av9US5`#W`aQE(థ"VN)mU6AJ;#es% Z+IXDhA Pb"H` E|IBU~:mx&TB!֋6ܒ4{>A/=w^׮zp- כAA7䡔uaesb{ln"={VFFu1@@(UEF.x+ ٮWdWUfrREc~a,Db^("ҴzvU L(ow XXyS).$@@IhEbbI {S 'S^;>WW vvTwӢHo wgms絭oݹT_|C` 2vN8uh`J ZݙMMbfz>M, IP;Bs_>{ͰWW3^ҋonkjK4]ůbU0k-" `B؆7WVU)ݫʵpjxaϚ,91tzuiiiG[`H#X)U\1zxtm3ylU!ԗ_^9wJM_܌T) S!JtށA]'DEE|xuH:sdD`@ ̛~z:P09 (<,'1Y;*%kS~>9'N?"ٸq]yڗ@L'TWUkf9}22b0K45nj0&G0`ҎdR':ӻF8m7g9Z(g~w}S0jVWO+$'%/Nҥ D  e2ݩmFD ˚_lOǻHP;_OZb &YWҬ_VǏzrr&n++7v>es%+%6VIl+\ׁ@> `  Qd"OitY:7^yɓg:-2fL6g;SS~ 9v뀣SWalp{(ѭF'mxU(&s \X&Ih%zyDf;=$m.@2F+,ֽ{w*̑"ÐK`2( ㊩ Ge;eFپPd}}}4rDuBf`f_ u0h> xU-41ns3!2lW&c./m?st3ϜK=0le}qF=\5VS+30CDDB>>'`UIxD$-* -X^EbS U6ъֽ׿&Ϛ/rfyhaU6~/~T踱iԡ>.7tf-7#I$x~]hd9"՜{$A[ϵIt.V4}t˗Gcctp>gfzۢUޚ܎!w10Iޤjsٕ ^k6%R@d`Efmt ;e293DGb(Hzw}Y$TJT{U =f=K p\++}}]3e6-?=}_g'PE^P0|tdJJT, rdtI)6ڹ܎@`w뜴ӷ_>/oH\՗\>7 P cu۹U +u<?dDu_^՟{jVW`kiJ? W3B?၁թb/ [RTcB2yJT " :a랧Z-J1)&3d6v7=Lhd)JQ|˦4Ϟ[r+a8@Vz͏\[ز.n_({ N4)Mg`ǦaX6ptA7  I6JI+TcuDF#' AEG:'UXۙF6PVU%y W|!aYpv HLBa~ހ!Wg݅j:oĉhZۊW!ĒhA_~>-I ђ4LiZH@! W}j*xPJ[t̜=[^cE34=3`V,9f;r;V|>,',L"wCw[۹궶,YmSYrԆ ٱ|R$:wA,5Yls4j=/kH"#ujGF%4^rKL#(6m15UP ׷or aaov1UB ZT43;<_#g f$T':J?C\TIh \y?uɯnsmCO4NHPΞ;7u>Wm/umsU_Ʌy$ ޣdZH7hy'X\"wG+RSSh5&D&DH#B߽S"b-)_l6egv虽tI߲!͒&H^|C'{[C;c7*0XDzplny)Ez*16mGN\Pj1*mogde>׏< fmxx#gT*c$ԕ  x F>>@Zz(W{)24Au7*jH}aRi;ÐE<"'Jc]sꩪ4M#6935ӵ^~>qN8y2^Ur AX v_$!xHnapx?ܺн1z۾HbMBJj-p^]գ?-@4nsQP>eExfh"lJ#USG_ԒHNI&"t$BDjxwW9A;S-BMP!%NxإEE];e ew)=[w2r@.n/zrL[)B9A*49xf,'['vW ;=(&&B@"?XUۿ2*lJmc=--k |`bKBiA,@3)G4ͪN8j=9( AL wMmix#z0[W.ι _,&A XY31nWi–uŞy f\(nv6>PMFDFQiۓ.[X@DkPh;Dt@KXCDVXl{<(/Rb䴴ħ2q2W"Z2ƛDfߵ-@g]?ux-Eix><ٍ\ٜ䢬{+ [-ܞ)r6@5WYkd:}K*X-(Jd"4X$Q$tTc$J١QDzNCj+=-6,62)ÑkZ&x+PD8mEQQzh۵r'BE亐ΐ|!-Bg ooMo5Q"6$2WI9SގwOFMݹY"wPړ,ge^ܷvi"BI&dZ>=k=ѭC C }:&SG 3d4QlÞgp:n|G+# nY~zߦr>- G }5=23ssrݻT&YikEAv=U>. 1]9m'j4Sld,y *bj a~x&A׈,j: n_B;8s1{ Ä9&Ɂ`A;?Q+F4NzP,Z5V_\4J$*^߱i ;eʠ:_#}U}3o~l"XNNr)kky߉C*7n$й\GvdG Ȑm Zgczqd M>&IJǔKeXZPaR3t_ 0ϻ= YTiDAd>Y!N+4E!;N!(C:|B7Y5a2[0ثW{yt6Kd!&N-VT "T'ۭ`yb (I4E OZqܻ{WQꆁE :]\%g l)S>_x%.˽͙H$cmv{m#2\̥)VUz%mf9?wa.1rt|pix(GchuIT*xSk5, Œs'1oflqPcY[ey3?ۇbuz-=A 4<<*"PK5ڒQTC;Mbu |#0aNZ *dՎsʳ PUSd |h_n)=KgI#) cN,(<NTD ;H,άp%/VF$TwVbJ"qClhR!ss#\]0T7}x_C| >w`^/sI|XQ!NXtZ (Ҭ r}x+ыҴ^=> !<8>ϩSU`ˁjF7ثE`)T*`Ą,ye7OHu>D͟IitĴ+fC%Zm9;P{-&(iX|J(r[Q #F?d$/%avFsP%_ ZaTuV ҩ !FHP D̋4LxM*K\P^7?4ٜ0+<ooQ5h{ơoEޢ7CQ4XW˳ܻX[;b2 1($)) 1RD60 aRYWsS3P6OqOG&*H€T*,;fP1JnمY`9*Ii1! '&#0d|5h=ٮ :;?7fM} 0G bD@Kϟ~?PjR-M K`S< Y"L29׈t:)@4 f?/pڼD( uDVڳ]S1rvNԚw1DaCUri6ON0&- ZXkH:jat$:rE}رI!4jItk^`k|\\nkXz`УgC1l7`$;8e @()Q]$..*הcFaa2 Nbr#t+^>nu:05.$k!{/'vo2r*No?G`VTL&B+gfrٍxOnacaXPPPpzLi|'vm}.6/)L#hCqC:0@!|ygrɗ[sۋ{.:j'w-g/k kM!" $i֧I:&D4lňz {61 ^6z~(2Ga_Y]cuvJ4*vj Zg_Y8{,ۿ}B1CBHMDSE4NBz(~:U36w? IExVg/ݹ^orD}E ZW\C8"RBv4 6LޑbSwma^ DI|Gs+7=7Scs^qcpMƝ gk C'fֱGF*׍f7Ӆa)t'4T`vԗ[t7<ɓǞ(|bDA8QǤ  6uj+%%ս i XD=߰x 0TZj}FEEi' >lRd6QU1,tj&R$iKL<^Sh֎hx1KE,`ع ~csӋi7W@GٕLHe% K1!-FhJ C)4Dh]]ggBo~֯oH!(L&E ~5!&hw%읥me!B#,KߩiKIPi &ojG#`-DNW.66<(;e6^lO" ь 5Tt>^6a |F1 7ʖv|n6*e4D0F;$Oؔ` O;i69ӵey?yb3B1D2h.e;~$_յelL VV^74T8W>A,=nM5:z2i-*mƁ6QBx*A4u1F+|tԓ ?&Rh 8w/1jx(ɂ9CVߕ·y3 ׿KN k(!V/ V=,hf$yP#Иݍ$Idkc6b}론~,F\@zY/f s?ߩ:U/T8y̠ mۤ0%K& cͪ3NVG?H@:"4{wᄏb0i alږ&3r8CCss {yPooNO9//|8u޽QI--VW$%dƗ5O=km Ƃi(~Z&*Pcc0Q4;v\lS;q_ylPnv"N6[/x(aO}(.WuaBSikԢnT#>TrNS\=u|uߵkȻGPK}wG\%nð[X1]2F^3 8sc+~lsUJe@ϥM֯Y22faܶ9MҥaO,*.LYG;)AJ5{ѿ)TQ{ Z],=5%d^V4[CM'76+?z]*7o=z?4(X5"%A^Fs=ʽgĔ ƒA ccB 9Mᖼ "w70uo@P&fi&jdRYD`  3I%foN՚i_N/1 +l9TOh}jJLnoۛEyP1ꁁ#z @SӧXGGGpEhsv4*Uid .ey prqsbSle:Si;֨JbvU~P/>ZrGօvf||#[G3L߽I\ŋsHhgv1ư8S_Mkք_6%$iQEE|`0@t6Ga/SHB5j*&J"S#=LRحM'O4y~($0El oPHH.%p^>ru٪}*)o'~p B\yy ;hl ҂i]ʠʛOnݚT'@5~r7gUi6/c 99esWfmW֯3LX,֊ q{w_KJjiExtOL*i923Vԟ_\\˺-`ILekyz2Ηu(iY {B2|W b) Qts/ks9d(@OY%w'a8$) }/6ax[T/20l~HK)Bt~y^Jt^|Ρ:ݙ;fwPwPsawNBSbe\Tʃy⺎:S/=Zh<Օ9jSJ%s$1"g(Cgf΂55x5.*.ix6zge}T0J\"6xM ûC#Rm-~+Uc61 1q O.k-x8ťAC[27$rd4xr:H 9J !s?pFz\z-ڑ-IuOkkE hs('wm'lm  dSF'T+x6Ěfh84`mڄe<&,6wk泔d&xFkh'rb60BaH(}:׀ `l2& _ӧP周Htdߧ y @o)ib'vILz%+k(yZgh{0eyH|˽0v@h\ty!B``V l6hx@ J@WHqj&< 25ϩ\fFF>raSqG'AAUui6l)bؔ{w[:}ejO,ǫb^Q۾*cL0Aſ%aJA"awod].( PJu0*UPԴ1z K ˺Gק~n^A|u[`53s~S;B6 3nvぁKٗ~-q1)/&Y"~ LEsեk͛.u62Hͅ ֕ige˘J2q5 q,fS, 'Z$L^ZF)+ETߙh kyU!*6T pym$N/ikCMMMxD`sw8??M8# #Y8*oZ㷹a};3+M ωd?*…;.%vvw_E/jv l8.T!z{;Atf5 ,Uy ܦnmj` lia2+$TW ܑ["6\3fsķxlv#LW+,'զ b^b.Jn[5~zηbUHm-`NSošu9uv/O#3f ?vrŶ[c躐ǣQ444lTc]oXCiP8`ܜ˄ȡeɐSw Lb\^Ie(d.[WE\r9H ꓓb)~*nE1o2Z$j?ϯ+QCAlsphKw|qH&߾mzD3 <_G֪BUs*q6Z mfƯ#w a;B爣g>* ,uvl$wiln~uZ'1AkLe ZWK&CG49XR&`vn j"SR@u) CyX07񑕼FJsn[[)\E[Z7[B^==G` MD.sov7MA3H*6RL߈Ds\Orbk@ gA#t%]9<\'M dp:jDŽ<3J`\ژ͑?>bjH$IH I78e`!N/ XCORUu xCRjVEV-ͣo|j2EIIi.Et z_5>6]}߱\xnذ:Ӎ:EdݨR>=:wW9?6> hZʜg9N*~&QCT5_1veό.5tg;}߼_DkPeb =&.Arx\Skd,K// ,[/PX& )C iVf3+&\Ӌ"@3WBj(|Ӈ2) -E"``s_;:[F=GSMw\~4<4@?WTdo0U4lx8Ǿ-Cꇥۘ{PX`N :v/˪f+)ȇZ_$ezdNRѮ]LVKWE,dh=9$l{yr1R~TI_l%r D J$SZ4Ʃ;9UÖܑ.d"0ULn:ѓx%LdB#ۆggAr40m$i n~9D&[ jyԽ}7uG[d5iBIN8<̾+kTMdcbpJHv7C*:&!~ٚԓ%'VM955*GC zAlVj[ 3̇1rc{@蕓ݯ=N]ȥdu=65MO)nSSUv8@Q|7*,|@4==̣"s@>2;$ bHhG vkNe}۷̩ 7s@;|dRQ .bA2v_H8pcHH֘#! vɞ`Yt;,L=]\ 6wߖ2"mC_|vHyF\[˷sVC^aݜW^EfQE&70Sd(u*>d7c=HhO| 3cdrGh.9嶖OYP3F}…]woXNKrz`|Ͱ};kz+33<) &@lfPs ;5]ᲱQp B}Js=zgƼǠ 6~6e( >{򗿏k:?z6N iآ3+g#J@[ Hsf˩fc{~X1WAר=:x`m(1SYMw/O>todH|we%͈:<:~~N|"BvK;ѯ-GtH<LU@RRmR=TW6>^Akgn+vV3y-ߑ$al~9dVԭRt s`[ =i ܵQ.Q:u: f EiGWN]: :"Ef!зWضMe}b%53 YYE1Ѐ ]rgTR]]=$Y^& $tlpQ*)TןIDATNiq_w*'Ml`y޴.ᒿO>Y^2W~T:MF}q(88'0'*"B]Ԯ#.}/u &nQY'@:x;G<όwIhk?w3e*\ pv֭g.L^YE]nRhouom? V:ko;`k:vJ@{jȣI$oU-{՞M[y>1O?ƙ~p-8jɒCmN 嵼P՝'asss!a"4:2seᄒ{66:u:{qzCHׯ chB,C;ڒHK|_4<{rM`DCkd P[o %Z2 }X }upM8q@i {_.8e̞7b{4Ilfs~¹ٕ[~hvxPt-|m **h8>l~.#Ğ`ݢ&*73Qya`B#jIR`Q$)÷ڒo?s tl-Ahkj*\v"2$Lr՞d"5*"{+ú  +򵜮4X/[Kl#Cms!t`cOXWYJQAw/SѻoWhE`f`J9+ Pg'v^8#Y&{4 ^ a7 /ŋC*01G'>;y@`pʈfCdIn|߸@uh?0? ~\_ݔk3_< [N UַMJUau !NR64G~J.=ƍ^>( l/='F1ݣ[ZVM/\|c'pLgsT=y0^|"ahM"_Eɚ*6Jq[WR ))JdP-Sf3)g{ %Q{(//`ǧdYa(ꎘ/.sa`h@$pRҰ04}}6_Y(^5לכ cZvttW9bo%/l6!MffBP> '-Keq77 U1HY_ ?woޖƀ?V@?H9wɧw:iVbBġ!9 Z'#uqҸ mggb8}wu(h4bEб5Ϋa xӛf-2-zg,{ ,؛<++*]LEEF(D> dC$a * gR”ļk"CNS"PÀ!+kghg.a!gK9w.+ǍʞJyvÁ+\ +˶CN. CuƢ4:s]E1f>;9Ź ;$;1 4@}]y   E_Q#\wI$7*@b8#e2I`ggْm5~s3d0 _2A ,I;{6T-24eYYJW;FZtu]CD=J~z %'b_7a;Yf\tq` poa cKOz-,Xvri{sa;OX\yxqyvY&DhIћ`QFEZɝ&%b&6D5),BSb,gSWV1Jn- 8B=nKTqg?E/w߳g^mnNty( nཨ( =/.fAFX`&g10^/"S&HY(s~9|… ?1!ZIUK5uBIZ @OJD ""咄[E*ހS>zmVKE>oDZ&YEvk)"%>dtkOP_Flr DA?=C>T31?Ǟ)0#:u@{w_mzpx?Xx |G#*Ǝ rGGx{h,j\/wwuQ`kB^J&YdB,Il䇣\ _<:ex:O@WФ߄:EY] (Ma.H;w?{6-@6EtyF~`?Ⱦ@t2l _RVi#[o5@?h]|}/vq 5VD))k^?']0m bK^MFjZ]13Y1xIENDB`lbreakout2-2.6.5/client/gfx/Oz/back1.png0000664000175000017500000016174612140767210014661 00000000000000PNG  IHDRkXTgAMA avPLTE* fF~b^>rnN.־~z^ζ~Z:vZF"vʲrVR.ƮzjnRjF"bBƪvR2Z6 κ~fjJ¦zR2^>ƲnF&zV62jB"Z:ҺJ"¢fBvnJ&>V:fnz^~V6J&V2^>jNƦvN.®rJ*ʪv~fb:~βnrZzbҶnRv^N&f>fJR&nVjRֺ~Z>bF^6ʶ¢vZƪjNv~fR.2ʮzV:~bFZ:rRfJFZ2zR6^:ھβvN2rJ.jJbBnRb>fFZ>rBV*zZ2 nF*^:ζƲrҺ^B6zrZ6Ҿ~j^BZ2V. ¦fJj6^B^6ƦbFR*zN2~V:bB"Z.rN2ʲnJ.b:rVfNb>ʮfB"N*־njF*vR6jB&BZ. ^6ƶʺ²ҾnJ*ξrN*V.N"V.>jF&ҶV2. f>"Z6fB&rN.^:®rZ:ʺҺ־^>Z6V2 &KbKGDH pHYs  #utIME)1 IDATxWf}6xmEI7jjqO`\U̪a!}"G? W _=ls(*dn(gKƽl`Ψ#qe=͚//SwF;5>}t_~z2ٸ7QmLuVWbGN>=og|WA۽')9D%7>]܄{7Kw`'l[N'pE9B缿,~?)~JWHw˛ ujl~ kT%2]{FYee6<ьn/^?YZ>ґ4*V>}QAz^}MǏNyӱeC@_IAZDly>ŵydZ7i0S mU?p5If7޸l-ܸQ2{iauK G$ j*= 9(sR^ݛvV34 6dr tXzcr2z l"" P(=Y'_>o%FaHS䚬y$\c>O}.6|/?i;?0=<흯!\3"Tw|ϲV!&=zU*fݶP6"|u!CDhG)J'/bT*C^~R[;5١V'S喬;f8 5Q]79ijۜAKrH )ުrca~7G(r%Ͱ/g]F/O{ocԏ~xhe|C® fN)w#~gbrfVsMb #pDž_ɯ7R]hѿK@Emo gԥk i]uqS Ѵ̿Z{v?w@yhBhV;/^1dР+H裟8Χ_{z?xv_u}_4}pt1=nbA#T?_?~k/=7zd~McߝTG7lO1/p#wjoO nV3EFZy w= [Ww2UdD+UJIؤH\9ޝIۻ9. x"Ew!w3wְ]aE0p}]=Uz ]<*ƲѸ|_ĵ"&3~C3tky_?|ڃ5x{dGK?{KcٹIC`klКo~i<>u*}w#yZZhc|D]3d&lUսIyM!CSYi2gPFk0'Q;Tf K* k`=V9DI=g 9j|a)x""\ouT̓;2`[6$6v Kw'/˓Ǿx;_|h^|JO?_y=z?86f 3WR7_~<^:ZtP:gZX~“mZi|k(=(dkdjZ`΢ H cp{FX\[.0E"<͔>:dpa>ܶ+cAFVHLK=~g__'ǟ~^~x@ye{cON]rDX+ӕ= 4Y>0!N)]H_!j= 3a_[eȫQ]X{ײ8 տN-P\6ZN(u(2aS]۲iZD)~0Zx![e62wcw?tz<՝m&q1gRo>hz~ 󍧏OzˇǦyX@5va.={3$sv5Ѕkč+ S'( 2=}m2/]87PwB ºlt1g8FQ\@㙃-Anj">IA`m.':_6GVysc6l3" sKؒ:T}vzo}5:ϟ8r_ol|vt?{zz$|jăhNU9\}/q}k&k.MAģϤxfԩp@"F|F!u-wR{& AIwbV'L51[E&Xrq~mj*ꤠ#A[۫p-ZsX T vMP#)fP}}8ԝ}|x~؟_N?l~T&d\f>;O+"ov`$RL]ހJ`]+"{])xN]'ےQ+o o3÷v8.F9r#"jk~"!%=3kSGǮ̋'pt"%=$]VN~8򳗧}8Svڽpߝ7+.чi:us֓Swfr6yR^v'qEo_]B:+9u*4׼h=a@$a#g(E >3Ex:":BBZՙU1.ׯ$3$8Q,:Ymj AEm鞥dHM:)WEϷ̆=m8r:;kT[Wƃ#ed͍ߨ9գ9kY"^go7 jf^'cc|+LV P]&9Ax^4ߏ#WCIԝn*L%i)-n]cB: ]-|/\j%(w<0RG&Ȫ;hL>9̷;>R"p;Y4Uћ$?6溮Njye?}yK2e6R!||cYcm ʾ7( /{y{癀7M+|32xBB3 j6qm.QX^N˕=l @Ŧ[nDf# U( IuTU`F~j(ǿb {b3ej;/87d!NX䂋QYwdj$yF j]V@@aY@|cm5v\WpV2f_瑗kS7}pTT=jAܛQGOk|YTkmPZy aHͦvm*Xi)K7ꓗs/F9g-|zxrl3(.ʝ@~_<8[`"7 ~-Z"$z;"KohRk{rN]Hy\?g e@7@Yjh'.'Dڊb懮SKcŨX $ vA$a-kIk,܅KRYVf!H1qzgzdY .POM@KPn)pzQlw7e2He_\o}=0tku."3;-t|<|Oo+iif`b3כ4 5'ooࣈJ= ~~|"Ѷ=H5_s&eK Kk~R"+I=]6rAò$/j.K!>#ȟ' 8; ku;orZe̮vc:bnfzn0˹UuBd٢{o9WR{kȹ,)H7Oz)9.ɕl Cl;?6G*J`i0r)Rhra3ϷDd9nNN%d;΀b"M.X>x@QY,;rm't&aIe H'a@ю  ?= b.Ē;3}%W¾މ|wo1{D;̎+)\Vea4=}濗VŹB^ z~n w!RgОyI9x$#|v6IB8ȻS:K8HOi [s֝{KI%.ZEJse֣ngfHC5g鳔@"?uRP$̚.5QO&V+np{+U쾥X箓411޲cy,KR[|qoc/\Tl -#~q]jڌK 斯*Q$LzAYE//tySG$jΨ~R$x(o%%?hbݻ Qζ 'Tt[ u8#ПIE4kDzU4&̘z,?~>9YUGJ7^yŚ!Y&]4mѲ;= iRLLL޽ϷO=0lYvU9I|yfTsxz+=>7gQ}Ibv-Ga6 Δ)SsU551SuX鴞 _&Q1Ya "8Y>0 r !Ӊ mFP{Cr"`V՛1VTnt ʽ:@NڹȲ-=؝XnsVa2`P` 0zPYJwHTLݳImB9NsBƵ12沈 L >iGD{g!YWS8 cM ud}i(Gr$?;@ Ђ?.8=fafUg'wJr|lzr2} )صz>cNʤM`qi59<8~(^:>qfb]A-r3tzI>t-QI ޅŖgzBF DJQjI\ E:$L6;vc̎e gPLH8elB^R|$u89 !93HHoLH.vm6عpsj:g'$햆bcM%^s\D1I:p}/ע[6Eu4sY8䗧4Z= kuv׬wa&.0w햃iJdFXhwYIy\h{P9tP@" !p0qFFH@q~kcItmي:qһMom{cdG{ bXw7H‚$y(֑x|ƣ;JZk EmT0v^vy"jʵr ȯXG̫?Arn`wW+f:j̩kpMBa>y<S}6qQx#i`v4ʘ)P|~9& (@tvl%hhfA# p'smGi-5:}FbUsi΅\bSf& u 7|~CzJok^=m`99&XT{`F2 $,%l{:*W򸣨ecFoD9F0Y2&]hobP$)G~>B 7dB;EH̖! ]GX|,;Ž QUWPQt/qg.:D$XL(İȥ7W_Hc? {b> ATJ{QUe {FNc{" 2JG%'DXؠ vd 3y4er= y6Lk HGKb l"MZQ P(&V JP7HKazZzȷraȥ 5>11d%~yVITlA bhT"FwxFBb߷_j hSOYFF@eЫ݇ 4 e09Xvٻ4Z#' g3m qT IDAT-k-\[EFP.C~ BrV@4H#M;00G1V eY[ۅW`Ro{'jO˗Uuu8YQȕrZqfq ȣ&q^}\.igN\1| kve *͞^w4C3!*B~)+ v>g: tQV NjL; Jz9")'R(*ET)Ru?B(P"D䧊\#@Ņ"vC2pxzy&G#UktF*5Xdu61}"0C éWxa=o􄄈HoЃ~&AY@AgPJEajOZFq/Gk"5X H"y&;Od^x?&kKn\-=hqSq+`=t<i*t4xC q }'_w3.yzZȝ['ˆ-15Xazzj>>ͫŧ/~"#ut9s=s%ń/NF#R2hD`z Lqn\ձYql<́w_]5L^u C[ b~,DW!벣(@ @FX,JTI=xYs6]'ͮ!+81X=#CbQ1ҫZtfd;SйLzK⩱zzc.CXjߨԐWW}05[zڟgy2hdZ$OGH,qs ]:W>%8@X JΤui!sn0Cy-@/:#:pAк߮3%$Z#= 1dr0-ōR0Em-Ŏ+'Y.9|},Kّ\ʱZ/;<1'"h&[wYjʔ6:fvȔ}!ZqJ5M^MW#8y 텄%!q41p+ @qfQ ^SRR Gj3Zulٴ.oa' 1/s<-LWu/fYBxfzdbQ$I3 «I!p@g#6#۶6@ڮF@0dB(N7J){wV:2T)&R{zFMKR]AalƣN0s}||H4,o#]52=<9kɪ BaQٞԑ+j_xWqڻICOTQpqRw=J+^<: G:}̭0"μ:xO:N A*'OWC ]SYVC@:%ga]rX "\Yu v'=F1L6&e'u4۳5lVTO] S.hFrLb"ÝCLM^ {X%HZihb1-"ާN@ɑ@#J+DŽ64uz9C݃t {%m G+r^~9p0 @,Ցzr])#) vJ\c)nJl%a(1I9 UWF85De, 70):Wt$ C,bW o`&R` ]&~+^[tX,5p51TV w+"V2$" E78(A|CJ4 Ir(W'}˔^  ~: GˉjœȦVb*ݺpPRٳ8q D` %"*bBuN:$vHN,7`[3 3C.^%0dQ ⠚e7:af}#ǨC24%zdy}n '#;g]AК2lN+Đ޻VH3@ʝkCjU5Sd/NqJjܲȢ@oRĥ,QT =UIBd;K&32(.  ltkYLok3Luv<١,H:0)yFiUEzG-dȲ} Tpt PSVvYG5tXV8gF.tr(aID[mDT؂> BP644- ~%6#T{~籘 ר?W-ooRD꺱e62&YwѴEt^$z`pmoY#Ae&,ZpB,Wy)$Ι,؀pvw)*#ri+fJp쉇gS};! =JLEar 9# T:; |4} CQ ^4"*Yx ɇ!ObB49C.lxaz"mDt+Gl0 M^\˦w@>j*QjROœMO!(qZM#A4axR( qtB$%㔌K+g:ʴ `HkL 6\[Ұ(2t4zk v">;7u*rWwVmf:5ub[yЗ UyHwsYEܾY*R9 I|69pjv mC-V'mC/bAANIL 9ADD '?2ҌfCf <"LAd M [ﱖ*TEБ4ϡt |8Iu֪*nk$iCm˜ С 4 q-apC~@ˁJx•҄O 02o j$4U~c7qy$Ϧدee4]  VRGdJ‰k'P;~D@YM#=LTa)Ydw P^9b1.q:2٢ kQ;D1Ԏ$tl:7\x8kIoZ=Z& R$$Oyy H`fe0_`DU-#WV>B`r|M^M/R3汀<>Iǔ0TbpX}#ˬ7Q RB 9+wO7'u%@W8KfL_(驘NTu-]aY7 l3܊rϹl1XB8|$QZTE|׃92K9Cd#hMؗ4@26ZEfe2+I᜽&P4朚M\*c:6yP?tVg"<^J&k]l7C1Ov9}LalmuQJv %Oea]հp[vXb;DDHbNNEaPFJ-^32R`cłx2g(\OGIp4>$j2@==X33 Pbu eZ${i7UvQ/ݸhkU5Èh_rvɔ Z򪍨1g^" ok-ޖ]pg2QHz"- HJV)ڥjNj#:K2\ݫ[9@FVGjJ)=܇1&_3,<$I2>]IFDiQ +\DmvJƒё<5QG]`pX@tïˑe}yz^!@ծg \5 I[!C3l'NhdX n;SWDZa<:JڢolW>r BHs q =5;:pڍq;sM SY.$ͲVzH`P OWns=g,j!Sj|Xaw'ԐAXOeq5s3i\3&ަײ=}Ǜ`Gq⼤YD?XבEF3Cdci%ݣqŵXD݆Pw7<4$E gu\LpD8Q4z /+w@* جAgxc2=%XU㲷mtznnR }fA+#*XCt?F?xr/܁9ī&*FQaQ.!HXnxc]h =L.HʼDžP:IzD/E$N1%spΙfcS <󁼁8S~9i4nG@ cңf%Gm@QsJknިЊÍIżqYaFoh6 ,:̣n#aM) K`~u6*GP^8QPrds38"b嫆`~v)"/Cj"((- ͋Xx&\@!e8D o.׻+"#!Y(vif,9O:DXa ˺@0ލ1̟IE2q!7gb> 7(Feo<'8C|(;' CQiteޙ8㦠cȤGh!ϧJ˃u@uiL12_@n^Z,ac2mLqDMA][2 5mW.*le52/+mվXo#cJ/a1_<5A]}v/Rf u0!S$ IւU(4!G߰!90/)*mnL<3)hy 41-0N|:oZ`g+!SP$86,x#i.ׁmޓɠ2tB03PT}@"& C+4U&ߡ8*vg#5IV:f%mI4sB O , 3 &3 Af"*~>G|v6J#Ѵ* e.)EDŇiK}z̭]ws7,x}_vit ] Fa^ qZ Ee*SgB|ti;.OO9#N.`3-nDW$P8jX >Nuk 6_ָ#z'ap]|!dDK4Q7JI(ƗX(Z!k=.wZfRfDBFHk複 ƙMLtɷMM/L߭'/׉yQj^͂1t}"T,tK<6hYGcx5'?a2V@(] JR7*r/`.V#QDReni^Ttݡ߀tԓ+_?\{r I~#x/ᅪPbٕ0ƉuAJi9 nsGw:r[*A &^&Id (6,C#?_`OĂ >e*06G(ŻEīqKesiMDC)3 =90p˶^L|ѱq,w0aEn|7?ޮ% ZL/O(jՕՔJ@8W'%]2BWa:dӂNXF*kC4+-qGbkGo=/r7 ?=~$9`/qr𕽩#z|;ǑSv"NXEi몆=l1HW\M g<3zP6TK$;VC% P#+XZ6ζFַ)n3.nk#6vbE;e fk wyr_fXEVZm1MTrybşwR TTtۊ̉m3ΛL q|0sw91'9%%o$A{ ZH kv<@93opMG n=W3~O继ypBIXf'M3'QXVu^DK`aZ,B FBٰ1$IBɒ[1MF[]lBhM&n咻"Q."lW,D{Q_A7|w:w`bJ)rLǴu"jqc& ݷPhy7oW {9 L2U*<;_,1WqYCVbV}3yJIֶjjiَ6P a*~asr&za=*jј-$mIw$aZ YMzB~D i3q fM;HzzحU8[&P::B[|<GIL ЉMDɏL3L|IDi֟шV^/,7z׈U{X%1^1f9o;ΆD=ԭjbyno"bc찮H EV)M|MF(vF=!A/YS;'JtdjkʣTT~KMnlhkN &~ga=`1)&c>L=b^@ի >&ibY#T jUͽH]OjŚƥ hv|cj~jYB( yB(5!=39ڗjv={+ 6idfG]ЗTnUߙ}vW/'RH[ɂ]W#ArldA.U8 S)c [i q@L ~&GyaSܮ8y?pGi1bD;,Z VUs ȯGW ^)t,Л'\/3Mj,5+Hc~/4XCz:M=UHk Ubem9-ғ~:UrS^1VO64I[sGe ZSC1wɊja۴.O)Gx'>?j0}c~`&v}u'q" r bR*\E&R"1 9TBdL^vLm$MHju{R]O?csj/A"m'nt, inXxw{WB,5guL֟4;]٢5MEwRخR+NrdRn,YtD룱ќ9'Ư!Ē,{bSDNv* Jljc4E"߸'Փ9uq+-xZÝ{6ӹ!MITyZ }`æJ.{C6#jHȔbvK[_mf-$@tT9|m'+v6m#~+Fw"bS3d<9kD:jcyn*6v*E N"1qۉoM̝Lԉo*: dbY'ON~TEe,հP en3K1D0 D-"xG6%~/~,7c6{^[|Y+(7D8a8UV|l4pF4f(Bc5Jbd;6gHeƲU~GS@8"*bWl]&U 55M.yĂb*VILujχ@^ɠ鄳8D7ŒxyS++VZkSPttz> Eb,HXWO@d)<;"p^8BErtiVSq(j'DUwkߎh!iNQZqk44fo(j9j;M67(.. hb MֱEVV'/l6g6w8KEymF a@쭂:Xg&F)޼; [wd$t}0O3&yБ)(`p.@wlN32FAʽe#/nB~sXz9Z%ey(kB*5:LT݄,!T~=M.WϮ Fztyw9vo]~V5<_*#*9Aj7UݚTg5s?.19$0uo)J[ ̦<Ԗ8tg8B~ʡx9P,qki#=wlq8JM悗 9eL@ȳPa(s&O@ CsEr 5w6۔-j;Tۿ˅1Bbb-Eq g+61N\9Ν:wnXaXt zF%b.MݽU6 LL4t;η*NfJ`GIYna[G۽NKA6AG7 zE$ pqz5m2%M{)"g{[<5ji ]e%3)tKm\6['ŬI]_ΤrO^j?NfQP`q%-=zv&N%KVueYjrŒ39iw\nΫ%5 %hv{:ʃvPic+o2Ng ӛ4$PȦA 8.M^h/EZԾ,TF],e+u _.:9 Lf-[$q:z6D~ͱm&vvIBەT׵wl+Mt,v3TU-U0]pFy t,wp5U|  A'C G3QqvXgZr2}8a¦L;8 v^G}[g)R&29;P=%9l߹]gJ I'A,ο?}fw[fYƖS;*Ϫ·{zfcTu5CwW{7>S-u@ ivCuRf ~ S"/}V+sq$ E=&۩Ԇ)?iO(l#;"Bա?G)I}GsOn$e涄$:rc T3@&hYh׶c.+F-dv܇=?i& Y?z˂s}K#Yjniæ\E9{T ,0 nJJC,g4s\0]9> H.i5#z0Jjr7 qjq^\9CP"ϐ2)Vnŷ} q-01g@A(p~w}2uoQQE$Ko~sJ54if5LTwVH+٥onիjt +jsx7TmggGbVU[E |@pTajgIM8b NāGR ȁls;P:niF-$ŽK҉yq ,4Ex@P0\zH(9ݯ'À/zijTuKTvW؉( cT5L՞\jbRd,|rcGXe]5ĚƷŏWjve}^I`eȪʯj:SjvZ!S'ν~~1q<`5FR1 Ùi4r>ēt8.aSWtOŝ'w :C'Ա[Ë7-ޔ$LrJ;Ϟ6ñcQUQ6lU_\5ݻƈK޷k[Cm@.RsrQC2'g0&XW)WUjb*\^r\aV~m}~pqb3ݏWzr& 9uJ7r[}{6VXʆ6E,B9@΢ifXs^֓" #3)0J߼Ω*o7t{K?W7MRtNOM 0>g f)tʐ+&7t`[t:YWW' +nnW~]wU?PP_k6oc{gY|s`vE}5 (7 TȨb,͛y߮RsJ^gv8Lkm|t IDATT"6 f𭩀^ (ı{@rIQp^|rn7k]bV'VKUv庲;U_)nz,?\ު8m_;κkg]6mK*-b#,|c rك\,N=tO3}'gH'p-NnVX1j.͑mKEOK>x# !ϭkȳ @>< /y#%v)}bݰkTUS{ݺ=Ai#wò lxgX0OBh2E` 0O S xdLghU_JWN2 < ҡ$rvsHr#`"ǐԝ^l'ފ>犹d,]7/;{]E4,WYO0Cg5*mތ=T_ ?z۽nmq3c|u)׻>_fUCK1סc_.F| aBt1}l"e"x^bc(8Qdޭr{N@y({%*'jmvJ[C`1c(D}8 :бwȜps8yꇡwat9~_U ª>|g^붨]wVͩhVʂ"tg>|>@v`þN'N9^y1ttE~'/Ob/M:APGKkB&_;\=0ɩYpr°*ڍ"kU"P;G%f[+#Qof?q@Y!'yu y)3qdVET˴yq2†ZfLlƩ31HP',^*& l,KK繑vT8Q@q,: {s,T`|dũ3s~%L$L`I/3;U.s]̩Hp#8LDËǍϗklXU:"tϹ;j?Gq.XvU:8pμ'<R0ھHO;ֲĒAۈdRLb=6Mҁ$.d&$fG/[a=2ɖ(nCk2"9Tw~ktWw;T^?A%{F38=[j(x@WBv~jgٕukm)Fs\YqRjM:4k6.i U1LM};ww-ٹV#vo"SUpbRs$HŻ`1z B-7پJ;p bŲjyhɡhuT8 a{nlϯLwө2Ec<|Y}BMj[̚_?/wYE9ʵlv_UB}ek&Ǻ9U%RiH^js_||ejQ}KL%FdOW(eƨy啩XީG5Dg/zO p+p0aAc#cС,Ζ-F^߭,ӕԥA %kx^ɜё9is~ؗUk h4TQOd5[?}5dYYu7bBTGֲ]r @ߛK7ndf[ҖNx0.X,;{?}Rn]/qJ SL4 b[7_S`Dƣ(Q)s^x湣w,yYhRZ>[uzG\k6$! VKa3so}{Ib<4MH}ϫz"ֶc !d_?}/f6fjOd_5+alje ]N +,g}xwAETpBgd-\QϤALd, [%)VL|\XVb\:jD - IJ1O]%gkB (t|7^ xb98@PB47]wBBcf`*}vx^Q't'g'⁽V'kbu.&F'dKf/ϚjrCn3ajR4募r?hNCzfaY8΅n7qx ~nngۻt:88bTc)@R]+'4>qkLw:M '̊<,_v̉/aT"L5(zvgrXt7Yu+m0|e9frM#)ň0zO<{|Á}2t#fHNl&Dڪ,1#>~8;=8涃kieѸ.q篁?_,L]ՖFSPV;b\ 7-opwɜWTo/GWJ"w>D}#[D=GOOseпC4,X}Z&+xtsKrG?NT=\wwͫ!Lk=%{swE}{"RT?+ 88O DCb_HAnp'KT۠lk f" 6[_މUJ\2(ͮ^[C?3X3x}ALu iB j_Y;vkB+B`#pUmaČk@`WS_Mpw ?zVx[kJqx{r6ĶbǶ}u]`ˌ(N8I@m*_?ݽvN3WƝNc1xIWܛk?Z^[.1`~[[=tOf[o4_x&T=Xk=( ̠30w'S^~zs9L+Z /$NqΙL=6[&|1qgfq>o'<Ž4uv@Igwj7p?+wa+S?yqܹL8"4[B+ӇWn(e´݆ST?>x/~J3wڛpHCzY^yƭ4ݢ&ʚ~b h#"uY8xkOtu?`?goX$8"Lϯ\+[ V$|G5wv~K&43oaִWsUaȲhQiux1 #' NO^? I.Wc߸/\-QSq6%(җ_l:5{ϷO#O'w[z:=hV ў,!c;7o6'ݹwWu>piٓ4UZN:/o40mWL*$I?Mooϝk\vVVz% 1VFv1 M?^;yoә6|nǓR.?}Y\|7Ԅ R1_ieQyRCzϲ垍.?xٙA{K}اkK`9L뻥VWܪeU=y6a ̂;꠹=ގ&Vjr͌ϵ٩]`+GBCic+Ȳ Qѭ-EcUj+ n.Qm"UUӗ=Ã_gqo_n//~vp۬j+reըmҎ}-o3؛5@i^KreSjEW"I4SX/ =xifzF5Rk_Q[Bf.D]N M4EUP{j'؞aٻ?zb^C!(2|B~:ĒKbcn "yz+j9 Vf}cGdLC3=VY1IW[Sh}po%JC!"Mogǽə̈Hi@Pz>_u!} ,%HC:)+?t|O޹vp_?g60/oӗGg|[˳Gۗ=9ʡ Yv_uͽ< ={Uɝ2L?_[?9[-~Iut8ʐ8 a*И[JA'9 :\]6h@VӚnS!8_L3Oη74\!GF0I%ъ=ܣWL-AW; Uڪz?|1w?rGG_ګӃwflsIZ+D2jeLVOƻBA*e⢪ j쨐3AN&J9>=?9ٍx h_dŒQgOP4lU)QuΦG$ԫĉMG\ZBrC6L>޽|X/BO(ԕTO)o>z?O^=y~^z`W'=T?ZuOnUFJW?f rν9)&=V!ET,f<&:J{ "~*pBUe^,B5ԴQf͟nK!2WBP~6;awڤέx#065}Mr~j&CbX_D 'ܬ<\xh}tn\\Hեnn0,ʀJז?/NٓO(^A盞W=g_yP_~y&`DXa܋nl&tH"4{㗒6J}6%:7|hNx{gBk aXOOB< ҉*+mq;9#%\-+#Sɩ99OG Mq9@c-*jHx 7f4 QQh{WV?X?yvы>x'x| ?g_'O4j 3QP$aݜx;R4zØGU#See9J)(GD|R>Unq~-k;XXA4М즿S1:T7Fo.Pd [gǣ~R#bb4r@alg:|/c=,=d x oѳ/~?~ϟ,~sxѳoNwmQ"8}PzL=ZؔVtثDxM Xnt[X$/deR*KgՆ݌h]3KEXпɞj6GS{} DDb$#iur|S5δ cO_]p_,{۴RqYٝpt^zөG/eW~J 'Qt8s^ l@u늬p'qz>f-_Gǝfmr>" m_I?XD iqn8_8!4"q\\s6j~2!0jeƴ8ߍXŠ;4+kR7aNPWYl^ʄY][_..OQ2:ƪo?{yvamEtFCwNUҌ=- 3O٤h;[IߪFzu#_Y09k~xA2r k'[S#ĜNebt*3E/#HV \ūA>;=8=7s/e%='oubMQu' kŲЧ~a~#F IDAT G7o-O^ x.//ȼ94~xuU=S_H$ O*\L?6Eۿ)MzL1S Mg"7I&~"vKDWƥ0gc8+Ĺ߹V1<M3E"1B^``ږ0@5$[q,mF|B?2ۨeiUDG" 2Nj#LKp88&GۂuxW?}(0{aiܵ{lx冼AmA\n1X k[zf-u}a $R)Q',p_{MUIu(4M".ݿqPj<.LBo^{7&SZ+`ӱ,pR۩2KDcW#{2Ϡx{kc3$fp$WD8{=hDiA^_D+c|"mW(JWWb%2 ˜0wIMS300vZ}{~(w&fkdZ+ +NMєCpӍÃjWnY_|73o㟬,\CHPe{߼;tR%?:_9Dk8ϕs8~۫=.ʘcttF;fh}LO??&H=6]Sj3lLD#՝$/]*u-X*8 mY i:oU~v6FMwEWδ̄^qm[6^I)ʃû̉g ˷s3S!c [gr ͪYD -I)vM6I1X'?f)DpMH(F m zos̬!xKY8joA5e(x2AόDv2;{{pAkk@Hg՟?_5niVנ\zaw+Mot"OTc>vc^z㑕F"]bYS~ꠧxS]] .Pki֛Y~(ܱ2Ц(> s"h\_zbt67+_Wv"GF&ɩILCMo) m!㊒NZÕ,rYyw¶HF1,vy=8l =މ`_@W{2q啵~#'-]N@~eu֪9/QvV{yNTO@n~Oo h6lDԠbrjA3f̦zJ'.kj{X8W6r_ǥ*HH:R@0)3 B~\FJ 4wYlr+l6q"{.x`b g.݀(^vl X{;tj0sNV-sh؛jKeu 6z^6ex9M]قaū2бꇜah( m)#C=rCBy>]ej-hDvL0Aq۠dRyoUg4zʻ\6\k9aЍ-^r;(T^O |zUbdmd&J+$;2mE[*@mM'رwA27W͈ V瞚O ~HjQ͸bW0 RZcdQxwсV9=*]Z}16[ҳ~ l;tuSr8^}fቲp>w:2E xR*֛H{ -/}&͏0kv! +z3̼d2(e^ i dջ5Lv4VuhMl#VETP2^a`Y%1F{ǸFaVÊVU̙Ճ/k]ځs;uwEyKքU0eӴ꧝uschKUADW )=UFuEˤ&` 3Ǜ# O[?#9(l&Hs rp*3%R!& Mx)i" p y+xn}e3RU`ܚ$I0d\PCSbzρf,ةY E _e>o[(0nAie=Ӵn'փWoF.WT~:r\y߽Hl Rkޝ̐jvr缠 Z5éjf&2̔fYT@dc GТ{5Z0NclXeG˒TƕITO0$( t+yY.V7çJUfew4=@vm&mf]|x4'FB˧B8vrs8H㤸Ig()y8 !Fz5S#򃢷V3swlǚw1&!lp*8@?VW#q@EDUNVWJ _e|T95VM]-{{tڷoZ!*ݛPXo@I:%0GDzm te _SgUbt-e>cC*꯳h#~x~DT,%fI {ƘfD0<-^jW_M@dji+%hO?+U,!#e5)ɾ`$d"Ɉ% DX0GvJn#~JB-7jv%n[Ue[ nQaEݲTMu@"+=7\җo/}u  痶XO+>='lkjﱯs| orZTw+#mޞݗ[-}/|ǰ)ATi%zϗU _>0,)jf 4C+U<ZNqG20Bpԇw]ם:PHB, Qrv _jƷƯ<ǩk*BƜY1 _saY>2m1*dIGZ<-WT'6cؚ`Tӯ6`|aa(F~((XŀU8G( PՓH_ u#4F磖ptYiX]lKkW<, ] UDAW/I(!2 Q`0Y)`x/m,ʘnTB@[Og ZD \[ isW>1דK?~r근M‚"v0ۋp@VdNf &yP;QMdRGnY.rZVi0j9VI5Ddz=c' OJb*Q$Qq?ΨIeb*]*]K&;ȾH{&j@KmD@Ⱥ1^? el.MHߚ;!MrEd-뜨!&m*^jr21d.HV'P5<_IepQ00.μ2*{ l^CarF9U9A,."ꪛS&‰@Twܪzrl>Y9 ɉ9iz;]߭^ʡ#Auإpޕ'qI7KG[ Ěۥbdž ;%hG35|HG vI-ڄ=YSocW$trw/'qQ?y9(ZPR2IŊʫ}P@ą ?ϵ|}ul}}tẎ48 hW2:H,~)g[' *%]&74.x窧zEYJB^Žb%{TD[v>^t6ͭ@r ~8Q&\kj+Xq\U_ }pt{H]Ԝvռӿ~~{yl~ei*bl$ }x$$JRAH8V,*y&Z͕HFv4Pk<&%qGϏ/ HX0@TDZfLvHBۻ{NRu3yٷ>YO( b721ox,n*\ašHkI>@<~3a97"MK$c"1#2ík3|N;9 |p}~Sb*E55~'Oq*.%$q  1WJIΏT$* ajmUޮ_jȟҩӻc/LnIպ]ǁLBp*^9Ҏ~!mPK @TQS$H2RFIfMcqO%&8: D3^זp+ *4ǕG0$ɌH,@$@oEBw* M T'9 `É'`Pp ,6m:y݅ ӲJ xvKA"ΛF'YpA;mRq_TiJ}̟ >njʖhп@=w.Wϴ%%]UR3at9rU3+ᙂq9 }v rhI&d#Jlv\UP]%G)wht"(ŕ$5O Sj|#*z(c kw2{7b(fU+%?_"E(:ȅػ[hF$Oן ~#6cXpDD5gQ&{f8n}MF&SP+ ynI"se\ HtNsjJGd̓8NYR1IL8U TTP+Sh)mqަaC'NX 6[m{3w9 Tha՗##vmktͅ5 "uXPBO܇^s-~5 6Dٌ<)aQĚXCȒICv*4C0~CKtj s]d[A=Jiu\2;m!EJ"BG\Bnɛ7g^.X\B\7^aޥC)xfZ`j|lN_~i'Ƣ/FNqPI{\XQ'Y^WgAV9<歍~e3*)=nw@>;EXnAb]fXR$|+~ԕ EQfΡvӃ}H=$o 8 aVm @'9%viQ9~w5YKujLos[l4ͷ):bp <[!j¢w:oD;2)v(,T:\)o~ Ʋ%kG%PM&҃zQ L"2[.l:3GB,ٟGhRLE ?*j4Cz%U.> {=r¬XK*+ԝ_{!Tqڇ~Q3e ҳ 6;:`65MuO$`=7nxXz׶m$V<.IhU2=r2T_ÏE4!W`Woq:э;szm&S8M'lH'$V`ZJ;V%v5rXVSvaI43xU;7 >8o'ٰQ"2[Y h>HCĶN1OuwB3ɌQ O sձ֋[CV`Ihj4W0OؕêdZ`ky$^?&g|F#bC։nTТ_u>Zst=)GVG2ӉC IDAT{۩ءE 0C.iߋWtc舰G{)Kb9jq4UǖMiKZRm鐚fM%_9LVhYo.B;H9h"ǨE$>wY3sm ,K\(/^v*{3J3d:hᜰ+vm;\Epn }lޟ (iؾ7eNk&8ݘz qJf7 e˴h|.E-M |Urم6RĠƜΜDI;o=Pb;&}U+h-nst=z2#,MbqC+\2X#i1W3wDȺ3NQ eäMpeNp$bL _<4db۴^pg7LiiFR@I @xg$}4Y=,sq܌3hNnmŅPi>u֭Tq`"Vè$!Ijqm}H7e. 2\v;u;pgG~h_ʣB@&HQ2,e V6yVs&^353`#]9DA@AҘc3Q_?YL2'DiZVoؔW[%bY>~sI3ȉiO<V*:➼$PCUqv{_R(qiůM%j1+{SKt0t]ij)OWDa{@?Z&)䅴Dv`CdӑsrGD&|E>ֱ@ND3e?%*Q$zwfAF.̨NOVO ~lZgx3,.B 7AUR20T4:zҜKܦXt3Sc d9{T\UHy-Iو\^ Yʜ>0s=|b]DK_K0rBk :շ$yLs ~kt_ ām!WL2H x~dc]څx7~VCaN1 Z$En_],K`\9Aߖ J VyW}x.XZQj2pYQ`nZݭ4y, h49O8hZ &(JS; [A-X8--%g9TFOڷhi}=Z3(ݺ̏SuA ;!ä,6.4`HtCs3e&<š`S GQp3ZzB$hbKnMRopC'" a8l )dxPp*ϭj q97]4U+Ix!,vDVU rT?i9%\[<nHubt{ n>qngcaH3dHZ/}~9 z #hS \]фGl-Khɲ.X6ySaPAl|x~L%ńA =-DO s܈a5e0١`_q'r^|-k`o#n'd7H XE囃W1JpMu;}_6 a`;|VN=\ @[OM L9~LcE)38'ag8Iunr`e`bd==Z -|`Նq~h=aNY_{% }9Z<Q<@QEνUW'PYrA}m}xQm݈v_ ,\_0v c+lLe}n%}dxq2p2 ւnAC`*Pp: Dcs# .H>B?fg-Ɏc"a}b\13{bdܧޖ/t`kKꊻQԅCLxJZ`7񼾯9_˓4z/& S},qbg.oΑ]ߢf/mnX`46.l?'^7腅 % @EMĿ2ꏯUʠ"J¢ R↦&̯,ebGE0!t>MaR({H%6tHȞʧ(t*㧷:^"!Ja^e%-R%䢔#a%e I@XHeﰽ{tE7l`ۜD!vN?Nr4»"?~uzrK1YT$`P ˮ4<%$ 3KFin%%= 9'η=lG :%lIU2C0DCk/D吣e U6LyGKh;w7G &h&땚1|>{YVhf<)(0UU21SI:dPJ^Kg6+,PxF]S _V ֜mރkL!6PRa Y%dzAPuy(% cg-RbA j~m?yNx|/]}z$s`84#a a% oYV/(*9OIz hHygżwn[pRÒn1njVoʻזɨ  ۟:p YeveG^) 1wn{aXZC/Lhl$&gÆŸ>r*79vOLWkK w.Ya^7vL-# K. v ``¤~E΄,R*s^^NX\-r$1c:~O X}sHRelLL2ƞlS)D 3ێjYn*TѾIW90Smp` z RW=:Uub_ O#0%@tH>r(|QjډxvhLmu׌`P]@ X¬es^P74c1Y `^I?N1aqD!ƻ%qKA&ͣdOgg` ph(cK0ŻؖJpn}Œgg!ԃ` 3qLDR q~k^Li'nh1h8ՒwJSlH\P^W+P]佡$C~# ;e&bDx/8.8-LCIH!wzO9)@W0%0r;":ș]oTp{=~j@gdo̶/wMh7'RL~1ĥRh\-oӉ%,d2T0]Vu.LҤ׶1n3p¤7)73L  sXD`y1!mog#KA*B`KkNE}c ,*~͹Y_i"τR(͘_ا0 WEX/KivK2/-=_Vè;#e,͹d9H8XY4$ޞ.2 CLa`f $n̓؎l1y`:R . , ☿ aC].X۰~_uv7R\V_@K[:%n\!暑 YbE[8l^uZthiHYw*́^^̀o1{RW-`oFh ҾȜnyx!bzSSIDYC%C,LP#ӯN7 'i$9NYmda)8W,XPNS11 "Ft)K4!8zxeXuyDW2"aY8ro/|e-}Uz9êo~DmL$3A3 Š耦_%[| ,Cc cTf\H ZF<{yŤhU>K*A/,O|b7xr:F {u;ނlzeӂ؝& ~'a8QQY*rPR4EO/Mw%1:=]dUǑif$\+N]PQn㞙IfGfH]wWRa|Tm v`bͨ::r-?:ނ&rl~?!R}pMγrTv^`64$A)}TC6-ICg)-_t@VO9nf,LBo0q5Sa X,nqr\y'pB K~IuBXE>79XX>^G(їt" r]$HM*aN熟|ݿ_AHVGɢ#=غ5cJ[l ڐz\YcY_iŰ4Gclz*yEEb7¡>^!tQ/0GhصA!rX&"F9I.ouO)ďaHg\ Ud]+WUWPƤz#9ЬqytZ O@brv ӗ{WXtT-JsA**bSP(lM0V~3! nG7㘗"i̻Eq2(Q.]Z5Vl|wP}ɃXKtvp)zD珴NPD37% !6z =DE S:ZM՝V <7o.@\q:bUI~1cm0/t#͙:HǃL8su:xѲ=c6 iwot'|i3! օ1_  x.k2@h*a ~s1 >$DO+Zz;7U8sL#" 6hWFYﵞ](/#L2A-ȵ"M8VSQox]oMr W\Wu] mԜJccyR[:=c)[p]Ef6;GtlgNsԨSGff6T&D}+;TZZExk|qP}|C@v,BL*]K8u<:ÔE }$AXbI˞Е:;7l5*@Vr:pXDZتSv*N#}5™qOu01fY6UviD&/IqOAzXuv?y0g㬻gt E=9.hDeL8ĩJ)Wr^dcHX#.O'=sW?p Z H*ǜA'CndExUH[Yrv"~>ee7h[8mk̵E_н&7ٰ#Kޮʎ/;].v]m?Wb(u#xe׼("(\s`&~`"T އE#lkȥrsZeP"IKxép=9WVʹnp⏣/jٳFL!&qTO(i/&:}UnxW-NHc'h4X5Y&I+VO=k^Bԅ~)$eGAg;ݩD׹)癎c8,!cBq##)~/*E>.C+.ǧL[|!ǀXs' vW#,4F_LƄ' my6̏R"Lo8;o׈=ҍ_;DƨIa$BUgcoAty IDATl~QXp/UC/x:k:`5 ^;1ƙLݝ8[ [oa_.: q 4񚐃hUKRqjB &FIoa*;:V? Q 'XIMӷF9kևT~t=( ߭M`5QQ TW֬jEDETD:#pfOYllo,2ZƗ&󌆡x8VWldöE"S\V3%u`!2x1J7M0$[N]Px耡ٽzujX[Mϵǘ*pKg6a4PIfYJ 1n{jEE_c#9"'|-@5{W͸4*I sK+R}lÅUj5n`)ڝ_7国Lpz]32im Mm}pZ..eĄ%X6Q*~ JG:9.bl B,:.41=~ tuEOD6'`̎ecYJ{t}}l鸀5kLV>?jƵJMi"N9h*]ߧlI8UDQXP\5*;TB]4Ȑ|L]3JF5 #XU 5r[L~nQZlIN}Xa |EK( P1pK[*:$ MVWggAx79X" O^4Gtq i"zzrj[|IsJC\PcwuzUGh<"Jzv/D*}~:ҲSIK/1-,8.`(: bcTk1ykj}bPӳd4.rT@byŠOHX"< }R(b'N[Scz1}c$*盛γڵ܆ $U0Z(뱭's DXE^J^J;;}Ԥ@6۟SKܶ`7=('N,ճȎYfBY0kjj)\^?8g[,l],q^{#` eXގE%JttCx'e>LB^KpwOzG<ܕ. Pk xWCӯ16ypY]{n._h~ ~㯔S1wOf36<\3OI@aivfq~P* W&Y:!qYjv1;/8.da-޿F8vk~JOGǷtM,lDd9㬰X U$ByGڕwWN"$\f}m6VJ!_ yFvV) ''VT9#^83qc_UZ/h þKxX ņ@Mr^U33˼L#nvV;It [^ntq:7c"aa&PkD~<йlcG@ ug,Iҡ#?'bjO `)_deQx{2x"M[8l&WYpmj50zuwugzĺ^mt+RgNMn]7T<1i"*z1;X%hJ UW&a8Xܿpqт9IT c1Kw8y-* UH3 fuI4oMN+Ԑ6l#obD D$^;ˑtp*Ox\Ws}ϟ-,Lmm:wHM CwiŞ^zx֔d&#Ȍ j%͎C1UX+F:Uvȥq.&e)|ovccat')QIʦb0{IZ0{_^Xm $D_g̤9KXjp޳; `ZS:u<|{z| Hz EYxAQ=#i6QTW) P#5_{igV7h7B(@Lfٱ"QlW&{~ vyeDPs9L^z7Yar)HNHoo50!TO*+$$ʙs0`Hb) hM%5d"HH駿:}=e?+.p4*Ecޏ?{g ] &8B)j(z,p5/Ohs'H?7e8K)kt,A =Nz1]o0u0`e!-PUsM{w}AӢ8ŻV"5 ّo1dAb0?ƒ3$|N-̈́B"0zQ: lٓvٰừqkz:#6;.p46۞kwGF{6^oɤm}X&JVCGS*z54#1 RWf#%KU,cG;|#!aӋ3UM紊qO!'BuA4Q#i$x&A7q4Vu$ob786lqc5 bFЌQF=D٦h(3;Mg$ hSmgilSoj&6 j|uX,g멸R">6߉ij-dd!&nj [F'K1FW!zl1 Q #zYu>ls ߖLGp tPS )da\&X%TM;zO|sڈIy^-VMm~ "pGW0>)45smׯGȉz>r)>F䁲tv0Fw }[b 񼪏7qcDI,Py ;@2^hh ʥE?ˇWgw eBɐd/2i߯&x#yE/ m"ȵMnz_ ѩV?ɍg?*[33w}@NdO;HE b?umuHcnyB_.'ӲwJL5gO(qmewtyYdŽ%ܒ*RQcME s ;3@Oi6I(`=\,~}kg/E8Ds@qVBDfLԣF,71cf/'Ij9>ĺ[=$.0V)x"hX(w8rp_I0#(qIP:#N\GӘ$2= n$էӺ޾r$}& <|g7:OųݓFX`vƧۼpMOEAu4]$:h6N^#hBEUP Uګ 2{d6<0F,W*A͙(6]lx$f.Yd 0`>@EȍQ0CCclrNM{D>uC(uϟLM'c4+j_;sң(bCkST-ڂzm/9ṦN>9za>eaC^5vnz_pj;v,/ 1i_Yn < E /!P %Yw'Axu9;zc }mx^y'qiY|Ţ%䣲0j#c6BYh .2HoO8dj$Bĺu@I`g߾M#"^<%]"Ђ\I+3a“U[`jմp &XywLTkD>hq:ckUNUE~ mAE|?AM:S{'b/ 8k:؀)ְGjCῂEG7Vb! \8}".Z;c6Ub0?JD6Awυ#Y%nvX&,<c_= JaV^}Gy|1)xa+*SO_G֜jED] .pqn]x'ILu ~sHAۏ'u\U)<]_ITL:( fDa\3B\'NUdi=}ʚ̪$Ij| ƺ=D&"o P-rh[՗ӗRR%3%9DƠWBQt3mcЏg/^ՃY:q՞UNi (m5)Ձ-ާ){\fك?{'s}fp w9ra Qzkΰx+gUC;T4OhˑE8C̲!w-c Id}$}U]"KSj^c=W8fp1c.OGwu8% QΞ-h׮ޝqzʍah}?k/ bk)->WQtA[ū9ל=FD֯XL3w@U|wzu'fL~Z3J92CT-{,0UeO 2``{G42 K+xᴶEV8'_w8bx80Hm[^\>?gd2`0W{ %>% m-ww_Ҳj5..r"WU :7DTp5K lj}}ͪPǔ(Ig=#HTC.'X8 :TiDks9%ÉO 3!A^b zfQ3nlki] V^_qO#]W,hUwp@@,XXI6LY]2& &)9r~u .FoðX#wqo1yoo.|cvqb 1L~Si2S<'[Ϥwɘ [O?t^og"\4wor.:AySCpu'BֺߥCn}yL}ޙצRϹ^KrGb2dEyZyE?q 0uBphlXhܩSv'rY60;"?k]>|۷?{ē!7Pc ;cgd޻Oąܢ?w?} ̏rI:śN{&~l_ M'!^~P%ڪ&bK ɖە2v>jTr΅dS [U+}لtZ2|=@' @kv>#칈DqV?;RNj۳o?ɫC]p8Bi|>$9 d6\ ?~N{I)O뢘>9xmh67j^@9 &004_{pWs+P3wm y/PN']{@ &.Jg#FG d(hK$eebVȿr,vxGbwKl!c't!|U!x/dӷ:jGzu}0܋/g6)w % KKVt_l_u_M|!~|id7]?Iލ3 BO]|55x)?l.S?[)) nqfc 3-Σ={QdM!Cff7Z1= M2QðK0t$޿%^}o"oz*{ϑ caгz_9[lXysC۟}tn4<g97gן5_pj Ҝa(S&>82OiRk];;h𤌟16d9 t1 ӯӋPը?N[{Gp5-.jd5rx4q&of[tpLZEUcyuO/8! y"y_ӓ+vwݶm:=> @win32_inst_script@; \ done # 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: lbreakout2-2.6.5/client/gfx/Oz/Makefile.am0000664000175000017500000000100012140767210015176 00000000000000EXTRA_DIST = back0.png back1.png back2.png back3.png back4.png \ bricks.png fr_left.png fr_right.png fr_top.png \ life.png paddle.png \ README install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/gfx/Oz @for file in $(EXTRA_DIST); do\ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/gfx/Oz/$$file;\ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\gfx\\Oz\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done lbreakout2-2.6.5/client/gfx/Oz/life.png0000664000175000017500000000635512140767210014611 00000000000000PNG  IHDR(<obKGDC pHYs K K5]tIMET zIDATxKUrຝ^[?v 03D3($RvOd]C~G,Bf!nvUehD HQkqUSQW%?Z.\]ιCجwvvl4ozU0B4DD׃vK`Њw1F6t@VF/K.)pf(n'wjYfQ+4kB&C'i*ﵔC O9)bjyQ>` 99G.H:w6 [mӮ tԣzcTD RJF\")u}_T'qkԴ6w9e(ȠL}וx$nrI=h]c"0rوoO)fS45٬+0 1QO TpH*14M-KӴ$SeC&3M9)W@ 褘9283h]78,j\kDA \ "Z4e@fcqFH{&ɥKA948Ƹ[uףr$huF}ԉ?srkm*$_W.MU-BKՃWx鳃>+>}:="期{x<x:8qBD]Mӏ>c=e:ybIS$؊ 1 ;aCkoqb眻rٳgB]׭kD캎өs.猈ͦmtX,Fѫ/v9F@#5 T"2&I]9fn6x=M bJEd>LDE4DRJ)m 9f/YDL"Sňvw>/ϝ;駟.  !loo_~]U⋶mW"2]vm:^xn߾ݶfygYƍW^ %CC˅_YF#>x-ݻwy4u]7sUfާڶ ![_~e49wu2 $Ͳ\-Ǝj*f]loo/s^Vd2i&8ϻjժizmz}Νf^lVfJѸk"'HK_>u fgyﻮ[.{D||V+"޼yswww8bQJ9::2ڻv8$bVTU3ꚈIS2­AzOq^@y^7Mm۶mK)ٌ'ǏPD [ Q6COȄ$@ĔXVS{qkk âsS@B;H``PH؝j̈Yag/_ev`6/MWTCTu)Y)t!! Wvh0b\@M U$kQSS`y zD(), O5ٺbO|]ou+d`!rš[abQUc7;U_/.^rRn~`G~XއR5}c˝ils%.e4nrFnxo߹}b?K$@iw?q7r<Ϝwypb6aѨ=s1W- ½ Of]rl9ѕgW|=bjaM-nzضwOC)_K't;U::zhE]x;5_|w tj H,6M]aXvi.sf<:zHU%7jW&w'ԉns'? 9`QpNd1)i3#&t'?0 \_?4'zb'zbSsyᬊ,'3#WpXrbm JQ#0Qmļ4M#uU}/sy35D@CFr'"͎CxqΙ"sN0"SE4 рI;\%g1RL]`hh14EA;:9) RL)᠖"ْa$C1ߚ+LBĮTջ,R) BJ<3i(9ƺyb`LP219,x !7eEQͳGAU\1"]^UJ%Qf&`B=h3YfSPUEb_bV Q1c&"fшHs#K grJĤ #*B JղUS3s*ctBŬ0;$, J YzRe!rBo71R.JSEqΙE*\J&b$ffU]9;%Ȋ*j`\r&N #bLdfDB(HhNZ`HY r%ߚKJ.%3jHT  bJB,DBD",VE1U DEřAQcxl.vse?US%щ|\$.kqM4b'ifq IENDB`lbreakout2-2.6.5/client/gfx/Oz/back3.png0000664000175000017500000015171112140767210014652 00000000000000PNG  IHDRkXTgAMA aPLTERzR6f>"vN2rJ.fB&fJZ2bJzB&b:^BnF*~Z>rB"r>n:R6j2zJ*n>R2vF&f2j:N2N.V:vB"R* rB*^6j:vZj:~N.n>&~J*^* vF.rVzJ2Z:R2b:&f2nRrB&b:"j:"~N2n>n>"V6b2nB.f>*fB*f>&Z>^>vF*V.zF.R6Z:~N6vB*^:fJrF&bBf6zJ.^6rF.b:^.n:"j>f6b.V>R:jNvJ6^6~J2rJ2jB&r>"nB"~R>R6bFf:bBV&vN6Z>j>^.r>&j>"N6Z* b2^FzR:ZBf6zB*R:n:vJ*j>&N"jB*vB&nB*V>f:"^>j6^.jNbJnB&zF&V:Z2~F*j6ZBZ*jJb6vJ2V>R&b.V:~R2ZB^FzN.~V>~J.V.Z&b6V*fNN2rF*zN6^FZ.b.nR~V:nF.bJ^2Z*f:fFn6zF*^*^Bf2~R:^Fb6vF2b2Z.jNfNV& ^*zN2rR^2R"jR^Br:v>"fNbJZ>vJ.zbR&jRjRnVV*rB.~R6z^n>*zJ6f6R>ZF^2Z>V*f:&Z.r:V>nRZ& j>*R& j:&rF2j6rZbNN6nVrZzF2~N:bFf6"VBbFr>*^BbNb6V&V* R"fJrVzbRetRNS@fbKGDH pHYs  @AtIME-b IDATx}9+{k3S-fnM::s7-cܾido [MP~ 0:ucV'u%d#RRWB9KYWrc[J!_pְ`~}z44./-x G;7>޽z8g&$[@’O_ޚP7.TaAG #%Ep]su{~sx8rï;R7.UBqcLZ[H4eiT̬NC?#"޷AÝ+y?ڏ.|g?br=TDz$41{B=7zpUbTIDf'wW霖>wH ^ Ɵ~eɢ ֖$T2VᓨH7vQ;\-wM߼>S#VD*%CP#RIK.&X0bצָط֣iqpϘSpwүN|滽8z#o"??]ҷiނwRsf=_>fS!,׮m,]}l{)w kc/tN˗X^Z(Ow[y"&sݾ;FQ/~ {sD* GCQve ;#Q Ǫ?Bw>~L V$&t[ßň{_Eu~̷~>}awQw|I!yN]hkޛFJjX VdvoY{'/׍?/}iސ^(7Ͳ M.$}hgwаw?PdƟBA5Ԋ,DX+XQ`ߙR#җy=Ŏ++?~D? _x: ~GOW 㯋/w߹)^?bѥYD]<S,>ַ.'/?jar]\K+ }PӀ]DdZ6[%BZj<;U 4{`)6"c=\ܩ4s>ы~uA/|_]~tOn/\\jm\x .v!53.kzGv6*'ݍm$l$IhƓ?e77_^I ^i! )eH%{F˻ys aæ ` qnYEZbIHyö=6%6N븅:5K։R RPT9HyzT.~>E=~ߺ؟H[}Z%߽XQ48i?zz~:fM Rxj2Nݗ8쯰]+k5Lۦʱ9Ըn酚 ˺:?fxtCT }+Qf*">( j[%6LV1j1Xz*w׻W?y7ͫ^~kq]|ozY<_zQ5{1->*S.4hc['7I"ڣ8kT@^iPjAB ?F> :&[Hga\(J/baÁ$@n4ֶ|qox>ԡh2!qQ.7? y';'p&s2[_7F77kըZ}!nsԃ{TGm4:K_MM9ȳ n;A2UJQ>ꨅG5p804qaߚI\3]LPfBɯ}~(a^ |(ӽޅ;2/sըqNfʿՅo~~s/V<޼v* "5b ֐wf$$JB+XNm:a֛P Bp#1hB1 _.+WYIƍw[ :L4 `7dC-պ,'֏NzX^[^ ͝m02yo|UpU8}q7x ^j'cnἜRABL;q+"njxd*~ ۂUe0X-NѽeQ,_-`)kek Z bo2 5t 25;@~Z=_R/⎴?<>_ZՃjs{aOňs#2Qg~YknR@8MB0Inc ]KJĵV̡~5DtЈPQpAaS+tŽTx:-K+EƊ6X~ `*RC`2d*n/"qa~c|uؿ;9.bgG KOЌ _'Z;.5N 8f|OufK4OMw[c%Lg d;04;Fe+P(h8֊+Ab8U+Zy-q siJmx`pwoAtKn'X4}BX;m!)Il'cnBuiJq;)bHAB$BҔ@̴r,'?Uf,Pk^?DQ9ղ/`8>ƭjok4QP{{Ճ~] &ʅuՋ w~3#Ni|!wn1̇ڤNS %M GlEisw4\dh'Bغ-V2Frȕ[efVCtOn!a9*8.8>P4JA4iy/3F՝{WGs?7zO^./=l'z{f.>.D; 4x4ǐ|Wz>Q &jq$`6V8P5̜\f$hقz)Ċ؁ @bۻ]]Uk2Mt?_ %v64#*<5Dxo*aN ͱsDWVb<]-b|4]%=: ?\|G"hG PF#tnP{?%i;>2sR@jm=2M{Z_t P;R qJ"2.^vwKc -00 Y.<@pX .%‘fUVr纭"wCsiKkb>wER7MMxҩܥт~ݯ<TEBT k7h3VS*ۖmk F`ro4*_N揟< ޢM\*J& d{ğ"7W-ZH$ _Mz Ю"hӌ,"U驪BPGJut 08uW;4TW]T_pwWrsY`_`y݇vɔuw=$@w$B !TDD|H4#F(j+:(>"PZLV؉n ^ziu`IjW"٦vP{"cL&>Sh Q>?n<u^M〬 I dF7="p<{7n\n Pׁ{i 'G?]泗ܟ=H4GA!l2yNi,:4#A#{h <؎p $ YߚNVNyai:ԤJe/C~lkܔDjBfwc>CϡY%vflaOs0'.'1#fS}NEh-&L-U_0*kJ4!xvZ?n}3(4`/`Nذg-.5N[IhMErbuuy-:2E}3{)WׂcyhFQPQ^"HQq"4zz珻=jA9G!wgͣzkW%B-u  #ND̠КE"s<{fW#w&OADZ*,Fqő /m rvU2;gTE&@\ < Dfwb'Eg[%e R2({穝aV1nr#`kR 6)&LQX׬֎Y쨼BS& |h>?rSJ4JyOo"s!FFj.>:MI)xMs~669&@ȱUX#uu-FsG7ۋs(+a}_8C3%1sv}p<#E.iU& 4TȎH+ l36MǑ$E_ޖy|[P8 iQZzKҸX7VR)]Y@Zp 1A\lQMV͊1=&Be,j-2YM0wH|7gp2?cY_MEhZ;lGJ/⚠a୘ ],ZPHPJr4B+lzDB!6Ih vp J# ]:N*{ˌ(%#jBb ;4Mg㹃a?ZU~a0;^@&zP՞ 5MX("ڂ <;EM! HsYJSaרS6P+&ȺR׊132oJOhv7%kP:xϘT:[Yr&0}X N?KVp D!hAU=фVܞ/ީ٢,hUPo@)̋7AE[7ksϿ;HK#' d}0HX:;xum =-Ow:ݱ^4EIJ2#gV,*ZA#N и@cV`^Oh kb6Ēet^.8@Jݼ9X@LջH Dqu&@ @utxq YVـ"а"bRۃ,~$2PcP6UxGd +bԀ&|(1iLg@p ;2lYclym7 ҎTJWQ*ɲLɘɐ)n 9jvmLjxP}D'p;{#ꏼo`pT3_*|j @$ K+ M1j1ǚђ!p@0=ȃirkVR Ýfv%S$ d| 3Y6<{z=(;Ab7J}`B:qk(*Tl$& IDAThqnoC{VR=0K" 2G7ozW{6ii&7xOu~Lw&₡ IinrQ;0^-v)N9 cK7:ƢStSL$'Z |csR@,F+6F"fYX/cIvq6 HH,!X2C׭hn]Xf #"7i(_Y;Pxvxv"3e+:J%`!k}E] - (&J\6fkz (IilˉL1ؖ_P̝C"Z9I9,(į=|`vjfP yVIXQf',gD!#a0!^r;:,`-Mt>FN9"<2ܜǀQ80iBEϿpVsZpgqs`JV idhҸⴃ\`V,- #"g 8necH7X!͡qP\j@ftC##W`e 8eӿґ]ZMv#g6P\o |2ف_8BFMx.0-) te]ͳc ]aDggĨe5?'Pd"=fSb6M% >qi[M-F +~"rŘUqwOJk'U  *WӤ hBb֑)-"4{<&/ D #>Q}]%rݜл{!_)׈\v f@`H"` p3Y;NŘL >Vھ. `Z*|Akf3 1iGA߳EJI+AK[$vᐠĊ"r 8?}NW,;/j`W ]&{H? =qS?_)xQ^Z?|w~k <}#pJHGRs`F&^è-$ohTE"Xi%"Am[qvI cAJ嫍1jLk=,g1;0[a囝kmY+r_bAoQrEKU1#Pߞ1,F '`vJG~5Z|{hD?ܜ]u)E0QAQZ!1$6ZԆ,Lkn) X;˓k[cJB0RK j&kKץfm1 ; ASI>3CaLB u@Md^-,z5JKϷ`6 ) i7tg!2/WMnLSM+BD9ɺ1-_AN7U 8sNav8InEYV=x33J5wj-&)TvT~`z4!N`AYk$}Cyv% lcTl4 *b(9Ǎ'`: HkeyE-䳻mEȚ0>z^+"} AZ='kWɽ[è{59F\CXxF9|A&m'F:JTْ]Pƥq`E°fTJK,dV АaPjm'i> 4Wan%w#1I#yf;B7?T* Cf=kLJ;Qky^o(SGnkS',kwON(:-"('4:jbԼj}aH4E,[tmʰ1kڱlA1t1$-<(q+OwԪS>\"qX`H :CIZt4d|ve|8(^od[S }nu5z ןy~ nDƛUyCG?nK=_ E PPۃYS=$v{9gw.f.t="Vv  C/ [Su +EmN41PٙCA*T] ã{r@gj Ćt%~>p&M_fx{ A b cS"SŅνm2:9ANK2xyJETm `Bt/;;U>8- B,RQs;̶sC24Jci+(AZ^+ 4S.sU ;(#1ke㥗KۀF6?nO,>; "N ;O^z TZ윑q8;s m7goޞzW]{*fvi3IZT,óLH9-ε^Opp(zy9hrUIW(mbhqv(dyn>ݤiФ],JDA= Ad ȊV0Z!*&; +LmCVB|r\dE`*} j4ч #)|h9@M^,<r$`Lin}3DU7Wx1-/[m  Ol#<-@Cs-r%h{h ߍ:, >I)X7zypy0=pJliRXC Y̊VeH[,MqiwcٱD"?tClH66"8Vbf Ɛ J/fof{^4D^>Ч<lzym2ѴOTrsP}Wm6kz5K. i.N^7dܥrg5ZǦIj>L8.4 jAK[|Tj*JD]=pDf]I ǰ-߇\ 58ȗii흚jGTo[<.#!T1"W2!\SVyք؍ Q!!ʮȊ!}Ȃ:V]Njb$m d.KTS45k-X7XXmmn%+vRt81.dCFFqmStB"8"RjǮ|kW|2߷ի066]ykmܬ4,X _{z[>q>|ctTY*Y5hviHda`ͺfזH|ޤtC@Rvacq PNRP*mBa(ʖeXlf-'` Jviv7A終d-\%}qFi? VVWH_;\๨6W'2:A Щ5Ȩd]7 >!ݺ=3Rh$T)cMtsI7MdKzyڝN;A{ոHnbsd{.'*P*َo[V4fZN A/8Fve 뾶[g`P U۪7$ZjN 1]!&*ť[c i DzoVrTbXެ6{\Yܸ#=?MA9޽͈gjDᐦ@HPb`".z#WA)@Ah߽33<4=dڐ# 4\&O~ Pnj!Lmvyp8fˁReFeMNXk_(=b-bx @m<59it2; Z\F3M35}rC挶,HGb#Ĭ Pхك焬4W -`UE"SJlkŢ·DVh`ox) [ÎJ6,R6y*Jc`ލ$zLb9)o |84ON{r+ִco-섽<졯4TRNsiQþg.6ѡk/E(]N &1E$H*tTY7N\iBPt){d6l#5ۉHe0@5~av_/HӴ(UHI~ )(埏U!D)@\rմ6oZNFTZ@Z(݃ 1aPtm8꜡c4d8p i" a%"98 >Z`h7Mewtы,:k{ QDvo`#pb&7W[\E ! *ƨ햘e|Ύn>i=Ϣ 5=Șŵ崉uʋ~vybPqvsEqDAv} m94!3SUq2 Biyp(]g|5ggFE&Te!8³ U55y9Eŝn!P1yߌh>VYwqg$Wzi55tf*lysǛeՈ]Z<4X+3.v#HI0"()N85IHA{je(fxsE$*LPmht)UoI]HIȍt"_$nkJ@pf^&Xg4#]JY)OW+O&֓_Y'@dss$󛛑PW/޻|~JI.mr*j{{Ѐ..aa0T~zQvD6=~H F.|>͖;HOPF\#cJ4b T]ͩBb#_k葯k\=]#xfs^|ײSwc*-Nml!$ғOݫ ql\ /Byye Z vIP(mKސcTp"#$~Bv&h#D9dx@Xu*)^$qnĪFULAבW՘i?j!zQa7tr{u?ޣy }9x{o;羱Yڽ||@CYHv!i"|%0rp*M@ٚM'k NV{m#oL!E֬dZ P'!zB$Z=e]'O*iю @4mr1oy-T FZf;fC'6Kgxꩧ^3#D04w/?q0ycD4ݕ!.AD[Q:Gf. }( IњR?Lpn xdL xv#sZD!*t&>8JWwIgG9zN\"G^yӪ*ѕgH f5£םΣkK׊x{SE&HWWK;!T.+=S<}TȥLÀ剜<!- gYAڑ Tq$Pu6FjKkd jҪ<ď{lbEf [L@hvACno+, !x&HչPE=op6DO:ފۅƷ h8]Sc5EWRžx1kdڗ, }Yc(R}omo|yC5fS*t]E̟4%AT2X3rˢMȢ0Ñ-[\.FVYJ, $GkT3N l~sf"RBC};ܩ^+ f&l*6#ZLV]z}I {̣/m[+PW4Q}>stW>xy5o߾| "3րU*: hz6hv>"C5LS"]-ֳ-qrvh0lmW/h~zSEvJ#7v^(Wl{źgOv>˖>ؓ׮w Fo1[axq]ilS:N[́`Ǧy,uM%TpU H%5+0FlԂ@-(Z^4$-+p2DսIQON;wqBgvO<>%{+'WV<7VOua>⨤#$2~>%R$B{qJDQzB($1?שV1+ gF8 'T_%6* -g[5bf|\B5ןx4=wN ؽ^AƈȫE$.:Ot_x>|1:}s4i)`k[gXIm򧷷o}4mUWSB0ց\h4PX/*kGh;_%xr'WVO<dN|-# XWW}ok AhسC =Jq(jǬ jU=aў^2'AB;=W) 9!s2EXχ݋^ڕy&x<)Eް!4)4t/F?>t9=q:łЃq5aR7a=e5tA兩P'5)iB@$7E*Ȟ鱲Af(WYK9T5vRARӐVSJ)YlBt,3k(b{kM,DOΨK2٥aK[n{(ʍEk,$A̛ЉD?bgYouA(o [oO|'_?t pO Gv6K=ZCx$#)yXt Y'G8V%0y=*0p AB,9W14z=elW]fl-\ D_ ~u|hǁ{+D*!?$`m'|{FCGcOwjB1U`Ђg=͗WDdTOno)ܫlqB= &)4bGӰ<2 噐/3xÀ'hwl r(cyxuMs9‚:mP5)4 !۫ \:Hߴ8Ϩh,Im\h0qpPm*[wVgy3ݝO<Տ r{9Ǐ >)D,?թS}qyɶ&r %rJPq/mzIQa”Y bєJX}'l,,ciJc&: d2;SD͢8VAK䏉)!]{3}PP3 -d_"I)ӮVAbt tA>t7xد-MʩI@nomd{!a5O;y'}=z^MDth V {"so(}Mk1/q۳DoHְ]5 l*&P pѯⴣ,CC֒ XV4OUQ֮{u۾6%kH7;WT_Qtw(bǃ $X5{}6j ΁ο:>OO;İ%x{y оr)򣂎1@- nqX_dxs*Ix]ƪ8a1^5-b4`{jYd-'!8 s\n ΰ9:53d)5iqXIMO GӪn?ĂRtźW.=A$IF)pBCi{=q"86|ilx1ЀsV/Nw@C<e9Qw 5e#sxG"*Htxx_Pa||G#ȉUǼP8k~/: Cb17<J8^ +pqZL.>LGhأӱch'ʚ"X;{FV9ex+'µ4Y{%K ;̧&7R8K{ lQ'x+T-Yauzg812qC˲'ii- X"@ ,AS!wR,c#[O-N@ +GvRuP!B`tsm(l)Rm+<_eR@LJ"!_XT0J[sw@ÃDd,@9!% kiUfyZHyg{v浍cB#'eY;֡DB)>,, ث4ߧ3X Pw&b"iД4 IICb)UeR4 j(5G`;9%ɡ !BVASjĨ'>G `WPBR$+C%`gI$RH0‰ Ç+\x{Yb#$F,1Z$!ߧ< ^R5VC\qi8}VǢ"tjȚ*1OL5 :̪rZ{ci",&Uw d1ZlP/(3q\,$ƲX"/0S>CoYF0=ErJ8zN|ri9t;N}!)xn2 %}.ˏ3lTnR䴐47<-W}HZ[U5J@ *k&O P-stIXٶV+ $TxJłUHl|=:DDJ;jwӐ7=dK8ngiH- fv8dbKۦ H*9R Ԙ{ڕ ˋAM$|tV,2! j (V5A30!}'@4ڋ42QfC@*(]5l3%s' r6fU)A,0.N>Wr7%|dcZTGuվn8S]XZ?8;|-4#` AiD9ckkKTKUMsNd& $ t6,"4\o]  cv@0IaE;E)NdM>ؗ*)a,Գ8hI U eZ,%<*+ꘑW<23e"^,%L X_#3CDTh1t=}/1\顦F,$6`3&ʲONe5kN<> T ֓GC3ťPXX"&mm٦[6#RĊ )'wf{^!%WU FF|~nׇPJBY mtW+ +L,U^Nj<t^!s+oHcarJY#P5fѷ)@W?_{TH\glEFtI!mYVT橵Ec^ydo>3J%>` ЄY[ZP"BY(Ñd6>H4n8zeg$\6nv?te6d,JP B.ɋ݋4a|4*/A.<yZZ\NnS:Bi?8PR>otz$^X8^dD1qf.fv  y݃4 iI4Ey 8Gr^<П:rٙpo433Y4\W~DAg=L; q@E19j'*.^Q(kL{z/&,"YzFkOh_mzpVsN/?eqVK$"j)۰HozfE`~O]LU J9еMӜ\!~_rl*?%GK!#\sR@+|d|T*g`i@! + \*8ZEЖϯ2Kז.'emy +@֞aYT9ې/`1+&^8GVy-s@ﱢai b׏TPTdz֨' KSټi2,͜?*R@='ƱQ[ԨZӱ@O$e9;da =%Edge=r N~88y+DVm-ّu)1߂%*w Ə[$7 15K0A=CgOjԖk4k%H`J#@\dR8 e'✧y9It8L D"BtP"ҹ%hT^h15Pi˪Y>As&+gl`J1? =g͐٨/b TYD(z*@NF4m* -A I^,6Pt Ԋ?94 EK3.EӍ&!gapKdv˱nLHb|`tV=He5?ݖck׮]`ThQc@R{#}o)S~UeM3Ǒb[q~j2 $cf}ۦQ$K3-edP !J'I15PS4tE&U- K/5}e~0+AMWF99)Idr'Ed=9|vOD<")]),oK)#Q ;O ݃-;'Ţ+*ʁzw+clyRZ y [D* >I*55T=?9@-s1(o; Cx_Ex6gT5|+EN|8rp8rA*6< r>(o\`U]}*/hO>n)0T48 KoQwꛛ|~>)C^! >qE3 @K% H,A:Qg 1Nu䩶!,兾g.+Ue 66˵rMYF-htg^b[UVz6p18|xVg:_,/ix-j#."oz_N:& ϓ))2,`/=wMups[Kc'g}H .'ʠS{=5=DB  :yTw(v;y2ϪʳPhveitziڗh.wˋm~Y/L8k.o?ԙ,dTw7EynJ/κYLS4q6yȴ\5ݝ'<̡]mfe6 ݉uL`Fȴ.f܉6;8ĚᅕѨ[t@ՇOӘyXwzIՖSՉQE9܀UN/BUT9UMє2XNWIZA02k~f3Sᵔc?7f\;H)Nwhq3]H5Y$*WVEpnrD~^s30k3l+:LZ|cY M^QKlxړO\9{_-HQGcQ (F IDAT) 1k1?5 ,X @i c UV>Tߩs;5.ԽϝR>oV?cϾfbm]p**/ *!nc2$6JN@TZbNI&wzV}3s7;zt9/]E=ngO5AK>Hr8ۋαQ=ځ_4Guyyu[| T^ @ji!JgG}vG\͸w,w)Ͽ2}ʾAm\Ko *g^ yuĔܧ)#wT 9N,K72U1 b7\ҙ{Ak|aͅ eWm`O|?y}>*bao; k?9r$9}nDMnbqδ^O&5Չ05y(qr ɤ>$j6,2Ikd[ojynʙKpϟ\/@@= 3eݪ_[@Kɚ(he%ukV b1 M%&rRΛw;+\VSjjn6EÒ!K'e)tHcX4cGd+x+a?{thIQ oZ|Ċ2};PΜrcΘȸAN?ñOrr~3Ȫc njUŽciYY:_sכ_y꫿}}n?\k&sjkzQhxCoixu@V>vF;ɇoG?;|1|1wM\z "+6H{9U)N=QG|=FӓA'F"1~5(t r"rYWOxp5?KQ#"MƐhխO诟_ŧ_~Ƨy ˛_ߵ}O}%Ռ_|j2>C~gS@_zGkk/]ݱ˟)#J,}ǞBRO_vbH,9&w56Q[X +O %,ssǭz݉f妭KI 塑dSe-͟h'jx4Ŏ&y;d4ǻw?w^~ ?7V7Ny\٧~H־{Z9./ ;$OFTՖS#x]Ǝ᳍e`HGYpljUTybXGSk ׇRhr7wqf^_q;Ω5ǛSe!"8+bjiFn:~v[۲K_,^ްҷsm E=HN۩ɇ:AP9}oZ^\ǟ$nlAo׫k@."b@5F5Gȵr/c?r}mjT "D !~c= $Ƣ\D8~-/Oih0 b]o 7w?mխr?rW[K>uƍS_j .oE LO X oICj.fUZҥuxc rDo?}xQ}G#Xv25/+z J.%ߜ(mXKĕnޯ)yq231'gJ1+KI%F1auF!DL36/hJ?|J%|%.vwA/;??]O6[7w3+BhgIT09o]E5sgc_?Dlc&||i4,/}ą~HI4N𰊒m,M{h& j֥C, L@q 0IJDAGijDߐ2%V:iT2yMmMX2/^z/Q&RŰ_f~s^l2Gm~5Ղ6D Ԁckm~z2(3ƌj+'~dj^84۽GPza[7}aYf5I=-u:ݨHI_Y %X3`sE-Tt\>`r~nqk.w'[񁭿0IrL\'QZ@3/7Q=ɂO;t:䓏FN%L .4kuWXZ9Fo4[ @p=Qnk힝{}rƮ,5'Ba*NAq|7aL(WiJ &A^7o _kuk"znzn>p;~TښO7j3 kD71wB6Gt2fF(t&;AF+#KQSEѳD%X{!d"U>en tvX[m?1vLa{AP̙QP6|ªSr̡zgd:P=il%p ;{}^f/,dW@U*5a_$zJaDTVPFy=*t:1 $nk:qwY5b֛gZ@Q_ʛ?MNs_|ͭ^0Ի?{7ﶚM2CosۚWn2o}\{}X3[3^ݼOk_l x#RH-' 4##}XYLM$#t^%SJ'b+mױUgÊ o(Fuglىo;Q!YL'515{MecRx@3 "|/|*@bݓ._~}˴&Zb?_!fj6u%rƷza9+ǍX3~x] 3_D;7Z[k3R@ʲoE:$UҠ!x\PC&.zs>!Bh :"NҖC_O ZNnh3=:Iv4=,FKGL* C f%ရ \ q]-G& oʸ) kw߹7[no[9^|wz쌪'[AEOSv]1QN׼04):P˙,bE ?b+y&(ЍZ)0ߏXBggT -Y3r\L@bN1 uxpIG7k_߱ 5ywB>eM3f_! JEčK&3-s_>Gaόk^`&W%hupc1Aj7@*,N $Y7Kg=ֻDVPe-!8-dTc%6l4k'ue 4fMS_)|{fN S,?~ԩܛz.ȣ{S'idLk|nΛ{ 7ګȫׯZ]ZI.W߳9T,&lVZBhRbzQTü`;2rCVռi[ c"1YE":4%%E;JN!D(F5*E vetI\tӮF'el9s{k^ W#(<1b;Ya $֠`pKu3JOݴih Qws;5~g GPI*1Vڈ-H)PL=M+vd T̴C>TY f9&[jUiXTE>u N 6Zw,m-ߐڒ?< fMW*=mճu큢WZ)|fZ+lzlsv6\oI"qղDq,|cSXVkI!jk;Is@DJSGib'b45vԴk/B 4v zע11[uH Ա/| ȰwƋnoIgibTF'/շ0S?~foݻ~͎kn_ossͲ[8`~_M5O!VCb{su|{^%wXa&ؖ-_(1,{őa5xpJbI=P$1"|a51vxFєUJJ'J <(Sc.Y'Z+e| Hy z`7 &k= ,x"?\}u5 &5/а3lSE$֬='B`QaJ\+@ iƙ!yz5&4Y1VP,eaU-]@(ę;r-)QڕM"{7)k sK刚!Ķ*{]װXT-b{6h,joY3_* ozgWǫ}=^}{](.HR5,Xzȭ\P;A8G2F,c8E6k*DBMjKֶЧ]6J6|G{3=Vϸ;S awԦww|0@n6`%x> fLo)(21h;‰ܸW8QR+(@˘γ*儺t$6vdFv~g^ 9թґ lrF:-ln90Q(&0yiJ?ǹ.b??~7ݟ}p}Cq'o(?CЁD]DjL#86'w[Z gYuQ?=#_ų_Nwv9?9,_I7@}N @ &$wzHYn?8xe[ ;H<05z $խeX88aǪy k/>1{9J|`칞AiPIЄ PIHx?2X9m)yNAG·y?Qs/kayorE"@~>k5_c&5Ab_,F !:չI)Ռf XBD,ќoŝ?hJ\iKX6)=P> IDAT/ (O2+(@Y%). ['Dϸg$sbϽIݝ*GQw et~7u'!d |~68  [[u/w"ӥÈz2`wC*߈4͕NSc$Yi0P@:|( D 3]Sq>pZzԒA՝P !(!H8hL!΋il^@c ՌLe+O-V{#uQUXHpV'a|/츌<6=d퓵0425@]ce:YEL[D$4#C܏4k`V ҩ1OavIm}8&p!h_ S7).A W;4yDiY7fȩN% JbP>.P-bC~aW4g"4:7?&CnO1Qque#=[D\ҁW,MR|A1<C%xb[XK-Ȋ;t$( h!wHiO+ 퉞S«O4N-O\LH#G}J8dPB&oJ H4;B KIZkYg33@YlL4̓?A]wxҝkx MCf3ԏs$шhɹߢF<$)^[x"bc LV[(~W$&v13QHdDp, K ! W-q(b ٱ3FٙWus4}w6}ftA$rGڀ :p(:f7cubF`"!H@K:yPf9a8îIxzIbCgL{U~ygҎLDG H*ؕ8.0n8I auq8JZrb@Wq0Sy%IK-hBż9|t4*ƵN\JQ}A7 .7gˤOEMK`qB/޴15GɘhRZwTx_bYY) ^GDv@%/(=brbͳbV,/I~eMHERHUC üx(2URZ:cL8Xv?,GtD5#ӱ)e L!Po~ǢaOed$Gd8iK}L$Z6!ayYjykkt1=U 3/MVEJD lii}:ѣw@$YeS]-(;qŗV7Ǣo9M xH(X]J-Þi zd~;Zslc} ~0o"KUE(Ԟ{z~w-&Khx*/2 iu!aEΈ*H|ͭU-Te ؾ _/O'FI< P݀A'6iLX40V]%P]$fάjZRC0F^ fU蒰ͼt8&ePc3hX1APSjFq~uLOj$*$hԈLSEO(QqwΓyrH*$J Zd):ƹ7 Z,rm%MIF/*f ^@36vӂ|*IEU)T YzlWS-xOA~jn! P\" ej*ֲ lƑo2.j@U+H/]H(9ľ"|ԇ`y7'A/hwۢ][e`Jth$I_"42cnuD^zFj" m.du!2BNqB:5 `d i[L6W7ytfE78 b@'(A2Ex0"&v &t!/| uƊb cޱHwT:iҐJ{j[n*̻ܪJ>.ڐ0D'B,/P _g=+]tVimy"UqWeG 5#Ȃ<5F> Kٮ1diP cRX¨RW@VӺ֮'fbݪż$I}6>SbTӱu[;=]-vkeE'^#jlN~dz? Za8u"px(y~p_wTG\7(]m#nf=Pϖ{fKЪWzW W*b{j-{>.]XۣB"iJ (d2R]w-Ye~G6Xu߻ҫ/7N;M   $7b-8? tŊaǭVjs؈7ZHA} P+ 2 2AD Skݛ>L~eQU1hzIPbd .&g~eRM0nyvڥP jG$VmDV{,;^K~7 d-> YF|읣ah8֩֟n8;<1U][Q0lFD8%KK @}ry#jU2(0+P$E-T*U&S)iԩ"󸃁)cۖ ga֨ժٶhu= !0VE\}뷶l0O=M]5яdgO6yd &lɒe~qMgV,a70=y4W΅M#}%X[SC3B %(,<]VH2`EY'ѯ*6dZ:V+՞ip}2.cm<,ք,<@Zw/bwKep] "̄wVI\?nlg:3?Q9%/,xQ` v?6yLfeHx$ƠtR4PR*kI{!Q슔cݒ-}QxX’maDFPcQeeUY>-iQ'^[YE{5e1v0Qx1o9A=RL&ה\[_ߛzs&}9`$ Ã4\:4tBZAk'=mey<:olek"?k _=yԍG␀0GF?iÃϳrł7mLI$s|`}-C9B*l)D^;W(7!իD%G _n3( 3U亇]eJ`5@bӴZ2l75)q#nΨ=E*e}o,i{-(uw3%h-ε_h "N @./kSK)8'ZT!9xӤx.ZA41hI;V`.L0<NjxD]^x;%UIx |(Tѭ`ͫz /[ΤqJ;HA?S=@'o ܶd,N[l8)o9?[ƇJ0:0!^l6Hs5OL0*h5>"Ztlp^4&єhQQݣ1πY QhbL224s@: *<S6r d bxxGqg%pᄇ|گ PhB# F\@;lpC㏏-t$,LϑN~GXma]oek^}Z-!;Due1s6$ 0qMo\PtX]N@P[J)7F)hFboxq,.6|Fw7(hA⡙j|x9' 0ހ<"϶r3S>&+,/vf_iHM`DG35$1Ԩadᥤ(X]|;u%?z|({KWf6y~sHn 29mgHˠS[$FE[qIۣ1c. Ģ|>?9f,9Af9dSY,$7Pw(fl,Sq S0Ҽ\0oCѢ Ÿb|'/T$`/ @WsgH=+ nj5.ӝR) Il~̾D0擣~㸟/rN{ݰ5X<4| m [ivc65O4}q\{=\ݱ5^X^/V<|K H+oG9nqf{y!=}uȍk'ںb򆪢W + Ph.Nb]4 "ߧ!p^EUT2'e'VQ չ-9Aà[&|H)A nGd Ih QePH GTTVãafqkkf`ޏӪ,5o",^3)W ZOdj6`M 9в'jYZ 7 8٤J,%k3 tzS awiVuI ԵAׄe XlŮJ`8uMdP`[Z;4??ӢW AWhr(@{5:8|fbwIca|VK/۾#N`hǯg];މt[gH"%DƬst[/6O&4cX벋 Z=<ًv0l(E_[v@l=s_g|dÌ(珂{׮mNwFS]X2I|dm*{}+4)QhAK'b_^F-G"unϢ%Q̹a huE$Ef*SԨi?F KGQq&g"P(<|.;՜n1X0a%Y9]> fx܂27޵&\}nFq5e0 IDAT]IyHU:pU'haRuPL4L(ayfދa7$>p^<%HE Tq׈{s\uxq@Z5|7CbkT2Nj=*+ghÇ5~gjJi|SOo,pj$8* Bg=ch_rz1HoJ52xvٞuP-q](W ڝ@NhZ'j ޾U7#Vr2۴2>M>^8{n8ĭZ–= 0 qa62v01̚"z2!! ټ|t ͬ*leyDW2,k@;@P}kh@|@qh1|QfϞ&LmL~tbR⏏f$O`-RJ%U ^ey^h@ŝbPCZ<~@<{:Cq}}?Ix 5_"רz>mNFg%+7⣏ f(S3Q9`u/N2brQ~h64QK@J6@șpyzAAnZ@m%-ʫWOǕWGžn)¹;Ǐ[/md+Wn<1cM&,ɠVX'H\v1U.%.B5}ʈnit=Gf<'l2PدҘZ$1 21ȝ00l>yzD^1wz=NK*ĆJ*i뗼wکB n\}Lε{o>}zn=cuF-ika6i?K0\VGE6p}jEc5$vj`q՚cBA*%<e$KPw(4={+W6̬iɇ@j[9,({Y]x|?{I*>eԠJYP2{7~צ[Wn\zhO`s0vB$h/QP9}vGb=<H#'p=Y!f6vjdRr՜}k<12x:@d)@@6EILWX IJ%0bȫ8{WwfeٍuV|)AJtaT~훗=i,Ymsh2߹q;W~|Kt0VqcT?[x<,nK,ucrOO9{ KAړWAK9j ͘ˌl 8 ,1ג[[ܜd~IL=iAqHR⽺ ϖ1!+K_պ?XÇzW|&8) +IfgFv@=;'t?;^ VsU 3='Bѱ*1b*NwӉ#g 0˰r/2!r a(0f%4E 8Hz"dmF2ȥ0#lDO+7Kdo,ߖonSp(}Xýt7^}{ȥ:hB;@s)A37 ;81 <$JJT (ڙQN[ љ r {v%QAWtnLWPxHB(QElM3WHFe|3]xҥb|_~$b}㬣&7cln=~MS儳tjL9dBBA2燃Pv yhȤ92>TFd+TCѸ LOe$/ٸ}jqP|wn/(P >>7 O?zG< ,Àyץ>z@ afv K 4n6z ҃ !=WȂhC8ي8jŗ2D/O a,{8]|x0n;Sga3^o>$6x疕85h ~҄>?zƛ?z(b'E8q]X23=PI|0[zUFfVʴc{ S,즴1]O#M2 v@8r55W64:oz#lu#@%+ ujaJӺ[eIҲR@6-1W Los`֣Yi 'Xry ?MŜm10~V9!yI@fk"(Rue)@(#Y7?b kαLO{):n.PnSXCkfHN1* 0ѡdf>^)e! 9!$ngβski!/z:>]> h߽F}y{Qf}HoAhUVW~hב &IF;#]fT=UL:Y{y:13k`W.u;AL}d0X잋 ]<=cq5oT st*hyEpJO-6N^/ڽOn U( ZBEe`j)Hau6ݾ# @LJf,m-iFnnhT2+K<_m$NN__?m,zG`ғ604q9:Q|p-7i4HvѾxPxg>[}[eXQQvci˪kk]a@ ue٭6V+P#h)@:3hVq%)MJcèC18ڴ#Nː)N] {㣊; 7_"]U=ٸ,iM"E kD#Rt !E&Խw'7h ' @kH x2EJ:9c\h'bv&. #(n'šE6%7۸)0OxH+Vؚ8|N3CLH /Li a܉b,t4f۠tkŭ֜ _$+җTA >A9KTqz1b9㼳8 cTz* Ф."FեΨ@ Cd3b$̃WoźCz}ZAi0 gAADLo1/l?euFeܹ9z-O_^]fUM[l;~ PLA)%=~nǺBY^{7ٝ[2v'־ I+'% V}2Th|>Է!ĹgB:QW>s(uh[ VE&08|8yŪ*qOÎh!wBa sKX4$U5N@9Ne) { FWf7s[]i.{1mh_+Wl^}cdPG0$Œ%*R*P* zJLu!;h(3qKD̘<($$XDOt+U=D@!:Y"m<빢PQC'4'ޔ t=eޥe&4HKO$?g0?('kӝ̮Sm>$_̴ݹr>h9;W-YbOߖ `q+1ֈsm LVj #Dy!^=r=saZzzz L28  I5@s(%zksԐ%Jw󈝝T&]0~ڀBoY25߼cӷz?|x [=gZikW߹8goE݉A"_}z;>RV۹RVŕ1fUzՎFJ caЪ #0 9iw.s\RTF!Qv[mM r?BA^ JK#Hm:JYP x cBh@O[T m {Φ͝ţX QYКdW]<;ˆkU{r]M^\ݖR g-8:NйR;{#~r΃7?ڴ+.Q1fE%GA$䨏-P-h  4D'naiQՊ۷NABBVKͩ+:|3N<;7pjc:QDJ;ĵ]qmK` Ύk(MG(8_+ |_P_)Oj6UAk2p6ƮNK/>g}5VtE[Qw9'}cѓ5+&p4˻c.C@"Y) éViCbkRzKew 5P>t"z`sv!? i:\׹h(lꞑ7MGsT'Z]zG oj,svSN_ zkl9~O fkTW44ctA h 51ZBPթ׫׽I̼#K6n,%9VtNU\iTHyW Lin|ښp蒭Iԡhj {`I$|>w[?̖ȡ3'*yȊX,%f4OXS5wo5G fi&O]$T\anZ64 ےAꜗtr0á\&5Rs|IvE,x羷lH/.\Z\mEiI*h6iuO<ot4%E'$w((*òA62)b]f\ р".y 2B@'M+i5s͇ G|X<`X ͈5% U:>ҫBT\5#-'F.58iECo3!^} %ai L %ΫJ6kEi15FMbnFCE`0)ƀAc42"u7 ȗgQ<| HiFU&ʢ?:zn7FC)UX"dE$p!ۈ*;3;+)aha R62Dm4}u q Zœ,H:񢜎vfw:\ٞjK q 1j2YHS)d oOAM} <-w@Qi.r4p\uHև{PvD~H{ r]5{R21M(⬤(c8ĊhLýIDAT8 9=WRgqk+diO{V9dUWE;k ,9|Lomm=> ժiUzMn͗F[]93e-ZS_PɤL7qZa߫dfnZ,7Jݗ~td(F<-M-Ј |TZ9LCM\f6XU,~U WB7Ļ슔ZMו"*r+?T1bRP\RFxIX>+I*X[u5eEq{&'`}2WFۘb+S0*lme!('ɸPn蓇"޲HI6V9rj$L˒/M?BS=n?庖JO~?U-TjR#81X)h' c Q H-G!GqE93xbc:+0.i7t;{FPSB6Ǡs~AxB>?.4^BFZޫ:9NZmNiK dw^ 9AlG`Gb2WYq.ܛ}zxg~S[BaElu`{@푱,q Aoz űEoGWqC.>l$ 9śY2<4<O,5rry#/$z0` HV"N{#itg R`0!SX~8DCF}-%Dxδ^"`"K z<zˆK7#LD-osV)Xi `KK6(1ɫǢw[JLh!&&扢V2x%KkMJ˪Z4ZkXCLXr/LpҜ|N<&^0B;0#3zP ,& ֲ͕镎Iօ4/B[,L;ޔwhuSeh25{{ ĕ\Jm f4eLVBRS2X%+*Bs\e5s1tЬ:jlV5LJ &i{Ț1 '@ˎMa ?\ ~XgLH`9gN"xd?K7B+$0j*:Q"2 -[f'{Uk]gmEEE}Kyk!FCڊyıX@'~-9_10!.-!*}(SES숅fD"&&d]G  SRQ*Nm&d\TUUhvt]ŋkCx`SR }"S/@|P0ܟ{Md}H;}{~J kVmqUjc%b @΃eU1g,3^7Tښ/G9X/ݾݫ6L;rcb%F-p8,!KC&j,ȪkL;Ȍϼ)cdMFiD| ƘX Aޛ [gl{.L?an)Iu1@9Kf%)>ÛJT/H[,6}Ifnj/RKoёM-SS-cN;M-nE|91D]( 8 EVUsU>TzU~Av6Ut ~4g^|2 @at JȈg<* cA*'}g "=}UAbesF8^`t#(G^rDY @+n`1onb&o-yI?rŝ!'jѨ8LXHŗ^hF g x#B;,EX<5'΄I?xU~t1Xa-k< P+f, A|@4C`0;!,qtc=}lkacҏ ?̊o!ST4AZ?odG-Qm%f,k8媒5dW+of&&Lbbb8@݈ ų(¬noF0(,V0MzF=L[jW1o5ϬW=>>7uM))PUYETƤ8 .`9f0ޅ6fO.~cCz᧟ݢuDE;KP+S(ǯd!Ek@TkՇx_bo\-yBWP y+^쬒 S`~|$ˑ0…1W3YؓakZ!Uvw<{S1,àR:&CL0޴OŘwZ7l="a;/o_L t=C)ʓ== (K"*"1I/y CCQisܬ*7ƙh|gq]N?,5VfU#x<ě+f@qVSxaJ(p53vN鯹0je=Ǎ7wN8mNx"7PrӰ 5j+AP/D7m#g Kvg[.hoOτ~ nfCˊ=4}T |TZ6 ťqԙTfЂg?OɼbьGQ$;0$&d5h "1]ba la6-BBW=ߛU;g0_*eĊp6ɧ3uˋ .z!ǯ!<#u>Lw.}X+ݾ0Y GRXGΒ CwV) SYԮU0>ٸVՑf맮Qj}1}*2ƩB.3*POC%/!E3 LR}J3[n0**㢴2yFݛkW~xs٧y[7?;7_QÃʛ+>kZ:^>@Y NcA}Kgn>o:޶a bl+'"KI 70$gf>ܣÆ+73J7:#oRHbFMxWZ,iC3C/#h\ WDK4)iNCo; `K^:.ɍx2Z$l\L/#bU<' =*#E2iJ?եp:+6 a,L#D @#j3T."R$  . _HҚh>/~pJ={;#Y6%!1 ,DL"Z2&6. j-P<<waYF"=*D"hK^-!֎uT1+lxE?pB8!XJQ;o=7xJ@M>WG9䝅b:1(!ymf4#x=/`RzjVIeYL0,&, XB9T*pJ5"d5,E*R%E0 p>/_N>fV0 Z-'DZ ;T2$h:1QIx`j5(pF:N>jNXMY<5 c-"ʖ'2T*(aJ@xF7:$!h>7L `6%`R~5#yWI4a%F#RFzZL^P<P@YJdTvЃgDxNB6lYX6.V M6.*V%h:(D0-E*%& pNBpJ?ז"yZTL&NGk`hbKGDH pHYs."."ݒtIME *$e| IDATx$ XR>aKM$Xy@ǢjTmq3quLl1Q2dHRJYy.Q~Qp@aG5BRq}~}ox[/yk3ִ߯w8x7|V9;0rʴ~WF֊er 901)cZ #&'''&ßZ[ώ㯯|Ǘo7W~s;[zzz`rrr3ϞcO9u+Wo~vr,ˍ}-|v*˅ɵ@KzKc+ o7f/:s/ϼZSDSF޶ZMo\^ nENLדwg>h)( hW9TEdgSFa6o^fdM5o %D50 ~LwnP"ލ]{BS*)ř.UjdZ*^E"<.QZcg׼#]too.݉HBKWn((V'bvߝrk4})6j]j__&W2d8YRR;qvQzHz\/>I-֧A"DLN"U/LpEt D:#z\p\]Qc1qQ$. _|q~إQ5 r-& & #:򴥑l$# 6ɼĜvZ_>;vN?_)οɆX2trz̝ k,"*T}]b(ua)y5STkIm EMMMDMX}ZWո ;z>R>QQR1;[= /꺴/f.fjlR]_OpLE )82ҝrݵ+B,3^=}㵇3~]? zV9*>Yx^D}Vʤ"EqBąJaګ #OeZj_YqK8>ś~S5Lmwv^>*nX,CxM)yᢼg=/p07\^nj$6/0MiNBkCgBoP:7T+vږa+8cC<3_꼏(p/Z)당ş]>h2/ґOG50:h7}g|u}QE ^g-< ?y ѸԂk$LrqƯ3IDt%.)HC-fg۴mh0: rl$xH2Jsr$ 0@3F*K>b:|(LdLF̣$ՓHm~iv]9&z2](]G 'F1a f Y]E\knˎ#b.q )Z,%J===&&уBD* a0@P1,,1"\;w@`E(, Cl*urbZ]UgE mJuXzֶUS&5 I u9|RҤR)l#ҰO_~Y4 4ti@AiXݍxa`v{x|~;&BP*}1M"JBydLCՍu4`q9&[poRbxi#!iXFF.CҫPmP b2f"H%51A C raK\遣Bwg6 o(4_IrуuJGn. Hͣ<}-B#m*@18<<3zJGIDdNq@ |}eIF^+M& fE =ΉPB}:wH*H!d_1_ ,;Qgz.snI|D2 G_" ! [ph<' ( v BL=PʄF*QɭEz~m!I^XSunΟ:#@AYf#-W4- BaHw=Ъ ͠6EP=mJ`1G]3nʼqɩl_~M Jd$6q:㾭}GW٢*ǗS$= iuWt߽֓۠+-$yKZ1e$~O2%ԚZl@S\eZaAmwۼ,fN[}Y\Iަn$=h~k?-dBbԩ<|`nw=U V݊MTw<.mE'Z[Fr-DAw!~H񙫘 zA+8m{.453(+¥ô1k]u"!y&%@z-I{CqH<.=$Ev^}2l%ˣb1G=l8Q(KyaJͺ@bSYZa*ޙOX'W23_=Pw{L۷̇/^݊(uX+ #?DU*֋eH?Bi7iuZ_}\.ZWjEIyj i2f_K)&}1`2 8iK0fqةt&mØ1^t[&'oٻ5g]I`baU@c@MY|qB;4Mrܧkgޯ1X0LHᑵEzXIG,b2xA7 zYv͘Ĭhȃl> ϬLzP/AY[K쎩B<3^: \MeZGјOOz޿[N]jdE Đ6w .f*tNy /l2MyGT:?rͥmE<ʐ 'W@ |]TP hGr?hjvwưJbu㩯 8IFUc:3paxm4dhfjNSlE-^NeQr93<^Le^?+&r@V#"q)w%eFSQ[(ݝj+eROVԴAu4!c"n{JrT,`v|XWDGѫu_:|r6DL(X31^Bg}K!vAruK]^}bW&Acr|թ̲ѲL{vQ1%Ά\e馵bFn x:%E >v4E%u "l}=2yߎEJ%;фq8ybF|J*YWa59 .Ԏư굽k[% xNohX]((]}'?duUS8ݖ@dW2kLR!áԋPNӫtzKdg9uť;YSX#ۯOXt7y~I"jG=Jq;yPSʟ]|Xʇ+zh[zx ݈^ ȇʙL“\l0򜜟p1\n\1:)*)Щ;³ zoHv.%}iBRJDMIټ\6 ': p)4CN///&OLwTѢKUd$|,nη1|oS&!8rP>μW~8,/팒r^Fަ'fr!mmݚ\ys.ĿRI?c##"RTITc|j:̄ڹS%虭ëcM7+txaOWZ%V~I),K_8;'Mg xQ<7:n*ny1!0Zzų Jɬ[m lĭ}A+Ie)OO%9kgu vP.VK·ZxA D{/@?YHk?=sE}!.rLM ܛ<3(bx&?">lgfKʅ[iuXnn)./6*"D\P &A0Q=ҁﺐ.WNx~?ϢO@Gni36vf$|L#!`!yO:Iп QICCKtu:b„sӑeHO LU J莚U _E^.X]UM#P烻K_Gms =l{l(SZ}ː3}#@_fxzxl: Fu[J RkiR36\r݁fCF& xRDG fWK[W>H`]ۃ=1ۑi*G*+^e&G{h#^wBuCY|x" Ug](G8Ud@^sq8R;:r pSSzwA9Ȇ;Va!bfCGr:#Ŗk3} \}A',(\zCO-v&K^ nUNk@}n-J")ܿp/ o$bbpQ~`i]6 eR׸NuLYˠ.7<{WǑ#5e//w\ꨤj:ҋ ͸ՙ^y]{S}K0e ;/!d|2홙 4Vă*hq̥eҹc2AD̻45^I ׮T yƋSEx)4sUU#gKq8O`kjKlԫYo8@P(k;IGɊȕ:P^MԾ][ u NC@ d~~p$k.IU8iT6h̰~`ZcM\ll_+ϙB.j\TƊ-vx5奅`x3sesas8ɂRBКPT8:FOEGEޫe(YMZmJĵ UYOw}? LlLUx^XXֲ_l pP|.tRKNV6&Rltgk aܵkUUS#2g_!ƌd>~W]ca4G۞u2?R?EYҊT1`':=TGcꃶ50%?#=vD8']p-Kmc8Y6p )"*^/E^:x]wSn]7 zmwʶV&YU tEO +SM&'OZ^]q2ũJq%Y!}';jt1QI \~J7Z/ƝoyzV#Kt~zM%D_JDK$= P. 'l<,@J#?szua`[?Teťsn2uf&g]͟^XN#D7>wzv>xHHJ[xᓑMܧb egm jLPIqH*txRJG]k=Fal'`F o *|x4A@8338̈0.Y7oƤw|8)[~?~M{7~WڞH7Y]J]pRVZ3[UɿْL`F6cb0lԫ3 3r9XbKE;߂JXVyrbi\`fk/u˒$㴮vn 2;Ɓ\ Jt θWwzxl45S:Bl "j^WSb2tczUOЉvĒ-BDzwB_:Օ- <̙5mm!t>}>pyduH,=Ha"B3gw?>uNsFP W!Iܜ}9-~^qÂ/t{5d~Vec7yxC(&'$\}v˶҂Jvh[nݼ`F虈S "ҿ!W{?ow}0sR00o'Ι5ӵB=eO[u9ʈKي~ !{mfNqBZqI_͋ .-O7 φ:L~* \`WFC|{aO;Nb2JjB@(N!l cOZ.f$+ȪAH8t^nQjҲ]zA`4f31fpMvt] C0!|tV"džT?uv?R .=[[%, %J{T8s+i NQPF:1j[ox@ ͇'!DۑجG4Kf&'ˆV0֪}%sDo*:o%fSYī5cGcf  e*Pc bBGQtdK/ TGǑUȖxʠ?(ٔ/kWоiJXWn"m^[!fH_o険)\c*0Ԣ,8OIOnLnR!'妎-i{\??T1c1ڜO/+/"| fu{%dYӚ=M"Y XٹLm,T Q(H(rAH$@PMOK]Sb\x@Ux]Bl3UP4ePZ2~Mlt9m9y4}_݂$ŋ/! C.7,܍iÏcJmܱo~{$윍'ܝCl/tk~5)7CyMdk ۵힞=iU9b wDbRmu3QM=*!rq}v6/jU[پ}- S 3YJmmx7zVzdz͇vXb?9"}zCVF^/&? =}#B~Yס\e_P_tWM:ZrǪ6+(Hi 26HrO_lP(B1"tn4B[qw X]||ބey.՞0@o}<̗e`£pO"".:J'TXw}rNWm&-Iu;wR 7G뾃]Uw\yzjdz ,o~a`sAHE ]2DЃ hBK\K[M;?&u$hlr7NK [zKltǚLRR>qL^Ոwvb11$bt.0^q/)O8C%;^THҰ8b_>6ã3HV Z~auaʁ_=9Zo誩:^D*D@joQ&-o](O?"eBO'#q_[[=_ә+SL|$`!O|UH3H;\9?D.rlmLH{ +YMpps,l@7zݽӽh5E V7{ pwg`%WkVjF\UNa>3)nϦYw.3[d氈$3ӵwȍnN]ٟUx*ZP(ʖl}| YŏqxI\*Mxh`ؐ_Gs,C3nO0S`]WߛS! ]77t|C`l 9VλG$[y R'ګ75%  a_zgn{?tt| عmV2W4I٘ q?[WeštM-F=ϰiKF6?}2##3 d9~=L~z /qWu/}Gcu }Ec}cq.C:4A  n !a 4 uDw7;<'SW.'a@-`ؓlR2q9iFa=L؉߶K1n;\P)[L.Nj |JcdrcVWKgꤩfY.eֆG^™1 xՕ?^+@zOlz!l؉c#1 -p 搀"㉳=U(qdoK˩_簌6_4TscuRVp[ uirZg>Ҙ>It`R)+eTx S(t/eQ_-Yw7*和/)}RlgYd*8B^NZWgUoWJ{{R*&Q1gPP? Bs]O@aKUryowF ̑gF9'Xw`i4 ZQ+xT\0YI\V@G> v{8eXrA^ 6 !P[,y8rjʯwPy\A䶑B'\h~nx/.]2lYSx\F "妶0G36MuV{E8)H_O3{TJz(V4 MHw2 yȪML?I/GsGD#CCK*P] C^]{:U2KyG%#@4S=<0I2`(GǦdYU +'>MQH= N_)Li~1sgHJ,qM4<~Ū攰ǖ"am3a>KD9ͺn5 T|p@nRYr#e}<|5Wi<%+&dفI 0*0Q/VN[(嶱s\f Ž(0# dt ?X'Q;ؙ+O. ¬W^5PaQE²^O="-xJ,*2\#-:Wm sVdd2;n#y&L=++:e:䥩}<P$ؼʨy;! ֒} ` 妄oЇ7&%QO?wUEyϝ#4РV!P4^k,AFk>/{JŝK9c9jvłh6@ۘ~"4#~7oT_/V/ޔ aNDžguY9^*(}0hW2 ؼ$)Yx}^V;W'VкTP% &J#.q5fF!U ItB"̏?r"[⃑/mu4NXvFV ΣIQR48(8bض _Uu(n1Epzk  P4w ?~\h*ԝ\$EW R1mDү{@DKy|jWJmlR[$Dڏs):1r>4V2h4V+uy4z$ː>%$q7RD6` ZW5/eHTlAcWG0LN) |k!91y)p ɯ/F=1/H c4Gw./=w5+-Z3{ 1/L5jƚh MbMoh+|jST<9#ڂ TF2RQ5edqWjV;6+w9Gqr|w|`\>)V}FU^pܹIځ_`>J&w4 VVW߫oU ^.Q'JXL捦s5ʹз?kfVj^h kCSp߽L7kĴ\DƧ'cMΝϾGLs9-Mh=`uGpSgLk‡ Y]ݎcK'XT lD&C'VKgXw`IKKE%#uBDrjbG\S3"xx-Oc3$4tW}VPS&A&MpTW DdɬI, w,ӏ ]ϬW5 ^9{!GP( r*HeYk 8A=l)M .UK](Ft ER_RCxX $eEEg?`0A?|KJcK$Ob9_p$]\.G 6}D +`4f07G+БF2&AOGMűky@tR6m-IX9q{gtCv2@!$ ND?76@"Ϯ<_++Ry4=ۚu. A3p TW%J8M\ڤA8{ېٶx\˺>զ;Z'(w٩;H(m  6`&"@G }lm_&^hJ$}qaOS&Jpwe ~燽$} Ixy8#FCK$ʈͱTjyhL]*br W)L%x0ax"ibn'4rՃb1TA('=NIJr< QD z+ֳVSW=fnRQsB>p"&`=ju-X>h`Zw>uU0oRl`ՃA iVs\e+!5?|Ƞ &dWחw *|kQzՆH؃ JCAס 3D:T5y :7z!dqL 04Czl''lwE}}}Z(Nu5Ձn7XV%!ꈠ;d!x<c۵Mm-@DXBа4 k5q$Dz.kۇ\b8;)hd0PUAzPקxAZX2BA(=X6Ic5o{vG"PJ]mӹ2?q1t"'` w{~D+uI CBX ^AB\kxJb40.`$Rza^< 0v5^/I4Y=H sAJtiĭh*ɳꆙ-;'ë;ťCNo-ȁI.^i:2Vxa5n3LG"3,u-Eu6'SQ(\ n IDAT͢!Dtq{qGgdqJmJeJ!I_5FUG|bra4FUHLTH1'+O1qv]ǰ&5Ǒ|t_\\9׹+q@v0D5ى gDžOSnvw@Hn<1KvO -錜dL6uDjyA:|#cDyF ! U2҃@]ܺq'~ygRR^ӧA8yڵ])A/7ό7?]M7aکW 8IB]-+ <\| 40dHbD( + 4 @Y]X@ Ф:f *>I-: ,1vug @gi"ie$0h":߿QCOqj|}xYNAdWa2)H2)SA,vZD0!hþh4ta$&.S@;V !$N!ӐQG}ٍ:R_$ v+Aà E R)aRLd' I@\Syv+v+y=:zvTtyyk Oo_o_&͞zAR 3 )CjFze`˓nhHiMynNۄh:@+IJ,idAWBي҆խU^1pz8 K^JҙuIN:GiƆu14@h SInlի;RĆ8jWwNZ?Yؐ}ŪE^eƎW|ri1n ?"(K\k/jfZc Ü/I4Ɉ[LՉB\\1>L V}ONw # \|. u9GiB\v ~QD$0*ښ쪪Ó|{ַo7Ͼ>糳UoS|Kl?jQŶ?{U+"@pnҩg5/\ԏD8fm}f[{@|DZJJkmʺZKptUR޹1xG&X粉K%.;-kXʦ甾dlgQsjЎVB q.5aysgQ=-/a1wO^[~ _݌}Gw8XhI ћo}O_G"&vD<,KRB##r̅{tnI+:.ZW1ۚR UC L{x$m6,U{rCZ=~?3s#QQWO;}/|;>4->e\1X>B [ڄAuOe d &0e8kxV{\05@[N"-RMȂmɮ&Y0[ WCNcjr#Y>QZkT~iUe t[}#ax&M\ X^:M [o_9'~~X}R:wA/~dÆcy:ܶkn$P΄0+Ӗ^$22:<}_]2.:UX Ieb렏2:Fp$fG͋6r|Dm\_IIR8uYsd^W1 E! B :M R|n$ @$%Z; q8K{ZLh(.СG(>H(ƗnFJ7±yd!Q4ziUJ8x5B8ihvt 2$,YW[/i<)VYʹ}l.uï?Jh%Nl+77wŢ C^^e@}el`t#!e;nSFuK-=Fdڔ"o4p)s4fy/D)!P@UU]OD:W:YW튌G$nkeuHGu;*Û'~8q?o|NA 1G4 I\_y ӆ9.sqj)V L2=_~j&N||o.DIFĬ~׮4骘׸y1ւ Gkw{Z<8j ɷURH Nj(.L)ŐF:ixS&:nN3غjl [3D{Xbp6Iig<0 !ZڃzϿJ?Nco|ҵ\ V+GGDŧ/}V2_"IqUXo@G!bwdMxr{SK2(G33b0C"@ Nv#UfwTh ;=79!{{IJa )NGDj`t>gnm1p678ƛ'.Q%L3GBn\88۸_'icx :1iwdOqph#T{ &b\M8hT(i,&Ӣ 24X\loi0thY VP%ygԣJkOH8j|~.9|CoA[s1 0*z(aТモ~~mV ;QS"tqq`]tY l:v{|X{.d0B :?=yՖ1S@ T gOڀࣇNYDjҶװَ}A-o|y|C̙޼ys7>bߑs߽gmn1K>n)Ϋz"=d]sէcA>ٽ>%d_TO!3`84y6,.rgKƭf 33ƾ>,59u?=KKy0 s+<^A^HwfBIÀdLXWnjLԈ&۳ Q 5U@)|su4Zݧaӵ9Α#_F"')J ou?89և]O-9RB^񉈜hedy}" Uð#q @g8)9gvb0j1W=ͼ6r'$J |t)J˒W%UjQZ({ i ZW@Ar>s J* ̘~5a"nS3рp?1Π Ԙy@N`CHya[pp}K %Aح%PLl}RɾB}+b6#Q gcu_oFs(0]Gf$y|r`EviRZogH `&7y/WI@<5.ups̴#u1PecVq.W"b=#}ޓLOI 0B=X}Y^~1p00L š7luɪ6ud ܿ9^0‡/wX+jNΞK-P/[٣.zhKr_UPzLOB [+.Ό&.seTqsXǤˍ,tDqgp1*59b 񥀌jkD_cMٶ!wRb"K~y{~ 862'r$7XI[A] }580Yb1>i@XUD|R6ƨ F9zMBCE{vȱ?tfQ~=Mlu^W;:8DcD2y.)s]T,JHk2\Aԃ/vp_o! H伳OCPj|v:(Q+)/db\(tX( F=$-몝 ^B K0t[G7D__8k0s"2^S%jӵsÎ4Ze^M0׆K4[ivth3 8KD1jGD:;,).!UWg֡;'ۜl 9~CIs8@>fe}LHSebc_%-p9ܾ)e $>)d $c4__hk6Fʽ2<p Vqյ}°NH`ӧID1 Am9,:pYsĬHY@Ҫ*hXҴ攁++hyhjépW'hXE ?wHxA8{?'uu32m7cOA@zD"/ gS{O4P"&M6fXn-6Ye%p&7.JkvΫ}UY" eH]_ڛ(B:?fƄ9XrrGX|uwI5οvs $򆚰XRBzkr+ʌH\kteTtpM\y_s99Tyg9uw=.s-N-_wl'{M>L~/RTR/{{ɤmmn^KշVP $ҭ+iHKOr~ٻKEǯ‚Ҡ;"=$DAI#iy4n7exENԃΠ^m @7e8sx&ܹHxIQ/tgVQZ?'4'ZXf2/}+(UEesq#樸&KNY1+^Ei녅=љXqz<XRZ@-r.ձU.>zDL FE+uJ.㝼V( bӏō;Mak}EE Ε<>rϽ"RG {_r= [b.Eۛ;~Ch &x&`1yuLVuU4"8scYB߱̍lY@޴lEٌDvx7Y{ aQN*GoW]|-F5Sִcg[y~maWUaaI˕Euk%/FEFG}R * 8K+I*& ͂t(1MQ>.;ҭ$I4lL~H֓kD9ll IDAT%8ִՊF'WG1I.]J3' ~aϘwڲ,Dتk;C#FYuR&7nyL&W83^8ݸ{ )eZs~ώ]_' <^3|/Jip>DEhpnFDETc91B=^cM mh)7LpA~j^Ͽ@PF w>x.Ƌ* ':O\]{Vz  )*I$E(tBc63G3|  xN\nr2qWQ8%N"M)iuՙ:f:TTuf $LiL@Y>Z3h*^y0{#og?܅ԡe^kkXDƆW&;&yr'GuϾx_OMl]X-'%qdua 59  Fs3.s[^dFB e~_yQ/_}["05NsM:RސC2;?w~rEJ D^X4lС62.T,J۪h=B2yx5Q< $cTuX*rH8[:6iYDF#+x" ^%(Q=kb:J 㞝[5~_H UvG̢  d&٫v aIW-lEٱ-[adD< jRw^\'̀NNUcv7N۳kVDJa0pW*Qo"f1j|#le{ {m_ HgDcc*Mea,NSp l:5k̍.@xƒ}e-2{{С{7e'dV[y>vb W߲g}OD"/E5=vH"H% N ;YgJtIi+iwy >ۯx\xr+U> lju:5;aU#$Ɛ :6YtgQeA[k+;TUsksg[y! HǹD6mӫ ӄSI23L 錳+b* LdPTgh@w5^mN|4!Wm>ֿn6^E$ h_Q[b.(ލN| Nw+e)]gr<<\_ =@Lx253'jJ0^qt>oeKQLXߜyblbzWZY9Gt9V,Ҭ'>:嘘RB>zGoiYs.ٖ~-4`^ Zw72ؐy'U?,t{R+ï^&|&|N#=#×8W\2~^I~,:TS__&¹恵+ )Z*oHT ] ZZҿoW ɩaB>9gno>o L)\'t(NGۥ/Q8 0 GT@u6ysEjs^^eZbB0f+}.\ۭ-X|KQYs 'L+&W5]| zomyi}oS )7L;'oNƞp{:#3S ݁BuӰe` eܥIquyecPPxI||Y\B2<n8Sz8|6[C2F4晳AgU5!5o`j%e=>wsZ7mѲlẰ6Oԥ#~}aRXi~~[)+^M` W&F+hvs2!.7'`^Br@yϴah7v.Y 7.1eKh&pe֜‰tON±2Psq V!4R*ժbh"xr8f˞m`"7У~[ϴNhWSZs}A Ԑ ,oaBޜxj(!Gͯ_7y8t˧T_$lkߘ|ޞ ۃgw0F 9gi}! :΢K#@ISAw.1f(nCCQ6-3$ˉCWrZ֛]o9ғ9pe6kSFՆ!1iqird<a\('L9%q==^ ~w%a}$5ANIMi;Wp{@ۤ?1  ?x~rLBdcQ#Av4Eknq/q|$*fxp-?~sN嚤qatjixpMeΙx>iF"'&"H EЊ`"9(w2r@ 9󣏡`av R9hq_ڑUkÎ2+̾8^-ge4~}tku`TlT[ÚV7`@vrm;.q{5g;G=vy.S-.Nk^vbԄ3^b2,[؄t ClF-TJ*d$)5Y|( jϑ`Ԇr '&L6P1*fZ5]7oBޗc-`Uj~[l"X1'Ri.ʵn:N߆v%n&fIgfL(R@CUmxs;Dlyrާ{ױ jRZҪܞk$mݻvJ٪~^'9.yG9|Gk2b[:y@rd:.TxkPEk竪Zˁ;|gVwa#@7Hh_=恳_dVY` @$^E e8Q#*[[Yѵ,ԏZcVsgmm9-edk=3E{6,(>nTËNZ?QNFgx`s7%,3n4x( M `YZ[!INuҶеsh-ʠѫwۙP4;w=0HqH32إ<~>#&"޻W :R BrDŽbY"NA t=>?A: 8$ /%r{@%Vv[՚}^z;ئբG.ͼ@!@ )}E2y/VD0 ɔA WYZX.%!&~H溚 ۲RK=OZ{GAf-Km[r&rQ]/yxNՠ(w|OVC ۮ.|۷?|r⅐4^ha*wt%N@Aβ_/!DZjs?9l`v+T 9:8˟:CDY+V.ןehF, 1q{r+[V3ݳCUy/rpHgtjM7n MrjgkrAdi;o7>lM}/=TZRaq,_O C;UJ- ˾.YX, xdζ:a5^ɾC*: Y?'3Gkv꫎}942̞B'hrt8kl r{.4b9}RHJ{狳b,ԯ'>ߑ=r}|`gЕ@,=2L ??3QtKc# 8j[y=,IL^:ÑsrPz+fZtlBzvBv*Y$ohRufٻ%#U{,hdoRZ! Hvp<{Q=25ȭg׎tq~k^0g U)^ v s\ZQu|ׯ;0]D)bpSac5X(IYZBc'K.aIK ^!eI /!RC)tLf\pCfbt7>˃gmnvE*qsPw.D/p t P!!/Is|!]>n()p^50Y5F^MU4C0&Hxܚ>H(XT$q'A> Q]Cn1T3$MQ:Г$*@,MWbD+ 'hE"SB+5w '$,厏-EZ6gi ͱ䰙80w )@ȧh|cwdNQvJèRy_IޔaO`e"4ѿPS5Ug(/?,y0 .C ә@j("NL&ۄ#UDJIr=.<|Ec_ۧ)Gn0\L+UQ%.C15RH)ੲ=@ޥ $=ĕL9F lȕ,\XS`M&l" O)2)|4YOZVh ΰ*{tmq[7VuHł,3$ָh~#6ĽfbI^J``f 6A wKJAs1j}@:ZۯѾCBKfL^5<ƭޒ[se YTbYr?T\)Mڒ,D)M"Lh‚Ѧ< cg ewRrlUW..ET6>ZTԋGu?b1òrF_؁O_])znV=OtlyP2H%\v ,Y+ȕS6%ըn>v 혣 꺒v]=/sJfISp@'B`S{"O%3D^՜l톒0\;tޞ *G7tН|xjw7_QoYEKևsUn*ǞעU3taxI%]j@p>D"{s٧% ٹC2NSO/a5ed٪,{Q L}r^FDM1bz"JE<%Bqz{DHI<(\|K=|H<vdGǑV@^|~P)@бݖى0)q.JoJgHڤ){'uxWdt4! v%g ۙXSC$QMIp42ɴ(PjB9ʊSMNF Kes6S D0uî(@g-H>_?$[vIE3FR;ڄd{E iS6{LIj-m6}ꏐ$6զֆb̘ µ+w݂L8sLջ(*Q IDAT\XB=G8%\ CeޜQPXL2pޣrYIms*׈Φ:lv)XCōk,xF)ԎBH}9RX|ל>S,t:zH1^rvH+AC,8:<}yyLYrHPlcXD-.h{~fs K2_5e{|K1A3S3h4 F(XaZٱ9+IeѢ0yPY v|NEPqaղ]C4/AnMApŘ'&Rs{ω[3{tf-\AJ[/9x։Cx\yP2`?xA;9|e~0Уs'￘;wrfq9#UvIk[Ŀŋ} 2Sv6ò@:VIšXmvKdhgoAxȨZv~3[^e0ImY'CF#!˲8T{ 6mZuc%#=xyy$Qx^')1貄`ɞ@Dd7QTBd2 L:y(RTVpu`bjtgSU*.D²Nދ(P0#.rxC*k0 S:%B81*" eC [ ت^.1K,!s3b/Ax^el^RVV$8Sݜ3{- L0 [BEow~O}٭vlQWI(6\|p*E) )JAV*uDvtL~%/`q8VJQ<8Tޘh.~\,9㭩WkcN4aE)qb<FBi48alSf Xvm۱ /]_/~&ohLH\<Zx{7u͏WR޳}9J E~0]dl!i*\\d<t.2dtZ5cF\Ilr2r۷52oh7ICܒj>ޛuʞOOϾwo]Ys+Wvۏ; 7[^[wzG; ۧ @FUU6f$jG#U.ݕMl~|[!3L)4{B.Sl DYIM| XV_EJ !^3؅DᲞ恬W?~H_|wnL]wi*:02-kn_/}㣟ɿuݗ Gܴd8/&-܈51iMյlhcHع2֜}S)ٗ37O]1k[13LƐ]GjYD=ॡ~jxLv NoK}5?nO>ەHjtMxS Fˏ[kFkޙi=!̓VwKbU k2`HJˑ~.kdqëj?ܧ"S*ٱC_Nj9&{)iY"sr9 bk'PBP8EuhVimowuؚMo̿vlM?oz¾uiڇ?y~.Ω ~oJOF6CV́J̼+^khkYiwT6;Z8|\ͯ=Hԥ=76$Օ܆xZE-"JZ !u_ij2I#֢vņ_/-]n=mMw޶X_d}a?ݣOzՉ}CnO·_YUERq]Ԅt:7ZI3mCcHQ6?Gž4[Fwϥ!b7 Z.۾ELiۦ9N=tw+1}\2b8ɥW*^TT_.q#룭GYHٿPZ:];^nyu~@Pfl6@ɵ :Re&Ma!,SF<2SlUՊbůKɺU1@rw$3|B+D[ыaSs*oĖ z!$,"<Vl;U*rm~~`;)dhH}zfÍ'^9]" 2FFEUZ$a)"ٜBUCQ,я.f1x2cr]br?U 7Wʽ^w,&tTI09ةKv=8/N x8du7 E( D|U >Ԝp}*hJgϺ4lh,rѳ &LW-,N؉ €l`7iQE&EgRų3ĹbXyº84p6fcL[ey8=N.)zơ땯 2R`P( #^K!,1;vSvȂfcp7jdbuz=-)U*]ʿD0%,'VIp` 2 1p9(< dz)@PN'0>٢nu"fP;l0JQv:ʎb(ףy&*UR&̿dڍgi(=QӫTK&nYck3䳌4YF ð, 1C,xJ: ia,C/ٺ CɺuࣘGbZ8vmҎ`,CX?IENDB`lbreakout2-2.6.5/client/gfx/Oz/paddle.png0000664000175000017500000001210512140767210015111 00000000000000PNG  IHDR6HmlbKGD pHYs tћtIMECIDATxkfueu.xऎ\i.unIPK ( _4jD#)`QcRhƦuqL83>ϳ;#>lH~ZϺZP~uϱUڶ#shH<Ɠ1Qm[1x)9]ibXg}c13! 䃂$ 7$)au}g;bߞ d4Q- A>ѻ#G6PSY^ Lg-XkͣYʲ[`sB⊜pbX(̯n1,r|x|jJ3NxjL3Ś#cV>g~j)hh U54Ekpu6Ɉ;[YEBKxsRMv,X;EqI1 hˀb~C WkV=B;䞍[*?s>ڐdse澇 WX~1 tFS @JJv Ɠ'ù$) ǷP!Ϗd4>{7OG#uy#k9ܳ]w?o/`nؗL&]uOi<c-?zeY]DU]K)&4Ef#%/  w*@\c<ڸJ̃JS\aP<*ԋ~i&?؈ēBVCp O1EɋiM[䷟r Նvp"P)vT3+9wf#+|{lP YB >֑]OM`F=&`:.~gGGz5tp ]DLȼ%V1x vK~+f j ܈u@[=16+41+muTv ZU`Ty'ORYaGX5#Oo]cXpts44;%;7ٙθpu.B}_} 7 :X_е 1Ng֗461łnAY5U`\8b ]Cdm{*шo̙Mfpа aƈ= ӖT*͆p fMC[/"usA[8#9hs[3(Cm泒`"&#v6u-ser#!kkfs`f#<# ]YB tԋH^X2f՜l*ya!Bױ7(}`7`ֱ.~q,!-ϸ>c XicQ@Y@ri pA0CT mh!)Cp0,,g0SՉB/=O~#|>=?w/zUϧ㱟}tݜTx\;)8 J6yͰAhmQ rF`xճs*ɀzd2dٹZr}g~do8cdQo=2dY>xÈ7jMWqY/޼Ûgv)-;_YPGZd~f r%bLKO&rN2?hx /? y޹BSWK`Y?]؝7[{e^xs^Y>.⾇+P3蓯1;r Q; z ee2qh@a0B(A[ҒdYخGF"C5[OR UJ#'f)STg˒x˱"b1s~὏=>qW@')=NaX{ ƀ(JR$1 EsȍabLkPq(C(Ckpưa-6@77X{ҵ (* pƐKa Ck(`1d%2#tFV{ EdA"j;3SϘ m9dփ(*-{4g< $)} r,94TA KuG۶`-8Å%EzzJH5>X`%$g-ڎZ. lB!"XDk4*nIB u {+NQA0(CBږ.D0*(]릟PJl=BGC| Je TMJcdk%D[lsUV pV1u :w.F^zR"¾thC@ ?gI*K/&j %(ψIMƅ+(B Kw^A\=DIؐQ=$!"ƂYc!;xcIc.Dl471b8(BDa luyN-ǎm Щa`Dْq# 2cY2 c.Dx DeȠ HOq 7ř*qck{d ڟfư#SXAD1֑4g yV]x)2jHcg)~ÍR*"vyOyyBZBkU(.UEnԱУok\=ݦ΍.p{I9T"BPCJ=[G&[4Iaܱe] s__*}aiqUEEYgo >{c-)En =;O}%1$ݤ,fyD~C2܍qEkƇ?|70[D57,wTnr?cR1XG)aXCr&-9@ jza}؃>A{w|zIENDB`lbreakout2-2.6.5/client/gfx/Oz/fr_left.png0000664000175000017500000005443212140767210015312 00000000000000PNG  IHDR(XPWbKGDC pHYs I IJnctIMEig IDATxLY̷YVݷ9 Ә& ±|A0rcD"[8!V.!-Vv 4))3asQuo^K%>~{D'xّ<[6OQaϟ-\o?uS9=q y9};@g?{..hi_BP?v|'?[oX,_=""br(eD6½K/{l}ٿΣ}C{)_g=>;ZU޿^{* sQ8 N}淾T "FNrV~WϞoDOM#Qv B'`~7"-dV?;n]4D~|e~cS25nO- -W/Ofm٬7Yw)9;S`V]}M|v7țE[}'' @+_٢{o}W o{zq-s_8Y=!(g*og/ "Fާ}+/ ïR@ :;~YDnk9; v⍂W#|)~?y r=?m}鍗[7~b7F 9ʾ_povRQA$~ W֛S' dߏ}ʦmk{-n.7=|ϷѳW[_'|y%s,'OsGx~_ Do< Q}#ͯ⽳OrZ/9ۜ_ޝ;ϷNrWW[>gG OeXn2;'_&*_ 9Gr_ٳݺN|8\, '_?w6z/>)߭/}￞ԫN7|KR%jwqʎS4Og~Ioٵڌ~_yuwGo}jqCTܶ>|r:Ohnj~濸rUA orBu( E_Ub%1DcD׹W0GnVq?)j޳kP|X)ǼZc xrtL|)\(}S ?|jC/n.}ջ??_G7wwf_Gc!|?[^z?I>_k'?\O>ó_`5$ݽu/}:Z[D΁sJ,@ *@9q|n֠J%"f.9s) 3\b BH!TR4RA)DK)%{?q2&KL)10F3M7X̣Vw?pzzuܹκ'Zk _{?NjSzq^їQ]<*םU; p"\9~T'''9{ Pq^q)8~UK18%Gc)&euFPf iMH'8MՍFBġ]?kqNhyfT)l~K~, >`([tϦD G%Z;$fA2cE)cn7^^\2{딃,Y$gWay}mDY}Ӌ/0`v}0떳YZaɔR0 QK[!?'٪GC! _ovhBq㓋7E}x~ # crU֡P9qc?#꘨k2ӃoV7GTW͸ݶ>;<<1Np|"{?=(bnS޺uxrvν=|D9b@>lP3F=ow}I*QNS[ŢqI0ܰ#w3g^{e\z"U唱W^@C􂡲4fv'9j-(Q\rbZD.ƙfޑVc)3gͪ;ow~B(Jʶ.TB(J52@Hn8HVZ9kPYgM]!6 5|gO!L> *,`Lk},TT h J )YȔ8c\ %9f㬶5:9s9D1ܬn.nǘRTJBZefC94"Ŭ[_zC>@$\('O.>1CVzPJGCJURNhɜBjc4j~~Kѕ;;=kdq`2clӶnFSX0 (W y9_hZcr0՟|*J!Qbq .smfH)Z~ &%[7"Ykٰq4]8c^|~TFR*(Œ5"3@BJ*4NzƘL]8lJ Wf3Tʸz^WnۺQ>>!zka"֦]-,Bb!.Z"11!BLnMLa֐6l9j(`!<9>D9T"ʼZkYp)gǧR{Oژal糐 Gmko.2w8P5ZW"e;o=y0 PJX.s.9Bj]\CT'n&)--tV|s1)D- (wqZN (5UUX2C)}?On)J~l~Ѣh b7]#h) Zk (UI-%Sdm6}}ᔨlrv)\rLڠvΩCkTW 1%N CNٺcVR:gq^C9L)'@J<%TB4ՍVP͗Tf[P :䘤R5|>Ӱߕ`)R"!^HH1~(Q7oGJI%iѦ6mmryJ:'sID9(Y@)R咥” 1_]UQar\D)uWJ=ɅLjTj&N\̬f#ĉ*RABVSYbʓo0!%΅0)AA 46VNYi1R)˸-P"hcʉj5>X&oIOB*AJ%`Jl4H"SBѡOO(F^AE!A6!i7_<~s])Օo Ih*(ѳ-RƘ%f:EP ұS];4;XI24eժ2U*YrL_P~vY!p*/;핐p)8CLiZ8߹}(Q"HWsUP>4TgeA!mC0(jP ֶN̛!x깳[ƺbrLcxrTv,Y1qM4RFAT 0D~N)>:&ʙ+լ[rk~Fa 2(Czh 1gm5:wO{)M9C(sxxxsƩR ]Sӈ 2&SRRĘ4Ѻ6Brtz<:*4V}G`6N(I11~4m2B (f]΅ ~ye"Q i,9|0y}xbWקoiA>ܽ{[ Rެrʹ2:p1ESq68bn6 5<rVTj=Է|*9\fYDS?t_3U@u E\ћPڶrVU%4S'USŔJ"f ROVk#KuD6MŨtELЕkV@SL)椸dMQ3}mEEG.jB(P&2rA aЌ5FI#Ygg~?כ~ gD0%IR}L%>}L{o+4b9kX]0zACki46LKf}y-M~޶!pMe` :>R 9Ƒ6ڹZ(~TR13n֕'Oӣ6R-./bUf֧G}?<~~)ěݮ$9USO9nBXVn*R7Q*U: fT$nZzQ )@BP*BErU]˽0ԧ_NjsqԕR2~/%w;+ͪ߬%P(ۺ2  ,@,fy<>>2BęP)Xn1J\2@J9x? Vc(Dh͝>Uwn9=9Z_?=懾qsU]J)YdVrU)d! ʕq(7׻aZ\D}S͔;J+bڍ[uιh y BJVI 8P9 HLS`V%Nv7,ր c @)TlWD[Uq}| PɪjSL9fcDUjVV"6M7PJ#D\,f4Lz@iV*sWf^+[g!Qə/n+%Tp5p*3KT QR3.6b<}&V\eJrNQ̙bq0W=;ZJ+UL>@jWSUi,E?}?ǡCH)RTz4C-gS@Rbkޜ+A\n1xS}кeghTEs!Rqx0?\̜s,m)6TPW׫'O .\HB0uSu]K!)%K&fABRfp^7 qy9B-D$OaJswUcAh\ݎSCR$`!%׍kN?N%(l2Z?4'Gh5LUS  5rL߮R cPhz}!>3̐(\wcpxã_߶*: `F,ZqmU٪|~vsNϺANT&cʩĔCdbJjdff"XH@@hEmO>H%ƣP7$@R̾֫ AH)EJ83'nVm7U"&?Mi)lf Gɦ18M^Skkn:Ii*)0,u̪!74N>LZcv׵JV7BD(!x!Y@.\)PrAjL5! M@IhMa6B(1e,iTh!0f 1gFe 9fX][m(6Mel )]t]μ'Pd)Ơl6%QĥruBcLEf(T*)ݾkgseR4O>~<Fl?Zy˫]UZ>:cS,2nCSsa4paҠVmW5 Yr) t͏n1n')DXtuz2'_^G_M7l-pS?A3juaxdބ~`%T>wR.a F9o)[-WOcLуwʫX}rxrz8*1ެ.׮)\Y=WgO=~z!DA]2f{חફ9R2~\CγyYj;Qkf[Ǐ>zAWYb0I_/5tn!cEΜBU~xb/~vJ*}j5RcY<~~TzbHvŴ20RRRTx7m٭{w?~$\$HyC*C!~T(R(EH%DY1Fhtq`Ѭ}~׿uvTvHqRyZoTJN\(PJET)Y\նj4s~Vi D!/h(;w?USԹw۔ d LS`-r,~A+uRF"%̬BNN: ./4e,m~R)ͺ\tjugM'u$`)|(rAKZ.3W)$Je)+( !NzO꛺|޵ueں(LP*/s^aEa* @(PREP~(B$BSCb Uuߺ3G(MU{?% ,[V;|~,RРDSTZ+!jbΛF)C1_lt *szw{8 {~6?~~RCͮ.vsӻwCJ0dJB T"BVU%Fkz\jgb&e@&X)#+ 0t2HՇp~qd7w IDAT}=r5mWk6BJ2A i@-ҔY(Pr ưU,UjY$r8L~QeLw01C5̀VTJ*De@<89J"k[ A8g4jD3LSJ)pyP9%|PߟϖR~"QN!ﴷ1#4,EFYHA)D?H)AJbf!UCWmC!|d1iTiY959G@9HFXb>f{#lomUe9c3SulzoB!ɏ KK ཏ JooWU G8ybٶ=!, K%Afy2HN0_̪<2U1%UX.nBTDӮn7Κq?iRcrK[U "]ߌiJ1e cU5B#*<=:zPѣwh6_qd>1RbC@(n;~s,j;e4Pjyw$juwѕ]S чa3*A1$GKgfgʹdf$Q'c8>(% \], g(9Kȫ8N~٨M~Bp (4 KrJYm `(EujZSPFi"eO4RJӾ%_^=S㸧c+s,P$P䯯o,PR2YQI֕Jp2A䌵)n;(G~s Y2TVZPY.b]C,ϯn~V%&`;~̅~(P i#ƾ5 R!JPYgsVw T(aXg39R' -EW5cJ*@cb H\(D%s%P֒$*R*əEXXIfee1K R+,0Kkn)rX4lύTT$YHRi>R ΜbUyJ )|9f5*1% RIJIJz,[S/ެWbN3Զ 'ʔrFUApX Bbd1xs} 3̩* %R}>Z^V]PwmjÔs)J3C%cJ (dQKP- nCJZ61Dd:n{q!dɅJFjRɒ)D)T$R2RJE֠B*Ir6E8qͥvUF XFj0JEdVBjB@`JRe. 3eh B $!0QcZ vcS(11ʢ, *))eJQV|`!1UpuSY B Li SaWA8uG2ZlF` "2v[*%BJ VE )3ZEYj".*I3krRFi-KH1s,X[[raBI`ȥBHm@HA@8ԀB6mlu}SM)*-J9r)3 f)NA¶PZ*ΐD9ᬪK B(hsvSB ~dc% @ìT BJ:G))DH}"'e5(T( 'FJfQ\~Q5HbJ9[q !q]UernLhb@guBiP sVR SD| %:[յuL9#C536SF}O)u=J "gɏSE TRJeJ`@|@ :PEiMk1A1SUƸ4TmΈB @rm#R,7fY !%TR" ( W%l Y -J#*BDg@(!gT:Q} ʎǔ4E B *РR E%PPHP)c )36CR")*$RL,DiJ4L UE Q5{B*)B@Ӕbk,E)8+q *ĐbJVk2fd>S)B*R*%(q 13 }Z9g"rh eBIVRJI#(),"b"gPhD Z=fQ2% :)3"y ơu+f %q"f*( @S&DBˤd ɐYH)55"<0oV,@ )%k 1H!3\P[4"JHA]k }(1E9JdO2'qG-]S H@i(0J*(lCT ZM X(bV Q|@"ڨF(J19@5nX'`D齗drPJ̺:AG3dPVe? RRΔ2c'oS@I0GwmRUs]9OewˁGH "; ^x?K-'1/\@"C,.(O!B"DIsZsVո0v|ս-֧54kV1杹xtϜ'mr]ϷVk!3ܼ- R} |L4Bvs |޶)Ժ9e 21 MwN3 9#xg̀Y\Ǿ.㽖+Exmݎ:G[/D֢,Qq RT nk%f)8ߝ-@sd1m}( P,J4@erQG 3܍ZR.k%g2mN)kQ!==2zg|Z(8Tu(mфREO}a_KG"mR|YVʤR6;VIϩIH Ҋ@`n>a& aڌI ̘_nݯE}vʖ!LQ(wi2͙2#rt&"&@##]n#2ۦ|}&LheD&fDOaDpp gZ [)MD,lzHQf ‰VSk>w! Ͻ"Ht,Z⼮Ay<ӝ3!cn4nTYR@ 30E&\j[ 25 )s0HݦIDPs>&>Q0MOJdc‘@٘JH,@YIDDJp:ʻ0<̌01戈VmIǬ0h 8҅٧']!&H7Op7ԈADHZa ├sHY%IJ#20*JBda[9ґâ{"$?{]Y|V "x&Ho,9"L ';f812MYqr"ʔdfbRf-qҘV2BWQQJXFE=1"J)3V}gb&q9mTH* 1JYÝ #*$zPd |>[YP$@6N@-݇i+uYu{礽LE L$E0<)ȋR{̴Dq 0%0*dӜ#,E"0}ik>F%Xe:##))N$$A:=(ͦ~z{Hm-6W놬>s> L"L!)Rdy+ ',LTwNWS['!m%3kB Zj*͝AR&*Iᙄ`BBw#Ă$D`imi>Gz qzo߯+ֻ3N}zdy,@31̉dfO_N+Q\22ܝ23A,9fn ;0CEKo^*岏js-h sSBh#"Drx <*H3gbRʲ.v$%$I}!uQ4DR˅Y|eB]\0{Pd8JiLZ&3""ALB>R0_Se&AHiɇI4BjB$in%(9}~ }]_2#`{Ny`p 79Ha2'!YE"#ALȜJDF/*gy_O?i3ÂDFLd$6BV0EPid=A*F _oSDOOo.R"&ާy){K-vP&PւDg& { adј~zgRڹ!aBíI%)DTlډ[xKmM  Ȱ9 P-n1$JXDVa4fj-,tTj{|(Ĝu|>: w Ƭc{4$20N&V =c23syNfc><ۖAwDFjQ-oj J"!"eX6Og}o;C,̥10MEb} eVx$uO"BʙqK&Vg>AlU$_)ndQJ1PDŲ4" 3sSXkZVe2܊YS5e"'{0ZJcpwǴ)* $Um>#4>?켞Tdbc2QA g+Aj)K*[wZ^r}>gP>BctseXo{do1Ed͘4EiEI8)sVmhZI)=d{}Zc:FL-EF+"ln qt3kD)pp>" o"JbȌH!3GvʗȲpEȄpIH- z&a,pkR%2H2űTa"mas ("" 1-3(吚8sR2=bF@9L2a!"E0Jm 'U,9^SRqZ9&^[{) 23RM63,,4"D3*`0Epe*g IRgd8A"ZIA`bLK;]"s9I0M7y8ݝUNp/M uv>##KimY߼y},:x}y~|8]f[+>=ۜ!EXݮL,4smwJ!ξ(o㡭IɄ?Cs}US(^cG§s9{&b!ħLJKv˸ԥ6>!+o۲ԵTo %goٖ&}啖 Q8w>aKzt}juP]y,ӜVk R>d:<6瞻M=[3ڲhk?*ZITT(F*μm|¬E3A3PӖ&>{:uiԄHJ]HCq{>Gf n4mEE|LL|RJ}tjuIJ-T$%j4!K~  "/N_-P 'H&yZ>㢥.M M$-Otw*ڰ۵UH(z:-ax~pBi %Ƕ AYHN|8TBQ3JGx&H! ͼܮZ, =D=K29(K97»!29cxjoY[xxd-OS*r~zzms .kM~!T.)ITnY#bӂf$-QRAkY朙Π4Z9WDuNR 3Χ-\TFf5RufTDIN"9Yriekܞ-t7 QS.pLhAfVo}X߯燻z:-YT҈IE뺈HDֵtVwT 9F3aanʤtT52I.oz2IXǰmʜZTݶs-FBZJ>ҩo]8bԶ>~E T󶭭)ipӵwXeD}{?z\v>W"냄SDݷV[xH}X>׺rIDAT޷~JZlreFM=bݗ;ND`fjxިUv3{cY Ъ\xn7^ !A="|=-a@O-)SH0MAջG"0<Lt3Q ! 59-*"̇c#"%;1K-8.HQLU)12B 1%WD;@A((3Yw߸Ej TV D-ݓ`n"Ƭ*fNfA Ȉsi9q=],`b(DD[ÑU#:as 7fszht廱jAd9,ҪBDG[:ևG2SRrw>3aξog)ܔ!XS9RV)Ip`v=m}ITL),n9b6.O5eHaZYK s"<ƘݮIQfbf>ɘgq6RE 1_Ɵ{T5#FܬRHkkTh\5ֺ{nEHXT?#_)-D| LL& "gXuRBm߇?}FQw~Ƿrw8H z]x>yG?ǟ@ziID"ZS?{e3F~/~‡织e=)cn~ǿ_ݿwo}Yx,m?g>w _8?Ҵ5s ۶߮O}Gty~g2l}NDE?͖W;ߕR?_/ק7oam[/~O"K :6ALKNï` $h̟w`EJX٫ڪ0J '>$IRԥSk~?Ά)!Awř7[ߎSR~_2fXDwό\52Y,7]-hk7|9kQ2 әZ3}ݮօʢڜy-?}Ot>/3Fog޼~rx~?ߝ[pwNm@Lږ7ӏmsR2e>xwzD>[\aoۭ- pK[ܖ_dCJg8:Y0I)"\JYַ֓9{ww}߂2Mǜъ*")Y>M33ܶ?-nz].i)SĢBr = VbDdo}YUӿ3O_'}m{~C&fW벶RC(#1|\>{tmf|?'ig^?in$$"Jx#H%j-Z^˾o;H/LEv_T_N|Os,4Lgn88R&(BBXDr\Qg$:ϟ}Rk-y{G F{￯oK-l},mN^D[%Rt^Yݴ9jBӯeg&$gq F(@mY?/i6g "- #G3݉ b9% E à."pPge;#`e$829ݶ[cܶ="h~tOo۾u霙rG6GFfD>>Ƕm>mq>p~~~?=ٶv?לI aRk1pf{&Aw9"1(ݦ }DvM33sR7|4ӯwo=ЏemeLe G^!-RV][kmɤxL8rL5<$?wZq]^Zk3 dN@PAs$|9uzBFںv3id` ~W{5zZuiU)∈ - P2"!d HO&2t% EУ5cU{w?[&"DJhtpԜ,JfJN,IȧEj"f<bR'R*"cݾ_ {XӺ{UR3Q[;:%H.Δ"<ɔtnna͗g"o^4bRKK`lzJw%"aI ,#BUI iպnO|ِwNt_@A +asM5 YhG@HEDsiв}gsZIyպ:9h)O?=/XN'ss p'pU5s dR¦麞O˱D}E>1/{z>yzYexmnV 3cNƵRkx8"2|ڌLi H EK21KUm3K;7ϓ7a,糏ɎdZH08IIt.JѽwʲHu)TﻰDTRy<DB\O|ӾGz("DlXEk=+%jt+eY\$=$E1F7w&9rwJ4O t>tHѭiyƃ%0GT)TQS ,o;GAKp zh\)&EF!(MbfJD"2ݘ?sٖVJI,M)e9m̙LJX8!D& in"DLp$&!-<ݧ5o;}L7=)s*2+3'(G:D5ն*G sO:3u?}Χ3=|3Z\!EBoe¬pJ2EBEKD|bfUQ]֕3-e3YɅo{@bILD D03H"ui0Q k!%f )>G/B() gf&DU,-!5).}Ω. 6#(PT$lc}oZ3n1F;⠐dP! @ش#u}9TU3.?WtwD)A@-J̠Z$ܖe $"V 2 y\}#s-~e]DEPcnozAsE#,& 'QmۺZ}>@]T~s}.Eд +ƈmnjmfs|px`饔v{ Op-6 !A0m:|ee]O^>- } ~G^UwH"9Pj}O:]pݶNE=("=˲6-V)bIE~%u0Y( sQO#iլ,][#>iYe)#WH1ߟ\6H^N>Uc. YU?*r0j\Ezazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazaza~2~{%\CfFr{m8k=>g1P#qxsR)6SmigǧOXk=D;' EqO]u1~{q*0||쪤& +`@n$:&u`PPkd}n== ȼm{@6LV1=!ARR%"VcA֬>b3to1c ifLH3TzU:[b7 gFl{etOU ʖ+osr{n.`oUZRlnk=b rs0PָVNͬ5QH!<}>~xM(-W+!ZCCM8C7`3/WCCzW.b b"OR⮭|O֭MCp=S(\U@JbNܡ8GGH*lݜfn&'[kRq"ݬ/1Ӕ"H$ }e7-*>(=IM8塔:Z󶩞˼;\OTgܺ`F2:۰jO0 c:V<<;ЭNT8O0t0CmNd&rl \q?T Vt u~ʐֽta8̥RHMlIGܺ:q3,ZJLL 6u0Ź66y*y\՜h}Z껖: wDt(3@DAݠVQ _("A݉ <]]\wcǛvma<4!Z+341#d5VSyƉk{oJ|2C 7x~:iQ_>{zGbsUǁ1Mt5#wrwf^ tDUuWA PVf@uTdZ:WGR1Vώ8/JךUk(D1<1a X tah MΉbrfVh|ڦuU0ePugǺM𔨺?ڏJDpkRx|wNR@.`BN,CD bb3 ; `nnW )Aly86Ѷc8<܋:NӼ"Yuy7@ F5we2CAΓ*QTnzC⮩PJ]-֯aƨLWPHCjdWyhB+ō(60Z5U'q{]ˆӰ|(ŵ+UUu=Pg1KՅJhKTHb+ JK;'80nMӳ*91vv5ƕSp>39qruS۶]ۦƙٝbꕀeպ rVVv((S)LuꛕY$]`RS):ZkL!ǍN+_$:6vӦېii8s!WZQX"֋=UxqÇIvb?^^ߌowQSkɳϟ|u;|ݠfaRC=[slZ~rz*;Ӝ/w{fUMv.rrrL"19ABbnj^=,Jd "WT1yq i_>{APX&J %TP̐I^nB@:#Wj >7 T230˜(0 Ufkf8 wg&b¢>-x,>ѿ?:  ,0s3+9^"Yo!)"}ɟ_~ գm1l)PbqQ ,^z˟{xL "9|"&@@B0E0R $pruh)pӧO'_}~x!:ja 0v8Z+ؽ 0*w1}d !0uV""Eɳ_{^lv á#-dj;Xø-~apnUTvm$BlS$PI五rJڪJ}#v+h"&T:!DA7!Ʃr( l.|{E.s%5 pU׀ PD::L;-S-gU-TNY=LWLR?.f: %K$-ҡipQ`#+NN7BXԂZn=֔`Ff:E}WS' p"% MLO` :Ʌ% WfoIv;prƶa;MÈдmՇ<_nUrna7HO8JCS/c{%};_|_^ ϑ#3bإ4bB-h7VJsLrjMي;'ޫ'~4'_YVӔ1D.Be/.NX~O?xуO?oWO^>}1L!9OB8;tyqgqdo~a\왅_D vU ya&"L~ku ^`Uw͹fqi@NNs1(MJmS?{j7Ο=yI?rwo]d <!Os# )Y V_]?zu/FD>#iܵڄRPJ9m{r|t~4j@5YRbZ+1n{o kO ɜI xd^U(j0٭Fw/r#13FN`çY 5j ZbrfA;08P_+ /?q.u"O?R)$), bàS< MӪ4MDF$"]AGaJ`?0\\]Dˏr1Ni;1zqU9s$f71v$m0sE,N%dy@td6[n|,&_fjrw%oo{uo8 J!Pw2Z94nD&)Z̖65+"T-ZJ.J\gAڍcX'_>5Y b9S'u68 : b%HԪBkkk)m+ss1'MtOη*˳`Vq40`?@]5!";[+B#wr(0RQ>Vn^6W_^ nyZ6G j\=s6Hr)}5&5m9b4׹cOÜkӶ2dZpj8:FRsR8dF"8Hͬ RV]SΓj]U8v;lΟ-jD D'P~%aZM B p||4<oڳbO^} ϟ'@F/)U5:@NBێa G=_4 s^TvԼN9ar@JDt@>zGNK.^}~yOIzﶿ/C|~*u,_[[f{oo1Y)5qʋ3ZOg/d7|.aYmOKަ]{uoNOH:UsW~ų͵tHt>m?3?Y&Zi:hO~ gw!E[k !ZvUk oKyX#ɻNӏ^ܬ u= jӭzu*T}~~%ls-qPuw:쇒+Ku]4ǧGӓU 3`:9@lfBtvv䚟_}7^^5m{}}u4 ׊beuH}d{~WVu5"35;Ṭ&ĦiBUUsι!صay6R9I%"*"EMD@p^o̴0,7Hfw9ݗ.]D̡ c>C; I NNeT^sKy20NjBaqNj$/8:K%6c#W;!o4׼k| gE]jIl;!^G3#[ZUf" WU/*?rK@@܃,pL/^]tӘ2gcEVM)H)1FHLPU cjC"AŠpjimzP m3P঎7UX\8f,bY) j65! !;5E#&ڧԐ&V006ؐNQ?^V IKHR[k!Dպ dT$xiG^Ttn|"V:IjVTq7Jg$IA`qOJA6!+܍DQT@uQ ^'a\hת.'JH{GHQ: U%%+juxM*yi[;+ZNo3$'ٴݔܭ[lZJRFZ(]  iu‘R6a>Ԥ͆O>)41ms108N)M۔Q{Zwf 7mGןӛ*mRH] K Ԟk^LP$!Na՞Blauzxf,m,:^?[7dtvXv9ҭu'N4yw`\m-B/ІXn4Ch~%Lal929͓жupT!#ŦiWG'g1~?a?3yV+̖"SFq^V'''mL} ?j)4aa.K)!F|zxF4;:ˍu8lǿ^J@óiaCdƳmݖ]/д1 Aa☸ 0m(>:oo.n4L,gqZ:Ԫ Ppu&6s CD3f!x;*U6喛d`V`b 941)!ZLv#B4pv;yH$VUU "Lг/@rX H5_ѓ)7f֬Yi&FDc么ąGҸJx܊/c\|^SU3j;jA9`5"YȍH/;^P$.0rk]ƿqo` WEd;‹LR,5ek[ח%7rEk}n#KW &"qܬAqw(f, 3sMa`TRA^\^i:i5A; &M o9Cviv:<<]fBլ N IDAT IuoD A_Uat8!RwCɺˑtK:MmIBT-vM ̍rYlgqFR;P.a y?MYkhlΓ6uRS%x)P'3Ezt-s!OM!P?Xoε}axyu쮥ʼݗZw&p9|5E-mM"cUpLi.zsa'RVhn$x4&ѹf.qNMo؂+v fl\\]S "JR[i'8~Vk}FǛM71UJN=pU/4ilq{5XͽVz00«WWH_51F%03Grb#1ƚ-< >L"=Bhy >u4p{E,h ,=@Cwk]- j~G"Yf1fGU=L]]]i5wۚ'-ycpJYIwД] B.YchڣU 95lut77:mwMpu~8CQ48փ}6|o՟矫[{Nu0I] ޿=<|t^u/>}YS9)R@^d%ͣ_a}lPjiJE|<*@qM>JҾKmIOry;!XueANp,ݒ:Zm^]c6> oi׊ڶ#95uu;sVC6%~ѽ{14YnG"2ͪmbpoU)uF->8~vqݍOھ]<ܮvy׫mDjjcI,׶i68 ׷QU;sjbUsպa8hʍզibB  >9 N59,%(1+KE15zg7 oOrwR8 p,QV/euzM#"yu[uUZID"!moٳKYC~c .DTk9+jA9g3[Rh&TUubfRRJX~5wGO_ba p3;a̋ Q%uqf뮥.Wy񣧿Au<} u+޸@QsDh}pOo^X|}eJbwq+xK_\Y_4k "%Dk銀%ѽ{/./f$i<:Ù<0e jfԭ>u39b DRkU-j1PHQR'S LCV$Cdv/05Lܛ5M `7CC1ީ[L)u:du߽BcJq;,ܤPkffR\₩VGP3s"Us.5jj,A&r@1vH_ugWnimj >F }Rתm=CJ9\s Q@ޤTff2owy1׷ߟǩTf6lCZ5G8.nWvi:fQg%7US/>MI9H]$ݚLsZz*Zݝ`!#J)THY!23k)c\0r\)%/3Z+wy#gI_޻݋gϮbJ%,14ѣ8^kqq}Y;XCB"vZ}2+/5KsMZPw&DƻvW|˯~w;x1 (ZQ oim= >FP (UhխB7{L'_ Z]L^oNN/xW{p4Mn׮O4z~zm۶ <2^~7aqY1Z棓ǧ53;" !bi5XjsJi-szqI1qj%~e%HJ6ve<0/ɢD!-y~yEĮJL,ʬj& %o*B031nL0ܔ UתVSp~q UdzjL晙ڶ !TðfVˣAHPamfjVk]JĘj-IcM7=8z\矿dZN4bXM  ;7YI8|`Υu;ybMx e rw&teY 9S!ˁNNNiŃ׹Ԅ& UZdS3͓YLQ%J<@aY%78ֹwcAw} mDw Tl>%\ךQ&7hq_m"MTPJeYݱeF߯m'T[QxTKP#B"Yg3-Jr8:_\8ڣ`~ҶԞm ЪiWiӪYo|~8眒V'"INvW^4aar9ɐf]8jinWm˜@DӪ]u]J̰d(TuQ i"Z&,(B)irNHrIBt$e!w $K c:Lc_mɓjLT5)ĜNUE׭0,nX@Q >~("{+vI o͊E !"~'CnthWX|ƮF|D8/SU@G6@y: cwHv|^DꬱgqFc%E*dq#lݬZ4 L 篚]w-f棑@\8 b&9Υ[NGK6QRB) o1`nQT悂$Dr-:vݞwۻEǔq˜M8< Ev <{ ,ժVF m) 4 `"ZcsmW3 pUU-exp $IӢpSNY͞>}g aooo']s6<!t]G$<-ǹ}wyvH@ ( ^#%9=;=.N6)59g?Le$%"MHNko0 ^\UDh4٦iZmCymИ}?| 2,5$RUs'"Uv֔s׶)甙IDr#1< 2[L8W]KZaWL#Բ+36E4ܼc0V'S%a&FtLT?'۟`2o lwx#t ^\>g,GOtFpjs|9!@r>Mͺ6o2|wOS^ON=?qe: p7QRüfu'm餟|2)TwCע:G-!K#n!i2xS@?iL{:| kEN| ggOޗ0`Nz݊H& P)eެ}ק̼dޙr״6<:tDZƱSIszIfQ\O#IM4h:9dyrr_?yu.eo)}?pupgiod4/JAYC^FN A $RJB9GrTk~|r)mxDM`48vV^Z1c95"e^kE"/eGD@  D@6%ۢaIC n0="-LeHd@K8΋DDw lXB =1BCU*хGD ˉX٦2x8,SabFT4PU殕ݎWMӯarU4¯?K߾ Iaf]rAXR?Xf2 "Qz-0i8,Ά0W oA8Rf5r CIY5A"3cb9#A!c 1w@ˆ ү8'iO6i2rb iSbd Q) ]xRͪ.$`w04!#9qYk1y"]x6ahfS'aw ɬpC\DeF>'f$"u@=֨ C:#uZ*^\>lljsҝ0:CͮVkݗa-lNDdI)9'.Z~@6mNRJq'!8$3cGlerW MH\ÐS^m69z= ԲA{TSz?  צk//ZEi/V== Ϡ*\~f\뇇iww(?y+@P`*Tnn;f[hR*f [ørY`wu_'?jzMRNMf~V {cVL×"3̔j >iRJ)VY[BRbRJ (̆Hv=ֺTS Չ<J5}bya@JB$\ I,p.pجR#^xxM(Euyu9i?"0akI3Ot8a R_#r}ݏ40QE.#+]^^ fˠt[J3@,DĢFːl@d)kh>A`vY3;L=*HӦ+0X 0jZ[ID"T*v_|5"rӬj3 #, P GprcIIi'&7T`ij9$3-IsmJyu.0s恈f[u]P ^R(1ڬ7;;>]^^xXGIgM Z13!ZX Y(whXk]:G$"} 46b2)Kvpyƶ#pefc@D  aD4k/^ThRV}YY4l_-#3tqW3SDDd} ']l/䧪=io?;>]ObD}޿{NfݮqUιmʔRCNqۯ ̖ݟ_Ub۬Rbnۛm):VwL؝` 6g>:i^_2;h>@mՋEՇjvn99~Yl>ڼ37ߜ!abD7yꦪMaNžd az SjH c0-r{{[T&E]CsȨZ}g-#8903'0s$c ,hS࢓bY=oPhhyw IDATm2BP 0/ZZ-TC͵֙)]kWmJn9@# .DtuP0Ljiяt `Ff6Ȑ)y]\@wWezf}_xd .?'Z \/.^Wb$$`B% G \J1xlB.f D?jBDYê;)21$%m̀hN,8#2k"wfZf@ | \'zA %L(OfOP8M()Ā!LY&M:fhec^G8:/Yn,8'M[Jwrs}us[M\%Q3"!!"0aB08h)p ,Rj[R17l$m QR Ǫ}zDnan,L"5j]"P8b+ C@EBg$iv6durcp[_>u 3nq6aiWijDVufQ0FX 63"]Z9gi L%8UYԔfA zQMVm8 \|򣋋z~7SN*.~ɷTVv mR]گ/jŴ0n׶N_" OV+O>z7y3 c)uD`6kȲS~sWo^~Ujn7T @A"R?]:mofQ]!m\>}O_}hcUzy1 ZƳ$Vk8gV`{7t? @ (m7$`4pZ|(w8ΫC݈HkgKK $ Tn5#DԦ,)ϵa )(5) 3LT"'=v\k ' [%dZ>Bd"JG&`B7{(q7MF]Z DRj˚i'+VJ$'盫o 1eDv_'_/~՟}׌뾃F:_~uS?O_mϦ>~zw_苟]mۇ/xvǸRU\Di+ tUBgMÐSD̹ ݏW_o~ѯ`zy&rU}"widtg¥k۵YoTAv!Չ*,pE))wS+M9qVzsڷ˗Oo 8uBD-gIp<<mn9KYuMfAiv8T53 Ni}foǧ_>/O`Mra?}Wg)J߽06T[kxk,V#;(碳WypX~E$s5Ww"[8` -aYWuy*Ka%j@ ؽ:3j135G*)ّe A6aXw,Y<#,myHR z!\+ y&:w[uŝHwHF%0Z9rRDaѓMoQYDuV(Xd!ؒ%\ Ko1cȃaB"Bǿ(!*ΏK "adsvu\v{ jx\|Q,. zB[ui@3iG; :~#8){ # `/Q +u `\֕!QmjF$szsn OTuaw[:?$bd3SwQA}[,P1@ls:kܴLs^L#j-?0T~ì#,<j^v<$!x&c79eʋUiȢB`:k fн^܊Cڐxs7;ܦbȰ %@Y{2b7kh#DG Wsr&+$I0E$#pvma_u^ u38\lqZpv=nmD$g϶峅H[:I*2s"Lӏ^~:O.BK \J1s`b$]A! ԙNf^Es~z"?\7p8`%Iu7` BݚiDR"N\.9v=2B ~E$%>ajUMgEk3MeR$ b,D$F¹ɂZ4O=X$Uղ0EXX8IFz׈ps}-ի{$_k>v?遼?9ysZwym@ַ]l֔۹ܼw>W_Ġ />_fӺ^|իkۛiajB _ꃵzm_g/7}ZWI?>S~e`Tx}^>? 'm_|OEM~׵m: Z咱[xF|# ,_"9MZ@x`jZ߾}IΟ>x}zw]ߗy-Qqk_x:O~itN6}9?fY )$&nGǏ~_|>8+@)_a~urrz>f\ |`uʪo*Y% QR48Nms@D(]h9i13s@\BSUS G>rˏRsR_5)c#juwma­O6jIQ{̾c@ZT&,Y(0 `,H{sDQUz4SQu)[)ʸK&>Ddii6etR|M"RHyos`@G-׷YǮ;r =2!)[v,W#b`G h(~o&# 0|vFc9 3!=5$I/w5fDGUq` fY< $ Y^*p,6v,P;XH+ CKN%ԭX)fUC-|٤.\myvURb@Q 8Mf2;`&lڶiq*VbjpwdfCOKa$B"w0 PC$Ă^q ˋ uy!/,N3P<:G5&SĒ5ǀ@E#:A]hf4kuL,D 93A B8AHl֛O? GI!1P+ c~Y GH[a.qD3VJJR2T6{oLjx8RY*yDXEbC$nOdY-`0%ƛi2; 9N15$5Z!-hmp=*NZQ|kR.UCHu&v02W+QyU҉H5YA0` q8wwh<\Hyxy!Zl.鷦iGEOvTV A6nLaQYޫڌwwL4 XP%&S]v2&H>⛯؟쨺j_z!"mԔEZj}D!}=Mk%Qӿ\ LGOSyjmtoRff}yI%?Y7W_~뷟_q7:}^-|~w'~ߝaqow$^*U{hж'4[7 Fu"}.:UsO޼ϊ cVs`@LPP|2%f>߼/?={6;ТZG-VZy8`@I*'8 q|xx[8_7-3B#3& qwz3n09U{zwpӳ,"ww7}y8=iNQ Q0aѫNO7YANHuȩM܇w~p؉Ï_:aXc\h#)痧owZ&(ax4kyRԆT:J@U$H=0a[b$)Mvx]9i)Zܞm~ޙkۜ4MhZ aZJ"95"x(CCnrvUۻK:"X,38~_} nHezWώ g4y z|/(W^~Me,;~o!|G?| ϻϾ_\պۇJ:o!*/\M|=LZ].OWSLӴ v/O&ﯿImϦ^` -ڼ|W}is42<i>ma>]___^\ܬ[yp,"r3HB<4}ܠҊ 8F 3 ԈH-6Yhuw\`&9x? _}pN}7wBҌ P< ΕF>4WSS<{;so7 0LyZX|1QY}"Z`ȀJa&t64jDg0N#qj% 9%CXWl+c|Vd'Nwb"R41%0X;!Mc,P;=2T `mj%>ܜ!u$s6AOisy5T-Esc44֌qT~H̆9NI{UĜ3x% Rc]H,y&+EPAu!qBnWtgه1yD8 ce[!d)C)CDuQ T>ٖB9fɩgU[;5˱v(!̹( 1euNYliw(|uzy΢\JNuU*@IS Xr )0Tu=;)cLlB_^퓦5dZ7"ΣSb2 j!(G.EU' $W*A~`c:J.9̞As9)`Qwz  U}OmѐZ+"sYCH1v˹8Ui:v)㒷ۭ1,H2B[aC,*0t ;3o>NU RIE%/ ʲ" rv*g c:Xs ^.qڮooC|8 16u hCT;0eo}^(>q1Q1寯37e0٫qz2IDATɟoz8l #a-Ψ  k1}i{G>ۍ1Ljݟ7YV9N(=@mso vUy\և!p17<}U>߫ʋ>tPJ֘tw|>cvIXI ,5c8xU9t?@֑٘o6/=Y.^t'K4%,1e]kEsˮrdn/.TiZ7Un){vKPRADڳʟj!gdH2q19g箥gł=_|o WMK ݝ!c?|;+ c:gd6,c8$߾ H1Ӯ""U)/7/^>W@S58 %g ovoﶯ^=_7!w\S'(puu  Zcw:r`#S^,[ce)c;Z#kHD|c'nǡvNB"ea.|j^\]{\.@Ţ.Љ?(D?DH[^Z\5 MV GTV nlM?[lECZ|ڦmT),f&lif7NڶǩmY~ۍȋg+DR\,;UaQW8r 7d6 8ESX-ƒ"oKq૪ufšRV mǀuvٞ4u YC"t UNlfs\o~sР3v,(ڝ*Zy!'V>9YBfd|4NTB[@㨖l#߯uI=EZFv*4 5 VXKᬦ@SKEKL13H8l/&]?) S8b(6ղ&C\AP!ʭwπԈJ(Zh.)38c@ʇi$d|>Pd.EJeuL@{"TOrN9Wmw}-Y#941mY`Yf{ NRg o;fI)w(kkڇK1O̥ yB‰ErdaDJyPٻ nnTuC2ˮR$~juCYU1CC BRL9g*)?gpn/ֹEW`nS4^eR?1D&I1%~>=^a`/aaT0@:@W3\\:=Q>eg0y 2v@#DD3Cð՗_ۗ ) |q?| ,nYP=- voW@A֝]ES-2 ᶭj69RUmH[D G}@ }Xwݷ.^|uv kuY aW=  PU]ysx.>RlYݏ_>w ( 9|͋tHk5=N ֺz:솻 iĬun]IL% P"jmJU0few"9hON;h,!7BHۃ*p)#(vߐ 01~Z=]o-;v5kEE^{}gCilľ{)+]mϞl#>z s7k|yu}WW`YSNr}2{0hZ81Or}g΂f+snTC׷7Ƙ^T\otvl=T[̣xx*Ǥ?Ȏc-=?<p#:\=>7"<1n΋ A@"ۓ8t7[ bNɘ!Nf /ov}tt vF{c_sv}@@PĻՂn6xۙE]m?NPW1{?~/7[Xo Pv(޻W{Oüm(lUA$¤""X3Qc 2!Z:?18Ӷ cOB!e*n>=l8 <+ _Ċ5B8HeL@ We "YXK)'"b ZhM ,!;@2-SbiZVVD٥a,P(fA-E(VRW*A@-b,<d)9,}H3U5u4$ESIs!4)1Ws!e1\!C 0Nƀ1E<q|dX$Te4]S#uEbW;0H5!@𞜭8cN;Cn臘GDړ.m3'YqѢ6h"UMy1%4CBɈOvcxD;7#}?"3wn&":99 h:6Dh%L,h9g_UsD.5!9C}QX#"y1j-qRb~0M'[r.d9Tdqp{I/3[bE #,Jw_]ޅ7N_lHCH4b@Ы2$G}uzZO]@8ތtUǣkh+A\9£Q4!+aMuV` ɍq곘iK͓8&.?xOʨ1lvw-%#Nou_`WP `ݿcT](e^^ֆgvu]+Px_~ӤqRū{v@K))m$%2}PDTh-ZiVl 2|&Y3?g GaggZzTx۪6J%8 (&GX )2pmFD2"H,S  ,~@ _7:k{G[7o Y4EhxX}}t͂]?U**$8PwD0sfSžP W[@$PC%GY"RXMQݡ'BETՠ;Yd7k9Pկ`٘ )oBkDUEf~HY'/V&a|$6`ܿ ˅GT$b x{6dFuOsd8ghoKf a<|.8jA@nmUoOy2 #(kH"2g0:"Nq]>TY-ې4`#B;q|=QX ^D~oŪwn&,g KT9SD$f IDsS1RD$@>4Z*̥\/M MU!N8)œKں=L *I Zkڰd)0)Q]fT2^ѯ:T*h%iz,ʊXZT {|o%rL%SJ,U2L7CO!BMM @D(ntmPpJy- `VX;g+rt w O\PJu.;.(,ڵgIn+gU![Ǡf?mRΙ>ֻnmпy\+y2^ٲ+v57}/eW׫Y`YbځP+IENDB`lbreakout2-2.6.5/client/gfx/Oz/back4.png0000664000175000017500000017527212140767210014663 00000000000000PNG  IHDRkXTgAMA aPLTE znbzB:1ƲZN>ξzoj^Rʽƹµ%vƺvj^2*!NB6fZJٶ~rvjnbVbVF:2)VJ:κö~rƾ~n~rbrfZbRIҾ ^RBVF?;RF:)"F>4²>2+¶z{ƺzprbvj~n^ƶʾzjZn^NvfVzƶrbRξʾº:.'jZNzvfVJ~zvn>6-6.^NFƺ~nj~~¶zjv²ʺʺrn{~v.&zj^zjbZJBznƞvfZƾJ>5rbVvf^rbZn^Rn^VzrºZNJB6-²fZN²RFBʾ^RNF:*j^VfZSzngrf_~wbVJƶ~nbNB;ǢVJFbVOvjbrf‚rj~rf~nfƾ^RFJ>:fVNjZRƺ~rj¶nbZbRNNF>ZNBvr~ʾZNFΦvzvvfbvnrb^^RJzjf 6*$F:.VJ>ξF:3n^Zڎ~rVJBʾƶ^NJͦ fVR*&jZVB62ӺƺRF>ʾ6.%f~tRNS@fbKGDH pHYs  tIME;y IDATx{Xwϕ[rH CeǙ̦U2 !X9 <,-ȍe!눓gCm hiB_wCcd\5^L vhlT~k>t}v|½ʡ/45](LfRkSv³k?|y,j[ok25r!W]Ke\`~lDOwӭof=>f%E٨( )b=|˼NR`jO=l?8!0cŔ,%Q62 4էBFn۱(H_dEh8M߶%9wND+I|X"pm?~\\n1(ɌA4;i1ő$cM/4O[.)Y~?n8KgRjQlF,ԃ{.ď;?+K/@H<!{Uq/lYɈHT8|QO>$8%^E.#'$Bꋐ宀AS?LPqab\G<|/?د~yGQ;۶}l΁7;Yn1$,(e%:{ya> ظmcD\p"QzAN4պ=89(iQ<t)ԨPPżx."nmgT: cX4|mNNIn@1:;4lYnA χ*iI!/B:n|o;lAK>D,%O4Rqaοۿ47[-9#6}졌["r_595h<;V:)j!PUۣk:h L^'=A8$?K :[8)Exk>%ML1@5hIE…1ԫs25AnxB!Ydv O!.FW^M':i7ǎl$̧˸n3|ϧ~RPrPSuُӲkQtKsWpE>ᓟ/6L?\=1}e/.b?\ 9%8sgCws [ kMqi\BeqP&FBRƜUcq>A^2L`T+TհKc- 6?9Uxg;N]8j] c_Z ]f X>t!U?h%"y8V1Ta? ]ө?4?Y{ۜ,ɨ4otIW[Qb.]*p7dm-?=dT̄ow`u5oh if†У2B>(NA 91BѥP93‘rq"a< ahҠXg);2g%V$3kM72?e엕yfu]%א]œzo,-J^P+.ETͧ~jx£G*i񜇷~;O\^HnTb@o;670w\l}b,&Bq{ic9d7YrI?l;8=շ+e9N%&/P}H*[X\1(o8Z~={Ԑ6z 8lzAQt*cCF#u.=:)'6>f*7wkk~w ""Т/Jd@.Tad(- elV{$lT.֣m,)GǣḘZW"&{:7ys8sb<}8Zt /]*[וe F*MXOA"Ͷ+^!-j949N'Y #mkF岲:%tf??͇=K~^Q3 ʥ _wm,! L ׃0 i,8SZLQVxJ5c1} yR~ ?hҖdAb(~J&ajQQ9=eFOۦozg.Y(P3܃쐠Y%[(( %\q3@ˊaS$Jdq'hter#OmQsǿqT 8CYtqSoDZY#>p` \xXLN5hw ֋rDKVkXD \DdaXS}҂Xɺ*HH$A ROgj˱c>M5LgnT@ʇ.JTe^Z?fS`!:ǮFK_0˗ַjѸF;_,ߢ GM^vd\jPnqC%H70^ ,S* 3)hT}k8ڪE4s ;'`di6>:}wT8ȵ:cݷuڕz1LhVQT0ƒV{4:F̬x(}b ;1">@n B9Rb8pP"oT`Z-ټ oiZ \}Ԅdgwr)Yx%(2JgIgg;TYJ(Hf ^Gҋm8.a|BBtVn!0V֪PPƯ-xahFQߏdJϟ+{7Vz{np <#2ڦ@#ߝIa:jCewe/֒WVK9Eq#HE#]7Nrt{1U^v4+"%<|x$m':kw PO`g78)e0R<|<67=%)̮ et![lmgsxN`Ͽem+_4|p[ʯ|u^˓eI6ۍ SXz74>4Nxj&,f¨(j 1"*ފ R=r0pkRw6+n.V^'מz\6vDBV|76!ʼnWj^XdLk b ;Mpguha+?*SZѯ^DG2ƎLKbFwGG3E@Pܼ!R\c|7FK*zIY+__A_nJD΋x\d$(ƆXC] Byl><87ƬU2:s mWڵ麦bmײ3 s21j0`cù'9\4 .P((vd&e5"ffND:V4 7g!]G<2I O0tdg8MJD$iĵ1^LraO` hYb/|)ﭽ=G|>|] V,rfu4qֱ˙d9*l r b}X{$+]=[:5FepX2~֠F"kI%55p_O,>Ɏp'GV|Pԕ"ܫ8$AK;wC>w˳JY$xycįR>׺s;<|VlBUfGǸ 4%$$ EIeP)/ ӌWڑ+ޒ@g.^^&j&wDvi6+㈹hVf1+i7.KXI$yRy^ g dM#-e\\\zhUc^j6qh-sG ƫ As9YTƹ".r؉3)IL8JJʀ*z,Zxw7z̙o53^&uPr!HšnbA hNO\^jֆ:rCk4Xn./XT4wTL 5&{˫FSvZZ6OvBoyQT+T}~6t W I`rAi\tn+Te`)BwlշQ KG&X<6Yv*൭[l:K3Kas^^M ̜4Ҥ+HKIݟ^C,%~,u #b,%㾲K 99 ~pSO`KTzg P6-E2|X+vxzM3HDk5 eQJd:ds+X^\>࣏f~Jm(s,@A#>,P'T[DT.#`7&j5u cKeUxuWj?̋{;I2$$~;T[۝ e.w+ ݦWMweWї/1qO =S]8}~rw`oljT'޼ھ.SVf1 Fb6.3^x*I ndƙVbÙ)BW6NJ9Q} b0bXBS_K٧'ζ\Ӳes_,<2ʹvZ ŚBoi2Dd@B A8O"\ fI`R>Q* hv4>hjYZ.U/KD*6R/}h\a FW1.v{8aX&3O@]9!HK|[KIP*ԇÉkD[Jw2H0:C0JP;ߓ9ThK0{yTЈ~TK9'Z{jf74 2A~>V0  GhJ~*H yf3naMi}0ݶkЦ]9oE㈧݈Jň Fзc[[)܄׉?&;77CJK^Kaְ%y }֎tGӻ»%Sta^q@:N#Q1,ZҹJsyj @)Mgk_.tO  Pkxh@ {w EBAǐ aZY[faD5֢3mZqڬ|ʞCuՍff;fP! PdE<wlzkۚ+!kGntj"9|N2p|MJ*Atھ!<ٍtW12y{ťAbb#8"ROUQ^\S֢ʨm*ߖ-|5=ju`)B-rf]ӱϿmۭo%唇4skR48"ܸ\$\X^?( Ǜ "+/<&䫉X}m5W yp)Ή)r]UKAˬ>vH LR},yi,(o'Qtɟu }AE˾ QAe^p;3ս LI)2 9OM;vlOjcg^dG8R7 (Ԗy$]_,  JDqNo* #q$%%ѝ+=t 'K Ww*0*PCĜtE,(¥b6slNl5wm=#0dΜG/U9r+HATKJCU.*4 21Eyhu,6?2_:zD48@F~z9¢ʹ'>UhĘ)_J{e:b3 ^,\.ğFoT r jvT(!1ϲp,%5ܔCmw]nzP,Fض\( gc3I{X]uuEiԽ_S)p|-a0%F82RQ`-_G5c{I_׾A]7/xs| wENVѦ~/4HSBtZ*DZ!Q.qgZ|QWK6 j3Vv}fVKQVb]]ItٵG˫'=jh/xYS-zA BHTA=E.r$0 u:J!hPsEl8K]7Vstt`FALNzǬ 5I NyDNĎw.ڞ۶u[L;m^nwP:녯:!W׬#SHa9@3pyQ@q6:.|fI+y-߲ر=6g3SzmpZ2*Njh( ASB q†*S%DyX4scL !_H#7yfI·G^i=2:`9[JQ呹mmKqw2.#GLy/zG (Fj= 8"V P}nQ_ƎAHprԴztŽp´eq`wrh(5?RǓ̕EK48(diU.蒳A;[ms$iL#{ U-H^p DAhЩJG%BS$#l{Y;׵c)gx:/:a(9КZM^,%$ Z<{$*qofR[ےgUWFhGX5V%b~xi6K l[<ŀEϥ8FcΝ76w-.P*k>1Q̈́jI+z\4sGQ7b~ar Y$0&K29\Q„9D{WU]YO!>1D6PxHC*z"ß_QyVI-v:X7xF/U7&yÉcvlݺG;̷*ay疺#_oO͋c ; AP7ӎܜCR;HK:ԄT` ߭̿Udkɲեmyl[M B'pVb#X[8ΐ!G7Z/iQNF:DPF늆r(AC N}NḦbޝfG*TSTSß!A13M\4u==.OmDr옖<5fV.`)zV`yP?iʣrB\ v%!Y}E_ck".bp/ھF:tCT)!Ӿk~;JKr7)T; D4ܺ2RԱ.zVtVw杠}J2'b M3g$[>XψK|X.ts#*Ժ=✖f.b B x1nE% X‹&e'{U2§:ٶY3*W5Y? a P|8AEv{WԚd xX*|…F4ݑN(0үT!e0'-gFw: }~CĞŤ [ dM҅VpAQmKY0@SY@Y   P@A4.Ijoyu YxCBzm/]Z$1xo𔱳}NPa@^`@sGX7oJëh^mt 0HcK TQ.vyr( X^iILP%9 [sf覻7׮ PCA8&=w>5vL$jP1JqH eh#Q)gePhPXGcj0(+0qe4$+!XZ"o ظ8]ouJaH Qf˕YS@G Paj|,/Jk?pV|%s(4C8lZ cy >$khALi3ӭ:r_gYDd p8(>NQ+yk15s LB~պөAq:-lùȊ";Up8`Шr0(0P`^H "D7IZcIN@Hs @yմLo^^ fL ,ZD.{]9UQڨ \QVY .G@LqG_r6ֽZ4+r&dUUܘq;A!-*N=ckz A-B+^:% *Gf\-F&KI\YBхCh)2nF"yB(ʿ˻!ZMX!ἔ1N**:2?98!u͑* mK*i!:~aN{O8*@qpG:WǽcuݟL0Eۿx񗺢fD(]n-oo"P,`g/OKݾӑy\J*Oy2t0=}n|9efJ3bxPn%(Grt: Fo. *_.J'2R 1Ѡ_jO$, óy G#wnY?}1u`?_ķ֬O' "_p 4A�$JV sZg4~ "|2>-Lo5铞 vV\1"ԡSwXao+$pTٗvO,F-.a`AqSȨa/%v2b#e(]詘%|9$CP$36P6;IQؑ]Z.'ύZ3'flby3=FEXKi(A 222ziq+~ 'w޶u;vl{6-{ b[Y4hk5@wu׽ϱ^`*6 (8܌(+ J61Fc[xC hr7\hy&.gB QXK*@-pL 0`xAp Rw]JY;VgD3SG懶4fڜeHJĈ\c >H*M[ur⇋JRiⰿi/O}7;~L,zTrM+C%.DWGoOc=W]RF0XWt‚v,yG6 q X Iܝ9@|*| ̓FSiFX@a2aF3[j@fVyj._$/  2!"+UW;++bpǘѴ'[?씄?8ȤI{AXd\۳)ԘTZv㾫T.IH:&w'7gP]{dxX2h97X)`P%RԺ re(.65jIS2<*Cx\a.`INZ])u|)ucxf~~'mSkXY4ޔ+*ivqz w?LKhOFǶ 7#MIJQƜ踡(ew ӟUuJdfaOԮu67֞h>MɉFJG(VN7O@t'%񊞳6^FM3C=ujѦ]V(TRRQY!{o$ ߝVIDx6o|~zOڟ=ӧļMw^v8a@MiE7οܚZ̈́PPQ`Pel- rOPP!j9kA]NԣDt{~A$ '=: C{?vPzcǒ+{}UaDߏշr[9}ygMmo~Gc i{.ލ]3EPF߮&tdk{Y ^ cyH\TveW\@ t+[fzo˱j2uxFAٵSⲵKv}Op9dQ]w\A (%=!ALo64T5XT1kbF˾q٭2{.2X*5^k2/TնiGLw"L[QC pHLȿl۶7*GhT$hvAS~~)aܧKwvFe-VRf@24Gs 煌k ^ݢAA|yD,:BNZm62BQphX9Y>H x#4h0!tXoNϾWWiFH3M9L}]^X7*wQ ndv(lkM|z!zf՛'O,c (i3;Oh)SHVlٵnFX%2P!th4Y􃓩%^Eyv}[GGh[7onz*ٍ<:Ď~\Z$ְ|h Ue蓼2\U@eĨT6ls $!5IKtɫ =hjE>x>/+5_?:#Q- >]&'Ѭ_Mf0 }+:mO@A9("סC667vlxDr>92ؚgn'v[&T!J6^3g}YC羮{c)U1x;rփR酄E> aP>7xf2_MzKYmYIJmu`d*ŀ{)cpzf:K077GO/ ^i=Ńl縄SB2EE_KcYcj=+S4{:,U BICtpa^O@^Hzbw͚yH.,]MŚڳNEw^sKGKtDG},8|Jsg7AH#7S/`A,gt.xo>K]0_t;eJ,z劄J.` ;u$^(M=-z1 ]`+h,S؟h6Z 943CN~8EU*o -ͫk߼K3!ӄA 18:)W{)K,7Pj953LJ;@Ȟ5?@)X~m ^9\IB;?4Mi,I&~ }an>'{0[ah hHaC2%ӴH[FKt-yAU3g'[o4^=Xf%LL9:0B_m ;Wc'˚R3򤍻l089e+QB;e9?/5-?e\)=EwNw_?/#*p^w#%(_Iڇb5FMQs{*83F=^xIq9YÿQ@b(Uh '+R*C=LS'70TN!FFG{{DEg~$npqL8&9wr={kk-OF#iS̔'5 0T"!ӟ̥۷>)ſl([]n2^7bIl&ZC?-90>; 682?7g2ޅ~zej->O{ݽqy6k Zg7M@5HOe\=~kF~ 0 U ` OX kшB)W}98˞=[&LO_RqafmYmuom]?Ncx1R6_3J_ʕci7x+ٯkT+{{Z.NM5=`jvAhv#G cB(ܛiÕXL%HҬ艴1U] kK:9>|t)a݃l(hb_xF 'ǘ*a"6$J*[yEZ{i=,A*7_z HĀ)vwU FJ4Sd-N͛AE,jy6>LN?>5?tL͑2AL*D>I |*w 7FlLjDDppej[tbذbY0h9ڿ\+9sī\w0(>QҨ拕i72޿SԤsWB$|C$R*[CJCwVN,eyɆKf.=D#SnGFx>St`履𗿜}*(:/ʋ?oݬ8a*M\|s>5" J&4|}VH9y٫Ӫގֱhx٘>Rm[%#D!x]eA N0pc:p^?]44Jq+"JnH ˚c 7/)_9 ܭn {Drq h!#YC;'$_N_]z蛿=y|}|v`sxN ^4%v )8wc+mN X9̟7Da*>jVw#gtvݡFeEjU"sb2LIp`$DžPPlI%W fϘ`ƋDB.:k"vTJ*6OXn=?v @$N%+ᾲB5IRm^G+W:tUG ;޾sϏtA||Ͽ'[:Ny-+auV&ҟCbyNQ gKc* oz@UpqB.F3YG hJ  A+,xP?Nhޑ&ΜDNYI*F !8(&ge IJ #2ZgKW|藹2 Kp Twv?(Dzᔐ +Z]#眛<&>O'{#+|(eO< ?M :GokEr%Fyx++f*c7<,ɌAIB1"9#ږ,@Տ1soh,G jZܔKk-14iM$3J0&*]KKXbp8 82vxY+TnlUDIR^|T(a{&ˋV776kg Yb۞\K IM9%.~AmD5!) 3#yZO۷}딽a& {z~I)A~*y^."Voa<2TݙDLde5f}7QLnǾ5Ghv[RU`dաf6DSR2Ip,JckO؍2$]p8'_Lx&={#؝t lFacڊOOtXH%iW-??3vg߈\Q~~'$ca{Ov~o~k)luFx\DYda]`DR!x[D sf3 `_J4S9J6fNW FAلVZb,]ļ@:i9 ʭE7>|Hx',~N /)L-69EZI޴[@ϟjTQΏJcyV~݇d2u˴S>|r鱷 R[o栵t&9Vfl*6ZƘX o,T(ޮejR9(W7O_WpG:L9/RWU9TFa9`)${1(g֞r܎;osΟYbTp&hA_;ubhZ f"h-:[>Gz `GuquOgqo?zswo|‡^y}S==~KQA?(O~iF3Ͼ :b$?l'7Px %d\hfc<.fհ dR=),>U<@ 伯j˩}}C陶pO[NˍYԹǤZC{.R `$!jahWOz9 +vmii=oGoN#ӿ}Cg/z7,{TA"B':I% HGtoUWwTzCnaڪ7UF4dfb,MVHpITPVW2 s>kX,tP /?x_]kn(<*.vO uֻJ^P`0FXꭖbςb`5`OhVJHWѥyO9z$}7?{nv>hϞ=>hg{=<`Q0b$VcKZ6:Ɖs sqN*LcDTo/c3 x铒l >աf H$CZ&ۙ&h"1k@01@]QWw*Xr{۫Ag` s/꫃ѷ?={^%tPT븰ulLeXB)%D1QSنwgUgLUI_m-gr@5 0cpA9b *NAO4I HzKR]WM^93#:5mxmߊA$n{M`m#Ej ~`~K8u`ϲ{ۺ'Q۟|>7BjPav.q!y`ח6f˃X6@8"nVO8L'JtFFNplb$flgӤAz9aqIê8(ni"$Tht"XBu,6M~xazUEK^\$B}@%W<^@(B֡+HI"=_'= 'mp=e_~vǣN~r`וֹI zԉ11䮓2FE2C; 9Q8+ 9y X5RFnjzpSI%hoزͦTp,hcf`Q1Z9JQ#uO|ghz5&4\m$ ~߫_[ί^`/ņ]v^;>uQH8EXtk vEe#S!lX_kQ8 J"K$xǗs|f烙az,/!&"p&N$W90 [7ܲk;+٩= ?W/$Lzm7irGҁIͅMfz:yؽ(0|8>E:إO>>F q(hGuK/9 J$t06g6e3e-| V+n]VK2;{Vz:)X: bFI~X鮂sadKu.tq썓7}***ǍO.H7VV>?0w'}FX|xl:sw:pԩ=@.(AJ BZ(U>*Յv=!8'd9ceF#ΜַML7׿;4,XlSSVR& .^~͖GE5˺tE/bv=(_/tl)_{=C#t֣Qbf*gLrS6 R7ng'x-xU;XBi xu߯n54߷.{~J2'}Jрu¨4 >G@$^+ܛ~DB@/}uԗQRSopn4;7蜃8:`)fj'ɪvQ50!!t~^Nz3>b`e# ZUyتpT-9 Tz۽'dHh HsiKLAƃ80!.#X:oM T S;a;S G8X¦!a%0BOxՉ~Xw c)<=B:Gm7s%% sbKi@](ٙsryvtMH*9< Ma i7pBfcF),kysXU CNLNfM UAg!6D #pzmzpY=÷ wx?P`2孔L(AiR{s/\W7z;ASLn{P16!{HMT iqnSThǷdF!y Ɯ/S#b,oV\m˝}ǹ<7D䯿nl|~Ψ;sjr2ڦ)׹7i~ %M<:974mE8"cY{ZV*Gu[ޤ\UcKLtM.;YP8%0<~]q*DL.n?] ?[ x mW{&GG6a&6ʅ)nlppʢE;ˡ+C-V<_^4Y'geWi_:@1\۱m|Ӡ7PL 9޺"0@e**43 jN|l zPu 66]y75ڲ*^ 7LQm%VF(l^K(ըM?znV=ߺ_7y紛++*S[/<8qVQ~dYe> q?WW+98tPEm#2߫%}6bQ6b{ E߆,=o8fb\ݾZ 9vgNuq2BZ*6:~z\lp<>VchO["$-g$-Dj9Л hjf0F4r7 E%f'y6# I$;ޭg͍ļ]ْsNt+C;:EMTۍ4t~M<1U*޹y0cW4˺cűfEkM4S$4){~Cbܲ `A i]/_:P d\R7<8%8"X2kjF`MT1R ob MīMi6Z'dcq틡YӲ դc6mٹ n[5SFg_n9a׮: :,R3;3j]21\96t,+byV۶3ǃgڹɲc]Q@f;Odء,YdtPlw`1C3\BLࣿ"[]%jVe-eqtkZ62='&SQvi0/>TAV^>}z+71/0:x  #:d~8RF)` +^k'4Kj EHÒA/q#[GmmmyZBC#$ίN̈O4\BVa:=LFJi'4ռ 342nYlYkZːL7] ]DVƠĒ!?dFW b0<1Ut* -^`wFG54ngOl>!ܴ'(&Lq/vrGkk}ThAt:?_{mi ։G3G?(/?Vb6Lb%#`G\AVAAA\ZKb܎{ЂIUE|EX_ CYZկ"[_55hd$lś@@Rհ7SUŒxhMM_BRONj<^cOO雛U@%z1j Kcپ-}GF\mFU2݅{|{}3;k B_ uջS1jžX;pSW9k]mj*erEΌҙ e[Nڝ72eV}搬2h9Q,t+%䮮w5kz60=]cYeUT QYyLd5ZT3q "F4v6gV]bӍk z(b/W?(=2񴶲m2UTW'/}TY)'R(pHu"YWc\@?y;) })~ IDAT33Cm;,peȄtĕ#c^W6CvnRgDjD 6L T#c,% v!bGųX/ũ؀d&aP`r 4T*%g]i< M+h{*PmiZ[QHoZ7^tO) ZDwaaiIy%ۓh!8E_T0B(XYee3Jv+جKAFiƛ+W$f&n=< |aĮѤ(h;d$Cf $.Lf H,iG"LNHb> 1D* `r׻ƭPeEW Xs˯^j߮WuQupD^ 9~%|[ϣOHWo’΍7Z]E&: ǪiWW5˚'8!fd.,=S ik]Y|3_Azv۵jKנ$B3r^h(;f$A&S5^e0pfB9]Vty]dG `S|AM9e76ofDUaUVQ|{{_~?lv*H-ou+"~Bz9h )B,ܣ+Ay D:#/I\89Sodtʄ\HY6KkCX e3^Y-GƦǞHi˹A<WTsW@Np `%H30xs|]Cƍ&ePEQ8Bwd^kz/t4,.8R&4Ud|seiDbe qBBP%wlD*W &P )23`h4&ٞk&AiFVtR42QLd&p,=>H9vN3,@gϺ-&[%0]ˏ,V ˯^z۱M8}o{߽v'<8gNMjgYʣ-@`F :A՘L:ݥU!YƓ ^W"iF*_,{M?s F N] 2bӘ( 㐧̌D!)p!]M5F+2P">MiӸkjel"1 D8r]qou^?sC5KhچߝXI1Ett` kPݢG#?EDZ ʽʼn.!|s_t R|^a*!X`w27QN \JEx!@2 g` ף PUQQ"'(O%8zYXHbqf0+ 180l\oGBvJ5&}z&nǖeI0tT5oʇ_`LM:Cra/Q{<‚n?wkoDuHR)a"O r*jtz.ǞWM1LQ&:IZ(N"ZG9Aia"`MH(BQ.5QHXhL.spBPBrp_cvŲEP0WĉFB@M\?}~VNG; ůCn B\ =d.-1=Eo "ug яm?J3 2D646P MuY37WWa\j_d/<>*JsT@4=R0"M0R*CMH3r:2gNP$.1 Q,U"Ql1Q|TX42E,N59Q矉jbJHĒ.Y(LByf;0l)Q)>ܷ7nVzh_/j L?|#Жv ~{dݕrJc"Hp"/{ܑ qa:wa@@XLNA& f=T Jt"0<CF$l4 ˳DB,ǰF< 29I .;4, 6 P,#aw\ N;%FWiʨ,3֎˩ilYyT斞0Ʉ̎jK~Z&ۃt\㑶B}_ofGOu\^И'LյhBŮYUeA(9䨢qx'SGJ&m,k_.DdB l2& kH.yǡ1y,2)Y/pv,L3jo@];awENV_K|Cfhdӻ,;@NNo$q0+C-nB.fK墅?^ލ?f >y,{cn16""±ZȔ ,v!>`VaK@B`a&Oq˩_C0NxaT 0f{E3d" (JiToT.k"e?>1Lv:koo g2*RtMNQp튪E՘! wՐ2"45q!e#;$nLX< B)F_]ul[ב? J+1Qo4&C,c}xV7"lw_KH.G)JW`=D/T]ϐxڪpӦ2'ˈ=>UC ,(:xsr??V Y糐b; A$ho8HDUk#.5wNf<0kgdnTl bgcփ_ o)n|Ѱ+j-N{6W4v9| AtppZБ>N5ŠOVp\qꝄL>Sj~lՇ %M̀Bv_ąS 9va4 =D< ۀ!v1t'DgON\.0RGO 2hrIeqܬjrR}>,G>~2-&[my<וt&UGBx)Yt~5єJ|Ltu7sC(\@2aciue+OT26֬0^3TI]S'd&f& aIg|!hx&X@q;խ΄ .0cc T0T EBxz˗/{&*Ml6<|Ьrdh&aCMiAdPKB9P$q^&YFyVt6t?nSm(3WKB]u]徿SK:@apaHTlQ+JArG'z[&΅LnO%7@JbkZ3kF5W*}ƮA**ŗcۺaTL{"cNCV.jYZz0MO&0j4q8r]G1nuԴ`UzNf* wn9D[puZ"yj6^E{zXtce}n,mEkl PU^TvOm.+xlɬ5Ra-,ڳaTBB]Hr4$/+%?RڙJI0$Y<6$+ZݜxHr/S4tw/TWU\jژ0C|P1iؕb]%Yښ?X$kjjdf(ٙdBD1`la%#3qnSd*\UP#Nʵ x4!^>XFlW2^?¦' h*нrա#^2g]b+~x=\~)$|{"o]E<[S]n.oZ57kFK׼VQr._vYDit ;IDvtrRȽMӌ8ڞ"\YT⡉<qw$ZXc&\U*@1'5|%XEY{Z3ZUx\Ń/6~UקX'WT !_إ3Wn8Ih4/>&\Wzƒ 8.9%֮O$&8 -"+|$3[q;vP/Kw}O?=}>HF{xmgMl=uҌ7Ľ S9L>L Y0kL.m;XZI)[֣'2J7}#X<fD {Mh8*?yLr^?2;RP3;k+cGA_gu}_u84zt?Y3YgkCw}UgqI5(*]PᑾMG/F(^>|N!e9H0nr=ۏ>soH8Ԍƒ8G=&96$I+u66v;:|vhtq(҉2ٚ9Ȯ[޸9|W[ 6O 2n;<b-JF(̯$$Z^VAjz9`:41jH9sZd^]WWW mZ;  M!:߻k ,JjS\ncK/`'$u×G 4O&i~oq}X$AD$E4ػ nvXuJնʺL Qb4(~$]u]?hѸjbf$ln&q1U׼}`su<mTKk/}lHTouL#J=G+_E5/l~k=$Ču~H%-"TkM:{~fnĪ0w,7CRQJ7Kb{GԼ4;Zj(g5֫sZ hP1c{ks uA..]UiPȣO'~a4$~ }4]:jSa*tLUQ̛߽UA> na42 RG,X3 )NʼE!#zMZ Tn8Zj)NT#ZKCڳL' ( 7VItuFks\u9;KN59%K*u9wnk]ֳԧ'InW6Rwh(>8ߦs&־yoPC8X,Z2S}Z $2ˢ(uy T57LQtv4흂ZE2yZdzaڙ;өpf 0síT5݁ /Xx\X1k }8i S=;V ,Gjg2"[zֻ2_>Tn-:db<n>'OU*r>wމk~v(nyC)V] `|q!ōDAԯ= w8^]n wQ)ՇmBWzzwM3Ni af cf[0Lv.wmҒ>!VȢ PCu;p' wuRVFw τ[;]Z%@)#(}2ne#)y?qq'CETߣksxߤ*F{QZWE{P q0p! ٚoڠ/㧷^?Xm ?rb5 DUXg֗X{0?j6 jl5t-P IHXXdL(ҴΓ-XZLS+Ba_'!@i[_vm= f]hFIGŔ+Hյtu;kUE#H:Xe ii]k7)s־35_m[VK8GAũ'@( :K vƍ.7ookFOb$HOjӏ>z5,-l] \eol>FM ćt>[j3A?g/%V%mڅm3Lj|/(sR Bɋ2RٔC, $1he\B8MlhPUP;FfCh4f_ =|oAPd_;:sbe5e<|bI}i+vk<$SI-z!;_NaӬlb!Kr☶F .j1!z<2Q7ٳ_t+F6g~ݵ?i>/ߠ^iK9G˼)4J"CkUvfQޗPn`ۼIIwƿ4[?VQXdΚ 6h(vۼ>G:nDa\/lt? X#%f|Y$+%튅i2Y-DxԖ4}+,]+پ:y EG%O+"nQR+u+mNTC7ON['ß2hfaQ m%Hlffyѩ!5k W66flWh6]0Y [}l̆Lc]|-dza'ȁY:3̑ZpeZV ARg}kΰH>'* в{(!&E8;22u2||&|̏ eT;嗲 .~p7 cU]c*-[N<5:^~?r0fsqb dM31i# f&(n@ Ú!QUb>(Cah.PS:2unPKD,S3/oG@l- +: 9gDZ%8hXv*0yUa$,t5t W0u3ݥFxMN*R9|#{)Y]v߃~ӟ>Lu0_aL] tPLlu~{3˼ld‹Q}t9nyB4 cqh!ϑD 5A8(`!Pt5'd r*{LDuOv'kzSJn] Br%,.FE=(7-^Y,'- ;f \X]n$ zoVx]y.tz'=ǷoߝJL %Rjm.ob[8ˤ F*7ؐ-9?aJkjp?9 c.uK*J5RVM>g1jNݢ4"BP^c4ȩMrV< y55{̗vv}QvY=D,QrA\|>~:;"nv'9yQZćH Y]l KKݧ/ lRP Q=E/K*>1qǧAb)[Sa|:6kIxo&fG ,Aؕ1p]N+5V+:+5'u.J0t\V⨔oBx9 1f]&<"2Q<0LFFr?3M!NV6Pʹ•V>O\ .s}F- ᭧K]-10\S$NzޭPV֝mڝ[I96MŽOQ\#M5z8W[Z./]OMW9nIUd[:SwQODA'2I+1ѹ?eTr>mn "d!2]!:ųOѲh>7Jӻ0 1FLTwÄVR?A*Pk~JbAgέ=Ki%1i^E uJ^dCtkHiЪaTAF=Lnt&3:/]*dnغtChqMonKC70vCOJ,!` 君I\n+ !~þ1d!sbJtrW^\$SN)_Sv'4|u "ĩG=^^&=TӭKF[.E'p̣l99G/.ϯW?JC z֡%З@~чb9m#1O)L] = 4]u-+R"Xzm9+Y@5RƘ с45Xvy'U~?ξ_Zp/gP]TF"%=qþ}!Iaj""Bh=B+dP !A$vvga݅Sfvߎ$ UG&w&_sob^s^bbq2]ZaspUMip_T;8&dTW,rR! FU7J؋]g>TQR ݭCR濁)BPQ>ߢktȋᎦת(U|{po75ݶM yo#>\9Wiqmma=^4z 2mck﹭{]d]$#Ny AMf7rW(?oS;hDR `ZSdDt5I 6c/eJIUjD&Ku`~(5ԼUzhTC:[O ř͓5oէ6HbxS[BCAE$I Oҳ\vEt(%!?([UZQjIJK`f)J#}07Mؾ~؋)rKx;" "^ڵ{TUmC^nC8Wq^ޮf&y%6G5׮SՀ)u/9j a,KkT*M?|[_q3o3IbMXEV0I.v%;]ɤ)\q@ 4j +&*|rRU4 +Aw|5B <E.U5E{=_)7ҡLL;E۝w7v'ޗ綈gvGU7{EU!ïL6Uz-a?A®]/Edy;M3{{ CJ)6fzܹS @Ro7 9o}hqpv ۴xÖ Jwn3Kp5I\kw;Wpj%3|y6c!~P]׾[ʻa`8Q@<>=N\~g$twqi ᵓ/X' ? ExO^Ӫ;YSz;쬴]mmΥRbO¾/ZlW`]{bzvcK}[Knv/Vt*監̺oޮš9ۋ6D"b`dĽaN%/UBSqw&ఽO+m)FgN?$0еf[R R¦㤖FFF C#"-{}Q̬cB3`ZS+8υ8hܩޭ`᫯zz~ׇNGBD>J<@&@8v*WW}i< :#>#kLmRӞo*LwLŃ5 neBhdWO I|1X^6@ɮcib}nwGBNHjg?;W*!Xh TJs$b%ee̔J\Fiz}ٔL&n?߯meWϯhaxT*5+4)ka"jhIu1֫[k#>/ kg)4au'vvHcX3ɟh+}b4qxفzkAuZ- ڈIWZ^҈jJK44|{[m3!sճ? Wݹ0SB+y=4Cˀ{!,ΩbeJj)*|x=;T.I{텯_|)wn;y'Q5ÕX G\P^ S~Uwc[CIImbUxǢdg&GEzִT.y:ߝ2rdz!OZ.cǏ;,!qXg:T<<3~\ځ}]_}̾o#^_,%Vz+Kz0"F \͒D\'7Rdf۹g'Nm>UeJ-[Pq 9[w* RhuWζ+Oo{g'_nk BI ##明l44EPk4߳lCr,Zއx=>BԐc^݅#_wǏ~Z8͖Z6T5YU;Y)$"b$bפS)Zdyy(C Re5C GfHOB$IqXꫯrW;a§z)`#x$ 礄 y?/LN*Ri:m_}ϕ|rğFx_z|B[tmPT }\ ȥbukk'G 8x#B m~>27V[}#VZ踛;܋Eh%W]ԻURn{T^xE/)A.ױ DS1%e4ѓ^*\Xκ!)o1K{h^_%]LکD$j.$j <+{ڕW[+/>+h  ҆&&2S8D`ֶ 0Q|>;c'fFw#"g^^魮nj6& V1NN.ǏUR#92*K*B$+l _>-I+OX/}]j=3?czJ2kkfv{ј5#+b/EXrȥel]kp|&ke_ؿc:IkF  qrptm|h^fϗI&^25~!Ks <鏠Ly!表̫QdPOoH6.~9q ̀Eq+".eS{WqRip&e2> =<3x[W^ewd/ W?"zD4ڻCVGi-?oO}CQQ!*# gAP͌4y܀ 4ד]E`VvZpח_nuk1Vcm wp*I,WuH5yĎ@J*P( ͇ Y&/.y1'c8']#Շ< C$W {{ǫٯd"Ĝo_La8<Ω8[jLttdY#1^Svk[?_IK6uX J |iya8cD">:Ф2BiUhȜ3;ċ"#xw8%st>BjZDG7S4 |*1a5Uʎ\FRSq2Fj` x*E8zÄ IDAT/ c~έsWeS( Z@+iBAQ&PTdU`h 4*OXw;dKmWAѯa1E77-Xj槦c2.2¡!v \^>:&8#A > pUrBUq,4^!LW[GшS43%|g]?I47D%d L$fY]ƿέWѫW2Kz?p"QUP21Vơc==1m`{Cu_(ӻ'v̹ MH FoL(֑1^VkzM }/יQ}Zj%5% C€٬4iWkd-M&d?fI^HsŜ#!B>f=?Aq3N9`LTCo$!+Ի*_v! I=QcǸ$qq^ΧXd֕2Q/̯'dzىP5O߱F{UoJK]mK1V}m 4h2 {޲ Zh8~@z-Vri" 5פ<A7Ic@VOJ2~ň 9,T%`n$IR33Ǿ0\_eEpWžR`8 c8ufyd%0qy΀"2Vd`j"0 0,kb#l)䭥u[]'Tt!VKƿ!oXau^_t?NMAJI JSnB$rg}Z1`fZV{PJnTN=TꃩB7>9ڦᐑ(4k9S!sI6h3Ҏgdqٝ,V'5TVF*2K{*2)_=ΥS;>e!ȱ557D++LP5&˃#Q 3yVOi,\9@3jhSgz;+ &(L #Ì6HWI: MeJ5.6KUr8}٩"$K͗H2HjZ p[5 Y^^xTsBbTEyl~bhNXbǕfMy%7MQ˳^DڮK:hy<>|wvM(uΚFzŀ _֔7s=jiL DߘFʇ|!!qwd,R-_x)e$a[nSt5 Z5I}eW>{+#0܆ʞյ4L#=ܬhyu|b04RiT64#Ma*Q(3}l0, :%B?GEdd/oJ˧zaN2}p*|ő&/Z3V2*gΫR5I ʇs G^>!%l4A@Xȍ b[&GSIKW֭3z@y3.N¢-EJbW6vv$Z A FS3 w$X4Is6{ȃ1xZopPΥR; A!8=ND#yv>q mٞ[[]Ҷ6憛49ݣv-|Ѕᔠ[e0 [:cS6bЪ~(5{͘ a>"OXULOufft4it`j, s{.w r+8ﰜJoU0J jħJA)wG(`HӸi:d0;pp9TT2 [B|&'i4ǔdJpP:k{~iapx(J1t 27|:k EBmD.g3}w:w{O#QDñlC0<E1/mT|d ]h]!u yxKtfl!CyX:˃>2i:i ʑ뭄"?Eؿ\`GY`m {@DxdMfƻV{'Nf.Bto|??Li<&UmE~eMepL#a5#`VWS'UKnl 07 .n$ TH 4W޸VWUޯM)NWB'7^}W(NYuð+;t0z Mz0?kˢgTx_꛳!f$`#32Lqz8)qy!,CAntF`/|_9J럲b"0XyᏂ^x+/>~a)2 |nfK/%.Y=גAp6!(֊4 (L3Pܣg[~xM2R,'Yw =ҳ={nu1V)) ݥ}`͇7|0(}#&h u_~zPŗ.mmӨA'<+? P&+ɔ]돩 1͊'Tlcr FP`0JRʁiM Nw~EBD8Rm69.^4{e≉>ǵ_lkv9U`E'?'.9i7&:BSDX싺s瞝>>CD~ ">G2ã栛 Ue Ɂ_n]t6b,'[eIGTΛ"xK*Jo:}RSw8}(BF&FԊRj- QtZãK7LH_tLI.EhR#ΝMI8M?z·MQh^sC.%WVinJьͼ5)è΋KK{>{З%~ď8a[2 8!69A7lw@RUf1la .$0*:&p %%^? EU#Ԉ]IW+٢S/!ʜHJkKΟo|w>&@N713Q9{s/BGYũ`W2mjI_ZdSv|nJ1e=4v sz9!?3÷Aus%̇P1Qi-q| Q敆/0GhbqֱbzQhr#t֠ip*N"61rayv8T~wG\Zeۥa0eK˥}>f^\kJ˔5Gem?펾DE / [N2W;k㜫r;_$ɌQ(l8rC+ݼ1!C|Fv 檉/E,M,vAMŒD&+R̓^| ːBkPyx&v)?-}~ Vr) g-ьh3ed=67UKTog_;ĬnUWČ@L%@#$Ā$, z^]-ِ<UmֵĖ&wMV^tzX٦=2 ]mRPԲ,W 5:V#:okTh 0 DN Iq}28nj,ͦb?dn47Q:즦Й+hBljfdz9~f ȴWcģ#Kuʕ!:\E&Qf PA8d^0Vw4cѕ\=BPJ.<*t.zRhLrԱ7~c&jrP  S{gڎox *5Fj ^8`m04@g-/-PKfl\dP6j%>AS/ w,7};hVTso~t7ow.mu-m]t^ׄ/aJ+L㦠~k+f:[zRv嬥t3[[[]ݾPR!mnA|DR(xL2*:1E:z m[xpnz\3=66ڮ.[nxnIs6u"KWbFڞ摾! UU 3 !s+*OШm0F`0J3n/=Kgp+=Denw]h:X &MP M#*G3*[B{>v!gx!TcFahPLJ)ckyGܢ_sDcf85{S %dgb.ƪ[- jSlR1%@Õb9Mߦ!HOtXsgC,!w nG,orSqw~񫕍db3RҹB (7UI)aDwpTAs׭V_srx$K:j3^Ixpkϗ8WJAt4@o`TÜ%i4tOcjU.Mx>!ns_Ġtp|#ĝWPQ9]Xڸ.3`-P,AƊj?88G!n- rDK_Z^/ߝw/T/~_a֝G~gϟ\*?sz'|vswQ&*ݵ񠈻)i/j|RMZj^i$J^Sus#{瞮/\̤r̢J$-] 8A9f⽈_qSMw $Ry)f o_WSZsumeVnГ2j1D/Io5ClerW#\pBu\^mGyy|z/Ը^{urOϯXhp+mt9uJ1t2iJ tQxGgXX9ӉDq-JH8!cK?wΗCM {14)0{ZS( C~}R*y&D >ҨSo}[-70]fdn]§u;|ţ1[ Wۊ+A i`', Y?8_[m'S&s0mKLCCE+;Gh:w]]ؤBPeNA#7 E3#i蘿oy &-8F4}=϶ G jKijA:@nTN}"n@[8)_x:u!u@ٵQ*]1Am&̦}/>K{}L<34nES 𐄶GƯY<8(o2ݱ31?vર-fcv%ʣ^G_Tp,IUEGFE9|4x-#78p`F'h𢂌kbu>gnR]x7pv%!"%0-4뽁 t}KN4"ȷ;hv3NܠgOpBdzsTGoT}{}[FjT6s6ef/sOw@Vq0JQTKA2:jbhLhodʚqpJE}kڋ}ϱ>1W0_D%FtoYWO{jTOւܕi0$, NOcw޾c8-X]6|m7*ǔ&N0Z2-4b#8la4ogQ鍈NE}|Z"_yœxv-~ͅAFߎb_XI%w:W-CSTJE$=.K@IV3膗_Unja=YYGUu5~S+1qHdHxQQ‚ҊHGζ 4>/"t2FScbOyz zU_#wID9D8Szd-bދI.^Qx>ADȅ,:tl189\]kbloOH\g ӌ9堘Z] &a☤ͱąC7SZƑ6b.B[#e4i*Dȋ←y7_lxҊ7tX!{PT -8$\%ڽ9_ݾ|R9. KHFp ===YcZ)w%֛DlZa' tAn .E谰5X/2k`.[N8pT,k&u5KK|>T}sڢb y..ǟeUKʚٷowo*eKKS阮IeELLL⇟O "j>w*!{MO'Q%?/z]k6nM@1bDŽB>dVX0dY"kÇ:Nk"ߏEU{No5|^6M-.͙VW[;昨R c2C7v;KqqF ZI9f4A- EGAjjcc UXLUӽ5+mKJ(d?= &U#Vˊ3;Tb%wpugl,C_~M IDATkiu^ʛqmqMp#Y񔍬,rxC_e0wa.{`?ύ_ztƘa']CɊ8{ tV]F2BA80&&U?4񎧊9qwRF)HҠ>19Fb3`0n*Ow&uHdÄ5AvBh=!| yLʪ`[tݭQ{.shzKu[Awk`G*N2Vda"uZf* UqNv {bw_XEzag`pʃ{僁xznBMY1qu fU#Sym6X\!&M";)2aP1aLBSxok1Z=[*%յ* B=QBٿVm4E;jxL%- t8\Pu/"/BbIVd?&[i,( %S9iN+uު_b>9xGJ7jU9e3t`FlCE*yKDeݰS8uYǟ B`P=DsKJ;[z.XෘvUD}MDȆ#ʲ, Y|ߚP~b cM+Zк˂4 -htI%uOY~v:d]^*)ĕΕBb,IyCyqGܘ^ÔrhAR?nc,/sɄ4Ϫ -G5(6קOפlJ ̛XrsR)dQNY+gxϟ;^TWVxx@./ff` x]2aQIp  ~r9+GTz=C蛛PAG|.G`eϗèHgâgVez_?c~}3}thhɴ'UT *:_i|/~拺V#B66XWѺE''&XH(IҀUU/1 kC'LC4#6T(]9),3\$0T|aD^91ڀ dMI'] %QAo^c'Qh$3{j#7b%"__ v at㺟56^rsEUEi–i2H$QZ&fdhUϼDw/NWܾEˮVѝkVgC'J8iv}~n(3L؄.H W8(ܨ9dž"t1L?lT"F,k?X(Zu'^Ƅ$XU  g~jnfZfkl&ӛƣW; Rֲִv@raN{L[`u g3®Ud®Z&m0t1'el$1Ct8=KD #/َRƥ.&lxͻ]x];4aon d+Ct* `JB̰uK[n z]b"I@ߝR$ @gd|k}Fy_o{VWkVQ}g266V+WrHtE3@ ahQ[G|QOVuW~[D-24dHZCpS n,>H%QW:Y5S$my(h!. :-x UXB4rCC߆~AZ6Ř)QzO~`~Z{kmMj_ة(?kvX{H|OWD`OP))h˧= 4 /SHݑKh: 9g2Po=,@vV?EV%Lmɬ3 4 M^(0xe[/ V@ 5-lوbg4,5v!jƘ-1?[|tY2ϣ"#VY$uɼ`ك>GYc?\;>@@ /*|+ʀ:q]i0;BQN<[ĝ:\I@ 1i/*oj~UV,ъZ9vF =dlRў#sӓ7H݂dPj6gG.^LPR6}Տ;EVʓi60H tV W**#]. h^ Py0W j_k,kyTk*.5H6$WU/}=O$K}ҭOo\rIU# 17 S' PgVu;OW9Hx&8Z7Y(WYV~!f-hD@MUة#i=GI'r`,efd$ li6fDl'’jѾZhn뙘'i<-]{i,FЕb2]nKJÄs:{AYTUjᝲw]S`$~.F]\A=,i_0mmaMYM/:4K(X:_սS[KE[|O t^yӽLim@0[3$Q<<< fNoEk8CK]Au\|W9 \HE[+3))EȌ8a؀"ERl:M$0D=֖(vpC1  bl !Qruq=uKA8 ,FG+~yd܉I8bx2Ɏy6S7֫GzE f.2GhJQ(ZO\T)jU*7y7ȏ+s ]i}6a@eșIAnz;BAL3k duN{PYz.BTRٽ*nj3 FƔlqRENfU6unz=oIb<~Eo>=?un1yd@٤h6OpwefїW[1ּ kG}m]eyhѡ%/Jgh\75F_87e!73[WDbTlkܢApqP)D@IŬkգkˆ55~WKb0@QUftM;+ - թ\)$r:WZ] Aj'8T^*M@KV1HR\-zѵ0LFZPy6MVE׵37-ժ+9\Z\ԍi"‹XJ3)پRkG)/"J's|n{Pz`zrFrr=O(e2b՝?@. AiYߍʛZ袧c ST#1|UFTʀ2l>(b@NhWK|Fԟaōk^]%nXepAGA|nKLk/ iy(GȚ5mRΜ4O$F)H$ =kͅaCؕndc@mqsgykG1vpL4,쩐V<SMM-)Qj}}Ql*L;MWwբ9&D pK^bzA>&T\l!rr:X M`Q`(qr?̻B=`3LҨt .D~ν8Tʝlb\iOu2ݠfS c1Ip˥&~s1L,r쿝9PzI~0_Vx9vƶ2u1Y}ҫc7 G%)ceHbK2^0kkRI\ <#̝,tVlpgZz؀u5ޱmOWls[<ɠ[ >2ԿY:^ l*2,**W qA1PT402; Dxpk\5c3cba͖#cUu0uzwHt! CGrLdJ5<M?WLTTM@|CCүIHta `xA~$\5gֱ6՘J[/9S+/cwbb?_=sD~ۯ}@^xb@SjࣼR4u c|lR]f(W熖\i,^/q=[ "̓@͞^oJ11!ZL0sesB>Quwh1IUɹm,,tI hI9npʏo'H<>9z/$$%)KD>4f3h"<x3>_uG^lI̫IU:#S_z.cK~WK/S;q#M=zyAy.}(8DڠOnp;χ@?Vr45LޣXxS4 aWLJ#C+V7J놘&nnlr4([)Τ.Ll0b8huRYy&2.%5{Rb.Xp ;f-{tur%yrRM?B7͗d9et\3IlH)"<2zg̖F }1!R3${rc A- io:!f)>T۲uK3rZO=_<Ѵ `9<  *s[h("HXs^z=a8=wGlO?y<~&صkUkKqh%~8y^ɖ-T<7#NB1EA&gILӘs(̠iq1y=BYabw P ΅@I|醲ɉ- gte+rg?dw(\ܲnw'yXRRZ#pya7޼cǖڔa5ӵalR(kh(hY3#z"%j2[o0`. !}ٕ,]28x2L-pKbP.3Ezq'DI(*SS(Ց.6}JOot6CNٝ.[iP_buJ$B`Uԡ#+jXo5^Hpa1QQEފK&ʢ~PwwIm"J'k|x쯿_5JMm5Ӏ0Q)a MC@6\*#SEdHH.`$O3ۗc т"`$L\"!{_@M&IpRd&4)ǹs:30jR9n@"=_\ٝ\Aq[Čt:?kA]kkED/kzٲ'z⬨8XakֺdyVG=o4걯Qz?ֺYz\ AݞC(Cш={MZ-0oWk-dG>x^)HɀĂ"`f# r,CF)#%'Ǥỏ |rw?T縗!) bJDG -q,Mxt.mεs)]MwT>VcҤRч 9\gBY2i耠v>h wO $>̪+0#< fI0V, NyQl>^!hZL v_ d[\A{n;}ڥoֺH(d{Q9&SɎܲyN \3CS@<^۰e1:#)8)ɥd`&j|1sh`w2 2;~v8*j˜YrCj>:I_Rpn۷//(ްLd~c9asmMOKUt~3e^?QPL:V""B  _|qRh۷.D^ ๋NpnɐʕT23䤂\VN}&- LKq7lyc0"]J(&Þb&3qV'Dd$!󥳦e0 ttFb\fo}'D} K.͞0;v2Ңﱜ pg;+)A#ɒE& RrvXNZyq <gl HVwڥR\_6 -=:,zrr79[|l &j`h'QG(G0{>zh>z!AGڡ{cI. 5<  M*8CT̈S iIIOQIFߕm1}`$qPCѮR]L14'0ڥw1RzY'{(W4&P3?&EXV1ٖa{)3'C.n _ӡ)ԃN-9(LٹlQj,(FcvMg"nu%piZtWs~ЎvߡQ߻nۄK~{P>٦( HI\P6MOe_6$res~5 Oe]#J%vsqa-*M,Ɠ `~gg0H*rҶ6PҾɇ!n%#ΰ0lIFA'k>Nx!gwC״F_2^嚵!4["@XH}2|8g=xí١v!{I2;F*yΫ8`wi;K[r⟨&Zgtd l033) G$()n.HC,u!cJ"J@PTn~S7Vփ)RuEȳ&?8v.IXIy; Ԗl tt>w!Zsw֡Cއ_tabwQB9'Da'v}ؙ;o] M{Bz^`Q oI"l&in :c[GGi/ DY(׆8_,J$$)QY׼@K(A~2C?އ{s 1!ڹ[kV돠R+&VU\ølz|i´iȃw{J>=>Ƨq> !K%IykH*%/K\fgqs/;!~$L'[jeI侭2eǦa3LѢ@LA7&Z:g-WٺudttSdBZH9ebwo>}⾿{wy7'd}>P5ԫ1 ^霱ECE@2''gAp8\L39+eBيjiI*I%%H]r^X6#y 9Z,uY)bw.NqsD^C)uIA>IIJ濶>GVqZ}s/~6gh Ci_5g;Y?Qqg1kXg/z6o~-Dripnuk['Y*y~6Zz8!aG@<lpa쎲r%gXiX1 !"3>sy.%í90a&D )$W|y=-gy@Ch-gvͻ iptbɋ3%{:f;4,L}Y0.zaD9 oxt灪(V00&5';ԞSL $2G#PJԽ( >S>΄҂YF+fIAf iȎy@<& fF 4Zd:JʴldXTNFJߑh,{^c ?~tl7߼Q$k:D٠_P6 xѤWc)X"P 9gjʬ.IZDbUrfP1-aQor< ٦<yy2VktڄBXsRIQ v{Tr 㬋,=2>ͼ#|{e~}ٹ  '. E~tg<ܙ //7|WZ ۉ/v{F?qL M[y~OjOt>;|q24҂N ԍd2/T*/:H92 {|@@ً1, XG_=WYoaY'o%^.X\nT=@͈ؕz':딿.]Ѿ>{UpnH[}|t37jLlə헻_;S?&_~/|Q6,XEb^Csʕᩁ #_xƫ7zIFop2%,Uw\7{slj<ϱl{TqM2sQU{Lri8o5bujY;uїMq?<`oz#@Cl~kx v;/|}?_u}e.0.X[c7*/^￿hx3|"oL]߹I =厔Wkʥ/^|Gb3(./ߝ|G2qs$|\Iz bVbj|2Pn?rT-{߼š)%٧gjZ k5ojEW@3^{%8\Hz*=!`o룝Ok=p z_̡oQ_zNllV\YߤlhPF&&n{A#|?&'  ~a@VNF{&7&23s~L|smdT t_쯷܋z(mCc(dY1F(4Fayѵ\>~MG2+CEc$176v\YF_:V[޺ ?O^])w |{^n]#^]Z64QaIENDB`lbreakout2-2.6.5/client/gfx/fr_luc.png0000664000175000017500000000035112140767213014545 00000000000000PNG  IHDRNgAMA a3PLTE)-@ُقˇӃΕ"&6$'7(,>'*;&(8"$2bKGDH pHYs  #utIME # uԯ,IDATxc`FF&fV6  ^(@c/zIENDB`lbreakout2-2.6.5/client/gfx/back0.png0000664000175000017500000001643112140767213014261 00000000000000PNG  IHDRddUʈbKGD#2 pHYs PtIME -XljIDATx y,z[KwuUOo8M&H !⯁@,@!GJ;==3MWWu[uo;''vcAƒkGthG۟7gEo* 1[Jر-b$7?95w-+t>o|BO80 ~iWq칝ܟvi:#yBEw/n*jkyL9ƵSƖ;ZfmG:h4N{r'+u~y}PofFF3&f*o\! އអﳓ!B(@;8`l&;c40g_5]Y]m Slk]~cqd|Z_E=奨[N%Fwb}/8Ni쇔p$J=.w ͺ+]{z_MGF!tYWv4W;%L߬ء"Lw>q`p~ܻywNnNFG^EZi}6mbFQ6 $IgS>x`lB~];(>>ޜwAsj˓Ӥ=`(A2pʚ74tXxpy/9@8+&Ky62\5}mNZҗ'yg74 t!HBYF-t0&I̝cy}v'& gjT֜G0]hw rcϐ0oeĈY`q:rLeUĬSʵb_pfGqUj5&#AY;0o' dzϓrN ;>}7ahp>m`)hL\ &L;eR&186M1~i D3G_|<[~Y> C8iVi:He%*䬱#`Η?j YvB|v]uݵ8{Ur`T-O8I!wn׽nCyxZ==qJŲ1q6,CtO2mS:m#%1L$gMX~ݨup~I)Гc¡ PNZVϋ4gBƯ^~͇g>RP=lC`dmH#qbײN:'=dP.L@H2Qs{9rZuqM=V6{V8( .'0%].Jv\\mD*M.,%o`xUF^998Jx p:c\}GT إ,u@!F2@33L!ճ!8 ! Oy5tvuYn?+tHAɆ -b.>BD%-sELZds<"@!I'k~ȓ]]&FeHQXܗ|zm}rA^rܲla}QLZWڢ:Id΃Y`cS`p;NqHlt>" !XbT6y"b8DinKQJ'S?8L'դ~wjg9p"npv8pR'(a> mv8hpq "+iy2R8M"ё#0:}uhӻ/|`B0@ W2/1d %._7Ye³pR2Sw$1<6}pcY"qժw&ds&Fм v?PQb%yh+SYal~ YzIpY-B;F:r~=ۑ|(Z1`dY:)$!J4-DX]x d Yb029ExQ߅ٳ{pԍE!X'hWA2#m/ץo*0"`R]n$a.gry;:~Qb| fڇ,Ue42XԔvNǡ7iZ`°0#gXu65<ߕ_ qWhgsHLSDޟ̸u+#Ic bRd>8n'櫻:T.)m=c5ˉ-۲`,ʔQ4dg;#N4`tFaԧV#cN]Aeh#mJ(@ 9g~V%8?*\AX0 )ѓ/ Rx&ه'8&F74p@F p4#1BPG!QTSA[P泻v{!7cK~0 ꃓ jo T]iq(1r22|z8Đn{*RJg~{V:1)4f]?YV=2S[b\eDp1KxwIÝH#X>E1/4`~ M=L[4C*Z>"MB&KЦiT1?~7/;]$A6RfC`E$מ70f@?-x}z [b>ݏS緬pYò09}L"}07) <C òQr C"/8Vj-ߵk^~׽3х& ?H 2*)0 .!Z)`ÒoDKϲ^|Ņ{;ǧ m_{Zp 3NI#:&nחD1xeM;,H\Unwz3ts,{u/?ZjZ8=Tj]txb6U4"d{Up\Okosō8yۧ;,ؘ]-k1KGҐ_tI}Z<`p?u4J+%"#ǣ~뺳ޑJ F;j$Q9uMmzVyݬjCħNxLnFw[Eq͝593muåU5jW hq Vr7Vƛ_=[KkL6: cE/Z|_]:Z2% ӏaY `}h4/Heщ }P2!Ifm,U*/8n^G}+uV&eb3;XH`0D:$>T?IO ˔'9C・Hbp4GԎY3 }.Uyo!tb!ԉ!x. P9|ҕFh sGy?_P-n{_o3F M'vOjwŇM0y ؆?%K G~W %0 GM>p"b `ZDzϳoC ] #,+eV/W8Uafm(.^>pN_nY1$ޫq$C'q!L")4ł{XluiuɻY| ^#eoǽNj璐W<5nLw< Cge|gFqb4YPo+m?5kEYEh'Ϣa2I$PR)Wv}"Bh8H)KV$/1ol(66g&3QWM8kD"'8螬\4Wĕcz5pm`4TJĘub)O@MT+;b ) ~4[.8օNl_н޲\(c1fBZhq{sr"!>D1 4a#gt;:KLvAa^v;7ـc |m^]]&>&Oe.g=D?:\x_f,&v:}0}ZA,CϢRL Sb |#]Dby8cs޵~s)a,Esм\k=E׏ON&2֊e5N(M@$V@@?nœ&!9O2xB,?yNqnc:,EJ]ň YOߩ[?/~s#{"O!Ԓ9՛M{&2b)DQ:C8D6,M%H>tޔo28ggϾa&yV( &Ds(6ã 3|w"7F#fL: [ &UT5Wd0+7a_o|6:A?X;b-ŰI .TKBzEQPq );\>O2'wUg@VM{pzqZqުwx7)M< EܡLg2{y+~9\-ᆊ>A*(-&&yJX7$1O9& j<bUW!N AoEI<[LގL# AqZ'VKaab(6I64E16:W/Ϧt:7 "KQ0`Y?`/61PWh3x[)i2 #yVvq r`%Y'Wk/X^٤8͗?}˜!VYz0&]:q!0@>;m7j aLv4KCƩC Lgϒrz(FQ$=~;؝ ,Fd9(cP/pkd1#{nϝ|yؙ۰9(Q)]zlZ`T iVl[QCtwj&'ybeŮ+M)\OCP,M&F}鯻Π;Z$IrHi?}9U0Ʒ[=J~.g z1Uڭ%Aݦ;IXP$H`ӜZ$;t1{a,s(d8߱R"n;,[,6ͶB~`~Ǵ,w.p|3G X[=d%/: ]]Е.un^AoEAl|IQ_M2p7 G,iG?49 RHzZ|$HT!57,6H[Xp`}9=S:4t& be;t+JZ\^z2Z{> 8u}Ts=_L&{޺3of J"IENDB`lbreakout2-2.6.5/client/gfx/shine.png0000664000175000017500000000066312140767213014407 00000000000000PNG  IHDRbKGD#2 pHYs  d_tIME *5]EDIDATxŘN@VP@x7D")La 3|;1Mu+aFX~5>=՞ ez2a(@s2g|c:om%|bB5qئzg1bdt5߾eFzq:v6ڂzQ|K|q'i#"X1>3c>32W]iGq6ė} >)VEfh?;бZ]%߯nÉ|sѸpI\[b|K~ҷ-UȁIENDB`lbreakout2-2.6.5/client/gfx/fr_vert.png0000664000175000017500000000216612140767213014750 00000000000000PNG  IHDRhgAMA a"PLTEjr#'7*.B+/C#'8 #1#'6"%4'*;&(8"$2֙ٛٚ!#1w&);)-@16L,1D*-@)-?-1F%);"&6ٝ$'9)-Aُ$'7ӃΕ(,>٩$'6!."%6#&6&):(,?!%6!0!%5!#2%(9$&6 "0䣷祹礷琞"&5%(:磰05K+0C),?,0E$(:签秹#&8(,@癧狙ِጚܞ'+=#&5 -"%5曫盪哢䉕Ջ۟昩原⡵棷梵掜}™塮檼竼禷硱旦劗׎ދٜ圪咡䆓ӗ匜ޞ柱挛yϐИѤѦџѦїђЎϊς̅y~{ϋϞьϟѡ'ZbKGDH pHYs tћtIME !'u:IDATx7UQ$% $%f4LJ JrP %%ᖔy/^˟g9˼[y"((Ed)#{@rpVjxHG JUVOų}K-ZrRYZ jdKj5QZͤo1 m4jvRu7zKNjuQZa =꥖ H\vAr?]w M/0B!G c#8:l&`Sw3gSfaXr7l>E!xwIENDB`lbreakout2-2.6.5/client/gfx/back1.png0000664000175000017500000016174612140767213014274 00000000000000PNG  IHDRkXTgAMA avPLTE* fF~b^>rnN.־~z^ζ~Z:vZF"vʲrVR.ƮzjnRjF"bBƪvR2Z6 κ~fjJ¦zR2^>ƲnF&zV62jB"Z:ҺJ"¢fBvnJ&>V:fnz^~V6J&V2^>jNƦvN.®rJ*ʪv~fb:~βnrZzbҶnRv^N&f>fJR&nVjRֺ~Z>bF^6ʶ¢vZƪjNv~fR.2ʮzV:~bFZ:rRfJFZ2zR6^:ھβvN2rJ.jJbBnRb>fFZ>rBV*zZ2 nF*^:ζƲrҺ^B6zrZ6Ҿ~j^BZ2V. ¦fJj6^B^6ƦbFR*zN2~V:bB"Z.rN2ʲnJ.b:rVfNb>ʮfB"N*־njF*vR6jB&BZ. ^6ƶʺ²ҾnJ*ξrN*V.N"V.>jF&ҶV2. f>"Z6fB&rN.^:®rZ:ʺҺ־^>Z6V2 &KbKGDH pHYs  #utIME)1 IDATxWf}6xmEI7jjqO`\U̪a!}"G? W _=ls(*dn(gKƽl`Ψ#qe=͚//SwF;5>}t_~z2ٸ7QmLuVWbGN>=og|WA۽')9D%7>]܄{7Kw`'l[N'pE9B缿,~?)~JWHw˛ ujl~ kT%2]{FYee6<ьn/^?YZ>ґ4*V>}QAz^}MǏNyӱeC@_IAZDly>ŵydZ7i0S mU?p5If7޸l-ܸQ2{iauK G$ j*= 9(sR^ݛvV34 6dr tXzcr2z l"" P(=Y'_>o%FaHS䚬y$\c>O}.6|/?i;?0=<흯!\3"Tw|ϲV!&=zU*fݶP6"|u!CDhG)J'/bT*C^~R[;5١V'S喬;f8 5Q]79ijۜAKrH )ުrca~7G(r%Ͱ/g]F/O{ocԏ~xhe|C® fN)w#~gbrfVsMb #pDž_ɯ7R]hѿK@Emo gԥk i]uqS Ѵ̿Z{v?w@yhBhV;/^1dР+H裟8Χ_{z?xv_u}_4}pt1=nbA#T?_?~k/=7zd~McߝTG7lO1/p#wjoO nV3EFZy w= [Ww2UdD+UJIؤH\9ޝIۻ9. x"Ew!w3wְ]aE0p}]=Uz ]<*ƲѸ|_ĵ"&3~C3tky_?|ڃ5x{dGK?{KcٹIC`klКo~i<>u*}w#yZZhc|D]3d&lUսIyM!CSYi2gPFk0'Q;Tf K* k`=V9DI=g 9j|a)x""\ouT̓;2`[6$6v Kw'/˓Ǿx;_|h^|JO?_y=z?86f 3WR7_~<^:ZtP:gZX~“mZi|k(=(dkdjZ`΢ H cp{FX\[.0E"<͔>:dpa>ܶ+cAFVHLK=~g__'ǟ~^~x@ye{cON]rDX+ӕ= 4Y>0!N)]H_!j= 3a_[eȫQ]X{ײ8 տN-P\6ZN(u(2aS]۲iZD)~0Zx![e62wcw?tz<՝m&q1gRo>hz~ 󍧏OzˇǦyX@5va.={3$sv5Ѕkč+ S'( 2=}m2/]87PwB ºlt1g8FQ\@㙃-Anj">IA`m.':_6GVysc6l3" sKؒ:T}vzo}5:ϟ8r_ol|vt?{zz$|jăhNU9\}/q}k&k.MAģϤxfԩp@"F|F!u-wR{& AIwbV'L51[E&Xrq~mj*ꤠ#A[۫p-ZsX T vMP#)fP}}8ԝ}|x~؟_N?l~T&d\f>;O+"ov`$RL]ހJ`]+"{])xN]'ےQ+o o3÷v8.F9r#"jk~"!%=3kSGǮ̋'pt"%=$]VN~8򳗧}8Svڽpߝ7+.чi:us֓Swfr6yR^v'qEo_]B:+9u*4׼h=a@$a#g(E >3Ex:":BBZՙU1.ׯ$3$8Q,:Ymj AEm鞥dHM:)WEϷ̆=m8r:;kT[Wƃ#ed͍ߨ9գ9kY"^go7 jf^'cc|+LV P]&9Ax^4ߏ#WCIԝn*L%i)-n]cB: ]-|/\j%(w<0RG&Ȫ;hL>9̷;>R"p;Y4Uћ$?6溮Njye?}yK2e6R!||cYcm ʾ7( /{y{癀7M+|32xBB3 j6qm.QX^N˕=l @Ŧ[nDf# U( IuTU`F~j(ǿb {b3ej;/87d!NX䂋QYwdj$yF j]V@@aY@|cm5v\WpV2f_瑗kS7}pTT=jAܛQGOk|YTkmPZy aHͦvm*Xi)K7ꓗs/F9g-|zxrl3(.ʝ@~_<8[`"7 ~-Z"$z;"KohRk{rN]Hy\?g e@7@Yjh'.'Dڊb懮SKcŨX $ vA$a-kIk,܅KRYVf!H1qzgzdY .POM@KPn)pzQlw7e2He_\o}=0tku."3;-t|<|Oo+iif`b3כ4 5'ooࣈJ= ~~|"Ѷ=H5_s&eK Kk~R"+I=]6rAò$/j.K!>#ȟ' 8; ku;orZe̮vc:bnfzn0˹UuBd٢{o9WR{kȹ,)H7Oz)9.ɕl Cl;?6G*J`i0r)Rhra3ϷDd9nNN%d;΀b"M.X>x@QY,;rm't&aIe H'a@ю  ?= b.Ē;3}%W¾މ|wo1{D;̎+)\Vea4=}濗VŹB^ z~n w!RgОyI9x$#|v6IB8ȻS:K8HOi [s֝{KI%.ZEJse֣ngfHC5g鳔@"?uRP$̚.5QO&V+np{+U쾥X箓411޲cy,KR[|qoc/\Tl -#~q]jڌK 斯*Q$LzAYE//tySG$jΨ~R$x(o%%?hbݻ Qζ 'Tt[ u8#ПIE4kDzU4&̘z,?~>9YUGJ7^yŚ!Y&]4mѲ;= iRLLL޽ϷO=0lYvU9I|yfTsxz+=>7gQ}Ibv-Ga6 Δ)SsU551SuX鴞 _&Q1Ya "8Y>0 r !Ӊ mFP{Cr"`V՛1VTnt ʽ:@NڹȲ-=؝XnsVa2`P` 0zPYJwHTLݳImB9NsBƵ12沈 L >iGD{g!YWS8 cM ud}i(Gr$?;@ Ђ?.8=fafUg'wJr|lzr2} )صz>cNʤM`qi59<8~(^:>qfb]A-r3tzI>t-QI ޅŖgzBF DJQjI\ E:$L6;vc̎e gPLH8elB^R|$u89 !93HHoLH.vm6عpsj:g'$햆bcM%^s\D1I:p}/ע[6Eu4sY8䗧4Z= kuv׬wa&.0w햃iJdFXhwYIy\h{P9tP@" !p0qFFH@q~kcItmي:qһMom{cdG{ bXw7H‚$y(֑x|ƣ;JZk EmT0v^vy"jʵr ȯXG̫?Arn`wW+f:j̩kpMBa>y<S}6qQx#i`v4ʘ)P|~9& (@tvl%hhfA# p'smGi-5:}FbUsi΅\bSf& u 7|~CzJok^=m`99&XT{`F2 $,%l{:*W򸣨ecFoD9F0Y2&]hobP$)G~>B 7dB;EH̖! ]GX|,;Ž QUWPQt/qg.:D$XL(İȥ7W_Hc? {b> ATJ{QUe {FNc{" 2JG%'DXؠ vd 3y4er= y6Lk HGKb l"MZQ P(&V JP7HKazZzȷraȥ 5>11d%~yVITlA bhT"FwxFBb߷_j hSOYFF@eЫ݇ 4 e09Xvٻ4Z#' g3m qT IDAT-k-\[EFP.C~ BrV@4H#M;00G1V eY[ۅW`Ro{'jO˗Uuu8YQȕrZqfq ȣ&q^}\.igN\1| kve *͞^w4C3!*B~)+ v>g: tQV NjL; Jz9")'R(*ET)Ru?B(P"D䧊\#@Ņ"vC2pxzy&G#UktF*5Xdu61}"0C éWxa=o􄄈HoЃ~&AY@AgPJEajOZFq/Gk"5X H"y&;Od^x?&kKn\-=hqSq+`=t<i*t4xC q }'_w3.yzZȝ['ˆ-15Xazzj>>ͫŧ/~"#ut9s=s%ń/NF#R2hD`z Lqn\ձYql<́w_]5L^u C[ b~,DW!벣(@ @FX,JTI=xYs6]'ͮ!+81X=#CbQ1ҫZtfd;SйLzK⩱zzc.CXjߨԐWW}05[zڟgy2hdZ$OGH,qs ]:W>%8@X JΤui!sn0Cy-@/:#:pAк߮3%$Z#= 1dr0-ōR0Em-Ŏ+'Y.9|},Kّ\ʱZ/;<1'"h&[wYjʔ6:fvȔ}!ZqJ5M^MW#8y 텄%!q41p+ @qfQ ^SRR Gj3Zulٴ.oa' 1/s<-LWu/fYBxfzdbQ$I3 «I!p@g#6#۶6@ڮF@0dB(N7J){wV:2T)&R{zFMKR]AalƣN0s}||H4,o#]52=<9kɪ BaQٞԑ+j_xWqڻICOTQpqRw=J+^<: G:}̭0"μ:xO:N A*'OWC ]SYVC@:%ga]rX "\Yu v'=F1L6&e'u4۳5lVTO] S.hFrLb"ÝCLM^ {X%HZihb1-"ާN@ɑ@#J+DŽ64uz9C݃t {%m G+r^~9p0 @,Ցzr])#) vJ\c)nJl%a(1I9 UWF85De, 70):Wt$ C,bW o`&R` ]&~+^[tX,5p51TV w+"V2$" E78(A|CJ4 Ir(W'}˔^  ~: GˉjœȦVb*ݺpPRٳ8q D` %"*bBuN:$vHN,7`[3 3C.^%0dQ ⠚e7:af}#ǨC24%zdy}n '#;g]AК2lN+Đ޻VH3@ʝkCjU5Sd/NqJjܲȢ@oRĥ,QT =UIBd;K&32(.  ltkYLok3Luv<١,H:0)yFiUEzG-dȲ} Tpt PSVvYG5tXV8gF.tr(aID[mDT؂> BP644- ~%6#T{~籘 ר?W-ooRD꺱e62&YwѴEt^$z`pmoY#Ae&,ZpB,Wy)$Ι,؀pvw)*#ri+fJp쉇gS};! =JLEar 9# T:; |4} CQ ^4"*Yx ɇ!ObB49C.lxaz"mDt+Gl0 M^\˦w@>j*QjROœMO!(qZM#A4axR( qtB$%㔌K+g:ʴ `HkL 6\[Ұ(2t4zk v">;7u*rWwVmf:5ub[yЗ UyHwsYEܾY*R9 I|69pjv mC-V'mC/bAANIL 9ADD '?2ҌfCf <"LAd M [ﱖ*TEБ4ϡt |8Iu֪*nk$iCm˜ С 4 q-apC~@ˁJx•҄O 02o j$4U~c7qy$Ϧدee4]  VRGdJ‰k'P;~D@YM#=LTa)Ydw P^9b1.q:2٢ kQ;D1Ԏ$tl:7\x8kIoZ=Z& R$$Oyy H`fe0_`DU-#WV>B`r|M^M/R3汀<>Iǔ0TbpX}#ˬ7Q RB 9+wO7'u%@W8KfL_(驘NTu-]aY7 l3܊rϹl1XB8|$QZTE|׃92K9Cd#hMؗ4@26ZEfe2+I᜽&P4朚M\*c:6yP?tVg"<^J&k]l7C1Ov9}LalmuQJv %Oea]հp[vXb;DDHbNNEaPFJ-^32R`cłx2g(\OGIp4>$j2@==X33 Pbu eZ${i7UvQ/ݸhkU5Èh_rvɔ Z򪍨1g^" ok-ޖ]pg2QHz"- HJV)ڥjNj#:K2\ݫ[9@FVGjJ)=܇1&_3,<$I2>]IFDiQ +\DmvJƒё<5QG]`pX@tïˑe}yz^!@ծg \5 I[!C3l'NhdX n;SWDZa<:JڢolW>r BHs q =5;:pڍq;sM SY.$ͲVzH`P OWns=g,j!Sj|Xaw'ԐAXOeq5s3i\3&ަײ=}Ǜ`Gq⼤YD?XבEF3Cdci%ݣqŵXD݆Pw7<4$E gu\LpD8Q4z /+w@* جAgxc2=%XU㲷mtznnR }fA+#*XCt?F?xr/܁9ī&*FQaQ.!HXnxc]h =L.HʼDžP:IzD/E$N1%spΙfcS <󁼁8S~9i4nG@ cңf%Gm@QsJknިЊÍIżqYaFoh6 ,:̣n#aM) K`~u6*GP^8QPrds38"b嫆`~v)"/Cj"((- ͋Xx&\@!e8D o.׻+"#!Y(vif,9O:DXa ˺@0ލ1̟IE2q!7gb> 7(Feo<'8C|(;' CQiteޙ8㦠cȤGh!ϧJ˃u@uiL12_@n^Z,ac2mLqDMA][2 5mW.*le52/+mվXo#cJ/a1_<5A]}v/Rf u0!S$ IւU(4!G߰!90/)*mnL<3)hy 41-0N|:oZ`g+!SP$86,x#i.ׁmޓɠ2tB03PT}@"& C+4U&ߡ8*vg#5IV:f%mI4sB O , 3 &3 Af"*~>G|v6J#Ѵ* e.)EDŇiK}z̭]ws7,x}_vit ] Fa^ qZ Ee*SgB|ti;.OO9#N.`3-nDW$P8jX >Nuk 6_ָ#z'ap]|!dDK4Q7JI(ƗX(Z!k=.wZfRfDBFHk複 ƙMLtɷMM/L߭'/׉yQj^͂1t}"T,tK<6hYGcx5'?a2V@(] JR7*r/`.V#QDReni^Ttݡ߀tԓ+_?\{r I~#x/ᅪPbٕ0ƉuAJi9 nsGw:r[*A &^&Id (6,C#?_`OĂ >e*06G(ŻEīqKesiMDC)3 =90p˶^L|ѱq,w0aEn|7?ޮ% ZL/O(jՕՔJ@8W'%]2BWa:dӂNXF*kC4+-qGbkGo=/r7 ?=~$9`/qr𕽩#z|;ǑSv"NXEi몆=l1HW\M g<3zP6TK$;VC% P#+XZ6ζFַ)n3.nk#6vbE;e fk wyr_fXEVZm1MTrybşwR TTtۊ̉m3ΛL q|0sw91'9%%o$A{ ZH kv<@93opMG n=W3~O继ypBIXf'M3'QXVu^DK`aZ,B FBٰ1$IBɒ[1MF[]lBhM&n咻"Q."lW,D{Q_A7|w:w`bJ)rLǴu"jqc& ݷPhy7oW {9 L2U*<;_,1WqYCVbV}3yJIֶjjiَ6P a*~asr&za=*jј-$mIw$aZ YMzB~D i3q fM;HzzحU8[&P::B[|<GIL ЉMDɏL3L|IDi֟шV^/,7z׈U{X%1^1f9o;ΆD=ԭjbyno"bc찮H EV)M|MF(vF=!A/YS;'JtdjkʣTT~KMnlhkN &~ga=`1)&c>L=b^@ի >&ibY#T jUͽH]OjŚƥ hv|cj~jYB( yB(5!=39ڗjv={+ 6idfG]ЗTnUߙ}vW/'RH[ɂ]W#ArldA.U8 S)c [i q@L ~&GyaSܮ8y?pGi1bD;,Z VUs ȯGW ^)t,Л'\/3Mj,5+Hc~/4XCz:M=UHk Ubem9-ғ~:UrS^1VO64I[sGe ZSC1wɊja۴.O)Gx'>?j0}c~`&v}u'q" r bR*\E&R"1 9TBdL^vLm$MHju{R]O?csj/A"m'nt, inXxw{WB,5guL֟4;]٢5MEwRخR+NrdRn,YtD룱ќ9'Ư!Ē,{bSDNv* Jljc4E"߸'Փ9uq+-xZÝ{6ӹ!MITyZ }`æJ.{C6#jHȔbvK[_mf-$@tT9|m'+v6m#~+Fw"bS3d<9kD:jcyn*6v*E N"1qۉoM̝Lԉo*: dbY'ON~TEe,հP en3K1D0 D-"xG6%~/~,7c6{^[|Y+(7D8a8UV|l4pF4f(Bc5Jbd;6gHeƲU~GS@8"*bWl]&U 55M.yĂb*VILujχ@^ɠ鄳8D7ŒxyS++VZkSPttz> Eb,HXWO@d)<;"p^8BErtiVSq(j'DUwkߎh!iNQZqk44fo(j9j;M67(.. hb MֱEVV'/l6g6w8KEymF a@쭂:Xg&F)޼; [wd$t}0O3&yБ)(`p.@wlN32FAʽe#/nB~sXz9Z%ey(kB*5:LT݄,!T~=M.WϮ Fztyw9vo]~V5<_*#*9Aj7UݚTg5s?.19$0uo)J[ ̦<Ԗ8tg8B~ʡx9P,qki#=wlq8JM悗 9eL@ȳPa(s&O@ CsEr 5w6۔-j;Tۿ˅1Bbb-Eq g+61N\9Ν:wnXaXt zF%b.MݽU6 LL4t;η*NfJ`GIYna[G۽NKA6AG7 zE$ pqz5m2%M{)"g{[<5ji ]e%3)tKm\6['ŬI]_ΤrO^j?NfQP`q%-=zv&N%KVueYjrŒ39iw\nΫ%5 %hv{:ʃvPic+o2Ng ӛ4$PȦA 8.M^h/EZԾ,TF],e+u _.:9 Lf-[$q:z6D~ͱm&vvIBەT׵wl+Mt,v3TU-U0]pFy t,wp5U|  A'C G3QqvXgZr2}8a¦L;8 v^G}[g)R&29;P=%9l߹]gJ I'A,ο?}fw[fYƖS;*Ϫ·{zfcTu5CwW{7>S-u@ ivCuRf ~ S"/}V+sq$ E=&۩Ԇ)?iO(l#;"Bա?G)I}GsOn$e涄$:rc T3@&hYh׶c.+F-dv܇=?i& Y?z˂s}K#Yjniæ\E9{T ,0 nJJC,g4s\0]9> H.i5#z0Jjr7 qjq^\9CP"ϐ2)Vnŷ} q-01g@A(p~w}2uoQQE$Ko~sJ54if5LTwVH+٥onիjt +jsx7TmggGbVU[E |@pTajgIM8b NāGR ȁls;P:niF-$ŽK҉yq ,4Ex@P0\zH(9ݯ'À/zijTuKTvW؉( cT5L՞\jbRd,|rcGXe]5ĚƷŏWjve}^I`eȪʯj:SjvZ!S'ν~~1q<`5FR1 Ùi4r>ēt8.aSWtOŝ'w :C'Ա[Ë7-ޔ$LrJ;Ϟ6ñcQUQ6lU_\5ݻƈK޷k[Cm@.RsrQC2'g0&XW)WUjb*\^r\aV~m}~pqb3ݏWzr& 9uJ7r[}{6VXʆ6E,B9@΢ifXs^֓" #3)0J߼Ω*o7t{K?W7MRtNOM 0>g f)tʐ+&7t`[t:YWW' +nnW~]wU?PP_k6oc{gY|s`vE}5 (7 TȨb,͛y߮RsJ^gv8Lkm|t IDATT"6 f𭩀^ (ı{@rIQp^|rn7k]bV'VKUv庲;U_)nz,?\ު8m_;κkg]6mK*-b#,|c rك\,N=tO3}'gH'p-NnVX1j.͑mKEOK>x# !ϭkȳ @>< /y#%v)}bݰkTUS{ݺ=Ai#wò lxgX0OBh2E` 0O S xdLghU_JWN2 < ҡ$rvsHr#`"ǐԝ^l'ފ>犹d,]7/;{]E4,WYO0Cg5*mތ=T_ ?z۽nmq3c|u)׻>_fUCK1סc_.F| aBt1}l"e"x^bc(8Qdޭr{N@y({%*'jmvJ[C`1c(D}8 :бwȜps8yꇡwat9~_U ª>|g^붨]wVͩhVʂ"tg>|>@v`þN'N9^y1ttE~'/Ob/M:APGKkB&_;\=0ɩYpr°*ڍ"kU"P;G%f[+#Qof?q@Y!'yu y)3qdVET˴yq2†ZfLlƩ31HP',^*& l,KK繑vT8Q@q,: {s,T`|dũ3s~%L$L`I/3;U.s]̩Hp#8LDËǍϗklXU:"tϹ;j?Gq.XvU:8pμ'<R0ھHO;ֲĒAۈdRLb=6Mҁ$.d&$fG/[a=2ɖ(nCk2"9Tw~ktWw;T^?A%{F38=[j(x@WBv~jgٕukm)Fs\YqRjM:4k6.i U1LM};ww-ٹV#vo"SUpbRs$HŻ`1z B-7پJ;p bŲjyhɡhuT8 a{nlϯLwө2Ec<|Y}BMj[̚_?/wYE9ʵlv_UB}ek&Ǻ9U%RiH^js_||ejQ}KL%FdOW(eƨy啩XީG5Dg/zO p+p0aAc#cС,Ζ-F^߭,ӕԥA %kx^ɜё9is~ؗUk h4TQOd5[?}5dYYu7bBTGֲ]r @ߛK7ndf[ҖNx0.X,;{?}Rn]/qJ SL4 b[7_S`Dƣ(Q)s^x湣w,yYhRZ>[uzG\k6$! VKa3so}{Ib<4MH}ϫz"ֶc !d_?}/f6fjOd_5+alje ]N +,g}xwAETpBgd-\QϤALd, [%)VL|\XVb\:jD - IJ1O]%gkB (t|7^ xb98@PB47]wBBcf`*}vx^Q't'g'⁽V'kbu.&F'dKf/ϚjrCn3ajR4募r?hNCzfaY8΅n7qx ~nngۻt:88bTc)@R]+'4>qkLw:M '̊<,_v̉/aT"L5(zvgrXt7Yu+m0|e9frM#)ň0zO<{|Á}2t#fHNl&Dڪ,1#>~8;=8涃kieѸ.q篁?_,L]ՖFSPV;b\ 7-opwɜWTo/GWJ"w>D}#[D=GOOseпC4,X}Z&+xtsKrG?NT=\wwͫ!Lk=%{swE}{"RT?+ 88O DCb_HAnp'KT۠lk f" 6[_މUJ\2(ͮ^[C?3X3x}ALu iB j_Y;vkB+B`#pUmaČk@`WS_Mpw ?zVx[kJqx{r6ĶbǶ}u]`ˌ(N8I@m*_?ݽvN3WƝNc1xIWܛk?Z^[.1`~[[=tOf[o4_x&T=Xk=( ̠30w'S^~zs9L+Z /$NqΙL=6[&|1qgfq>o'<Ž4uv@Igwj7p?+wa+S?yqܹL8"4[B+ӇWn(e´݆ST?>x/~J3wڛpHCzY^yƭ4ݢ&ʚ~b h#"uY8xkOtu?`?goX$8"Lϯ\+[ V$|G5wv~K&43oaִWsUaȲhQiux1 #' NO^? I.Wc߸/\-QSq6%(җ_l:5{ϷO#O'w[z:=hV ў,!c;7o6'ݹwWu>piٓ4UZN:/o40mWL*$I?Mooϝk\vVVz% 1VFv1 M?^;yoә6|nǓR.?}Y\|7Ԅ R1_ieQyRCzϲ垍.?xٙA{K}اkK`9L뻥VWܪeU=y6a ̂;꠹=ގ&Vjr͌ϵ٩]`+GBCic+Ȳ Qѭ-EcUj+ n.Qm"UUӗ=Ã_gqo_n//~vp۬j+reըmҎ}-o3؛5@i^KreSjEW"I4SX/ =xifzF5Rk_Q[Bf.D]N M4EUP{j'؞aٻ?zb^C!(2|B~:ĒKbcn "yz+j9 Vf}cGdLC3=VY1IW[Sh}po%JC!"Mogǽə̈Hi@Pz>_u!} ,%HC:)+?t|O޹vp_?g60/oӗGg|[˳Gۗ=9ʡ Yv_uͽ< ={Uɝ2L?_[?9[-~Iut8ʐ8 a*И[JA'9 :\]6h@VӚnS!8_L3Oη74\!GF0I%ъ=ܣWL-AW; Uڪz?|1w?rGG_ګӃwflsIZ+D2jeLVOƻBA*e⢪ j쨐3AN&J9>=?9ٍx h_dŒQgOP4lU)QuΦG$ԫĉMG\ZBrC6L>޽|X/BO(ԕTO)o>z?O^=y~^z`W'=T?ZuOnUFJW?f rν9)&=V!ET,f<&:J{ "~*pBUe^,B5ԴQf͟nK!2WBP~6;awڤέx#065}Mr~j&CbX_D 'ܬ<\xh}tn\\Hեnn0,ʀJז?/NٓO(^A盞W=g_yP_~y&`DXa܋nl&tH"4{㗒6J}6%:7|hNx{gBk aXOOB< ҉*+mq;9#%\-+#Sɩ99OG Mq9@c-*jHx 7f4 QQh{WV?X?yvы>x'x| ?g_'O4j 3QP$aݜx;R4zØGU#See9J)(GD|R>Unq~-k;XXA4М즿S1:T7Fo.Pd [gǣ~R#bb4r@alg:|/c=,=d x oѳ/~?~ϟ,~sxѳoNwmQ"8}PzL=ZؔVtثDxM Xnt[X$/deR*KgՆ݌h]3KEXпɞj6GS{} DDb$#iur|S5δ cO_]p_,{۴RqYٝpt^zөG/eW~J 'Qt8s^ l@u늬p'qz>f-_Gǝfmr>" m_I?XD iqn8_8!4"q\\s6j~2!0jeƴ8ߍXŠ;4+kR7aNPWYl^ʄY][_..OQ2:ƪo?{yvamEtFCwNUҌ=- 3O٤h;[IߪFzu#_Y09k~xA2r k'[S#ĜNebt*3E/#HV \ūA>;=8=7s/e%='oubMQu' kŲЧ~a~#F IDAT G7o-O^ x.//ȼ94~xuU=S_H$ O*\L?6Eۿ)MzL1S Mg"7I&~"vKDWƥ0gc8+Ĺ߹V1<M3E"1B^``ږ0@5$[q,mF|B?2ۨeiUDG" 2Nj#LKp88&GۂuxW?}(0{aiܵ{lx冼AmA\n1X k[zf-u}a $R)Q',p_{MUIu(4M".ݿqPj<.LBo^{7&SZ+`ӱ,pR۩2KDcW#{2Ϡx{kc3$fp$WD8{=hDiA^_D+c|"mW(JWWb%2 ˜0wIMS300vZ}{~(w&fkdZ+ +NMєCpӍÃjWnY_|73o㟬,\CHPe{߼;tR%?:_9Dk8ϕs8~۫=.ʘcttF;fh}LO??&H=6]Sj3lLD#՝$/]*u-X*8 mY i:oU~v6FMwEWδ̄^qm[6^I)ʃû̉g ˷s3S!c [gr ͪYD -I)vM6I1X'?f)DpMH(F m zos̬!xKY8joA5e(x2AόDv2;{{pAkk@Hg՟?_5niVנ\zaw+Mot"OTc>vc^z㑕F"]bYS~ꠧxS]] .Pki֛Y~(ܱ2Ц(> s"h\_zbt67+_Wv"GF&ɩILCMo) m!㊒NZÕ,rYyw¶HF1,vy=8l =މ`_@W{2q啵~#'-]N@~eu֪9/QvV{yNTO@n~Oo h6lDԠbrjA3f̦zJ'.kj{X8W6r_ǥ*HH:R@0)3 B~\FJ 4wYlr+l6q"{.x`b g.݀(^vl X{;tj0sNV-sh؛jKeu 6z^6ex9M]قaū2бꇜah( m)#C=rCBy>]ej-hDvL0Aq۠dRyoUg4zʻ\6\k9aЍ-^r;(T^O |zUbdmd&J+$;2mE[*@mM'رwA27W͈ V瞚O ~HjQ͸bW0 RZcdQxwсV9=*]Z}16[ҳ~ l;tuSr8^}fቲp>w:2E xR*֛H{ -/}&͏0kv! +z3̼d2(e^ i dջ5Lv4VuhMl#VETP2^a`Y%1F{ǸFaVÊVU̙Ճ/k]ځs;uwEyKքU0eӴ꧝uschKUADW )=UFuEˤ&` 3Ǜ# O[?#9(l&Hs rp*3%R!& Mx)i" p y+xn}e3RU`ܚ$I0d\PCSbzρf,ةY E _e>o[(0nAie=Ӵn'փWoF.WT~:r\y߽Hl Rkޝ̐jvr缠 Z5éjf&2̔fYT@dc GТ{5Z0NclXeG˒TƕITO0$( t+yY.V7çJUfew4=@vm&mf]|x4'FB˧B8vrs8H㤸Ig()y8 !Fz5S#򃢷V3swlǚw1&!lp*8@?VW#q@EDUNVWJ _e|T95VM]-{{tڷoZ!*ݛPXo@I:%0GDzm te _SgUbt-e>cC*꯳h#~x~DT,%fI {ƘfD0<-^jW_M@dji+%hO?+U,!#e5)ɾ`$d"Ɉ% DX0GvJn#~JB-7jv%n[Ue[ nQaEݲTMu@"+=7\җo/}u  痶XO+>='lkjﱯs| orZTw+#mޞݗ[-}/|ǰ)ATi%zϗU _>0,)jf 4C+U<ZNqG20Bpԇw]ם:PHB, Qrv _jƷƯ<ǩk*BƜY1 _saY>2m1*dIGZ<-WT'6cؚ`Tӯ6`|aa(F~((XŀU8G( PՓH_ u#4F磖ptYiX]lKkW<, ] UDAW/I(!2 Q`0Y)`x/m,ʘnTB@[Og ZD \[ isW>1דK?~r근M‚"v0ۋp@VdNf &yP;QMdRGnY.rZVi0j9VI5Ddz=c' OJb*Q$Qq?ΨIeb*]*]K&;ȾH{&j@KmD@Ⱥ1^? el.MHߚ;!MrEd-뜨!&m*^jr21d.HV'P5<_IepQ00.μ2*{ l^CarF9U9A,."ꪛS&‰@Twܪzrl>Y9 ɉ9iz;]߭^ʡ#Auإpޕ'qI7KG[ Ěۥbdž ;%hG35|HG vI-ڄ=YSocW$trw/'qQ?y9(ZPR2IŊʫ}P@ą ?ϵ|}ul}}tẎ48 hW2:H,~)g[' *%]&74.x窧zEYJB^Žb%{TD[v>^t6ͭ@r ~8Q&\kj+Xq\U_ }pt{H]Ԝvռӿ~~{yl~ei*bl$ }x$$JRAH8V,*y&Z͕HFv4Pk<&%qGϏ/ HX0@TDZfLvHBۻ{NRu3yٷ>YO( b721ox,n*\ašHkI>@<~3a97"MK$c"1#2ík3|N;9 |p}~Sb*E55~'Oq*.%$q  1WJIΏT$* ajmUޮ_jȟҩӻc/LnIպ]ǁLBp*^9Ҏ~!mPK @TQS$H2RFIfMcqO%&8: D3^זp+ *4ǕG0$ɌH,@$@oEBw* M T'9 `É'`Pp ,6m:y݅ ӲJ xvKA"ΛF'YpA;mRq_TiJ}̟ >njʖhп@=w.Wϴ%%]UR3at9rU3+ᙂq9 }v rhI&d#Jlv\UP]%G)wht"(ŕ$5O Sj|#*z(c kw2{7b(fU+%?_"E(:ȅػ[hF$Oן ~#6cXpDD5gQ&{f8n}MF&SP+ ynI"se\ HtNsjJGd̓8NYR1IL8U TTP+Sh)mqަaC'NX 6[m{3w9 Tha՗##vmktͅ5 "uXPBO܇^s-~5 6Dٌ<)aQĚXCȒICv*4C0~CKtj s]d[A=Jiu\2;m!EJ"BG\Bnɛ7g^.X\B\7^aޥC)xfZ`j|lN_~i'Ƣ/FNqPI{\XQ'Y^WgAV9<歍~e3*)=nw@>;EXnAb]fXR$|+~ԕ EQfΡvӃ}H=$o 8 aVm @'9%viQ9~w5YKujLos[l4ͷ):bp <[!j¢w:oD;2)v(,T:\)o~ Ʋ%kG%PM&҃zQ L"2[.l:3GB,ٟGhRLE ?*j4Cz%U.> {=r¬XK*+ԝ_{!Tqڇ~Q3e ҳ 6;:`65MuO$`=7nxXz׶m$V<.IhU2=r2T_ÏE4!W`Woq:э;szm&S8M'lH'$V`ZJ;V%v5rXVSvaI43xU;7 >8o'ٰQ"2[Y h>HCĶN1OuwB3ɌQ O sձ֋[CV`Ihj4W0OؕêdZ`ky$^?&g|F#bC։nTТ_u>Zst=)GVG2ӉC IDAT{۩ءE 0C.iߋWtc舰G{)Kb9jq4UǖMiKZRm鐚fM%_9LVhYo.B;H9h"ǨE$>wY3sm ,K\(/^v*{3J3d:hᜰ+vm;\Epn }lޟ (iؾ7eNk&8ݘz qJf7 e˴h|.E-M |Urم6RĠƜΜDI;o=Pb;&}U+h-nst=z2#,MbqC+\2X#i1W3wDȺ3NQ eäMpeNp$bL _<4db۴^pg7LiiFR@I @xg$}4Y=,sq܌3hNnmŅPi>u֭Tq`"Vè$!Ijqm}H7e. 2\v;u;pgG~h_ʣB@&HQ2,e V6yVs&^353`#]9DA@AҘc3Q_?YL2'DiZVoؔW[%bY>~sI3ȉiO<V*:➼$PCUqv{_R(qiůM%j1+{SKt0t]ij)OWDa{@?Z&)䅴Dv`CdӑsrGD&|E>ֱ@ND3e?%*Q$zwfAF.̨NOVO ~lZgx3,.B 7AUR20T4:zҜKܦXt3Sc d9{T\UHy-Iو\^ Yʜ>0s=|b]DK_K0rBk :շ$yLs ~kt_ ām!WL2H x~dc]څx7~VCaN1 Z$En_],K`\9Aߖ J VyW}x.XZQj2pYQ`nZݭ4y, h49O8hZ &(JS; [A-X8--%g9TFOڷhi}=Z3(ݺ̏SuA ;!ä,6.4`HtCs3e&<š`S GQp3ZzB$hbKnMRopC'" a8l )dxPp*ϭj q97]4U+Ix!,vDVU rT?i9%\[<nHubt{ n>qngcaH3dHZ/}~9 z #hS \]фGl-Khɲ.X6ySaPAl|x~L%ńA =-DO s܈a5e0١`_q'r^|-k`o#n'd7H XE囃W1JpMu;}_6 a`;|VN=\ @[OM L9~LcE)38'ag8Iunr`e`bd==Z -|`Նq~h=aNY_{% }9Z<Q<@QEνUW'PYrA}m}xQm݈v_ ,\_0v c+lLe}n%}dxq2p2 ւnAC`*Pp: Dcs# .H>B?fg-Ɏc"a}b\13{bdܧޖ/t`kKꊻQԅCLxJZ`7񼾯9_˓4z/& S},qbg.oΑ]ߢf/mnX`46.l?'^7腅 % @EMĿ2ꏯUʠ"J¢ R↦&̯,ebGE0!t>MaR({H%6tHȞʧ(t*㧷:^"!Ja^e%-R%䢔#a%e I@XHeﰽ{tE7l`ۜD!vN?Nr4»"?~uzrK1YT$`P ˮ4<%$ 3KFin%%= 9'η=lG :%lIU2C0DCk/D吣e U6LyGKh;w7G &h&땚1|>{YVhf<)(0UU21SI:dPJ^Kg6+,PxF]S _V ֜mރkL!6PRa Y%dzAPuy(% cg-RbA j~m?yNx|/]}z$s`84#a a% oYV/(*9OIz hHygżwn[pRÒn1njVoʻזɨ  ۟:p YeveG^) 1wn{aXZC/Lhl$&gÆŸ>r*79vOLWkK w.Ya^7vL-# K. v ``¤~E΄,R*s^^NX\-r$1c:~O X}sHRelLL2ƞlS)D 3ێjYn*TѾIW90Smp` z RW=:Uub_ O#0%@tH>r(|QjډxvhLmu׌`P]@ X¬es^P74c1Y `^I?N1aqD!ƻ%qKA&ͣdOgg` ph(cK0ŻؖJpn}Œgg!ԃ` 3qLDR q~k^Li'nh1h8ՒwJSlH\P^W+P]佡$C~# ;e&bDx/8.8-LCIH!wzO9)@W0%0r;":ș]oTp{=~j@gdo̶/wMh7'RL~1ĥRh\-oӉ%,d2T0]Vu.LҤ׶1n3p¤7)73L  sXD`y1!mog#KA*B`KkNE}c ,*~͹Y_i"τR(͘_ا0 WEX/KivK2/-=_Vè;#e,͹d9H8XY4$ޞ.2 CLa`f $n̓؎l1y`:R . , ☿ aC].X۰~_uv7R\V_@K[:%n\!暑 YbE[8l^uZthiHYw*́^^̀o1{RW-`oFh ҾȜnyx!bzSSIDYC%C,LP#ӯN7 'i$9NYmda)8W,XPNS11 "Ft)K4!8zxeXuyDW2"aY8ro/|e-}Uz9êo~DmL$3A3 Š耦_%[| ,Cc cTf\H ZF<{yŤhU>K*A/,O|b7xr:F {u;ނlzeӂ؝& ~'a8QQY*rPR4EO/Mw%1:=]dUǑif$\+N]PQn㞙IfGfH]wWRa|Tm v`bͨ::r-?:ނ&rl~?!R}pMγrTv^`64$A)}TC6-ICg)-_t@VO9nf,LBo0q5Sa X,nqr\y'pB K~IuBXE>79XX>^G(їt" r]$HM*aN熟|ݿ_AHVGɢ#=غ5cJ[l ڐz\YcY_iŰ4Gclz*yEEb7¡>^!tQ/0GhصA!rX&"F9I.ouO)ďaHg\ Ud]+WUWPƤz#9ЬqytZ O@brv ӗ{WXtT-JsA**bSP(lM0V~3! nG7㘗"i̻Eq2(Q.]Z5Vl|wP}ɃXKtvp)zD珴NPD37% !6z =DE S:ZM՝V <7o.@\q:bUI~1cm0/t#͙:HǃL8su:xѲ=c6 iwot'|i3! օ1_  x.k2@h*a ~s1 >$DO+Zz;7U8sL#" 6hWFYﵞ](/#L2A-ȵ"M8VSQox]oMr W\Wu] mԜJccyR[:=c)[p]Ef6;GtlgNsԨSGff6T&D}+;TZZExk|qP}|C@v,BL*]K8u<:ÔE }$AXbI˞Е:;7l5*@Vr:pXDZتSv*N#}5™qOu01fY6UviD&/IqOAzXuv?y0g㬻gt E=9.hDeL8ĩJ)Wr^dcHX#.O'=sW?p Z H*ǜA'CndExUH[Yrv"~>ee7h[8mk̵E_н&7ٰ#Kޮʎ/;].v]m?Wb(u#xe׼("(\s`&~`"T އE#lkȥrsZeP"IKxép=9WVʹnp⏣/jٳFL!&qTO(i/&:}UnxW-NHc'h4X5Y&I+VO=k^Bԅ~)$eGAg;ݩD׹)癎c8,!cBq##)~/*E>.C+.ǧL[|!ǀXs' vW#,4F_LƄ' my6̏R"Lo8;o׈=ҍ_;DƨIa$BUgcoAty IDATl~QXp/UC/x:k:`5 ^;1ƙLݝ8[ [oa_.: q 4񚐃hUKRqjB &FIoa*;:V? Q 'XIMӷF9kևT~t=( ߭M`5QQ TW֬jEDETD:#pfOYllo,2ZƗ&󌆡x8VWldöE"S\V3%u`!2x1J7M0$[N]Px耡ٽzujX[Mϵǘ*pKg6a4PIfYJ 1n{jEE_c#9"'|-@5{W͸4*I sK+R}lÅUj5n`)ڝ_7国Lpz]32im Mm}pZ..eĄ%X6Q*~ JG:9.bl B,:.41=~ tuEOD6'`̎ecYJ{t}}l鸀5kLV>?jƵJMi"N9h*]ߧlI8UDQXP\5*;TB]4Ȑ|L]3JF5 #XU 5r[L~nQZlIN}Xa |EK( P1pK[*:$ MVWggAx79X" O^4Gtq i"zzrj[|IsJC\PcwuzUGh<"Jzv/D*}~:ҲSIK/1-,8.`(: bcTk1ykj}bPӳd4.rT@byŠOHX"< }R(b'N[Scz1}c$*盛γڵ܆ $U0Z(뱭's DXE^J^J;;}Ԥ@6۟SKܶ`7=('N,ճȎYfBY0kjj)\^?8g[,l],q^{#` eXގE%JttCx'e>LB^KpwOzG<ܕ. Pk xWCӯ16ypY]{n._h~ ~㯔S1wOf36<\3OI@aivfq~P* W&Y:!qYjv1;/8.da-޿F8vk~JOGǷtM,lDd9㬰X U$ByGڕwWN"$\f}m6VJ!_ yFvV) ''VT9#^83qc_UZ/h þKxX ņ@Mr^U33˼L#nvV;It [^ntq:7c"aa&PkD~<йlcG@ ug,Iҡ#?'bjO `)_deQx{2x"M[8l&WYpmj50zuwugzĺ^mt+RgNMn]7T<1i"*z1;X%hJ UW&a8Xܿpqт9IT c1Kw8y-* UH3 fuI4oMN+Ԑ6l#obD D$^;ˑtp*Ox\Ws}ϟ-,Lmm:wHM CwiŞ^zx֔d&#Ȍ j%͎C1UX+F:Uvȥq.&e)|ovccat')QIʦb0{IZ0{_^Xm $D_g̤9KXjp޳; `ZS:u<|{z| Hz EYxAQ=#i6QTW) P#5_{igV7h7B(@Lfٱ"QlW&{~ vyeDPs9L^z7Yar)HNHoo50!TO*+$$ʙs0`Hb) hM%5d"HH駿:}=e?+.p4*Ecޏ?{g ] &8B)j(z,p5/Ohs'H?7e8K)kt,A =Nz1]o0u0`e!-PUsM{w}AӢ8ŻV"5 ّo1dAb0?ƒ3$|N-̈́B"0zQ: lٓvٰừqkz:#6;.p46۞kwGF{6^oɤm}X&JVCGS*z54#1 RWf#%KU,cG;|#!aӋ3UM紊qO!'BuA4Q#i$x&A7q4Vu$ob786lqc5 bFЌQF=D٦h(3;Mg$ hSmgilSoj&6 j|uX,g멸R">6߉ij-dd!&nj [F'K1FW!zl1 Q #zYu>ls ߖLGp tPS )da\&X%TM;zO|sڈIy^-VMm~ "pGW0>)45smׯGȉz>r)>F䁲tv0Fw }[b 񼪏7qcDI,Py ;@2^hh ʥE?ˇWgw eBɐd/2i߯&x#yE/ m"ȵMnz_ ѩV?ɍg?*[33w}@NdO;HE b?umuHcnyB_.'ӲwJL5gO(qmewtyYdŽ%ܒ*RQcME s ;3@Oi6I(`=\,~}kg/E8Ds@qVBDfLԣF,71cf/'Ij9>ĺ[=$.0V)x"hX(w8rp_I0#(qIP:#N\GӘ$2= n$էӺ޾r$}& <|g7:OųݓFX`vƧۼpMOEAu4]$:h6N^#hBEUP Uګ 2{d6<0F,W*A͙(6]lx$f.Yd 0`>@EȍQ0CCclrNM{D>uC(uϟLM'c4+j_;sң(bCkST-ڂzm/9ṦN>9za>eaC^5vnz_pj;v,/ 1i_Yn < E /!P %Yw'Axu9;zc }mx^y'qiY|Ţ%䣲0j#c6BYh .2HoO8dj$Bĺu@I`g߾M#"^<%]"Ђ\I+3a“U[`jմp &XywLTkD>hq:ckUNUE~ mAE|?AM:S{'b/ 8k:؀)ְGjCῂEG7Vb! \8}".Z;c6Ub0?JD6Awυ#Y%nvX&,<c_= JaV^}Gy|1)xa+*SO_G֜jED] .pqn]x'ILu ~sHAۏ'u\U)<]_ITL:( fDa\3B\'NUdi=}ʚ̪$Ij| ƺ=D&"o P-rh[՗ӗRR%3%9DƠWBQt3mcЏg/^ՃY:q՞UNi (m5)Ձ-ާ){\fك?{'s}fp w9ra Qzkΰx+gUC;T4OhˑE8C̲!w-c Id}$}U]"KSj^c=W8fp1c.OGwu8% QΞ-h׮ޝqzʍah}?k/ bk)->WQtA[ū9ל=FD֯XL3w@U|wzu'fL~Z3J92CT-{,0UeO 2``{G42 K+xᴶEV8'_w8bx80Hm[^\>?gd2`0W{ %>% m-ww_Ҳj5..r"WU :7DTp5K lj}}ͪPǔ(Ig=#HTC.'X8 :TiDks9%ÉO 3!A^b zfQ3nlki] V^_qO#]W,hUwp@@,XXI6LY]2& &)9r~u .FoðX#wqo1yoo.|cvqb 1L~Si2S<'[Ϥwɘ [O?t^og"\4wor.:AySCpu'BֺߥCn}yL}ޙצRϹ^KrGb2dEyZyE?q 0uBphlXhܩSv'rY60;"?k]>|۷?{ē!7Pc ;cgd޻Oąܢ?w?} ̏rI:śN{&~l_ M'!^~P%ڪ&bK ɖە2v>jTr΅dS [U+}لtZ2|=@' @kv>#칈DqV?;RNj۳o?ɫC]p8Bi|>$9 d6\ ?~N{I)O뢘>9xmh67j^@9 &004_{pWs+P3wm y/PN']{@ &.Jg#FG d(hK$eebVȿr,vxGbwKl!c't!|U!x/dӷ:jGzu}0܋/g6)w % KKVt_l_u_M|!~|id7]?Iލ3 BO]|55x)?l.S?[)) nqfc 3-Σ={QdM!Cff7Z1= M2QðK0t$޿%^}o"oz*{ϑ caгz_9[lXysC۟}tn4<g97gן5_pj Ҝa(S&>82OiRk];;h𤌟16d9 t1 ӯӋPը?N[{Gp5-.jd5rx4q&of[tpLZEUcyuO/8! y"y_ӓ+vwݶm:=fvRnrbj:Jnz>fn¾nbJ^~6FVvZZrfZ:jJZrFBjjB>jb>>RzZnVrjvzJbnz^nzvfj~ꮮVvZ^~򆦦^rZҊVVΊފzjn~N^ZnfbKGDH pHYs p pg tIME %)I ~IDATx{T}cn,ưHMʡh( ThR=,[f޼e|Iy1a{6+BM]6=7 ()SVVYiЮ֣>B[# <3crC*Va~Zt8OTx~O,1fnw'^xTBaf4nWڱ=)O1o{4{㧱{zE}g#๶JaAz#)yGt爿4=VO~%rp5鄗˫XvFj2kW~ҖAm#15- D(6>^ Rjal7S>sQUs_⠆Å@݂]njἨ}6/+BuqqsL:JF/٪ߠ~ԘSc&o* bXC NzS r}dzvCxR阼gP1K WYnQzτP AxIZOA!@R0/!"ݥY6$$f̝bP$#VKԵ'ip {-+i\oNA LyK/ JTv`8oCt xS@;G@"ye} !f)Fu/a{G}ĆYpŦС9@? r4'k!!j 2!%LV'QذH~DM(7$>>ýI5CTC"kU9EFJ]aJ L &NCI+7 oE9p Z _U캞;BOL#`@M]}퐋?n%՚۪0SO3(-xkѸwej-4e *3<\Єi&*IUULl+=Oc^F+`+s`;X@@&t0کa_DPDZm=R Z=.6˘3[A^|P3W9D\eI%̞եd4h.)h'Ce .g\X 9`l+_cqh*-o mu=UD 7/zD/  3|CMA$ЬP:EsEq-[T|]ՉGKƤtkD)P Ԥd4=yqN2ϕu*Hlx#'crV]Yb2@< :Mr Eyf /++k6sEqq3> F*bJpE",-Q #Ds`N5Zc5:Է#)EZz =5t%K"a܀˂ Ma\-0tUGUʡV+<`Zn-LuɄ$}!a\A-S=+WT. Cǟ/ K CT椷!ɟDsW r aY{cglSZ-]mk  ~5[hq;PKz0 4~h ͣT0|IrX*-CzN4Ȅ>R`sVmIۨAJ@KF?PB{r#rPMBU,Azu9=Ȱ1R[eYe*IY ] AW (k$8;//8[NRaV%1fn@pށx\;*ȫc,8ZlilJDa?PTjN#||?*Mvl e06vA #S+IZ95$](LUج ޏ5ex0:ZGNaրpӍ38+ѨFckIUwk4D!YW/wz++wL܋9޴:%)~#ይ]$#p56vE]D8;|t.nSTD~O8kZ 7AlǓfNh0%*#rq&[;%j]#54PqiP)/q07Exmw:';99(|)3jw}Zf=bO. /I XKvf@tP[\y A?~ߧ(ݜ +A&ۏiJY |-od#lB/ 7ShC`x0\f' 2|s.f 5AT߅ xEҒչ ̈́(.>?#8|G{>Eez֧xʗqK+}%XgL/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) $(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) $(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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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" \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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 Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-data-local install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -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-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ clean clean-generic clean-recursive ctags ctags-recursive \ distclean distclean-generic distclean-recursive distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ install-exec install-exec-am install-info install-info-am \ install-man install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-info-am install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/gfx @for file in $(EXTRA_DIST); do\ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/gfx/$$file;\ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\gfx\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done @list='$(SUBDIRS)'; for subdir in $$list; do \ (cd $$subdir \ && $(MAKE) $(AM_MAKEFLAGS) win32-install-script); \ done # 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: lbreakout2-2.6.5/client/gfx/scroll_up.png0000664000175000017500000000063412140767213015301 00000000000000PNG  IHDR`gAMA a-PLTE(4VVPhh0HH(88lll777GGG///&&& StRNS@fbKGDH pHYs utIME 3vDIDATxӽ 0[!q2Q p mʰ>3hs~)(ꕣOO>> @win32_inst_script@; \ done @list='$(SUBDIRS)'; for subdir in $$list; do \ (cd $$subdir \ && $(MAKE) $(AM_MAKEFLAGS) win32-install-script); \ done lbreakout2-2.6.5/client/gfx/life.png0000664000175000017500000000535212140767213014220 00000000000000PNG  IHDR(<#gPLTEvrTJJJJ,*(0ZJv3%J RFvfҜ &mgKrSDlJ6*vVֲ.>>>ʘ6*#gbI.N>4VR: ttq66&֢zƒ.&"`J@ zzzb^Fj>r\ ~ƾ"""nZ"60&v"& K2%Άt]ZB~~~vZJB R>0>.# ]iRB:&."F6-[F8ֺfffhҖjZ" D422&F.! Z:tj:*bbb ` b&^B3fN@nbbF.}bS>*!S:+:6*:2*tnRn&6"n^R:<,2&V."J:1r[L'WB.lzZFFFJ:ZN~fN aSnnnRRR q")"fRI~vZ  bJ666zb*2֟2,"vfz^R:"[I.." B2&>&^^^B.B*v2"~*~jN6)jN=&&&z֪d F2"lVK6(Ʈrf¢  ~VBFTD-bN@&.." N62rnNR2&ΎҞB.$86&F:2:::VB6V>0fNNNVVV  2"nS?Ɲ~rfVF2'6&"JB:...~zZ222*m]N:0z*fE5^/bKGDH pHYs L Lg"tIME +%dpIDATxe X~seu8V踧dt3}<#REW5刓1t>۝GJ7c 9*Jm?Ь:^kD \,+06X::&1Uɼ挭^]a1G#!??8eF !V\·=\Eq&QUC$);Sj0t"01qQ4'Q$Z~րb"R倣ng J!,GP’Wa!==%I uCA9bZЅ-닫aY<24?{ voP2'V-\]诞s[~ёсHWӍ5oL_>Rqce JVHܸqd6#T~0ѫ4f9Rܹa둡E|\_:l᯶L4V. ݑ잖Tp7Yn*,.n{ v̟eeIQa Pxi$O&(dztgQئ! !{ H [0IDx섿`nQ8Ńe֕+>F6M+4mTtN UV XB/9kVMsJA KƞeFJCNKms\k?f9bS\J1݉|2 P+Ũ!<*F98_5'~zϿkz{q#6|'MMMx1M@`9U4Rff(2:3iWMC#,G01ÀxbPbRGI!<n5>VVff $I*f\rnF;(GE2arECXxIno3}g}wreĕ+w{1!s 1d0֥}'o6._?3c&L SfK_8~|/ɛoSwGjP᪥xg{͙֏|So13uه~K-ܿdzҩ7p̾Nݵk/}wgc޼yosf*Ly|93sg |o^pzKʓڝŋY+~~ck7xK;r>qɓV}gЪ[zp˃ W̘f:|0w;aEEϙq+#%f|Ϟдj2b0ʙ1ߗt()jY ;\u6LϘY3 H#%8f|{4A_1|Iv3c͚Čŏ>ty0tz9/{rLV25%3,dPQẗA@KgRdBAbM3o-gl 3>i)}gN3s}i3 /.UYdIENDB`lbreakout2-2.6.5/client/gfx/fr_llc.png0000664000175000017500000000040612140767213014535 00000000000000PNG  IHDRNgAMA aHPLTE)-@ #1#'6"%4'*;13Kp@E\ˇӃΕٕ'+<#`bKGDH pHYs  #utIME #m4IDATx-I FAO-)sm$NI)ڠ(rf(IENDB`lbreakout2-2.6.5/client/gfx/scroll_down.png0000664000175000017500000000064712140767213015630 00000000000000PNG  IHDR`gAMA a-PLTE(Phh0HH(88##lllGGG///&&&F}tRNS@fbKGDH pHYs utIME !79IDATxݒ 0Eʥ,̐ \'VH-rg&m~$'Vzc Łcl7y)w4]9~)Q5Ls6* AiR4J,n՚f[/Cku,YITfaT2*&p8" @dPcҨ,5 `F%,X>c4ۯsu*6~M 4wiIENDB`lbreakout2-2.6.5/client/gfx/fr_ruc.png0000664000175000017500000000036612140767213014561 00000000000000PNG  IHDRNgAMA a'*;&(8"$2bKGDH pHYs  #utIME !;a;0IDATxc`F&&fV6vN.n^1 A!(C=|F_IENDB`lbreakout2-2.6.5/client/gfx/f_game.png0000664000175000017500000001242012140767213014511 00000000000000PNG  IHDR^VUgAMA aPLTE  U9Z¾ WH) 5  5GLH. #''wo`*¾ '''8H ')#{{# #'4{AH* D# 'D2 # *  #*2xx5*Ai?4LD=DJ2m=&  D:2''.91  =929*'AD52 2** ¾5.2A .9 *0^Z5<'**...OAwuL*==pm{{#SOOttAA* 6.>ii .XXpm.pp.DDDD!{##DekJfbKGDH pHYs J JBtIME % ꝂIDATx; {uw4sٕ+]{m[°x5H VEep.$0!@4&شPNnGӦmy{g!EJ~99{{yY+s\C+Rm}28s'[k*e,^/}˭zr6~. g>|tv; )bק^dE۶G?77ch\Q5$*>~-mFf< {O/ [qgk<*%t˖G#@ΊWHYɢёs2)2;ʂߑ2٧gJRaXL.ZJoIyl 5uEub/Fዕc{ Qo'~d#:ۙ.;r5Dҏݏ7|'ۓw}(3C9䵈p#1Ox! N~>N2 1qGS#]wS䁈L?ʭF׌- Ӑ튶!+'ž%1Qkaht:K U)םTFDNZsrA~Mȱ6:n 74*68|.~z\`o9)Ǝ"]8Cy^ؽ˥DDsC,vLL6虇fdؘƲ撎%"aEX<8|- gfE5
B*2`Gie] >͹FZ}9X1K➕vo[5>Pg#pf.eAݗaz9BNgZ!V}|<.ڨLHVru [?IyI,F&/F:aN/<}ԚJny1A"wfua-o gW+ `<5wn)Q 3_$d||UIDRd./0,znBBul.dAHu/F*\ӈKM"NYU\AW]^`9jhhߤaajJ#m?zF-b sK'˅ANL͂۳m+T7 ;I9s8#5b g:JEi/_|!3798oP 9˩ B~Hzjsz'[T0m4G'ENRTS+_ `B@5iN].YޱĿOiAzK_0ENSonn΍K|sH#j9uI1`z/Fϥб*Jy@ ‹x*=헲)=I}wBedYwM+P1*`HL\V 1ƪҁO\20A% G8I}Ȃ?bdim= gd{cE9 CIvV:pySR W _Kl =O훥|&y;L|CW"{.z)<=..~O)B9o$ғuV߬|.Pvdnͮ.X8ӄ.Kn$dh 0|Ĩ?5uȞaVn L6bDi]Ho[%M#i- X/RBߨk1P <فop Ы@m;}5noBǬ8{8"G+alJ)4|;ӣߖBi;$8`+`shR4p` XJUo&N kH]U#.M+eD԰Gc]jrwF?ǚ}Rw$8z\c,'*:W+k~hPb9MհXujX:uM/vh1Aްy5TC~@^76v2SƙVѳ {#\D~s)yАs;fw2?lX-jfw5|O>e{'#5m݃UϥmOe(^Lmv c] NZS/O"fj=8xטbu]A< 3lذK-T/<6OԿt'XM)s,kzM /Q>Y 5a+KoZʒ9?nL">!8 g(KkT=$nimle3 qx a2(~0Uկ#L*2k۶u9BǗmD[hIZv[92ЍD#(cO翟OYFOcuyg#?Q!7͑qyK +3R-~UX%[~m!vFb]NBoFL]&}3_B*2NZɺj+zJ>^J9[ Ż̈lNFԬ~^;l. w"*Hku&f$ 524&UePDacdN>\60<5K("fz!4v~yy`t;9_nn})?`]mrhTkW[湉k(dO%bҵ[JOeR~a&q5EKgI*gw< 6tu7daP)lygk"TioIENDB`lbreakout2-2.6.5/client/gfx/nukeback.png0000664000175000017500000003522412140767213015065 00000000000000PNG  IHDRkXTPLTEwiuuts|p}p}nzoyn|mtisixiuhndocmch^g]f\e{Ze{Yc{YgzZbwWcwWawW`vW\sUasU_sU^rTYoPvitgndlbnaj^|onci~]WoR]oR\nQWkNUkPWkOUgLSgLTgLSfKPcHQcHQbHM_FJ_FO_FN^EJ[CH[CGW@HW@GV?CS=ES=DRO:CO:BN9 IDATx}B[ْ, ' ll.N=wo6ZrΈϟ_llln>]/bl~RV74[vp4/ΗWϮonnno{ׯ<}>|_~ۯޖ`4??znVU.M` Μv:v-d>Sf@uZ=S9?/O'ʞa`w`mo[`#`tkkP͟Lճǵq2ݾQY=W^Ϗ?޾-w߯/F\5vov{ YVn {{.`g [vgfT*Uev<!3%3- :Ϟw3f ?իwϿ__-GiirV`2 &pH6@VDZz0pȆyOh 9 ŽR|tÏtkfDI+riN xn /;NL Jxbk503[38??d.   4;WN߼+n^]2x>"5: `^ 1+`Ͽso=vvۚ׎'3C*] |kohavU8: *d DOw {?p< q'4sZg;}{!@7`naB8pNr1͓Y  ;]%s&8S8``JGfώ,3-=6LpZx쬑 f hR00G06r+ u39,*#EBGN|ybG={]'f %4n _h$|0NaJ^ѱ`0VbC{/{T rX8)d=d^؟g?P%NQ~~bom,7PJ,>WX},uX mGA !*28>1+ǰJ$ 9hax0pz]Urog8p) ? %/ ;`fa+HCZ2+c jDfSE5|Q6P*h @//nov3zNCǸƴY\<@vIX'""E?0QoDd"2՘+N#&rA%9gI1nwCx8Z SzcD~D0RBiద 'E0S{O1A~IcID3 '(A! #FW6z@N@:ev0?\ăo0hB@H{hJMʾ:R(J.5U4N7:<O)pPb Ȍ sX.NK؏S (F~:};|y::;8;Z˓=%p"EH^޼%|=;l̙#/ $j@3lXr2WYp/uPPpYÐ>\\lUeR^D&OH T\ y "JjJeg9PQ%&{=p%.P=͹8  4Gr|,``> saO(T;s@v3A&Vs @`LY_~59;oi-A2>aD=c\mt[=H}T)0e^96EEfHd4~ã23d.GQP,~@ r lDzg5XT\)rEV}@}dI8Ez?ab8B n#.(# GYX0`WIus*@rs4L|yp"LcZrp^K Z #5YV `n=nhNeP0:Bt,ݪIYaFM@D [MΔbA91bްQ9  >O?c?Y"GSstT>ՋcUYPPg7u[f`q1!"/hpҠ~j.y}?^ـĂf&GQBԋB>)R}-2VyP#ͦ;ΜS(#f0gA Z_d5FN|jK+`N2`P-)eW(ힴmYC a4|#`} k!z~!H#>"A=-u=3:q>]_D)oT*0 OH/]C;hhBP#$ r@tXZ@*S 3DҚG?q}3wwZĖ#L0__"Zqh CmE22w4P'94 M{ BgUw.q}4@1|sde1ݢZst4 䓠 ?LfJ=g@c/%1oWqR>vboQ`8r7[I f?t=_nz}嬨Yv;9zx˓hrW"zb"#<*3,``!G<¬Q_m #tD' g&rUPY] $984B7&uc/?i,&SWت @u'&>'Ǐ4P0VXlS$??u48 #+ X[`~M \&ΎM&8K~%A5,YNt:}~ѱKNEeʊ 9]yxGXg}bX[XC}-PolBABN@ ᙖfSV# Ev?&[FkC]ZS@44`,nlL604\$}Xj9`V @;6P5Ƕ͉V};9/A R|/m@քP*/x fip L%'s*+&l@v h9jvbk1 gWXqGX<>; x?#yB ޻^1 <>Nۺ$w[z\n c\p͡h\ M  ph.Nbp;sL/"{Fga%<0@!` [jL-X(54zURBO4u9J;<F!p#`O"mx|tN_h9p >ϝG\+x[@<1}OU-(Sd3Jd٠Zf h&c縄ח__ߊ lonf7n6/eHA8p8IEv'X\Q+ t p&re.8siv#" xn; ?'y#.ŵGMW $ `/ _.`h?#V DA{>7"pAo 6[NpQ5- ]Xډs[=Gsv'~20*؀U@=лAjpj?ŀ$w4?} ahAJ 8D*.}^ d (}v޹ çw9ҘH\y `P1h3;uMt _' Ƚ]!QnW=|d%@`D/BH;j00`6' pD@Wip'pL-.\S'?!Dǻwos/ "3| \_`i,LL|SЃ5-&|g IDATf4!U5I5! \'R6&A ;x'&8bk5c a`$WT+ʿ5爓h4[D6Ĉ"E73oaK~蟌gC2G3b?X;v[q5$.8}r3^nigIb?-않:A I DR3 y { A  jI 3 4{ɬ#` \u=,+$P'G+ W=$]07R00[ۣА`g' k9y7= K-)樓9zG^nyR9m[u:I"!8n(爟[$)7_< m]R I!# 47I{ n4]1l¨㉮7^i4f<\L\+M7p.x?ЯTMZ.Ik@PxP;;ݢF+ךph-3^KJnfbS *F-]uWI=*^L@T#?%LlH% \[ħ>?_^.+]K?mkL@ sfk =G@,2i:$8Z$oYc(MT86"\ T ]FL0?;> >K/عIn.|Qt全pĵ7_;f!'BNw D+KUŽ+aE"s$ʇsLB_CW<K2Ro^wEksj5-A㨔#`MZ.#y{#f jxLg?o輢lx`RӠs)],wҾ=ʨ`vͣXGi`, ͸aZHutDrw;T?ķ1EhN`=G+NJKiW#iL BcЄSp|CTRYvD,a90z/]UN0_.\t0\+~{'|=;l̥.__P*6Q!梋T (@4~#%4BpJH){`/Or=} r } ՗+Zj:T *yj2 /; 5v$MC\7URn\}BWeU4~e N( _;6w rxXe!*1*~`Ag! qCh_HۧmC@*_aGa@/~/ 蹴n Cd%RhD_95!Tg5c`Ct">NZb1GzO|K Vบ鿯O3:wzg5XT\ͧS!\FLsRxgEh ciS ؃Tҧ 9 bse{NݜJvI;hcn7݀ @wSCE>`VF?EbF`.y``1T)4;-:Iw5TIrU@h!w"#Cgs@n2ыcW|שSs`ŷ9No ElEP{oRQlUIValMB$b~?EiD/r@#ey'ـ;u `t"*:)Ci$*PuUa]mB؅ 7`IDkd8 EKPJR5m;uAlR$C+vsCo*<)C6v|ѰZ./mVx !C F t]3Uγ=T Ӳ!X>]RofQ1} brh>r7?u: s˭/"" $K(b@rIs"R xj@ 0P \V|5oIsۀmzO;{gYs>Ou|o0T?C:4CܭߥGGh@g8o}7T0 Mn4#] ~QI`11¿H2DkR4 g!l@@o0lew ##UhbnV~V5+KR@.b@h_Zy2wѣx~t^I @(H (!<lZŘ]O~LvPF2>)+g{,x]w]L ]$0@]-ŀ㷰}59[InH/l v ~v;F>/Vnܵ9ʏ?8u=WHY(u;b 0oDhvxDki^Sfӭ,(gICBdid{)z_MmDUgzzEI>y|yy.ĕ7$|̺ |(yʇlX TV{wIkʿh$z;'erKv]#vk-ef *B";1@,h٫)k6T+̓7nv ^ŕRK79}Xpciy GR(2--W\bLF,nC8k!No$t;P@Q[[?0.gY-} 0d+-pi\CQ% pE[`0Y/4k,HuรKNfEsQڝn؜ #dc"I!BK.J Z E @׾Mv+T;'f5l"ߏ DE E*DOcyҒڟbh)قԯ77gDLPٵv,ĕIn1 qP1@}[ǹ X p2%]S. nxڏz x׷t{}ԹFd  Ǭ8zN$>i4 U@[I7@MvG,sA. FO׷׏.@qu p[S >wyKC,= Gw!}ҷ G} c+>^wb*oW?Vx+Ha9aoPv OZ7q>wnG<`}/DGkk9<H,@> ^@\O=~G@í$|{"݀z% H!<~v_:Q߽T +O~20xt͓ }38Aj>pl?ŀ$4/ש}1Sl0u{[{`[6@~Q]ܥ? _\d| BRQb-`40M;Q]c(}Ϯw#` # px(Hp hEQA0.L p|C5ؾKQ$<N öo׽<B)=T.rlg+ XU_NPh>._ϳ4 @C]D($׾RE+ pSO\pOW>ݒœT~vH0)R `=$~cl?ɿ{/u? Z0ax(>ܽ|ڷdUHe4T`̫x$@.`1*O%n᪗Orm<9=0KW9͹fVZi"@QS՜˗q|C=?( i(@`pgV %J]ɧB<&j@_4PR>τsسdJ_R~.y !(J*G% ?~CG?oo7o`XfHC/S+h!ԯFPhU i۠ Tp6{(m>az* J$όjv*ix%?tL?M;d-xɜ<}npEi#HgN^翮ŽYELBy/tQNaq~/rT/ rJ>~?H0VH$s<}(΀\Eʿd/IwH@ׯ_}OxpL|A(@$pC̝ Y)eҽ 7p G:m'j0 YpX\p애gYxsǏ?}ߨo_>xxx Y+AjQ`< grN%tX*  t[u@9~~@aO(|@/Ӥh4cvT~Wgq|&x~7PF芧av8Fōr"ж+1Mz¬#`? *ڢ(jïQCCa-`lV׼IR~w\J.iqUEbH`D[TScNV6j֚j3i J+}v<"EjreDe"REh5yDܟ?̇{5E$vJRHLs]|HȵGv1QT&33U3%vJ|BrfÈD WS!T*}}5oWq瓪JR)LVfJ.9bT* 4 ! sZ^._sè**̤$kZ¸y5U@~DfbZyDqqi)f"ƃh+R0vmyPAr:? 08IR8MaEZkDT̅!;3E@{>L%L%q>4P!D\TUsf&ho7T!>\ea0U炏jk`h̅!N^hb>io5vs~3b>f)[+s2KN7m7 9{%T棙Ĝ׋is~4򔷫b"*sҲDDH J2·݇ZzA~9fj+9IJ-R*8""sql6&b`q؛06rn><<|0"83;3\Vޛ@Ez`$&M+Rǽi;>~GȭѤdm A[i5K*yp8}k 0}GeY|ime5SGv+Ą `*|<}wnR6380ԼJ+^z?"cӲݞ Ĺ#v55_T3S0 "$Vi*@t4itx0UܝR+IZ3raܝy*5m50|,N 5Tb?qbZ6m-0tgiŇ0N^]jZ%SA"Smf ݝt{jRM-{va63v@[^LSa>}q>{vl LLT"@"a[M*`q>k6i,&_EUZ+Hn؝ȓ\0V.xi[/Z>Ϗ~/"o·GvJN}.Uj0aSiZ^er·!a> l|OoLBJZ ` ݽش}@r*OPʆ@X"97#XKRm>Nau:q=b|D"bv3@"piZxՅfa}wy[.YJSK!T$bM8|0B}n_v1ݾT2s4P$=#t+ҊJ38גHs x`z}BDִtme3mm`5oR3J=8sp'̟"?ݱw/_~)e#oi͋2qUZ- ¸w>ZUS5P"vaD"bfĻx~x}R[مQkAbrh*DJZNJ TkAM~;H;a;l5IMf윏伩s+"$¸;чZJNUP-TҖS<>O5`VJ:>~?Zͭf3300C"&㞈D2oyq*حoZs'}΅8έ$O*mS^^5bJ23#ח/Sga>!Bo i!PeŽA+l8aH\҅]kTwq>N3iZMQkk++i-9긿t{iea;$vnMOZC͛ԂL[w3h5k*la:~{**hD\Ӫq:J-"y3S038r-6L@Siw?L0*۝ޏ;ݏ|g~8k{3ie@GCOq>܏ 退5-*Յiw0~_.jR\:'Jݮ ¸kU$aܥ嵖Մf*!NüqVsf3c+[9->`DY/T, 8HS)aؑs?ߟ]_~ٝߕ,_ lܝ°y58N? w0mZpB3Pկ?t{B$35T) |^^ cHNZV̑oeev쇒㴼~ۭS󗿬iߍSw93/lDLd)9Dĺ]Ur%]k\*Vrx}aܝ۷]gRK0$ r~TkIe[zs~pa?_ٳ̮[0 &8ws=!q.,ϭ8]j^v{.yejR?|lW@Dd+0α>Έ8zArD8̧8  l|VKZJfVk]vw oWbf.2##0kI+fjT;r]pq$~rz+>0Gr \#;0LG|| OK0||xl҈Ŵ3嵬0cZ+y۫s!E+SV0Op'@.~TKneݮO]'b"Fb3qk%ռ|3)JˋJ0?Z3s  LU% sLW0DZe) cҊYjeta0݆p}%-*^v]ii51R+ԭ$&vZŇ $t>qviJ}N$ ??inav{^/Oyy10bg*lBDj)E[}i rOHx|3s5ݸ 053@2m.fFDnlD$bnޮ5ݤfyUDý 1vagbnM"3{Z""!"^p08|Ulz}IK "qa=մXkyʰΏ살~_ge~ֈ UZ`M~jZs[תZͪjRalRKMaw2@dрS+kIKY/ ?|#BCq8̦m[PUv!nO>+8j]~ܟj٤>b4"\󦭘) 2T"*kfJJa:h+> ~Gje}$$:%Sqavw|-I[aV0M0'^J%ݴUv~$tS~|`v8NO̎CSE8" ~ޟ}oj:?ޖ ?saݟ?5jjwa b v_՚ֲ]TK: 2k"EJB’VIjQm0ĮMk 㾤k |0DCYkZ^ йjV8iGLSmq:alּԼJ-f8OPtشeDTAT*"Q*]CĒV;0VL"jk59{i㮵RZSil%,U!>!LD0!yw[ޮ>NO_MZm0Qjm5a>>|z޷V;]݇㰛>DU4D"?/oIKҊV$a:IUZ^ثTFF mͧaܱ oR6vI*֒LT\Hy[~kzQ򥕭k!JZkɀa~8iy}RmڪHK+1{q<]~Rqwl%+@@a: Zr^_[Z hb%mmt{iiie50#"`/awf?H+a9TEJV.JMZICf&͎3%.D ٺH!HM!s͛[BdmEagc]J|k^aIeCOR$.F}򷒮"%y&5C̴[-7D&Jcvw?i۷"ȓBqĎuI q:~UHB>3(ԚT:WUr s좨tȮMZ@TEj&}׃LJS1I^^7~Ek6S@ô0//!i5Ssi>|D0& nf!||ܮO.-^qݠ*U[ ZIȮ{a㝏~=ǑÀD=Dt$],wgI"d"Nׯ5-VJt`>h !VJ?yߛٰ;j~wcl*l`]UE> 5~صVzUiat{VDrw9J^AT&mnRs@"-?J.^v9 #ԍp^LET fR\\=`%|0k8TKIx8?<|[+n[^B.0Nii؟kވ  /. HX+Q~VV{Y.D05Sc^^ʶ ֒Zy.ϿԜMC%y[8]|E[MbaB"=qy5$F0Y8ȮJV TUZ"׺0:VKUfa<q+[w㴿|y>{A|0[keU͇YkVTŤ T4t)Ğ| k^؅ZsٮHjYjb? SMdZ]9߾cٮHD=d&56궚4`]HD攚k^T 8hL0i+-/,Ra7޻Jۥ4fDL>;#|8m4V}wauZ[.lo8!b55]4c_*H&0a?$-˰;9M.K􌤽IHHf*Ʌ羈J*m \ >"jj. -o2q;V8C @=T+MUt{.j^;#KHZDLD> . zQZM7fn>>fkMVvn/l0@@LLGrN[C"r cw9vhfq:rMz֤g*^EjI+;j "*s|zDC0pDM$LEE$-fݯA[o+iawBdfvqTD7aTj ;d&&b~7"EEgwNU}|H+=`:OT݇wiޖWDTmڤ]MTT&D,-#ݎ{K5i'GvR+qp|HD0JkKk+70vD&Dd|VZKS$$ra}E{S? lcTK-,:ղIMD}t/JVKNOd֖ׯJŖWJ.t;l?oղ j*{D$t5UTRkB70Sޮf0^ @ښֵ3$fF^kPi={چiH奦E[&BMJqa ?DV3Sޮ-ڄvC|Ք[ b#Rlޔ\ͬ : ::^wu@nu}08`|le)ۂRk/sb㤭Xw. 5-lW&B|K^Hy3_6OJZ_Yӭ a>?i^?K|M۶^Uy 4;t芰d؇z `΅i b~:܉jҴ?֒Z3!&0۝م8y"63ޫ4'I'*Ur6w^_r G'S@5)ko* ֜k+=dq$v~ܩ JIBk+Ȁ!.i 쇹=+L٤ViҪJm%iDiYA-ʺ8&=K38aHWZx=ϵ$1 3Zv㸏DL^Unϟn&-̧'b7q"v IM #P%o[Z@Ӱ;3p]M[7EJ?ЧךWZKibBv+ۭUղ^ZZUɅq>CKUd}bq>.ĴJ+a80j9lԒ듙HOǩl9C 3fR qڟ}1Kmgð(9IDATt^DҖ][LvJ)i<#b=XZ&-"8M^"VRn*Hu[Zސǹ]AmܟxbR?L코̦Z z@|=ʪ暖 T[ݮ=-H7j#R3[^R¸ tzv{ G&{z}<HT˦Rɤ!}o[4. >Hsa@0$À*մ9;=c{HZs>8zٖgf?HVyB'e@[[罭n[ƽ΂D;wN[-ۭ^%DDaޫ *;oIfo9?T%qwyuP[-> /qW*Ȍ*yg 208|Z)*MEQ燮wDZTumG磶jft ðG  L yCr*դJwyCɇAZ6gH:Lfof%"R3ٛ4?Lqvh?>x7a>ռn|Tͺ09ݞ@u8ke0jIRKH&.N;h5z|xx|*3n2ֲvz%-wLZ-1;DNJ^x~7NuyRf€H>G".yy NUϝ wD="aޟ $5kw]a7ű.Npj1Ě304"GIBt{.۵+V75cv#8UkMnĎ]Dv.ݡb?8yb79 p~wz^Zݝ>N}mwa>>uHaX*oȾԴ̀/R\eڟOHk>aӯRw݉}$b0iӴg;F$^EYEח_kގ?8aTُEUu>}߲=?=<|>,Rԍ8G5VٹN?Ft??>~ϗo?-o̡{sfn/5opaw~oj5@ʹt)]خ߶TbOzS=Nj^/_kz.t- eqCٶVSc "-R ']+y>;?쎏%-*-*2qy,Tv}~Ǐ平]L4wɾ\|G$2 _S}Z-2"w/|a?>vqTiytE¸q&f qܝZٮg{؝߅q/-@qwyE~4}^^̈́d38{$8>|X.sÏIU~%xGE'"SEvaNԗ\5 ?a V*eO ɱ5/HmOR;00T!s˛ʦj==7r!N?@*y8 奕M=+ݶ8̴`.aF$i+O?*=a\=)S CB0jz p"(3n\뗾S}M7@jeSqw6i.gU> 6sdD$)nψ*oHOn30N߅iƃ &hL\DD7օ8V6<r`]5ӱdqܛY-\[`׋_~ͷUZ:}w^WbeBn/)o]CӯWqr> ?qupidDCf5)aî/Ԛ)gt)5ui5L?8?q;NZ=#p/۵gϤff/Juqj5Kٺ$e305-Jq؉Zs^:}}XudKDmׯ;ڟ?p?K|Dv{qܛ+ק>|\[IZZZ"mЖWq%-~_?5!;TvA`jk]ĽG *m?׾RWv`&ԕLΛ" Co=2k}u0ZM%No״&t|8sͩJ㾦[Gos/i˽]8_~?L{1jbҭ?w;=n 0hfڐ{̴m+ [^L*uRH;a:QO3%$@3??1sZ.ǽ C^/=޶RkNך"9f'lךuJ3ɤ{S0&WQ8a~yOy} IjӿzS !HX [Ien%1;@·qr dRxH-o؃)2sBoݿBW00t]B>a\80؅'Dl%iVT x@@8vwFw{00i#t+%;3Qռ^rovan7QU 5/.:f#PZ+"|w]쯼3ErjLۋo9]78BZ^zIѾ*5?伶<՞Upx~=cӻZwjwjfhjau!UGE3bXӢJü^$NAO3K 5o"<9gjl-/~#fF;~m5p}E[!{T8RR.ʰ3iӏ(o7_#cka>Nau=ȮDu"ɿIBqu^5w`fҲ #oeVZMqw: ]^RH1C)ι? ߬ua|O]^>I+YMdD&V+%_ʹ;a87WzBTUk M.N5/%Pf"Y!-wwa7 a>3{'HkZ/MZۭm[fuo5/.E:I Cl҉:~U#o`~m4hVz|l7X0XۉB}yzjZP@V*)yɅ1{DOh(S`\@0g*h@[7چ5 y̜U+41bFZkg4VsiE۹04kDci:kkZ/TеD++iDyPPF%sI@ ۏ+IkNw û_AOj5+bb.Xk"jQfи^)Ub\х䨘#ըhA+fŭqTSffcxqVqIZr)1^& *0e-c7и֚z=>U||>~xx^ø(7Tr=?HFJT/.Y`'^K Ơ\ho7cxo|8 KY- ?XJBh먖nwwևZP&Ү^IbN574ĭh֭ռ.9]M sZi-%J63or9hdC8 2e@#1X@Ja%&BI1/,r>ʣ`&ch|ר4)GRɸn} ^B8q:s5q>8k(<=2%*I)A׸S+U" m hŊtAi%FKkDPIV3QA$&c<+VFֻn$zn,sI vq7ܝHPZBzYk^7 f{@'!ͧl7NbY)vaݽ;?~ϪE']RZ֫wT '?|0޳V*ٹ·%BYH/V4^ |ouZtZ((/q70?ydL9IZkKZZȺoDK]ʚLy't5%1+n=rnȹ4*yԲj wջ鎙šDQⴞK5`w|$a֨$yŤuFmws:1IM"M$ `MrDh\7qi=Z1%q9~k. hl͑$CKvW? ֹYN9>~-qT]i=Zzʁј 4FZÈƆAzJu䐘9 {c=T󢴖bY[ ǫ]G%MW[rh|s#H Gyendl zy ܈ZXK,iZz 5vxc}o_j~8xϿHZ/PJ Y/f:X+yQDޒ/i}--H(_.95J"%hð^s%F@%׼R%^Dq4-`+[oEIENDB`lbreakout2-2.6.5/client/gfx/fr_mp_right.png0000664000175000017500000000154012140767213015574 00000000000000PNG  IHDR(2gAMA aPLTEώ~Қ~~nZbfJJN®r~nnv^^^66:.22ZrjFZNNNBBB:>:2:*jjfDDb~r**2"&.&"..Fʲn:>NjVV^rrrFbKGDH pHYs  d_tIME "!:IDATxar0`9%NCH+Mh)$wL 3 ?W+iϘ,Of6/6MS7tX.Vy/\5u>l6Y0m66ۗn@x+3٢qVue~eϬ7Ƽܪ0fQyA6g4qD;! bs/ve{an4g"yݡcѸFl  ]IN(7>/F4b\nUvr#a>\2}Q)z :l]S/>xNUTJCkDraypj$cyJYZ*>gzZMf xZxTۏqܥڽ1t)\LL1Ӥu'I#fNy3ONtyX4#+__c >hZo:KMzC34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C34C35rYvbLWXIENDB`lbreakout2-2.6.5/client/gfx/f_small_red.png0000664000175000017500000000364212140767213015550 00000000000000PNG  IHDR ))gAMA afPLTEqqyybbppjjccmmrrttnnkkgghhxx~~ee||wwdduu{{tbKGDH pHYs utIME %NSIDATxYv6 %V;M?9.hms=¶Dx^Zx/eG쒛x]7=Wd#0uLԊ}7uXxUt۔OYML}}ecPw ͳYCNoߔG% b ]z(ڶ'胿սf]-!I}%!Fgqbf"]N 2{Ա`s_M^X뼁7\4QU+|N$Uv?e[޴c3<MvsA-?SXP5ʊ&1%KA`k ёzA^ 01tUIk7@ %}?ҀN@5F n*Lj/ `ݓ=O13t-⊾#w h. )p}1 lBQv1e8(@^;@JdR530I 4v(WLk&Wlw!]HN4~(}Q'hɌ2~)hnztYߊ[E&A#vwj?dj5\m3N]hc% Y 1ШwN gʽLopxFҤ5;1CM sFM#9 NM wmwnj%\~ЮȥDzo䒾f&cXơ-/H_ )KRȞ[x u)+UZO?O\{<~#5:|> @F?qjͭ O4[wd\0'):R$S}opTGyeWnMf\줆^zy 'KuwY`ɮ1eg3~ddʯ1SUBHdg8)\ϖ`B@y|GH o%v!VIENDB`lbreakout2-2.6.5/client/gfx/win_icon.png0000664000175000017500000000126112140767213015101 00000000000000PNG  IHDR szzbKGD pHYs  ~tIME dyQ>IDATx햱k@-šC Enh ;$,w߈^K.M "C@u8l MJD3{;>xSe$΋]{W5q+?==-D@|XQڦw]/m"CҚ(|k^\lmmPU% F_[I ]lrˍK|P{n݉Af;`!2ϰnAR;|(iJe}[= k-I8+( Xc5xXc!v.A_i Z1IpUg)EX  6{@*_x!9%F0 i6տ՞E>@6 d<#ځ:>wD"xFsp%ӲakŊ{ ntc tPw\4k;.q7̽$ ua?T@ <߷W4@p{%| [m66.\2NL&+mUxܔƐ/oDzǵZd1h~Y:e}mnIENDB`lbreakout2-2.6.5/client/gfx/f_small_white.png0000664000175000017500000000407612140767213016120 00000000000000PNG  IHDR ;VbKGD#2 pHYs PtIME +[VIDATxݓT ʞJb`J-vCyKUaIRXmuwUlv߾g-Ao~O\C_ޟk]_f):y :@-S~HFCíљM͞џ߳elƇ?(jebګ ;CSo>6j"dvf&5?w5\/i@Uʠ|o:SU@Ѻeqz *p82DD@BD{C6`48!!" 6dʇg|5@$1MnN>u/FO[J*M/OckUM9ϢU{HbBVIt5ܪ48fe55_%$#ܰ*N׉*F}ҪHڰҨz8TƴfYz稅BKo3tHbt(EjGO~ q]M[4NE R}֩[|MvË@C?zbsJ:} g 0h,;^ĵ-pAO(S}NL `%C_&*~6Puo 덿E {$41L?k,ve6tPezfJVRL;=B=ZՇ\1,,H ﱖB+EO$ŇZp>aQUuCa+dE=dp6EJ| (ovAm_; %5_$AɍI,ҟ7:6<,8;qAߟg(y<Mʟ0E<[mx T̈́"Of b(GSCdI9nɌAA 2s~`ō"2THh?6 U#$~ D=".w0$:Bh7,14C@Aơ怽e겝킸HIڿPҚX4b)N T`ۅkۣb(XnaiRVߗq})/׮r;@EQ%WU^vr䘚 C97/obI&Jwc_k _[VW~ZKNTN K.f}i=c(rnΧ)JTPu|7#D' GKK4Vo#vXȄЖdT%Ag܊PK{Y Ch 3>/lZJi8U}:N51QC`KK2 *sQz>o5~ ~ 3aad1M_/t/ ,Ė;c1mӗӊs3ɚح9$K`~\.K}HZ~w/MK,nnyuޑtAfB]mnrycy3;mvM|-\dh?c< Nęo"PdWGfzvzw:gK~:N!!&~7G_ǟM%{TH,tq+~]oߎV_,oW\4}OIfAjIENDB`lbreakout2-2.6.5/client/gfx/extras.png0000664000175000017500000010261312140767213014605 00000000000000PNG  IHDR]gAMA abKGDC pHYs ! !LtIME-$I IDATxt[y&\` !x ^BQ SLٴLیC;L¦+;DM7Q^WM^5NOj^7U%QQC+C۴Lٰ ˔Qx^B c~i&]}guɏF! ,/ WUd WnpWOcBՕߖPJ=pΟ_*ݩAz@vv_v]Egʿ9y㍲#<;3lYgmjۯc֡_|Wyx"li$%(aRq+vp7oX,N$?#(ۨ7;WtF.%G#[7]iғXzg }mx~T5̉ v^*z<%щR_֎;-ыyz}^ԿzΊˆv~jXXw6?;.<yFAg4[~-Gc.!hbe`!.#.Ko˭UԲŸOv-D-d\~աϔ-|I߭r4m[B@PIҥB/ʑ[cW GwҶh4@0&9[Z@!L-CWlLiu RvI+3nûҞGòtӋRW+g&o<2>c^ bKZ[ME \iH p=ӻh(vi0F%oG%r/ qd,xAФS/n=k56Q*0ጵ:Tx%4$U>-̊lc;HW:)ss#f̥R-H-/iV|bV93[{Gg|lS{9Ronfa5ŒeQCO:6|q&\{@,-~'k 2QSMK qK^r2bUZ /tu㍌_~gc[Xز,00>EOHg8tDX\\*ӗby$,0i=:5ytjzevG 5saV'[1)\yvfߴ5N YflSԿZ3ņ .JK1=زⲿ@)1~8r!x6|tm>DfŖ,!{! H/W z"x eߕ5b=0Z`Qy}lL'j ˗; .p&k(P&|2y\nO,F'>[:*/bb%t.,V^X)g+1gԧG7Db:6:K^rĸ10sAK{kAh@6Y&(*.4rY\]eVULi$*ǟ+vQo LV/h?[^J) !RJi[Wb 7c`U ub%rmUP ! 2Wdζ]kϸ.l]mLf.w@$rmTk۰mpʋ5ѲzIg;9PZP@Ƅ 4gtv8cPJu 5 cݯpxjkd^3k Q4 D^uRn42'pW+p=hq#qp@29@Xb&4}3y@Sٛ.f @laz?H"7ͣ/Zď%##O,94. B\"ѱR高Fݬ0!/a ZH< <z=biV)x=b -myXKg*s_O};sfhf ϘsoZe:jb3;uS*D" Zug_ۈ|ϱtbV_d13K sIeF$VOېİp<~0CC־Rة+d$Y_\px.M\~C翘?}ݩso-^r95h1rѠX,z^׫bF2Hm$/i f o5?7HtV`x~`cV8Js}_k\L#y‹\þD֮a84 L І$ ( L@)L-L ߈Q]݈}],^|yo8ďP 8ٜqSRp&& k,S-Q YSTP]cΓi`H MC)ɹlPQ`JXT Pk3dUJa[GG?^dpXKVa-0BUE-kjf)h`4W}Gqq~|nA UL gL^g 귍+:]-XZPlnL ٬k3cuԜn >[/ZzJ֑6Nj ,*BͿPjc" LiwŻ^YcMkڱy|ۈѱrAd#B3G0D9鲯=5{A)XչbpMҖ )"OOj b{)+ReIU$DM `5BH''rhf mML}?j:%{ rSaC5 .+ fտ~tG E.4m\n:3B#O3m V]ID"۴m6c*\pyr{wϋ\b(q fRʊŢ_ވ(*b.ŢC*J_*D׉ =w)@s}~\ӗELO ;ϔ:4.~pbY kgҟ9@E\?<iF \JJy>8 ԗz):td459_™skr&&@9okb 즾%e(ruLLPX_{}}_1}*ϘIJE& lY|$eij6X1P" )A@ePFQ9SuF쩑`/#RS.QZ9Sv `Lf)͎*aM[YaYzm+tER ->Ԩ#Ԍs$17mch2IE%\ȤǍc:A J(\J"DK>HլFﺑ}{F=N dRtĈ{#HrD T HPpyTYPkD;)g]N{Ƿm; Gsj#Y \矍@X2N09q|:pnHs VP%/&r9p>Uq}g8I2FHI0z/Pp _XEz}{ڟ"3u%\Ϋ]]=4ZtLСwwjF4PTC!rvF{iN!·BDo] ;V+x}g}PBl/ t:{P7a,\:)Mnu'#rm< .wo*mtx*.jUv,&%#5 WjWֱ,7yQ Tj';;^xؘPʪ27#BJk-!CM69钬rnr΁QB- #M4,'4@=&I۪7=WPJ 9#ŷ;^p?*\O>T&Q*nU3]sai]1r[%,F԰,S;;i!\"EVi>fRl9x߳s/g˲(JMgcQ)r۽; 1%i:}nRpgֳ Kw S8Kf2/7i,̊|ǩ&[#@%w3ka6+9[@}/IzG@HGʮE]A6"זuR@°,˰ 葡 (v u1Fr뮻>mY_zS~m=ThhRԁa$ب߁\pucLv;҈_{ ˗[`_@k rt?B%j+^rtuy|G)P*Cf\lZ) 5Ջw_TO\ڏt=ij5ԀH {/E=~d>f%rw&/X, n-bYwdΞ;̠%:/苲>+%׮B,4aTP[ \5`VYh"_y&/_5ЯQ^יkFe*fءy' .U.S6; -JY1+ϊW^=>y[V(M2+Œ917}SnnrƳ3oR 3oQ¥RuykG歩#o!܂(ӥiCݴe@J@o$K^B>K_ )Ĭ̘")bQdLJB)v"ֱ{]ҶpD 5fO6dyVg}n)MVr;ܧ*ePQ|Q=0KpU^҆Q92Ys=6tILu%r8cYR ))R;1A,!A $$iF e8  Kȴ-4/lHG䩑6h<#` 6"C)(cO TK3R\n8%,@ fT-a'yI,P⁀A<>Row(k/;y>iҥK|kLd٦fXRinn. >R:99\.\_t>Rp8n.˂[@Q{B 7 Gm=v p(&ܒZVodCC|[ %5T6 Sy]wuo߾Ua }$_ 37=  dE_tm| BF&T9\˘=V>[xpC!tul۶~d:tq6V*]8| Wyvt1ܿA3mM[ E6 _v1&#ǽΞFَ~vHl۶#HbpBQÏ+\_0/7|u]g n?зއާ7m&vګJ|k Cl]o8j xx% L~~[v.8ڕW;BR09`Ǐ?j HH\,`h'9('G-z!8VRJ_ϑRѦ}EGz9ҫ"]qz"4 sXĿ4m\7bPi )paljg ji3mTO/psGPtaVFf܈D"aYONzT{ބGh-`ǒrlvG8k][4-47l—_664WQk}>MHgJ99>ըF3PeYRƘtcMȃ˼ æ (|B{il(q F_ssA`ZQɛhN ̋ld4OM1 ghf`@: Lt$beFaD-C<=IX99:L&c #c!c;ZrBw? v_|7/M6ηBEv~(Ne͏ߑL*8~"}.Xa~` dp\ab)L$l'nsfDrU+J^Ua~ZЏ. 7O[.LI='9Ww`Gl~?͈] I}TھjO1(P-X-ԿC4[睂Y,t-^}pN0WqTUmnu7׭qw*:SB¨f3@8~v0u'H߮X+:nDt1ͳZ)oD|ͳSw;_3Ϯy&(W.My^LUJv|XyeLsao32bTS*4Ek]^vyhZm!*j.WfxTp4.E3>دUsy31Y"՜B:s!J0R2u?!Dg9% O)_bfR(%X$=!4C,"Qb<;h@UH!J 6.so1O._7- =hunRa,L?!o5ST b gV @u27$BJ)9` ($(@] H Pna2m9jV" ParˆIAz TۏФydBT3kQW !9'DJ#kYI,'Hő2/R2BM r̩מ; # rΛ !^sO8x ?bŊ|>__fiR577J|>o2˅aM)ߞݶLjg?ݞc@8r5i^T|Q~>8{9!6? _^yJϻnw``S6K^z__HV1(w6K|9cccZ9bgX3~-2MyP@èOy`gh|iAy RZ[7Q2wX{n*h[}y3\$I+(/[Ta +kk h$#84۲& cu⡺1!hLs\P<ۚNoQBIr3].8R^q)`@"XY>q3+,?xK[}}2^i>e΃ÞTU*"Mβ5ku~ زٿj05'j(Ye2HnMJfmb(/ū3^"$U Gl[NcғLYްdyks,":<'葈m{{l`.4}lcG&qrj?Zk Ɇ'*-HGkzΖd*/rqJ@Y[4T䢨8g\VZC>HUZѡ/~=e7$p}.\1 `Zj,Z|mzgc1ZYazWW>',N7Չ8ZY9yf*lf>xQk)P)kF 16jM\ZÐ[)kY3bTq3jUE8 Zpy=GYu–3>J) cĐXCEBQĘP?&)2jB8BpbPCo D*Ӥ1!D'Rh40l)ӂ@Ia: S.Dq]~ewѓjiݺؕ &efCa r\h jRk""5R BfXĠD@rC2 I݄W3 &ҢB NxZJ^H 0[H%Qɩi[L.N!@.![d9S|ycF0'%Nd$KXU]%^4 G簅bdP E9[tUVRDYdITu_B/ XӥR jG\.a&@ 0==i>43U-FPiqT(nf̯5E`5邳ߚJ3ݳևE?Pyzbu[|4:<Ewm]0UǀJ&=^_efiYϵO;ygB@A2"(c,0&ˇBɎuCH{/HܷΝO=-[v6c2ݾ}O,u,O`}[Wȅ_E`~Jp33 _p}owM&o~>m۶Cړ΁jQ{7q_ ܻ{'{5;/!|yF#~ٕ>{\6I!$0޻y۶&Cn|lb1 F. 6ٳW5l0&/_PO)" %NlK(Y)aD9 y?Z!2hzveTom^Nk?XA;Ur HOI)7N~lT[҉YG~(ջ4k,*Տ @hުfSIq@@~)n`e4v#Tj uM\|@Iz[~}q=7~Mlh,8sԠ|3+n ޱg5*3$͌Qe#QGRzڃB&8&1j Ѹ!H4ko5XA;&&È46VV-^w5k̩ٻdzGc @Jo}@o83PP޼}VFbݷ1vֲzPX,:S9A(d{dQ~^bA"q+%2i7H(8i>))#+ {Bv9tR@Q_eS߶L*ѣ#ڦ|3"w_mn "X ilfgZMSfZMSn3.wEu[)6<=A5'k _-Qȕ1 uG@3)a՚U/hFU)A\>R(QN(y`j(ev=^)}ԧ;#1!8Ȣr8.ߊJmQ̭+xBFЪJh,{:>k{޵/uQ~@{+%TJۣ[>{M }/?_9t?>޽w- 5M uzv}~纇N{7O޲ep׃Gxoxdszx[_ѴmZ_W\ԏ]RJL$G(}Uͯ_">!FBw;!E|xy:1YNE@UtTn˧ qW0+Eg\{ Cߟ{g ,4eBʼnV<D.fnZofv>Zzl_A8-c2#th˹ʧ+H-wN_x[b^xWqMQ*0T.f.Koӯ]7ϟJz8Vv{ 81fN])sXj_d mT.(\B(-&FhC YI%SÔ{7n`{!=ݽQcMi`{.YϨ$%>ɤm!aMaLrQBTg=PGRq{+(1GEd*ΟZMBAr> ‚]DlexDU#Ѻ JS!- aePFW6[IAB ۑQx 6(9H)RRP bz[ (\t`#r{"N2GF$FQV@$FWZhe^̙Lum+n^)"!R6KoCil6-p8vljbʽYAYre>~D?cL#\xѣG-ZT.}>lPu}jjjffLOOF{nQIoS󊸟5Q[_dv@SeM,tEFGcɧ8iPup=_,SܘE_<߸g}lg5w0S.8¬,gEyQvLf海`6 7|RBYs9j==#nxs'O/8Cw }v%ox,7A܌1EuYGv7"kLR4Ѣ/Rj֑^J@3)|v*t<{4Yg??<5[QڣL歜8̑w{'_;u{NguIg|Ћ@G,ͤ8iH"ݶ֥^cSбvt[[bJh0e bx D X\6˹weӗg?hu(xuJcPzAW迨qΥ^P_',¼^&):NJT@4VA}^ߚ^4\gS*N^,Jho+YgHwEh7pO,td:1t,eg]R6v{7{^v]l" |5-TޞԮϧG;wf0=<ڽWDfdPh6df1撳 *g56.S G`&y*Jy cV(mi7TU\m^_,i$$':Q;p+?|/G(⬽Ƈ_VJ *_>/}eoSqN|e,4@ݏ޵P ƍ0C.b$-rQYVM|쀱O  fO(ϴr),Cȳ$J=4{z |nW%Sü>vfpQ_X z<Xv8q#j*zZ3/|goH87zmNÇx,qppߞ}Ol޴exxh9<ÑuqJ"Q=:rCɗdVĈr7m]5 )S.fQ(hd133ʼnK:)UGQG4Tfw=nnCfN!E%,3yKVh-U5P/L@$2 A$@ " :1 pCJ@P8Ӕa[6`Cr IJIM~j4%s OYAIw"Gӄs&  -A6#$3tWH!#GIom隚ΏOsƦ_Bjk^$،7bՕY08W0^s.ШO!l {;D,!$+34!\P;fMKU#l>.ꎸ|W嫏rmb_ھ}o)y9k@!딒BPL|q9 th1{8Zڲ i%Coy [Q%f_m[ =79b$Pܧk r0pѳշ߀oǓ9g-azWKu,Ձ sY`S:̘XETJ-yϊ1 1v{`z[/`C"9b09LO")#HOGTu5@m2I8xir=<վ7<-+#)`D ,ZTsV+Q_5$AH @2ɏճ*h.?,y, y>%kc]>C6`.chNk,DY>hX2QX}( x͈/Mw|}?wx@9ٱ*Bq8u~?OD"&##'WŞ_?[n é@y_Q?ڟl6{TŌS [HJmle,œn &ns_&{rV!!Ha䙡 AS72Z5jFBWBm§sࠝF-ԩKsw>@TPiP._#yƍjѐw)=Wq̻8%{o= cѾ@ΑGi;ETg6%9򃡌7>Եywb#cXl~{v'.`׻ɇUk{v=ѻkF5nyۿ5Wk;sqǽ'uKmKDėb,PvĬq9Yn h8awr0xܳ.2Z ߜ54?k"0]>aݳ7f϶eXӯ2r (/ZFO"J Zwr]kRG^5Z1J:L-YS\˅j]GHUMV82T 2`6prt dr.9~J}~`[(dӽ}f2gn!$G6~Dc3 [ҞR¤ҖD qMlv㥳X!>ޜ=|Ʌ*K bǁָޫ_3Guw {% RI(#11Ȏ6ڬ6ͪl_fדzLOu^vvWM6ݪ'U]U\Qf,ZeDKs{ug8 |p~R%D@K@ "@8Hp`BB,@Ւ, T#(:XDTHٔ$&=){lCjNs7G2 CD z61*e^9aYc06I pIͳ20;"<*^%@0;;j.]gZ158狋n2Msee%]{{{9焐JsOO͛7S4tg [z,A%f+κXMzfȲ5A-+n^Y0LlH^ƛǪ%IQ_nA 4C<ƝYƕ[^sxieHZ1ky !u&A V1HYʍNmɬr9W^%@hW^}9\)6(J'5_yC<,lFpi*H88CC;Jmd V2 U7BTOɓ?<=?v:p@6@շ#n9i W$kuBxDɔ%vܨ9rT q/0#N8^-92v'UHcPg\:v#GNLNcRڎ-*Q=pdz 8EȓH@B#*XH[I$Aj\u@T_()B\V HJ{[iN ;].Io9X:;̞A W\B3EG}bi 9trJ֕ל1`fYP, a([ = 3+m]8J˺SF6`vџ;Wt#Lׅk[VvhsΤDUm;Wg_؎c#XF,搱lvF{OudWo 7}[rZ/U;G?ev$yZ擱`edW*iTk^\ ~V[~19k;qMlw:qγV}a@%oVoTnX~llk7\>yFҞPte8v;W*WJyKd kpx,N|_yKùv#z⧴w/{`Jqc}~ᇮN17{muk_? c®aL#g/wzmRqRiedHᏏh{xP^R, j'kAK{UŸPM7 ;D)] +NZ9{V,n}kK]#Q˛}-R*f)G:5bwkY}z_vfx߂7voX,bV]C֭X^ĈS#hj&)A\|~rrRJ)mf.Q&% vh]8`;#_>أ;8ej:xdfbyxaI+9RHR PdV'bHWk5*t1M\8G@FNO<))kX%JPf`×-x̌u8r$ *$. @2 X[0H JA [,fN@HCewͥ]{][n_[l [~04KlOh28\. @aZ0pӓ/eVKu~#rbX,RJDZ,keeld2ꪔq}lJiixpzNtbҭV"xk˫]vb$\;/潑ibg) ( ,mٯ1467J {NWO.+HeP[_7R4 {@ok1фAFGzg˲TTXu#&0F 74BTZ3:$_R|bG(QW^7oZ(:^ຶBJfY|D v[VjN\ 0d1>}>-Vi`@aPH<==MJ"f;˜Cɀ I6qa۶$ܨzXsKUCkտ\UJxolR17`7ʓO?r#GI$22ŜO56pCŸm٢Te2ۨ,9GѪ9fi0M3*S Fmv+v3wN!pdOHiܖLY}(b0/dLw+, K#ˉ%ɺe}H37ˁ³c($S:9gi';f{؎~6;:"MU!6n^Pv #0e}bQRt]?j;rX ]C] Vi^Wbsǖ[U1:j-_Q\oBpgϾ~J0TE)WXAܫl;7~|KJ۞axϝ=~ -w_n~Asǟ8U ]!R,lS9Ngnf{t)C(A*A3}yM*k mU6Њ!ƛ݅e l=Lw{ }2bvb!E f?@jtүb$:l.vf{ލ vw\[ ^ǠuԮVhKpWC}umu,-u.VjBTBCoʆT&Ģh+12vKxWMB!f= %Gz SӯR5c{{ll|rG1A/NV*>8.%+QfnaRJC d[Tt)gQVŋVJvHYl۶._KCcR{)܏N|+X)gk&I|bGd'do_S۶qs$Teg3!|۶ɊW?=gQ_ WS `aac!%_d=fLɜ_Ǟ;r'<:9Կ}>=8d> {bnKmQc8oƭ-\vrv^5q#YҀNFC+^ Ĥt\.oGxu]^^@j5(3'Ut]W^كM͛-iĤI}Q4h4Yf:$W1O.!T[͕׮/gs}0N|Eن&])ǀ(ںb&D/_gEYԕW Ё U`M,m9J{zm7R̔Djm9ŴpZlR(~ $JJ}zKl^&׃3R:Oqՙn em aU9?>]xn{bxxXcdW.DຮL Qk4f|u!8~,ZR8?~w&m$Lgǯ/{3Kh?g 軳 I#y><a66,Y~"ҔtO)K ӌ% 4pmT:?}H,(gE\fԝ\uݲJm`smN>jk5ڛCΣhFiоi?66Vqllx(C t@R~6k0m81VFBZUs2E*uw꾾|\uƘ'`{_,ZELa x5sqnZǶn9!ڗ˥ҥ4:c#c:}♚T*ƣ/QDzPX4;j_n_}pi+jg|c82Xw&oQ4տD죑f2~Ʃ!Z Ѯ*;a-hA?{WH(H}/]_o\2_wگhQM_ Z9וyl.[VP ^̰Ja oIH[VL|vb6-\ #u +ju\zKZb]0@@Lb5YM諲]~?G&~N#VYpXRmޑm;t3W+Q,%Ĵ]抋6ǾV[Ъ R[ r)!f;Ο);Z>/lfs4'?hj -M^zk}aTdhW P.oБFCX]a7fsuαD=j5%-fD,K_rN*|09U6O8s)O>sa}sYm#'O^U|ę *T_TTߨ9#nl8qƔ>0?q gBxɮ*#}G>Ǧ'p"\D ,쿬#$`%b\ﬗ.tc!e)Q|cZqF#xc\*c5wҤ5ƨٞ:8[7t%qo(cri1y6ueyR)%K}@rU wBw3 44A5ϲ,hIKʹm,'2v vxu;M0 {MxM$|Y]MyD3jXpRV͢۴/{64Mxc(`ДuYu 8 5RYM5e|` 8l?//7@*kw^MNNGmzy:tLze:FҼ|.B)_VRn8?\_ARwfŸPàӾTPڏ@i240jԩqթr.187_?=$NLD<'/$ VMmOH2#p\ϴ);ڕZ6LIvsYOT5OIя] EjL7 8j+tFJ/Kѧsu'V3jd99O,<7O!xKmk~OdZ wث-+F XM:H|3M:7D 2VÃl( lq)"1Wf˷o૯h@9򽘑旔XX_4z4ts]Xb~hvfC P4hՕ}7 DwKtޭ~@wKk}*k g]1.$jTRByÒR$,}|O>53{A>虖(_h.#o\* 2:S#EsILBJ)ȏlޢ[\ײi^*$X./(\ $dpAAaR#H0 lKPyЄ# ?XTĚbWޡ P m6`bXҁ̵%+.gn<&=.D@RFt0 `dxN$DbΝkkkT*zTT*###F_R8Ҕ~vj5MR !zzzVVV rZ-416Ls״zzyֈi-Mx'qhfW\TfCcu}z-u;9mXC2ۗNOYgW%^jG< ZK-!tA AMiW= 7:Ǣ|Ѳ?s:HIͫ(D#Tx\ eP=lY}Ḕ8g3ԟ~K[\+Қ/S_|Ml#v #sZ9AH&L&p9/7 9'_?W yTR=8za=x!\J3ϼZ=yc~̷wdžؤ*t]AXW1Ōߵ{,2d&]8Ek I]o*Pel*vwVU_yZ>:m췿?|i׎i^ʓ-a2;B۵Rg.,Xe->U!ƨ 5L"Nhs$]3f[-.r50uKt'5Ff\ bsM"1HrnXFش[$b)m-kefcly\kDBƄ=p'v9-%ZT K`$Yj<@>caKe<uΙ6h6jgl>?39sMNR{?LMu}pP,-DwWkZWf*Aʼo!h2}8WV:h42!įl\+uȘ)p兑7ҼP}5\Q ES*`]FeRIiwy!BLvEuګR) an敹/53/Ds3\ wx3/(њv♚֭H@MjSSڳF2Oem;G?ϟx SA49SW R=˳:^P hמ; @`q&*A hec_oxhJYy=eAzt7@6uwB`2~ׂ.-uAH 02k˭]Y$k H~=[A/oT02P($z^],^2n2R'{5$t*1X<ѓ[Zf-2h֢9.8 @Mj;+\!\4M?c_@!%pNߖhQB3'>&E}j ) !$+P_v!-4#f2}o 0`@$6@Y,uK2>MNjZy&\.S)a䶷ʋJRQJ $LBQaT \i \"\i1p)]@0y $Z|1qIYEĒdFXtmS&\rې.K\+4 ?Pi,&! En9$jR)0rooaA)u]wppplllbb[r׮]s//J)nܸN[V<4mxx8LjX>߻w/6gdh![b55MMk5Ab_}ۛkhϒJjos;Yڲߍ,kz3n,lf_b%{`B %ZċVDj|߇ HA @ f벥 b{^s,6s8k^yh*L@Lj솓 N\_ᱱɓ'㯼2I=E}ӟW_8ڶt|sק?PTb#Gm'K{3,T*܁xg;?~ILzzqqñcuɒ}=2n0dngv'}O~B&*X_gg>N <>.<1Wv$lɣ%'޽S\gPewϣP.l.ȹ^ƕo)5~9Z-np^OwFwE)edToH n}@&, pU):-ze\'夤2bGJ|0DU}f*@AΓFNL1-ۧn2Tj1rCV&׏A`$Lƶ@wRb cDp, kGFkYM Т#y.wl7a^7v/:jKu=42P J=ݲrk (Z0]5kTWKJYu\[to']W> B0w%vQDjk6:qY [u]O(Mކ{2f*`MV3L.jr٭vsg}$*p/?}_olׄZenk|:@=(eP:P%.#KmSXua&pFѲ5?پu=My U޲_?;33z5iuk@O `mT2+2j4Ӈ8v[ڶfԸ`lPV.rU3Db$r{vf?|_NsI1JmsF\3GګX5w;+\VX6u(t%H\rnt-O؟''i/$s ! hR uM:W2TOK\Qm༸ulێ1y<2M ju^u[z%Un=Ж[<_B\wp<"3O֟[ YކKy@zуY%Fֈ@zk*%Fw%w ujWy;ߵ+<$#NPX77{꭮P4}öT:߽PXoiL o[$GݗAEhW-Ϊg6WۼN=48mޠ~IMbֲNА6?8l&i/K#F,>I{kbU4(,5DvixS^ /mni7Cx 3K5zew0 ¥GtsLp}IX)Q==>)HbFYa(E 1(EJsy쐊T#jZ mMm\PR3jx%$g˽qVs¦| w~ q; IO NS|~9](\'NbiuE҉+.mSX4s+x5ϫl*?#Ԑŷ ,-o^/gM$J3YF]7F)[=Rkm"艺,&F(༺2YxJ\q,k$X(׫@W*TWǒܼH$FR?b(I"aeynPu^Ui@+=Ȓp1RKxE(G=,n ԡ^MLN6[u-S֔\E3< l1ZEu)Ib:MzI2'H rF%Ek6Ǫhه倯jۇ,O z^b"nQ=Qڹ=oGj,\rxVu^ͦ48ASwGE 4&0ԕ6.,!iYwժ(7hL [@Yz"=֫m۸x(aGMȌm/4Z ElYeZ`i8C'Cɴ|I×ia$Ij>:L N X "zz EI?G+WX[f}8 b+8t{cH!ի` ]<AF9+\޻{=ްHQ]h.]V'rygF@$:Mf۽.Zש+ fN]^< R)gW'IeTl< ;q9sjuN)Uz(g^KY^Y>ҫ\Υ8\|"%PrBK՗\Ueq;]"wݭB`0(z]S>RD,$Z+$;ƪ}ow'(S'GPtdΏ#Uta!9!kk_0+1uKs@gk^=k%ӧ(t(O~էy}'6Ν;w,teȓWʥ? 5sAB܌Ƈ_ArzRXDAV|>@ ̓h7۝_((H~c *aY,s# v0 ]ܽs(*/ioD#jЫe$eT%N nn4hGNmceR$yt}XL$%'p6Ө49>Ot=3<ʊm9?g(gY酺ˉ#_|[j2x# n66i`IDATNBSB%;%N}* qy@!Erd IꄇDmGg唐:zH.Ew}߼u b~ʜ n6@ڑBAgJ!;]M/w:9?:?g@lx࿛Z"㪯DI!4BHI-TVWcWf1K&MCq\ޠS>+4toK;NFA&~%\=>i qL!oAka}2*MB,=iFWͲ`Ygwvz=Ǚʡ`C'H4Li>bC#۶ c(T>4MS[YncTdrۙVU?;NjyRL|$m-5=; 6Lx[}э]c};MZ=ZՇYEUJ emWqz.,j[Tȹst꽘a2u#4'U{u2*+<yOD'ΦSND!gb!CS_ڒ9/`'Kʮ( 3p9vv":QnH\>cf]jqX /*4>]4zEu-IN*þRa W[V*JݮSfd ?ۃ]Ev=uyw͞kH>Y;KKv~1DXs6왧`dgV)ehf84bJyti ?VӬn ו# 5Q&CEߘTKROX;~x?F:ިt.%tїD_cVXFy=RN"6Np22"};y=1}o˗E4`hہWJ\Sj“dRdj> Z ad t9?@@/fVE%&H,VUF xlSFh%JSPU7َFJ 5].\@IvGjtB6"&bfV6:.Z^R*."RVFNRJJNB26* ~FJ:~r"&*".2&:>2BF:vzr  vvjnrb"""VZN.2.262:::nn^&*&6:6^bR...BBB*.*>B>:>:FFFBFBJJF"NNNJNJ^^Z22&>>2fj^::.RRR.."&&&&& 66***"NRNBB6JJ>NNBZZV""FF:***RVR""vZ^Vbb^VVJ**&&&"222VZRNNF..*666JJBFF>bf^RRFBB:^^NRRJ ZZJ22*66.jnf^bZ>>:VVNnrfjj^::6FFBjjbzzznJJJ::2ZZRffVFJ>~~n^^^"&"bbR 662NNJff^bbZJNFRVJFJB>>6>B:vvr26...&ffb~~vRVN22.BB>rrf.2*BF>jnbnnfrrjrr^*.&^^R>>>rvnZZZrRRNVVR^^Vnnbvvn:>6ZZNjjf~~rbbVfjbnnj~bfZ6:2"bbbffZvrrb^bVznrj$tRNS@fbKGDH pHYs  @AtIME 6 IDATx4u&X-8ʱLC|E[X.Aatu 6Re=znJbNHG `jas6i(PŒw_k[4i5w}OX0׭u|Fe"Ѻx`Z^}@Z]3L]3ez_|٪mZ4Mm5g.o(uuz='Ł^$dNѶQž`̭gx?fVEYIW© ܑGo}~Qaێ\-;w<شvS8~lٻ\Ȣ'Z~߿,⃅nl`V!Mo޽?wg*{"߾I#6)6}Xɾ( $늼,ମx==aI,bX1ϋ廻m11w M%C qM>~7oO!Ұm^XSU#wHCl;.`oEW7{?XՓT60 MٴyZϮwj_NQp,,&;l_%[cvV@<Ѻ9wus5/g( =! }` /yxo8h/O| uwJF2;Mou]=D ވi# >9Be\aXEמ.l?9eV+";~[ mΞ-[=iź \l*4}ۓ(1"~f.%lpK̸ܙȄW0 ܆u—2gۻd4 CWu~;v#eGLm?a0|0d ȅZDž,@A !d)sRz:AǚẼ=VІ~{cly?N$F"lGEǥٌ`!,NG8f(M ?Nן]w6{(w1-^5)hR a +&ik46!uW)_FIJ<\h`IC\=CR$D\tw'blH8vd"^m0ԛdB'p₹M&M$ r[ ,T{{Xv9oWS^7e~ 4ҩ''O^qoGdjdӆ/ ^q?*83*9ܜ+ZmTla>H'kbylmuZ4u?'ȁo|Q?wTFN#$؏}绰@eA ų-;[VN>doEQ޸ %ȝOK[BYp-DYW$WueGڭֱ+)E⤂'Y)m. A\/3/! L]Q%AFSyYFD*zAVg?vawY|UmM_/TVfx2ev~ R&s 3 l p0zdP!h g4`u`1Hgu.Ҵ-IlI"aT6HiFlq}481N~2dєA]SFaK*֝ AF1ru"/ :a›{AdOU$QFAΰ7Ofy0ASҡE`Cf5J߈J04*74]e$EfY ?j'P; Ob;4q4/^ St9\g RiNHT# TN[6iE;{+$ye漏D%:Kr#̩<¬~ 4;FDdBcwl ˶7]CD mZa_CEr=MDJ%얩X6~Ҫ{Clu>GV*gpk75*$˶;5iBq@*y^oٛJ:x!0׽yʚKWܬ`$q5^USYoQkM @[/u^h` ʉ,L0 Ydwg y HB Wy?@\*JyCMR37n{ҋԷjQ3(V܇ZڂXye8Ss(qcG@KldNz@+>m$M*Dj "y(&ylRA[ḩ*Um4\*]%z""wppH;Ʒ༗c!mPQ$Mν!oQtMGLurV+;y_N8ԅDO 2@Ԛi۶J*4ަT*UTEoCAF<)@_Jpxvy(*m9w~3*V ~in ,H@!W6jzx\#6D]k8_,V Y1H0fK5D8O73S 2<:>v[$DJzdžKհ2* Fk7e0?Jn~W#x164㙨,ƮԚ>+Nǧꯔ;츉} >0`6P3Чr4f7y$C6dC;ڀ^ X,68o@L/ @6Kڝ, ՆH9!IAňO! j*W{:Q7a P:$h3 ZxS ̲S@bǨP$Ý(  vRBJ QNGm:z:P1O fa"B@ &$ژ"87$ēgK=9ApS6< DV@> F \`Vש&&{m*$0 w Bg &v4k]K-D+}I}h.>,S1`K3)542SHrDtpuU-jmi))QoA3Mp GY[>UCZ~8lEPѵs"9^䰑dn}O/O-#?o-}13@ߢ j_>m !`5H7C6aX:C,c m%/'NmւJb{eƋND'92t;>G{bB^{0G0z|hf|T@n!T99U|-V}-UjDƛן <޺9b.E/p[[~:#? H'RJO[[lrwc%(o\Fs=+;kFHiFߥ0:(( Cʼ8\O7b!4O?K *s>xKzL[ȣOm,Crb;?G9Ժ%iUt\E$ GCDLL#Kջ%xylN@N f-\ ZA6;F46S{> 6׽@%Wܺ]̆)PHI[Z>yzդʼ! )h?+ˮ.68Oh[TT7.ٜOoภHvJ(>X,p:b(,ILXɀVbu`OA"`|K` V /IגjZ ܪMX+|dMQn9T z') *B8UK6Jg<3>gh0bFWg))* J & Æ`4 B0kJFؖJU^ J ɷ/"/_I'TxQ#} x;#VdK(U:X!+ɧb!nƢ]{ 2>Iʄ6r7طI|n$r=zh|kjPfwu@4U87I*ebGE6_>\rPEYv#-?OK/ܾ$DϜzM>A}BTY݀?x:oKnM# Ym%AtReY\Ϡg._yxxaσuӡNtĠ=,h3S!uP9 Av$yGE{ζLbh^m\NY$[34\{QaP; ͌l|éoX##q@f_,2VmlsOśFM"e/oGF):1 EMՋ=)jRT{Wh:iDvnGQ }q ЍEBݢ Ww #y} Dn:0 W뷽/Sr[]D%'Ńp7,' k&>hvr_ژ 4|NKdPi lO{`ܭ|e1 MbϽ 3ANn ndPvvMn#)Xxćji- $n")xj6W_?'j51}M%Ob*9T<8 p v 19C_ U!+\\Б͡)}/Ȃx)ppb9,H?_J }V-e;ݏnT( xvMQư$ѧoּw|"ikX{ ` w*!$TO R_ &܈Y]2Fz;N?Z{BI):C M/\aqmj8؁A# :1 ݄BbT^ ~AҮ=ĭ]o2}R^da/5vֵOZiKT'+ܪiĶ<,9#p˚kvtrZh_=yt|~rF UH:9Mui+ר32Lj;$_5nS>%4>~;o6)Du?&T!nUTM/2KERQ;->P˭Re;GaF9|O2O]v,,<{zޞlt- jf*e>ALIr;JK(EP  ro ?0.ߞb[GyrW]I-*?j^UMŃs s'A#3P1jn IDATO"@O0&k&pJWQ'zU9HLv.bF~叆rk:qe5;c@najCjW4v7ˆ0!|"oay"x\/J_gRjbF&{OgoY_,t52h&F8J\&_d ^G>n*g+peA㞜|~@|\#_rIֵNm'|~)=F7dݠ]WDh\'MuI#}! 81-թ ý|CZAT䢮 .S5=p=o|3*MSQf@Io iqY%aTՐ2# '"Q?xm_N= eAFq8f5bo¨M^Nڤ(?}*A}%H)a*O=8=A",2_.4B@A15GW26'ؔ8IO?QFpb'Iw{%g^v(̵a 1E[Oh]RB6KKBKDtWf?St@U~N$,"ѩxA0H]Lm޽ N}*m Q B=][O݂*Sߘu|[ - 9X=8U&:c~<_}Z5;U rSXaC )%<|rFt/(oe\W HcބWq["k]km@I 0(PpsF.%%Yie]/azx`CMoHWG3xG{P{4B߀8 vkbZUl;$ǚgaݰ%@iz?Qx* 90:wx4-HZw>8 ,x VSFdLW| M$bXWlD"yl껡Ӂb-wyLل pʩưuҐ-gTNz4ͱ9Tst#Ms y2 Odrp4-Msb#T5bTtH ]rh먆AF:krL=, NnE6S"S΀FۍaT:Kjd BIfg ={ ?FCqTZx;[W{ UZY8" u:[LKJ679TuY\#iL{M%f;mZnz' XD֧ vFEayP "^ W  &q H'*IדFku-੦1Mj+N_W, ^n5/r5t"n;2U=7tq>(Z崣.0\ٍQinj锟` ˦ݟnN]p cI?QH&IIh SЀ NhjQ?&BR=$r8FbSaֿe'/os;MH 1H0Y뎻(ܸI]Ju6bIqqK|^H!z .P VP*.9s6 KXbj@Ym3:ȲP$IM*Ɍ~d(D۲J*x.Lٽs tT[WXaG28݈Ft6Iyw!3,O`-O.fJq20c øeSZ i\¡jԺ ]Fj^Mߘ~5ṗuIZ:RD%kC"`JS.MwO矄G&ZdY#Z\_Fs2@?:.QS,h{)NS6X4a o2Go%ʘ-Myޜ?ݻQ]!(yuELɷ] bK`%;H%M\ haڀ;АZ4קQޭ#KLM6u xod~ ._KbzoSe)x.}a15s~b=eUTژmGhSk1tC/$ϿjLR0w+#4*?8t(P_SYC0۞ Y#B2 /:lO7JY䳻߿n/ hmwr',*.3R,@"dtllmȸ@Y&}VZ\CיcjB gRӑOv°3W*QDI._m%-q?Xq# r5MlZ444~/+|ir#IlDda9jJL*W5&CQ-iWIP;cO&0ѿ+$;u4Υz\) ΆDq) 7 ]o4H#]$7h,#vGq\t~S, k$1vwk|zk1&u,(ٽ;6c^eOW˄aMRY)\]j,j1\tSPRa Tgk[4abCw|)D!)' Z\na07f3. ,[triZlFtAN v}Fϭ/2_Cxχ4TݵJVlj#˜&өGSFyAΤ}3 N$nѴ~x=F> KX;J'߶v%Le.ҀF[̰->kJ4AKvҢ@z^S{jE\SCA EV"hD|΅($ޣ߅mUzzj(:p4m' I:.-ô/Y6.LT=T(QFnʕ>;^rճ!lNӌ)2.y{ţvXc0*lu{F=MYє<W[>_zm,K[bNJ'7rOc#ͧ:?~tyY&'{tv=B b&s:O%]꫆U]zD[>d꣘* q+JFj2-OeF'ŅNL@εD!S :M%ͺw>hd+sPIEHjeS-]^w QŧUjy\.;[Gi4փm8=p]tEg!8.G4oeN5b]o߂yFjhƆM@a 0&llhXaBgW>{>߮ޥ9_@O]KxRϖWAƮl䧤̏ς(ֺAFTUჄ+ uiakZÚ/tЦO\Q=(詮9ڎ%^GId ;DYY[sP x?бAxNysmϪl,f_2$>[VPLӆ jgйMp| %.ѕ7Uw1Tq<{K鍋;hieBQiI [hyIۛT4\HҨCR)TҨ4v2 SU1癪,tO-ƍ oiޓNg~7?$Ga,WǽyH\b<$pHxAϐ壋Z895Q4%~U-sF]klK/iRZ C^ǾRE%̨4kGްUʧSgXݸ0ۖkz_|.}v\ },@C^txmԚR'hyT^ONo\aFL!t Dtdx֑ڣuJ^2K $*bl|/xM<08où ^/.\C0q vG #IU3Sn ۘ :/D:qؽS4vRfБ'ƙY&#MŖYSA~]|Hd=RWt5@~_p,[Y:FKTsh.x>!!z.k%z `l4ͺh*I. #`Co(v~vYH,gCLW#A޶@h]fӃJs9In٤zǀ >m!v"~A55%ϩ*[*d3EsVdg??[eQ~i]_]X!QA7\-:`kȾx;9EC&l贃Z?{zz'Gh7wݛ` jߴ`]y!U#<{d~/,{r AX+و? ^;^]"' CbF#RJu麰:ȣsy[+:,HE9򗺗|XokQ>y8Ӊ/Fji_EͲ{O?;l>Mj<t -6WL,}03xIg'y:Z ,qz9UmBT}a!菏tף"NȈ# 5L҂[:#zt](cYeR%9mN\}P|M l;j@QktOCIN`L zIXghE(Z{vP44Y~̰_~ZSe8N.8ʼnoVlW`i:Wb:|T sunl:T@w>OOWaL0뛪IrS P"20̝M.scdv<+5Ee03r@~\ұŘ. Z,y~gtዡ5Yp5_a+tI$ ]E_q3/ *M|R}럂yGB%-Yt$!9uuܜet]jgŔWA^,aNUg; [7`\QM ˻G܅c*VW Esap?hۯ;J{]-ΐR6ـ*&N43yh` nMWߝ_讦Jtx@a@Fn~t|VFzԻgNmͫ69hUph<r`dG~f΢0@#'ךf=4IIԢϤЩV":Of\gE`*shG@nddA*4$0~б}CaHdҡ! IDATBb.Ķ*ƄGm^iCje?,8YЀ)V #IW[ ]p5H gWO4c*>QGxQ3:ȼ;aIw"^SP]p34jn6IFacWdPqq4Tܱh`͌^Qw@tjcA~_KDw٤Ac thOkMւ弬٦>M}@ɧOcMk砫|oKLiJؤ;2&;dlzjM}` .0#!]@BaD32x뚮T%p5NB5 GaL B55}4 ( &3b_I7 eoƒm'"9p4; dh"}),*WP2iNBuQohce7AO?H/T6xژcي~ NqVof2 a6-J/ Z܃|wIB  ؇NoG=𥚏CX`H^hT/vv!+M!m$hmn68Q/=PIɒq1\*eJ^Cf7 _v0MZOY\-qHb4hxZWE,2jB5Y?{ғ6T> ~"KeXea5OF*9MxckH]s:m&-kXEW\N5n}FIq#tiF'NQ_rv_:x֨#4 㵧 h"" :K>]Zm0|쵵O4Rjhڈ}g *f`r`RѠxut+ _\0ƾESDM%W}uBipjdt8zo 4(z W6&cWw.?>i7F* 8q]>;ݧ {∃nz6wՁx|SDXӅ`ɣǏ |RUq:˝+91GğU嫫$]o]sn姥FW*Htj%p@A$B:s6;x߾(ۢ;#tMgE{;g}ճ/Q . eś *]@_Cz^;>zfj6Cԋߔ_olm") awMҚRrBxIw8& ?irMkkkz9zø64 n#TQ$+"aJ҃Fz@1~ՠPon#xYмxe~<շTl)ӵ?lIa!igؚ߽":U~N'JA^dvۦ4BP}g$?hHCbOA36Π7{YyHTru u 49 h y{.#rʱ(b=&Ҙn;鸳|uTgLG5&=dx@hnH+&MN5VU$d}Іa^Q3:8sBgnr?}*KEj^ wݑ8t^OFuKi6S5.p4_SꔏDRIA 1W,t(fPsjuc{5xrOB/>E."U< 89l\gϗ˟ӵ5rnv\鄝ՕbwhD~J'6`x99%HF;R]@F.Qr/LVtGSoGj,(GHKd;&youV#rjƃagxmeg%8ۖ3-tHT U!b 2Pi( ZZJ*Y3h23~9sڭd{{w/P>}j5?*%ԭIMqyqAZX,?PR G>Aowzztu6V+|z20hW`spo ل.[J*F CяE\HDx/}y#8Me|@e}lC>Ӏ@֡]!5nk8[Y}Gb(DvD~5MG+ORF#$#x'8PγG>W)9Xn<(AM7nfϬ^^OE4.#@eW蚧YB{x- =;]<=O(oj37LT1BQ<#r⵵xFUh+Rܿ8,OkVwl &xݴƻ  oP [x2EտT Q*ֵuV`HZ+]K].IP0rf{֌5gg8"N<9:;i5ՠwL `zTfOc b>ka+HrY?ړMlIalUM* Z {6KEJVQsFg]KK>c݆X7g1/ |Ki|>se NwW<.[4ʎB0ߠdki۪/Bogz;I1Y$ڼ8.VW 09O҇ͱc2c zVP,~Њ e2s"`ʺ>qz*FwGg>N"Ic5),T>A4;h eF7_kj0yg='. [}ZuHU;1a>׍c-Y c"KŗM/fϝn&`Khr,Xr-FA" W}&NF2VWNg{u͘2-ŷEvoGB#׾=\ "F6'Di%+ϭ)hSGs}p jx|u͘P]|륛6GѴ+2uv+36N"~$HB2iCK[휛HtnET3RFTi~fFlJRKօ"kJ!#T 3LP\":'3'(H pjhʢ|Nu4Jz1 ̋ QI'.Qjq꽅_h̵A) jPиCmȲxKh]!:Uc@{nU40l%X?7m4$Ʈ!TBR^-K>NCrI3Ckjɭ-!JĜPAe;ue)Jr0teW>HpP8%%U8r߆LZUy!AJ̧_l+4t>U{2n-kRz^vEC<|B!DGAPZA݅h?4h 9`rU(M>՜"NZJ8 ('.t,Y,<3*߄vDNQADՉ`ut;bؖADecwrB !8S,^9Y?_[&rDD]WR,!odG)Dɔ>YK\K d z~8=f;zΛmga׳m>%{uKYc3٠X:(Aj6(BL2mdUXC4LQ x -B ]uҸO"* VV؃J=ia XC0GdU&EG䥨 #2E^OQ &PnkT@ ?8޷&f{}1^ݨ{@\pĆ_,R*wg L3.G Jl"}"(4:AE[M*P+:m(> "8KiմCdsQhv1.ŽE,@6|݁,tp0 -k5>OɁiKbPvEfCg(DIl%Xrwp{@e) c &D? f2߻vny:0Zvy.$]uOabJ(._idFɋ'Wl+ZG_}eI]JBqR(1 VN\́"a#ʒ]Dp\.z༿psoOIX^Vέly Ю3}Rゖ9 {ELO2li!e5vK4P3gz.]U?;W|+* M_ *X%a@5u|:[Ԕ@tӅ nKqhRy2{ ]&tLOc+)rK??O)}H4TM;88p"[Z9/`S(|iT9_Z,7zP^,HǙ2WF n0lXI1wjO4opWj۝cxI zEU4[S%)Z8^y=-Bq:iQm\Z`d)@#w9i \m'hx_4M/@lkʝÕ^пn-K^w]nMd/ HTDf_y79K:2n<;(OBzn*5hӻs+X*GPp}(EA)~*.;J]͹%.77'ŏU]2D9IHt?J|xoplYή SGONV'Fx776Ұt8S7 ׼-΂t!UV5?>C7N[[p8N ؀⟔I2~z]N$q~}!W+vOXX (`Gf(t^#Z@nҲ[MS۴O>7!@}Mܢ @ip-8<@XX;cmza;ک*j ޼gQ\eCޥ/SJV۫''J  P괇ӫ;}W_}~l#r iYڀKgF 눶ut /5Ql#rt}\!ۄeƞo@\2/c`u= 0MךMJhO19M;oÿ&kv=R'~믮6S+KA шL@v꭯~}uٍⶳ%TS5H ?&s2n6 -%)K@3KLe @M}8!/"ܐ).TK>3+ ȭhIBT9s!u0ԂJ_СC<xNtF`R?X;Vrڵ}ջw8=_Li}ϩxju=%-70|6-hۄ`cRn\oq`rDDA:ȝ=Ct} yؿYW!0:,ܱg9cw'&lT%9e4dsxn(W-3i/yB`wU՟zrFp[ OmɊ筹@W k!Y0"!$7 /}! m47eՂ9kS4̢ t}f^-ht |jvECۜ9dmK_k*Fܿ"dTKxt[o(ߞON*BZ-(D7pi=ajka=To +cIQFАwTCE0OM/r`p)m`@5W,]f\K4~eic= 5*b*}vAϫ(Twծ_:Unt+n B&eٳZrbc>#&MONO2ށKz`Q64~ӵ\( T9:RNP=Pnoi FSa E@xMNJG;4R'){l8.}sߒ)R>Ht}3`T vH~p)YM*cRiEL[\kJ0Y&*Ҽw# '*ڣ}6 kjxf:$(̱06ta :hR ] ARɮkԽH Uߛ: u[i@EXZp* t\z=Q%bEήޘ:(4$d 4iǐhj%vO~qHȇK  "&E 7ma^<; jR>;~\`,{n6ά3:t/iDItQ3nlSU-)_m^c]CWZ4xF.MK~I.U/޸5m"Q;KR å$:5k+j6}<؜su9>(&{ {WBKN ] pid=f<̙MiF.;'eSFQ7WwU @I)AmSe}჌qPqM4.,!ҠM;dD;Gs{-2$ = ?ΧX ,$mQ):v:̙Ư~8Mp2hT1I4b\NE|tp/u^s>w6*k}JGU?l;N#_Lt(~dk|3k#z t/W+^ͦ, ŧ8+R!˴  ` sNJ]QU\9'Kl.)ۋEDrxg1/PF53@(Jd-9H j1„@mTzt0k2 T:6;^Wp$$=NRWwV4>:] WW>-@b`&ܮ!miSdٖoo=vO+hFYf]R0SKaØ ȧ0/( zvB1Ph. yVp(bä⴫!5{XکgͿ3C.h, <7^\߀I263<`fX& c9 CthS_07s&BRU͹?)fʖdF#HZ~`w* ~iWqLKX7\}@!I -" p}l^g mpw%p3 Z7%TW㳛p߀eq\_+lՔbP2Z"dsSsc+2 uC/ N2D"onsý#'2rcנE ki;޾@[-uENZ9FT:BiRח|^EMYuzN/xB`K)e_d |h۠-AUM`@+GS$̙I2q \{}+RWD,sa+h{&Qk?0r*IP?*> @\uo|w.4:Q>0ڢ|ͭ=)%VžWNYU0:-`bAX)8  (\,\eK'KvjY)|hp%¼A#V IT ɍ\vԍAbz73Ü\e_C뜧Yp; V|)q-*J}]Y/F["{ՅcjM[4"pi\5;nq$4#qD[vE-ԙ"S ahR; dū\tmњUe4@Ȑ]Qk.NeZ1 -Sn l *’kA@Q4]' BsJM.nJ b13 BFVթku4`|mFMA+:u߱-Ѧ*)=~K!B cz{CBBIE |Qx @ΖAS).rY w6cL[|=/NC3dcP>xq)MQRhiiiha$q2h S,,+B}x[>m0򿻮b"x#%M8'C itm%ݎ֚M}tЧ!RFH6nꗚzI9{h?M3l1ms #B= 0sgfFM8bj̧㈐Rta ,lөJk"G0 719CZ#R;6F4[-F~k^>&b (;|<\{] d}Z@>ć܆jJ^n5a PW&)?S8B |q|MwAs@IrQ[7-(WeϲpbR<1wLZN+'Ъ^C]s?>^<a=Z}ItH˾.I#Zh0I#_U!T $A8h +5ȢO2@QJpBwEX^8i*գݟ@$v1nn9 wwkf~'G'd\$/(ܘKxC[E/ZpT_ _j%u|B]DzC.\h6/>%.li£z˵A 4lRSBI"ɯ'^[MPE]Ȇ"If:J$8Zb%U)zVzF LenL Do 3tbe@;f+425߀HԨhHq B zR[0thf a[n̈́Y2R{fK.|d zg/<.ic~=RI\"}ދԍ݈Q"?.m', 40Eވ\ rTfUe2 ̷`?hBgD}RMo4 Qj >v!d?|_TRJ&Ze[dDScC&3\n1~H*ϔ߬\' E}G3>-0qU2/FB2YDIHgli-Hg"rĕlU x9-n[)ZR3#mz~ w_hҊ{HkP.TQx 5;g8@ >EO= Ef֜>= "΀[^WўZPW;\dF8wp+ 4>t)G y#ghtNCڧX!b!-:gL`ۗQQL!@Ku〇{&z曡ɝ y)L?6&&&B~o"CYMniGmRBQ&tGPŒZA {[>7:4 Px=Am>E ݹkg,(٧B)&x ݪ 2MK|^vm le3\LA蠔BYt7m{[[׿w&];?ptM}r;TA0!bԈ@F}^^5;JbEx'/26rQҥ OxMJ2w U}l W6}4 _G mCQydl߇M**pri hpgwO}Zh]_4Ԣ:U4;(K4hwF]({$hЇWu׽HO Ғۃ$2I5  s]fBG'IP~aAbZM\!I{摃|T@_AKy^ru} Lr6va4L$ I'YExIB|_/tm^'قƭaރ(I9LFo/p2:ӱޤUVfEpe~ uhh#E.윖lHx6@dHՖo9-4s\@N<75(hpC| 4{;Q)vKaĞǖ>8"g' S쨷1OJRCЕ[3?2Y|fE7bFx 1>ʐ'qmwG pw),Aom2;ȡ]٭WٺY\ [nJ;y禅3g:b T(`;xn'J<\ֹNX3hK%:-Y^WWy\7fd}k17԰,V _䦩> ?2-_p0]qgիf&I0U :Ah݄@oO(BM-25Q-EAS亮u߮!GW)`abC[X飅jlyvk.o͜ hm_ߑf F[~s$*\юۍ`9Le _@uŹEv96}Iv/ j=ݜ1>.x5Oo}eM~=׀2<}Nb2-@hxW>:h~bIˇ*z Z='"•xMx$ vz\2<_^L>ͽuƥ\/K|[QP˃2k~ a,MVJ24 ؔt^*ᎱϾƽ%KpA.7[JF7H齓qH1|>0g< wFu"4RŽEz+VW\9b[?_sMvJfa<=^ÍMn=ӐBw<5 #LG2@cw{=84WoR7$'TQ9Qlmc+MUpc fVݮ?()AH VTTxhE΃^:8bGx1ϾW'.iCIt#h7IJV\JvZ*H-'n#هo{LIiP$GGZڀHC3)ee)20Zɪ׃KihZ@ "9☎lBB"N]Σ`fmT0Ɠf?ۛ:vM&KU[N=dz4[{A[.FөMTj'ٷ#k^]6;v`[ }X ̓l3jj#;&'g$O8 5لpY&O@QsZR9ktC\攎Ͳ@2`Y|=7ZE,A ӿW3k ; Zox^/ 4bx^#b$[fB ]LyMo'`t:cB\,$xʈ Jypۼ$MLrmÃsp6Z'x@5QȅPkS0 8Q^+v+Qe goORlW;_F|A{YfFM@EtMXiN*"n-\gv-u01 t쁵BscםMLIRS 'ŕy%^UFk05_{焊ո3*@`wOdB1ڸw_}R<܌"Z>T>3wvݢ̭ Ƚh+@ P@&I8Uh tG|&L>хMobbew |K>0kIQ6%;&q-EZbFzfI{[D襾6t* S 0h83L=BL). Q[s#*)|4^+$?>>:HmYR4*_}/, j#69H+u +fpXE͸UEi0eXF%ј&S,.ن.pWHE[GgSϜԽk/um΋k)y`5"$MBt 0zsi#AFT~b@mt{Iߢ\-d;FbW`k_´򸘕\E0ԔCBȳZ_^Z}%NY.%QϋC[SZ/:ý j[9"p6 /dg{$[NgP`.5@N)`ip9`AX_MQ:ކV2Lʣ(uBӚ8uC4kŤk>8/_Q5iyF&&Q^}3A-+ 6jKA/& ^^e5Q(tx-ȵd{WFY{? K\kf~በI]"`!̿+ߤ;Eᗲh5!g &- 4AG7-uwo: +r? !k6{^÷0"؍w(1REz (\ CcuC*^섆1@'ky%# d!Sv&tMZi:'Quq'`[7i-\p&S~7"]*ަ <ҽ+"q=gy=y]i%ALN($l`x \~ߝyY즠~#"a" &vkU)}Bm(V 0?h 4=[?ZtP{=!i3GB $Sm9эe+}!Kpa(4㛮~l1P'0yw?'"8pq+Z9i&k۪0e'iB5M| #\$Ȝo^ѿm+om'Op1<փbg믫A6ƱRI>MZ66oFWaX38yx)KLT0y' NL3 (&m6bݛ,D/fqB<գSF<}K;;ZgT(_GOИB >h\8ƅR>-D]_hܧ ued u~)H:k~h܌#LԢ%o׼I/ͻbЀPR{U M۫,g*q>KZ iͨAgwmxRIW?,7 ]>R׿ҵ ' tsuxQ=J1 wF=&!Л1'H~ԃVDmkLӡ"x6y ЦIfiX, \k\e٘pdFb:ĠPj)0>iqθbϬDQe^v̨hܺ]_> _Eprwȣ-hˠ(w WpBTL#F-7`:Vp!:DnX0Wͭq} s ](|:*É7Ky |ɂ  Ț5s"-3=>yzM P:\>TݹZ5*%_<Q3 EGӍ~VfX0~4ߞ&,VheNgs> 4@\W[woMNbgW!: tУjvZ15lDTNO$@P I'܃wc5殳CRD|H 10p@0߁1HK@6ŅdyFjAVa s#3M㣣mX^JɴS:Kmym5Bi= t-(L0J$(!Pȓc笅Ͻۧ7> G~JtE5@ C{ۢL"T0޼-/bRt|xok 7e4m TgggqW7:@yյe~HvH'Cݿjd $L]0ݡEl^=ޥ`,qb9@SJ}81ϣ? @oBt58K]X\~/oG:Lءc,/a7ZI_Z_Č)/P!֣y>7/)n~* mlċFvcP\d̏o!ņbʦoMcJnQ =Jke b\GL j^-3#O=::0}RBQQSE2 A/q@/ojhݴ;J=IBt6%Q-´Ѽ2>=dhMf4d|cFk`I.ܫLE<T~/}@ȍ8(h98.q]=\Z^>⼀z[#eq 2ĨxOv<{+QӻW2rƻ~8;==sM%\{PKe{;9:{8t}Ȅ7Ѻ?4pJ/ Ԕ S4ZI'{"Wnsqy!;yƩ_0r`',xK1&R% i*>-t F^^Z( 9dm1]ZGߜHBWBťֺh ,j7!Tb6;lzpRBX>`čjxw m*\T\ˢ 4liz>cʊ(B 5 =5]ޖG .ķ%d~'Qj_>ϋ| zKAy.ofNUt  &qa~byݑ9Hc!- OTX/it6*.鉛}Nq\^_<{HF] 8FP1~u th~u.rF>fр1zEiSM]U\2!t5r֪] UV}1ufT8DLR~K2/thRAV5+sPpg hak #))|0t+VVfރڜ&w wg(ק`t.0HWs ~VohI-G)l3*ܼgHĦVνBg1N->ssSmO5f*j1'ٰ*0PcָYyݘ{!\Ǐ2,o#>s0()JSJDHv慌Z#"*p 7W…,}z+CN0cMo0F-~?E +A.$ڴPtLs[^R͖TiUqhtz tL5#MR,@d&+Uٳ%D^i^q3Y33Ώlg4R?h~x)ul`B % 0..ؽFdt۟p^fYE#qWSw2 JR01W{uy W'0ܓ7B&UWä4LHbDй($, )49F-!RA3‹ͦJd>cSZYܸb< 膀 bt.&ƨ^0Ph&y\o}E^FLyݨvqc ya uT5Nr[6r^c*܊J9Њfӣ3hO ]  .Y@Ē( ?h:{H\k*ofgqԹ-)֡t:% oKWtZ֓l Dp $l-]e U}@Pxؓ4tƍ".'\إU)UJaoE*^eY/&tR+ӓW#)ö M@(̀t.eT0s!j GRȦ3h#fi1$X׿k,N_<-JOkC (+ fbrՈǿg%Bĩ-SuFi&;w|n:AoP%VqZOol:軘e+fkoh|m|*BMeC/cbQ~1}Hۈp ;wM^/qw+X X*Z,nZvEZ\+FI(;f<::'EzP)$*/uDCD4dA Wi;Gw&*QY(ar=ܡ|j>,F#)_GK| !pGKڷ9WK #0t:C01$ ^U?Aeʃr˚;/2ԋ{ޔ冨7&-K^W OQC.Lo:FJ}B2B!†Y*IӻN7*ԤYZy8 q2\e<%Cڱk76!:qv  c1p @x@ H WNڶ2m .;>Чx[cRsxJEZeb~Eyد2MaYGV)SRp&dio0 Y e 8髂U2x}:K?WaB) |hO߄>Sfvfps0tgŎK{kkkP:ロ䤪zsZp Uo)_)״狖9ӣBQ~ġrZPy:KgOs'~(PjLRCJkns>4X!}nԼ #S.e QF0[BBH9-c͛nFYܜA̹ϡ1p*{~1=N[Z&-5NO$$4تXY)Dԩ9u3(KSI[ AhWc*snVaq8^ Z#~J!!t^\q֗в*#p@7kHQai8)a.QW*%, p0my? Йo ?7FmRM]ߏVzE"싁M i3R0lL,JÎ1GVIJ С1Wa&!렅(QMb;W }f{9wP#`RD;X)[w%P(wt=Z"ͲE,[ ?6% 0[)|"oA8  &8aRg to! SETbVncO(c:pX faˢ|P)wO1_WxFWoÓ_pU&UoM ^ewI\1bYTlGmT"sKnca5jIU0CkMHcw"Sʨ$luΞd3\.s'haA ,@]EOm?am/ IT0(\nd[Bc)IxK۷ ҇ORjY(H5`:2[1sST0XCtD4&Qo~A8 ZdzKzZ̭b ZSSv:`8%da,1CQ-ǗXON+_8 ;׿*\Y #2lCLy1>mFƇМo4$geeb~ª*()lf+} G @H80h`r oCo4.dYG,IqsW~1d6 -Fox(aiAE!\~7ڎ m}8uQѬߛX@FTo:*}-(Qu)L})o-)%=Cap1%)C]KWUj)Xȶ+7ec~l+|ȿ86JhQ)#i"8:pTzN:㠎殾jci|Cn\YAz:\yaA -møz| >ş֕N<9_LoE׭vv F @ L7 BF(10bnRV X;#v- 7aaWt} -lۭWlk5.Cr8oIhhD7|WxrrIgf) šC?8b_=YOF'`~AH@? ]Z"Cҩ`O@nYfc$sXlz%-6L(vl9 0W؍QX xYp])M|lqZ|% I3i3]SoK:kkˉ_9 B 0q^=Xܥl哽e\?{b .,"/*uG%xWG%3i[ IʴM\ Ll *NpC3cR hD8=|f6XftHӆC{3FiTMl[%jϯ>QvHckkwǐ6L?~djYdJ]yu| }{vɸ"ӗ)!Nft^w o=Ȑ 4z@7H)GPQHē^vꈢ $~o`2qÉpL~Rѝ[_͸bi@2kqNV_a ?8kCVw=j tu_..14੿AG ١-)#B>`E73 5,NIZ膗B5:IpNNXd*Qz]ۦ h=7 5= BЋ%18 J^{ &ptu|| !՝bm5Ƈ$a}v:PĴ] #v+?:z{tL_߾E|۫hnx}+ܖ&@lԒWa^M@b%[ja(_7I)aS\3'p@lw(_v rIk$b}9AIW#T]R:_}r5 RtkƐ~ h\}l/CXt/6M\ޢZl u&~؈M, l{rN[+Y¸꿦]/P4,O]'851n$ 'n@;x-wF8KK(9Z:GD^v  29J6櫠J R,g&,/hX&+ft q:hYNT{,H0_Č}5\V%Wm4PnǫI'RCկS?B d?^7ׄ qS]LvGLPleSbh0(6G 決~abvh9!6DMmaWb2FN::N07!OGNOѺR M `e|5[.sI}FAf6|IW^iͫ.vFݟQ0jM^v! %ɍv:{)%”lY:Y'+6o*./kpU|:MN~J|;1L HyMzmTnй"G{qnPPݠ+kq%8}Ma(CRUb$jR?Ea$nn9Ǧ;AǦhP-' ļ6oWOb؇`q%JHB*=>坶QE(V[ΆL\/))`їJ W@tx[҇.뫰̣kDXMwebl sP-K+cpq>)`}Tgw ,edxKj'ݲ_E9YS: @)X e)RfYw7i߀Zb݆.̙ ?J1̙5Bv"+a4u[z1,2\JTA1}tGodB(5 !ڲ]9wД0;w0i&kӑ܇s }G:1o@s%SP:kܑ8VǗ]wԪgFtWř^hwJŨ4 `cDvN 멫<8V[EՁ<3JHR:Wk;>JjHÏ!d1DԼ'F˄9P&LF)+U¶ZXcڙ\4)=Y.^ӖJegT( 6\vG§j=o\*nUuK3ǯRDFѥxI& t \ t[VH~_a+BOmAaw"MjYV'71;V,:VePXvʨX,\eK['׻)QgPØ*[Nu=^h~ Fz%-/C-]8qWAH8&?`I᮵47{ө $4'0 kb pLAhxl?} #$0:a/2'4i>pLVg+;*_4QV1x0ς)~3asS^0JFl `DݨꣷkDz8vV^0f(; f }RHf|<2GPp8fnnHd(P89Wv!\]C$D%ewӯ5̈ _sB%y *9\,)f?i3M諗31xo?o(rBCۊ/ke>e d /Co$y>8Vۡr8CCcP ^`!L}(fc(9QUF!8G IC %ꗋ+5!*->l;M_Zjxuy΍h]dzb9HaazDs ՛B5?Y~1.~D);U%f(aam6 }: ,hV4Q|P=rWՀѷɤQ^:,?T-^&2pAO/eR&\ܒBC^JV PNx`۱m=_V"lPpF#IN[RWjP:ɳ {hiHVF} e8 2ʐҡXDc̸b|:kdFU8qy)e0TWju.u>S ѿrwZ3Lz`Qwxީa2 mzjo8fc^ϨPAN؍9vKݠo)0A4a!S(n]/3n߈3; VHq݁BTOЦшq?Bbjj@:jT>}J֨tj#J]z;`lq,ZV!<_Ux3(G=pr챚U YyAI\3[Ntxr5f™l?8|Yv.4"~ N 4֨oӀL.Ze\Ez*P4 6kzﯖ]: ](u8ht7ÈSvV}3'R&@=\T$١X$o.=EF7|[Vgὣ?9{N,b\_'_*#$IENDB`lbreakout2-2.6.5/client/gfx/back3.png0000664000175000017500000015171112140767213014265 00000000000000PNG  IHDRkXTgAMA aPLTERzR6f>"vN2rJ.fB&fJZ2bJzB&b:^BnF*~Z>rB"r>n:R6j2zJ*n>R2vF&f2j:N2N.V:vB"R* rB*^6j:vZj:~N.n>&~J*^* vF.rVzJ2Z:R2b:&f2nRrB&b:"j:"~N2n>n>"V6b2nB.f>*fB*f>&Z>^>vF*V.zF.R6Z:~N6vB*^:fJrF&bBf6zJ.^6rF.b:^.n:"j>f6b.V>R:jNvJ6^6~J2rJ2jB&r>"nB"~R>R6bFf:bBV&vN6Z>j>^.r>&j>"N6Z* b2^FzR:ZBf6zB*R:n:vJ*j>&N"jB*vB&nB*V>f:"^>j6^.jNbJnB&zF&V:Z2~F*j6ZBZ*jJb6vJ2V>R&b.V:~R2ZB^FzN.~V>~J.V.Z&b6V*fNN2rF*zN6^FZ.b.nR~V:nF.bJ^2Z*f:fFn6zF*^*^Bf2~R:^Fb6vF2b2Z.jNfNV& ^*zN2rR^2R"jR^Br:v>"fNbJZ>vJ.zbR&jRjRnVV*rB.~R6z^n>*zJ6f6R>ZF^2Z>V*f:&Z.r:V>nRZ& j>*R& j:&rF2j6rZbNN6nVrZzF2~N:bFf6"VBbFr>*^BbNb6V&V* R"fJrVzbRetRNS@fbKGDH pHYs  @AtIME-b IDATx}9+{k3S-fnM::s7-cܾido [MP~ 0:ucV'u%d#RRWB9KYWrc[J!_pְ`~}z44./-x G;7>޽z8g&$[@’O_ޚP7.TaAG #%Ep]su{~sx8rï;R7.UBqcLZ[H4eiT̬NC?#"޷AÝ+y?ڏ.|g?br=TDz$41{B=7zpUbTIDf'wW霖>wH ^ Ɵ~eɢ ֖$T2VᓨH7vQ;\-wM߼>S#VD*%CP#RIK.&X0bצָط֣iqpϘSpwүN|滽8z#o"??]ҷiނwRsf=_>fS!,׮m,]}l{)w kc/tN˗X^Z(Ow[y"&sݾ;FQ/~ {sD* GCQve ;#Q Ǫ?Bw>~L V$&t[ßň{_Eu~̷~>}awQw|I!yN]hkޛFJjX VdvoY{'/׍?/}iސ^(7Ͳ M.$}hgwаw?PdƟBA5Ԋ,DX+XQ`ߙR#җy=Ŏ++?~D? _x: ~GOW 㯋/w߹)^?bѥYD]<S,>ַ.'/?jar]\K+ }PӀ]DdZ6[%BZj<;U 4{`)6"c=\ܩ4s>ы~uA/|_]~tOn/\\jm\x .v!53.kzGv6*'ݍm$l$IhƓ?e77_^I ^i! )eH%{F˻ys aæ ` qnYEZbIHyö=6%6N븅:5K։R RPT9HyzT.~>E=~ߺ؟H[}Z%߽XQ48i?zz~:fM Rxj2Nݗ8쯰]+k5Lۦʱ9Ըn酚 ˺:?fxtCT }+Qf*">( j[%6LV1j1Xz*w׻W?y7ͫ^~kq]|ozY<_zQ5{1->*S.4hc['7I"ڣ8kT@^iPjAB ?F> :&[Hga\(J/baÁ$@n4ֶ|qox>ԡh2!qQ.7? y';'p&s2[_7F77kըZ}!nsԃ{TGm4:K_MM9ȳ n;A2UJQ>ꨅG5p804qaߚI\3]LPfBɯ}~(a^ |(ӽޅ;2/sըqNfʿՅo~~s/V<޼v* "5b ֐wf$$JB+XNm:a֛P Bp#1hB1 _.+WYIƍw[ :L4 `7dC-պ,'֏NzX^[^ ͝m02yo|UpU8}q7x ^j'cnἜRABL;q+"njxd*~ ۂUe0X-NѽeQ,_-`)kek Z bo2 5t 25;@~Z=_R/⎴?<>_ZՃjs{aOňs#2Qg~YknR@8MB0Inc ]KJĵV̡~5DtЈPQpAaS+tŽTx:-K+EƊ6X~ `*RC`2d*n/"qa~c|uؿ;9.bgG KOЌ _'Z;.5N 8f|OufK4OMw[c%Lg d;04;Fe+P(h8֊+Ab8U+Zy-q siJmx`pwoAtKn'X4}BX;m!)Il'cnBuiJq;)bHAB$BҔ@̴r,'?Uf,Pk^?DQ9ղ/`8>ƭjok4QP{{Ճ~] &ʅuՋ w~3#Ni|!wn1̇ڤNS %M GlEisw4\dh'Bغ-V2Frȕ[efVCtOn!a9*8.8>P4JA4iy/3F՝{WGs?7zO^./=l'z{f.>.D; 4x4ǐ|Wz>Q &jq$`6V8P5̜\f$hقz)Ċ؁ @bۻ]]Uk2Mt?_ %v64#*<5Dxo*aN ͱsDWVb<]-b|4]%=: ?\|G"hG PF#tnP{?%i;>2sR@jm=2M{Z_t P;R qJ"2.^vwKc -00 Y.<@pX .%‘fUVr纭"wCsiKkb>wER7MMxҩܥт~ݯ<TEBT k7h3VS*ۖmk F`ro4*_N揟< ޢM\*J& d{ğ"7W-ZH$ _Mz Ю"hӌ,"U驪BPGJut 08uW;4TW]T_pwWrsY`_`y݇vɔuw=$@w$B !TDD|H4#F(j+:(>"PZLV؉n ^ziu`IjW"٦vP{"cL&>Sh Q>?n<u^M〬 I dF7="p<{7n\n Pׁ{i 'G?]泗ܟ=H4GA!l2yNi,:4#A#{h <؎p $ YߚNVNyai:ԤJe/C~lkܔDjBfwc>CϡY%vflaOs0'.'1#fS}NEh-&L-U_0*kJ4!xvZ?n}3(4`/`Nذg-.5N[IhMErbuuy-:2E}3{)WׂcyhFQPQ^"HQq"4zz珻=jA9G!wgͣzkW%B-u  #ND̠КE"s<{fW#w&OADZ*,Fqő /m rvU2;gTE&@\ < Dfwb'Eg[%e R2({穝aV1nr#`kR 6)&LQX׬֎Y쨼BS& |h>?rSJ4JyOo"s!FFj.>:MI)xMs~669&@ȱUX#uu-FsG7ۋs(+a}_8C3%1sv}p<#E.iU& 4TȎH+ l36MǑ$E_ޖy|[P8 iQZzKҸX7VR)]Y@Zp 1A\lQMV͊1=&Be,j-2YM0wH|7gp2?cY_MEhZ;lGJ/⚠a୘ ],ZPHPJr4B+lzDB!6Ih vp J# ]:N*{ˌ(%#jBb ;4Mg㹃a?ZU~a0;^@&zP՞ 5MX("ڂ <;EM! HsYJSaרS6P+&ȺR׊132oJOhv7%kP:xϘT:[Yr&0}X N?KVp D!hAU=фVܞ/ީ٢,hUPo@)̋7AE[7ksϿ;HK#' d}0HX:;xum =-Ow:ݱ^4EIJ2#gV,*ZA#N и@cV`^Oh kb6Ēet^.8@Jݼ9X@LջH Dqu&@ @utxq YVـ"а"bRۃ,~$2PcP6UxGd +bԀ&|(1iLg@p ;2lYclym7 ҎTJWQ*ɲLɘɐ)n 9jvmLjxP}D'p;{#ꏼo`pT3_*|j @$ K+ M1j1ǚђ!p@0=ȃirkVR Ýfv%S$ d| 3Y6<{z=(;Ab7J}`B:qk(*Tl$& IDAThqnoC{VR=0K" 2G7ozW{6ii&7xOu~Lw&₡ IinrQ;0^-v)N9 cK7:ƢStSL$'Z |csR@,F+6F"fYX/cIvq6 HH,!X2C׭hn]Xf #"7i(_Y;Pxvxv"3e+:J%`!k}E] - (&J\6fkz (IilˉL1ؖ_P̝C"Z9I9,(į=|`vjfP yVIXQf',gD!#a0!^r;:,`-Mt>FN9"<2ܜǀQ80iBEϿpVsZpgqs`JV idhҸⴃ\`V,- #"g 8necH7X!͡qP\j@ftC##W`e 8eӿґ]ZMv#g6P\o |2ف_8BFMx.0-) te]ͳc ]aDggĨe5?'Pd"=fSb6M% >qi[M-F +~"rŘUqwOJk'U  *WӤ hBb֑)-"4{<&/ D #>Q}]%rݜл{!_)׈\v f@`H"` p3Y;NŘL >Vھ. `Z*|Akf3 1iGA߳EJI+AK[$vᐠĊ"r 8?}NW,;/j`W ]&{H? =qS?_)xQ^Z?|w~k <}#pJHGRs`F&^è-$ohTE"Xi%"Am[qvI cAJ嫍1jLk=,g1;0[a囝kmY+r_bAoQrEKU1#Pߞ1,F '`vJG~5Z|{hD?ܜ]u)E0QAQZ!1$6ZԆ,Lkn) X;˓k[cJB0RK j&kKץfm1 ; ASI>3CaLB u@Md^-,z5JKϷ`6 ) i7tg!2/WMnLSM+BD9ɺ1-_AN7U 8sNav8InEYV=x33J5wj-&)TvT~`z4!N`AYk$}Cyv% lcTl4 *b(9Ǎ'`: HkeyE-䳻mEȚ0>z^+"} AZ='kWɽ[è{59F\CXxF9|A&m'F:JTْ]Pƥq`E°fTJK,dV АaPjm'i> 4Wan%w#1I#yf;B7?T* Cf=kLJ;Qky^o(SGnkS',kwON(:-"('4:jbԼj}aH4E,[tmʰ1kڱlA1t1$-<(q+OwԪS>\"qX`H :CIZt4d|ve|8(^od[S }nu5z ןy~ nDƛUyCG?nK=_ E PPۃYS=$v{9gw.f.t="Vv  C/ [Su +EmN41PٙCA*T] ã{r@gj Ćt%~>p&M_fx{ A b cS"SŅνm2:9ANK2xyJETm `Bt/;;U>8- B,RQs;̶sC24Jci+(AZ^+ 4S.sU ;(#1ke㥗KۀF6?nO,>; "N ;O^z TZ윑q8;s m7goޞzW]{*fvi3IZT,óLH9-ε^Opp(zy9hrUIW(mbhqv(dyn>ݤiФ],JDA= Ad ȊV0Z!*&; +LmCVB|r\dE`*} j4ч #)|h9@M^,<r$`Lin}3DU7Wx1-/[m  Ol#<-@Cs-r%h{h ߍ:, >I)X7zypy0=pJliRXC Y̊VeH[,MqiwcٱD"?tClH66"8Vbf Ɛ J/fof{^4D^>Ч<lzym2ѴOTrsP}Wm6kz5K. i.N^7dܥrg5ZǦIj>L8.4 jAK[|Tj*JD]=pDf]I ǰ-߇\ 58ȗii흚jGTo[<.#!T1"W2!\SVyք؍ Q!!ʮȊ!}Ȃ:V]Njb$m d.KTS45k-X7XXmmn%+vRt81.dCFFqmStB"8"RjǮ|kW|2߷ի066]ykmܬ4,X _{z[>q>|ctTY*Y5hviHda`ͺfזH|ޤtC@Rvacq PNRP*mBa(ʖeXlf-'` Jviv7A終d-\%}qFi? VVWH_;\๨6W'2:A Щ5Ȩd]7 >!ݺ=3Rh$T)cMtsI7MdKzyڝN;A{ոHnbsd{.'*P*َo[V4fZN A/8Fve 뾶[g`P U۪7$ZjN 1]!&*ť[c i DzoVrTbXެ6{\Yܸ#=?MA9޽͈gjDᐦ@HPb`".z#WA)@Ah߽33<4=dڐ# 4\&O~ Pnj!Lmvyp8fˁReFeMNXk_(=b-bx @m<59it2; Z\F3M35}rC挶,HGb#Ĭ Pхك焬4W -`UE"SJlkŢ·DVh`ox) [ÎJ6,R6y*Jc`ލ$zLb9)o |84ON{r+ִco-섽<졯4TRNsiQþg.6ѡk/E(]N &1E$H*tTY7N\iBPt){d6l#5ۉHe0@5~av_/HӴ(UHI~ )(埏U!D)@\rմ6oZNFTZ@Z(݃ 1aPtm8꜡c4d8p i" a%"98 >Z`h7Mewtы,:k{ QDvo`#pb&7W[\E ! *ƨ햘e|Ύn>i=Ϣ 5=Șŵ崉uʋ~vybPqvsEqDAv} m94!3SUq2 Biyp(]g|5ggFE&Te!8³ U55y9Eŝn!P1yߌh>VYwqg$Wzi55tf*lysǛeՈ]Z<4X+3.v#HI0"()N85IHA{je(fxsE$*LPmht)UoI]HIȍt"_$nkJ@pf^&Xg4#]JY)OW+O&֓_Y'@dss$󛛑PW/޻|~JI.mr*j{{Ѐ..aa0T~zQvD6=~H F.|>͖;HOPF\#cJ4b T]ͩBb#_k葯k\=]#xfs^|ײSwc*-Nml!$ғOݫ ql\ /Byye Z vIP(mKސcTp"#$~Bv&h#D9dx@Xu*)^$qnĪFULAבW՘i?j!zQa7tr{u?ޣy }9x{o;羱Yڽ||@CYHv!i"|%0rp*M@ٚM'k NV{m#oL!E֬dZ P'!zB$Z=e]'O*iю @4mr1oy-T FZf;fC'6Kgxꩧ^3#D04w/?q0ycD4ݕ!.AD[Q:Gf. }( IњR?Lpn xdL xv#sZD!*t&>8JWwIgG9zN\"G^yӪ*ѕgH f5£םΣkK׊x{SE&HWWK;!T.+=S<}TȥLÀ剜<!- gYAڑ Tq$Pu6FjKkd jҪ<ď{lbEf [L@hvACno+, !x&HչPE=op6DO:ފۅƷ h8]Sc5EWRžx1kdڗ, }Yc(R}omo|yC5fS*t]E̟4%AT2X3rˢMȢ0Ñ-[\.FVYJ, $GkT3N l~sf"RBC};ܩ^+ f&l*6#ZLV]z}I {̣/m[+PW4Q}>stW>xy5o߾| "3րU*: hz6hv>"C5LS"]-ֳ-qrvh0lmW/h~zSEvJ#7v^(Wl{źgOv>˖>ؓ׮w Fo1[axq]ilS:N[́`Ǧy,uM%TpU H%5+0FlԂ@-(Z^4$-+p2DսIQON;wqBgvO<>%{+'WV<7VOua>⨤#$2~>%R$B{qJDQzB($1?שV1+ gF8 'T_%6* -g[5bf|\B5ןx4=wN ؽ^AƈȫE$.:Ot_x>|1:}s4i)`k[gXIm򧷷o}4mUWSB0ց\h4PX/*kGh;_%xr'WVO<dN|-# XWW}ok AhسC =Jq(jǬ jU=aў^2'AB;=W) 9!s2EXχ݋^ڕy&x<)Eް!4)4t/F?>t9=q:łЃq5aR7a=e5tA兩P'5)iB@$7E*Ȟ鱲Af(WYK9T5vRARӐVSJ)YlBt,3k(b{kM,DOΨK2٥aK[n{(ʍEk,$A̛ЉD?bgYouA(o [oO|'_?t pO Gv6K=ZCx$#)yXt Y'G8V%0y=*0p AB,9W14z=elW]fl-\ D_ ~u|hǁ{+D*!?$`m'|{FCGcOwjB1U`Ђg=͗WDdTOno)ܫlqB= &)4bGӰ<2 噐/3xÀ'hwl r(cyxuMs9‚:mP5)4 !۫ \:Hߴ8Ϩh,Im\h0qpPm*[wVgy3ݝO<Տ r{9Ǐ >)D,?թS}qyɶ&r %rJPq/mzIQa”Y bєJX}'l,,ciJc&: d2;SD͢8VAK䏉)!]{3}PP3 -d_"I)ӮVAbt tA>t7xد-MʩI@nomd{!a5O;y'}=z^MDth V {"so(}Mk1/q۳DoHְ]5 l*&P pѯⴣ,CC֒ XV4OUQ֮{u۾6%kH7;WT_Qtw(bǃ $X5{}6j ΁ο:>OO;İ%x{y оr)򣂎1@- nqX_dxs*Ix]ƪ8a1^5-b4`{jYd-'!8 s\n ΰ9:53d)5iqXIMO GӪn?ĂRtźW.=A$IF)pBCi{=q"86|ilx1ЀsV/Nw@C<e9Qw 5e#sxG"*Htxx_Pa||G#ȉUǼP8k~/: Cb17<J8^ +pqZL.>LGhأӱch'ʚ"X;{FV9ex+'µ4Y{%K ;̧&7R8K{ lQ'x+T-Yauzg812qC˲'ii- X"@ ,AS!wR,c#[O-N@ +GvRuP!B`tsm(l)Rm+<_eR@LJ"!_XT0J[sw@ÃDd,@9!% kiUfyZHyg{v浍cB#'eY;֡DB)>,, ث4ߧ3X Pw&b"iД4 IICb)UeR4 j(5G`;9%ɡ !BVASjĨ'>G `WPBR$+C%`gI$RH0‰ Ç+\x{Yb#$F,1Z$!ߧ< ^R5VC\qi8}VǢ"tjȚ*1OL5 :̪rZ{ci",&Uw d1ZlP/(3q\,$ƲX"/0S>CoYF0=ErJ8zN|ri9t;N}!)xn2 %}.ˏ3lTnR䴐47<-W}HZ[U5J@ *k&O P-stIXٶV+ $TxJłUHl|=:DDJ;jwӐ7=dK8ngiH- fv8dbKۦ H*9R Ԙ{ڕ ˋAM$|tV,2! j (V5A30!}'@4ڋ42QfC@*(]5l3%s' r6fU)A,0.N>Wr7%|dcZTGuվn8S]XZ?8;|-4#` AiD9ckkKTKUMsNd& $ t6,"4\o]  cv@0IaE;E)NdM>ؗ*)a,Գ8hI U eZ,%<*+ꘑW<23e"^,%L X_#3CDTh1t=}/1\顦F,$6`3&ʲONe5kN<> T ֓GC3ťPXX"&mm٦[6#RĊ )'wf{^!%WU FF|~nׇPJBY mtW+ +L,U^Nj<t^!s+oHcarJY#P5fѷ)@W?_{TH\glEFtI!mYVT橵Ec^ydo>3J%>` ЄY[ZP"BY(Ñd6>H4n8zeg$\6nv?te6d,JP B.ɋ݋4a|4*/A.<yZZ\NnS:Bi?8PR>otz$^X8^dD1qf.fv  y݃4 iI4Ey 8Gr^<П:rٙpo433Y4\W~DAg=L; q@E19j'*.^Q(kL{z/&,"YzFkOh_mzpVsN/?eqVK$"j)۰HozfE`~O]LU J9еMӜ\!~_rl*?%GK!#\sR@+|d|T*g`i@! + \*8ZEЖϯ2Kז.'emy +@֞aYT9ې/`1+&^8GVy-s@ﱢai b׏TPTdz֨' KSټi2,͜?*R@='ƱQ[ԨZӱ@O$e9;da =%Edge=r N~88y+DVm-ّu)1߂%*w Ə[$7 15K0A=CgOjԖk4k%H`J#@\dR8 e'✧y9It8L D"BtP"ҹ%hT^h15Pi˪Y>As&+gl`J1? =g͐٨/b TYD(z*@NF4m* -A I^,6Pt Ԋ?94 EK3.EӍ&!gapKdv˱nLHb|`tV=He5?ݖck׮]`ThQc@R{#}o)S~UeM3Ǒb[q~j2 $cf}ۦQ$K3-edP !J'I15PS4tE&U- K/5}e~0+AMWF99)Idr'Ed=9|vOD<")]),oK)#Q ;O ݃-;'Ţ+*ʁzw+clyRZ y [D* >I*55T=?9@-s1(o; Cx_Ex6gT5|+EN|8rp8rA*6< r>(o\`U]}*/hO>n)0T48 KoQwꛛ|~>)C^! >qE3 @K% H,A:Qg 1Nu䩶!,兾g.+Ue 66˵rMYF-htg^b[UVz6p18|xVg:_,/ix-j#."oz_N:& ϓ))2,`/=wMups[Kc'g}H .'ʠS{=5=DB  :yTw(v;y2ϪʳPhveitziڗh.wˋm~Y/L8k.o?ԙ,dTw7EynJ/κYLS4q6yȴ\5ݝ'<̡]mfe6 ݉uL`Fȴ.f܉6;8ĚᅕѨ[t@ՇOӘyXwzIՖSՉQE9܀UN/BUT9UMє2XNWIZA02k~f3Sᵔc?7f\;H)Nwhq3]H5Y$*WVEpnrD~^s30k3l+:LZ|cY M^QKlxړO\9{_-HQGcQ (F IDAT) 1k1?5 ,X @i c UV>Tߩs;5.ԽϝR>oV?cϾfbm]p**/ *!nc2$6JN@TZbNI&wzV}3s7;zt9/]E=ngO5AK>Hr8ۋαQ=ځ_4Guyyu[| T^ @ji!JgG}vG\͸w,w)Ͽ2}ʾAm\Ko *g^ yuĔܧ)#wT 9N,K72U1 b7\ҙ{Ak|aͅ eWm`O|?y}>*bao; k?9r$9}nDMnbqδ^O&5Չ05y(qr ɤ>$j6,2Ikd[ojynʙKpϟ\/@@= 3eݪ_[@Kɚ(he%ukV b1 M%&rRΛw;+\VSjjn6EÒ!K'e)tHcX4cGd+x+a?{thIQ oZ|Ċ2};PΜrcΘȸAN?ñOrr~3Ȫc njUŽciYY:_sכ_y꫿}}n?\k&sjkzQhxCoixu@V>vF;ɇoG?;|1|1wM\z "+6H{9U)N=QG|=FӓA'F"1~5(t r"rYWOxp5?KQ#"MƐhխO诟_ŧ_~Ƨy ˛_ߵ}O}%Ռ_|j2>C~gS@_zGkk/]ݱ˟)#J,}ǞBRO_vbH,9&w56Q[X +O %,ssǭz݉f妭KI 塑dSe-͟h'jx4Ŏ&y;d4ǻw?w^~ ?7V7Ny\٧~H־{Z9./ ;$OFTՖS#x]Ǝ᳍e`HGYpljUTybXGSk ׇRhr7wqf^_q;Ω5ǛSe!"8+bjiFn:~v[۲K_,^ްҷsm E=HN۩ɇ:AP9}oZ^\ǟ$nlAo׫k@."b@5F5Gȵr/c?r}mjT "D !~c= $Ƣ\D8~-/Oih0 b]o 7w?mխr?rW[K>uƍS_j .oE LO X oICj.fUZҥuxc rDo?}xQ}G#Xv25/+z J.%ߜ(mXKĕnޯ)yq231'gJ1+KI%F1auF!DL36/hJ?|J%|%.vwA/;??]O6[7w3+BhgIT09o]E5sgc_?Dlc&||i4,/}ą~HI4N𰊒m,M{h& j֥C, L@q 0IJDAGijDߐ2%V:iT2yMmMX2/^z/Q&RŰ_f~s^l2Gm~5Ղ6D Ԁckm~z2(3ƌj+'~dj^84۽GPza[7}aYf5I=-u:ݨHI_Y %X3`sE-Tt\>`r~nqk.w'[񁭿0IrL\'QZ@3/7Q=ɂO;t:䓏FN%L .4kuWXZ9Fo4[ @p=Qnk힝{}rƮ,5'Ba*NAq|7aL(WiJ &A^7o _kuk"znzn>p;~TښO7j3 kD71wB6Gt2fF(t&;AF+#KQSEѳD%X{!d"U>en tvX[m?1vLa{AP̙QP6|ªSr̡zgd:P=il%p ;{}^f/,dW@U*5a_$zJaDTVPFy=*t:1 $nk:qwY5b֛gZ@Q_ʛ?MNs_|ͭ^0Ի?{7ﶚM2CosۚWn2o}\{}X3[3^ݼOk_l x#RH-' 4##}XYLM$#t^%SJ'b+mױUgÊ o(Fuglىo;Q!YL'515{MecRx@3 "|/|*@bݓ._~}˴&Zb?_!fj6u%rƷza9+ǍX3~x] 3_D;7Z[k3R@ʲoE:$UҠ!x\PC&.zs>!Bh :"NҖC_O ZNnh3=:Iv4=,FKGL* C f%ရ \ q]-G& oʸ) kw߹7[no[9^|wz쌪'[AEOSv]1QN׼04):P˙,bE ?b+y&(ЍZ)0ߏXBggT -Y3r\L@bN1 uxpIG7k_߱ 5ywB>eM3f_! JEčK&3-s_>Gaόk^`&W%hupc1Aj7@*,N $Y7Kg=ֻDVPe-!8-dTc%6l4k'ue 4fMS_)|{fN S,?~ԩܛz.ȣ{S'idLk|nΛ{ 7ګȫׯZ]ZI.W߳9T,&lVZBhRbzQTü`;2rCVռi[ c"1YE":4%%E;JN!D(F5*E vetI\tӮF'el9s{k^ W#(<1b;Ya $֠`pKu3JOݴih Qws;5~g GPI*1Vڈ-H)PL=M+vd T̴C>TY f9&[jUiXTE>u N 6Zw,m-ߐڒ?< fMW*=mճu큢WZ)|fZ+lzlsv6\oI"qղDq,|cSXVkI!jk;Is@DJSGib'b45vԴk/B 4v zע11[uH Ա/| ȰwƋnoIgibTF'/շ0S?~foݻ~͎kn_ossͲ[8`~_M5O!VCb{su|{^%wXa&ؖ-_(1,{őa5xpJbI=P$1"|a51vxFєUJJ'J <(Sc.Y'Z+e| Hy z`7 &k= ,x"?\}u5 &5/а3lSE$֬='B`QaJ\+@ iƙ!yz5&4Y1VP,eaU-]@(ę;r-)QڕM"{7)k sK刚!Ķ*{]װXT-b{6h,joY3_* ozgWǫ}=^}{](.HR5,Xzȭ\P;A8G2F,c8E6k*DBMjKֶЧ]6J6|G{3=Vϸ;S awԦww|0@n6`%x> fLo)(21h;‰ܸW8QR+(@˘γ*儺t$6vdFv~g^ 9թґ lrF:-ln90Q(&0yiJ?ǹ.b??~7ݟ}p}Cq'o(?CЁD]DjL#86'w[Z gYuQ?=#_ų_Nwv9?9,_I7@}N @ &$wzHYn?8xe[ ;H<05z $խeX88aǪy k/>1{9J|`칞AiPIЄ PIHx?2X9m)yNAG·y?Qs/kayorE"@~>k5_c&5Ab_,F !:չI)Ռf XBD,ќoŝ?hJ\iKX6)=P> IDAT/ (O2+(@Y%). ['Dϸg$sbϽIݝ*GQw et~7u'!d |~68  [[u/w"ӥÈz2`wC*߈4͕NSc$Yi0P@:|( D 3]Sq>pZzԒA՝P !(!H8hL!΋il^@c ՌLe+O-V{#uQUXHpV'a|/츌<6=d퓵0425@]ce:YEL[D$4#C܏4k`V ҩ1OavIm}8&p!h_ S7).A W;4yDiY7fȩN% JbP>.P-bC~aW4g"4:7?&CnO1Qque#=[D\ҁW,MR|A1<C%xb[XK-Ȋ;t$( h!wHiO+ 퉞S«O4N-O\LH#G}J8dPB&oJ H4;B KIZkYg33@YlL4̓?A]wxҝkx MCf3ԏs$шhɹߢF<$)^[x"bc LV[(~W$&v13QHdDp, K ! W-q(b ٱ3FٙWus4}w6}ftA$rGڀ :p(:f7cubF`"!H@K:yPf9a8îIxzIbCgL{U~ygҎLDG H*ؕ8.0n8I auq8JZrb@Wq0Sy%IK-hBż9|t4*ƵN\JQ}A7 .7gˤOEMK`qB/޴15GɘhRZwTx_bYY) ^GDv@%/(=brbͳbV,/I~eMHERHUC üx(2URZ:cL8Xv?,GtD5#ӱ)e L!Po~ǢaOed$Gd8iK}L$Z6!ayYjykkt1=U 3/MVEJD lii}:ѣw@$YeS]-(;qŗV7Ǣo9M xH(X]J-Þi zd~;Zslc} ~0o"KUE(Ԟ{z~w-&Khx*/2 iu!aEΈ*H|ͭU-Te ؾ _/O'FI< P݀A'6iLX40V]%P]$fάjZRC0F^ fU蒰ͼt8&ePc3hX1APSjFq~uLOj$*$hԈLSEO(QqwΓyrH*$J Zd):ƹ7 Z,rm%MIF/*f ^@36vӂ|*IEU)T YzlWS-xOA~jn! P\" ej*ֲ lƑo2.j@U+H/]H(9ľ"|ԇ`y7'A/hwۢ][e`Jth$I_"42cnuD^zFj" m.du!2BNqB:5 `d i[L6W7ytfE78 b@'(A2Ex0"&v &t!/| uƊb cޱHwT:iҐJ{j[n*̻ܪJ>.ڐ0D'B,/P _g=+]tVimy"UqWeG 5#Ȃ<5F> Kٮ1diP cRX¨RW@VӺ֮'fbݪż$I}6>SbTӱu[;=]-vkeE'^#jlN~dz? Za8u"px(y~p_wTG\7(]m#nf=Pϖ{fKЪWzW W*b{j-{>.]XۣB"iJ (d2R]w-Ye~G6Xu߻ҫ/7N;M   $7b-8? tŊaǭVjs؈7ZHA} P+ 2 2AD Skݛ>L~eQU1hzIPbd .&g~eRM0nyvڥP jG$VmDV{,;^K~7 d-> YF|읣ah8֩֟n8;<1U][Q0lFD8%KK @}ry#jU2(0+P$E-T*U&S)iԩ"󸃁)cۖ ga֨ժٶhu= !0VE\}뷶l0O=M]5яdgO6yd &lɒe~qMgV,a70=y4W΅M#}%X[SC3B %(,<]VH2`EY'ѯ*6dZ:V+՞ip}2.cm<,ք,<@Zw/bwKep] "̄wVI\?nlg:3?Q9%/,xQ` v?6yLfeHx$ƠtR4PR*kI{!Q슔cݒ-}QxX’maDFPcQeeUY>-iQ'^[YE{5e1v0Qx1o9A=RL&ה\[_ߛzs&}9`$ Ã4\:4tBZAk'=mey<:olek"?k _=yԍG␀0GF?iÃϳrł7mLI$s|`}-C9B*l)D^;W(7!իD%G _n3( 3U亇]eJ`5@bӴZ2l75)q#nΨ=E*e}o,i{-(uw3%h-ε_h "N @./kSK)8'ZT!9xӤx.ZA41hI;V`.L0<NjxD]^x;%UIx |(Tѭ`ͫz /[ΤqJ;HA?S=@'o ܶd,N[l8)o9?[ƇJ0:0!^l6Hs5OL0*h5>"Ztlp^4&єhQQݣ1πY QhbL224s@: *<S6r d bxxGqg%pᄇ|گ PhB# F\@;lpC㏏-t$,LϑN~GXma]oek^}Z-!;Due1s6$ 0qMo\PtX]N@P[J)7F)hFboxq,.6|Fw7(hA⡙j|x9' 0ހ<"϶r3S>&+,/vf_iHM`DG35$1Ԩadᥤ(X]|;u%?z|({KWf6y~sHn 29mgHˠS[$FE[qIۣ1c. Ģ|>?9f,9Af9dSY,$7Pw(fl,Sq S0Ҽ\0oCѢ Ÿb|'/T$`/ @WsgH=+ nj5.ӝR) Il~̾D0擣~㸟/rN{ݰ5X<4| m [ivc65O4}q\{=\ݱ5^X^/V<|K H+oG9nqf{y!=}uȍk'ںb򆪢W + Ph.Nb]4 "ߧ!p^EUT2'e'VQ չ-9Aà[&|H)A nGd Ih QePH GTTVãafqkkf`ޏӪ,5o",^3)W ZOdj6`M 9в'jYZ 7 8٤J,%k3 tzS awiVuI ԵAׄe XlŮJ`8uMdP`[Z;4??ӢW AWhr(@{5:8|fbwIca|VK/۾#N`hǯg];މt[gH"%DƬst[/6O&4cX벋 Z=<ًv0l(E_[v@l=s_g|dÌ(珂{׮mNwFS]X2I|dm*{}+4)QhAK'b_^F-G"unϢ%Q̹a huE$Ef*SԨi?F KGQq&g"P(<|.;՜n1X0a%Y9]> fx܂27޵&\}nFq5e0 IDAT]IyHU:pU'haRuPL4L(ayfދa7$>p^<%HE Tq׈{s\uxq@Z5|7CbkT2Nj=*+ghÇ5~gjJi|SOo,pj$8* Bg=ch_rz1HoJ52xvٞuP-q](W ڝ@NhZ'j ޾U7#Vr2۴2>M>^8{n8ĭZ–= 0 qa62v01̚"z2!! ټ|t ͬ*leyDW2,k@;@P}kh@|@qh1|QfϞ&LmL~tbR⏏f$O`-RJ%U ^ey^h@ŝbPCZ<~@<{:Cq}}?Ix 5_"רz>mNFg%+7⣏ f(S3Q9`u/N2brQ~h64QK@J6@șpyzAAnZ@m%-ʫWOǕWGžn)¹;Ǐ[/md+Wn<1cM&,ɠVX'H\v1U.%.B5}ʈnit=Gf<'l2PدҘZ$1 21ȝ00l>yzD^1wz=NK*ĆJ*i뗼wکB n\}Lε{o>}zn=cuF-ika6i?K0\VGE6p}jEc5$vj`q՚cBA*%<e$KPw(4={+W6̬iɇ@j[9,({Y]x|?{I*>eԠJYP2{7~צ[Wn\zhO`s0vB$h/QP9}vGb=<H#'p=Y!f6vjdRr՜}k<12x:@d)@@6EILWX IJ%0bȫ8{WwfeٍuV|)AJtaT~훗=i,Ymsh2߹q;W~|Kt0VqcT?[x<,nK,ucrOO9{ KAړWAK9j ͘ˌl 8 ,1ג[[ܜd~IL=iAqHR⽺ ϖ1!+K_պ?XÇzW|&8) +IfgFv@=;'t?;^ VsU 3='Bѱ*1b*NwӉ#g 0˰r/2!r a(0f%4E 8Hz"dmF2ȥ0#lDO+7Kdo,ߖonSp(}Xýt7^}{ȥ:hB;@s)A37 ;81 <$JJT (ڙQN[ љ r {v%QAWtnLWPxHB(QElM3WHFe|3]xҥb|_~$b}㬣&7cln=~MS儳tjL9dBBA2燃Pv yhȤ92>TFd+TCѸ LOe$/ٸ}jqP|wn/(P >>7 O?zG< ,Àyץ>z@ afv K 4n6z ҃ !=WȂhC8ي8jŗ2D/O a,{8]|x0n;Sga3^o>$6x疕85h ~҄>?zƛ?z(b'E8q]X23=PI|0[zUFfVʴc{ S,즴1]O#M2 v@8r55W64:oz#lu#@%+ ujaJӺ[eIҲR@6-1W Los`֣Yi 'Xry ?MŜm10~V9!yI@fk"(Rue)@(#Y7?b kαLO{):n.PnSXCkfHN1* 0ѡdf>^)e! 9!$ngβski!/z:>]> h߽F}y{Qf}HoAhUVW~hב &IF;#]fT=UL:Y{y:13k`W.u;AL}d0X잋 ]<=cq5oT st*hyEpJO-6N^/ڽOn U( ZBEe`j)Hau6ݾ# @LJf,m-iFnnhT2+K<_m$NN__?m,zG`ғ604q9:Q|p-7i4HvѾxPxg>[}[eXQQvci˪kk]a@ ue٭6V+P#h)@:3hVq%)MJcèC18ڴ#Nː)N] {㣊; 7_"]U=ٸ,iM"E kD#Rt !E&Խw'7h ' @kH x2EJ:9c\h'bv&. #(n'šE6%7۸)0OxH+Vؚ8|N3CLH /Li a܉b,t4f۠tkŭ֜ _$+җTA >A9KTqz1b9㼳8 cTz* Ф."FեΨ@ Cd3b$̃WoźCz}ZAi0 gAADLo1/l?euFeܹ9z-O_^]fUM[l;~ PLA)%=~nǺBY^{7ٝ[2v'־ I+'% V}2Th|>Է!ĹgB:QW>s(uh[ VE&08|8yŪ*qOÎh!wBa sKX4$U5N@9Ne) { FWf7s[]i.{1mh_+Wl^}cdPG0$Œ%*R*P* zJLu!;h(3qKD̘<($$XDOt+U=D@!:Y"m<빢PQC'4'ޔ t=eޥe&4HKO$?g0?('kӝ̮Sm>$_̴ݹr>h9;W-YbOߖ `q+1ֈsm LVj #Dy!^=r=saZzzz L28  I5@s(%zksԐ%Jw󈝝T&]0~ڀBoY25߼cӷz?|x [=gZikW߹8goE݉A"_}z;>RV۹RVŕ1fUzՎFJ caЪ #0 9iw.s\RTF!Qv[mM r?BA^ JK#Hm:JYP x cBh@O[T m {Φ͝ţX QYКdW]<;ˆkU{r]M^\ݖR g-8:NйR;{#~r΃7?ڴ+.Q1fE%GA$䨏-P-h  4D'naiQՊ۷NABBVKͩ+:|3N<;7pjc:QDJ;ĵ]qmK` Ύk(MG(8_+ |_P_)Oj6UAk2p6ƮNK/>g}5VtE[Qw9'}cѓ5+&p4˻c.C@"Y) éViCbkRzKew 5P>t"z`sv!? i:\׹h(lꞑ7MGsT'Z]zG oj,svSN_ zkl9~O fkTW44ctA h 51ZBPթ׫׽I̼#K6n,%9VtNU\iTHyW Lin|ښp蒭Iԡhj {`I$|>w[?̖ȡ3'*yȊX,%f4OXS5wo5G fi&O]$T\anZ64 ےAꜗtr0á\&5Rs|IvE,x羷lH/.\Z\mEiI*h6iuO<ot4%E'$w((*òA62)b]f\ р".y 2B@'M+i5s͇ G|X<`X ͈5% U:>ҫBT\5#-'F.58iECo3!^} %ai L %ΫJ6kEi15FMbnFCE`0)ƀAc42"u7 ȗgQ<| HiFU&ʢ?:zn7FC)UX"dE$p!ۈ*;3;+)aha R62Dm4}u q Zœ,H:񢜎vfw:\ٞjK q 1j2YHS)d oOAM} <-w@Qi.r4p\uHև{PvD~H{ r]5{R21M(⬤(c8ĊhLýIDAT8 9=WRgqk+diO{V9dUWE;k ,9|Lomm=> ժiUzMn͗F[]93e-ZS_PɤL7qZa߫dfnZ,7Jݗ~td(F<-M-Ј |TZ9LCM\f6XU,~U WB7Ļ슔ZMו"*r+?T1bRP\RFxIX>+I*X[u5eEq{&'`}2WFۘb+S0*lme!('ɸPn蓇"޲HI6V9rj$L˒/M?BS=n?庖JO~?U-TjR#81X)h' c Q H-G!GqE93xbc:+0.i7t;{FPSB6Ǡs~AxB>?.4^BFZޫ:9NZmNiK dw^ 9AlG`Gb2WYq.ܛ}zxg~S[BaElu`{@푱,q Aoz űEoGWqC.>l$ 9śY2<4<O,5rry#/$z0` HV"N{#itg R`0!SX~8DCF}-%Dxδ^"`"K z<zˆK7#LD-osV)Xi `KK6(1ɫǢw[JLh!&&扢V2x%KkMJ˪Z4ZkXCLXr/LpҜ|N<&^0B;0#3zP ,& ֲ͕镎Iօ4/B[,L;ޔwhuSeh25{{ ĕ\Jm f4eLVBRS2X%+*Bs\e5s1tЬ:jlV5LJ &i{Ț1 '@ˎMa ?\ ~XgLH`9gN"xd?K7B+$0j*:Q"2 -[f'{Uk]gmEEE}Kyk!FCڊyıX@'~-9_10!.-!*}(SES숅fD"&&d]G  SRQ*Nm&d\TUUhvt]ŋkCx`SR }"S/@|P0ܟ{Md}H;}{~J kVmqUjc%b @΃eU1g,3^7Tښ/G9X/ݾݫ6L;rcb%F-p8,!KC&j,ȪkL;Ȍϼ)cdMFiD| ƘX Aޛ [gl{.L?an)Iu1@9Kf%)>ÛJT/H[,6}Ifnj/RKoёM-SS-cN;M-nE|91D]( 8 EVUsU>TzU~Av6Ut ~4g^|2 @at JȈg<* cA*'}g "=}UAbesF8^`t#(G^rDY @+n`1onb&o-yI?rŝ!'jѨ8LXHŗ^hF g x#B;,EX<5'΄I?xU~t1Xa-k< P+f, A|@4C`0;!,qtc=}lkacҏ ?̊o!ST4AZ?odG-Qm%f,k8媒5dW+of&&Lbbb8@݈ ų(¬noF0(,V0MzF=L[jW1o5ϬW=>>7uM))PUYETƤ8 .`9f0ޅ6fO.~cCz᧟ݢuDE;KP+S(ǯd!Ek@TkՇx_bo\-yBWP y+^쬒 S`~|$ˑ0…1W3YؓakZ!Uvw<{S1,àR:&CL0޴OŘwZ7l="a;/o_L t=C)ʓ== (K"*"1I/y CCQisܬ*7ƙh|gq]N?,5VfU#x<ě+f@qVSxaJ(p53vN鯹0je=Ǎ7wN8mNx"7PrӰ 5j+AP/D7m#g Kvg[.hoOτ~ nfCˊ=4}T |TZ6 ťqԙTfЂg?OɼbьGQ$;0$&d5h "1]ba la6-BBW=ߛU;g0_*eĊp6ɧ3uˋ .z!ǯ!<#u>Lw.}X+ݾ0Y GRXGΒ CwV) SYԮU0>ٸVՑf맮Qj}1}*2ƩB.3*POC%/!E3 LR}J3[n0**㢴2yFݛkW~xs٧y[7?;7_QÃʛ+>kZ:^>@Y NcA}Kgn>o:޶a bl+'"KI 70$gf>ܣÆ+7ii .XXpm.pp.DDDD!{##DekJfbKGDH pHYs J JBtIME #;S IDATx; {uw4sٕ+]{m[°x5H VEep.$0!@4&شPNnGӦmy{g!EJ~99{{yY+s\C+Rm}28s'[k*e,^/}˭zr6~. g>|tv; )bק^dE۶G?77ch\Q5$*>~-mFf< {O/ [qgk<*%t˖G#@ΊWHYɢёs2)2;ʂߑ2٧gJRaXL.ZJoIyl 5uEub/Fዕc{ Qo'~d#:ۙ.;r5Dҏݏ7|'ۓw}(3C9䵈p#1Ox! N~>N2 1qGS#]wS䁈L?ʭF׌- Ӑ튶!+'ž%1Qkaht:K U)םTFDNZsrA~Mȱ6:n 74*68|.~z\`o9)Ǝ"]8Cy^ؽ˥DDsC,vLL6虇fdؘƲ撎%"aEX<8|- gfE5
B*2`Gie] >͹FZ}9X1K➕vo[5>Pg#pf.eAݗaz9BNgZ!V}|<.ڨLHVru [?IyI,F&/F:aN/<}ԚJny1A"wfua-o gW+ `<5wn)Q 3_$d||UIDRd./0,znBBul.dAHu/F*\ӈKM"NYU\AW]^`9jhhߤaajJ#m?zF-b sK'˅ANL͂۳m+T7 ;I9s8#5b g:JEi/_|!3798oP 9˩ B~Hzjsz'[T0m4G'ENRTS+_ `B@5iN].YޱĿOiAzK_0ENSonn΍K|sH#j9uI1`z/Fϥб*Jy@ ‹x*=헲)=I}wBedYwM+P1*`HL\V 1ƪҁO\20A% G8I}Ȃ?bdim= gd{cE9 CIvV:pySR W _Kl =O훥|&y;L|CW"{.z)<=..~O)B9o$ғuV߬|.Pvdnͮ.X8ӄ.Kn$dh 0|Ĩ?5uȞaVn L6bDi]Ho[%M#i- X/RBߨk1P <فop Ы@m;}5noBǬ8{8"G+alJ)4|;ӣߖBi;$8`+`shR4p` XJUo&N kH]U#.M+eD԰Gc]jrwF?ǚ}Rw$8z\c,'*:W+k~hPb9MհXujX:uM/vh1Aްy5TC~@^76v2SƙVѳ {#\D~s)yАs;fw2?lX-jfw5|O>e{'#5m݃UϥmOe(^Lmv c] NZS/O"fj=8xטbu]A< 3lذK-T/<6OԿt'XM)s,kzM /Q>Y 5a+KoZʒ9?nL">!8 g(KkT=$nimle3 qx a2(~0Uկ#L*2k۶u9BǗmD[hIZv[92ЍD#(cO翟OYFOcuyg#?Q!7͑qyK +3R-~UX%[~m!vFb]NBoFL]&}3_B*2NZɺj+zJ>^J9[ Ż̈lNFԬ~^;l. w"*Hku&f$ 524&UePDacdN>\60<5K("fz!4v~yy`t;9_nn})?`]mrhTkW[湉k(dO%bҵ[JOeR~a&q5EKgI*gw< 6tu7daP)lygk"TioIENDB`lbreakout2-2.6.5/client/gfx/f_frame.png0000664000175000017500000000734312140767213014702 00000000000000PNG  IHDR ))gAMA aPLTE:B2rjf^b B>Bv ފbJvV>ΊRNg^Rʦʂr&&j*rZV¶bZB檾n^>vjZ""ަ:nR>N6VNvrR~BVvr2&ΆvwZRzVJ¾rFZVB֮kJV&fvnnVfF:nZ ~j^62&Rj:bB2zzNb^FzbZR^N>jnz^κn6V¾njz~>fbJ:F8rf֦vƾfBVrZVJ>~^V~ZR^iJ.*"nfNZbFrzJnZrzrjFBҊ**jfJZrnVZVjb^VΪF:zzb:nަVH>j^>vbf .&"rn Zn~ZV`8bKGDH pHYs o oXEtIME $9Bh \IDATx UFe?#ƴ=oi.#-Y&*Lt{VwD3жF[Wr$36NB k{YcF-O>{(Pf~s^L͉?Pd0~~lN7gU˗o봩Ͷc 7n )^EUf*tҒB:olljѢb[ixp#,TX+cv"7]rfꮵ]ƌL//Y@gXMb>/XoO0÷[4{d V-Wzn?ۋ>E/i:k^^N'{FYq8!TϺ.1*8_~(ܒz DϪ&IDHx2U//Lu"F R* @XUxZo1AQVi)@CqfywHuɘ1ˌI+@9 —y>E_Þ4wLX S|- ;l?r,o$Q2dN1/4Klg>7ӂ|c81HΑ$ӆ&qGG( i$sh;}JHw4uۍ4Z [g$ ~'g5l`HAp 3TaDR]ZF(^L #jA79e#: xX 40K@&0s _`ژ9 'ŒV HJqɢD!z AG5a4'SQс{ oc_3@`U{EJF.gׄȆA&s@2W4%o{ HwmX*f⠪rvvǤ(mzJuȨ0"ߘs: "yUcҾ`Off7c,g}T㲤,]EÇyCXCH>Hw[58sr`5b³;fysq'QY"ctAs32w.SxDث O_2"`+.*%̘8ގ&9oUA" w^f[<h]XVՉG }Ƥ== AP`ׯT“ ` "1@?.XYXt*'5`$"QJpF<,^9xÝPsaX3L,v Z$X=NQ-J}A3Kܒ "/h!A@AS]JY2V,o`.X"DAN> |yKWh1_rEGZTHH,Ձfʵ~ʁ %`h4T*C rR['6B>5lOHA}r9ruK +4NizUvK/ !1 1[㶧oW=B-9}oNlq,y2NE=铐p+ȩF<m!,qHwѝz=鼈\G_F,@ˌ8q)>SJ~fЃuBFuԑ}z#Q0|IԱKƻ>:0&Lu#_0-0^Oo3d 5:eFf3%?8+/Bh`KPGeι3*FуX}%Cf }!O=$xExx*`6˭uߢzRs}&QPrfM\~_Ld^1 9.~@ 8E ;P9KR'/)Hg@+CXTKVbϩNl)I }팂O+Ev@"6vHy]fN Ðo[^hY4׮ae$鍳0k@[M;/TnXJ3*>'!DSɸGBy29ozE;o:b^Tc`芐SvizK+4Ŭ츊ێpr%6C O0Ӌ-bX~Ocbv0LF=o>JrӠF][BR)uK5iFJI4`IH5!W`dP# ^b>$\aWKA/4bi32u,m6Ԑڞw^.9H"aIQ] #Ŏ чv/ttxVx~95z퇿echv13J7:#oRHbFMxWZ,iC3C/#h\ WDK4)iNCo; `K^:.ɍx2Z$l\L/#bU<' =*#E2iJ?եp:+6 a,L#D @#j3T."R$  . _HҚh>/~pJ={;#Y6%!1 ,DL"Z2&6. j-P<<waYF"=*D"hK^-!֎uT1+lxE?pB8!XJQ;o=7xJ@M>WG9䝅b:1(!ymf4#x=/`RzjVIeYL0,&, XB9T*pJ5"d5,E*R%E0 p>/_N>fV0 Z-'DZ ;T2$h:1QIx`j5(pF:N>jNXMY<5 c-"ʖ'2T*(aJ@xF7:$!h>7L `6%`R~5#yWI4a%F#RFzZL^P<P@YJdTvЃgDxNB6lYX6.V M6.*V%h:(D0-E*%& pNBpJ?ז"yZTL&NGk`hbKGDH pHYs."."ݒtIME *$e| IDATx$ XR>aKM$Xy@ǢjTmq3quLl1Q2dHRJYy.Q~Qp@aG5BRq}~}ox[/yk3ִ߯w8x7|V9;0rʴ~WF֊er 901)cZ #&'''&ßZ[ώ㯯|Ǘo7W~s;[zzz`rrr3ϞcO9u+Wo~vr,ˍ}-|v*˅ɵ@KzKc+ o7f/:s/ϼZSDSF޶ZMo\^ nENLדwg>h)( hW9TEdgSFa6o^fdM5o %D50 ~LwnP"ލ]{BS*)ř.UjdZ*^E"<.QZcg׼#]too.݉HBKWn((V'bvߝrk4})6j]j__&W2d8YRR;qvQzHz\/>I-֧A"DLN"U/LpEt D:#z\p\]Qc1qQ$. _|q~إQ5 r-& & #:򴥑l$# 6ɼĜvZ_>;vN?_)οɆX2trz̝ k,"*T}]b(ua)y5STkIm EMMMDMX}ZWո ;z>R>QQR1;[= /꺴/f.fjlR]_OpLE )82ҝrݵ+B,3^=}㵇3~]? zV9*>Yx^D}Vʤ"EqBąJaګ #OeZj_YqK8>ś~S5Lmwv^>*nX,CxM)yᢼg=/p07\^nj$6/0MiNBkCgBoP:7T+vږa+8cC<3_꼏(p/Z)당ş]>h2/ґOG50:h7}g|u}QE ^g-< ?y ѸԂk$LrqƯ3IDt%.)HC-fg۴mh0: rl$xH2Jsr$ 0@3F*K>b:|(LdLF̣$ՓHm~iv]9&z2](]G 'F1a f Y]E\knˎ#b.q )Z,%J===&&уBD* a0@P1,,1"\;w@`E(, Cl*urbZ]UgE mJuXzֶUS&5 I u9|RҤR)l#ҰO_~Y4 4ti@AiXݍxa`v{x|~;&BP*}1M"JBydLCՍu4`q9&[poRbxi#!iXFF.CҫPmP b2f"H%51A C raK\遣Bwg6 o(4_IrуuJGn. Hͣ<}-B#m*@18<<3zJGIDdNq@ |}eIF^+M& fE =ΉPB}:wH*H!d_1_ ,;Qgz.snI|D2 G_" ! [ph<' ( v BL=PʄF*QɭEz~m!I^XSunΟ:#@AYf#-W4- BaHw=Ъ ͠6EP=mJ`1G]3nʼqɩl_~M Jd$6q:㾭}GW٢*ǗS$= iuWt߽֓۠+-$yKZ1e$~O2%ԚZl@S\eZaAmwۼ,fN[}Y\Iަn$=h~k?-dBbԩ<|`nw=U V݊MTw<.mE'Z[Fr-DAw!~H񙫘 zA+8m{.453(+¥ô1k]u"!y&%@z-I{CqH<.=$Ev^}2l%ˣb1G=l8Q(KyaJͺ@bSYZa*ޙOX'W23_=Pw{L۷̇/^݊(uX+ #?DU*֋eH?Bi7iuZ_}\.ZWjEIyj i2f_K)&}1`2 8iK0fqةt&mØ1^t[&'oٻ5g]I`baU@c@MY|qB;4Mrܧkgޯ1X0LHᑵEzXIG,b2xA7 zYv͘Ĭhȃl> ϬLzP/AY[K쎩B<3^: \MeZGјOOz޿[N]jdE Đ6w .f*tNy /l2MyGT:?rͥmE<ʐ 'W@ |]TP hGr?hjvwưJbu㩯 8IFUc:3paxm4dhfjNSlE-^NeQr93<^Le^?+&r@V#"q)w%eFSQ[(ݝj+eROVԴAu4!c"n{JrT,`v|XWDGѫu_:|r6DL(X31^Bg}K!vAruK]^}bW&Acr|թ̲ѲL{vQ1%Ά\e馵bFn x:%E >v4E%u "l}=2yߎEJ%;фq8ybF|J*YWa59 .Ԏư굽k[% xNohX]((]}'?duUS8ݖ@dW2kLR!áԋPNӫtzKdg9uť;YSX#ۯOXt7y~I"jG=Jq;yPSʟ]|Xʇ+zh[zx ݈^ ȇʙL“\l0򜜟p1\n\1:)*)Щ;³ zoHv.%}iBRJDMIټ\6 ': p)4CN///&OLwTѢKUd$|,nη1|oS&!8rP>μW~8,/팒r^Fަ'fr!mmݚ\ys.ĿRI?c##"RTITc|j:̄ڹS%虭ëcM7+txaOWZ%V~I),K_8;'Mg xQ<7:n*ny1!0Zzų Jɬ[m lĭ}A+Ie)OO%9kgu vP.VK·ZxA D{/@?YHk?=sE}!.rLM ܛ<3(bx&?">lgfKʅ[iuXnn)./6*"D\P &A0Q=ҁﺐ.WNx~?ϢO@Gni36vf$|L#!`!yO:Iп QICCKtu:b„sӑeHO LU J莚U _E^.X]UM#P烻K_Gms =l{l(SZ}ː3}#@_fxzxl: Fu[J RkiR36\r݁fCF& xRDG fWK[W>H`]ۃ=1ۑi*G*+^e&G{h#^wBuCY|x" Ug](G8Ud@^sq8R;:r pSSzwA9Ȇ;Va!bfCGr:#Ŗk3} \}A',(\zCO-v&K^ nUNk@}n-J")ܿp/ o$bbpQ~`i]6 eR׸NuLYˠ.7<{WǑ#5e//w\ꨤj:ҋ ͸ՙ^y]{S}K0e ;/!d|2홙 4Vă*hq̥eҹc2AD̻45^I ׮T yƋSEx)4sUU#gKq8O`kjKlԫYo8@P(k;IGɊȕ:P^MԾ][ u NC@ d~~p$k.IU8iT6h̰~`ZcM\ll_+ϙB.j\TƊ-vx5奅`x3sesas8ɂRBКPT8:FOEGEޫe(YMZmJĵ UYOw}? LlLUx^XXֲ_l pP|.tRKNV6&Rltgk aܵkUUS#2g_!ƌd>~W]ca4G۞u2?R?EYҊT1`':=TGcꃶ50%?#=vD8']p-Kmc8Y6p )"*^/E^:x]wSn]7 zmwʶV&YU tEO +SM&'OZ^]q2ũJq%Y!}';jt1QI \~J7Z/ƝoyzV#Kt~zM%D_JDK$= P. 'l<,@J#?szua`[?Teťsn2uf&g]͟^XN#D7>wzv>xHHJ[xᓑMܧb egm jLPIqH*txRJG]k=Fal'`F o *|x4A@8338̈0.Y7oƤw|8)[~?~M{7~WڞH7Y]J]pRVZ3[UɿْL`F6cb0lԫ3 3r9XbKE;߂JXVyrbi\`fk/u˒$㴮vn 2;Ɓ\ Jt θWwzxl45S:Bl "j^WSb2tczUOЉvĒ-BDzwB_:Օ- <̙5mm!t>}>pyduH,=Ha"B3gw?>uNsFP W!Iܜ}9-~^qÂ/t{5d~Vec7yxC(&'$\}v˶҂Jvh[nݼ`F虈S "ҿ!W{?ow}0sR00o'Ι5ӵB=eO[u9ʈKي~ !{mfNqBZqI_͋ .-O7 φ:L~* \`WFC|{aO;Nb2JjB@(N!l cOZ.f$+ȪAH8t^nQjҲ]zA`4f31fpMvt] C0!|tV"džT?uv?R .=[[%, %J{T8s+i NQPF:1j[ox@ ͇'!DۑجG4Kf&'ˆV0֪}%sDo*:o%fSYī5cGcf  e*Pc bBGQtdK/ TGǑUȖxʠ?(ٔ/kWоiJXWn"m^[!fH_o険)\c*0Ԣ,8OIOnLnR!'妎-i{\??T1c1ڜO/+/"| fu{%dYӚ=M"Y XٹLm,T Q(H(rAH$@PMOK]Sb\x@Ux]Bl3UP4ePZ2~Mlt9m9y4}_݂$ŋ/! C.7,܍iÏcJmܱo~{$윍'ܝCl/tk~5)7CyMdk ۵힞=iU9b wDbRmu3QM=*!rq}v6/jU[پ}- S 3YJmmx7zVzdz͇vXb?9"}zCVF^/&? =}#B~Yס\e_P_tWM:ZrǪ6+(Hi 26HrO_lP(B1"tn4B[qw X]||ބey.՞0@o}<̗e`£pO"".:J'TXw}rNWm&-Iu;wR 7G뾃]Uw\yzjdz ,o~a`sAHE ]2DЃ hBK\K[M;?&u$hlr7NK [zKltǚLRR>qL^Ոwvb11$bt.0^q/)O8C%;^THҰ8b_>6ã3HV Z~auaʁ_=9Zo誩:^D*D@joQ&-o](O?"eBO'#q_[[=_ә+SL|$`!O|UH3H;\9?D.rlmLH{ +YMpps,l@7zݽӽh5E V7{ pwg`%WkVjF\UNa>3)nϦYw.3[d氈$3ӵwȍnN]ٟUx*ZP(ʖl}| YŏqxI\*Mxh`ؐ_Gs,C3nO0S`]WߛS! ]77t|C`l 9VλG$[y R'ګ75%  a_zgn{?tt| عmV2W4I٘ q?[WeštM-F=ϰiKF6?}2##3 d9~=L~z /qWu/}Gcu }Ec}cq.C:4A  n !a 4 uDw7;<'SW.'a@-`ؓlR2q9iFa=L؉߶K1n;\P)[L.Nj |JcdrcVWKgꤩfY.eֆG^™1 xՕ?^+@zOlz!l؉c#1 -p 搀"㉳=U(qdoK˩_簌6_4TscuRVp[ uirZg>Ҙ>It`R)+eTx S(t/eQ_-Yw7*和/)}RlgYd*8B^NZWgUoWJ{{R*&Q1gPP? Bs]O@aKUryowF ̑gF9'Xw`i4 ZQ+xT\0YI\V@G> v{8eXrA^ 6 !P[,y8rjʯwPy\A䶑B'\h~nx/.]2lYSx\F "妶0G36MuV{E8)H_O3{TJz(V4 MHw2 yȪML?I/GsGD#CCK*P] C^]{:U2KyG%#@4S=<0I2`(GǦdYU +'>MQH= N_)Li~1sgHJ,qM4<~Ū攰ǖ"am3a>KD9ͺn5 T|p@nRYr#e}<|5Wi<%+&dفI 0*0Q/VN[(嶱s\f Ž(0# dt ?X'Q;ؙ+O. ¬W^5PaQE²^O="-xJ,*2\#-:Wm sVdd2;n#y&L=++:e:䥩}<P$ؼʨy;! ֒} ` 妄oЇ7&%QO?wUEyϝ#4РV!P4^k,AFk>/{JŝK9c9jvłh6@ۘ~"4#~7oT_/V/ޔ aNDžguY9^*(}0hW2 ؼ$)Yx}^V;W'VкTP% &J#.q5fF!U ItB"̏?r"[⃑/mu4NXvFV ΣIQR48(8bض _Uu(n1Epzk  P4w ?~\h*ԝ\$EW R1mDү{@DKy|jWJmlR[$Dڏs):1r>4V2h4V+uy4z$ː>%$q7RD6` ZW5/eHTlAcWG0LN) |k!91y)p ɯ/F=1/H c4Gw./=w5+-Z3{ 1/L5jƚh MbMoh+|jST<9#ڂ TF2RQ5edqWjV;6+w9Gqr|w|`\>)V}FU^pܹIځ_`>J&w4 VVW߫oU ^.Q'JXL捦s5ʹз?kfVj^h kCSp߽L7kĴ\DƧ'cMΝϾGLs9-Mh=`uGpSgLk‡ Y]ݎcK'XT lD&C'VKgXw`IKKE%#uBDrjbG\S3"xx-Oc3$4tW}VPS&A&MpTW DdɬI, w,ӏ ]ϬW5 ^9{!GP( r*HeYk 8A=l)M .UK](Ft ER_RCxX $eEEg?`0A?|KJcK$Ob9_p$]\.G 6}D +`4f07G+БF2&AOGMűky@tR6m-IX9q{gtCv2@!$ ND?76@"Ϯ<_++Ry4=ۚu. A3p TW%J8M\ڤA8{ېٶx\˺>զ;Z'(w٩;H(m  6`&"@G }lm_&^hJ$}qaOS&Jpwe ~燽$} Ixy8#FCK$ʈͱTjyhL]*br W)L%x0ax"ibn'4rՃb1TA('=NIJr< QD z+ֳVSW=fnRQsB>p"&`=ju-X>h`Zw>uU0oRl`ՃA iVs\e+!5?|Ƞ &dWחw *|kQzՆH؃ JCAס 3D:T5y :7z!dqL 04Czl''lwE}}}Z(Nu5Ձn7XV%!ꈠ;d!x<c۵Mm-@DXBа4 k5q$Dz.kۇ\b8;)hd0PUAzPקxAZX2BA(=X6Ic5o{vG"PJ]mӹ2?q1t"'` w{~D+uI CBX ^AB\kxJb40.`$Rza^< 0v5^/I4Y=H sAJtiĭh*ɳꆙ-;'ë;ťCNo-ȁI.^i:2Vxa5n3LG"3,u-Eu6'SQ(\ n IDAT͢!Dtq{qGgdqJmJeJ!I_5FUG|bra4FUHLTH1'+O1qv]ǰ&5Ǒ|t_\\9׹+q@v0D5ى gDžOSnvw@Hn<1KvO -錜dL6uDjyA:|#cDyF ! U2҃@]ܺq'~ygRR^ӧA8yڵ])A/7ό7?]M7aکW 8IB]-+ <\| 40dHbD( + 4 @Y]X@ Ф:f *>I-: ,1vug @gi"ie$0h":߿QCOqj|}xYNAdWa2)H2)SA,vZD0!hþh4ta$&.S@;V !$N!ӐQG}ٍ:R_$ v+Aà E R)aRLd' I@\Syv+v+y=:zvTtyyk Oo_o_&͞zAR 3 )CjFze`˓nhHiMynNۄh:@+IJ,idAWBي҆խU^1pz8 K^JҙuIN:GiƆu14@h SInlի;RĆ8jWwNZ?Yؐ}ŪE^eƎW|ri1n ?"(K\k/jfZc Ü/I4Ɉ[LՉB\\1>L V}ONw # \|. u9GiB\v ~QD$0*ښ쪪Ó|{ַo7Ͼ>糳UoS|Kl?jQŶ?{U+"@pnҩg5/\ԏD8fm}f[{@|DZJJkmʺZKptUR޹1xG&X粉K%.;-kXʦ甾dlgQsjЎVB q.5aysgQ=-/a1wO^[~ _݌}Gw8XhI ћo}O_G"&vD<,KRB##r̅{tnI+:.ZW1ۚR UC L{x$m6,U{rCZ=~?3s#QQWO;}/|;>4->e\1X>B [ڄAuOe d &0e8kxV{\05@[N"-RMȂmɮ&Y0[ WCNcjr#Y>QZkT~iUe t[}#ax&M\ X^:M [o_9'~~X}R:wA/~dÆcy:ܶkn$P΄0+Ӗ^$22:<}_]2.:UX Ieb렏2:Fp$fG͋6r|Dm\_IIR8uYsd^W1 E! B :M R|n$ @$%Z; q8K{ZLh(.СG(>H(ƗnFJ7±yd!Q4ziUJ8x5B8ihvt 2$,YW[/i<)VYʹ}l.uï?Jh%Nl+77wŢ C^^e@}el`t#!e;nSFuK-=Fdڔ"o4p)s4fy/D)!P@UU]OD:W:YW튌G$nkeuHGu;*Û'~8q?o|NA 1G4 I\_y ӆ9.sqj)V L2=_~j&N||o.DIFĬ~׮4骘׸y1ւ Gkw{Z<8j ɷURH Nj(.L)ŐF:ixS&:nN3غjl [3D{Xbp6Iig<0 !ZڃzϿJ?Nco|ҵ\ V+GGDŧ/}V2_"IqUXo@G!bwdMxr{SK2(G33b0C"@ Nv#UfwTh ;=79!{{IJa )NGDj`t>gnm1p678ƛ'.Q%L3GBn\88۸_'icx :1iwdOqph#T{ &b\M8hT(i,&Ӣ 24X\loi0thY VP%ygԣJkOH8j|~.9|CoA[s1 0*z(aТモ~~mV ;QS"tqq`]tY l:v{|X{.d0B :?=yՖ1S@ T gOڀࣇNYDjҶװَ}A-o|y|C̙޼ys7>bߑs߽gmn1K>n)Ϋz"=d]sէcA>ٽ>%d_TO!3`84y6,.rgKƭf 33ƾ>,59u?=KKy0 s+<^A^HwfBIÀdLXWnjLԈ&۳ Q 5U@)|su4Zݧaӵ9Α#_F"')J ou?89և]O-9RB^񉈜hedy}" Uð#q @g8)9gvb0j1W=ͼ6r'$J |t)J˒W%UjQZ({ i ZW@Ar>s J* ̘~5a"nS3рp?1Π Ԙy@N`CHya[pp}K %Aح%PLl}RɾB}+b6#Q gcu_oFs(0]Gf$y|r`EviRZogH `&7y/WI@<5.ups̴#u1PecVq.W"b=#}ޓLOI 0B=X}Y^~1p00L š7luɪ6ud ܿ9^0‡/wX+jNΞK-P/[٣.zhKr_UPzLOB [+.Ό&.seTqsXǤˍ,tDqgp1*59b 񥀌jkD_cMٶ!wRb"K~y{~ 862'r$7XI[A] }580Yb1>i@XUD|R6ƨ F9zMBCE{vȱ?tfQ~=Mlu^W;:8DcD2y.)s]T,JHk2\Aԃ/vp_o! H伳OCPj|v:(Q+)/db\(tX( F=$-몝 ^B K0t[G7D__8k0s"2^S%jӵsÎ4Ze^M0׆K4[ivth3 8KD1jGD:;,).!UWg֡;'ۜl 9~CIs8@>fe}LHSebc_%-p9ܾ)e $>)d $c4__hk6Fʽ2<p Vqյ}°NH`ӧID1 Am9,:pYsĬHY@Ҫ*hXҴ攁++hyhjépW'hXE ?wHxA8{?'uu32m7cOA@zD"/ gS{O4P"&M6fXn-6Ye%p&7.JkvΫ}UY" eH]_ڛ(B:?fƄ9XrrGX|uwI5οvs $򆚰XRBzkr+ʌH\kteTtpM\y_s99Tyg9uw=.s-N-_wl'{M>L~/RTR/{{ɤmmn^KշVP $ҭ+iHKOr~ٻKEǯ‚Ҡ;"=$DAI#iy4n7exENԃΠ^m @7e8sx&ܹHxIQ/tgVQZ?'4'ZXf2/}+(UEesq#樸&KNY1+^Ei녅=љXqz<XRZ@-r.ձU.>zDL FE+uJ.㝼V( bӏō;Mak}EE Ε<>rϽ"RG {_r= [b.Eۛ;~Ch &x&`1yuLVuU4"8scYB߱̍lY@޴lEٌDvx7Y{ aQN*GoW]|-F5Sִcg[y~maWUaaI˕Euk%/FEFG}R * 8K+I*& ͂t(1MQ>.;ҭ$I4lL~H֓kD9ll IDAT%8ִՊF'WG1I.]J3' ~aϘwڲ,Dتk;C#FYuR&7nyL&W83^8ݸ{ )eZs~ώ]_' <^3|/Jip>DEhpnFDETc91B=^cM mh)7LpA~j^Ͽ@PF w>x.Ƌ* ':O\]{Vz  )*I$E(tBc63G3|  xN\nr2qWQ8%N"M)iuՙ:f:TTuf $LiL@Y>Z3h*^y0{#og?܅ԡe^kkXDƆW&;&yr'GuϾx_OMl]X-'%qdua 59  Fs3.s[^dFB e~_yQ/_}["05NsM:RސC2;?w~rEJ D^X4lС62.T,J۪h=B2yx5Q< $cTuX*rH8[:6iYDF#+x" ^%(Q=kb:J 㞝[5~_H UvG̢  d&٫v aIW-lEٱ-[adD< jRw^\'̀NNUcv7N۳kVDJa0pW*Qo"f1j|#le{ {m_ HgDcc*Mea,NSp l:5k̍.@xƒ}e-2{{С{7e'dV[y>vb W߲g}OD"/E5=vH"H% N ;YgJtIi+iwy >ۯx\xr+U> lju:5;aU#$Ɛ :6YtgQeA[k+;TUsksg[y! HǹD6mӫ ӄSI23L 錳+b* LdPTgh@w5^mN|4!Wm>ֿn6^E$ h_Q[b.(ލN| Nw+e)]gr<<\_ =@Lx253'jJ0^qt>oeKQLXߜyblbzWZY9Gt9V,Ҭ'>:嘘RB>zGoiYs.ٖ~-4`^ Zw72ؐy'U?,t{R+ï^&|&|N#=#×8W\2~^I~,:TS__&¹恵+ )Z*oHT ] ZZҿoW ɩaB>9gno>o L)\'t(NGۥ/Q8 0 GT@u6ysEjs^^eZbB0f+}.\ۭ-X|KQYs 'L+&W5]| zomyi}oS )7L;'oNƞp{:#3S ݁BuӰe` eܥIquyecPPxI||Y\B2<n8Sz8|6[C2F4晳AgU5!5o`j%e=>wsZ7mѲlẰ6Oԥ#~}aRXi~~[)+^M` W&F+hvs2!.7'`^Br@yϴah7v.Y 7.1eKh&pe֜‰tON±2Psq V!4R*ժbh"xr8f˞m`"7У~[ϴNhWSZs}A Ԑ ,oaBޜxj(!Gͯ_7y8t˧T_$lkߘ|ޞ ۃgw0F 9gi}! :΢K#@ISAw.1f(nCCQ6-3$ˉCWrZ֛]o9ғ9pe6kSFՆ!1iqird<a\('L9%q==^ ~w%a}$5ANIMi;Wp{@ۤ?1  ?x~rLBdcQ#Av4Eknq/q|$*fxp-?~sN嚤qatjixpMeΙx>iF"'&"H EЊ`"9(w2r@ 9󣏡`av R9hq_ڑUkÎ2+̾8^-ge4~}tku`TlT[ÚV7`@vrm;.q{5g;G=vy.S-.Nk^vbԄ3^b2,[؄t ClF-TJ*d$)5Y|( jϑ`Ԇr '&L6P1*fZ5]7oBޗc-`Uj~[l"X1'Ri.ʵn:N߆v%n&fIgfL(R@CUmxs;Dlyrާ{ױ jRZҪܞk$mݻvJ٪~^'9.yG9|Gk2b[:y@rd:.TxkPEk竪Zˁ;|gVwa#@7Hh_=恳_dVY` @$^E e8Q#*[[Yѵ,ԏZcVsgmm9-edk=3E{6,(>nTËNZ?QNFgx`s7%,3n4x( M `YZ[!INuҶеsh-ʠѫwۙP4;w=0HqH32إ<~>#&"޻W :R BrDŽbY"NA t=>?A: 8$ /%r{@%Vv[՚}^z;ئբG.ͼ@!@ )}E2y/VD0 ɔA WYZX.%!&~H溚 ۲RK=OZ{GAf-Km[r&rQ]/yxNՠ(w|OVC ۮ.|۷?|r⅐4^ha*wt%N@Aβ_/!DZjs?9l`v+T 9:8˟:CDY+V.ןehF, 1q{r+[V3ݳCUy/rpHgtjM7n MrjgkrAdi;o7>lM}/=TZRaq,_O C;UJ- ˾.YX, xdζ:a5^ɾC*: Y?'3Gkv꫎}942̞B'hrt8kl r{.4b9}RHJ{狳b,ԯ'>ߑ=r}|`gЕ@,=2L ??3QtKc# 8j[y=,IL^:ÑsrPz+fZtlBzvBv*Y$ohRufٻ%#U{,hdoRZ! Hvp<{Q=25ȭg׎tq~k^0g U)^ v s\ZQu|ׯ;0]D)bpSac5X(IYZBc'K.aIK ^!eI /!RC)tLf\pCfbt7>˃gmnvE*qsPw.D/p t P!!/Is|!]>n()p^50Y5F^MU4C0&Hxܚ>H(XT$q'A> Q]Cn1T3$MQ:Г$*@,MWbD+ 'hE"SB+5w '$,厏-EZ6gi ͱ䰙80w )@ȧh|cwdNQvJèRy_IޔaO`e"4ѿPS5Ug(/?,y0 .C ә@j("NL&ۄ#UDJIr=.<|Ec_ۧ)Gn0\L+UQ%.C15RH)ੲ=@ޥ $=ĕL9F lȕ,\XS`M&l" O)2)|4YOZVh ΰ*{tmq[7VuHł,3$ָh~#6ĽfbI^J``f 6A wKJAs1j}@:ZۯѾCBKfL^5<ƭޒ[se YTbYr?T\)Mڒ,D)M"Lh‚Ѧ< cg ewRrlUW..ET6>ZTԋGu?b1òrF_؁O_])znV=OtlyP2H%\v ,Y+ȕS6%ըn>v 혣 꺒v]=/sJfISp@'B`S{"O%3D^՜l톒0\;tޞ *G7tН|xjw7_QoYEKևsUn*ǞעU3taxI%]j@p>D"{s٧% ٹC2NSO/a5ed٪,{Q L}r^FDM1bz"JE<%Bqz{DHI<(\|K=|H<vdGǑV@^|~P)@бݖى0)q.JoJgHڤ){'uxWdt4! v%g ۙXSC$QMIp42ɴ(PjB9ʊSMNF Kes6S D0uî(@g-H>_?$[vIE3FR;ڄd{E iS6{LIj-m6}ꏐ$6զֆb̘ µ+w݂L8sLջ(*Q IDAT\XB=G8%\ CeޜQPXL2pޣrYIms*׈Φ:lv)XCōk,xF)ԎBH}9RX|ל>S,t:zH1^rvH+AC,8:<}yyLYrHPlcXD-.h{~fs K2_5e{|K1A3S3h4 F(XaZٱ9+IeѢ0yPY v|NEPqaղ]C4/AnMApŘ'&Rs{ω[3{tf-\AJ[/9x։Cx\yP2`?xA;9|e~0Уs'￘;wrfq9#UvIk[Ŀŋ} 2Sv6ò@:VIšXmvKdhgoAxȨZv~3[^e0ImY'CF#!˲8T{ 6mZuc%#=xyy$Qx^')1貄`ɞ@Dd7QTBd2 L:y(RTVpu`bjtgSU*.D²Nދ(P0#.rxC*k0 S:%B81*" eC [ ت^.1K,!s3b/Ax^el^RVV$8Sݜ3{- L0 [BEow~O}٭vlQWI(6\|p*E) )JAV*uDvtL~%/`q8VJQ<8Tޘh.~\,9㭩WkcN4aE)qb<FBi48alSf Xvm۱ /]_/~&ohLH\<Zx{7u͏WR޳}9J E~0]dl!i*\\d<t.2dtZ5cF\Ilr2r۷52oh7ICܒj>ޛuʞOOϾwo]Ys+Wvۏ; 7[^[wzG; ۧ @FUU6f$jG#U.ݕMl~|[!3L)4{B.Sl DYIM| XV_EJ !^3؅DᲞ恬W?~H_|wnL]wi*:02-kn_/}㣟ɿuݗ Gܴd8/&-܈51iMյlhcHع2֜}S)ٗ37O]1k[13LƐ]GjYD=ॡ~jxLv NoK}5?nO>ەHjtMxS Fˏ[kFkޙi=!̓VwKbU k2`HJˑ~.kdqëj?ܧ"S*ٱC_Nj9&{)iY"sr9 bk'PBP8EuhVimowuؚMo̿vlM?oz¾uiڇ?y~.Ω ~oJOF6CV́J̼+^khkYiwT6;Z8|\ͯ=Hԥ=76$Օ܆xZE-"JZ !u_ij2I#֢vņ_/-]n=mMw޶X_d}a?ݣOzՉ}CnO·_YUERq]Ԅt:7ZI3mCcHQ6?Gž4[Fwϥ!b7 Z.۾ELiۦ9N=tw+1}\2b8ɥW*^TT_.q#룭GYHٿPZ:];^nyu~@Pfl6@ɵ :Re&Ma!,SF<2SlUՊbůKɺU1@rw$3|B+D[ыaSs*oĖ z!$,"<Vl;U*rm~~`;)dhH}zfÍ'^9]" 2FFEUZ$a)"ٜBUCQ,я.f1x2cr]br?U 7Wʽ^w,&tTI09ةKv=8/N x8du7 E( D|U >Ԝp}*hJgϺ4lh,rѳ &LW-,N؉ €l`7iQE&EgRų3ĹbXyº84p6fcL[ey8=N.)zơ땯 2R`P( #^K!,1;vSvȂfcp7jdbuz=-)U*]ʿD0%,'VIp` 2 1p9(< dz)@PN'0>٢nu"fP;l0JQv:ʎb(ףy&*UR&̿dڍgi(=QӫTK&nYck3䳌4YF ð, 1C,xJ: ia,C/ٺ CɺuࣘGbZ8vmҎ`,CX?IENDB`lbreakout2-2.6.5/client/gfx/balloon.png0000664000175000017500000000146012140767213014723 00000000000000PNG  IHDR ^gAMA a\PLTE(((s+++u}yq~xzun)))wq^`z^`^Ųb\O'''¯aN$$$`O_O,,,__PPJxBꃎGEk|DGzBTvAVvAwA ˷fUyCƳcUIHWQQNIyB!!!"""ˬPbKGDH pHYs nOtIME 7k^iJIDATxuYS0C-(* Je3* b-ƴoNIEƁr{n7 !I$a)d:!|xT$"Q+ĤxSY3qmUN$SYaΞƋe+> @win32_inst_script@; \ done # 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: lbreakout2-2.6.5/client/gfx/Classic/Makefile.am0000664000175000017500000000062312140767203016203 00000000000000EXTRA_DIST = ABOUT install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/gfx/Classic @for file in $(EXTRA_DIST); do\ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/gfx/Classic/$$file;\ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\gfx\\Classic\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done lbreakout2-2.6.5/client/gfx/f_white.png0000664000175000017500000001073712140767213014731 00000000000000PNG  IHDRbKGD#2 pHYs  ~tIME ).,ߡpIDATxS\Gv?}@f$zeZaK*/ߺU+,փa@ IC@x+N%9Lӧϫ܁A3oW?d- ZY` ^i1b9סB9jRkInk+=)#OdUs:3ȁ4i ӭ?<_V/t)p^@2@ Mz͛!e7m `,8$$>\Dy-mx.jd5$D)AOVqr`Yބ '-[9YO._I4b ޔj0]98?O5mʈsa{nRTE$u|!>J`-j__~iI̡1HB"Iz䬵EQLרTG|ER!IQTm Jp Nivތz0UќWW7\nh%CU]/km{C0s@N`B*|=eCA1viihx[ 8x5LY`^_bЦ$E/aaa;df!xYs^EQBu SkS5DNڧDSF J>gT& zOnUH(1ic@=axzD'G\?х]b+hcdԄtXD" $+J>~)OL '=$~Mk4h^5g&c@#L'/l(pHIՒszNex 8Sun$OM83uj}S0b7fˈl3[HEa "I pwGǽ,Yx`wH:&w@uۡTH /$@+f榁x'`bO+65C XbT z2E^2_n&CDlsd]-0aߎ? 6IXU!TCܩ !ƹo9d*"a mlK5\oT䁒r`C*p؈z#zpgA?#Vv8 ?\N=_FL"VufZm!PBh>kςvnWAKjR=723ջ%f25MkL k%p{v_K*8 cN |렢d]! xb7菲yLV7}KQpR"EKJ5o-fmi >׀yu)P#"A`Hj65n|Ǧa_ކ 3Tx9a8ŢO rGRCrQVݾ@ [JȚDs|,P{S27nD4##Pl'OOP\ e9L܉UCiAax#B jo>Ѡ)S+SG$$d1^Cjx J6״c\=H7'_nwC"xt l=,!4S?ΰhQ҄t0"0,)_h 1 aщ>eЍ@:wk ct \'x վ$Fa[ ((y_뵸Xok]iS%0/տ 2"@1NN#)\=MKcl ,upy~܃S<=:x W]KliĵGmgB̩k UݞֺXjۍӤ^\}}Gӫ|=̜m}S&ע+q5@wD s*{KvO;My` Z#ؗ']1{1@zyp S _۽~ !+@ 0%|gTBۯt߯%_i q[x+@9 {v;5%fj拯{|^)bji YWP^ŮXwP, 9PmX0YcMP~.)<+Yhֹ)\21zGf˰@e2m<{٦ԻylkU<ةw1h5#|&K̦ǸB(%HKf'W[t"K\uyV}q٫{R.^돗jzsS&h0Mxxuaހk&XP,5KnB&i}<}}&cٓþ@qΔ5{a4tۍϷ~7ds3<(kQJ-՜4KdCtHe?w|z}nf.(xMP6w ԔxQPHmfyfqm|L7ɒ$DdE%RbM6 [pyufzs Jh{o/LD8ԝT!JkuΡTt^+[p֍q8;>;.=3̚cɹ )i}6,nKwxޝo;W MW?G'udX $"J(2) :Z C*uV,Xkf.Q_o! 4R3jj*riQX,KgM4D.y;9GR \8wLGgNJ Tk Ji{c%hRԇwR^E;'qGn?{cćOb㋝+#qwM#=Ֆgk*JR:EB~s嫭p,W 69`ƣl 55R.vGuBOI}oNxΑS@lIt >x:g?@N`+;*03@;o^wH4M:;F W0lIENDB`lbreakout2-2.6.5/client/gfx/ball.png0000664000175000017500000000262112140767213014207 00000000000000PNG  IHDR<  X.gAMA ayPLTEzNvR:Z>v.F..Fvv&nVV&"FffvvVV^f**֢FnJ**.zzz  ުZ^6R6"6"ZZZ޲JrNzvvvFFFbbb":&چƎ RRRn nnnVZ*ff*B*> ::::֒V&&&:::""JJJʒ...6BjF6662R6jjj>>>Zb~~~V2N>fnRzVҚ***.  Ά:^>~~~~VZNNN&&ښN^^^fffrrrVVV"""^6R~ZBbB222BBB&.J.jjjj6"Z^v6V:R"">>>>^b>^>^&& bfjnV~ZRz 2".J2cnObKGDH pHYs  #utIME %:rPIDATx5OqKtLJS\$jI:M-I: V~RZt9/sM_{l'#q n9N&$(l<= pU(=L4^(Iz w3iVa7jg'.*+7?}V4QpVip"c~CrW [1"6q+*103FFfD{)&}BW^ C3_nX=^ԍ/ *Z'ZYr‰n }/h>61Fmfё:*{~jD].~]@,GG6N6 b#{";"> Ž]DQ%4D1nRm3J*II1 ˫~:T./LY Ir6VsƤ))ᧇayXCbq\6mٸ?wMkIENDB`lbreakout2-2.6.5/client/gfx/loading.png0000664000175000017500000002044412140767213014715 00000000000000PNG  IHDR5?bKGD pHYs  ~tIME%E IDATxy\uk{===Y5m`;m'y`x K8`lc`va#F hI#i4uLvUh!+ٞ|{Ͻ:UN`YfeYf!D/{wnG2{ͻTqo#aֳ{g,R]D+oh !@@Yi?rp!DL@ ((r@ap"SmeöՕ^8 %df!Z:14itLضi> 6/]nSY]Q$@fNOq ?iQi\9yJ02j,A]ho@I0F_u|[<\2D"NƆ:^WKRF;;ێM y spΙh> ObWdYrLe |_uۦ?\X9i}O>v " 5,[Oˊ3@p7Š*X_O3O~ɡ?1B-m_x-cAy8ə!S{ڎG>\uyQ=9+cA$IE(.wimC^IX_OaWڷk^w]?f!M7.F۶lb4CķnL%eY|v烮\mY~4VDB]s\trmn磄p984>Tdlt+Vt.9@شel8S;|`"6mh%?_v1R`&?P.DU̧u/n؅Z8mBxw;6!Z"1uРmXb`omt9nmiie(cX1mbۗY@$b:8_amClˢQQ&{OqnN;{qN9342'HJl0N#;]!Ym-t ~.v! eF31]WU0.JLd1[\߹,*[qpf)57L|z*4<$S ,{sJʜm@mӜ WEY%%XT[\+x^r+0ǧT*eS*) '+HtQVlhpόv ;x@Q / X4L"s-3X~U4,m)k%4t-f bN~Ae/R #it:ضFPcDY۴dU(Dn[ej"1pXDtڛ,mhZvu%u!%RB)9{@e`^ay5 U6QJƢ$niL&M0,_zŖeWlus!j2(,2u}jbR^?qAyؖLE@"0f B; kK'\OTBlˢPBl_ ^s^wm5}_g3ϜƖU-[_~{ r >/ wi!BhkoBxO/:p<[X ke3@K1#_AAAft;pt-DcwU\\\^^>!;]Es*;AQmTSc}ʹWwy\ŻH'⽧OGu-v / AA+blRJ)' 8iqys5\Sиg?8NQZ3СʤSwEQC{l)BXRU |>QӉ@yt:\N(/ *>3QEYsX<={D:rU٢e,`6a4>i?-⒍!뙌HxX50`|T~]Mm)Pe˅m˶,UM v?@zy|59vPoz"cBCS3ю}ʼn+ffD`fh&B_L8ڌ(13DrW\-$v_L t9}`ey%e+NUUA2 JH6_8ʋ TשxZDWiPBiBxA$y5*m/774t=55 446X,(J03x"{ȎG~~[?+g1`*"vtMIudɐٶDDQTS NB 1jYfVB0I-J .iG' BaX155qkٽ25 /Z!Dc?Yģk6SBh,4P[ X@ˀ3J2:2 1$!X\ZZSlR!cgUUd2ir )txo=`ꓷ3ceB@L9q 8yIސ2J&dR3 J}: ZeY8!6ˆB޸Eamd2S4LPB(5-1u?"O>SӀOd>o^ kdtz`*X\*28:9qia'' \*>C}1 !4tͶ?Ȕ{uőX B^YW8,ۦ b*6<Am^X}ў߯ƦOqM]%=3mi& DMȃ¼UgT|FKe*"" DhEp(j|r: 뺮0BԶmB;WFĶ'a1Je1`V6c@K''GO^{s{5˹yF2N| A:yײTc˪6ԩdhplaPyCc%sL]'ΟOE +ꗶC@`6SR o= 4H]n%'Ȋ#XRV8eutrtlۮhO&Ny s M+(b1ƂU5B磝g[m'϶OOKH2N)mI|N~L0JK{B+jnʍ+1a^Er }𒤸N )24kxeƘdqO0 00`i% MBF)D(;iHhh4A\{nv-Zuhxpʵn9t|C?5Yhv&LƢc=wPs\^Yeݒ5S)pqaT<.,StQN'Ψ+EϟBFϟ.߲nRS,C|ՏN7_veR$IF)/f*)Iȓ_4 N[nk4ty7^3鮬.+OD"T^߈9 95CQ]TZ3B)c(ϙ2z&SZ * FPA+=9{c`1 !0%IJm)nwӪWr8c+Vܢtij{ڎ/bk:MW&'߬gTb %5u_߱5Qvl2]Nf-kFM ct,^\cu/aJw?`lx 02S\t`C#:[q8C*RIFV̝/L4k}j:c#.S碖sN TvZyāV4.YR?6.[qp,ˑe|k7V6obz !ز sBxdoYj/\q^&)(255{L'EIĹA0Fn[+---))xwgof"Rj&]y+J\tP(4002ރzq\#=2yQU7YD@?N  J\u?l]511aYss6wyuuߚL&A!9>r{t:nϾG(H1fek(HL8|.Kg(!<2iEJsҶL^=䉧m_ѴsuLr|4MM]^LLsc?/ek8rxڍ._DO&vU:q䅟BxzxOgֵ>y3D]IqTm[VE)!e1J!Kl;[>mo[&BHWU!%$1=ur^$yẍ˯Rd!yCbGtmِSXpms`[4t0>DK[j4|~<be0TV2C/O cq<0(l` bߓ푝NeZ)yIƢACdRXh>OEX60{NHcEF'wb#J;/[#p 'DYFe7eS6 ([fj B -C749Bۼa;DO_s:˷l[t"MMSB񉑙0C[; >:3j*);joy7xj?4x:o''s-϶lQ&UXX(J&VUն7ܲl\]Mj;O$oiN j}5heblafam;' dx7q9IDATG0N2=5A,]/ sB(! X8MƢO]z}OHŇKrN~y Á}@m[Ķg"@iYu$,.)!2,2,2,2,|IENDB`lbreakout2-2.6.5/client/gfx/paddle.png0000664000175000017500000001472512140767213014536 00000000000000PNG  IHDRlH9gAMA abKGD pHYs tћtIME  QW RIDATx|m$yoLl~yw$M|t&e1 01(ȈDH`;F8;# l@ FF!$(2ɘovn?gwzfzΏ; _,5OU]USOa&|Ϣٝnؿ}AF 03nl HbF^P-(i<Ϣ_j7)m:N[ Zl+sURR!6c`{-'+4 _T:.Nfu~ю|P4Yϱ2] 2޼ jdY'gE8g^|km;HO4(8GN?>N6os4M7us\8?e8}j|v‚tv'RV2 $ B?IO~6O|_ӌpTB]]n.Ν3gAV$GsMʩE"ݝ 8 ʪy+~ ǥ[VsW/-u'+; f&{4#$}|jzS4K|YU߭H #eG$lG$cbDr+d8 ,r[>';}/M?B8w5SweYYQ%.2ϑI/i&YdAݯ:uBrG>tKDo]Ӧ"$^`6DsVpoii<1gKQ'"e8쐁|ۗygK=V3hޏ?lRss.$;jZV/!2+@ ,F RAq.Yd<.섕 #tB"@1lq@.%ݽ@ͯL9B=/gN%`G[Ǔ&ZsFdu:!sD6f.Ot"sAd`>XtP32+P#$^3XzprPD88wIXa"qJZd&EzN\EP@W(l wCT5 0%sd`UgcVx:'>~{Pv(*529➐1c#?&41U1_RHMoUu}P2]˭2xݺ;K}yip&|x[oqSw^1$͒ғ_76;V"Q $7ߧ3gy /_mgc޸`Kt\r}=&PW,ܗ͋d8[V<)g[}򃓮Nf;h֒<>wxɵ/|o h5"Ap 6q,UAo<zL;n^|_˯\|i!1ۿQU%z՞f>[?Mz;HAwAצIޘȘua$Rf(炑E8KD>)8<3Qlޑ4 lWxrWgʬWy{uyenƍh~~@ fEd³ngYK=z~>4J,?f, _k_ /ɠ+h;\|3fecq6^jbT`L$I?&컉C2 (&y&KŚ7.)fu1\pcW!SDpjX7hWe6Eg J@J3j/|7NNh.Y4f[V,;lV9DZu:e MeOíරF"v)WwT"pᏯ/[ʌ=u%L @eꣾzk@p@LmXT=6iZlkҊعx=hxk{pfO ?rW9:ljPW+uv :y(@Z 209>aD3WDewɴ/d x94'Z{܂7_u" 2Z/b~S˷gpQ948Ӎ"m TVNڼ 3S><Œmٖcb72C8HLmx2C73m`Tjn5L9BB3*Mq\Y[P9d6%0PY9 %x0z_TMa/Efx'ot:5!V!Y8c)(0^黶;C%,P%ay:]XV^Tu]w9z9~E=͢y_9N9BՅMD2$e'KHڑz_N9 ErrCtMC|CfO-@Ga.v 'Nb{JN?B4M@*hqF1֠tC=pO`Pڦi[KR WTkR2c.#̬N=nC\מGԅ/r\z}`w7@ǧ60GXxb Ώ8A 9TR=\dמpDwIcqþO{~s41 =JzRn UJ$ÑS@I. .7,s堨)F80bۃ߄מ drWV /FuC(&8[DPSpN| y |m^JMuu亶^oRڴ"XۦWէ9 m̝)!c77.{Πwc5V4FnǑ~"2./0΃%`X!A4g* 9Fvslc`0XLTN~mcO/6Y!1g2.H~]mwt%3NgB1gYH)j4c_j'fc>W 9;n;XX[ʑևW)`!dNl6=HV[57Vf:7jU9Rb.Љl 9.ߓ$<*DmKMM#*cѓ mscrɳ_޾}hgY/hCSnnHm)fZ ) Ǭq c,;l-p aV a= ܎E*v9 ]XY q #fmAblM $a(+jv shqKxL=5sI2 =m2'PNJ:QA.y5R,tT GP~GmI& !IENDB`lbreakout2-2.6.5/client/gfx/fr_left.png0000664000175000017500000002340012140767213014714 00000000000000PNG  IHDR(2PLTEs\ Q?01*%Ȱ3ɵɵ#  ƲƮʦxrD+ީW-hS B:6.h?"ШG+]A)B"ϑot, aNzb" B2[H0& rrn}j`ʫW>0pM6_J?nNz[8žª߰ljpzv^~fJϫ xgF4 iR7 S6ɯ:!N2 [F8* U4tn_6+$l:!Ұ3ƫ߶3=63~T?oB{mɦzuS6 zZGš<2*6&~B2(}duoS.bA,#fM&pS2"F6θe Ʃz_N{ff7!`NBm\PgA#G2(sapRA^A1 N-hJn\:*2b9 B* aKfUϚtջI6+S9*ڽK >.$uXD.zVA q|tschSF}eWB;*iK5ʨr^bF4fP*."¦. tZIٞ*&" WB4 fFʦF:2&JA:6"}pJ.#?&:&vUCmҶʙJ: # 'hM?ܪ~b\꽡jX= hUPoVNpVGvaN5*iRvbX>* Q@8[F@ ʳ[=zM7iV)"⿪{e/vfC.%M:0PF?aO1&ZJʟz] t]QZ: S:3%G2"\bKGDH pHYs K K5]tIME /b IDATx\S8YVcEivI!gOkTcqj1%AAj, FVȭB.M 7b=dj D=2GArD"9^?ۙ(!\GRG&E6χ`D!r>+Λ7oOYJ6 !;G6{"7{1͌(C{Vn6mF5D£BVoB𜝁Ģ}$0MhOxV!c^2|c*?L XEȼ>_! Gmrwy_ /~>|\£|s'ySgou.N=2g܏0'O%-q6a_bJO?fO3ayvF~ 4س)+~ZJxTJܪyu[;ˡnOg?L&ޏPNy48v%J  +v2T3l![!W''Qi "eBf08 !2Xµ|rʠ&+Sygx?潧>]8򩛻%9X4Ƅ@hE6Ѣ/vmpV{gۇ?#E1-{;K6c[nu?=je Æ{( f?&ݭڳxѢ1f&ԢmݯnQ{K~s+}JXؠOU}bV|RJO>n[ٍߌ6*M~a-=ޗ/5K-u^㷺:trc#P-w͠>ieUsREc)植8{ǜM~Dr(x&*h1:_]nMjq8 0ܨDӥz?>5О~҉l*>oq$;ryۗFtGIVl00ZQ6;D7&-ueiTVPAkAV.rՔ֔%W,cK%]էy"GMʠAo@攱e5ǫR/VNu3QГځA[t櫻No55]ێ5&>܆Zw6,mu_wIUwWVEq@QY@Խr'.:^uzkmXR%.dwq.RTNInWK>M|+5ut[pzXe[}ǯ.2; Vd瞷t^Vz{-TfF<x1gwWf3]U-EKڜG{|=.Vnz" Bj_@νb~U;kڂTHF {e{Ϊ1K9oH# ~'aF2b.&zgvWڬ{FNa"KF=M|,in3 nF|KT?\!08L;}rU6+E%|-O#y7DA"퇳 e$_/I$wpɣ*i+OsL "Bʵ>0 <,XQ29u`=j'&mҳ17 7nvx^ϢdW+帽{K*֯/_g} *aAAȇ( \ڹs]A튅˘NV=r9oRT'⻬$=̧nriCW+SKGV j aʳ$>xZ{Dq r/9@Ģ腣-z'q+lI:C}|?m'F\K]8lݤQwNH JOwXA-7Ie3vK-Y"ʟb1grߖZK-x1Jzস0cQO#mG38i eQoE^ue*Y``||{/bWlu]ls gulG,ͯ=yh_)͢FށʴjEu\8l)H9c+YQ ٛN n595}XyԝwlYi28 2κ@ !kaZpGGsfUUsp?mܥ+WP G3c!%ג-7{,ՂVLF>zi^>/ Tw?/ȞebW1 \,"@M ;JkV N};' 6N-Y4ϱ^l/P.PGƞ$JC>|ϳ#Ć:07ȣ<}@&5r@íDI]51&h4v(#.^#1n^! Zc,zyNF @i> 7(=Zzv9b>|\wq\fCJYж ׅI[/ئf7:KBT֬HƌӤ|Obؔ)})nQq"iN=K7Mb;M51. jsH] ;b'KrKR0Q3u7p"=`@EuN[ EAcN٘A]IH f&w ,ywWtL2br:Gx@6ڬt4Vkv *3r>mV?^CLvo'trD)BJ#SNYV&+Gmi .Sv[2` .xW!m%twI_,U_] f>Eǧ V%iJ<倱zjtA&uT`)krl- :c:zegX+!)8[%)^x7Kis%%=+ԃbdq4 k '-iD. nztrVPNk5ڠ(9vipP~ځ18ˀ e?Xwb 4rO)Up /tA [%4wkz{*}H *r,paii6?tq+,i*&61}(2ûx8qpYGW\»;M% A9S,4o 1q FO;Mʈ4vK,&t#r拊81HF$2\y]Dh!=rp\TwxtK/wV"ZXyk11 =M!ل kX4m8qzxSN}'.P.`Vf4]lzC;M^3ʕYP;G/Τw;KWdT¥GW"]Et^1VBʕo0T2I3}vJ"'TDtgNsSqhԋ,; 4>4Sn~4MfĹL ه4[64)7 Un󀚒o-]R%.XwWuNSF q`9׷?lc!R);^[sލC ۮbJO~~bn0Nq?sK>Ž4b06=u/ww?2Q IƗ|ɆX-f nxXu)ii5s7{Jq@[kXyHԷꛎeNeNVJ$me17F@ O)d%ʝ(ncJ9jHo,m=P0N]S-6}|mcDpM~]Jƶ`?t :Mw:}y^Ll Z\G(u$IrC5:igW\E=w驟+ z$Q:yuo"ʕAEOJ]6U߾qB"~-&3}34Tڨ[1Ux-Ic?/ee0]\+쿔_iӥ'"rn2v6-)\z˛e`mum3I\iɺYK2Uҟvy-T-*yK(Hҍ|]M<XaH+i riٜ^-ZV^sJUsJq]Ib(t9 ҥի:%vg Lj{`#[z~bNN_Y^Y}k:MZi)̻{Ϧ[$k *i~x^[cN겤Clyf׍& 7t$_+y\eif"N%WKD(Ƌ)=V0 rɌ;Cm_X'zbI= /N3 Ry,'ZtAO@*m=¬ñF\T \fe] ̖ ?K?qykuy8@218YCgDXa"gJ6gGѼ P"]#W<.Kr 0+2quy"C&՜>X2t$)66BdOQF`4}@hң(ΐr/x6ÏBe$ eW: EjP析ހ PLk[w17db:4v%@x( /Fm2c|6fg 'zm 77a#Q8X-޴ݨ@<> Yp4& ##1dxy eLg+ V!dLzӇY0|)݌ h4|MTcC\#T†J FdnM>v?!(vp3. eGi`<+8,aSH;p2р.69$,2 epJM\1,C+dہ^j{HF5*W/diLÄkmP)p2K0LhM&l!+,:௥?Yߜ^|gmx?mHwJ߿1h^a048383B`TVL1Sg=5l3lV33C d g&q>LFJLT&3pat3fIʪ,`S-<)!3W1f}c@fqfXVN(LMg qfz{%6XBf&N-RL1ÌifddwęLŶq S@=Ō.ied:f%dF4͌>_DSB9Cf6gs%3F ah0Q3(̸!3u 0 szIDAT ZćÅ;acz-UǙqSG oό 2#Wt~Uę1! 32cZyZC {> t)f̔h S cN%dƌa@Qalh321 $K(&PM4gO 465dL}fsF+1ǟbfdD1Lwf|v383r6gFMSL33>*fd370 +1cLyffMf yƧ50 6 68խDLfdQL& 4䙯3 Ln3pmabf7QǙ!h4 Ff#L+3vZ0a3zkm 43ng l<3Ō+ShC: d7L?{އw۰vXgη ^-'[ I p@4쪬ʮ@rKfttTg]|=3'˭`naO5]K[j_j<ݼ]<:󆇗{[_g۷|7-ֽ?{zVV)4"Ѻn'/[#ٻNh9nQoZ[zzlf1zG~1wHMr2N4nu^w~=/]xk0;{n t 'c>cҹL[,[οg?("@'h@ !HA/:$ pMܬ/5~ףW=Es׽UgD_sKcsP-3w=uujNu?@NNȩܼSDcrSQ5ΐ;JR=_ط,w0uӤ'#ڂ<נ"H*DZb"s'XVNpv1^W/N D Q @C@ VFC`::-0DLa`VvG`\2\>=>t"DVƲ-:E#S:%-ο.8sϘcmG!&--hYnu4Z@JTrKPJZ␳W/Z* Յ /~SKB"0趠 @R 7`:F(d?~BL&*&GF&#ۜrGHSiHEɹ-H]0Q[PULN|R.ܡIl)}ǜBJ#)JTC@)hNtKG]Tmv @0 p!{Ϟ9 Z_\F?~GiG}AmS^0{r~˪헷v#qcw n NV$zsuv?\cOAfVqe!mwPTrɯ| (wBޙ(@U>=66)A+J$]aщuk_<.:EQxs~_sqtuQh^g߱ȯ9\6ڢhFݿh T ga!Xh:(L3b8p…PkrԁF@ aA!AYp>E!\7D+#D@YcX$:oo ?BmQ,ڻЛ H(%dًgu=Z-(e[.()v %c W^B %Ho TWviŵdf'$6?qƌyJe@dOA4|BTet) 7j]Puh HZflfG |ᐣRcxV 0m_Ý*Go !UR 6RM/9tkwTVA0"R=c7\ ;wQfy8:p2J!B!Zԅm}NRZ! %Eu (sEb)ĸf]21xd],RK3-xdTj)TM)UG_~b+7L}ۏU bω;lVIR+D$Ua&'@l JjP,wl#rDXel7K>ưMx^WO2 G{0a R"Zmjfa @N{{J<_(߾r>* `q/ ;mRQ1hFÈȧ"ZBQikGً*VOGVY㫻ϜU qX4z,T*[ޥ]GKʧn :ʾ9ewpkm;g<V0#;~~ijHJa!} @E:f˗B2+kmT"eΞy2j&4g/';Hic:B.:hGzF:գNKuؼ3StΟ;F%-0[+ K(~`pV D! _ @h)ItO ?CEOUHx#( 82{difIjwnk63^; }*2_)940n4_j+/6~KSk>MMNIͭXP>PK;:ȣ+ѼzüV@{r6G3wz\8ݮNfmj. oz/ ȫ:c9*lU\Cj.tu2?Nx0.tL#7H6"yn _B" 2 B"`ˉ&T$yM4PU}'֯^98 dZC bT8) a4 +%(Ȩ-!jkwq HMIh4|(=p\Dd.7ࢺOlog#%@>"è+eƴ^!R;N!k+G)HbAt[`}]=7_ G8F3|`sB6 XÊxSf^-͆"ds\-Yӽd>ܑݭ8֜淯i04fu"q'^x?| Xn!Rt0K uP R"J^ 05wHJ1y:{0BPƇ~KH%!OkHT VPAop WX3>I?O; iz9 fzؠ.XvwnE!>}ƺ,ZF3F"uѧ6> RJ* ? 0 D?5{hq{nG7~X?SܻizXW8%ƙc41U^:coP} {0W||XhE1gzTEr&6CS̹ ueJ w.,moF7^#)e\YX:x๧l#WcǫTcgn~nֳ: w~M Z?ra(TAAs”(t?<}f;@̓5[ox_+b<1̘lzz/~ͮ?$LlY~wj}ݳ@њaVZoJḿ TiǕa|>%8ƻA!B.ة-LGp AZB@o!@EmUJF .hAE-DB)n_~jTZ3Qy"1cNG:W&VmF-}FrfOi"uohJ4v&R0i8{tLz3{f Iuj93 `:K7]<ZA;!<' a,1S=L8@A4[  5^7,CȣAgcͨ+46H܊_o\٣}Fcm*3jՍFh43cOQt}zv0q X2FU@kerb@oyc|I+BC0v?vBUN8x|l[yq̵֖\RjUVˏ=t^ "Fu, PǾK[V.Z]}ssG +t9J)EtEy&(}ZX^F|BJdFuƑCК`pΡ@c):yiѰlMUƂ||Lw@pmj>pm==g֠z35ϨԩSuOHmkkaXQAG@)VJG(!rcb-|j1HQK KZYY*)Ճยx7OI.9mV0VЬ>Bq\Ƴ1n^Tۋ@>`y0T*IP)*1_rpkw9.[+I5|?ѺGr!6~L*HRxz:}&Yw{wz=*lkOU5^?1Wؕ/?dn^a4Yܯ z0t^t>~AQR@f廅Hw.>(#"_"Rw|sFfYA6 C !&vO+{9\QQWFdYgP[ui/F{UםQ ٌăeϾU2h,;0E^3zclǠ @_kȻH ΦݳVŁj:Cz$0K1)p&Ϧif.gq5ykk )=lxM&:- xq~/G#)[5Oї(DdZT"?TWϹk-qrHSqQ9xۑ.d&-g >^2OaJkM=xA{mM?Zk#Hr"zG|Gy9{k+m < Q+Nu- "*[+:[{;: uA~ej4 [H<0&J߶\q@<pi44~AG Cck~]ÑO:T2Kr.R*Wr5wh3V3)-󵇊,`0mMࡇ@SUM^U4 _1FkEBJ5BROc9#Gp`Y$gvb>hg bt:lS X|5$(h[Ԃ!:2 Tk]emmƌ-s8_ KtDjǃFcP7`˫6I[MQn&"q̫Z2& p ! - $&V?|88^UY:LhJ[w'vD8 9uO&VӪOr ̡1?Fu|D 4sTg!mBc<_L.2dק֨o~zds#U[_Oo}}SFx;m+/Nh~{v~WmKowOآ@(wA 5y'iG94Qfӽx0۬^}ϱy1VI`c"s. IDAT,eQ&RKDWAQxǫƂh,4TSN%YQ^ck}64T7legfX4@*3+,^s4`hVәym C:m"#"kD0lHѰazbm:??ҚWy)ٜuW~\ Vٌ n"E\@qjʮΑHV*RZ+ev4ڕb(B3kk gO$UI%y'P1ay)XZ)8!oG,HQ~2,eE!S0hhr>5}ÜV T^q&}N)yN2ugW_^CNCeLCpB!+^NıhJ>`)fjͺ~2q؋[=Pj9MiԒvauٻSMx9əV/c $NGHḕ =Ik`mxMf8qM.Zs(p QLYuMߏǾ3}aZ[h;ԩ,B*n1(%GY7UMf(%@`+[~ x2koo_Ke۱ aCE tdMJ)nmUZ-L n'(={>e[THLX0 P`x< K%2- w:;v'JV䀜*L(:F9%[dtq'&X]Gk% vi/ΑU[85ʭj-j! 3v%̝>{V( ƝZ+cTi PxYܠRҏ=azqS|!Y!0k?*W6 x?{__+οMibҽd0`x9#5Q5(8n?94e2@TU'߾xsh:Tqk*4U^w3{V/ZKWk j|Exّ ӾU%esneHy*zu^Y 0l7#gY,Z/dvvN ZՒ$Ytw|j *O@W˻r@cԫl̮ 80Q}7Y-:GMǕ 5dv݉/WjY,mL\Yə|6/$3sVco_6I?Z-?h+S$@5F& GG+֍"W`brX'yGv.`PYz#n5޾QzQ/숹I@+vNjyrQH3MQwٮ@Ygff јp3+f0=0pliiID@ς̍B4{_+04tt$P喱uř10ᵥ"Ο\ Q+[!`C.A8#- jeΫ6"Nc,dؽ~0a:S+A9}[/8lp[b:FlzUMz;xK:bEJ Цs )w i/_(6sO ?y^a!>;g_I8K4qkxE+Ky16qIJ~u^*lZ&Yũ팎3il4fVZL]԰d}'LfVu[Nګ`U2)GE@;Hݯ6eYNmOIӁ4s ג_emj?4ý\ktR63ڬ9 bO'EhSPK 6ZGvW,e36#`\nVAX? 4i:nYqy!SO$dY7ґ璮ӄl&'eME:ͪAu1'<{>Vx#V#3K "zr7ъh #7]o$d Tb&adt>L45N) }=^Qp a?ljtO/HcDȔkfV0!k+ /U @{'MɪU&jzn~ޕy;Qwi"d~Ϝ_41:41XjA#|b`5.krK'Lz`Q|S\ifϚaBU?d&qg9{3,[M37'7Np):YP7s5k=Sxh-MR;a"z8'uzdaߨ'6qld MkȄ0-w;cC>5][Di+I_OQ9aIIGѡ֌>A2iZإWM&S ȵz {(5VFpeg+ 7[% @Z펥Fev2OeV܈5Roi`zfS B5tx`mNduEkyf ZNG6LKJJ]>s B3pb)<}.X~*lavS]&$LMG(tD~ق3MNcLTO o9q3ǻz3}2WNTolci~ƙ<=30%T.7!E]0QWADb~G[w,-W~I=ϯo?O|s~u?fn%8n,iC9;Y[AЍ9F s 1DdYηY$ Ș%X˲[b_e85La,K+JH d ҬUJ3>ƲMH~Pas5߱0 *M2Jx1ǁKX 7LM, fߜ觉pIs~6HoBiQەi9^R̳|8\Dkc,4ҘiQVV@+-;\DFn _J伶(p4P.wYdu37#F{I,[-M̰Voix hl+{渕[`l=⸕d< Os;MOp]O<{nJpwhU; ˊ{R3Z+ƈdHFIAAlVf8@ٌ}ZkE2 cFoiYN\Xo4,c' Nst팈z Mbβ ]gHьcH;iD¥emT7q_mS,0%4c^ @> C~ewC aN ,AxWm$'Lln=ۈ=w M~NA|bQKr ӡTɽ%x $[GeZ-j]G( ߞ΢Ci|^JZ0Ķu)v*!CC:"<'"j_0-az@Z+3g,͡L@&wsK&H݊w#ZBXUu?N7ֶWUhF0g&C=mƘ:_"dOiFNKjR K(ŕ_s}hJoSK x`8= {En`egh.W [vXW`x2?k ^m V@;`ĚRjheg!gR#ÑO8| dž|u^;)E*( PhctpyM 3{T,/:swm:vZƭ5n {brs<ϯ_L&XLP0`ITxsJd" E'ۃx˼ K0_9ql>?z[o4Gم6U6G,$&6hq/zծKAvZ--.jKaLy0 #ִ_{e.]o~f 9sZ=}?#nqpPMY~Ubg[?X~?cn)h &uj{!i'S@@o{[A9np땼oY(]c&#AkG [W!%ݭwÉ kvrlNEQ9D% |5hxP_́U;/WъTw3vr*@'QA:^ ?q8,6dLnZQHu69!؁I!<$@;p/wK@Aӝ G:KM0FXYYH8ٞaSdlVu7{fW_aШ4]MDg}} LakgVWid2Kaݚ%c1;N1fҕw~d"IDAT^;{dR&\s+˟B]?C5;f7OGdcM[ a7sϽ`_R^\0+-\?+dNTn*>+\Ѫ|!ٷ)2K~YcD !zKK^xwo --T hD]:/|:rM[t1x5`d&E|ICVhA'gOgCr像~Ⱥ>y*kI*%IjE'?īϥc2dpzꏂ =*9Щz$.fƟ^V tC>tudntyjFu\ 5/7g:vAslljŘ G:4y &2o}y;+P/mS"{iyNgs즇9USˎOreZ)γy#\:o u2?⢰;>0C.O`;?5YD-Wl_)fA{{pb1&QC)sHX:獇QG~Jzy;QcݝP2]YJ.\szsfsnsTB'4o݆͒zۓ&bI,1",<\b̐E%.a(ɉbO5dȇ4bXLhX;Bt\>|gcQt]q Du6R"tR/rv~Co =rdZE vHK ZcM([ ok'_Hq~+\%F Xٷ]`#heZ  WgZ@i z t4Sc [6/4 zCɐ?T~l)Ma@ȧB<]YFT-;LJOS~F%WoRϫ{2,OT['7kRE[n[𿲃g+)ce ONcv㬕<2X8ݒ=SlRIb_JޭSfJf(zǟygHyZtN;>o Q hܓ+ֶ`C!\$R%)\>cOW~Hs!̠+د~gi|6_2ѫ_O0J.̀M 2L4S}~ Y+Ȅ?4j~*hedsh<C/<ީ ٭%tiD)D&]Yf"cWv8K"8r˗HKc*OyLƅ.\!2PcEHO IVgX)$c'} [o|0AK*"ӹ37߹{'fxNG8"t@NoW juY;dy, > 25[u@BS\8E?0`]M:Ԝ3 1a a-+$+V ]"PmmZRED6lo)hOTmh-EQPk.8vhwOvٟhH3O2$CVe!Kds$WJx?32o(wMa }M.5Na\:TZs*ƙ##OBr@!ʧo76Ѣ<$rgQN od'q,/hbzeF 4ў3lw3vvu4pS!M:EgPsV뼐cbtjxD:G5%G;R5j}llH)W\].*IZCkuBQ5FbqQKDv?'%݅5!@Bd!VMhL(;@e B-v㧳R͟J`CJy Zò!H ([n+c#W>NCD 00LY}!to浙9]DPJIdlld~2^0L-_"uYdOS)$RY<}C2˿z ,]b{4kCX%\6FZR0)n$N %ИTDfV8 .LHP5 vM`x Ỉ\Oln"*RT*YNѤ <&U `RNbZFϖGkׅ<*kF vR5j# R>~V-օu}{JC,n)lK@w .o>ϜM._W 5qy8!sY\P0*/Wnm\Ba9iB܅TuB;r3 Kk/`I@XU `HZqQ-m)}ڂ) Zhh* #.?dH(iѩ_-B/ODRva?ïNmX+%.5|^oߚ TWDzxx;VS2doڤI< i2(KoJWV$MT(8=ıSߜPq~D'jh.f,(7>^l+4S>N獫W_ǯbe]V')NwKC/dJ|⸷F0غ_X@^v\NEVlȹt>D:W RjϐTŸ7ZJ +egF̳qȨEwy=T${kN}/hau /pq`.{ `s ` VnCQ zgwmL) z茶Ʋ\LCe%p8#SS,SLMTš4.b-'a aj (v;6rNț9YLE`Y^e}5%Ek`]$!Yz!:*=c- >FhGf;^c̯1;(fg#I*C"wg;a+CC *mE,r}kr4f7W&9nv-)Vx*:!3=߿8ԻE(f:Ǫ`$NA[na#0T1FJA~&LW;h0ȰOPVX]vH!c 끔!Im-a!@Z Ib:HsGcL:A_~@z^nz?a9kel`߾itPƽs Gf칱+ic{=W[8`b+``_Qƨwݖ 3e1o)H6:Wbs=Rs~Va_G*=6V"3#D~{ƧBC#ox9S/;roe5nnkhRcnjzO%ERA*yyO #{!Y&yyARݿ䣎  !^yAln9H߻SWWFMLzX 5Q0\C!XSq8~JZJ;߼u}aF)8eajԅpJ^ Ȓ]%Ҁ%+m rЉ=͵+:ӻD"׏*c7z;oBb60x8Hh/Aj MѰ,gixX[h~[^&bFH 9=eF$,-IGIMfu^f$UI10QI<.{YRqT};;]kgQ͏T|g+7n7x?:9N`,\A9s+nM:g KMB=w¸Dn3On8Ox?cZ^l+&~[p `Bh>tY|}Gb $!O<Z߿/ErdTjkIB#t`sbǿ?9&矐BX?%B@> "$ )$W$`ξzoj^Rʽƹµ%vƺvj^2*!NB6fZJٶ~rvjnbVbVF:2)VJ:κö~rƾ~n~rbrfZbRIҾ ^RBVF?;RF:)"F>4²>2+¶z{ƺzprbvj~n^ƶʾzjZn^NvfVzƶrbRξʾº:.'jZNzvfVJ~zvn>6-6.^NFƺ~nj~~¶zjv²ʺʺrn{~v.&zj^zjbZJBznƞvfZƾJ>5rbVvf^rbZn^Rn^VzrºZNJB6-²fZN²RFBʾ^RNF:*j^VfZSzngrf_~wbVJƶ~nbNB;ǢVJFbVOvjbrf‚rj~rf~nfƾ^RFJ>:fVNjZRƺ~rj¶nbZbRNNF>ZNBvr~ʾZNFΦvzvvfbvnrb^^RJzjf 6*$F:.VJ>ξF:3n^Zڎ~rVJBʾƶ^NJͦ fVR*&jZVB62ӺƺRF>ʾ6.%f~tRNS@fbKGDH pHYs  tIME;y IDATx{Xwϕ[rH CeǙ̦U2 !X9 <,-ȍe!눓gCm hiB_wCcd\5^L vhlT~k>t}v|½ʡ/45](LfRkSv³k?|y,j[ok25r!W]Ke\`~lDOwӭof=>f%E٨( )b=|˼NR`jO=l?8!0cŔ,%Q62 4էBFn۱(H_dEh8M߶%9wND+I|X"pm?~\\n1(ɌA4;i1ő$cM/4O[.)Y~?n8KgRjQlF,ԃ{.ď;?+K/@H<!{Uq/lYɈHT8|QO>$8%^E.#'$Bꋐ宀AS?LPqab\G<|/?د~yGQ;۶}l΁7;Yn1$,(e%:{ya> ظmcD\p"QzAN4պ=89(iQ<t)ԨPPżx."nmgT: cX4|mNNIn@1:;4lYnA χ*iI!/B:n|o;lAK>D,%O4Rqaοۿ47[-9#6}졌["r_595h<;V:)j!PUۣk:h L^'=A8$?K :[8)Exk>%ML1@5hIE…1ԫs25AnxB!Ydv O!.FW^M':i7ǎl$̧˸n3|ϧ~RPrPSuُӲkQtKsWpE>ᓟ/6L?\=1}e/.b?\ 9%8sgCws [ kMqi\BeqP&FBRƜUcq>A^2L`T+TհKc- 6?9Uxg;N]8j] c_Z ]f X>t!U?h%"y8V1Ta? ]ө?4?Y{ۜ,ɨ4otIW[Qb.]*p7dm-?=dT̄ow`u5oh if†У2B>(NA 91BѥP93‘rq"a< ahҠXg);2g%V$3kM72?e엕yfu]%א]œzo,-J^P+.ETͧ~jx£G*i񜇷~;O\^HnTb@o;670w\l}b,&Bq{ic9d7YrI?l;8=շ+e9N%&/P}H*[X\1(o8Z~={Ԑ6z 8lzAQt*cCF#u.=:)'6>f*7wkk~w ""Т/Jd@.Tad(- elV{$lT.֣m,)GǣḘZW"&{:7ys8sb<}8Zt /]*[וe F*MXOA"Ͷ+^!-j949N'Y #mkF岲:%tf??͇=K~^Q3 ʥ _wm,! L ׃0 i,8SZLQVxJ5c1} yR~ ?hҖdAb(~J&ajQQ9=eFOۦozg.Y(P3܃쐠Y%[(( %\q3@ˊaS$Jdq'hter#OmQsǿqT 8CYtqSoDZY#>p` \xXLN5hw ֋rDKVkXD \DdaXS}҂Xɺ*HH$A ROgj˱c>M5LgnT@ʇ.JTe^Z?fS`!:ǮFK_0˗ַjѸF;_,ߢ GM^vd\jPnqC%H70^ ,S* 3)hT}k8ڪE4s ;'`di6>:}wT8ȵ:cݷuڕz1LhVQT0ƒV{4:F̬x(}b ;1">@n B9Rb8pP"oT`Z-ټ oiZ \}Ԅdgwr)Yx%(2JgIgg;TYJ(Hf ^Gҋm8.a|BBtVn!0V֪PPƯ-xahFQߏdJϟ+{7Vz{np <#2ڦ@#ߝIa:jCewe/֒WVK9Eq#HE#]7Nrt{1U^v4+"%<|x$m':kw PO`g78)e0R<|<67=%)̮ et![lmgsxN`Ͽem+_4|p[ʯ|u^˓eI6ۍ SXz74>4Nxj&,f¨(j 1"*ފ R=r0pkRw6+n.V^'מz\6vDBV|76!ʼnWj^XdLk b ;Mpguha+?*SZѯ^DG2ƎLKbFwGG3E@Pܼ!R\c|7FK*zIY+__A_nJD΋x\d$(ƆXC] Byl><87ƬU2:s mWڵ麦bmײ3 s21j0`cù'9\4 .P((vd&e5"ffND:V4 7g!]G<2I O0tdg8MJD$iĵ1^LraO` hYb/|)ﭽ=G|>|] V,rfu4qֱ˙d9*l r b}X{$+]=[:5FepX2~֠F"kI%55p_O,>Ɏp'GV|Pԕ"ܫ8$AK;wC>w˳JY$xycįR>׺s;<|VlBUfGǸ 4%$$ EIeP)/ ӌWڑ+ޒ@g.^^&j&wDvi6+㈹hVf1+i7.KXI$yRy^ g dM#-e\\\zhUc^j6qh-sG ƫ As9YTƹ".r؉3)IL8JJʀ*z,Zxw7z̙o53^&uPr!HšnbA hNO\^jֆ:rCk4Xn./XT4wTL 5&{˫FSvZZ6OvBoyQT+T}~6t W I`rAi\tn+Te`)BwlշQ KG&X<6Yv*൭[l:K3Kas^^M ̜4Ҥ+HKIݟ^C,%~,u #b,%㾲K 99 ~pSO`KTzg P6-E2|X+vxzM3HDk5 eQJd:ds+X^\>࣏f~Jm(s,@A#>,P'T[DT.#`7&j5u cKeUxuWj?̋{;I2$$~;T[۝ e.w+ ݦWMweWї/1qO =S]8}~rw`oljT'޼ھ.SVf1 Fb6.3^x*I ndƙVbÙ)BW6NJ9Q} b0bXBS_K٧'ζ\Ӳes_,<2ʹvZ ŚBoi2Dd@B A8O"\ fI`R>Q* hv4>hjYZ.U/KD*6R/}h\a FW1.v{8aX&3O@]9!HK|[KIP*ԇÉkD[Jw2H0:C0JP;ߓ9ThK0{yTЈ~TK9'Z{jf74 2A~>V0  GhJ~*H yf3naMi}0ݶkЦ]9oE㈧݈Jň Fзc[[)܄׉?&;77CJK^Kaְ%y }֎tGӻ»%Sta^q@:N#Q1,ZҹJsyj @)Mgk_.tO  Pkxh@ {w EBAǐ aZY[faD5֢3mZqڬ|ʞCuՍff;fP! PdE<wlzkۚ+!kGntj"9|N2p|MJ*Atھ!<ٍtW12y{ťAbb#8"ROUQ^\S֢ʨm*ߖ-|5=ju`)B-rf]ӱϿmۭo%唇4skR48"ܸ\$\X^?( Ǜ "+/<&䫉X}m5W yp)Ή)r]UKAˬ>vH LR},yi,(o'Qtɟu }AE˾ QAe^p;3ս LI)2 9OM;vlOjcg^dG8R7 (Ԗy$]_,  JDqNo* #q$%%ѝ+=t 'K Ww*0*PCĜtE,(¥b6slNl5wm=#0dΜG/U9r+HATKJCU.*4 21Eyhu,6?2_:zD48@F~z9¢ʹ'>UhĘ)_J{e:b3 ^,\.ğFoT r jvT(!1ϲp,%5ܔCmw]nzP,Fض\( gc3I{X]uuEiԽ_S)p|-a0%F82RQ`-_G5c{I_׾A]7/xs| wENVѦ~/4HSBtZ*DZ!Q.qgZ|QWK6 j3Vv}fVKQVb]]ItٵG˫'=jh/xYS-zA BHTA=E.r$0 u:J!hPsEl8K]7Vstt`FALNzǬ 5I NyDNĎw.ڞ۶u[L;m^nwP:녯:!W׬#SHa9@3pyQ@q6:.|fI+y-߲ر=6g3SzmpZ2*Njh( ASB q†*S%DyX4scL !_H#7yfI·G^i=2:`9[JQ呹mmKqw2.#GLy/zG (Fj= 8"V P}nQ_ƎAHprԴztŽp´eq`wrh(5?RǓ̕EK48(diU.蒳A;[ms$iL#{ U-H^p DAhЩJG%BS$#l{Y;׵c)gx:/:a(9КZM^,%$ Z<{$*qofR[ےgUWFhGX5V%b~xi6K l[<ŀEϥ8FcΝ76w-.P*k>1Q̈́jI+z\4sGQ7b~ar Y$0&K29\Q„9D{WU]YO!>1D6PxHC*z"ß_QyVI-v:X7xF/U7&yÉcvlݺG;̷*ay疺#_oO͋c ; AP7ӎܜCR;HK:ԄT` ߭̿Udkɲեmyl[M B'pVb#X[8ΐ!G7Z/iQNF:DPF늆r(AC N}NḦbޝfG*TSTSß!A13M\4u==.OmDr옖<5fV.`)zV`yP?iʣrB\ v%!Y}E_ck".bp/ھF:tCT)!Ӿk~;JKr7)T; D4ܺ2RԱ.zVtVw杠}J2'b M3g$[>XψK|X.ts#*Ժ=✖f.b B x1nE% X‹&e'{U2§:ٶY3*W5Y? a P|8AEv{WԚd xX*|…F4ݑN(0үT!e0'-gFw: }~CĞŤ [ dM҅VpAQmKY0@SY@Y   P@A4.Ijoyu YxCBzm/]Z$1xo𔱳}NPa@^`@sGX7oJëh^mt 0HcK TQ.vyr( X^iILP%9 [sf覻7׮ PCA8&=w>5vL$jP1JqH eh#Q)gePhPXGcj0(+0qe4$+!XZ"o ظ8]ouJaH Qf˕YS@G Paj|,/Jk?pV|%s(4C8lZ cy >$khALi3ӭ:r_gYDd p8(>NQ+yk15s LB~պөAq:-lùȊ";Up8`Шr0(0P`^H "D7IZcIN@Hs @yմLo^^ fL ,ZD.{]9UQڨ \QVY .G@LqG_r6ֽZ4+r&dUUܘq;A!-*N=ckz A-B+^:% *Gf\-F&KI\YBхCh)2nF"yB(ʿ˻!ZMX!ἔ1N**:2?98!u͑* mK*i!:~aN{O8*@qpG:WǽcuݟL0Eۿx񗺢fD(]n-oo"P,`g/OKݾӑy\J*Oy2t0=}n|9efJ3bxPn%(Grt: Fo. *_.J'2R 1Ѡ_jO$, óy G#wnY?}1u`?_ķ֬O' "_p 4A�$JV sZg4~ "|2>-Lo5铞 vV\1"ԡSwXao+$pTٗvO,F-.a`AqSȨa/%v2b#e(]詘%|9$CP$36P6;IQؑ]Z.'ύZ3'flby3=FEXKi(A 222ziq+~ 'w޶u;vl{6-{ b[Y4hk5@wu׽ϱ^`*6 (8܌(+ J61Fc[xC hr7\hy&.gB QXK*@-pL 0`xAp Rw]JY;VgD3SG懶4fڜeHJĈ\c >H*M[ur⇋JRiⰿi/O}7;~L,zTrM+C%.DWGoOc=W]RF0XWt‚v,yG6 q X Iܝ9@|*| ̓FSiFX@a2aF3[j@fVyj._$/  2!"+UW;++bpǘѴ'[?씄?8ȤI{AXd\۳)ԘTZv㾫T.IH:&w'7gP]{dxX2h97X)`P%RԺ re(.65jIS2<*Cx\a.`INZ])u|)ucxf~~'mSkXY4ޔ+*ivqz w?LKhOFǶ 7#MIJQƜ踡(ew ӟUuJdfaOԮu67֞h>MɉFJG(VN7O@t'%񊞳6^FM3C=ujѦ]V(TRRQY!{o$ ߝVIDx6o|~zOڟ=ӧļMw^v8a@MiE7οܚZ̈́PPQ`Pel- rOPP!j9kA]NԣDt{~A$ '=: C{?vPzcǒ+{}UaDߏշr[9}ygMmo~Gc i{.ލ]3EPF߮&tdk{Y ^ cyH\TveW\@ t+[fzo˱j2uxFAٵSⲵKv}Op9dQ]w\A (%=!ALo64T5XT1kbF˾q٭2{.2X*5^k2/TնiGLw"L[QC pHLȿl۶7*GhT$hvAS~~)aܧKwvFe-VRf@24Gs 煌k ^ݢAA|yD,:BNZm62BQphX9Y>H x#4h0!tXoNϾWWiFH3M9L}]^X7*wQ ndv(lkM|z!zf՛'O,c (i3;Oh)SHVlٵnFX%2P!th4Y􃓩%^Eyv}[GGh[7onz*ٍ<:Ď~\Z$ְ|h Ue蓼2\U@eĨT6ls $!5IKtɫ =hjE>x>/+5_?:#Q- >]&'Ѭ_Mf0 }+:mO@A9("סC667vlxDr>92ؚgn'v[&T!J6^3g}YC羮{c)U1x;rփR酄E> aP>7xf2_MzKYmYIJmu`d*ŀ{)cpzf:K077GO/ ^i=Ńl縄SB2EE_KcYcj=+S4{:,U BICtpa^O@^Hzbw͚yH.,]MŚڳNEw^sKGKtDG},8|Jsg7AH#7S/`A,gt.xo>K]0_t;eJ,z劄J.` ;u$^(M=-z1 ]`+h,S؟h6Z 943CN~8EU*o -ͫk߼K3!ӄA 18:)W{)K,7Pj953LJ;@Ȟ5?@)X~m ^9\IB;?4Mi,I&~ }an>'{0[ah hHaC2%ӴH[FKt-yAU3g'[o4^=Xf%LL9:0B_m ;Wc'˚R3򤍻l089e+QB;e9?/5-?e\)=EwNw_?/#*p^w#%(_Iڇb5FMQs{*83F=^xIq9YÿQ@b(Uh '+R*C=LS'70TN!FFG{{DEg~$npqL8&9wr={kk-OF#iS̔'5 0T"!ӟ̥۷>)ſl([]n2^7bIl&ZC?-90>; 682?7g2ޅ~zej->O{ݽqy6k Zg7M@5HOe\=~kF~ 0 U ` OX kшB)W}98˞=[&LO_RqafmYmuom]?Ncx1R6_3J_ʕci7x+ٯkT+{{Z.NM5=`jvAhv#G cB(ܛiÕXL%HҬ艴1U] kK:9>|t)a݃l(hb_xF 'ǘ*a"6$J*[yEZ{i=,A*7_z HĀ)vwU FJ4Sd-N͛AE,jy6>LN?>5?tL͑2AL*D>I |*w 7FlLjDDppej[tbذbY0h9ڿ\+9sī\w0(>QҨ拕i72޿SԤsWB$|C$R*[CJCwVN,eyɆKf.=D#SnGFx>St`履𗿜}*(:/ʋ?oݬ8a*M\|s>5" J&4|}VH9y٫Ӫގֱhx٘>Rm[%#D!x]eA N0pc:p^?]44Jq+"JnH ˚c 7/)_9 ܭn {Drq h!#YC;'$_N_]z蛿=y|}|v`sxN ^4%v )8wc+mN X9̟7Da*>jVw#gtvݡFeEjU"sb2LIp`$DžPPlI%W fϘ`ƋDB.:k"vTJ*6OXn=?v @$N%+ᾲB5IRm^G+W:tUG ;޾sϏtA||Ͽ'[:Ny-+auV&ҟCbyNQ gKc* oz@UpqB.F3YG hJ  A+,xP?Nhޑ&ΜDNYI*F !8(&ge IJ #2ZgKW|藹2 Kp Twv?(Dzᔐ +Z]#眛<&>O'{#+|(eO< ?M :GokEr%Fyx++f*c7<,ɌAIB1"9#ږ,@Տ1soh,G jZܔKk-14iM$3J0&*]KKXbp8 82vxY+TnlUDIR^|T(a{&ˋV776kg Yb۞\K IM9%.~AmD5!) 3#yZO۷}딽a& {z~I)A~*y^."Voa<2TݙDLde5f}7QLnǾ5Ghv[RU`dաf6DSR2Ip,JckO؍2$]p8'_Lx&={#؝t lFacڊOOtXH%iW-??3vg߈\Q~~'$ca{Ov~o~k)luFx\DYda]`DR!x[D sf3 `_J4S9J6fNW FAلVZb,]ļ@:i9 ʭE7>|Hx',~N /)L-69EZI޴[@ϟjTQΏJcyV~݇d2u˴S>|r鱷 R[o栵t&9Vfl*6ZƘX o,T(ޮejR9(W7O_WpG:L9/RWU9TFa9`)${1(g֞r܎;osΟYbTp&hA_;ubhZ f"h-:[>Gz `GuquOgqo?zswo|‡^y}S==~KQA?(O~iF3Ͼ :b$?l'7Px %d\hfc<.fհ dR=),>U<@ 伯j˩}}C陶pO[NˍYԹǤZC{.R `$!jahWOz9 +vmii=oGoN#ӿ}Cg/z7,{TA"B':I% HGtoUWwTzCnaڪ7UF4dfb,MVHpITPVW2 s>kX,tP /?x_]kn(<*.vO uֻJ^P`0FXꭖbςb`5`OhVJHWѥyO9z$}7?{nv>hϞ=>hg{=<`Q0b$VcKZ6:Ɖs sqN*LcDTo/c3 x铒l >աf H$CZ&ۙ&h"1k@01@]QWw*Xr{۫Ag` s/꫃ѷ?={^%tPT븰ulLeXB)%D1QSنwgUgLUI_m-gr@5 0cpA9b *NAO4I HzKR]WM^93#:5mxmߊA$n{M`m#Ej ~`~K8u`ϲ{ۺ'Q۟|>7BjPav.q!y`ח6f˃X6@8"nVO8L'JtFFNplb$flgӤAz9aqIê8(ni"$Tht"XBu,6M~xazUEK^\$B}@%W<^@(B֡+HI"=_'= 'mp=e_~vǣN~r`וֹI zԉ11䮓2FE2C; 9Q8+ 9y X5RFnjzpSI%hoزͦTp,hcf`Q1Z9JQ#uO|ghz5&4\m$ ~߫_[ί^`/ņ]v^;>uQH8EXtk vEe#S!lX_kQ8 J"K$xǗs|f烙az,/!&"p&N$W90 [7ܲk;+٩= ?W/$Lzm7irGҁIͅMfz:yؽ(0|8>E:إO>>F q(hGuK/9 J$t06g6e3e-| V+n]VK2;{Vz:)X: bFI~X鮂sadKu.tq썓7}***ǍO.H7VV>?0w'}FX|xl:sw:pԩ=@.(AJ BZ(U>*Յv=!8'd9ceF#ΜַML7׿;4,XlSSVR& .^~͖GE5˺tE/bv=(_/tl)_{=C#t֣Qbf*gLrS6 R7ng'x-xU;XBi xu߯n54߷.{~J2'}Jрu¨4 >G@$^+ܛ~DB@/}uԗQRSopn4;7蜃8:`)fj'ɪvQ50!!t~^Nz3>b`e# ZUyتpT-9 Tz۽'dHh HsiKLAƃ80!.#X:oM T S;a;S G8X¦!a%0BOxՉ~Xw c)<=B:Gm7s%% sbKi@](ٙsryvtMH*9< Ma i7pBfcF),kysXU CNLNfM UAg!6D #pzmzpY=÷ wx?P`2孔L(AiR{s/\W7z;ASLn{P16!{HMT iqnSThǷdF!y Ɯ/S#b,oV\m˝}ǹ<7D䯿nl|~Ψ;sjr2ڦ)׹7i~ %M<:974mE8"cY{ZV*Gu[ޤ\UcKLtM.;YP8%0<~]q*DL.n?] ?[ x mW{&GG6a&6ʅ)nlppʢE;ˡ+C-V<_^4Y'geWi_:@1\۱m|Ӡ7PL 9޺"0@e**43 jN|l zPu 66]y75ڲ*^ 7LQm%VF(l^K(ըM?znV=ߺ_7y紛++*S[/<8qVQ~dYe> q?WW+98tPEm#2߫%}6bQ6b{ E߆,=o8fb\ݾZ 9vgNuq2BZ*6:~z\lp<>VchO["$-g$-Dj9Л hjf0F4r7 E%f'y6# I$;ޭg͍ļ]ْsNt+C;:EMTۍ4t~M<1U*޹y0cW4˺cűfEkM4S$4){~Cbܲ `A i]/_:P d\R7<8%8"X2kjF`MT1R ob MīMi6Z'dcq틡YӲ դc6mٹ n[5SFg_n9a׮: :,R3;3j]21\96t,+byV۶3ǃgڹɲc]Q@f;Odء,YdtPlw`1C3\BLࣿ"[]%jVe-eqtkZ62='&SQvi0/>TAV^>}z+71/0:x  #:d~8RF)` +^k'4Kj EHÒA/q#[GmmmyZBC#$ίN̈O4\BVa:=LFJi'4ռ 342nYlYkZːL7] ]DVƠĒ!?dFW b0<1Ut* -^`wFG54ngOl>!ܴ'(&Lq/vrGkk}ThAt:?_{mi ։G3G?(/?Vb6Lb%#`G\AVAAA\ZKb܎{ЂIUE|EX_ CYZկ"[_55hd$lś@@Rհ7SUŒxhMM_BRONj<^cOO雛U@%z1j Kcپ-}GF\mFU2݅{|{}3;k B_ uջS1jžX;pSW9k]mj*erEΌҙ e[Nڝ72eV}搬2h9Q,t+%䮮w5kz60=]cYeUT QYyLd5ZT3q "F4v6gV]bӍk z(b/W?(=2񴶲m2UTW'/}TY)'R(pHu"YWc\@?y;) })~ IDAT33Cm;,peȄtĕ#c^W6CvnRgDjD 6L T#c,% v!bGųX/ũ؀d&aP`r 4T*%g]i< M+h{*PmiZ[QHoZ7^tO) ZDwaaiIy%ۓh!8E_T0B(XYee3Jv+جKAFiƛ+W$f&n=< |aĮѤ(h;d$Cf $.Lf H,iG"LNHb> 1D* `r׻ƭPeEW Xs˯^j߮WuQupD^ 9~%|[ϣOHWo’΍7Z]E&: ǪiWW5˚'8!fd.,=S ik]Y|3_Azv۵jKנ$B3r^h(;f$A&S5^e0pfB9]Vty]dG `S|AM9e76ofDUaUVQ|{{_~?lv*H-ou+"~Bz9h )B,ܣ+Ay D:#/I\89Sodtʄ\HY6KkCX e3^Y-GƦǞHi˹A<WTsW@Np `%H30xs|]Cƍ&ePEQ8Bwd^kz/t4,.8R&4Ud|seiDbe qBBP%wlD*W &P )23`h4&ٞk&AiFVtR42QLd&p,=>H9vN3,@gϺ-&[%0]ˏ,V ˯^z۱M8}o{߽v'<8gNMjgYʣ-@`F :A՘L:ݥU!YƓ ^W"iF*_,{M?s F N] 2bӘ( 㐧̌D!)p!]M5F+2P">MiӸkjel"1 D8r]qou^?sC5KhچߝXI1Ett` kPݢG#?EDZ ʽʼn.!|s_t R|^a*!X`w27QN \JEx!@2 g` ף PUQQ"'(O%8zYXHbqf0+ 180l\oGBvJ5&}z&nǖeI0tT5oʇ_`LM:Cra/Q{<‚n?wkoDuHR)a"O r*jtz.ǞWM1LQ&:IZ(N"ZG9Aia"`MH(BQ.5QHXhL.spBPBrp_cvŲEP0WĉFB@M\?}~VNG; ůCn B\ =d.-1=Eo "ug яm?J3 2D646P MuY37WWa\j_d/<>*JsT@4=R0"M0R*CMH3r:2gNP$.1 Q,U"Ql1Q|TX42E,N59Q矉jbJHĒ.Y(LByf;0l)Q)>ܷ7nVzh_/j L?|#Жv ~{dݕrJc"Hp"/{ܑ qa:wa@@XLNA& f=T Jt"0<CF$l4 ˳DB,ǰF< 29I .;4, 6 P,#aw\ N;%FWiʨ,3֎˩ilYyT斞0Ʉ̎jK~Z&ۃt\㑶B}_ofGOu\^И'LյhBŮYUeA(9䨢qx'SGJ&m,k_.DdB l2& kH.yǡ1y,2)Y/pv,L3jo@];awENV_K|Cfhdӻ,;@NNo$q0+C-nB.fK墅?^ލ?f >y,{cn16""±ZȔ ,v!>`VaK@B`a&Oq˩_C0NxaT 0f{E3d" (JiToT.k"e?>1Lv:koo g2*RtMNQp튪E՘! wՐ2"45q!e#;$nLX< B)F_]ul[ב? J+1Qo4&C,c}xV7"lw_KH.G)JW`=D/T]ϐxڪpӦ2'ˈ=>UC ,(:xsr??V Y糐b; A$ho8HDUk#.5wNf<0kgdnTl bgcփ_ o)n|Ѱ+j-N{6W4v9| AtppZБ>N5ŠOVp\qꝄL>Sj~lՇ %M̀Bv_ąS 9va4 =D< ۀ!v1t'DgON\.0RGO 2hrIeqܬjrR}>,G>~2-&[my<וt&UGBx)Yt~5єJ|Ltu7sC(\@2aciue+OT26֬0^3TI]S'd&f& aIg|!hx&X@q;խ΄ .0cc T0T EBxz˗/{&*Ml6<|Ьrdh&aCMiAdPKB9P$q^&YFyVt6t?nSm(3WKB]u]徿SK:@apaHTlQ+JArG'z[&΅LnO%7@JbkZ3kF5W*}ƮA**ŗcۺaTL{"cNCV.jYZz0MO&0j4q8r]G1nuԴ`UzNf* wn9D[puZ"yj6^E{zXtce}n,mEkl PU^TvOm.+xlɬ5Ra-,ڳaTBB]Hr4$/+%?RڙJI0$Y<6$+ZݜxHr/S4tw/TWU\jژ0C|P1iؕb]%Yښ?X$kjjdf(ٙdBD1`la%#3qnSd*\UP#Nʵ x4!^>XFlW2^?¦' h*нrա#^2g]b+~x=\~)$|{"o]E<[S]n.oZ57kFK׼VQr._vYDit ;IDvtrRȽMӌ8ڞ"\YT⡉<qw$ZXc&\U*@1'5|%XEY{Z3ZUx\Ń/6~UקX'WT !_إ3Wn8Ih4/>&\Wzƒ 8.9%֮O$&8 -"+|$3[q;vP/Kw}O?=}>HF{xmgMl=uҌ7Ľ S9L>L Y0kL.m;XZI)[֣'2J7}#X<fD {Mh8*?yLr^?2;RP3;k+cGA_gu}_u84zt?Y3YgkCw}UgqI5(*]PᑾMG/F(^>|N!e9H0nr=ۏ>soH8Ԍƒ8G=&96$I+u66v;:|vhtq(҉2ٚ9Ȯ[޸9|W[ 6O 2n;<b-JF(̯$$Z^VAjz9`:41jH9sZd^]WWW mZ;  M!:߻k ,JjS\ncK/`'$u×G 4O&i~oq}X$AD$E4ػ nvXuJնʺL Qb4(~$]u]?hѸjbf$ln&q1U׼}`su<mTKk/}lHTouL#J=G+_E5/l~k=$Ču~H%-"TkM:{~fnĪ0w,7CRQJ7Kb{GԼ4;Zj(g5֫sZ hP1c{ks uA..]UiPȣO'~a4$~ }4]:jSa*tLUQ̛߽UA> na42 RG,X3 )NʼE!#zMZ Tn8Zj)NT#ZKCڳL' ( 7VItuFks\u9;KN59%K*u9wnk]ֳԧ'InW6Rwh(>8ߦs&־yoPC8X,Z2S}Z $2ˢ(uy T57LQtv4흂ZE2yZdzaڙ;өpf 0síT5݁ /Xx\X1k }8i S=;V ,Gjg2"[zֻ2_>Tn-:db<n>'OU*r>wމk~v(nyC)V] `|q!ōDAԯ= w8^]n wQ)ՇmBWzzwM3Ni af cf[0Lv.wmҒ>!VȢ PCu;p' wuRVFw τ[;]Z%@)#(}2ne#)y?qq'CETߣksxߤ*F{QZWE{P q0p! ٚoڠ/㧷^?Xm ?rb5 DUXg֗X{0?j6 jl5t-P IHXXdL(ҴΓ-XZLS+Ba_'!@i[_vm= f]hFIGŔ+Hյtu;kUE#H:Xe ii]k7)s־35_m[VK8GAũ'@( :K vƍ.7ookFOb$HOjӏ>z5,-l] \eol>FM ćt>[j3A?g/%V%mڅm3Lj|/(sR Bɋ2RٔC, $1he\B8MlhPUP;FfCh4f_ =|oAPd_;:sbe5e<|bI}i+vk<$SI-z!;_NaӬlb!Kr☶F .j1!z<2Q7ٳ_t+F6g~ݵ?i>/ߠ^iK9G˼)4J"CkUvfQޗPn`ۼIIwƿ4[?VQXdΚ 6h(vۼ>G:nDa\/lt? X#%f|Y$+%튅i2Y-DxԖ4}+,]+پ:y EG%O+"nQR+u+mNTC7ON['ß2hfaQ m%Hlffyѩ!5k W66flWh6]0Y [}l̆Lc]|-dza'ȁY:3̑ZpeZV ARg}kΰH>'* в{(!&E8;22u2||&|̏ eT;嗲 .~p7 cU]c*-[N<5:^~?r0fsqb dM31i# f&(n@ Ú!QUb>(Cah.PS:2unPKD,S3/oG@l- +: 9gDZ%8hXv*0yUa$,t5t W0u3ݥFxMN*R9|#{)Y]v߃~ӟ>Lu0_aL] tPLlu~{3˼ld‹Q}t9nyB4 cqh!ϑD 5A8(`!Pt5'd r*{LDuOv'kzSJn] Br%,.FE=(7-^Y,'- ;f \X]n$ zoVx]y.tz'=ǷoߝJL %Rjm.ob[8ˤ F*7ؐ-9?aJkjp?9 c.uK*J5RVM>g1jNݢ4"BP^c4ȩMrV< y55{̗vv}QvY=D,QrA\|>~:;"nv'9yQZćH Y]l KKݧ/ lRP Q=E/K*>1qǧAb)[Sa|:6kIxo&fG ,Aؕ1p]N+5V+:+5'u.J0t\V⨔oBx9 1f]&<"2Q<0LFFr?3M!NV6Pʹ•V>O\ .s}F- ᭧K]-10\S$NzޭPV֝mڝ[I96MŽOQ\#M5z8W[Z./]OMW9nIUd[:SwQODA'2I+1ѹ?eTr>mn "d!2]!:ųOѲh>7Jӻ0 1FLTwÄVR?A*Pk~JbAgέ=Ki%1i^E uJ^dCtkHiЪaTAF=Lnt&3:/]*dnغtChqMonKC70vCOJ,!` 君I\n+ !~þ1d!sbJtrW^\$SN)_Sv'4|u "ĩG=^^&=TӭKF[.E'p̣l99G/.ϯW?JC z֡%З@~чb9m#1O)L] = 4]u-+R"Xzm9+Y@5RƘ с45Xvy'U~?ξ_Zp/gP]TF"%=qþ}!Iaj""Bh=B+dP !A$vvga݅Sfvߎ$ UG&w&_sob^s^bbq2]ZaspUMip_T;8&dTW,rR! FU7J؋]g>TQR ݭCR濁)BPQ>ߢktȋᎦת(U|{po75ݶM yo#>\9Wiqmma=^4z 2mck﹭{]d]$#Ny AMf7rW(?oS;hDR `ZSdDt5I 6c/eJIUjD&Ku`~(5ԼUzhTC:[O ř͓5oէ6HbxS[BCAE$I Oҳ\vEt(%!?([UZQjIJK`f)J#}07Mؾ~؋)rKx;" "^ڵ{TUmC^nC8Wq^ޮf&y%6G5׮SՀ)u/9j a,KkT*M?|[_q3o3IbMXEV0I.v%;]ɤ)\q@ 4j +&*|rRU4 +Aw|5B <E.U5E{=_)7ҡLL;E۝w7v'ޗ綈gvGU7{EU!ïL6Uz-a?A®]/Edy;M3{{ CJ)6fzܹS @Ro7 9o}hqpv ۴xÖ Jwn3Kp5I\kw;Wpj%3|y6c!~P]׾[ʻa`8Q@<>=N\~g$twqi ᵓ/X' ? ExO^Ӫ;YSz;쬴]mmΥRbO¾/ZlW`]{bzvcK}[Knv/Vt*監̺oޮš9ۋ6D"b`dĽaN%/UBSqw&ఽO+m)FgN?$0еf[R R¦㤖FFF C#"-{}Q̬cB3`ZS+8υ8hܩޭ`᫯zz~ׇNGBD>J<@&@8v*WW}i< :#>#kLmRӞo*LwLŃ5 neBhdWO I|1X^6@ɮcib}nwGBNHjg?;W*!Xh TJs$b%ee̔J\Fiz}ٔL&n?߯meWϯhaxT*5+4)ka"jhIu1֫[k#>/ kg)4au'vvHcX3ɟh+}b4qxفzkAuZ- ڈIWZ^҈jJK44|{[m3!sճ? Wݹ0SB+y=4Cˀ{!,ΩbeJj)*|x=;T.I{텯_|)wn;y'Q5ÕX G\P^ S~Uwc[CIImbUxǢdg&GEzִT.y:ߝ2rdz!OZ.cǏ;,!qXg:T<<3~\ځ}]_}̾o#^_,%Vz+Kz0"F \͒D\'7Rdf۹g'Nm>UeJ-[Pq 9[w* RhuWζ+Oo{g'_nk BI ##明l44EPk4߳lCr,Zއx=>BԐc^݅#_wǏ~Z8͖Z6T5YU;Y)$"b$bפS)Zdyy(C Re5C GfHOB$IqXꫯrW;a§z)`#x$ 礄 y?/LN*Ri:m_}ϕ|rğFx_z|B[tmPT }\ ȥbukk'G 8x#B m~>27V[}#VZ踛;܋Eh%W]ԻURn{T^xE/)A.ױ DS1%e4ѓ^*\Xκ!)o1K{h^_%]LکD$j.$j <+{ڕW[+/>+h  ҆&&2S8D`ֶ 0Q|>;c'fFw#"g^^魮nj6& V1NN.ǏUR#92*K*B$+l _>-I+OX/}]j=3?czJ2kkfv{ј5#+b/EXrȥel]kp|&ke_ؿc:IkF  qrptm|h^fϗI&^25~!Ks <鏠Ly!表̫QdPOoH6.~9q ̀Eq+".eS{WqRip&e2> =<3x[W^ewd/ W?"zD4ڻCVGi-?oO}CQQ!*# gAP͌4y܀ 4ד]E`VvZpח_nuk1Vcm wp*I,WuH5yĎ@J*P( ͇ Y&/.y1'c8']#Շ< C$W {{ǫٯd"Ĝo_La8<Ω8[jLttdY#1^Svk[?_IK6uX J |iya8cD">:Ф2BiUhȜ3;ċ"#xw8%st>BjZDG7S4 |*1a5Uʎ\FRSq2Fj` x*E8zÄ IDAT/ c~έsWeS( Z@+iBAQ&PTdU`h 4*OXw;dKmWAѯa1E77-Xj槦c2.2¡!v \^>:&8#A > pUrBUq,4^!LW[GшS43%|g]?I47D%d L$fY]ƿέWѫW2Kz?p"QUP21Vơc==1m`{Cu_(ӻ'v̹ MH FoL(֑1^VkzM }/יQ}Zj%5% C€٬4iWkd-M&d?fI^HsŜ#!B>f=?Aq3N9`LTCo$!+Ի*_v! I=QcǸ$qq^ΧXd֕2Q/̯'dzىP5O߱F{UoJK]mK1V}m 4h2 {޲ Zh8~@z-Vri" 5פ<A7Ic@VOJ2~ň 9,T%`n$IR33Ǿ0\_eEpWžR`8 c8ufyd%0qy΀"2Vd`j"0 0,kb#l)䭥u[]'Tt!VKƿ!oXau^_t?NMAJI JSnB$rg}Z1`fZV{PJnTN=TꃩB7>9ڦᐑ(4k9S!sI6h3Ҏgdqٝ,V'5TVF*2K{*2)_=ΥS;>e!ȱ557D++LP5&˃#Q 3yVOi,\9@3jhSgz;+ &(L #Ì6HWI: MeJ5.6KUr8}٩"$K͗H2HjZ p[5 Y^^xTsBbTEyl~bhNXbǕfMy%7MQ˳^DڮK:hy<>|wvM(uΚFzŀ _֔7s=jiL DߘFʇ|!!qwd,R-_x)e$a[nSt5 Z5I}eW>{+#0܆ʞյ4L#=ܬhyu|b04RiT64#Ma*Q(3}l0, :%B?GEdd/oJ˧zaN2}p*|ő&/Z3V2*gΫR5I ʇs G^>!%l4A@Xȍ b[&GSIKW֭3z@y3.N¢-EJbW6vv$Z A FS3 w$X4Is6{ȃ1xZopPΥR; A!8=ND#yv>q mٞ[[]Ҷ6憛49ݣv-|Ѕᔠ[e0 [:cS6bЪ~(5{͘ a>"OXULOufft4it`j, s{.w r+8ﰜJoU0J jħJA)wG(`HӸi:d0;pp9TT2 [B|&'i4ǔdJpP:k{~iapx(J1t 27|:k EBmD.g3}w:w{O#QDñlC0<E1/mT|d ]h]!u yxKtfl!CyX:˃>2i:i ʑ뭄"?Eؿ\`GY`m {@DxdMfƻV{'Nf.Bto|??Li<&UmE~eMepL#a5#`VWS'UKnl 07 .n$ TH 4W޸VWUޯM)NWB'7^}W(NYuð+;t0z Mz0?kˢgTx_꛳!f$`#32Lqz8)qy!,CAntF`/|_9J럲b"0XyᏂ^x+/>~a)2 |nfK/%.Y=גAp6!(֊4 (L3Pܣg[~xM2R,'Yw =ҳ={nu1V)) ݥ}`͇7|0(}#&h u_~zPŗ.mmӨA'<+? P&+ɔ]돩 1͊'Tlcr FP`0JRʁiM Nw~EBD8Rm69.^4{e≉>ǵ_lkv9U`E'?'.9i7&:BSDX싺s瞝>>CD~ ">G2ã栛 Ue Ɂ_n]t6b,'[eIGTΛ"xK*Jo:}RSw8}(BF&FԊRj- QtZãK7LH_tLI.EhR#ΝMI8M?z·MQh^sC.%WVinJьͼ5)è΋KK{>{З%~ď8a[2 8!69A7lw@RUf1la .$0*:&p %%^? EU#Ԉ]IW+٢S/!ʜHJkKΟo|w>&@N713Q9{s/BGYũ`W2mjI_ZdSv|nJ1e=4v sz9!?3÷Aus%̇P1Qi-q| Q敆/0GhbqֱbzQhr#t֠ip*N"61rayv8T~wG\Zeۥa0eK˥}>f^\kJ˔5Gem?펾DE / [N2W;k㜫r;_$ɌQ(l8rC+ݼ1!C|Fv 檉/E,M,vAMŒD&+R̓^| ːBkPyx&v)?-}~ Vr) g-ьh3ed=67UKTog_;ĬnUWČ@L%@#$Ā$, z^]-ِ<UmֵĖ&wMV^tzX٦=2 ]mRPԲ,W 5:V#:okTh 0 DN Iq}28nj,ͦb?dn47Q:즦Й+hBljfdz9~f ȴWcģ#Kuʕ!:\E&Qf PA8d^0Vw4cѕ\=BPJ.<*t.zRhLrԱ7~c&jrP  S{gڎox *5Fj ^8`m04@g-/-PKfl\dP6j%>AS/ w,7};hVTso~t7ow.mu-m]t^ׄ/aJ+L㦠~k+f:[zRv嬥t3[[[]ݾPR!mnA|DR(xL2*:1E:z m[xpnz\3=66ڮ.[nxnIs6u"KWbFڞ摾! UU 3 !s+*OШm0F`0J3n/=Kgp+=Denw]h:X &MP M#*G3*[B{>v!gx!TcFahPLJ)ckyGܢ_sDcf85{S %dgb.ƪ[- jSlR1%@Õb9Mߦ!HOtXsgC,!w nG,orSqw~񫕍db3RҹB (7UI)aDwpTAs׭V_srx$K:j3^Ixpkϗ8WJAt4@o`TÜ%i4tOcjU.Mx>!ns_Ġtp|#ĝWPQ9]Xڸ.3`-P,AƊj?88G!n- rDK_Z^/ߝw/T/~_a֝G~gϟ\*?sz'|vswQ&*ݵ񠈻)i/j|RMZj^i$J^Sus#{瞮/\̤r̢J$-] 8A9f⽈_qSMw $Ry)f o_WSZsumeVnГ2j1D/Io5ClerW#\pBu\^mGyy|z/Ը^{urOϯXhp+mt9uJ1t2iJ tQxGgXX9ӉDq-JH8!cK?wΗCM {14)0{ZS( C~}R*y&D >ҨSo}[-70]fdn]§u;|ţ1[ Wۊ+A i`', Y?8_[m'S&s0mKLCCE+;Gh:w]]ؤBPeNA#7 E3#i蘿oy &-8F4}=϶ G jKijA:@nTN}"n@[8)_x:u!u@ٵQ*]1Am&̦}/>K{}L<34nES 𐄶GƯY<8(o2ݱ31?vર-fcv%ʣ^G_Tp,IUEGFE9|4x-#78p`F'h𢂌kbu>gnR]x7pv%!"%0-4뽁 t}KN4"ȷ;hv3NܠgOpBdzsTGoT}{}[FjT6s6ef/sOw@Vq0JQTKA2:jbhLhodʚqpJE}kڋ}ϱ>1W0_D%FtoYWO{jTOւܕi0$, NOcw޾c8-X]6|m7*ǔ&N0Z2-4b#8la4ogQ鍈NE}|Z"_yœxv-~ͅAFߎb_XI%w:W-CSTJE$=.K@IV3膗_Unja=YYGUu5~S+1qHdHxQQ‚ҊHGζ 4>/"t2FScbOyz zU_#wID9D8Szd-bދI.^Qx>ADȅ,:tl189\]kbloOH\g ӌ9堘Z] &a☤ͱąC7SZƑ6b.B[#e4i*Dȋ←y7_lxҊ7tX!{PT -8$\%ڽ9_ݾ|R9. KHFp ===YcZ)w%֛DlZa' tAn .E谰5X/2k`.[N8pT,k&u5KK|>T}sڢb y..ǟeUKʚٷowo*eKKS阮IeELLL⇟O "j>w*!{MO'Q%?/z]k6nM@1bDŽB>dVX0dY"kÇ:Nk"ߏEU{No5|^6M-.͙VW[;昨R c2C7v;KqqF ZI9f4A- EGAjjcc UXLUӽ5+mKJ(d?= &U#Vˊ3;Tb%wpugl,C_~M IDATkiu^ʛqmqMp#Y񔍬,rxC_e0wa.{`?ύ_ztƘa']CɊ8{ tV]F2BA80&&U?4񎧊9qwRF)HҠ>19Fb3`0n*Ow&uHdÄ5AvBh=!| yLʪ`[tݭQ{.shzKu[Awk`G*N2Vda"uZf* UqNv {bw_XEzag`pʃ{僁xznBMY1qu fU#Sym6X\!&M";)2aP1aLBSxok1Z=[*%յ* B=QBٿVm4E;jxL%- t8\Pu/"/BbIVd?&[i,( %S9iN+uު_b>9xGJ7jU9e3t`FlCE*yKDeݰS8uYǟ B`P=DsKJ;[z.XෘvUD}MDȆ#ʲ, Y|ߚP~b cM+Zк˂4 -htI%uOY~v:d]^*)ĕΕBb,IyCyqGܘ^ÔrhAR?nc,/sɄ4Ϫ -G5(6קOפlJ ̛XrsR)dQNY+gxϟ;^TWVxx@./ff` x]2aQIp  ~r9+GTz=C蛛PAG|.G`eϗèHgâgVez_?c~}3}thhɴ'UT *:_i|/~拺V#B66XWѺE''&XH(IҀUU/1 kC'LC4#6T(]9),3\$0T|aD^91ڀ dMI'] %QAo^c'Qh$3{j#7b%"__ v at㺟56^rsEUEi–i2H$QZ&fdhUϼDw/NWܾEˮVѝkVgC'J8iv}~n(3L؄.H W8(ܨ9dž"t1L?lT"F,k?X(Zu'^Ƅ$XU  g~jnfZfkl&ӛƣW; Rֲִv@raN{L[`u g3®Ud®Z&m0t1'el$1Ct8=KD #/َRƥ.&lxͻ]x];4aon d+Ct* `JB̰uK[n z]b"I@ߝR$ @gd|k}Fy_o{VWkVQ}g266V+WrHtE3@ ahQ[G|QOVuW~[D-24dHZCpS n,>H%QW:Y5S$my(h!. :-x UXB4rCC߆~AZ6Ř)QzO~`~Z{kmMj_ة(?kvX{H|OWD`OP))h˧= 4 /SHݑKh: 9g2Po=,@vV?EV%Lmɬ3 4 M^(0xe[/ V@ 5-lوbg4,5v!jƘ-1?[|tY2ϣ"#VY$uɼ`ك>GYc?\;>@@ /*|+ʀ:q]i0;BQN<[ĝ:\I@ 1i/*oj~UV,ъZ9vF =dlRў#sӓ7H݂dPj6gG.^LPR6}Տ;EVʓi60H tV W**#]. h^ Py0W j_k,kyTk*.5H6$WU/}=O$K}ҭOo\rIU# 17 S' PgVu;OW9Hx&8Z7Y(WYV~!f-hD@MUة#i=GI'r`,efd$ li6fDl'’jѾZhn뙘'i<-]{i,FЕb2]nKJÄs:{AYTUjᝲw]S`$~.F]\A=,i_0mmaMYM/:4K(X:_սS[KE[|O t^yӽLim@0[3$Q<<< fNoEk8CK]Au\|W9 \HE[+3))EȌ8a؀"ERl:M$0D=֖(vpC1  bl !Qruq=uKA8 ,FG+~yd܉I8bx2Ɏy6S7֫GzE f.2GhJQ(ZO\T)jU*7y7ȏ+s ]i}6a@eșIAnz;BAL3k duN{PYz.BTRٽ*nj3 FƔlqRENfU6unz=oIb<~Eo>=?un1yd@٤h6OpwefїW[1ּ kG}m]eyhѡ%/Jgh\75F_87e!73[WDbTlkܢApqP)D@IŬkգkˆ55~WKb0@QUftM;+ - թ\)$r:WZ] Aj'8T^*M@KV1HR\-zѵ0LFZPy6MVE׵37-ժ+9\Z\ԍi"‹XJ3)پRkG)/"J's|n{Pz`zrFrr=O(e2b՝?@. AiYߍʛZ袧c ST#1|UFTʀ2l>(b@NhWK|Fԟaōk^]%nXepAGA|nKLk/ iy(GȚ5mRΜ4O$F)H$ =kͅaCؕndc@mqsgykG1vpL4,쩐V<SMM-)Qj}}Ql*L;MWwբ9&D pK^bzA>&T\l!rr:X M`Q`(qr?̻B=`3LҨt .D~ν8Tʝlb\iOu2ݠfS c1Ip˥&~s1L,r쿝9PzI~0_Vx9vƶ2u1Y}ҫc7 G%)ceHbK2^0kkRI\ <#̝,tVlpgZz؀u5ޱmOWls[<ɠ[ >2ԿY:^ l*2,**W qA1PT402; Dxpk\5c3cba͖#cUu0uzwHt! CGrLdJ5<M?WLTTM@|CCүIHta `xA~$\5gֱ6՘J[/9S+/cwbb?_=sD~ۯ}@^xb@SjࣼR4u c|lR]f(W熖\i,^/q=[ "̓@͞^oJ11!ZL0sesB>Quwh1IUɹm,,tI hI9npʏo'H<>9z/$$%)KD>4f3h"<x3>_uG^lI̫IU:#S_z.cK~WK/S;q#M=zyAy.}(8DڠOnp;χ@?Vr45LޣXxS4 aWLJ#C+V7J놘&nnlr4([)Τ.Ll0b8huRYy&2.%5{Rb.Xp ;f-{tur%yrRM?B7͗d9et\3IlH)"<2zg̖F }1!R3${rc A- io:!f)>T۲uK3rZO=_<Ѵ `9<  *s[h("HXs^z=a8=wGlO?y<~&صkUkKqh%~8y^ɖ-T<7#NB1EA&gILӘs(̠iq1y=BYabw P ΅@I|醲ɉ- gte+rg?dw(\ܲnw'yXRRZ#pya7޼cǖڔa5ӵalR(kh(hY3#z"%j2[o0`. !}ٕ,]28x2L-pKbP.3Ezq'DI(*SS(Ց.6}JOot6CNٝ.[iP_buJ$B`Uԡ#+jXo5^Hpa1QQEފK&ʢ~PwwIm"J'k|x쯿_5JMm5Ӏ0Q)a MC@6\*#SEdHH.`$O3ۗc т"`$L\"!{_@M&IpRd&4)ǹs:30jR9n@"=_\ٝ\Aq[Čt:?kA]kkED/kzٲ'z⬨8XakֺdyVG=o4걯Qz?ֺYz\ AݞC(Cш={MZ-0oWk-dG>x^)HɀĂ"`f# r,CF)#%'Ǥỏ |rw?T縗!) bJDG -q,Mxt.mεs)]MwT>VcҤRч 9\gBY2i耠v>h wO $>̪+0#< fI0V, NyQl>^!hZL v_ d[\A{n;}ڥoֺH(d{Q9&SɎܲyN \3CS@<^۰e1:#)8)ɥd`&j|1sh`w2 2;~v8*j˜YrCj>:I_Rpn۷//(ްLd~c9asmMOKUt~3e^?QPL:V""B  _|qRh۷.D^ ๋NpnɐʕT23䤂\VN}&- LKq7lyc0"]J(&Þb&3qV'Dd$!󥳦e0 ttFb\fo}'D} K.͞0;v2Ңﱜ pg;+)A#ɒE& RrvXNZyq <gl HVwڥR\_6 -=:,zrr79[|l &j`h'QG(G0{>zh>z!AGڡ{cI. 5<  M*8CT̈S iIIOQIFߕm1}`$qPCѮR]L14'0ڥw1RzY'{(W4&P3?&EXV1ٖa{)3'C.n _ӡ)ԃN-9(LٹlQj,(FcvMg"nu%piZtWs~ЎvߡQ߻nۄK~{P>٦( HI\P6MOe_6$res~5 Oe]#J%vsqa-*M,Ɠ `~gg0H*rҶ6PҾɇ!n%#ΰ0lIFA'k>Nx!gwC״F_2^嚵!4["@XH}2|8g=xí١v!{I2;F*yΫ8`wi;K[r⟨&Zgtd l033) G$()n.HC,u!cJ"J@PTn~S7Vփ)RuEȳ&?8v.IXIy; Ԗl tt>w!Zsw֡Cއ_tabwQB9'Da'v}ؙ;o] M{Bz^`Q oI"l&in :c[GGi/ DY(׆8_,J$$)QY׼@K(A~2C?އ{s 1!ڹ[kV돠R+&VU\ølz|i´iȃw{J>=>Ƨq> !K%IykH*%/K\fgqs/;!~$L'[jeI侭2eǦa3LѢ@LA7&Z:g-WٺudttSdBZH9ebwo>}⾿{wy7'd}>P5ԫ1 ^霱ECE@2''gAp8\L39+eBيjiI*I%%H]r^X6#y 9Z,uY)bw.NqsD^C)uIA>IIJ濶>GVqZ}s/~6gh Ci_5g;Y?Qqg1kXg/z6o~-Dripnuk['Y*y~6Zz8!aG@<lpa쎲r%gXiX1 !"3>sy.%í90a&D )$W|y=-gy@Ch-gvͻ iptbɋ3%{:f;4,L}Y0.zaD9 oxt灪(V00&5';ԞSL $2G#PJԽ( >S>΄҂YF+fIAf iȎy@<& fF 4Zd:JʴldXTNFJߑh,{^c ?~tl7߼Q$k:D٠_P6 xѤWc)X"P 9gjʬ.IZDbUrfP1-aQor< ٦<yy2VktڄBXsRIQ v{Tr 㬋,=2>ͼ#|{e~}ٹ  '. E~tg<ܙ //7|WZ ۉ/v{F?qL M[y~OjOt>;|q24҂N ԍd2/T*/:H92 {|@@ً1, XG_=WYoaY'o%^.X\nT=@͈ؕz':딿.]Ѿ>{UpnH[}|t37jLlə헻_;S?&_~/|Q6,XEb^Csʕᩁ #_xƫ7zIFop2%,Uw\7{slj<ϱl{TqM2sQU{Lri8o5bujY;uїMq?<`oz#@Cl~kx v;/|}?_u}e.0.X[c7*/^￿hx3|"oL]߹I =厔Wkʥ/^|Gb3(./ߝ|G2qs$|\Iz bVbj|2Pn?rT-{߼š)%٧gjZ k5ojEW@3^{%8\Hz*=!`o룝Ok=p z_̡oQ_zNllV\YߤlhPF&&n{A#|?&'  ~a@VNF{&7&23s~L|smdT t_쯷܋z(mCc(dY1F(4Fayѵ\>~MG2+CEc$176v\YF_:V[޺ ?O^])w |{^n]#^]Z64QaIENDB`lbreakout2-2.6.5/client/file.c0000664000175000017500000004047512140767214013100 00000000000000 /*************************************************************************** file.c - description ------------------- begin : Thu Jan 18 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include #include #include #include #include "../common/list.h" #include "../common/tools.h" #include "file.h" //#define FILE_DEBUG /* ==================================================================== Test file in path as mode. Return Value: True if sucessful ==================================================================== */ int file_check( char *path, char *fname, char *mode ) { char *full_path; FILE *file = 0; int ok = 0; full_path = calloc( strlen( path ) + strlen( fname ) + 2, sizeof( char ) ); sprintf( full_path, "%s/%s", path, fname ); if ( ( file = fopen( full_path, mode ) ) != 0 ) { fclose( file ); ok = 1; } free( full_path ); return ok; } /* ==================================================================== Open file in path according to type (write, read, append) Return Value: File handle if successful else Null ==================================================================== */ FILE *file_open( char *path, char *fname, int type ) { FILE *file = 0; char *full_path; char mode[3] = "a"; full_path = calloc( strlen( path ) + strlen( fname ) + 2, sizeof( char ) ); sprintf( full_path, "%s/%s", path, fname ); switch ( type ) { case FILE_READ: if ( ( file = fopen( full_path, "rb" ) ) == 0 ) fprintf( stderr, "file_open: cannot open file '%s' for reading: permission denied or non-existent\n", full_path ); break; case FILE_WRITE: sprintf( mode, "w" ); case FILE_APPEND: if ( ( file = fopen( full_path, mode ) ) == 0 ) fprintf( stderr, "file_open: cannot open file '%s': permission denied\n", full_path ); break; } return file; } /* ==================================================================== Read all lines from file pointer and return as static array. Resets the file pointer. Should only be used when reading a whole file. ==================================================================== */ char** file_read_lines( FILE *file, int *count ) { int nl_count = 0; char c; char **lines; char buffer[1024]; if ( !file ) return 0; /* count new_lines */ fseek( file, 0, SEEK_SET ); while ( !feof( file ) ) { fread( &c, sizeof( char ), 1, file ); if ( c == 10 ) nl_count++; } fseek( file, 0, SEEK_SET ); nl_count++; /* maybe last lines wasn't terminated */ /* get mem */ lines = calloc( nl_count, sizeof( char* ) ); /* read lines */ *count = 0; while( !feof( file ) ) { if ( !fgets( buffer, 1023, file ) ) break; if ( buffer[0] == 10 ) continue; /* empty line */ buffer[strlen( buffer ) - 1] = 0; /* cancel newline */ lines[*count] = strdup( buffer ); (*count)++; } return lines; } /* check consistence of file (all brackets/comments closed). will reset the file pos to the very beginning */ int check_file_cons( FILE *file ) { int brac = 0, comm = 0; char c; int ok = 1; fseek( file, 0, SEEK_SET ); while ( !feof( file ) ) { fread( &c, 1, 1, file ); switch ( c ) { case '(': brac++; break; case ')': brac--; break; case '#': comm++; break; } } fseek( file, 0, SEEK_SET ); if ( brac != 0 || ( comm % 2) != 0 ) { #ifdef FILE_DEBUG if ( brac != 0 ) printf("the number of opening and closing brackets does not fit!...\n"); else printf("the number of opening and closing comment hashes does not fit!...\n"); #endif ok = 0; } return ok; } /* return line number; keeps current file pos */ int get_line_number( FILE *file ) { int count = 0; char c; int pos = ftell( file ); fseek( file, 0, SEEK_SET ); while ( ftell( file ) < pos - 1 ) { fread( &c, sizeof( char ), 1, file ); if ( c == 10 ) count++; } fseek( file, pos, SEEK_SET ); return count + 1; } /* ignore all blanks and jump to next none-blank */ void ignore_blanks( FILE *file ) { char c; do { fread( &c, sizeof( char ), 1, file ); } while ( c <= 32 && !feof( file ) ); if ( !feof( file ) ) fseek( file, -1, SEEK_CUR ); /* restore last none-blank */ } /* add character to token and check max length; return true if below max length */ int add_char( char *token, int c ) { int length = strlen( token ); /* check token length */ if ( length == MAX_TOKEN_LENGTH - 1 ) { fprintf( stderr, "read_token: token '%s' reached maximum length of %i, reading skipped\n", token, length ); return 0; } token[length++] = c; token[length] = 0; return 1; } /* read token from current file position; ignore spaces; tokes are: ( ) = # comment # " string " normal_token save token in token and check that MAX_TOKEN_LENGTH is not exceeded return true if not end of file */ int read_token( FILE *file, char *token ) { int length = 0; /* token length */ char c; int read_str = 0; /* if this is set token is a string "..." */ int i; /* clear token */ token[0] = 0; /* ignore all blanks before token */ ignore_blanks( file ); while( !feof( file ) ) { fread( &c, sizeof( char ), 1, file ); /* treat new_lines as blanks */ if ( c == 10 ) c = 32; /* check if this is a comment; if so ignore all characters in between */ if ( c == '#' && !read_str ) { /* read all characters until '#' occurs */ do { fread( &c, sizeof( char ), 1, file ); } while ( c != '#' ); /* ignore all blanks after comment */ ignore_blanks( file ); continue; /* start reading again */ } /* add char */ if ( !add_char( token, c ) ) { /* in this case restore last char as it belongs to next token */ fseek( file, -1, SEEK_CUR ); break; } else length++; /* check if token ends with a special single-character assignment token */ if ( !read_str ) if ( c == '(' || c == ')' || c == '=' ) { /* if this wasn't the first character it already belongs to a new token, so skip it */ if ( length > 1 ) { fseek( file, -1, SEEK_CUR ); token[--length] = 0; } break; } /* check if this char is a blank */ if ( c <= 32 && !read_str ) { /* remvoe this blank from token */ token[--length] = 0; break; } /* check if this is a long string embraced by "..." */ if ( c == '"' ) { if ( length > 1 ) { if ( read_str ) /* termination of string; stop reading */ break; else { /* token read and this " belongs to next token */ /* in this case restore last char */ fseek( file, -1, SEEK_CUR ); token[--length] = 0; break; } } else read_str = 1; } } if ( read_str ) { /* delete brackets from token */ for ( i = 1; i < strlen( token ); i++ ) token[i - 1] = token[i]; token[strlen( token ) - 2] = 0; } if ( feof( file ) ) return 0; return 1; } /* find a string in the file and set file stream to this position */ int find_token( FILE *file, char *name, int type, int warning ) { char token[MAX_TOKEN_LENGTH]; if ( type == RESET_FILE_POS ) fseek( file, 0, SEEK_SET ); while( read_token( file, token ) ) if ( strequal( name, token ) ) { /* adjust position this token must be read */ fseek( file, -strlen( token ) -1, SEEK_CUR ); return 1; } if ( warning == WARNING ) fprintf( stderr, "find_token: warning: token '%s' not found\n", name ); return 0; } /* read argument string of a single assignment */ char* get_arg( FILE *file, char *name, int type ) { char token[MAX_TOKEN_LENGTH]; char *arg = 0; /* search entry_name */ if ( !find_token( file, name, type, WARNING ) ) return 0; /* token was found so read it */ read_token( file, token ); /* next token must be an equation */ read_token( file, token ); if ( token[0] != '=' ) { fprintf( stderr, "get_arg: line %i: '=' expected after token '%s' but found '%s' instead\n", get_line_number( file ), name, token ); return 0; } /* get argument */ read_token( file, token ); if ( token[0] == 0 ) fprintf( stderr, "get_arg: line %i: warning: argument for '%s' is empty\n", get_line_number( file ), name ); arg = strdup( token ); #ifdef FILE_DEBUG printf( "get_arg: %s = %s\n", name, arg ); #endif return arg; } /* read a cluster of arguments and return as static list */ char** get_arg_cluster( FILE *file, char *name, int *count, int type, int warning ) { List *args; char token[MAX_TOKEN_LENGTH]; char **arg_list = 0; int i; *count = 0; /* search entry_name */ if ( !find_token( file, name, type, warning ) ) return 0; /* init list */ args = list_create( LIST_AUTO_DELETE, LIST_NO_CALLBACK ); /* read entry_name */ read_token( file, token ); /* next token must be an '(' */ read_token( file, token ); if ( token[0] != '(' ) { fprintf( stderr, "get_arg_cluster: line %i: '(' expected after token '%s' but found '%s' instead\n", get_line_number( file ), name, token ); return 0; } /* read tokens and add to dynamic list until ')' occurs; if an '=' or '(' is read instead something gone wrong */ while ( 1 ) { read_token( file, token ); if ( token[0] == ')' ) break; if ( token[0] == '(' || token[0] == '=' ) { fprintf( stderr, "get_arg_cluster: line %i: ')' expected to terminate argument list of entry '%s' but found '%c' instead\n", get_line_number( file ), name, token[0] ); list_clear( args ); return 0; } /* everything's ok; add to list */ list_add( args, strdup( token ) ); } /* static argument list */ arg_list = calloc( args->count, sizeof( char* ) ); for ( i = 0; i < args->count; i++ ) arg_list[i] = strdup( (char*)list_get( args, i ) ); *count = args->count; list_delete( args ); return arg_list; } /* free arg cluster */ void delete_arg_cluster( char **cluster, int count ) { int i; if ( cluster ) { for ( i = 0; i < count; i++ ) if ( cluster[i] ) FREE( cluster[i] ); FREE( cluster ); } } /* count number of entries */ int count_arg( FILE *file, char *name ) { char token[MAX_TOKEN_LENGTH]; int count = 0; fseek( file, 0, SEEK_SET ); while ( read_token( file, token ) ) { if ( strequal( name, token ) ) count++; } return count; } /* ==================================================================== Swap these two pointers. ==================================================================== */ void swap( char **str1, char **str2 ) { char *dummy; dummy = *str1; *str1 = *str2; *str2 = dummy; } /* ==================================================================== Return a list with all accessible files and directories in path with the extension ext (if != 0). Don't show hidden files. Root is the name of the parent directory that can't be left. If this is next directory up '..' is not added. ==================================================================== */ Text* get_file_list( char *path, char *ext, char *root ) { Text *text = 0; int i, j; DIR *dir; DIR *test_dir; struct dirent *dirent = 0; List *list = 0; struct stat fstat; char file_name[512]; FILE *file; int len; /* open this directory */ if ( ( dir = opendir( path ) ) == 0 ) { fprintf( stderr, "get_file_list: can't open parent directory '%s'\n", path ); return 0; } text = calloc( 1, sizeof( Text ) ); /* use dynamic list to gather all valid entries */ list = list_create( LIST_AUTO_DELETE, LIST_NO_CALLBACK ); /* read each entry and check if its a valid entry, then add it to the dynamic list */ while ( ( dirent = readdir( dir ) ) != 0 ) { /* hiden stuff is not displayed */ if ( dirent->d_name[0] == '.' && dirent->d_name[1] != '.' ) continue; /* check if it's the root directory */ if ( root ) if ( dirent->d_name[0] == '.' ) if ( strlen( path ) > strlen( root ) ) if ( !strncmp( path + strlen( path ) - strlen( root ), root, strlen( root ) ) ) continue; /* get stats */ sprintf( file_name, "%s/%s", path, dirent->d_name ); if ( stat( file_name, &fstat ) == -1 ) continue; /* check directory */ if ( S_ISDIR( fstat.st_mode ) ) { if ( ( test_dir = opendir( file_name ) ) == 0 ) continue; closedir( test_dir ); sprintf( file_name, "*%s", dirent->d_name ); list_add( list, strdup( file_name ) ); } else /* check regular file */ if ( S_ISREG( fstat.st_mode ) ) { /* test it */ if ( ( file = fopen( file_name, "r" ) ) == 0 ) continue; fclose( file ); /* check if this file has the proper extension */ if ( ext ) if ( !strequal( dirent->d_name + ( strlen( dirent->d_name ) - strlen( ext ) ), ext ) ) continue; list_add( list, strdup( dirent->d_name ) ); } } /* close dir */ closedir( dir ); /* convert to static list */ text->count = list->count; text->lines = calloc( list->count, sizeof( char* )); for ( i = 0; i < text->count; i++ ) text->lines[i] = strdup( (char*)list_get( list, i ) ); list_delete( list ); /* sort this list: directories at top and everything in alphabetical order */ if ( text->count > 0 ) for ( i = 0; i < text->count - 1; i++ ) for ( j = i + 1; j < text->count; j++ ) { /* directory comes first */ if ( text->lines[j][0] == '*' ) { if ( text->lines[i][0] != '*' ) swap( &text->lines[i], &text->lines[j] ); else { /* do not exceed buffer size of smaller buffer */ len = strlen( text->lines[i] ); if ( strlen( text->lines[j] ) < len ) len = strlen( text->lines[j] ); if ( strncmp( text->lines[j], text->lines[i], len ) < 0 ) swap( &text->lines[i], &text->lines[j] ); } } else { /* do not exceed buffer size of smaller buffer */ len = strlen( text->lines[i] ); if ( strlen( text->lines[j] ) < len ) len = strlen( text->lines[j] ); if ( strncmp( text->lines[j], text->lines[i], len ) < 0 ) swap( &text->lines[i], &text->lines[j] ); } } return text; } lbreakout2-2.6.5/client/hint.c0000664000175000017500000002402512140767214013114 00000000000000/*************************************************************************** hint.c - description ------------------- begin : Sun Jan 6 2002 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "hint.h" #include "config.h" SDL_Surface *hint_balloon = 0; SDL_Surface *hint_bkgnd = 0; SDL_Surface *balloon = 0; SDL_Surface *balloon_peek = 0; int balloon_peek_add_x = 9, balloon_peek_add_y = 9; /* added to actual balloon to display peek */ int balloon_tile_size; Hint *cur_hint = 0; StkFont *hint_font = 0; int hint_delay = 0; float hint_alpha; int hint_text_x = 10 + 9, hint_text_y = 10; /* text is drawn at this offset within balloon */ extern Config config; extern SDL_Surface *stk_display; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Create actual hint picture displayed. ==================================================================== */ void hint_create_pic( Hint *hint ) { int x, y, px, py; stk_surface_free( &hint_balloon ); /* get screen size and position */ hint->rect.w = 240 + balloon_peek_add_x; hint->rect.h = balloon_tile_size * ( 2 + ( hint->text->count + 0 ) * hint_font->height / balloon_tile_size ) + balloon_peek_add_y; hint_set_pos( hint, hint->peek_x, hint->peek_y ); /* build surface */ hint_balloon = stk_surface_create( SDL_SWSURFACE, cur_hint->rect.w, cur_hint->rect.h ); for ( y = 0; y < cur_hint->rect.h - balloon_peek_add_y; y += balloon_tile_size ) for ( x = 0; x < cur_hint->rect.w - balloon_peek_add_x; x += balloon_tile_size ) { px = x + balloon_peek_add_x; py = y; /* get proper tile */ if ( y == 0 ) { if ( x == 0 ) stk_surface_blit( balloon, 0, 0, balloon_tile_size, balloon_tile_size, hint_balloon, px, py ); else if ( x >= cur_hint->rect.w - balloon_peek_add_x - balloon_tile_size ) stk_surface_blit( balloon, balloon_tile_size * 2, 0, balloon_tile_size, balloon_tile_size, hint_balloon, px, py ); else stk_surface_blit( balloon, balloon_tile_size, 0, balloon_tile_size, balloon_tile_size, hint_balloon, px, py ); } else if ( y >= cur_hint->rect.h - balloon_peek_add_y - balloon_tile_size ) { if ( x == 0 ) stk_surface_blit( balloon, 0, balloon_tile_size * 2, balloon_tile_size, balloon_tile_size, hint_balloon, px, py ); else if ( x >= cur_hint->rect.w - balloon_peek_add_x - balloon_tile_size ) stk_surface_blit( balloon, balloon_tile_size * 2, balloon_tile_size * 2, balloon_tile_size, balloon_tile_size, hint_balloon, px, py ); else stk_surface_blit( balloon, balloon_tile_size, balloon_tile_size * 2, balloon_tile_size, balloon_tile_size, hint_balloon, px, py ); } else { if ( x == 0 ) stk_surface_blit( balloon, 0, balloon_tile_size, balloon_tile_size, balloon_tile_size, hint_balloon, px, py ); else if ( x >= cur_hint->rect.w - balloon_peek_add_x - balloon_tile_size ) stk_surface_blit( balloon, balloon_tile_size * 2, balloon_tile_size, balloon_tile_size, balloon_tile_size, hint_balloon, px, py ); else stk_surface_blit( balloon, balloon_tile_size, balloon_tile_size, balloon_tile_size, balloon_tile_size, hint_balloon, px, py ); } } /* peek */ stk_surface_blit( balloon_peek, 0, 0, balloon_peek->w, balloon_peek->h, hint_balloon, 0, cur_hint->rect.h - balloon_peek->h ); /* text */ for ( y = 0, x = 0; x < cur_hint->text->count; y += hint_font->height, x++ ) stk_font_write( hint_font, hint_balloon, hint_text_x, hint_text_y + y, -1, cur_hint->text->lines[x] ); } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Load/delete hint resources. ==================================================================== */ void hint_load_res() { balloon = stk_surface_load( SDL_SWSURFACE, "balloon.png" ); balloon_peek = stk_surface_load( SDL_SWSURFACE, "balloon_peek.png" ); balloon_tile_size = balloon->w / 3; hint_font = stk_font_load( SDL_SWSURFACE, "f_tiny_black.png" ); } void hint_delete_res() { stk_surface_free( &balloon ); stk_surface_free( &balloon_peek ); stk_font_free( &hint_font ); stk_surface_free( &hint_balloon ); } /* ==================================================================== Create a hint. The passed x,y position is where the end of the Sprechblasenspitze is. Contents is converted to lines (duplicated). ==================================================================== */ Hint* hint_create( int x, int y, char *contents ) { Hint *hint = calloc( 1, sizeof( Hint ) ); /* get text and position */ hint->text = create_text( contents, 36 ); hint->peek_x = x; hint->peek_y = y; return hint; } void hint_delete( Hint *hint ) { if ( !hint ) return; free( hint ); } /* ==================================================================== Set the background on which the hints will be displayed. ==================================================================== */ void hint_set_bkgnd( SDL_Surface *bkgnd ) { hint_bkgnd = bkgnd; } /* ==================================================================== Set this hint as actual one. If NULL was passed no hint will be handled. ==================================================================== */ void hint_set( Hint *hint ) { if ( config.use_hints ) cur_hint = hint; else cur_hint = 0; if ( cur_hint ) { hint_alpha = 0; hint_delay = 500; hint_create_pic( hint ); /* must be in screen */ if ( hint->rect.x + hint_balloon->w >= stk_display->w ) hint->rect.x = stk_display->w - hint_balloon->w; if ( hint->rect.y < 0 ) hint->rect.y = 0; } } /* ==================================================================== Set hint to this position. ==================================================================== */ void hint_set_pos( Hint *hint, int x, int y ) { hint->peek_x = x; hint->peek_y = y; /* adjust screen position so that balloon's peek is at x,y */ hint->rect.x = x; hint->rect.y = y - hint->rect.h - balloon_peek->h / 2; } /* ==================================================================== Update the contents of a hint. ==================================================================== */ void hint_set_contents( Hint *hint, char *contents ) { delete_text( hint->text ); hint->text = create_text( contents, 36 ); } /* ==================================================================== Show/hide/update _current_ hint. ==================================================================== */ void hint_hide() { if ( !cur_hint || hint_delay ) return; stk_surface_blit( hint_bkgnd, cur_hint->rect.x, cur_hint->rect.y, cur_hint->rect.w, cur_hint->rect.h, stk_display, cur_hint->rect.x, cur_hint->rect.y); stk_display_store_drect(); /* peek */ stk_surface_blit( hint_bkgnd, cur_hint->rect.x + balloon_peek_add_x, cur_hint->rect.y + cur_hint->rect.h + balloon_peek_add_y, balloon_peek->w, balloon_peek->h, stk_display, cur_hint->rect.x + balloon_peek_add_x, cur_hint->rect.y + cur_hint->rect.h + balloon_peek_add_y ); stk_display_store_drect(); } void hint_show() { if ( !cur_hint || hint_delay > 0 ) return; SDL_SetAlpha( hint_balloon, SDL_SRCALPHA, hint_alpha ); stk_surface_blit( hint_balloon, 0, 0, cur_hint->rect.w, cur_hint->rect.h, stk_display, cur_hint->rect.x, cur_hint->rect.y ); stk_display_store_drect(); } void hint_update( int ms ) { /* delay */ if ( hint_delay > 0 ) { hint_delay -= ms; if ( hint_delay <= 0 ) hint_delay = 0; } /* if delay fade blend if if still alpha */ if ( hint_delay == 0 && hint_alpha < 255 ) { hint_alpha += 1.0 * ms; if ( hint_alpha > 255 ) hint_alpha = 255; } } lbreakout2-2.6.5/client/Makefile.in0000664000175000017500000006013012610471343014045 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = lbreakout2$(EXEEXT) subdir = client DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_lbreakout2_OBJECTS = credit.$(OBJEXT) shine.$(OBJEXT) \ extras.$(OBJEXT) balls.$(OBJEXT) shrapnells.$(OBJEXT) \ shots.$(OBJEXT) event.$(OBJEXT) paddle.$(OBJEXT) \ frame.$(OBJEXT) misc.$(OBJEXT) bricks.$(OBJEXT) \ player.$(OBJEXT) file.$(OBJEXT) config.$(OBJEXT) \ setselect.$(OBJEXT) item.$(OBJEXT) menu.$(OBJEXT) \ manager.$(OBJEXT) value.$(OBJEXT) chart.$(OBJEXT) \ editor.$(OBJEXT) help.$(OBJEXT) hint.$(OBJEXT) theme.$(OBJEXT) \ client.$(OBJEXT) client_recv.$(OBJEXT) client_data.$(OBJEXT) \ client_handlers.$(OBJEXT) game.$(OBJEXT) comm.$(OBJEXT) \ slot.$(OBJEXT) display.$(OBJEXT) main.$(OBJEXT) lbreakout2_OBJECTS = $(am_lbreakout2_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) 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 = $(lbreakout2_SOURCES) DIST_SOURCES = $(lbreakout2_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @network_flag@ @sdlnet_flag@ @arch_flag@ @warp_flag@ @audio_flag@ @inst_flag@ @hi_inst_flag@ @locdir_flag@ @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ lbreakout2_SOURCES = credit.c shine.c extras.c balls.c shrapnells.c \ shots.c event.c paddle.c frame.c misc.c bricks.c player.c \ file.c config.c setselect.c \ item.c menu.c manager.c value.c chart.c \ editor.c help.c hint.c theme.c client.c client_recv.c \ client_data.c client_handlers.c game.c comm.c slot.c \ display.c main.c win32.ico lbreakout2_DEPENDENCIES = @win32_deps@ lbreakout2_LDADD = @win32_deps@ ../common/libcommon.a ../gui/libGui.a ../game/libgame.a @mixer_flag@ @sdlnet_lib_flag@ EXTRA_DIST = credit.h shine.h extras.h balls.h shrapnells.h \ shots.h event.h paddle.h frame.h misc.h bricks.h player.h \ file.h config.h lbreakout.h setselect.h \ item.h menu.h manager.h value.h chart.h \ editor.h help.h hint.h theme.h client.h client_data.h \ client_handlers.h game.h comm.h slot.h \ display.h empty.hscr SUBDIRS = gfx sounds levels gui_theme all: all-recursive .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) --foreign client/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign client/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) lbreakout2$(EXEEXT): $(lbreakout2_OBJECTS) $(lbreakout2_DEPENDENCIES) @rm -f lbreakout2$(EXEEXT) $(LINK) $(lbreakout2_LDFLAGS) $(lbreakout2_OBJECTS) $(lbreakout2_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/balls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bricks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chart.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client_data.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client_handlers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client_recv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/credit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/display.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extras.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frame.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/game.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/item.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/manager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paddle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setselect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shots.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shrapnells.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/theme.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/value.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @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@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @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) '$<'` uninstall-info-am: # 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" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @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) $(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) $(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) $(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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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" \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; 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-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-data-local install-exec-am: install-binPROGRAMS install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-local uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ clean clean-binPROGRAMS clean-generic clean-recursive ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-recursive distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-data-local install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-info-am uninstall-local lbreakout2res.o: win32.ico @echo "1 VERSIONINFO" > $(PACKAGE).rc @echo "FILEVERSION `echo $(VERSION) | $(AWK) 'ORS=""; { subs = gsub(/\./,","); print $0; for (ndx=subs; ndx < 3; ndx++) print ",0"; }'`" >> $(PACKAGE).rc @echo "PRODUCTVERSION `echo $(VERSION) | $(AWK) 'ORS=""; { subs = gsub(/\./,","); print $0; for (ndx=subs; ndx < 3; ndx++) print ",0"; }'`" >> $(PACKAGE).rc @echo "FILEFLAGSMASK 0" >> $(PACKAGE).rc @echo "FILEOS 0x40000" >> $(PACKAGE).rc @echo "FILETYPE 1" >> $(PACKAGE).rc @echo "{" >> $(PACKAGE).rc @echo " BLOCK \"StringFileInfo\"" >> $(PACKAGE).rc @echo " {" >> $(PACKAGE).rc @echo " BLOCK \"040904E4\"" >> $(PACKAGE).rc @echo " {" >> $(PACKAGE).rc @echo " VALUE \"CompanyName\", \"LGames - Michael Speck\"" >> $(PACKAGE).rc @echo " VALUE \"FileDescription\", \"@appname@\"" >> $(PACKAGE).rc @echo " VALUE \"FileVersion\", \"$(VERSION)\"" >> $(PACKAGE).rc @echo " VALUE \"InternalName\", \"$(PACKAGE)\"" >> $(PACKAGE).rc @echo " VALUE \"LegalCopyright\", \"GNU Public License\"" >> $(PACKAGE).rc @echo " VALUE \"OriginalFilename\", \"$(PACKAGE)$(EXEEXT)\"" >> $(PACKAGE).rc @echo " VALUE \"ProductName\", \"@appname@\"" >> $(PACKAGE).rc @echo " VALUE \"ProductVersion\", \"$(VERSION)\"" >> $(PACKAGE).rc @echo " }" >> $(PACKAGE).rc @echo " }" >> $(PACKAGE).rc @echo "}" >> $(PACKAGE).rc @echo "0 ICON win32.ico" >> $(PACKAGE).rc @windres -o $@ -i $(PACKAGE).rc install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir) $(mkinstalldirs) $(DESTDIR)$(hi_dir) if ! test -f $(DESTDIR)$(hi_dir)/lbreakout2.hscr; then \ $(INSTALL_DATA) -m 666 empty.hscr $(DESTDIR)$(hi_dir)/lbreakout2.hscr; \ fi; uninstall-local: rm -rf $(DESTDIR)$(inst_dir) rm -f $(DESTDIR)$(hi_dir)/lbreakout2.hscr rm -rf $(DESTDIR)$(doc_dir)/lbreakout2 win32-install-script: @$(STRIP) $(PACKAGE)$(EXEEXT) @echo "Source: \"`pwd -W`\\$(PACKAGE)$(EXEEXT)\"; DestDir: \"{app}\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@ @list='$(SUBDIRS)'; for subdir in $$list; do \ (cd $$subdir \ && $(MAKE) $(AM_MAKEFLAGS) win32-install-script); \ done # 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: lbreakout2-2.6.5/client/event.c0000664000175000017500000000420112140767214013265 00000000000000/*************************************************************************** event.c - description ------------------- begin : Sat Sep 8 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "event.h" extern int stk_quit_request; /* ==================================================================== Event filter that blocks all events. Used to clear the SDL event queue. ==================================================================== */ static int all_filter( const SDL_Event *event ) { return 0; } /* ==================================================================== Handle SDL_QUIT events directly and kill all motion events. ==================================================================== */ int event_filter( const SDL_Event *event ) { if ( event->type == SDL_QUIT ) { stk_quit_request = 1; return 0; } if ( event->type == SDL_MOUSEMOTION ) return 0; return 1; } /* ==================================================================== Clear the SDL event key (keydown events) ==================================================================== */ void event_clear_sdl_queue() { SDL_EventFilter old_filter; SDL_Event event; old_filter = SDL_GetEventFilter(); SDL_SetEventFilter( all_filter ); while ( SDL_PollEvent( &event ) ); SDL_SetEventFilter( old_filter ); } lbreakout2-2.6.5/client/setselect.h0000664000175000017500000000154712140767214014156 00000000000000/* * 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. */ #ifndef __SETSELECT_H__ #define __SETSELECT_H__ void setselect_create(); void setselect_delete(); const char * setselect_run(); #endif lbreakout2-2.6.5/client/client_data.c0000664000175000017500000003330012140767214014415 00000000000000/*************************************************************************** client_data.c - description ------------------- begin : Sat Oct 26 12:02:57 CEST 2002 copyright : (C) 2002 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "client_data.h" #include "lbreakout.h" #include "../gui/gui.h" /* ==================================================================== Externals ==================================================================== */ extern GuiWidget *list_levels; extern GuiWidget *list_chatter; extern GuiWidget *list_games; extern GuiWidget *list_users; extern GuiWidget *list_channels; extern GuiWidget *list_pausechatter; List *client_users = 0; /* users of channel known to client */ List *client_channels = 0; /* list of default channels (strings) */ List *client_levelsets = 0; /* list of MP set names */ ClientUser *client_user = 0; /* selected user */ char *client_levelset = 0; /* selected levelset */ char chatter[CHAT_LINE_COUNT][CHAT_LINE_WIDTH]; char pause_chatter[CHAT_LINE_COUNT][CHAT_LINE_WIDTH]; extern NetSocket client; extern int client_is_connected; #define MAX_CLIENT_TOPIC_COUNT 5 int client_topic_count = 4; char *client_topics[MAX_CLIENT_TOPIC_COUNT]; char *client_helps[MAX_CLIENT_TOPIC_COUNT]; Text *client_help_text = 0; /* ==================================================================== LOCALS ==================================================================== */ static void client_add_chatter_intern( GuiWidget *list, char *string, int info ) { int i, j; static Text *text; /* build new text */ text = create_text( string, 52 ); /* move old lines up */ for ( i = 0; i < CHAT_LINE_COUNT - text->count; i++ ) strcpy( chatter[i], chatter[i + text->count] ); /* copy new lines */ for ( j = 0, i = CHAT_LINE_COUNT - text->count; i < CHAT_LINE_COUNT; i++, j++ ) { if ( info ) { strcpy( chatter[i] + 1, text->lines[j] ); chatter[i][0] = '!'; } else if ( j > 0 ) { strcpy( chatter[i] + 3 + info, text->lines[j] ); chatter[i][0] = ' '; chatter[i][1] = ' '; chatter[i][2] = ' '; } else strcpy( chatter[i], text->lines[j] ); } /* free memory */ delete_text( text ); /* update gui */ gui_list_update( list, CHAT_LINE_COUNT ); } static void client_add_pause_chatter_intern( GuiWidget *list, char *string, int info ) { int i, j; static Text *text; /* build new text */ text = create_text( string, 52 ); /* move old lines up */ for ( i = 0; i < CHAT_LINE_COUNT - text->count; i++ ) strcpy( pause_chatter[i], pause_chatter[i + text->count] ); /* copy new lines */ for ( j = 0, i = CHAT_LINE_COUNT - text->count; i < CHAT_LINE_COUNT; i++, j++ ) { if ( info ) { strcpy( pause_chatter[i] + 1, text->lines[j] ); pause_chatter[i][0] = '!'; } else if ( j > 0 ) { strcpy( pause_chatter[i] + 3 + info, text->lines[j] ); pause_chatter[i][0] = ' '; pause_chatter[i][1] = ' '; pause_chatter[i][2] = ' '; } else strcpy( pause_chatter[i], text->lines[j] ); } /* free memory */ delete_text( text ); /* update gui */ gui_list_update( list, CHAT_LINE_COUNT ); } /* ==================================================================== PUBLICS ==================================================================== */ /* transmit via client's socket if client_is_connected is True */ void client_transmit( int type, int len, char *data ) { #ifdef NETWORK_ENABLED if ( client_is_connected ) socket_transmit( &client, type, len, data ); #endif } /* ==================================================================== Create/delete client's data structs. ==================================================================== */ void client_data_create( void ) { client_channels = list_create( LIST_AUTO_DELETE, 0 /*just strings*/ ); client_users = list_create( LIST_AUTO_DELETE, 0 ); client_levelsets = list_create( LIST_AUTO_DELETE, 0 ); /* help defined here for localization reasons */ client_topics[0] = strdup(_("Challenges")); client_topics[1] = strdup(_("Channels")); client_topics[2] = strdup(_("Console Commands")); client_topics[3] = strdup(_("Game Rules")); client_topics[4] = strdup(_("Transfers")); client_helps[0] = strdup(_( "To challenge a user you first have to select him/her in the " "upper right list and the levelset you want to play " "from the list below. Then you adjust the game settings to your " "likings and hit the 'Challenge' button which will send your " "challenge to the other user who will either accept or decline. " "If (s)he accepts a direct connection will be established and the " "game will start.##" "DIFFICULTY: This influences ball speed, paddle size and score as for " "single player modus. (1 = Easy, 2 = Medium, 3 = Hard)##" "ROUNDS: This is the number of rounds played per level. Winning a " "round scores one point and the player with the most points wins " "the match.##" "FRAGS: In a pingpong level (no bricks) a player gains a frag everytime " "the opponent looses a ball. 'frag' is a bad name for this, should be " "pingpong winning score or something but 'frags' is simply shorter. " "The player who hits this limit first " "wins the round.#In levels with bricks this option is ignored " "and the level is over after all bricks were cleared.##" "BALLS: In a pingpong level (no bricks) each player may fire multiple " "balls up to this number. If a player looses a ball he may fire it again.#" "In normal levels (with bricks) this option is ignored and a gets a new ball " "after five seconds penalty time.")); client_helps[1] = strdup(_( "To switch a channel hit the 'C' button above the user list. " "You can enter either an existing or a new channel. You " "can only talk to and challenge users in the same channel.")); client_helps[2] = strdup(_( "User Console Commands:##" "/search #" "Search for a user in all channels.##" "/version#" "Display version of transmission protocol.##" "/info#" "Display current userlimit and frame rate.##" "Admin Console Commands:##" "/admin_says #" "Broadcast a message to all chatting users.##" "/kick #" "Kick user by that name.##" "/addbot #" "Add a paddle bot. The speed is defined in pixels per second. 800 to 1000 is a good value.##" "/delbot #" "Delete paddle bot.##" "/set #" "Set a variable to a new value:#" " userlimit: is the number of users that may login. If decreased with too many users online" " no one is kicked. This limit does not matter for admin login.#" " fps: is how many times a second the server calls up the communication and sends/receives" " packets. This should not be too high to prevent network flooding. 40 is a good value.#" " packetlimit: if not -1 this is the number of packets parsed in one communication step. -1" " which is the default means the queue is parsed until empty##" "/addset #" "Load a new levelset that has been copied to the levels directory and make it available " "to the users.##" "/halt#" "Halt server after 5 seconds and inform all users, even the playing ones, about this.")); client_helps[3] = /* xgettext:no-c-format */ strdup(_( "Basically you play the game as in single player mode but their " "are some special things you might find useful to know.##" "PINGPONG:#" "The point here is to play it fast and to use all of your balls. " "Use the right and left mouse button to fire the balls " "while moving the paddle. Your opponent " "will have trouble to reflect all balls if you do it right. " "If you are not sure wether you got balls left click anyway. " "Keep the button pressed for a while! The fire rate is restricted " "to one ball every 500 milliseconds.##" "NORMAL:#" "Your goal here is too gain more score than your opponent to win a " "round. Basically you do this by clearing bricks and collecting extras " "but there are some other ways as well:#" "1) To loose a ball means to loose 10% score. After five seconds penalty " "a new ball is created and you can continue playing.#" "2) Hitting your opponents paddle with the plasma weapon will give you " "1000 points while stealing him/her the same amount.#" "3) Bonus/penalty magnet will attract _all_ bonuses/penalties even those " "released by your opponent.##" "Note: If you pause the game by pressing 'p' a chat will pop up and you " "can talk to your opponent.")); client_helps[4] = strdup(_( "You cannot offer someone your levelset unless this user " "wants to receive your set which requires the following steps:#" "1) select the user to whom you want to listen#" "2) press the 'L' button above the levelset list#" "3) wait for offer or cancel 'listening'#" "The receiver is now ready and the sender has to:#" "1) select the listening user#" "2) select the levelset (s)he wants to transfer#" "3) hit the 'T' button above the levelset list#" "If the receiver has this levelset already located in " "~/.lgames/lbreakout2-levels and it is up-to-date the transfer " "does not take place otherwise the receiver is asked to confirm " "and if (s)he does so the set is transferred to the home " "directory and directly available if intended for network. (starts with 'MP_')#" "NOTE: Only the challenger is required to have the levelset so you " "don not have to transfer sets to play with someone. However if your opponent " "likes your set and wants to challenge others with it both can engage into " "a transfer.")); } void client_data_delete( void ) { int i; if ( client_channels ) list_delete( client_channels ); client_channels = 0; if ( client_users ) list_delete( client_users ); client_users = 0; if ( client_levelsets ) list_delete( client_levelsets ); client_levelsets = 0; if ( client_help_text ) delete_text( client_help_text ); client_help_text = 0; for (i=0;iname, name, 12 ); user->id = id; list_add( client_users, user ); } } void client_remove_user( int id ) { ClientUser *entry = 0; if ( ( entry = client_find_user( id ) ) ) { if ( entry == client_user ) client_user = 0; list_delete_item( client_users, entry ); } } ClientUser* client_find_user( int id ) { ClientUser *entry; list_reset( client_users ); while ( ( entry = list_next( client_users ) ) ) if ( entry->id == id ) return entry; return 0; } /* ==================================================================== Add chatter to chat window. If 'info' is true the text is displayed red and without indention. ==================================================================== */ void client_add_chatter( char *string, int info ) { client_add_chatter_intern( list_chatter, string, info ); } /* ==================================================================== Add chatter to chat window. If 'info' is true the text is displayed red and without indention. ==================================================================== */ void client_printf_chatter( int info, char *format, ... ) { va_list args; char string[MAX_CHATTER_SIZE]; va_start( args, format ); vsnprintf( string, MAX_CHATTER_SIZE, format, args ); va_end( args ); client_add_chatter_intern( list_chatter, string, info ); } /* ==================================================================== Add chatter to pause chat window. If 'info' is true the text is displayed red and without indention. ==================================================================== */ void client_add_pausechatter( char *string, int info ) { client_add_pause_chatter_intern( list_pausechatter, string, info ); } lbreakout2-2.6.5/client/win32.ico0000664000175000017500000002715612140767214013454 00000000000000(vh  00h^00( wwqwwpwwwwwwww""r""'""""r""'""wwwwwwwwqqwwwwwwww(  9ae!a!)q))u))})1y)BQ9!,c)8c18s1ER1IR9Ic1Qc1Es1ik9e{ZuZBY{RikJisJe{Bm{RisRmsRi{!!))))))1199111111999999999999RRZRRZBBJJZZZZ!0)<U1a9}!e)mqB]BiJiJmJaBmJyRqRuJyJ}J}RyR}J}ckkkJJ1199RBBcϜ:AQSRP9Eihkkkljg ccdfcdc **( $,,**'*,, 1184+115.62111 %%.7#%%%%-3&%%JJ=NJJMGTGJJ?\\aOZ__\\^O``\>;WY\U@WWWY[LWVW;DFHBD"    &SOQOU!XOSRSOQOU!XOSRSO&&KPKJZ$VMKMKPKJZ$VMKMKP&#KKKKZ%[KKKKKKKZ%[KKKKK#"GGGGI%WGHGGGGGI%WGHGGG"8lvmsT9tlulvmsT9tlulv76peonr.nqppeonr.nqppe5;hԮxۯ{y>GHGGH<;:FHNGGGGHF::FFNHGGGJN=9ʊ莾98Ȍꑼ¿88ɍ鍼9 󵲰첰SRRRRQM=KSSQRSRSSQRML=SSQRSRSR???(0`wwwwwwwwwwwwwwwwwwwwwwqxqqqxxwxqqwwwwwww6vwawr@x g`wwwwwwwwwwwwwwwwwwwwwwpxx"""""(r""""""""(r""""" """""(r""""""""(r""""" """""(r""""""""(r""""" """""(r""""""""(r""""" """""(r""""""""(r""""" """""(r""""""""(r""""" """""(r""""""""(r""""" xxwwwwwwwwwwwwwwwwwwwwwwpxxqqqqqqqqqqqqqqwwwwwwwwwwwwwwwwwwwwwwp?(0`   < !)!19$9!,!!,))())0!1<)!,1!01!41)09)491<1989J8)R<)IYamqquy1E19M19M99Q9BJ Z,R18J!0Rckk{4c s({?KMMNMKMKMMKC?42662AcfggeP|~~~~~|Rdcec2Tpstxxr}qxtke5OyusoCzsonujBduvv{yj98febLSTUUTTTTUUSOQNJ; $(PACKAGE).rc @echo "FILEVERSION `echo $(VERSION) | $(AWK) 'ORS=""; { subs = gsub(/\./,","); print $0; for (ndx=subs; ndx < 3; ndx++) print ",0"; }'`" >> $(PACKAGE).rc @echo "PRODUCTVERSION `echo $(VERSION) | $(AWK) 'ORS=""; { subs = gsub(/\./,","); print $0; for (ndx=subs; ndx < 3; ndx++) print ",0"; }'`" >> $(PACKAGE).rc @echo "FILEFLAGSMASK 0" >> $(PACKAGE).rc @echo "FILEOS 0x40000" >> $(PACKAGE).rc @echo "FILETYPE 1" >> $(PACKAGE).rc @echo "{" >> $(PACKAGE).rc @echo " BLOCK \"StringFileInfo\"" >> $(PACKAGE).rc @echo " {" >> $(PACKAGE).rc @echo " BLOCK \"040904E4\"" >> $(PACKAGE).rc @echo " {" >> $(PACKAGE).rc @echo " VALUE \"CompanyName\", \"LGames - Michael Speck\"" >> $(PACKAGE).rc @echo " VALUE \"FileDescription\", \"@appname@\"" >> $(PACKAGE).rc @echo " VALUE \"FileVersion\", \"$(VERSION)\"" >> $(PACKAGE).rc @echo " VALUE \"InternalName\", \"$(PACKAGE)\"" >> $(PACKAGE).rc @echo " VALUE \"LegalCopyright\", \"GNU Public License\"" >> $(PACKAGE).rc @echo " VALUE \"OriginalFilename\", \"$(PACKAGE)$(EXEEXT)\"" >> $(PACKAGE).rc @echo " VALUE \"ProductName\", \"@appname@\"" >> $(PACKAGE).rc @echo " VALUE \"ProductVersion\", \"$(VERSION)\"" >> $(PACKAGE).rc @echo " }" >> $(PACKAGE).rc @echo " }" >> $(PACKAGE).rc @echo "}" >> $(PACKAGE).rc @echo "0 ICON win32.ico" >> $(PACKAGE).rc @windres -o $@ -i $(PACKAGE).rc bin_PROGRAMS = lbreakout2 lbreakout2_SOURCES = credit.c shine.c extras.c balls.c shrapnells.c \ shots.c event.c paddle.c frame.c misc.c bricks.c player.c \ file.c config.c setselect.c \ item.c menu.c manager.c value.c chart.c \ editor.c help.c hint.c theme.c client.c client_recv.c \ client_data.c client_handlers.c game.c comm.c slot.c \ display.c main.c win32.ico lbreakout2_DEPENDENCIES = @win32_deps@ lbreakout2_LDADD = @win32_deps@ ../common/libcommon.a ../gui/libGui.a ../game/libgame.a @mixer_flag@ @sdlnet_lib_flag@ EXTRA_DIST = credit.h shine.h extras.h balls.h shrapnells.h \ shots.h event.h paddle.h frame.h misc.h bricks.h player.h \ file.h config.h lbreakout.h setselect.h \ item.h menu.h manager.h value.h chart.h \ editor.h help.h hint.h theme.h client.h client_data.h \ client_handlers.h game.h comm.h slot.h \ display.h empty.hscr SUBDIRS = gfx sounds levels gui_theme install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir) $(mkinstalldirs) $(DESTDIR)$(hi_dir) if ! test -f $(DESTDIR)$(hi_dir)/lbreakout2.hscr; then \ $(INSTALL_DATA) -m 666 empty.hscr $(DESTDIR)$(hi_dir)/lbreakout2.hscr; \ fi; uninstall-local: rm -rf $(DESTDIR)$(inst_dir) rm -f $(DESTDIR)$(hi_dir)/lbreakout2.hscr rm -rf $(DESTDIR)$(doc_dir)/lbreakout2 win32-install-script: @$(STRIP) $(PACKAGE)$(EXEEXT) @echo "Source: \"`pwd -W`\\$(PACKAGE)$(EXEEXT)\"; DestDir: \"{app}\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@ @list='$(SUBDIRS)'; for subdir in $$list; do \ (cd $$subdir \ && $(MAKE) $(AM_MAKEFLAGS) win32-install-script); \ done lbreakout2-2.6.5/client/client_handlers.c0000664000175000017500000004523312140767214015314 00000000000000/*************************************************************************** client_handlers.c - description ------------------- begin : Sat Oct 26 12:02:57 CEST 2002 copyright : (C) 2002 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "config.h" #include "../gui/gui.h" #include "client_data.h" #include "client_handlers.h" #include "comm.h" #include "game.h" /* ==================================================================== Externals ==================================================================== */ extern Config config; extern List *client_users; extern List *client_games; extern List *client_channels; extern List *client_levelsets; extern char *client_levelset; extern ClientUser *client_user; extern char chatter[CHAT_LINE_COUNT][CHAT_LINE_WIDTH]; extern GuiWidget *dlg_connect; extern GuiWidget *dlg_info; extern GuiWidget *dlg_confirm; extern GuiWidget *dlg_chatroom; extern GuiWidget *dlg_channels; extern GuiWidget *dlg_stats; extern GuiWidget *dlg_pauseroom; extern GuiWidget *dlg_help; extern GuiWidget *label_info; extern GuiWidget *label_stats; extern GuiWidget *label_winner; extern GuiWidget *label_channel; extern GuiWidget *edit_server; extern GuiWidget *edit_username; extern GuiWidget *list_chatter; extern GuiWidget *edit_chatter; extern GuiWidget *list_levels; extern GuiWidget *list_users; extern GuiWidget *list_channels; extern GuiWidget *edit_channel; extern GuiWidget *edit_pausechatter; extern GuiWidget *list_help; extern int levelset_version, levelset_update; extern List *levels; extern void client_popup_info( char *format, ... ); extern void client_run_game( int challenger ); extern int client_topic_count; extern char *client_helps[]; extern Text *client_help_text; /* ==================================================================== Client ==================================================================== */ #ifdef NETWORK_ENABLED NetSocket client; /* client socket to the game server */ #endif int client_is_connected; /* wether 'client' is a valid uplink */ char client_error[128]; /* error message */ int client_id; /* id assigned by server */ char client_name[16]; /* our local username */ int client_state = CLIENT_NONE; int client_recv_limit; /* ==================================================================== Challenge data ==================================================================== */ char *mp_diff_names[] = { "Easy", "Medium", "Hard" }; char mp_levelset[16]; /* name of levelset we play */ int mp_peer_id; char mp_peer_name[16]; /* remote player we want to play with */ int mp_levelset_version; int mp_levelset_update; /* version of levelset */ int mp_level_count; /* number of levels in set */ int mp_diff, mp_rounds, mp_frags, mp_balls; /* game configuration */ extern void close_pause_chat( void ); /* ==================================================================== Disconnect from current server if any. ==================================================================== */ void client_disconnect() { #ifdef NETWORK_ENABLED char buf[128]; if ( !client_is_connected ) return; /* disconnect */ socket_print_stats( &client ); sprintf( buf, _("disconnected from %s"), net_addr_to_string(&client.remote_addr) ); client_add_chatter( buf, 1 ); buf[0] = MSG_DISCONNECT; client_transmit( CODE_BLUE, 1, buf ); client_is_connected = 0; client_data_clear(); gui_label_set_text( label_channel, "MAIN" ); #endif } /* ==================================================================== Try to connect to a game server. Retry twice every second or quit then. ==================================================================== */ void client_connect( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED NetAddr newaddr; int attempt = 0; int type; char server[128]; if ( event->type != GUI_CLICKED ) return; /* close the connect window */ gui_widget_hide( dlg_connect ); /* disconnect from current server */ client_disconnect(); /* extract ip and port and build a new socket out of it */ gui_edit_get_text( edit_server, server, 128, 0, -1 ); snprintf( config.server, 64, "%s", server ); if ( !net_build_addr( &newaddr, server, 0 ) ) { client_printf_chatter( 1, _("ERROR: address %s does not resolve"), config.server ); return; } socket_init( &client, &newaddr ); /* get username */ gui_edit_get_text( edit_username, config.username, 16, 0,-1 ); /* build connect message */ msg_begin_writing( msgbuf, &msglen, 64 ); msg_write_int8( MSG_CONNECT ); msg_write_int8( PROTOCOL ); msg_write_string( config.username ); msg_write_string( _("unused") ); /* passwd */ while ( attempt < 3 ) { client_printf_chatter( 1, "%s: %s...", config.server, attempt==0?_("connecting"):_("retry") ); stk_display_update( STK_UPDATE_ALL ); net_transmit_connectionless( &newaddr, msglen, msgbuf ); SDL_Delay( 1000 ); while ( net_recv_packet() ) { if ( msg_is_connectionless() ) msg_begin_connectionless_reading(); else if ( !socket_process_header( &client ) ) continue; type = msg_read_int8(); switch ( type ) { case MSG_LOGIN_OKAY: client_id = msg_read_int32(); strcpy( client_name, msg_read_string() ); client_printf_chatter( 1, _("%s: connected!"), config.server ); client_is_connected = 1; return; case MSG_ERROR: client_printf_chatter( 1, _("ERROR: connection refused: %s"), msg_read_string() ); return; } } attempt++; } client_add_chatter( _("ERROR: server does not respond"), 1 ); #endif } /* ==================================================================== Open/close the connection window. ==================================================================== */ void client_open_connect_window( GuiWidget *widget, GuiEvent *event ) { if ( event->type == GUI_CLICKED ) gui_widget_show( dlg_connect ); } void client_close_connect_window( GuiWidget *widget, GuiEvent *event ) { if ( event->type == GUI_CLICKED ) gui_widget_hide( dlg_connect ); } /* ==================================================================== Close chatroom and return to LBreakout's menu. ==================================================================== */ void client_quit( GuiWidget *widget, GuiEvent *event ) { if ( event->type == GUI_CLICKED ) gui_widget_hide( dlg_chatroom ); /* disconnect is handled in client_run to cover * stk_quit_requests as well */ } /* ==================================================================== Close the info window and clear state. ==================================================================== */ void client_close_info( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED if ( event->type == GUI_CLICKED ) { gui_widget_hide( dlg_info ); msg_begin_writing( msgbuf, &msglen, 128 ); switch ( client_state ) { case CLIENT_AWAIT_ANSWER: msg_write_int8( MSG_CANCEL_GAME ); break; } client_transmit( CODE_BLUE, msglen, msgbuf ); client_state = CLIENT_NONE; } #endif } /* ==================================================================== Send chatter this function is either called by the send button or by the edit. ==================================================================== */ void client_send_chatter( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED char buf[MAX_CHATTER_SIZE + 1]; if ( ( widget->type == GUI_EDIT && event->type == GUI_KEY_RELEASED && event->key.keysym == SDLK_RETURN ) || ( widget->type == GUI_BUTTON && event->type == GUI_CLICKED ) ) { /* get message */ gui_edit_get_text( edit_chatter, buf, MAX_CHATTER_SIZE + 1, 0,-1 ); /* clear chat edit */ gui_edit_set_text( edit_chatter, "" ); msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); /* a prepended '/' means this is a command */ if ( buf[0] == '/' ) { msg_write_int8( MSG_COMMAND ); msg_write_string( buf+1 ); } else { msg_write_int8( MSG_CHATTER ); msg_write_string( buf ); } client_transmit( CODE_BLUE, msglen, msgbuf ); } #endif } /* ==================================================================== Whisper chatter if a user is selected. ==================================================================== */ void client_whisper_chatter( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED char buf[MAX_CHATTER_SIZE + 1]; if ( event->type != GUI_CLICKED ) return; /* get message */ gui_edit_get_text( edit_chatter, buf, MAX_CHATTER_SIZE + 1, 0,-1 ); /* send to selected user */ if ( client_user ) { msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_WHISPER ); msg_write_int32( client_user->id ); msg_write_string( buf ); client_transmit( CODE_BLUE, msglen, msgbuf ); /* clear chat edit */ gui_edit_set_text( edit_chatter, "" ); } else client_add_chatter( _("You must select a user to whisper!"), 1 ); #endif } /* ==================================================================== Update selected peer and levelset. ==================================================================== */ void client_handle_user_list( GuiWidget *widget, GuiEvent *event ) { if ( event->type == GUI_ITEM_SELECTED ) client_user = list_get( client_users, event->item.y ); else if ( event->type == GUI_ITEM_UNSELECTED ) client_user = 0; } void client_handle_levelset_list( GuiWidget *widget, GuiEvent *event ) { if ( event->type == GUI_ITEM_SELECTED ) client_levelset = list_get( client_levelsets, event->item.y ); else if ( event->type == GUI_ITEM_UNSELECTED ) client_levelset = 0; } /* ==================================================================== Handle confirmation/cancelling of confirmation dialogue. ==================================================================== */ void client_confirm( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED if ( event->type != GUI_CLICKED ) return; gui_widget_hide( dlg_confirm ); msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); switch ( client_state ) { case CLIENT_ANSWER: msg_write_int8( MSG_ACCEPT_CHALLENGE ); client_transmit( CODE_BLUE, msglen, msgbuf ); /* play */ gui_disable_event_filter(); if ( client_game_init_network( mp_peer_name, mp_diff ) ) client_game_run(); client_game_finalize(); gui_enable_event_filter(); gui_widget_draw( dlg_chatroom ); stk_display_fade( STK_FADE_IN, STK_FADE_DEFAULT_TIME ); break; } #endif } void client_cancel( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED if ( event->type != GUI_CLICKED ) return; gui_widget_hide( dlg_confirm ); msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); switch ( client_state ) { case CLIENT_ANSWER: msg_write_int8( MSG_REJECT_CHALLENGE ); break; } client_transmit( CODE_BLUE, msglen, msgbuf ); client_state = CLIENT_NONE; #endif } /* ==================================================================== Challenge selected user. ==================================================================== */ void client_challenge( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED if ( event->type != GUI_CLICKED ) return; /* everything valid? */ if ( client_user == 0 ) { client_popup_info( _("You must select a user for a challenge.") ); return; } if ( client_levelset == 0 ) { client_popup_info( _("You must select a levelset for a challenge.") ); return; } if ( client_user->id == client_id ) { client_popup_info( _("You can't challenge yourself.") ); return; } strcpy( mp_peer_name, client_user->name ); mp_peer_id = client_user->id; strcpy( mp_levelset, client_levelset ); mp_diff = config.mp_diff; mp_rounds = config.mp_rounds; mp_balls = config.mp_balls; mp_frags = config.mp_frags; /* challenger, challenged, levelset, diff, rounds, frags, balls */ msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_OPEN_GAME ); msg_write_int32( mp_peer_id ); msg_write_string( mp_levelset ); msg_write_int8( mp_diff ); msg_write_int8( mp_rounds ); msg_write_int8( mp_frags ); msg_write_int8( mp_balls ); client_transmit( CODE_BLUE, msglen, msgbuf ); client_popup_info( _("You have challenged %s. Let's see what (s)he says..."), mp_peer_name ); client_state = CLIENT_AWAIT_ANSWER; #endif } /* ==================================================================== Update multiplayer network configuration. ==================================================================== */ void client_update_difficulty( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CHANGED ) return; gui_spinbutton_get_value( widget, &config.mp_diff ); config.mp_diff--; } void client_update_rounds( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CHANGED ) return; gui_spinbutton_get_value( widget, &config.mp_rounds ); } void client_update_frags( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CHANGED ) return; gui_spinbutton_get_value( widget, &config.mp_frags ); } void client_update_balls( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CHANGED ) return; gui_spinbutton_get_value( widget, &config.mp_balls ); } /* ==================================================================== Open channel selector ==================================================================== */ void client_select_channel( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CLICKED ) return; /* select first channel (we always have MAIN) */ gui_list_update( list_channels, client_channels->count ); if ( client_channels->count > 0 ) { gui_edit_set_text( edit_channel, list_first( client_channels ) ); gui_list_select( list_channels, 0,0, 1 ); } gui_widget_show( dlg_channels ); client_state = CLIENT_SELECT_CHANNEL; } /* ==================================================================== Handle channel (un)selection. ==================================================================== */ void client_handle_channel_list( GuiWidget *widget, GuiEvent *event ) { char *name; /* if a channel is selected the name is copied into the edit. unselecting does not change anything. the channel by the caption in the edit is opened on enter_channel() */ if ( event->type == GUI_ITEM_SELECTED ) { name = list_get( client_channels, event->item.y ); if ( name ) gui_edit_set_text( edit_channel, name ); } } /* ==================================================================== Close channel selector or enter new channel. ==================================================================== */ void client_enter_channel( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED char buf[16]; if ( event->type != GUI_CLICKED ) return; gui_widget_hide( dlg_channels ); client_state = CLIENT_NONE; /* retreive name of channel we want to enter */ buf[0] = 0; gui_edit_get_text( edit_channel, buf, 16, 0,-1 ); /* send it */ msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_ENTER_CHANNEL ); msg_write_string( buf ); client_transmit( CODE_BLUE, msglen, msgbuf ); #endif } void client_cancel_channel( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CLICKED ) return; gui_widget_hide( dlg_channels ); client_state = CLIENT_NONE; } /* ==================================================================== Close statistics ==================================================================== */ void client_close_stats( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CLICKED ) return; gui_widget_hide( dlg_stats ); client_state = CLIENT_NONE; gui_label_set_text( label_stats, _("Awaiting stats...") ); gui_label_set_text( label_winner, "..." ); } /* ==================================================================== Send chatter to gamepeer in pauseroom when ENTER was pressed. ==================================================================== */ void client_send_pausechatter( GuiWidget *widget, GuiEvent *event ) { #ifdef NETWORK_ENABLED char buf[MAX_CHATTER_SIZE + 1]; if ( widget->type == GUI_EDIT && event->type == GUI_KEY_RELEASED && event->key.keysym == SDLK_RETURN ) { /* get message */ sprintf( buf, "<%s> ", client_name ); gui_edit_get_text( edit_pausechatter, buf+strlen(buf), MAX_CHATTER_SIZE + 1, 0,-1 ); /* clear chat edit */ gui_edit_set_text( edit_pausechatter, "" ); /* deliver message to remote ... */ msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_CHATTER ); msg_write_string( buf ); client_transmit( CODE_BLUE, msglen, msgbuf ); client_add_pausechatter( buf, 0 ); } #endif } /* ==================================================================== Close pauseroom. ==================================================================== */ void client_close_pauseroom( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CLICKED ) return; close_pause_chat(); comm_send_short( MSG_UNPAUSE ); } /* ==================================================================== Popup help dialogue. ==================================================================== */ void client_popup_help( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CLICKED ) return; gui_widget_show( dlg_help ); client_state = CLIENT_HELP; } /* ==================================================================== Close help dialogue. ==================================================================== */ void client_close_help( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_CLICKED ) return; gui_widget_hide( dlg_help ); } /* ==================================================================== Select topic and display help text. ==================================================================== */ void client_handle_topic_list( GuiWidget *widget, GuiEvent *event ) { if ( event->type != GUI_ITEM_SELECTED ) return; if ( event->item.y >= client_topic_count ) return; gui_list_goto( list_help, 0 ); if ( client_help_text ) delete_text( client_help_text ); client_help_text = create_text( client_helps[event->item.y], 41 ); gui_list_update( list_help, client_help_text->count ); } lbreakout2-2.6.5/client/game.c0000664000175000017500000013367012140767214013072 00000000000000/*************************************************************************** local_game.c - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "../game/game.h" #include "../gui/gui.h" #include "client_data.h" #include "event.h" #include "config.h" #include "shrapnells.h" #include "player.h" #include "display.h" #include "paddle.h" #include "chart.h" #include "shine.h" #include "credit.h" #include "bricks.h" #include "shots.h" #include "frame.h" #include "balls.h" #include "extras.h" #include "help.h" #include "game.h" #include "comm.h" #include "slot.h" #include "manager.h" SDL_Surface *bkgnd = 0; /* current background picture */ extern SDL_Surface *nuke_bkgnd; /* nuke background */ SDL_Surface *offscreen = 0; /* buffer with frame, background and bricks */ extern StkFont *font; /* standard font */ extern Config config; /* lbreakout config struct */ extern int stk_quit_request; /* terminate game */ extern SDL_Surface *stk_display; extern SDL_Surface *brick_pic; extern int player_count; extern Player players[MAX_PLAYERS]; /* player infos */ #ifdef AUDIO_ENABLED extern StkSound *wav_click; extern StkSound *wav_damn, *wav_dammit, *wav_wontgiveup, *wav_excellent, *wav_verygood; #endif extern int ball_pic_x_offset; extern int paddle_cw; extern List *client_users; extern ClientUser *client_user; extern GuiWidget *list_users; extern char pause_chatter[CHAT_LINE_COUNT][CHAT_LINE_WIDTH]; extern GuiWidget *gui_key_widget; extern GuiWidget *gui_clicked_widget; extern GuiWidget *gui_focused_widget; extern GuiWidget *dlg_pauseroom, *dlg_chatroom; extern List *levelset_names; Player *cur_player = 0; /* current player */ Paddle *l_paddle = 0; /* locally controlled paddle */ Paddle *r_paddle = 0; /* remotely controlled paddle */ LevelSet *game_set; /* set that is played */ Game *local_game = 0; /* in a local game the remote side is faked in this game context to have just one main loop for both game types */ Game *game = 0; /* local/network game context */ int game_round; /* id of current round in network game */ int game_stats[2][7]; /* network game stats */ int stats_received = 0; int game_over = 0; /* network game is over */ int allow_disintegrate = 1; /* wether Plane of Inner Stability may be entered */ char best_name[32]; int best_score; /* result of first place in chart of local set */ int showing_best = 0; /* if true best score is shown, thus display should not be updated */ Display *display_score[2]; /* either score or frags */ Display *display_player[2]; /* player name and lifes or wins */ Display *bl_display; /* display some special data of bonus levels */ extern int client_state; extern int warp_blinks, warp_blink; extern SDL_Surface *paddle_pic, *weapon_pic, *ball_pic, *extra_pic, *shot_pic; extern StkFont *display_font; extern int bkgnd_count; int bkgnd_ids[MAX_LEVELS]; /* random background ids changed everytime a game is started */ int client_comm_delay; /* delay between communications */ int no_comm_since; /* time passed this last comm */ extern char client_name[16]; /* our local username */ int gameSeed = 0; /* last used seed for freakout game */ extern int current_player; extern Item *item_resume_0; /* ==================================================================== Locals ==================================================================== */ /* initiate the level of the game context by using the player's * snapshot. the snapshot must've been previously set either by * net update or locally. 'l_pos' is either PADDLE_BOTTOM or TOP * indicating which paddle client controls in network game. */ static int init_level( Player *player, int l_pos ) { int length; char str[32]; /* init level by replacing with the players snapshot. this will * screw the total brick count thus stats are useless for local * game but they are not used anyway as the remote/local game * context contains the real stats */ if ( game->game_type == GT_LOCAL ) game_init( local_game, &player->snapshot ); game_init( game, &player->snapshot ); /* if special level copy the local game data as snapshot */ if ( game->game_type == GT_LOCAL ) if ( player->snapshot.type!=LT_NORMAL ) memcpy( game->bricks, local_game->bricks, sizeof(game->bricks) ); /* initiate frame for game type */ frame_init(); /* create offscreen */ offscreen = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); SDL_SetColorKey( offscreen, 0, 0 ); /* add&create background */ if ( game->game_type == GT_LOCAL ) bkgnd_draw( bkgnd, bkgnd_ids[player->level_id], 1 ); else bkgnd_draw( bkgnd, -1, 1 ); /* add frame */ frame_draw(); /* add bricks */ bricks_draw(); /* draw lives */ if ( game->game_type == GT_LOCAL ) frame_draw_lives( player->lives, game->diff->max_lives ); /* determine what is the local and what is the remote paddle and * connect the proper players with each paddle */ if ( game->game_type == GT_LOCAL ) { l_paddle = game->paddles[PADDLE_BOTTOM]; l_paddle->player = player; r_paddle = 0; } else { if ( l_pos == PADDLE_BOTTOM ) { l_paddle = game->paddles[PADDLE_BOTTOM]; r_paddle = game->paddles[PADDLE_TOP]; } else { l_paddle = game->paddles[PADDLE_TOP]; r_paddle = game->paddles[PADDLE_BOTTOM]; } /* player 0 is always the local player */ l_paddle->player = &players[0]; r_paddle->player = &players[1]; /* let top paddle use alternative graphics if any */ if ( paddle_pic->w > 3*paddle_cw ) game->paddles[PADDLE_TOP]->pic_x_offset = 3*paddle_cw; } player->paddle_id = l_pos; /* displays */ if ( game->game_type == GT_LOCAL ) { /* we put these displays to the old positions at the top of the frame */ sprintf( str, "%s", player->name ); length = strlen(best_name); if (strlen(player->name)>length ) length = strlen(player->name); length *= 8; display_player[0] = displays_add( 402, 0, length + 4, 16, str, player->lives, 0 ); display_score[0] = displays_add( stk_display->w - 52 - 76, 0, 76, 16, "", player->stats.total_score, 9 ); display_player[0]->use_alpha = 0; display_score[0]->use_alpha = 0; /* for special levels we need a small display in the right lower corner */ if (game->isBonusLevel) bl_display = displays_add( stk_display->w - BRICK_WIDTH - 20 - 76, ( MAP_HEIGHT - 1 ) * BRICK_HEIGHT + 2, 76, 16, "", 0, 9 ); else bl_display = 0; } else { /* wins */ sprintf( str, "%s ~x%i", game->paddles[0]->player->name, game->paddles[0]->player->stats.wins ); length = strlen( str ) * 8; display_player[0] = displays_add( BRICK_WIDTH + 20, ( MAP_HEIGHT - 1 ) * BRICK_HEIGHT + 2, length + 4, 16, str, 0, 0 ); sprintf( str, "%s ~x%i", game->paddles[1]->player->name, game->paddles[1]->player->stats.wins ); length = strlen( str ) * 8; display_player[1] = displays_add( BRICK_WIDTH + 20, 2, length + 4, 16, str, 0, 0 ); /* scores */ display_score[0] = displays_add( stk_display->w - BRICK_WIDTH - 20 - 76, ( MAP_HEIGHT - 1 ) * BRICK_HEIGHT + 2, 76, 16, "", game->paddles[0]->score, 9 ); display_score[1] = displays_add( stk_display->w - BRICK_WIDTH - 20 - 76, 2, 76, 16, "", game->paddles[1]->score, 9 ); } /* initiate credit */ if ( game->game_type == GT_LOCAL && game_set ) credit_init( game->title, game->author, player->level_id, game_set->count ); else credit_init( game->title, game->author, player->level_id, 0/*don't display info*/ ); /* show offscreen */ stk_surface_blit( offscreen, 0,0,-1,-1, stk_display, 0,0 ); /* no refresh rect as we want to use dim effect */ return 1; } static void finalize_level( void ) { /* set alpha keys to OPAQUE */ SDL_SetAlpha( paddle_pic, 0,0 ); SDL_SetAlpha( weapon_pic, 0,0 ); SDL_SetAlpha( extra_pic, 0,0 ); SDL_SetAlpha( ball_pic, 0,0 ); SDL_SetAlpha( shot_pic, 0,0 ); SDL_SetAlpha( display_font->surface, 0,0 ); /* reset ball graphic */ ball_pic_x_offset = 0; /* reset shrapnells */ shrapnells_reset(); /* reset shine */ shine_reset(); /* reset explosions */ exps_clear(); exps_set_dark( 0 ); /* delete offscreen */ stk_surface_free( &offscreen ); /* clear credits */ credit_clear(); /* clear displays */ displays_clear(); /* clear game contexts */ if ( game->game_type == GT_LOCAL ) game_finalize( local_game ); game_finalize( game ); } /* display formatted info + score table if multiple players */ static void display_score_table( char *format, ... ) { va_list args; int i; char info[256], buf[32]; va_start( args, format ); vsnprintf( info, 64, format, args ); va_end( args ); if ( player_count > 1 ) { strcat( info, "##" ); for ( i = 0; i < player_count; i++ ) { /* add player and score */ sprintf( buf, "#%12s %10i", " ", players[i].stats.total_score ); strcpy( buf + 1, players[i].name ); buf[strlen(players[i].name)+1] = 32; strcat( info, buf ); } } display_text( font, info ); stk_display_update( STK_UPDATE_ALL ); } static void display_bonus_level_score() { double avgRatio = 0; char info[256]; info[0] = 0; if (local_game->blNumCompletedRuns==0) avgRatio = 0; else avgRatio = local_game->blRatioSum/local_game->blNumCompletedRuns; switch (local_game->level_type) { case LT_JUMPING_JACK: display_text( font, _("%s, you hit %d Jumping Jacks!##Your average ratio: %5d%%# Your score: %6d"), cur_player->name,local_game->blNumCompletedRuns, (int)(100.0*avgRatio),local_game->totalBonusLevelScore); break; case LT_OUTBREAK: display_text( font, _("%s, you stopped %d Outbreaks!##Your average ratio: %5d%%# Your score: %6d"), cur_player->name,local_game->blNumCompletedRuns, (int)(100.0*avgRatio),local_game->totalBonusLevelScore); break; case LT_BARRIER: display_text( font, _("%s, you broke through %d Barriers!##Your average ratio: %5d%%# Your score: %6d"), cur_player->name,local_game->blNumCompletedRuns, (int)(100.0*avgRatio),local_game->totalBonusLevelScore); break; case LT_SITTING_DUCKS: display_text( font, _("%s, you shot %d Sitting Ducks!##Your score: %6d"), cur_player->name,local_game->blNumCompletedRuns, local_game->totalBonusLevelScore); break; case LT_HUNTER: display_text( font, _("%s, you hunted down %d bricks!##Your average ratio: %5d%%# Your score: %6d"), cur_player->name,local_game->blNumCompletedRuns, (int)(100.0*avgRatio),local_game->totalBonusLevelScore); break; case LT_DEFENDER: display_text( font, _("%s, you stopped %d waves#killing a total of %d invaders!##Your average ratio: %5d%%# Your score: %6d"), cur_player->name,local_game->blNumCompletedRuns,local_game->blTotalNumKilledInvaders, (int)(100.0*avgRatio),local_game->totalBonusLevelScore); break; } stk_display_update( STK_UPDATE_ALL ); } /* begin frame by hiding all objects */ static void begin_frame( void ) { int i; displays_hide(); frame_info_hide(); extras_hide(); for ( i = 0; i < game->paddle_count; i++ ) { paddle_hide( game->paddles[i] ); paddle_ammo_hide( game->paddles[i] ); } balls_hide(); shots_hide(); shrapnells_hide(); walls_hide(); frame_warp_icon_hide(); shine_hide(); exps_hide(); credit_hide(); } /* end frame by drawing all objects and updating the screen */ static void end_frame( void ) { int i; /* show -- some things will be missing if darkness is enabled */ balls_show_shadow(); extras_show_shadow(); for ( i = 0; i < game->paddle_count; i++ ) paddle_show_shadow( game->paddles[i] ); shots_show(); if ( config.debris_level == DEBRIS_BELOW_BALL ) { exps_show(); if ( !game->extra_active[EX_DARKNESS] ) { shrapnells_show(); frame_info_show(); } } if ( config.ball_level == BALL_ABOVE_BONUS ) extras_show(); balls_show(); if ( config.ball_level == BALL_BELOW_BONUS ) extras_show(); for ( i = 0; i < game->paddle_count; i++ ) paddle_show( game->paddles[i] ); if ( !game->extra_active[EX_DARKNESS] ) walls_show(); shine_show(); if ( config.debris_level == DEBRIS_ABOVE_BALL ) { exps_show(); if ( !game->extra_active[EX_DARKNESS] ) { shrapnells_show(); frame_info_show(); } } frame_warp_icon_show(); displays_show(); for ( i = 0; i < game->paddle_count; i++ ) paddle_ammo_show( game->paddles[i] ); credit_show(); } /* grab/ungrab input of actual game */ static void grab_input( int grab ) { if ( grab ) { SDL_ShowCursor(0); SDL_WM_GrabInput( SDL_GRAB_ON ); SDL_GetRelativeMouseState(0,0); } else { SDL_ShowCursor(1); SDL_WM_GrabInput( SDL_GRAB_OFF ); } } /* switch client to new state */ void set_state( int newstate ) { if ( client_state == newstate ) return; if ( newstate == CS_PLAY ) grab_input( 1 ); if ( client_state == CS_PLAY ) grab_input( 0 ); if ( client_state == CS_CONFIRM_WARP || client_state == CS_CONFIRM_RESTART || client_state == CS_CONFIRM_QUIT || client_state == CS_CONFIRM_CONTINUE || client_state == CS_GET_READY || client_state == CS_PAUSE || client_state == CS_FINAL_PLAYER_INFO || client_state == CS_GET_READY_FOR_NEXT_LEVEL || client_state == CS_RECV_LEVEL || client_state == CS_ROUND_RESULT || client_state == CS_RECV_STATS || client_state == CS_FATAL_ERROR ) { /* show offscreen */ if ( offscreen ) { stk_surface_blit( offscreen, 0,0,-1,-1, stk_display, 0,0 ); end_frame(); } /* do not refresh when coming from RECV_LEVEL as a GET_READY * will follow */ if ( client_state != CS_RECV_LEVEL ) if ( client_state != CS_ROUND_RESULT ) if ( client_state != CS_RECV_STATS ); stk_display_update( STK_UPDATE_ALL ); } client_state = newstate; stk_timer_reset(); } /* Fade all animations until they disappear */ static void fade_anims() { float alpha = 255.0; int ms, i; stk_timer_reset(); if ( game->game_type == GT_LOCAL && game->winner != PADDLE_BOTTOM ) frame_remove_life(); while ( alpha > 0 ) { displays_hide(); for ( i = 0; i < game->paddle_count; i++ ) paddle_hide( game->paddles[i] ); balls_hide(); extras_hide(); shrapnells_hide(); shots_hide(); walls_hide(); credit_hide(); ms = stk_timer_get_time(); alpha -= 0.3 * ms; if ( alpha < 0 ) alpha = 0; shrapnells_update( ms ); for ( i = 0; i < game->paddle_count; i++ ) paddle_alphashow( game->paddles[i], alpha ); balls_alphashow( alpha ); extras_alphashow( alpha ); shots_alphashow( alpha ); shrapnells_show(); walls_alphashow( alpha ); displays_show(); credit_alphashow( alpha ); stk_display_update( STK_UPDATE_RECTS ); } } void open_pause_chat( char *text ) { set_state( CS_PAUSE ); /* clear pause_chatter */ memset( pause_chatter, 0, sizeof( pause_chatter ) ); /* clear global gui widgets */ gui_focused_widget = 0; gui_clicked_widget = 0; gui_key_widget = 0; /* use 'text' as initial chatter */ client_add_pausechatter( text, 1 ); /* gray screen */ stk_surface_gray( stk_display, 0,0,-1,-1, 1 ); /* show pauseroom */ gui_widget_show( dlg_pauseroom ); stk_display_update( STK_UPDATE_ALL ); /* disable event filter */ SDL_SetEventFilter( 0 ); /* disable client_recv which is called as time event */ gui_widget_disable_event( dlg_chatroom, GUI_TIME_PASSED ); } void close_pause_chat( void ) { gui_widget_hide( dlg_pauseroom ); set_state( CS_PLAY ); /* enable event filter */ SDL_SetEventFilter( event_filter ); gui_widget_enable_event( dlg_chatroom, GUI_TIME_PASSED ); } /* Pause/unpause a local/network game. */ static void client_set_pause( int pause ) { if (game_set==0) return; /* test level */ if (pause&&client_state==CS_PLAY) { /* in local game simply darken the screen, in * network game enter the pausechatroom */ if ( game->game_type == GT_LOCAL ) { set_state(CS_PAUSE); display_text( font, _("Pause") ); } else { open_pause_chat( _("You have paused the game.") ); comm_send_short( MSG_PAUSE ); } } else if (!pause&&client_state==CS_PAUSE) { /* unpause (local game only)*/ if ( game->game_type == GT_LOCAL ) set_state(CS_PLAY); } } /* modify the client and its state according to the key pressed */ static int handle_default_key( int key, int *abort ) { SDL_Surface *buffer; switch ( key ) { case SDLK_F1: case SDLK_h: if ( client_state != CS_PLAY ) break; if ( game->game_type == GT_NETWORK ) break; /* only for single player */ grab_input(0); help_run(); grab_input(1); return 1; case SDLK_q: case SDLK_ESCAPE: /* recv_stats or final_stats means we already broke up * the game so ESC will directly quit */ if ( client_state == CS_RECV_STATS || client_state == CS_FINAL_STATS ) { *abort = 1; break; } if ( client_state == CS_CONFIRM_QUIT ) break; if ( client_state == CS_PAUSE ) break; if ( players_count() == 0 ) break; set_state(CS_CONFIRM_QUIT); if ( game->game_type == GT_LOCAL && game_set != 0 /*not testing a level*/ ) display_text( font, _("Quit Game? y/n#(If yes, this game may be resumed later.#No highscore entry is created yet.)") ); else display_text( font, _("Quit Game? y/n") ); return 1; case SDLK_r: if ( client_state != CS_PLAY ) break; if ( game->game_type == GT_NETWORK ) break; /* only for single player */ if ( game_set == 0 ) break; /* test level */ if ( cur_player->lives < 2 ) break; set_state(CS_CONFIRM_RESTART); display_text( font, _("Restart Level? y/n") ); return 1; case SDLK_d: if ( client_state != CS_PLAY ) break; if ( game->game_type == GT_NETWORK ) break; /* only for single player */ if ( !allow_disintegrate ) break; if ( game->level_type != LT_NORMAL ) break; /* not in bonus levels */ grab_input(0); game_nuke(); grab_input(1); return 1; case SDLK_f: buffer = stk_surface_create( SDL_SWSURFACE, 640, 480 ); SDL_BlitSurface( stk_display, 0, buffer, 0 ); config.fullscreen = !config.fullscreen; stk_display_apply_fullscreen( config.fullscreen ); SDL_BlitSurface( buffer, 0, stk_display, 0 ); stk_display_update( STK_UPDATE_ALL); SDL_FreeSurface( buffer ); return 1; case SDLK_s: #ifdef AUDIO_ENABLED config.sound = !config.sound; stk_audio_enable_sound( config.sound ); #endif return 1; case SDLK_a: config.anim++; if ( config.anim >= 4 ) config.anim = 0; return 1; case SDLK_TAB: stk_display_take_screenshot(); return 1; case SDLK_t: return 0; case SDLK_p: if ( client_state == CS_PLAY ) client_set_pause(1); else if (client_state==CS_PAUSE) client_set_pause(0); return 1; default: if ( client_state != CS_PLAY ) break; if ( game->game_type != GT_LOCAL ) break; if ( game->bricks_left > game->warp_limit ) break; if ( game_set == 0 ) break; /* test level */ if ( game->level_type != LT_NORMAL ) break; /* not in bonus levels */ if ( key == config.k_warp ) { set_state(CS_CONFIRM_WARP); display_text( font, _("Warp to next level? y/n") ); return 1; } break; } return 0; } void update_bonus_level_display() { /* Michael! What are you doing? You're messing this all up! Who the fuck are you? Your conscience! You can do better! I can do this way cleaner. I know! This is just another terrible hack. Stop it! Shhiiiiit, who cares? It's too goddamn late you bastard. You should have come up with that earlier. This game is down on its knees already. Dying from hacks spreading like cancer... */ switch (local_game->level_type) { case LT_JUMPING_JACK: display_set_value(bl_display,(local_game->bricks[local_game->bl_jj_mx][local_game->bl_jj_my].exp_time+500)/1000); break; case LT_OUTBREAK: display_set_value(bl_display,local_game->blCancerCount); break; case LT_BARRIER: display_set_value(bl_display,local_game->blBarrierMaxMoves-local_game->blBarrierMoves); break; case LT_SITTING_DUCKS: display_set_value(bl_display,local_game->blMaxScore); break; case LT_HUNTER: display_set_value(bl_display,local_game->blHunterTimeLeft/1000); break; case LT_DEFENDER: display_set_value(bl_display,local_game->blInvaderLimit-local_game->blNumKilledInvaders); break; } } /* update local objects (shrapnells,extras,explosions...) and communicate * every client_comm_delay seconds either with real or fake server */ static void update_game( int ms ) { int i; /* run the fake server game */ if ( game->game_type == GT_LOCAL ) { game_set_current( local_game ); game_update( ms ); game_set_current( game ); } /* local animations and movements */ for ( i = 0; i < game->paddle_count; i++ ) client_paddle_update( game->paddles[i], ms ); client_shots_update( ms ); client_balls_update( ms ); client_extras_update( ms ); client_walls_update( ms ); shrapnells_update( ms ); frame_warp_icon_update( ms ); shine_update( ms ); exps_update( ms ); displays_update( ms ); credit_update( ms ); /* communicate */ if ( (no_comm_since+=ms) >= client_comm_delay ) { no_comm_since -= client_comm_delay; /* send paddle state */ comm_send_paddle( l_paddle ); /* receive game data from local or remote server and * apply it to the game context. */ comm_recv(); /* update score displays */ if (!showing_best) display_set_value( display_score[0], game->paddles[0]->player->stats.total_score + game->paddles[0]->score ); if ( game->game_type == GT_NETWORK ) display_set_value( display_score[1], game->paddles[1]->player->stats.total_score + game->paddles[1]->score ); /* update bonus level information */ if (bl_display) update_bonus_level_display(); } } /* give us a damn or excellent depending on the outcome of the level. * the result for network game must've been received already so that * game::level_over and game::winner are valid entries. */ static void play_speech( void ) { #ifdef AUDIO_ENABLED if ( !config.speech ) return; if ( game->winner == -1 ) return; /* draw */ if ( game->paddles[game->winner] == l_paddle ) { if ( rand() % 2 ) stk_sound_play( wav_excellent ); else stk_sound_play( wav_verygood ); } else { if (!config.badspeech) /* no swearing! */ return; if ( rand() % 2 ) stk_sound_play( wav_damn ); else stk_sound_play( wav_dammit ); } #endif } /* check players of local game wether they entered a highscore */ static void check_highscores( void ) { int i; chart_clear_new_entries(); for ( i = 0; i < config.player_count; i++ ) chart_add( chart_set_query(game_set->name), players[i].name, players[i].level_id + 1, players[i].stats.total_score ); chart_save(); } /* init next network game round by displaying a message and switching * to GET_READY. */ void init_next_round( void ) { game_round++; set_state( CS_GET_READY ); init_level( cur_player, cur_player->paddle_id ); display_text( font, _("***** Round %i *****###You control the %s paddle in this level!#" "To fire a ball keep the mouse button PRESSED.#Don't just click.###" "Press any key when you are ready...###(You can pause the game with 'p' any time.)" "###NOTE: Due to latency, bonuses on the server are closer than they " "appear! I'll try to work on that."), game_round, cur_player->paddle_id==0?_("BOTTOM"):_("TOP") ); } /* display a message about the winner */ void finalize_round( void ) { if ( (char)game->winner == -1 ) display_text( font, _("DRAW") ); else { game->paddles[game->winner]->player->stats.wins++; if ( game->winner == cur_player->paddle_id ) display_text( font, _("You have won this round!") ); else display_text( font, _("You have lost this round.") ); } finalize_level(); set_state( CS_ROUND_RESULT ); } /* display the final statistics. the first player is always this client * and the second is the remote. */ void display_final_stats( void ) { int win; /* won this match? */ if ( game_stats[0][0] > game_stats[1][0] ) win = 1; else if ( game_stats[0][0] == game_stats[1][0] ) win = -1; else win = 0; /* build stats string */ display_text( font, _(" Result: %s ##" \ " %12s %12s##" \ "Wins: %12i %12i#" \ "Losses: %12i %12i#" \ "Draws: %12i %12i#" \ "#" \ "Total Score: %12i %12i#" \ "#" \ "Balls Kept: %11i%% %11i%%#" \ "Bricks Cleared: %11i%% %11i%%#" \ "Extras Collected: %11i%% %11i%%##" \ "(Press SPACE to continue)"), win==1?_("VICTORY"):win==0?_(" DEFEAT"):_(" DRAW"), players[0].name, players[1].name, game_stats[0][0], game_stats[1][0], game_stats[0][1], game_stats[1][1], game_stats[0][2], game_stats[1][2], game_stats[0][3], game_stats[1][3], game_stats[0][4], game_stats[1][4], game_stats[0][5], game_stats[1][5], game_stats[0][6], game_stats[1][6] ); } /* save data from local and local_game variables and update * the menu hint. */ void save_local_game( int slot_id ) { GameSlot gs; int i; memset( &gs, 0, sizeof(GameSlot) ); strcpy( gs.setname, game_set->name ); gs.diff = config.diff; gs.player_count = config.player_count; gs.cur_player = current_player; for ( i = 0; i < MAX_PLAYERS; i++ ) { strcpy( gs.player_names[i], config.player_names[i] ); gs.player_cur_level_id[i] = players[i].level_id; gs.player_lives[i] = players[i].lives; gs.player_scores[i] = players[i].stats.total_score; } gs.gameSeed = gameSeed; if ( !slot_save( slot_id, &gs ) ) fprintf( stderr, _("ERROR: couldn't save game!\n") ); slot_update_hint( slot_id, item_resume_0->hint ); } /* check whether Shift is pressed to switch between own and highest score */ void handle_display_switch() { int modstate = 0; modstate = SDL_GetModState(); if (!showing_best) { if (modstate&KMOD_RSHIFT||modstate&KMOD_LSHIFT) { display_set_text( display_player[0], best_name ); display_set_value_directly( display_score[0], best_score ); display_set_highlight( display_player[0], 1 ); display_set_highlight( display_score[0], 1 ); showing_best = 1; } } else { if (!(modstate&KMOD_RSHIFT||modstate&KMOD_LSHIFT)) { display_set_text( display_player[0], cur_player->name ); display_set_value_directly( display_score[0], game->paddles[0]->player->stats.total_score + game->paddles[0]->score ); display_set_highlight( display_player[0], 0 ); display_set_highlight( display_score[0], 0 ); showing_best = 0; } } } /* ==================================================================== Publics ==================================================================== */ /* create various resources like shrapnells */ void client_game_create() { frame_create(); shrapnells_init(); shine_load(); init_angles(); /* background */ bkgnd = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); SDL_SetColorKey( bkgnd, 0, 0 ); stk_surface_fill( bkgnd, 0,0,-1,-1, 0x0 ); } void client_game_delete() { stk_surface_free( &bkgnd ); displays_clear(); frame_delete(); shrapnells_delete(); shine_delete(); } /* create network/local game context and initiate game state: * network needs to receive the level data and a local game * has to load the next level */ int client_game_init_local( const char *setname ) { Set_Chart *chart; int i, warp_limit; warp_limit = config.rel_warp_limit; allow_disintegrate = 1; /* the original levelsets do not need these workarounds */ if ( STRCMP( setname, "LBreakout2" ) || STRCMP( setname, "LBreakout1" ) ) { warp_limit = 100; allow_disintegrate = 0; } /* the approach for a local game is to use the same * settings as a network game. the receiving of packets * is simply faked by a local_game context that * runs the game locally. but to use only one game loop * we do not use it directly but apply its modificiations * to game which is visualized */ local_game = game_create( GT_LOCAL, config.diff, warp_limit ); game_set_current( local_game ); game_set_convex_paddle( config.convex ); game_set_ball_auto_return( !config.return_on_click ); game_set_ball_random_angle( config.random_angle ); game_set_ball_accelerated_speed( config.maxballspeed_float ); local_game->localServerGame = 1; /* load levels: * only required for local games. in network both players * just require a single level that can store the incoming * data that is send by the server via the net. */ if ( !strcmp( setname, TOURNAMENT ) ) game_set = levelset_load_all( levelset_names, gameSeed, config.addBonusLevels ); else game_set = levelset_load( setname, ((config.addBonusLevels)?gameSeed:0) ); if ( game_set == 0 ) return 0; /* load highest score so far if any */ chart = chart_set_query(setname); strcpy(best_name,_("nobody")); best_score = 0; if (chart) { strcpy(best_name,chart->entries[0].name); best_score = chart->entries[0].score; } /* create client game context */ game = game_create( GT_LOCAL, config.diff, warp_limit ); game_set_current( game ); /* a local game is not limited in its communication */ client_comm_delay = 0; no_comm_since = 0; /* prepare warp icon at frame */ warp_blinks = 4; warp_blink = 1; /* set list of level background ids */ for ( i = 0; i < MAX_LEVELS; i++ ) bkgnd_ids[i] = rand() % bkgnd_count; /* initiate players */ players_clear(); for ( i = 0; i < config.player_count; i++ ) player_add( config.player_names[i], game->diff->lives, levelset_get_first( game_set ) ); cur_player = players_get_first(); /* init first level */ init_level( cur_player, PADDLE_BOTTOM ); /* if only one player don't show score table */ client_state = CS_NONE; if ( player_count > 1 ) set_state( CS_SCORE_TABLE ); else set_state( CS_PLAY ); /* one player starts immediately */ return 1; } int client_game_init_network( char *opponent_name, int diff ) { /* create an empty one level levelset. the server will send * the data into the level everytime we play. */ game_set = levelset_create_empty( 1, "empty", "empty" ); /* create client game context */ game = game_create( GT_NETWORK, diff, 100 ); game_set_current( game ); game_round = 0; /* will be increased by init_next_round() */ game_over = 0; /* a network game communicates every 25 ms by default */ client_comm_delay = 25; no_comm_since = 0; /* initiate players */ players_clear(); player_add( client_name, game->diff->lives, levelset_get_first( game_set ) ); player_add( opponent_name, game->diff->lives, levelset_get_first( game_set ) ); cur_player = players_get_first(); display_text( font, _("Receiving level data...") ); set_state( CS_RECV_LEVEL ); return 1; } /* create local game context and initiate game state * as given from slot 'slot_id'. */ int client_game_resume_local( int slot_id ) { int i; GameSlot gs; /* load saved game */ if ( !slot_load( slot_id, &gs ) ) return 0; /* FIXME: config settings are overwritten for this */ config.diff = gs.diff; config.player_count = gs.player_count; for ( i = 0; i < config.player_count; i++ ) strcpy( config.player_names[i], gs.player_names[i] ); gameSeed = gs.gameSeed; /* create local game where all players have full lives */ if ( !client_game_init_local( gs.setname ) ) return 0; /* re-initiate players */ players_clear(); for ( i = 0; i < config.player_count; i++ ) { /* name + lives */ player_add( config.player_names[i], gs.player_lives[i], levelset_get_first( game_set ) ); /* level */ player_init_level( &players[i], game_set->levels[gs.player_cur_level_id[i]], gs.player_cur_level_id[i] ); /* score */ players[i].stats.total_score = gs.player_scores[i]; } cur_player = players_set_current( gs.cur_player ); /* init first level */ init_level( cur_player, PADDLE_BOTTOM ); return 1; } /* create a one level game context for testing a level */ int client_game_init_testing( Level *level ) { local_game = game_create( GT_LOCAL, config.diff, 100 ); game_set_current( local_game ); game_set_convex_paddle( config.convex ); game_set_ball_auto_return( !config.return_on_click ); game_set_ball_random_angle( config.random_angle ); game_set_ball_accelerated_speed( config.maxballspeed_float ); local_game->localServerGame = 1; game = game_create( GT_LOCAL, config.diff, 100 ); game_set_current( game ); players_clear(); player_add( config.player_names[0], game->diff->lives, level ); cur_player = players_get_first(); bkgnd_ids[0] = 0; init_level( cur_player, PADDLE_BOTTOM ); client_state = CS_NONE; set_state( CS_PLAY ); return 1; } /* finalize a game and free anything allocated by init process */ void client_game_finalize() { players_clear(); if ( game && game->game_type == GT_LOCAL ) { game_delete( &local_game ); levelset_delete( &game_set ); } game_delete( &game ); } /* run the state driven loop until game is broken up or finished */ void client_game_run( void ) { int ms, frame_delay = config.fps?10:1; int button_clicked, key_pressed; SDL_Event event; int abort = 0, i, j, penalty; /* frame rate */ int frames = 0; int frame_time = SDL_GetTicks(); event_clear_sdl_queue(); stk_display_fade( STK_FADE_IN, STK_FADE_DEFAULT_TIME ); stats_received = 0; stk_timer_reset(); ms = 1; while ( !abort && !stk_quit_request ) { /* check wether an event occured */ button_clicked = key_pressed = 0; if ( SDL_PollEvent( &event ) ) { if ( client_state == CS_PAUSE && game->game_type == GT_NETWORK ) gui_dispatch_event( &event, ms ); else if ( event.type == SDL_MOUSEBUTTONDOWN ) button_clicked = event.button.button; else if ( event.type == SDL_KEYDOWN ) { key_pressed = event.key.keysym.sym; if ( handle_default_key( key_pressed, &abort ) ) key_pressed = 0; } else if (event.type == SDL_ACTIVEEVENT) { if (event.active.state == SDL_APPINPUTFOCUS || event.active.state == SDL_APPACTIVE ) if (event.active.gain == 0 ) client_set_pause(1); } } else if ( client_state == CS_PAUSE && game->game_type == GT_NETWORK ) gui_dispatch_event( 0, ms ); /* check whether Shift is pressed to switch between own and highest score */ if (game->game_type == GT_LOCAL) handle_display_switch(); /* let server know we're still alive except * in CS_PLAY as we send paddle updates there */ if ( game->game_type == GT_NETWORK ) comm_send_heartbeat(); /* handle client */ switch ( client_state ) { case CS_FINAL_STATS: if ( key_pressed==SDLK_SPACE ) abort = 1; break; case CS_FATAL_ERROR: /* after game was violently broken up the server * may still send the stats of the game so far */ if ( button_clicked || key_pressed ) { SDL_Delay(250); /* give time to release button */ set_state( CS_RECV_STATS ); display_text( font, _("Receiving final stats...") ); } break; case CS_FINAL_TABLE: if ( button_clicked || key_pressed ) { chart_load(); check_highscores(); /* remove saved game */ slot_delete( 0 ); slot_update_hint( 0, item_resume_0->hint ); /* quit local game */ abort = 1; } break; case CS_SCORE_TABLE: /* show who's next player and scores in local game */ display_score_table( _("Next Player: %s"), cur_player->name ); set_state( CS_GET_READY ); break; case CS_BONUS_LEVEL_SCORE: /* display total score from this level for player */ display_bonus_level_score(); set_state( CS_GET_READY_FOR_NEXT_LEVEL ); break; case CS_FINAL_PLAYER_INFO: if ( button_clicked || key_pressed ) { SDL_Delay(250); /* give time to release button */ set_state( CS_NEXT_PLAYER ); } break; case CS_RECV_LEVEL: comm_recv(); if ( cur_player->next_level_received ) { cur_player->next_level_received = 0; cur_player->paddle_id = cur_player->next_paddle_id; init_next_round(); } break; case CS_RECV_STATS: comm_recv(); if ( stats_received ) { set_state( CS_FINAL_STATS ); display_final_stats(); } break; case CS_ROUND_RESULT: if ( button_clicked || key_pressed ) { SDL_Delay(250); /* give time to release button */ if ( game_over ) { set_state( CS_RECV_STATS ); display_text( font, _("Receiving final stats...") ); } else { set_state( CS_RECV_LEVEL ); display_text( font, _("Receiving level data...") ); } } break; case CS_GET_READY: if ( button_clicked || key_pressed ) { SDL_Delay(250); /* give time to release button */ comm_send_short( MSG_READY ); set_state( CS_PLAY ); } break; case CS_GET_READY_FOR_NEXT_LEVEL: if ( button_clicked || key_pressed ) { SDL_Delay(250); /* give time to release button */ set_state( CS_NEXT_LEVEL ); } break; case CS_PAUSE: if ( game->game_type == GT_LOCAL ) break; /* check wether pause chatroom has been closed * either by client or remote */ comm_recv(); break; case CS_PLAY: /* hide objects */ begin_frame(); /* apply events to local paddle */ paddle_handle_events( l_paddle, ms ); /* update local objects and communicate if * comm_delay ms have passed */ update_game( ms ); /* show objects */ end_frame(); /* handle local level over */ if ( game->level_over ) { if ( game->game_type == GT_LOCAL ) { if ( game_set == 0 ) { abort = 1; /* was a test level */ grab_input(0); break; } if ( game->winner == PADDLE_BOTTOM ) { if (local_game->isBonusLevel) set_state( CS_BONUS_LEVEL_SCORE ); else set_state( CS_NEXT_LEVEL ); } else set_state( CS_LOOSE_LIFE ); } else { finalize_round(); } } break; case CS_NEXT_LEVEL: /* apply paddle stats to player */ game_set_current( local_game ); game_update_stats( PADDLE_BOTTOM, &cur_player->stats ); game_set_current( game ); /* init next level for player in local game */ cur_player->level_id++; if ( cur_player->level_id >= game_set->count ) { /* deactivate player */ cur_player->lives = 0; display_text( font, _("You've cleared all levels...#Congratulations!!!") ); set_state( CS_FINAL_PLAYER_INFO ); break; } /* get snapshot for next init */ cur_player->snapshot = *game_set->levels[cur_player->level_id]; /* cycle players */ set_state( CS_NEXT_PLAYER ); break; case CS_RESTART_LEVEL: /* apply paddle stats to player */ game_set_current( local_game ); game_update_stats( PADDLE_BOTTOM, &cur_player->stats ); game_set_current( game ); /* reset level for next turn */ cur_player->snapshot = *game_set->levels[cur_player->level_id]; /* decrease lives (is checked that this wasn't the last one) */ cur_player->lives--; /* cycle players */ set_state( CS_NEXT_PLAYER ); break; case CS_LOOSE_LIFE: /* apply paddle stats to player */ game_set_current( local_game ); game_update_stats( PADDLE_BOTTOM, &cur_player->stats ); game_set_current( game ); /* remember level for next turn */ game_get_level_snapshot( &cur_player->snapshot ); /* decrease lives */ cur_player->lives--; if ( cur_player->lives == 0 ) { display_text( font, _("You've lost all lives...#Do you want to buy a continue#for 100%% of your score? y/n") ); set_state( CS_CONFIRM_CONTINUE ); //set_state( CS_FINAL_PLAYER_INFO ); break; } set_state( CS_NEXT_PLAYER ); break; case CS_NEXT_PLAYER: /* game over? */ if ( players_count() == 0 ) { display_score_table( _("Game Over!") ); set_state( CS_FINAL_TABLE ); break; } /* speak and fade */ play_speech(); fade_anims(); /* finalize current game context */ finalize_level(); /* set next player */ cur_player = players_get_next(); init_level( cur_player, PADDLE_BOTTOM ); if ( player_count > 1 ) set_state( CS_SCORE_TABLE ); else { set_state( CS_PLAY ); /* one player starts immediately */ stk_display_update( STK_UPDATE_ALL ); } break; case CS_CONFIRM_CONTINUE: case CS_CONFIRM_QUIT: case CS_CONFIRM_WARP: case CS_CONFIRM_RESTART: if ( key_pressed ) { char *keyName = SDL_GetKeyName(key_pressed); char *yesLetter = _("y"), *noLetter = _("n"); if ( strcmp(keyName,noLetter)==0||key_pressed==SDLK_ESCAPE ) { /* if denying continue... DIE!!! */ if ( client_state == CS_CONFIRM_CONTINUE ) { SDL_Delay(250); /* give time to release button */ set_state( CS_NEXT_PLAYER ); //set_state( CS_FINAL_PLAYER_INFO ); } else set_state( CS_PLAY ); break; } if ( strcmp(keyName, yesLetter) ) break; } else break; /* handle confirmed action */ SDL_Delay(250); /* give time to release button */ switch( client_state ) { case CS_CONFIRM_CONTINUE: /* clear score and give full lives again */ cur_player->lives = game->diff->lives; cur_player->stats.total_score = 0; set_state( CS_NEXT_PLAYER ); break; case CS_CONFIRM_QUIT: comm_send_short( MSG_QUIT_GAME ); if ( game->game_type == GT_LOCAL ) { /* apply paddle stats to player */ game_set_current( local_game ); game_update_stats( PADDLE_BOTTOM, &cur_player->stats ); game_set_current( game ); /* no higscore check anymore as game is supposed to * be resumed until normal game over */ /* testing levels don't got for * high scores *** if ( game_set ) { check_highscores(); }*/ /* save local game */ if ( game_set != 0 /*not testing a level*/ ) save_local_game( 0 ); abort = 1; } else { /* await game stats */ set_state( CS_RECV_STATS ); display_text( font, _("Receiving final stats...") ); } break; case CS_CONFIRM_WARP: game->winner = -1; /* no speech */ local_game->winner = -1; /* not counted as win */ /* substract doubled score of remaining bricks */ penalty = 0; for ( i = 0; i < MAP_WIDTH; i++ ) for ( j = 0; j < MAP_HEIGHT; j++ ) if ( local_game->bricks[i][j].dur != -1 ) penalty += local_game->bricks[i][j].score; printf( _("warp penalty: -%d\n"), penalty ); local_game->paddles[0]->score -= penalty; set_state( CS_NEXT_LEVEL ); break; case CS_CONFIRM_RESTART: game->winner = -1; /* no speech */ local_game->winner = -1; /* not counted as win */ local_game->level_over = 1; set_state( CS_RESTART_LEVEL ); break; } break; } /* update anything that was changed */ stk_display_update( STK_UPDATE_RECTS ); /* get time since last call and delay if below frame_delay */ ms = stk_timer_get_time(); if ( ms < frame_delay ) { SDL_Delay( frame_delay - ms ); ms += stk_timer_get_time(); } frames++; } finalize_level(); client_state = CLIENT_NONE; stk_display_fade( STK_FADE_OUT, STK_FADE_DEFAULT_TIME ); if ( stk_quit_request ) comm_send_short( MSG_DISCONNECT ); else comm_send_short( MSG_UNHIDE ); /* frame rate */ frame_time = SDL_GetTicks() - frame_time; printf( _("Time: %.2f, Frames: %i -> FPS: %.2f\n"), (double)frame_time / 1000, frames, 1000.0*frames/frame_time ); event_clear_sdl_queue(); /* update the selected user and the user list in network as * we received ADD/REMOVE_USER messages */ gui_list_update( list_users, client_users->count ); /* re-select current entry */ if ( client_user ) { i = list_check( client_users, client_user ); if ( i != -1 ) gui_list_select( list_users, 0, i, 1 ); } } /* test a level until all balls got lost */ void client_game_test_level( Level *level ) { stk_display_fade( STK_FADE_IN, STK_FADE_DEFAULT_TIME ); client_game_init_testing( level ); client_game_run(); client_game_finalize(); stk_display_fade( STK_FADE_OUT, STK_FADE_DEFAULT_TIME ); } lbreakout2-2.6.5/client/comm.h0000664000175000017500000000260412140767214013111 00000000000000/*************************************************************************** comm.h - description ------------------- begin : Fri Aug 2 2002 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __COMM_CLIENT_H #define __COMM_CLIENT_H void comm_send_paddle( Paddle *paddle ); void comm_send_short( int msg ); /* single byte messages */ /* receive any data but only handle such messages valid * in the current state */ void comm_recv( void ); /* send a heartbeat every 2 seconds except in the actual game as we * send paddle updates there */ void comm_send_heartbeat( void ); #endif lbreakout2-2.6.5/client/file.h0000664000175000017500000000706512140767214013103 00000000000000/*************************************************************************** file.h - description ------------------- begin : Thu Jan 18 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __FILE_H #define __FILE_H /* this file contains function to work with files like open,close,read/write binary/ascii data... */ /* maximum length of a token */ enum { MAX_TOKEN_LENGTH = 1024 }; /* shall find_arg reset to beginning of file or use current position? */ enum { RESET_FILE_POS = 0, FROM_CURRENT_FILE_POS }; /* shall read_file_token go to next token or stay at end of current one */ enum { GO_TO_NEXT_TOKEN = 0, STAY_AT_TOKEN }; /* display warning if find_arg failed */ enum { NO_WARNING = 0, WARNING }; /* ==================================================================== Test file in path as mode. Return Value: True if sucessful ==================================================================== */ int file_check( char *path, char *file, char *mode ); /* ==================================================================== Open file in path according to type (write, read, append) Return Value: File handle if successful else Null ==================================================================== */ enum { FILE_WRITE, FILE_READ, FILE_APPEND }; FILE *file_open( char *path, char *fname, int type ); /* ==================================================================== Read all lines from file pointer and return as static array. Resets the file pointer. Should only be used when reading a whole file. ==================================================================== */ char** file_read_lines( FILE *file, int *count ); /* check consistence of file (all brackets/comments closed). will reset the file pos to the very beginning */ int check_file_cons( FILE *file ); /* find a string in the file and set file stream to this position */ int find_token( FILE *file, char *name, int type, int warning ); /* read argument string of a single assignment */ char* get_arg( FILE *file, char *name, int type ); /* read a cluster of arguments and return as static list */ char** get_arg_cluster( FILE *file, char *name, int *count, int type, int warning ); /* free arg cluster */ void delete_arg_cluster( char **cluster, int count ); /* count number of entries */ int count_arg( FILE *file, char*name ); /* ==================================================================== Return a list with all accessible files and directories in path with the extension ext (if != 0). Don't show hidden files. Root is the name of the parent directory that can't be left. If this is next directory up '..' is not added. ==================================================================== */ Text* get_file_list( char *path, char *ext, char *root ); #endif lbreakout2-2.6.5/client/lbreakout.h0000664000175000017500000000525212140767214014150 00000000000000/*************************************************************************** lbreakout.h - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __LBREAKOUT_H #define __LBREAKOUT_H //#define WITH_BUG_REPORT #define GAME_DEBUG /* ==================================================================== Global definitions for LBreakout and general system includes. ==================================================================== */ #include #include #include #include #include #include #include "../gui/stk.h" #include "../common/tools.h" #include "../common/list.h" #include "../common/net.h" #include "../common/messages.h" #include "../game/gamedefs.h" #include "misc.h" #ifndef M_PI #define M_PI 3.1415926535897932384626433832795f #endif /* config directory name in home directory */ #ifdef _WIN32 #define CONFIG_DIR_NAME "lgames" #else #define CONFIG_DIR_NAME ".lgames" #endif /* i18n */ #ifdef HAVE_CONFIG_H #include "../config.h" #endif #include "../common/gettext.h" #if ENABLE_NLS #define _(str) gettext (str) #else #define _(str) (str) #endif /* ==================================================================== Alpha of shadow ==================================================================== */ enum { SHADOW_ALPHA = 128 }; /* ==================================================================== Number of original backgrounds. ==================================================================== */ enum { ORIG_BACK_COUNT = 6 }; /* used to compile net messages */ extern char msgbuf[MAX_MSG_SIZE]; extern int msglen; /* check if position is in given region */ #define FOCUS( cx, cy, rx, ry, rw, rh ) \ ( cx >= rx && cy >= ry && cx < rx + rw && cy < ry + rh ) #define FOCUS_RECT( cx, cy, rect ) \ FOCUS( cx, cy, (rect).x, (rect).y, (rect).w, (rect).h ) #endif lbreakout2-2.6.5/client/theme.h0000664000175000017500000000365712140767214013271 00000000000000/*************************************************************************** theme.h - description ------------------- begin : Fri Feb 15 2002 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __THEME_H #define __THEME_H /* ==================================================================== Get/delete names of all themes found in themes directory. ==================================================================== */ void theme_get_list(); void theme_delete_list(); /* ==================================================================== Load theme by name or delete current theme (is done by load too so it might be used to change a theme as well.) ==================================================================== */ void theme_load( char *name ); void theme_delete(); /* ==================================================================== Check if there is a file ABOUT in the theme directory and return it's contents up to limit characters. If this file isn't found 'NO INFO' is set. ==================================================================== */ void theme_get_info( char *name, char *text, int limit ); #endif lbreakout2-2.6.5/client/client_handlers.h0000664000175000017500000001562512140767214015323 00000000000000/*************************************************************************** client_handlers.h - description ------------------- begin : Sat Oct 26 12:02:57 CEST 2002 copyright : (C) 2002 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __CLIENT_HANDLERS_H #define __CLIENT_HANDLERS_H /* ==================================================================== Disconnect from current server if any. ==================================================================== */ void client_disconnect(); /* ==================================================================== Try to connect to a game server. Retry twice every three seconds or quit then. ==================================================================== */ void client_connect( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Open/close the connection window. ==================================================================== */ void client_open_connect_window( GuiWidget *widget, GuiEvent *event ); void client_close_connect_window( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Close chatroom and return to LBreakout's menu. ==================================================================== */ void client_quit( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Close the info window and clear state. ==================================================================== */ void client_close_info( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Send chatter this function is either called by the send button or by the edit. ==================================================================== */ void client_send_chatter( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Whisper chatter if a user is selected. ==================================================================== */ void client_whisper_chatter( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Update selected peer and levelset. ==================================================================== */ void client_handle_user_list( GuiWidget *widget, GuiEvent *event ); void client_handle_levelset_list( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Handle confirmation/cancelling of confirmation dialogue. ==================================================================== */ void client_confirm( GuiWidget *widget, GuiEvent *event ); void client_cancel( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Challenge selected user. ==================================================================== */ void client_challenge( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Update multiplayer network configuration. ==================================================================== */ void client_update_difficulty( GuiWidget *widget, GuiEvent *event ); void client_update_rounds( GuiWidget *widget, GuiEvent *event ); void client_update_frags( GuiWidget *widget, GuiEvent *event ); void client_update_balls( GuiWidget *widget, GuiEvent *event ); void client_update_port( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Allow user to transfer a levelset. ==================================================================== */ void client_listen( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Initiate levelset transfer. ==================================================================== */ void client_transfer( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Open channel selector ==================================================================== */ void client_select_channel( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Handle channel (un)selection. ==================================================================== */ void client_handle_channel_list( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Close channel selector or enter new channel. ==================================================================== */ void client_enter_channel( GuiWidget *widget, GuiEvent *event ); void client_cancel_channel( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Close statistics ==================================================================== */ void client_close_stats( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Send chatter to gamepeer in pauseroom when ENTER was pressed. ==================================================================== */ void client_send_pausechatter( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Close pauseroom. ==================================================================== */ void client_close_pauseroom( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Popup help dialogue. ==================================================================== */ void client_popup_help( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Close help dialogue. ==================================================================== */ void client_close_help( GuiWidget *widget, GuiEvent *event ); /* ==================================================================== Select topic and display help text. ==================================================================== */ void client_handle_topic_list( GuiWidget *widget, GuiEvent *event ); #endif lbreakout2-2.6.5/client/credit.h0000664000175000017500000000300212140767214013421 00000000000000/*************************************************************************** credit.h - description ------------------- begin : Thu Sep 13 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Initiate credit. ==================================================================== */ void credit_init( char *name, char *author, int level, int level_count ); void credit_clear(); /* ==================================================================== Show/Hide credits ==================================================================== */ void credit_hide(); void credit_show(); void credit_alphashow( int alpha ); void credit_update( int ms ); lbreakout2-2.6.5/client/paddle.h0000664000175000017500000000361512140767214013412 00000000000000/*************************************************************************** paddle.h - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Hide and show paddle on screen. ==================================================================== */ void paddle_hide( Paddle *paddle ); void paddle_show_shadow( Paddle *paddle ); void paddle_show( Paddle *paddle ); void paddle_alphashow( Paddle *paddle, int a ); /* ==================================================================== Update paddle animation (weapon) ==================================================================== */ void client_paddle_update( Paddle *paddle, int ms ); /* ==================================================================== Handle events (used for local paddle) ==================================================================== */ void paddle_handle_events( Paddle *paddle, int ms ); /* draw ammo in network game */ void paddle_ammo_hide( Paddle *paddle ); void paddle_ammo_show( Paddle *paddle ); lbreakout2-2.6.5/client/setselect.c0000664000175000017500000004432512140767214014152 00000000000000/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "manager.h" #include "../game/game.h" #include "file.h" #include "chart.h" #include "event.h" #include "config.h" #include "../gui/stk.h" #include "theme.h" #include "slot.h" /** Basic information about levelset and screenshot of first level */ typedef struct { char *name; struct { int major; int minor; } version; char *author; int num_levels; SDL_Surface *thumbnail; } set_info_t; /** Button displaying a levelsetname or up/down */ typedef struct { SDL_Rect region; #define SELECTID_UNUSED -4 #define SELECTID_PREV -3 #define SELECTID_NEXT -2 #define SELECTID_EXIT -1 int id; /* special id or index in set_infos */ #define MAXLABELLEN 24 char label[MAXLABELLEN]; int focus; uint32_t last_focus_time; /* for animation; not used now */ } select_button_t; /** Select dialog object */ typedef struct { int initialized; /* resources loaded */ SDL_Surface *background; /* background of dialog */ StkFont *standard_font; StkFont *caption_font; StkFont *highlight_font; int num_set_infos; set_info_t *set_infos; /* information about all levelsets */ #define NUMSELECTBUTTONS 22 #define SETBUTTON_START_ID 1 #define SETBUTTON_END_ID 19 select_button_t select_buttons[NUMSELECTBUTTONS]; char *selected_set; /* pointer to name in set_infos */ SDL_Surface *thumbnail_background; /* bkgnd + frame + paddle */ SDL_Surface *thumbnail_bricks; /* scaled down bricks */ } setselect_dlg_t; setselect_dlg_t ssd; extern char **levelset_names_local; extern int levelset_count_local; extern SDL_Surface *stk_display; extern SDL_Surface *extra_pic; extern SDL_Surface *brick_pic; extern int stk_quit_request; extern Config config; extern SDL_Surface *brick_pic; extern Brick_Conv brick_conv_table[BRICK_COUNT]; extern SDL_Surface *frame_left, *frame_top, *frame_right; extern SDL_Surface **bkgnds, *paddle_pic, *ball_pic, *lamps; extern int paddle_cw, paddle_ch, ball_w, ball_h; extern int cw, ch; #ifdef AUDIO_ENABLED extern StkSound *wav_menu_click, *wav_menu_motion; #endif /** Return new surface half the width*height than @surf. */ static SDL_Surface * shrink_surface_half(SDL_Surface *surf) { int i, j, nw = surf->w / 2, nh = surf->h / 2; SDL_Surface *newsurf = NULL; if ((newsurf = stk_surface_create(SDL_SWSURFACE,nw,nh)) == NULL) { fprintf(stderr,_("Out of memory")); return NULL; } for ( j = 0; j < nh; j++ ) for ( i = 0; i < nw; i++ ) stk_surface_set_pixel(newsurf, i, j, stk_surface_get_pixel(surf,i<<1,j<<1)); return newsurf; } /** Create an empty level (with frame, paddle, etc) and scale to half size so * it can be used for levelset previews. */ static SDL_Surface* create_thumbnail_background() { int i, px, py; SDL_Surface *bkgnd = NULL, *thumb = NULL; /* wallpaper */ bkgnd = stk_surface_create(SDL_SWSURFACE,stk_display->w,stk_display->h); bkgnd_draw(bkgnd,-1,0); /* frame */ stk_surface_blit(frame_left,0,0,-1,-1,bkgnd,0,0); stk_surface_blit(frame_top,0,0,-1,-1,bkgnd,frame_left->w,0); stk_surface_blit(frame_right,0,0,-1,-1,bkgnd,stk_display->w-frame_right->w,0); /* lifes */ for (i = 0; i < 5; i++) stk_surface_blit(lamps,0,BRICK_HEIGHT,BRICK_WIDTH,BRICK_HEIGHT, bkgnd, 0, bkgnd->h-(i+1)*BRICK_HEIGHT); /* paddle + ball */ px = (bkgnd->w - paddle_cw * 3) / 2; py = bkgnd->h - 2 * BRICK_HEIGHT; stk_surface_blit(paddle_pic,0,0,paddle_cw * 3, paddle_ch, bkgnd, px,py); stk_surface_blit(ball_pic,0,0,ball_w,ball_h,bkgnd, (bkgnd->w - ball_w) / 2, py - ball_h); thumb = shrink_surface_half(bkgnd); SDL_FreeSurface(bkgnd); SDL_SetColorKey(thumb, 0, 0); return thumb; } /** Render an image of the first level. If @level is NULL render empty level. */ static void render_level_thumbnail(set_info_t *si, const Level *level) { int tw = ssd.thumbnail_background->w; int th = ssd.thumbnail_background->h; int bw = BRICK_WIDTH / 2, bh = BRICK_HEIGHT / 2; int i, j, k, bx, by, xoff, yoff; if (si->thumbnail) return; /* set background */ if ((si->thumbnail = stk_surface_create(SDL_SWSURFACE,tw,th)) == NULL) return; SDL_SetColorKey(si->thumbnail, 0, 0); stk_surface_blit(ssd.thumbnail_background, 0, 0, tw, th, si->thumbnail, 0, 0); if (level == NULL) return; /* add bricks */ xoff = bx = ((MAP_WIDTH - EDIT_WIDTH)/2) * bw; yoff = by = bh; for (j = 0; j < EDIT_HEIGHT; j++, by += bh) { for (i = 0; i < EDIT_WIDTH; i++, bx += bw) { for (k = 0; k < BRICK_COUNT; k++) if (brick_conv_table[k].c == level->bricks[i][j]) break; if (k == BRICK_COUNT) continue; /* oops, unknown id? */ if (brick_conv_table[k].id != INVIS_BRICK_ID) stk_surface_blit(ssd.thumbnail_bricks, bw * brick_conv_table[k].id, 0, bw, bh, si->thumbnail, bx, by); } bx = xoff; } } /** Load basic information of levelset @sname (preceded by ~ for set in * home directory) into struct @si. Also generate a small preview thumbnail * of first level. */ static void load_set_info( set_info_t *si, const char *sname ) { FILE *file = NULL; Level *level = NULL; int num_levels = 0, i, is_def_set = 0; char *default_sets[] = { TOURNAMENT, _("!JUMPING_JACK!"), _("!OUTBREAK!"), _("!BARRIER!"), _("!SITTING_DUCKS!"), _("!HUNTER!"), _("!INVADERS!") }; memset(si, 0, sizeof( set_info_t )); /* set name */ si->name = strdup(sname); /* open file, if this fails the rest of the info can't be set */ /* TODO: what to do with lengthy description of special levelsets? */ for (i = 0; i < 7; i++) if (strcmp(sname,default_sets[i]) == 0) { is_def_set = 1; break; } if (is_def_set || (file = levelset_open(sname, "rb")) == NULL) { si->version.major = 1; si->version.minor = 0; si->author = strdup("???"); si->num_levels = 0; render_level_thumbnail(si, NULL); if (is_def_set) { ssd.caption_font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_CENTER_Y; stk_font_write(ssd.caption_font, si->thumbnail, si->thumbnail->w/2, si->thumbnail->h/2, STK_OPAQUE, _("Special Game")); } return; /* error is printed by levelset_open() */ } /* get version */ levelset_get_version(file, &si->version.major, &si->version.minor); /* get author name and thumbnail from first level */ if ((level = level_load(file)) == NULL) { fprintf(stderr,"Could not load first level of set %s\n",sname); si->author = strdup("???"); si->num_levels = 0; render_level_thumbnail(si, NULL); return; } num_levels = 1; si->author = strdup(level->author); render_level_thumbnail(si,level); level_delete(level); /* count remaining levels * FIXME: don't parse levels but just count number */ while ((level = level_load(file)) != NULL) { num_levels++; level_delete(level); } si->num_levels = num_levels; fclose( file ); } /** Update set select buttons using set infos starting at index @set_id. * The buttons outside range (prev, next, exit) are not touched. */ static void update_select_buttons( int set_id ) { int i; for (i = SETBUTTON_START_ID; i <= SETBUTTON_END_ID; i++) { select_button_t *btn = &ssd.select_buttons[i]; btn->focus = 0; btn->last_focus_time = 0; if (set_id >= ssd.num_set_infos) { btn->id = SELECTID_UNUSED; strcpy(btn->label,""); continue; } btn->id = set_id; snprintf(btn->label, MAXLABELLEN, "%s", ssd.set_infos[set_id].name); set_id++; } } /** Return new id for select buttons. @dir is either -1 for scrolling up * or 1 for scrolling down. */ static int get_new_select_button_start_id( int dir ) { int id; int num_setbuttons = SETBUTTON_END_ID - SETBUTTON_START_ID + 1; if (dir == -1) { id = ssd.select_buttons[SETBUTTON_START_ID].id; if (id == 0) { /* go to end of list */ id = ssd.num_set_infos - num_setbuttons; } else { id -= num_setbuttons; if (id < 0) id = 0; } return id; } if (dir == 1) { id = ssd.select_buttons[SETBUTTON_START_ID].id; if (id == ssd.num_set_infos - num_setbuttons) { /* go to begin of list */ id = 0; } else { id += num_setbuttons; if (id > ssd.num_set_infos - num_setbuttons) id = ssd.num_set_infos - num_setbuttons; } return id; } return 0; } /** Load/Free resources. */ void setselect_create() { int i, x, y; if (ssd.initialized) return; /* already done */ memset(&ssd, 0, sizeof(ssd)); ssd.standard_font = stk_font_load( SDL_SWSURFACE, "f_small_yellow.png" ); SDL_SetColorKey( ssd.standard_font->surface, SDL_SRCCOLORKEY, stk_surface_get_pixel( ssd.standard_font->surface, 0,0 ) ); ssd.highlight_font = stk_font_load( SDL_SWSURFACE, "f_small_white.png" ); SDL_SetColorKey( ssd.highlight_font->surface, SDL_SRCCOLORKEY, stk_surface_get_pixel( ssd.highlight_font->surface, 0,0 ) ); ssd.caption_font = stk_font_load( SDL_SWSURFACE, "f_yellow.png" ); SDL_SetColorKey( ssd.caption_font->surface, SDL_SRCCOLORKEY, stk_surface_get_pixel( ssd.caption_font->surface, 0,0 ) ); /* background -- will be filled when running dialog */ ssd.background = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); SDL_SetColorKey( ssd.background, 0, 0 ); /* position select buttons */ x = 50; y = 50; for (i = 0; i < NUMSELECTBUTTONS; i++) { select_button_t *sb = &ssd.select_buttons[i]; sb->region.x = x; sb->region.y = y; sb->region.w = 180; sb->region.h = ssd.standard_font->height + 5; if (i == 0) { sb->id = SELECTID_PREV; snprintf(sb->label,MAXLABELLEN,_("...Previous Page...")); } else if (i == NUMSELECTBUTTONS - 2) { sb->id = SELECTID_NEXT; snprintf(sb->label,MAXLABELLEN,_("...Next Page...")); y += 10; /* some distance to back button */ } else if (i == NUMSELECTBUTTONS - 1) { sb->id = SELECTID_EXIT; snprintf(sb->label,MAXLABELLEN,_("Back To Menu")); } else { sb->id = SELECTID_UNUSED; snprintf(sb->label,MAXLABELLEN,_("")); } sb->focus = 0; sb->last_focus_time = 0; y += ssd.standard_font->height + 5; } /* thumbnail background and bricks */ ssd.thumbnail_background = create_thumbnail_background(); ssd.thumbnail_bricks = shrink_surface_half(brick_pic); /* by default bricks have no color key but there may be an extra * column at the end to specify one */ if (brick_pic->w & 1) SDL_SetColorKey( ssd.thumbnail_bricks, SDL_SRCCOLORKEY, stk_surface_get_pixel( brick_pic, brick_pic->w - 1, 0 ) ); /* levelset infos */ ssd.num_set_infos = levelset_count_local; ssd.set_infos = calloc( ssd.num_set_infos, sizeof(set_info_t) ); for (i = 0; i < ssd.num_set_infos; i++) { set_info_t *si = &ssd.set_infos[i]; load_set_info( si, levelset_names_local[i] ); } update_select_buttons(0); ssd.initialized = 1; } void setselect_delete() { int i; if (!ssd.initialized) return; stk_font_free( &ssd.standard_font ); stk_font_free( &ssd.caption_font ); stk_font_free( &ssd.highlight_font ); stk_surface_free( &ssd.background ); if (ssd.set_infos) { for (i = 0; i < ssd.num_set_infos; i++) { set_info_t *si = &ssd.set_infos[i]; if (si->name) free(si->name); if (si->author) free(si->author); if (si->thumbnail) SDL_FreeSurface(si->thumbnail); } free(ssd.set_infos); ssd.set_infos = NULL; } stk_surface_free( &ssd.thumbnail_background ); stk_surface_free( &ssd.thumbnail_bricks ); ssd.initialized = 0; } /** Set background from current screen */ static void set_background() { SDL_Surface *buffer = stk_surface_create(SDL_SWSURFACE, stk_display->w, stk_display->h); stk_surface_blit( stk_display, 0,0,-1,-1, buffer, 0,0 ); SDL_SetColorKey(buffer, 0, 0); stk_surface_gray( stk_display, 0,0,-1,-1, 2 ); stk_surface_blit( stk_display, 0,0,-1,-1, ssd.background, 0,0 ); ssd.caption_font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; stk_font_write(ssd.caption_font,ssd.background,ssd.background->w/2,20, STK_OPAQUE,_("Select Custom Levelset")); SDL_FreeSurface( buffer ); } /** Draw buttons list. If @refresh is True update screen. */ static void draw_buttons( int refresh ) { int i; StkFont *font = NULL; ssd.standard_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; for (i = 0; i < NUMSELECTBUTTONS; i++) { select_button_t *btn = &ssd.select_buttons[i]; stk_surface_blit( ssd.background, btn->region.x, btn->region.y, btn->region.w, btn->region.h, stk_display, btn->region.x, btn->region.y); font = ssd.standard_font; if (btn->focus) font = ssd.highlight_font; stk_font_write(font, stk_display, btn->region.x, btn->region.y, STK_OPAQUE, btn->label); } if (refresh) { SDL_Rect region = { ssd.select_buttons[0].region.x, ssd.select_buttons[0].region.y, ssd.select_buttons[NUMSELECTBUTTONS-1].region.w, ssd.select_buttons[NUMSELECTBUTTONS-1].region.y + ssd.select_buttons[NUMSELECTBUTTONS-1].region.h - ssd.select_buttons[0].region.y }; stk_display_store_rect( ®ion ); stk_display_update( STK_UPDATE_RECTS ); } } /** Draw set info. If @si is NULL just clear region. */ static void draw_set_info(set_info_t *si, int refresh) { SDL_Rect ir = {270, 50, 320, 250+ch}; int x, y; char buf[64]; /* clear background */ stk_surface_blit(ssd.background,ir.x,ir.y,ir.w,ir.h, stk_display,ir.x,ir.y); if (si == NULL) { stk_display_store_rect( &ir ); stk_display_update( STK_UPDATE_RECTS ); return; } /* thumbnail */ stk_surface_blit(si->thumbnail,0,0,si->thumbnail->w,si->thumbnail->h, stk_display, ir.x, ir.y); /* info */ x = ir.x + si->thumbnail->w / 2; y = ir.y + si->thumbnail->h + 2; ssd.standard_font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; snprintf(buf, 64, _("by %s, %d levels"), si->author, si->num_levels); stk_font_write(ssd.standard_font, stk_display, x, y, STK_OPAQUE, buf); x = ir.x + si->thumbnail->w / 2; y = ir.y + si->thumbnail->h - 40; ssd.caption_font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; snprintf(buf, 64, _("%s v%d.%02d"), si->name, si->version.major, si->version.minor); stk_font_write(ssd.caption_font, stk_display, x, y, STK_OPAQUE, buf); /* highscores */ chart_show_compact(chart_set_query(si->name), ir.x + (ir.w-cw)/2, ir.y + 264, cw, ch); if (refresh) { stk_display_store_rect( &ir ); stk_display_update( STK_UPDATE_RECTS ); } } /** Draw everything. */ static void draw_all() { stk_surface_blit( ssd.background, 0,0,-1,-1, stk_display, 0,0 ); draw_buttons(0); stk_display_update( STK_UPDATE_ALL ); } /** Handle mouse motion to position @x,@y. Redraw all buttons if either * the focus has changed or @force_redraw is set. */ static void handle_motion( int x, int y, int force_redraw ) { int i; select_button_t *focus_sb = NULL; static select_button_t *old_focus_sb = NULL; /* check button focus */ for (i = 0; i < NUMSELECTBUTTONS; i++) { select_button_t *sb = &ssd.select_buttons[i]; if (FOCUS_RECT(x,y,sb->region)) { sb->focus = 1; focus_sb = sb; #ifdef AUDIO_ENABLED if (focus_sb != old_focus_sb) stk_sound_play(wav_menu_motion); #endif } else sb->focus = 0; } /* redraw */ if (force_redraw || old_focus_sb != focus_sb) { draw_buttons(1); old_focus_sb = focus_sb; if (focus_sb && focus_sb->id >= 0) draw_set_info(&ssd.set_infos[focus_sb->id],1); else draw_set_info(NULL,1); } } /** Handle mouse button click on position @x,@y. Return 1 if either Quit * button or levelset has been clicked, 0 otherwise. If set has been * selected store it in ssd::selected_set. */ static int handle_click(int x, int y) { int i; select_button_t *sb = NULL; /* get clicked button */ for (i = 0; i < NUMSELECTBUTTONS; i++) { if (FOCUS_RECT(x,y,ssd.select_buttons[i].region)) { sb = &ssd.select_buttons[i]; break; } } if (sb == NULL) return 0; /* no button clicked */ #ifdef AUDIO_ENABLED stk_sound_play(wav_menu_click); #endif if (sb->id == SELECTID_EXIT) return 1; if (sb->id == SELECTID_PREV || sb->id == SELECTID_NEXT) { int id; if (sb->id == SELECTID_PREV) id = get_new_select_button_start_id(-1); else id = get_new_select_button_start_id(1); update_select_buttons(id); draw_buttons(1); return 0; } ssd.selected_set = ssd.set_infos[sb->id].name; return 1; } /** Check if button is a mouse wheel. If so fake up/down button click and * return 1, otherwise 0. */ static int handle_scrolling( const SDL_Event *ev ) { int id = -1; if (ev->button.button == 4 /* up */) id = get_new_select_button_start_id(-1); else if (ev->button.button == 5 /* down */) id = get_new_select_button_start_id(1); if (id == -1) return 0; update_select_buttons(id); #ifdef AUDIO_ENABLED stk_sound_play(wav_menu_motion); #endif handle_motion(ev->button.x, ev->button.y, 1); return 1; } /** Main loop, run dialog and return pointer to name of selected set or * NULL if none selected. */ const char * setselect_run() { SDL_Event event; int leave = 0; SDL_EventFilter old_filter; /* backup current filter (which takes out motion events) as we work * with WaitEvent() for the moment; see manager_run() how it is done * for polling events. */ old_filter = SDL_GetEventFilter(); SDL_SetEventFilter( 0 ); /* TODO: reload set infos if necessary */ ssd.selected_set = NULL; set_background(); handle_motion(0,0,0); /* clear old highlighting */ draw_all(); while ( !leave && !stk_quit_request ) { SDL_WaitEvent( &event ); switch ( event.type ) { case SDL_QUIT: stk_quit_request = 1; break; case SDL_MOUSEMOTION: handle_motion( event.motion.x, event.motion.y, 0 ); break; case SDL_MOUSEBUTTONUP: if (handle_scrolling(&event)) break; if (handle_click(event.button.x,event.button.y)) leave = 1; break; case SDL_KEYUP: if (event.key.keysym.sym == SDLK_ESCAPE) leave = 1; break; } } /* restore event filter */ SDL_SetEventFilter(old_filter); return ssd.selected_set; /* is a pointer to ssd.set_infos */ } lbreakout2-2.6.5/client/paddle.c0000664000175000017500000002750112140767214013405 00000000000000/*************************************************************************** paddle.c - description ------------------- begin : Fri Sep 7 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "config.h" #include "paddle.h" #include "../game/game.h" /* ==================================================================== Paddle & plasma weapon ==================================================================== */ extern SDL_Surface *paddle_pic; /* paddle tiles: left, middle, right for each paddle type */ extern SDL_Surface *paddle_shadow; extern SDL_Surface *weapon_pic; extern SDL_Surface *ammo_pic; extern SDL_Surface *weapon_shadow; extern int paddle_cw, paddle_ch; int weapon_w = 14; int weapon_h = 18; int weapon_fr_num = 4; float weapon_fpms = 0.006; /* ==================================================================== Other stuff ==================================================================== */ extern SDL_Surface *stk_display; extern SDL_Rect stk_drect; extern SDL_Surface *offscreen; extern int shadow_size; extern Game *game; extern Config config; /* ==================================================================== Hide and show paddle on screen. ==================================================================== */ void paddle_hide( Paddle *paddle ) { paddle->update_rect.x = paddle->x; paddle->update_rect.y = paddle->y; paddle->update_rect.w = paddle->w + shadow_size; paddle->update_rect.h = paddle->h + shadow_size; stk_surface_blit( offscreen, paddle->x, paddle->y, paddle->update_rect.w, paddle->update_rect.h, stk_display, paddle->x, paddle->y ); /* store rect if it won't be drawn */ if ( paddle->invis ) if ( paddle->invis_delay == 0 ) stk_display_store_rect( &paddle->update_rect ); } void paddle_show_shadow( Paddle *paddle ) { int aux_w = 0, i; int rem_middle_w; /* remaining points to draw in the middle */ if ( paddle->invis ) return; if ( game->extra_active[EX_DARKNESS] ) return; stk_surface_clip( stk_display, 0, 0, stk_display->w - BRICK_WIDTH, stk_display->h ); /* left end */ stk_surface_alpha_blit( paddle_shadow, paddle->pic_x_offset,0,paddle_cw, paddle_ch, stk_display, paddle->x + shadow_size, paddle->y + shadow_size, SHADOW_ALPHA ); /* middle part */ for ( i = paddle_cw, rem_middle_w = paddle->w - ( paddle_cw << 1 ); rem_middle_w > 0; i += paddle_cw, rem_middle_w -= paddle_cw ) { if ( rem_middle_w > paddle_cw ) aux_w = paddle_cw; else aux_w = rem_middle_w; stk_surface_alpha_blit( paddle_shadow, paddle->pic_x_offset+paddle_cw,0,aux_w, paddle_ch, stk_display, paddle->x + shadow_size + i, paddle->y + shadow_size, SHADOW_ALPHA ); } /* right end */ i = paddle->w - paddle_cw; stk_surface_alpha_blit( paddle_shadow, paddle->pic_x_offset+(paddle_cw<<1),0,paddle_cw, paddle_ch, stk_display, paddle->x + shadow_size + i, paddle->y + shadow_size, SHADOW_ALPHA ); stk_surface_clip( stk_display, 0, 0, 0, 0 ); } void paddle_show( Paddle *paddle ) { int i, aux_w = 0; int rem_middle_w; /* remaining points to draw in the middle */ /* if invisible return or show alpha */ if ( paddle->invis ) { if ( paddle->invis_delay != 0 ) paddle_alphashow( paddle, 128 ); return; } /* paddle */ /* left end */ stk_surface_blit( paddle_pic, paddle->pic_x_offset,paddle->pic_y_offset, paddle_cw, paddle_ch, stk_display, paddle->x, paddle->y ); /* middle part */ for ( i = paddle_cw, rem_middle_w = paddle->w - ( paddle_cw << 1 ); rem_middle_w > 0; i += paddle_cw, rem_middle_w -= paddle_cw ) { if ( rem_middle_w > paddle_cw ) aux_w = paddle_cw; else aux_w = rem_middle_w; stk_surface_blit( paddle_pic, paddle->pic_x_offset+paddle_cw,paddle->pic_y_offset, aux_w, paddle_ch, stk_display, paddle->x + i, paddle->y ); } i = paddle->w - paddle_cw; /* right end */ stk_surface_blit( paddle_pic, paddle->pic_x_offset+(paddle_cw<<1),paddle->pic_y_offset, paddle_cw, paddle_ch, stk_display, paddle->x + i, paddle->y ); /* weapon */ if ( paddle->weapon_inst ) stk_surface_blit( weapon_pic, (int)paddle->weapon_cur * weapon_w, 0, weapon_w, weapon_h, stk_display, paddle->x + ((paddle->w - weapon_w)>>1), paddle->y ); /* update */ if ( paddle->x < paddle->update_rect.x ) { /* movement to left */ paddle->update_rect.w += paddle->update_rect.x - paddle->x; paddle->update_rect.x = paddle->x; } else { /* movement to right */ paddle->update_rect.w += paddle->x - paddle->update_rect.x; } stk_display_store_rect( &paddle->update_rect ); } void paddle_alphashow( Paddle *paddle, int a ) { int i, aux_w; int rem_middle_w; /* left end */ stk_surface_alpha_blit( paddle_pic, paddle->pic_x_offset,paddle->pic_y_offset, paddle_cw, paddle_ch, stk_display, paddle->x, paddle->y, a ); /* middle part */ for ( i = paddle_cw, rem_middle_w = paddle->w - ( paddle_cw << 1 ); rem_middle_w > 0; i += paddle_cw, rem_middle_w -= paddle_cw ) { if ( rem_middle_w > paddle_cw ) aux_w = paddle_cw; else aux_w = rem_middle_w; stk_surface_alpha_blit( paddle_pic, paddle->pic_x_offset+paddle_cw,paddle->pic_y_offset, aux_w, paddle_ch, stk_display, paddle->x + i, paddle->y, a ); } i = paddle->w - paddle_cw; /* right end */ stk_surface_alpha_blit( paddle_pic, paddle->pic_x_offset+(paddle_cw<<1),paddle->pic_y_offset, paddle_cw, paddle_ch, stk_display, paddle->x + i, paddle->y, a ); if ( paddle->weapon_inst ) stk_surface_alpha_blit( weapon_pic, (int)paddle->weapon_cur * weapon_w, 0, weapon_w, weapon_h, stk_display, paddle->x + ((paddle->w - weapon_w)>>1), paddle->y, a ); /* update */ if ( paddle->x < paddle->update_rect.x ) { /* movement to left */ paddle->update_rect.w += paddle->update_rect.x - paddle->x; paddle->update_rect.x = paddle->x; } else { /* movement to right */ paddle->update_rect.w += paddle->x - paddle->update_rect.x; } stk_display_store_rect( &paddle->update_rect ); } /* ==================================================================== Update paddle animation (weapon) ==================================================================== */ void client_paddle_update( Paddle *paddle, int ms ) { Ball *ball; int result; /* invisiblity */ if ( paddle->invis ) /* extra active */ if ( paddle->invis_delay > 0 && (paddle->invis_delay-=ms) <= 0 ) paddle->invis_delay = 0; if ( paddle->weapon_inst ) { /* animation */ if ( (paddle->weapon_cur+=ms*weapon_fpms) >= weapon_fr_num) paddle->weapon_cur -= weapon_fr_num; } /* check for resize */ if ( ( result = paddle_resize( paddle, ms ) ) ) { list_reset( game->balls ); while ( ( ball = list_next( game->balls ) ) ) /* adjust attached balls */ if ( ball->attached && ball->paddle == paddle ) { if ( result < 0 ) { /* shrinked */ if ( ball->cur.x > ( paddle->w >> 1 ) ) { ball->cur.x -= 2; ball->x = (int)ball->cur.x; } } else { /* expanded */ if ( ball->cur.x > ( paddle->w >> 1 ) ) { ball->cur.x += 2; ball->x = (int)ball->cur.x; } } } } } /* ==================================================================== Handle events (used for local paddle): Update the coordinates and the state of both fire buttons (left/right). The influence of that on the weapon is handled in paddle_update() and the influence on balls is handled in balls_update(). NEW: While the middle button is pressed, the balls will be accelerated to maximum speed. This is the local equivalent to comm_update_remote_paddle(). ==================================================================== */ void paddle_handle_events( Paddle *paddle, int ms ) { Uint8 *keystate; Uint8 buttonstate; int xoff, yoff; int diff, old_paddle_x = paddle->x; int has_moved = 0; /* a frozen paddle does nothing */ if ( paddle->frozen ) { #ifdef PADDLE_FRICTION paddle->v_x = 0; #endif return; } /* get SDL input states */ keystate = SDL_GetKeyState(0); buttonstate = SDL_GetRelativeMouseState( &xoff, &yoff ); /* mouse motion */ if ( xoff != 0 ) { if ( config.invert ) xoff = -xoff; paddle->cur_x += config.motion_mod * xoff; #ifdef MOUSE_WARP /* reset mouse pointer as current solution does not work for BeOS */ SDL_EventState( SDL_MOUSEMOTION, SDL_IGNORE ); SDL_WarpMouse(stk_display->w >> 1, stk_display->h >> 1); SDL_EventState( SDL_MOUSEMOTION, SDL_ENABLE ); #endif #ifdef PADDLE_FRICTION paddle->friction_delay = 200; #endif has_moved = 1; } /* keys */ if ( keystate[config.k_left] ) { paddle->cur_x -= config.key_speed * (ms << keystate[config.k_turbo]); paddle->friction_delay = 0; paddle->v_x = 0.0; has_moved = 1; } if ( keystate[config.k_right] ) { paddle->cur_x += config.key_speed * (ms << keystate[config.k_turbo]); paddle->friction_delay = 0; paddle->v_x = 0.0; has_moved = 1; } /* update friction delay */ #ifdef PADDLE_FRICTION if ( paddle->friction_delay > 0 && (paddle->friction_delay-=ms)<=0) { paddle->friction_delay = 0; paddle->v_x = 0.0; } #endif /* check paddle when moved */ if ( has_moved ) { /* check range and set absolute position */ if (paddle->cur_x < BRICK_WIDTH) paddle->cur_x = BRICK_WIDTH; if (paddle->cur_x + paddle->w >= stk_display->w - BRICK_WIDTH) paddle->cur_x = stk_display->w - BRICK_WIDTH - paddle->w; paddle->x = paddle->cur_x; /* set paddle speed so that it will modify balls */ #ifdef PADDLE_FRICTION diff = paddle->x - old_paddle_x; paddle->v_x = (float)(diff) / ms; if ( xoff != 0 ) { /* limit mouse speed */ if (paddle->v_x > 5.0) paddle->v_x = 5.0; if (paddle->v_x < -5.0) paddle->v_x = -5.0; paddle->v_x /= 5; } #endif /* visible for some time */ paddle->invis_delay = PADDLE_INVIS_DELAY; } /* update the fire flags (left/right) */ if ( buttonstate & SDL_BUTTON(1) || keystate[config.k_lfire] ) paddle->fire_left = 1; else paddle->fire_left = 0; if ( buttonstate & SDL_BUTTON(3) || keystate[config.k_rfire] ) paddle->fire_right = 1; else paddle->fire_right = 0; /* update maxspeed request - handled in ../game/balls.c::balls_update */ paddle->maxballspeed_request_old = paddle->maxballspeed_request; if ( buttonstate & SDL_BUTTON(2) || keystate[config.k_maxballspeed] ) paddle->maxballspeed_request = 1; else paddle->maxballspeed_request = 0; //printf( "%d\n", paddle->maxballspeed_request ); /* update return key */ if ( buttonstate & SDL_BUTTON(2) || keystate[config.k_return] ) paddle->ball_return_key_pressed = 1; else paddle->ball_return_key_pressed = 0; } /* draw ammo in network game */ void paddle_ammo_hide( Paddle *paddle ) { int x; x = (stk_display->w - paddle->ball_ammo*ammo_pic->w) / 2; stk_surface_blit( offscreen, x,paddle->ball_ammo_disp_y, paddle->ball_ammo*ammo_pic->w, ammo_pic->h, stk_display, x,paddle->ball_ammo_disp_y ); stk_display_store_drect(); } void paddle_ammo_show( Paddle *paddle ) { int i, x; x = (stk_display->w - paddle->ball_ammo*ammo_pic->w) / 2; for ( i = 0; i < paddle->ball_ammo; i++, x += ammo_pic->w ) { stk_surface_blit( ammo_pic, 0,0,-1,-1, stk_display, x, paddle->ball_ammo_disp_y ); stk_display_store_drect(); } } lbreakout2-2.6.5/client/item.c0000664000175000017500000002036212140767214013110 00000000000000/*************************************************************************** item.c - description ------------------- begin : Thu Sep 20 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "manager.h" extern SDL_Surface *stk_display; extern SDL_Surface *mbkgnd; extern StkFont *mfont, *mhfont; /* ==================================================================== Locals ==================================================================== */ float alpha_change = 0.4; /* ==================================================================== Create a basic item. ==================================================================== */ Item *item_create_basic( int type, char *name, char *hint ) { Item *item = calloc( 1, sizeof( Item ) ); /* name */ item->name = strdup( name ); /* id */ item->item_id = -1; /* alpha */ item->halpha = 0; item->alpha = 255; /* type */ item->type = type; /* hint if astring was passed */ if ( hint == 0 ) item->hint = 0; else item->hint = hint_create( 0, 0, hint ); /* the position will be set when this item is adjusted in menu adjust */ /* fonts */ item->font = mfont; item->hfont = mhfont; /* background */ item->bkgnd = mbkgnd; return item; } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Create item. Return Value: item ==================================================================== */ Item *item_create_separator( char *name ) { Item *item = item_create_basic( ITEM_SEPARATOR, name, 0 ); return item; } Item *item_create_range( char *name, char *hint, int *val_int, int min, int max, int step ) { Item *item = item_create_basic( ITEM_RANGE, name, hint ); item->value = value_create_range_int( val_int, min, max, step ); return item; } Item *item_create_switch( char *name, char *hint, int *val_int, char *str_off, char *str_on ) { char **names = calloc( 2, sizeof( char* ) ); Item *item = item_create_basic( ITEM_SWITCH, name, hint ); names[0] = strdup( str_off ); names[1] = strdup( str_on ); item->value = value_create_range_str( val_int, names, 2 ); free( names[0] ); free( names[1] ); free( names ); return item; } Item *item_create_switch_x( char *name, char *hint, int *val_int, char **strings, int count ) { Item *item = item_create_basic( ITEM_SWITCH_X, name, hint ); item->value = value_create_range_str( val_int, strings, count ); return item; } Item *item_create_key( char *name, char *hint, int *val_int, int *filter ) { Item *item = item_create_basic( ITEM_KEY, name, hint ); item->value = value_create_key( val_int, filter ); return item; } Item *item_create_edit( char *name, char *hint, char *val_str, int limit ) { Item *item = item_create_basic( ITEM_EDIT, name, hint ); item->value = value_create_edit( val_str, limit ); return item; } Item *item_create_link( char *name, char *hint, void *menu ) { Item *item = item_create_basic( ITEM_LINK, name, hint ); item->link = menu; return item; } Item *item_create_action( char *name, char *hint, int item_id ) { Item *item = item_create_basic( ITEM_ACTION, name, hint ); item->item_id = item_id; return item; } /* ==================================================================== Delete item (void pointer for compatiblity when using with list) ==================================================================== */ void item_delete( void *pitem ) { Item *item = (Item*)pitem; if ( !item ) return; if ( item->name ) free( item->name ); if ( item->value ) value_delete( item->value ); if ( item->hint ) hint_delete( item->hint ); free( item ); } /* ==================================================================== Adjust alignment of name and value strings ==================================================================== */ void item_adjust( Item *item ) { /* alignment - name */ item->nx = 0; item->ny = item->h / 2; item->nalign = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_CENTER_Y; if ( item->type == ITEM_LINK || item->type == ITEM_ACTION || item->type == ITEM_SEPARATOR ) { item->nx = item->w / 2; item->nalign = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_CENTER_Y; } item->vx = item->w - 1; item->vy = item->h / 2; item->valign = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_CENTER_Y; /* hint position */ if ( item->hint ) hint_set_pos( item->hint, item->x + item->w * 0.6, item->y ); } /* ==================================================================== Hide/Show item ==================================================================== */ void item_hide( Item *item ) { stk_surface_blit( item->bkgnd, item->x, item->y, item->w, item->h, stk_display, item->x, item->y ); stk_display_store_drect(); } void item_show( Item *item ) { /* name */ item->font->align = item->nalign; item->hfont->align = item->nalign; stk_font_write( item->font, stk_display, item->x + item->nx, item->y + item->ny, item->alpha, item->name ); if ( item->halpha > 0 ) stk_font_write( item->hfont, stk_display, item->x + item->nx, item->y + item->ny, item->halpha, item->name ); stk_display_store_drect(); /* value string */ if ( item->value ) { item->font->align = item->valign; item->hfont->align = item->valign; /* Is this a selected edit item? */ if (item->highlighted && (item->type == ITEM_EDIT)) { write_text_with_cursor( item->font, stk_display, item->x + item->vx, item->y + item->vy, item->value->val_str, item->alpha ); if ( item->halpha > 0 ) write_text_with_cursor( item->hfont, stk_display, item->x + item->vx, item->y + item->vy, item->value->val_str, item->halpha ); } else { stk_font_write( item->font, stk_display, item->x + item->vx, item->y + item->vy, item->alpha, item->value->val_str ); if ( item->halpha > 0 ) stk_font_write( item->hfont, stk_display, item->x + item->vx, item->y + item->vy, item->halpha, item->value->val_str ); } stk_display_store_drect(); } } /* ==================================================================== Update alpha of item ==================================================================== */ void item_update_alpha( Item *item, int ms ) { if ( item->highlighted ) { item->halpha = 255; item->alpha = 0; } else { if ( item->halpha > 0 ) { item->halpha -= alpha_change * ms; if ( item->halpha < 0 ) item->halpha = 0; } if ( item->alpha < 255 ) { item->alpha += alpha_change * ms; if ( item->alpha > 255 ) item->alpha = 255; } } } /* ==================================================================== Check if position's on item. ==================================================================== */ int item_focus( Item *item, int x, int y ) { if ( item->type == ITEM_SEPARATOR ) return 0; /* may never be focused */ return ( x >= item->x && y >= item->y && x < item->x + item->w && y < item->y + item->h ); } lbreakout2-2.6.5/client/shots.h0000664000175000017500000000244712140767214013323 00000000000000/*************************************************************************** shots.h - description ------------------- begin : Sat Sep 8 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Hide and show shots ==================================================================== */ void shots_hide(); void shots_show(); void shots_alphashow( int alpha ); /* update animation of shots */ void client_shots_update( int ms ); lbreakout2-2.6.5/client/shrapnells.c0000664000175000017500000002507612140767214014334 00000000000000/*************************************************************************** shrapnells.c - description ------------------- begin : Sat Sep 8 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "../game/mathfuncs.h" #include "config.h" #include "shrapnells.h" extern Config config; extern SDL_Surface *stk_display; extern SDL_Surface *offscreen; List *shrapnells = 0; float shr_alpha_change = 0.25; float shr_start_alpha = 255; /* ==================================================================== Local ==================================================================== */ /* ==================================================================== Create a single shrapnell and add to list. ==================================================================== */ void shrapnell_create( SDL_Surface *surf, int sx, int sy, int sw, int sh, int px, int py, float vx, float vy ) { Shrapnell *shr = calloc( 1, sizeof( Shrapnell ) ); shr->pic = stk_surface_create( SDL_SWSURFACE, sw,sh ); //SDL_SetColorKey(shr->pic, 0, 0); stk_surface_blit( surf, sx, sy,sw,sh, shr->pic, 0,0 ); shr->x = px; shr->y = py; shr->v.x = vx; shr->v.y = vy; shr->alpha = shr_start_alpha; list_add( shrapnells, shr); } /* ==================================================================== Delete a shrapnell ==================================================================== */ void shrapnell_delete( void *ptr ) { Shrapnell *shr = (Shrapnell*)ptr; SDL_FreeSurface( shr->pic ); free( shr ); } /* ==================================================================== Public ==================================================================== */ /* ==================================================================== Initate or delete shrapnell list ==================================================================== */ void shrapnells_init() { shrapnells = list_create( LIST_AUTO_DELETE, shrapnell_delete ); } void shrapnells_delete() { list_delete( shrapnells ); } /* ==================================================================== Create shrapnells from surface (surf,sx,sy,sw,sh) and put it to screen position (px,py). The vector imp is the impuls and type the type of what caused the destruction. ==================================================================== */ void shrapnells_create( SDL_Surface *surf, int sx, int sy, int sw, int sh, int px, int py, int type, Vector imp ) { int i, j; int shr_w, shr_h; Vector v; int dx, dy; /* no animations? */ if ( !config.anim ) return; /* * 1 - low * 2 - medium * 3 - high */ /* according to type create shrapnells */ switch ( type ) { case SHR_BY_NORMAL_BALL: vector_norm( &imp ); imp.x *= 0.13; imp.y *= 0.13; shrapnell_create( surf, sx, sy, sw, sh, px, py, imp.x, imp.y ); break; case SHR_BY_ENERGY_BALL: if ( config.anim == 1 ) { /* low */ shrapnell_create( surf, sx, sy, sw, sh, px, py, 0, 0 ); break; } shr_w = sw / 2; shr_h = sh / 2; for ( i = 0; i < sw; i += shr_w ) for ( j = 0; j < sh; j += shr_h ) { v.x = ( sw >> 1 ) - ( i + ( shr_w >> 1 ) ); v.y = ( sh >> 1 ) - ( j + ( shr_h >> 1 ) ); vector_norm( &v ); v.x *= 0.01; v.y *= 0.01; shrapnell_create( surf, sx + i, sy + j, shr_w, shr_h, px + i, py + j, v.x, v.y ); } break; case SHR_BY_SHOT: if ( config.anim == 1 ) { /* low */ shrapnell_create( surf, sx, sy, sw, sh, px, py, 0, imp.y * 0.02 ); break; } shr_w = sw / 8; shr_h = sh; for ( i = 0; i < ( sw >> 1 ); i += shr_w ) { shrapnell_create( surf, sx + i, sy, shr_w, shr_h, px + i, py, 0, imp.y * 0.002 * ( i + 1 ) ); shrapnell_create( surf, sx + sw - shr_w - i, sy, shr_w, shr_h, px + sw - shr_w - i, py, 0, imp.y * 0.002 * ( i + 1 ) ); } break; case SHR_BY_EXPL: shr_w = config.anim == 3 ? 5 : 10; shr_h = config.anim == 3 ? 5 : 10; for ( i = 0; i < sw; i += shr_w ) for ( j = 0; j < sh; j += shr_h ) { dx = rand() % 2 == 0 ? 1 : -1; dy = rand() % 2 == 0 ? 1 : -1; shrapnell_create( surf, sx + i, sy + j, shr_w, shr_h, px + i, py + j, (float)( ( rand() % 6 ) + 5) / 100 * dx, (float)( ( rand() % 6 ) + 5) / 100 * dy ); } break; } } /* ==================================================================== Remove all shrapnells ==================================================================== */ void shrapnells_reset() { list_clear( shrapnells ); } /* ==================================================================== Show, hide all shrapnells. ==================================================================== */ void shrapnells_hide() { ListEntry *entry = shrapnells->head->next; Shrapnell *shr; int x, y; while ( entry != shrapnells->tail ) { shr = entry->item; entry = entry->next; x = (int)shr->x; y = (int)shr->y; stk_surface_blit( offscreen, x, y, shr->pic->w, shr->pic->h, stk_display, x, y ); stk_display_store_drect(); } } void shrapnells_show() { ListEntry *entry = shrapnells->head->next; Shrapnell *shr; while ( entry != shrapnells->tail ) { shr = entry->item; entry = entry->next; stk_surface_blit( shr->pic, 0,0,shr->pic->w,shr->pic->h, stk_display, (int)shr->x, (int)shr->y ); stk_display_store_drect(); } } /* ==================================================================== Update and remove expired shrapnells ==================================================================== */ void shrapnells_update( int ms ) { ListEntry *entry = shrapnells->head->next; Shrapnell *shr; while ( entry != shrapnells->tail ) { shr = entry->item; entry = entry->next; shr->x += shr->v.x * ms; shr->y += shr->v.y * ms; if (shr->alpha > 0 ) { shr->alpha -= shr_alpha_change * ms; SDL_SetAlpha( shr->pic, SDL_SRCALPHA, (int)shr->alpha ); } if (shr->alpha <= 0 || shr->x + shr->pic->w < 0 || shr->y + shr->pic->h < 0 || shr->x > stk_display->w || shr->y > stk_display->h ) list_delete_entry( shrapnells, entry->prev ); } } /* ==================================================================== Brick explosion animations. ==================================================================== */ #define exp_change 0.015 #define exp_alpha_change 0.10 List *exps; SDL_Surface *current_exp_pic = 0; /* points either to exp_pic or exp_dark_pic */ extern SDL_Surface *exp_pic; extern SDL_Surface *exp_dark_pic; int exp_w, exp_h; /* size */ int exp_frame_count; /* frame count */ int exp_count; /* number of various explosions */ typedef struct { float alpha; float cur; /* current frame */ int x, y; /* position in screen */ int y_off; /* y offset in explosion picture */ } Exp; void exp_load() { exps = list_create( LIST_AUTO_DELETE, LIST_NO_CALLBACK ); exp_w = exp_h = 60; /* hardcoded as we have various explosions in one file now */ exp_count = exp_pic->h / exp_h; exp_frame_count = exp_pic->w / exp_w; exps_set_dark( 0 ); } void exps_clear() { list_clear( exps ); } void exp_delete() { if ( exps ) list_delete( exps ); exps = 0; } void exp_create( int x, int y ) { Exp *exp = calloc( 1, sizeof( Exp ) ); exp->x = x - ( exp_w >> 1 ); exp->y = y - ( exp_h >> 1 ); exp->alpha = 255; /* red/yellow get 4 parts, gree&yellow&bluw get 1 part each */ switch ( rand() % ( 4 + 4 + 1 + 1 + 1 ) ) { case 0: case 1: case 2: case 3: exp->y_off = 0; break; case 4: case 5: case 6: case 7: exp->y_off = exp_h * 4; break; case 8: exp->y_off = exp_h * 1; break; case 9: exp->y_off = exp_h * 2; break; case 10: exp->y_off = exp_h * 3; break; } list_add( exps, exp ); } void exps_hide() { Exp *exp; list_reset( exps ); while ( ( exp = list_next( exps ) ) ) { stk_surface_blit( offscreen, exp->x, exp->y, exp_w, exp_h, stk_display, exp->x, exp->y ); stk_display_store_drect(); } } void exps_show() { Exp *exp; list_reset( exps ); while ( ( exp = list_next( exps ) ) ) { stk_surface_alpha_blit( current_exp_pic, (int)exp->cur * exp_w, exp->y_off, exp_w, exp_h, stk_display, exp->x, exp->y, exp->alpha ); } } void exps_update( int ms ) { Exp *exp; list_reset( exps ); while ( ( exp = list_next( exps ) ) ) { if ( exp->alpha > 0 ) { exp->alpha -= exp_alpha_change * ms; if ( exp->alpha < 0 ) exp->alpha = 0; } exp->cur += exp_change * ms; if ( exp->cur >= exp_frame_count ) list_delete_current( exps ); } } void exps_set_dark( int dark ) { if ( dark ) current_exp_pic = exp_dark_pic; else current_exp_pic = exp_pic; } lbreakout2-2.6.5/client/bricks.h0000664000175000017500000000356212140767214013437 00000000000000/*************************************************************************** bricks.h - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Draw all bricks to offscreen surface. ==================================================================== */ void bricks_draw(); /* ==================================================================== Add brick with clipped shadow to offscreen. To draw a brick without shadow check use brick_draw(). ==================================================================== */ void brick_draw_complex( int mx, int my, int px, int py ); /* ==================================================================== Draw brick to passed surface ==================================================================== */ void brick_draw( SDL_Surface *surf, int map_x, int map_y, int shadow ); /* handle a received brick action */ void client_handle_brick_hit( BrickHit *hit ); /* redraw all bricks */ void client_redraw_all_bricks(); lbreakout2-2.6.5/client/config.h0000664000175000017500000000763012140767214013427 00000000000000/*************************************************************************** config.h - description ------------------- begin : Tue Feb 13 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __CONFIG_H #define __CONFIG_H /* configure struct */ enum { BALL_BELOW_BONUS = 0, BALL_ABOVE_BONUS }; enum { DEBRIS_BELOW_BALL = 0, DEBRIS_ABOVE_BALL }; typedef struct { /* directory to save config and saved games */ char dir_name[512]; /* levels */ int levelset_id_home; int levelset_count_home; /* save number of levelsets for safety (to reset id if count changed) */ /* players */ int player_count; char player_names[4][32]; /* game */ int diff; /* diffculty */ int startlevel; int rel_warp_limit; /* percentage of bricks required to be destroyed before player may proceed to next level */ int addBonusLevels; /* add some bonus levels */ /* controls */ int k_left; int k_right; int k_lfire; int k_rfire; int k_return; /* return ball on click on this key */ int k_turbo; /* double paddle speed while this key is pressed */ int k_warp; /* warp to next level */ int k_maxballspeed; /* go to maximum ball speed (while pressed) */ int rel_motion; /* use relative mouse motion; motion_mod and invert need this enabled */ int grab; /* keep mouse in window */ int i_motion_mod; /* motion_mod * 100 used to modify in the menu */ double motion_mod; /* multiplied with relative motion */ int convex; int invert; double key_speed; /* move with key_speed pix per sec when keys are used */ int linear_corner; /* assume a 45 line for corner? */ int random_angle; int maxballspeed_int1000; /* max ball speed in pixels/second */ float maxballspeed_float; /* per millisecond */ /* sound */ int sound; int volume; /* 1 - 8 */ int speech; /* enable speech? */ int badspeech; /* if speech allowed, allow swearing? */ int audio_buffer_size; /* graphics */ int anim; int fullscreen; int fade; int bonus_info; int fps; /* frames per second: 0 - no limit, 1 - 50, 2 - 100, 3 - 200 */ int ball_level; int debris_level; int i_key_speed; /* integer value that is devided by 100 to get real key_speed */ /* various */ int use_hints; int return_on_click; /* autoreturn on click if true else automatically */ int theme_id; /* 0 == default theme */ int theme_count; /* to check and properly reset id if number of themes changed */ /* multiplayer */ char server[64]; /* ip:port */ char local_port[8]; /* where to bind local UDP socket */ char username[16]; /* username at server */ int mp_diff; /* difficulty */ int mp_rounds; /* rounds per level in a levelset */ int mp_frags; /* points a player needs to win a round */ int mp_balls; /* maximum number of balls a player may fire */ int recv_limit; /* number of packets parsed in one go */ } Config; /* set config to default */ void config_reset(); /* load config */ void config_load( ); /* save config */ void config_save( ); #endif lbreakout2-2.6.5/client/event.h0000664000175000017500000000456212140767214013304 00000000000000/*************************************************************************** event.h - description ------------------- begin : Sat Sep 8 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Event filter used to get motion x. ==================================================================== */ int event_filter( const SDL_Event *event ); /* ==================================================================== Reset event states ==================================================================== */ void event_reset(); /* ==================================================================== Grab or release input. Hide cursor if events are kept in window. Use relative mouse motion and grab if config tells so. ==================================================================== */ void event_grab_input(); void event_ungrab_input(); /* ==================================================================== Poll next event and set key and mousestate. Return Value: True if event occured ==================================================================== */ int event_poll( SDL_Event *event ); /* ==================================================================== Block/unblock motion event ==================================================================== */ void event_block_motion( int block ); /* ==================================================================== Clear the SDL event key (keydown events) ==================================================================== */ void event_clear_sdl_queue(); lbreakout2-2.6.5/client/main.c0000664000175000017500000002011112140767214013066 00000000000000/*************************************************************************** main.c - description ------------------- begin : Don Sep 6 12:02:57 CEST 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifdef _WIN32 #include #endif #ifdef __unix__ #include #endif #include "lbreakout.h" #include "../game/game.h" #include "file.h" #include "chart.h" #include "config.h" #include "shrapnells.h" #include "event.h" #include "game.h" #include "manager.h" #include "editor.h" #include "help.h" #include "theme.h" #include "client.h" #include "../gui/gui.h" #include "setselect.h" #define CHART_FILE_NAME "lbreakout2.hscr" extern int stk_quit_request; extern SDL_Surface *stk_display; extern Config config; extern StkFont *font; extern char **theme_names; extern int theme_count; extern SDL_Surface *mbkgnd, *cr_bkgnd; extern char *edit_set; extern char **levelset_names_local; /* non-network levelsets */ extern int gameSeed; /* used to compile net messages */ char msgbuf[MAX_MSG_SIZE]; int msglen = 0; FILE *hi_dir_chart_file = NULL; int main(int argc, char *argv[]) { int result = ACTION_NONE; int leave = 0; char *editor_file = 0; char path[512]; const char *set_name = NULL; SDL_Surface *loading; #ifdef __unix__ gid_t realgid; hi_dir_chart_file = fopen(HI_DIR "/" CHART_FILE_NAME, "r+"); /* This is where we drop our setuid/setgid privileges. */ realgid = getgid(); if (setresgid(-1, realgid, realgid) != 0) { perror("Could not drop setgid privileges. Aborting."); exit(1); } #endif /* i18n */ #ifdef ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); #endif #ifdef _WIN32 /* Get Windows to open files in binary mode instead of default text mode */ _fmode = _O_BINARY; #endif /* lbreakout info */ printf( "LBreakout2 %s\nCopyright 2001-2011 Michael Speck\nPublished under GNU GPL\n---\n", VERSION ); printf( "Looking up data in: %s\n", SRC_DIR ); printf( "Looking up highscores in: %s\n", HI_DIR ); printf( "Looking up custom levels in: %s/%s/lbreakout2-levels\n", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME ); #ifndef AUDIO_ENABLED printf( "Compiled without sound and music\n" ); #endif set_random_seed(); /* set random seed */ config_load(); stk_init( SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK ); if ( config.fullscreen ) stk_display_open( SDL_SWSURFACE | SDL_FULLSCREEN, 640, 480, 16 ); else stk_display_open( SDL_SWSURFACE, 640, 480, 16 ); stk_audio_open( 0,0,0,config.audio_buffer_size ); SDL_WM_SetCaption( "LBreakout2", 0 ); SDL_SetEventFilter( event_filter ); stk_audio_enable_sound( config.sound ); stk_audio_set_sound_volume( config.volume * 16 ); /* load a little loading pic */ stk_surface_set_path( SRC_DIR "/gfx" ); loading = stk_surface_load( SDL_SWSURFACE, "loading.png" ); stk_surface_blit( loading, 0,0,-1,-1, stk_display, (stk_display->w-loading->w)/2, (stk_display->h-loading->h)/2 ); stk_display_update( STK_UPDATE_ALL ); /* load the GUI graphics from SRC_DIR/gui_theme */ stk_surface_set_path( SRC_DIR ); stk_audio_set_path( SRC_DIR ); gui_init( "gui_theme" ); stk_surface_set_path( SRC_DIR "/gfx" ); stk_audio_set_path( SRC_DIR "/sounds" ); /* load resources */ /* for simplicity all functions are kept but anything * that is now themeable is loaded in * theme_load instead of the original function * (deleting resources works analouge) */ theme_get_list(); if ( config.theme_count != theme_count ) { if ( config.theme_id >= theme_count ) config.theme_id = 0; config.theme_count = theme_count; } theme_load( theme_names[config.theme_id] ); /* old functions still with initialzations of * lists or variables */ client_game_create(); hint_load_res(); chart_load(); manager_create(); client_create(); exp_load(); editor_create(); help_create(); setselect_create(); /* run game */ manager_fade( STK_FADE_IN ); while( !leave && !stk_quit_request ) { result = manager_run(); switch( result ) { case ACTION_QUIT: leave = 1; break; case ACTION_RESUME_0: manager_fade( STK_FADE_OUT ); if ( client_game_resume_local( 0 ) ) client_game_run(); client_game_finalize(); manager_fade( STK_FADE_IN ); break; case ACTION_PLAY_LBR: manager_fade( STK_FADE_OUT ); gameSeed = rand(); /* set random seed for next FREAKOUT/BonusLevels */ if ( client_game_init_local( "LBreakout2" ) ) client_game_run(); client_game_finalize(); manager_fade( STK_FADE_IN ); break; case ACTION_PLAY_CUSTOM: /* run select dialog first */ if ((set_name = setselect_run()) == NULL) { manager_show(); break; } manager_fade( STK_FADE_OUT ); gameSeed = rand(); /* set random seed for next FREAKOUT/BonusLevels */ if (gameSeed==0) gameSeed=1; /* not allowed because.... A HACK!!! 0 means to have no bonus levels to save a parameter */ if ( client_game_init_local( set_name ) ) client_game_run(); client_game_finalize(); manager_fade( STK_FADE_IN ); break; case ACTION_EDIT: /* new set? */ if ( strequal( NEW_SET, edit_set ) ) { editor_file = calloc( 16, sizeof( char ) ); snprintf( path, sizeof(path)-1, "%s/%s/lbreakout2-levels", getenv( "HOME" )? getenv("HOME"):".", CONFIG_DIR_NAME ); if ( !enter_string( font, _("Set Name:"), editor_file, 12 ) || !file_check( path, editor_file, "w" ) ) { free( editor_file ); break; } else manager_update_set_list(); } else editor_file = strdup( edit_set ); if ( editor_init( editor_file ) ) { manager_fade( STK_FADE_OUT ); editor_run(); editor_clear(); manager_fade( STK_FADE_IN ); } free( editor_file ); editor_file = 0; break; case ACTION_QUICK_HELP: help_run(); break; case ACTION_CLIENT: manager_fade( STK_FADE_OUT ); client_run(); manager_fade( STK_FADE_IN ); break; default: break; } } manager_fade( STK_FADE_OUT ); /* delete stuff */ setselect_delete(); help_delete(); manager_delete(); chart_save(); chart_delete(); editor_delete(); exp_delete(); client_game_delete(); hint_delete_res(); theme_delete(); theme_delete_list(); stk_surface_free( &loading ); config_save(); if (hi_dir_chart_file) fclose(hi_dir_chart_file); return EXIT_SUCCESS; } lbreakout2-2.6.5/client/client.h0000664000175000017500000000404512140767214013435 00000000000000/*************************************************************************** client.h - description ------------------- begin : Sun Oct 20 12:02:57 CEST 2002 copyright : (C) 2002 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __CLIENT_H #define __CLIENT_H /* ==================================================================== This module provides the client GUI (connect dialogue & chatroom) which is run by calling client_run() ==================================================================== */ /* ==================================================================== Build the GUI and everything nescessary for the client chatroom. client_create() installs client_delete() as exit function. ==================================================================== */ void client_create( void ); /* ==================================================================== Free memory allocated by client_create( void ) ==================================================================== */ void client_delete( void ); /* ==================================================================== Run the connect dialogue & chatroom until user closes the connect dialogue. ==================================================================== */ void client_run( void ); #endif lbreakout2-2.6.5/client/extras.h0000664000175000017500000000334012140767214013462 00000000000000/*************************************************************************** extras.h - description ------------------- begin : Sun Sep 9 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* Play sounds and handle graphical effects. */ void client_handle_collected_extra( Paddle *paddle, int extra_type ); /* move the extras as in extras_update but do not collect them */ void client_extras_update( int ms ); /* ==================================================================== Show, hide extras ==================================================================== */ void extras_hide(); void extras_show_shadow(); void extras_show(); void extras_alphashow( int alpha ); /* ==================================================================== Wall ==================================================================== */ void walls_hide(); void walls_show(); void walls_alphashow( int alpha ); void client_walls_update( int ms ); lbreakout2-2.6.5/client/chart.h0000664000175000017500000001025312140767214013256 00000000000000/*************************************************************************** chart.h - description ------------------- begin : Mon Sep 24 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Highscore chart entry ==================================================================== */ typedef struct { char name[32]; int level; int score; int new_entry; /* newly entered the highscore */ } Chart_Entry; /* ==================================================================== Levelset highscore chart. ==================================================================== */ enum { CHART_ENTRY_COUNT = 10 }; typedef struct { Chart_Entry entries[CHART_ENTRY_COUNT + 1]; /* last entry is space holder for new entry */ char *name; } Set_Chart; /* ==================================================================== Load highscore. If it doesn't exist try to create it in HI_DIR if this fails fall back to ~/.lbreakout and create highscore there. ==================================================================== */ void chart_load(); /* ==================================================================== Delete resources ==================================================================== */ void chart_delete(); /* ==================================================================== Save chart in directory it was loaded from. ==================================================================== */ void chart_save(); /* ==================================================================== Check if this player entered the highscore chart and update it. ==================================================================== */ void chart_add( Set_Chart *chart, char *name, int level, int score ); /* ==================================================================== Sort chart with stable algorithm (bubble sort's ok) by wanted value. ==================================================================== */ enum { SORT_BY_LEVEL = 0, SORT_BY_SCORE }; void chart_sort( Set_Chart *chart, int type ); /* ==================================================================== Draw highscores centered in regio x,y,w,h ==================================================================== */ void chart_show( Set_Chart *chart, int x, int y, int w, int h ); /* ==================================================================== Draw highscores centered in regio x,y,w,h but in a more compact way (no title). Also don't use chart_pos (except for x). ==================================================================== */ void chart_show_compact( Set_Chart *chart, int x, int y, int w, int h ); /* ==================================================================== Clear all new_entry flags (done before new players are added to chart when game over). ==================================================================== */ void chart_clear_new_entries(); /* ==================================================================== Query set chart by this name or if not found create a new one by this name. ==================================================================== */ Set_Chart* chart_set_query( const char *name ); /* ==================================================================== Query chart by id. If id is invalid return 0. ==================================================================== */ Set_Chart* chart_set_query_id( int id ); lbreakout2-2.6.5/client/manager.h0000664000175000017500000000506012140767214013567 00000000000000/*************************************************************************** manager.h - description ------------------- begin : Thu Sep 20 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __MANAGER_H #define __MANAGER_H #include "lbreakout.h" #include "value.h" #include "item.h" #include "menu.h" /* ==================================================================== Actions generated by menu ==================================================================== */ enum { ACTION_NONE = 0, ACTION_QUIT, ACTION_PLAY_LBR, ACTION_PLAY_CUSTOM, ACTION_SHOW_HIGHSCORE, ACTION_EDIT, ACTION_QUICK_HELP, ACTION_CONNECT, ACTION_CLIENT, ACTION_RESUME_0 }; /* ==================================================================== Load/delete background and create and link all menus ==================================================================== */ void manager_create(); void manager_delete(); /* ==================================================================== Run menu until request sent ==================================================================== */ int manager_run(); /* ==================================================================== Fade in/out background of menu ==================================================================== */ void manager_fade( int type ); /* ==================================================================== Update screen without menu itself as this is shown next frame. ==================================================================== */ void manager_show(); /* ==================================================================== Update set list when creating a new file for editor. ==================================================================== */ void manager_update_set_list(); #endif lbreakout2-2.6.5/client/client_data.h0000664000175000017500000001023012140767214014417 00000000000000/*************************************************************************** client_data.h - description ------------------- begin : Sat Oct 26 12:02:57 CEST 2002 copyright : (C) 2002 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __CLIENT_DATA_H #define __CLIENT_DATA_H /* ==================================================================== Client states ==================================================================== */ enum { CLIENT_NONE = 0, /* ingame stats lie in between */ CLIENT_INFO = 1000, /* not open to any challenges/transfers */ CLIENT_AWAIT_ANSWER, /* wait for answer to a challenge */ CLIENT_ANSWER, /* answer to a challenge */ CLIENT_CONFIRM_TRANSFER, /* say yes or no to transfer */ CLIENT_AWAIT_TRANSFER_CONFIRMATION, /* wait for answer on transfer offer */ CLIENT_RECEIVE, /* receive level data */ CLIENT_LISTEN, /* listen to user for a levelset */ CLIENT_SELECT_CHANNEL, /* selecting a channel */ CLIENT_STATS, /* looking at game stats */ CLIENT_PLAY, /* playing game */ CLIENT_HELP /* looking at help */ }; /* ==================================================================== Chatter definitions. ==================================================================== */ enum { CHAT_LINE_COUNT = 200, CHAT_LINE_WIDTH = 64, /* includes \0 */ MAX_CHATTER_SIZE = 100 }; /* ==================================================================== Client data structs ==================================================================== */ typedef struct { int id; char name[16]; } ClientUser; /* transmit via client's socket if client_is_connected is True */ void client_transmit( int type, int len, char *data ); /* ==================================================================== Create/delete client's data structs. ==================================================================== */ void client_data_create( void ); void client_data_delete( void ); /* ==================================================================== Clear all data structs ==================================================================== */ void client_data_clear( void ); /* ==================================================================== Add/remove/find users/games/channels. Do not update the GUI. ==================================================================== */ void client_add_user( int id, char *name ); void client_remove_user( int id ); ClientUser* client_find_user( int id ); /* ==================================================================== Add chatter to chat window. If 'info' is true the text is displayed red and without indention. ==================================================================== */ void client_add_chatter( char *string, int info ); /* ==================================================================== Add chatter to chat window. If 'info' is true the text is displayed red and without indention. ==================================================================== */ void client_printf_chatter( int info, char *format, ... ); /* ==================================================================== Add chatter to pause chat window. If 'info' is true the text is displayed red and without indention. ==================================================================== */ void client_add_pausechatter( char *string, int info ); #endif lbreakout2-2.6.5/client/shine.h0000664000175000017500000000372412140767214013270 00000000000000/*************************************************************************** shine.h - description ------------------- begin : Thu Sep 13 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Load/delete resources ==================================================================== */ void shine_load(); void shine_delete(); /* ==================================================================== Recreate shine on a random but valid brick ==================================================================== */ void shine_create(); /* ==================================================================== Reset (delete( shine ==================================================================== */ void shine_reset(); /* ==================================================================== Show/hide current shine ==================================================================== */ void shine_hide(); void shine_show(); /* ==================================================================== Update shine ==================================================================== */ void shine_update( int ms ); lbreakout2-2.6.5/client/help.c0000664000175000017500000004150212140767214013101 00000000000000/*************************************************************************** help.c - description ------------------- begin : Sat Dec 15 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "config.h" #include "event.h" StkFont *help_caption_font = 0; StkFont *help_font = 0; SDL_Surface *help_bkgnd = 0; int side_count = 4; extern SDL_Surface *stk_display; extern SDL_Surface *extra_pic; extern SDL_Surface *brick_pic; extern int stk_quit_request; extern Config config; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Draw title. ==================================================================== */ void draw_title( ) { help_caption_font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; stk_font_write( help_caption_font, stk_display, stk_display->w / 2, 20, STK_OPAQUE, _("Quick Help") ); } /* ==================================================================== Add footnote. ==================================================================== */ void draw_footnote( int side ) { char buf[256]; help_font->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_BOTTOM; sprintf( buf, "%i / %i", side, side_count ); stk_font_write( help_font, stk_display, stk_display->w - 2, stk_display->h - 2, STK_OPAQUE, buf ); help_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_BOTTOM; sprintf( buf, _(": Quit : Next Page : Previous Page") ); stk_font_write( help_font, stk_display, 2, stk_display->h - 2, STK_OPAQUE, buf ); } /* ==================================================================== Draw bonus info ==================================================================== */ void draw_bonus_info( int x, int y, int id, char *text ) { stk_surface_blit( extra_pic, id * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, x, y ); help_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_CENTER_Y; stk_font_write( help_font, stk_display, x + BRICK_WIDTH + 10, y + BRICK_HEIGHT / 2, STK_OPAQUE, text ); } /* ==================================================================== Draw brick info ==================================================================== */ void draw_brick_info( int x, int y, int id, char *text ) { stk_surface_blit( brick_pic, id * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, x, y ); help_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_CENTER_Y; stk_font_write( help_font, stk_display, x + BRICK_WIDTH + 10, y + BRICK_HEIGHT / 2, STK_OPAQUE, text ); } /* ==================================================================== Draw bonus info screen. ==================================================================== */ void draw_bonus_screen() { int bonus_x = 20, bonus_y = 80, bonus_w = 200, bonus_h = 30; int malus_x = 20, malus_y = 330, malus_w = 200, malus_h = 30; stk_surface_blit( help_bkgnd, 0,0,-1,-1, stk_display, 0,0 ); draw_title(); /* bonuses */ help_caption_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( help_caption_font, stk_display, bonus_x, bonus_y - 30, STK_OPAQUE, _("Bonuses:") ); draw_bonus_info( bonus_x + bonus_w * 0, bonus_y + bonus_h * 0, 8, _("Expand paddle") ); draw_bonus_info( bonus_x + bonus_w * 1, bonus_y + bonus_h * 0, 9, _("Extra life") ); draw_bonus_info( bonus_x + bonus_w * 2, bonus_y + bonus_h * 0, 10, _("Sticky paddle") ); draw_bonus_info( bonus_x + bonus_w * 0, bonus_y + bonus_h * 1, 15, _("Plasma weapon") ); draw_bonus_info( bonus_x + bonus_w * 1, bonus_y + bonus_h * 1, 2, _("200 - 10,000 points extra score") ); draw_bonus_info( bonus_x + bonus_w * 0, bonus_y + bonus_h * 2, 12, _("Extra ball") ); draw_bonus_info( bonus_x + bonus_w * 1, bonus_y + bonus_h * 2, 11, _("Energy balls (penetrate bricks)") ); draw_bonus_info( bonus_x + bonus_w * 0, bonus_y + bonus_h * 3, 13, _("Bonus floor") ); draw_bonus_info( bonus_x + bonus_w * 1, bonus_y + bonus_h * 3, 18, _("Deccelerate balls to minimum speed") ); draw_bonus_info( bonus_x + bonus_w * 0, bonus_y + bonus_h * 4, 6, _("1,000 points extra score from bricks with no bonus") ); draw_bonus_info( bonus_x + bonus_w * 0, bonus_y + bonus_h * 5, 19, _("Instantly collect all bonuses and destroy all penalties") ); draw_bonus_info( bonus_x + bonus_w * 0, bonus_y + bonus_h * 6, 25, _("Explosive balls") ); draw_bonus_info( bonus_x + bonus_w * 1, bonus_y + bonus_h * 6, 26, _("Paddle attracts bonuses") ); /* penalties */ stk_font_write( help_caption_font, stk_display, malus_x, malus_y - 30, STK_OPAQUE, _("Penalties:") ); draw_bonus_info( malus_x + malus_w * 0, malus_y + malus_h * 0, 7, _("Shrink paddle") ); draw_bonus_info( malus_x + malus_w * 0, malus_y + malus_h * 3, 17, _("Accelerate balls") ); draw_bonus_info( malus_x + malus_w * 0, malus_y + malus_h * 1, 14, _("Freeze paddle") ); draw_bonus_info( malus_x + malus_w * 1, malus_y + malus_h * 1, 21, _("Random ball reflection at bricks") ); draw_bonus_info( malus_x + malus_w * 0, malus_y + malus_h * 2, 20, _("Darkness") ); draw_bonus_info( malus_x + malus_w * 1, malus_y + malus_h * 2, 27, _("Paddle attracts penalties") ); draw_bonus_info( malus_x + malus_w * 1, malus_y + malus_h * 0, 22, _("Paddle disappears when not moving") ); draw_bonus_info( malus_x + malus_w * 1, malus_y + malus_h * 3, 28, /* xgettext:no-c-format */ _("40% chance that a ball doesn't damage brick") ); draw_footnote( 1 ); stk_display_update( STK_UPDATE_ALL ); } /* ==================================================================== Draw hint ==================================================================== */ void draw_hint( int x, int y, char *text ) { stk_font_write( help_font, stk_display, x, y, STK_OPAQUE, text ); } /* ==================================================================== Draw hints ==================================================================== */ void draw_hints_screen() { int hint_x = 20, hint_y = 80, hint_h = 20; stk_surface_blit( help_bkgnd, 0,0,-1,-1, stk_display, 0,0 ); draw_title(); help_caption_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( help_caption_font, stk_display, hint_x, hint_y - 40, STK_OPAQUE, _("Hints:") ); draw_hint( hint_x, hint_y + hint_h * 0, _("<<'In Game'-Keys>>") ); draw_hint( hint_x, hint_y + hint_h * 1, _(" p Pause game. (and enter chatroom in network game)") ); draw_hint( hint_x, hint_y + hint_h * 2, _(" s Enable/Disable sound.") ); draw_hint( hint_x, hint_y + hint_h * 3, _(" a Change animation level (off/low/high).") ); draw_hint( hint_x, hint_y + hint_h * 4, _(" f Switch fullscreen/windowed mode.") ); draw_hint( hint_x, hint_y + hint_h * 5, _(" NOTE: Changing resolution takes a while so this is done best") ); draw_hint( hint_x, hint_y + hint_h * 6, _(" when game's paused.") ); draw_hint( hint_x, hint_y + hint_h * 7, _(" r Restart level.") ); draw_hint( hint_x, hint_y + hint_h * 8, _(" d Disintegrate single bricks. (AddOn's only)") ); draw_hint( hint_x, hint_y + hint_h * 9, _(" w Warp to next level after enough bricks where cleared. (AddOn's only)") ); draw_hint( hint_x, hint_y + hint_h * 10, _(" Shift Shows highest score of set instead of your score as long as you") ); draw_hint( hint_x, hint_y + hint_h * 11, _(" hold it down.") ); draw_hint( hint_x, hint_y + hint_h * 12, _(" Tab Take a screenshot.") ); draw_hint( hint_x, hint_y + hint_h * 13, _(" Esc Quit game.") ); draw_hint( hint_x, hint_y + hint_h * 15, _("Pressing the left or right mouse button will fire attached balls either") ); draw_hint( hint_x, hint_y + hint_h * 16, _("to the left or right direction if 'Ball Fire Angle' in 'Advanced Options'") ); draw_hint( hint_x, hint_y + hint_h * 17, _("is not set to 'Random'.") ); draw_footnote( 3 ); stk_display_update( STK_UPDATE_ALL ); } /* ==================================================================== Draw ingame hints ==================================================================== */ void draw_ingame_hints_screen() { int brick_x = 20, brick_y = 210, brick_h = 30; int extra_x = 20, extra_y = 80, extra_h = 30; stk_surface_blit( help_bkgnd, 0,0,-1,-1, stk_display, 0,0 ); draw_title(); help_caption_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( help_caption_font, stk_display, extra_x, extra_y - 30, STK_OPAQUE, _("Neutral Power-Ups:") ); draw_bonus_info( extra_x, extra_y + extra_h * 0, 16, _("Any of the listed bonuses/penalties.") ); draw_bonus_info( extra_x, extra_y + extra_h * 1, 23, _("Resets all active bonuses and penalties.") ); draw_bonus_info( extra_x, extra_y + extra_h * 2, 24, _("Adds 7 seconds to all active bonuses/penalties.") ); help_caption_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( help_caption_font, stk_display, brick_x, brick_y - 30, STK_OPAQUE, _("Special Bricks:") ); draw_brick_info( brick_x, brick_y + brick_h * 0, 0, _("Indestructible.") ); draw_brick_info( brick_x, brick_y + brick_h * 1, 1, _("May only be destroyed by energy ball else it's indestructible.") ); draw_brick_info( brick_x, brick_y + brick_h * 2, 2, _("As above and balls are reflected randomly at this brick.") ); draw_brick_info( brick_x, brick_y + brick_h * 3, 5, _("Needs three hits to be destroyed.") ); draw_brick_info( brick_x, brick_y + brick_h * 4, 9, _("As above and regenerates durability every 4 seconds.") ); draw_brick_info( brick_x, brick_y + brick_h * 5, 18, _("Explodes and destroys all nearby bricks.") ); draw_brick_info( brick_x, brick_y + brick_h * 6, 19, _("Creates up to 8 bricks on destruction.") ); draw_footnote( 2 ); stk_display_update( STK_UPDATE_ALL ); } /* ==================================================================== Draw trouble shooting ==================================================================== */ void draw_trouble( int x, int y, char *text ) { draw_hint( x, y, text ); } void draw_trouble_screen() { int trouble_x = 20, trouble_y = 90, trouble_h = 20; int manual_x = 20, manual_y = 310, manual_h = 20; stk_surface_blit( help_bkgnd, 0,0,-1,-1, stk_display, 0,0 ); draw_title(); help_caption_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( help_caption_font, stk_display, trouble_x, trouble_y - 40, STK_OPAQUE, _("Troubleshooting:") ); draw_trouble( trouble_x, trouble_y + trouble_h * 0, _("* In fullscreen mode the window keeps it size just adding a black frame?") ); draw_trouble( trouble_x, trouble_y + trouble_h * 1, _(" - Maybe you do not have 640x480 as resolution available? Check your") ); draw_trouble( trouble_x, trouble_y + trouble_h * 2, _(" X configuration.") ); draw_trouble( trouble_x, trouble_y + trouble_h * 3, _("* Sounds seem to be out of sync and are played with some delay?") ); draw_trouble( trouble_x, trouble_y + trouble_h * 4, _(" - Set SDL_AUDIODRIVER to dma (export SDL_AUDIODRIVER=dma). If this results") ); draw_trouble( trouble_x, trouble_y + trouble_h * 5, _(" in a lot of errors killing artsd (or esd) may help.") ); draw_trouble( trouble_x, trouble_y + trouble_h * 6, _("* LBreakout2 gets mute while playing when switching on/off sounds?") ); draw_trouble( trouble_x, trouble_y + trouble_h * 7, _(" - SDL_mixer seems to mute active channels. You shouldn't enable/disable") ); draw_trouble( trouble_x, trouble_y + trouble_h * 8, _(" sounds to often as you'll propably loose all channels then.") ); help_caption_font->align = STK_FONT_ALIGN_LEFT | STK_FONT_ALIGN_TOP; stk_font_write( help_caption_font, stk_display, manual_x, manual_y - 40, STK_OPAQUE , _("Manual:")); draw_trouble( manual_x, manual_y + manual_h * 0, _("This is just a quick help with the most important facts about LBreakout2.") ); draw_trouble( manual_x, manual_y + manual_h * 1, _("If you want more and better information check out the manual installed to") ); draw_trouble( manual_x, manual_y + manual_h * 2, _("/usr/doc/lbreakout2 or the online version at http://lgames.sf.net.") ); draw_trouble( manual_x, manual_y + manual_h * 3, _("And if you have questions (not answered by the manual) or you found a bug") ); draw_trouble( manual_x, manual_y + manual_h * 4, _("or you just want to drop a general note about LBreakout2 just mail to:") ); draw_trouble( manual_x, manual_y + manual_h * 5, _(" kulkanie@gmx.net") ); draw_trouble( manual_x, manual_y + manual_h * 6, _(" Enjoy the game!") ); draw_trouble( manual_x, manual_y + manual_h * 6 + 10, _(" Michael Speck") ); draw_footnote( 4 ); stk_display_update( STK_UPDATE_ALL ); } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Load/delete help resources. ==================================================================== */ void help_create() { help_font = stk_font_load( SDL_SWSURFACE, "f_small_yellow.png" ); SDL_SetColorKey( help_font->surface, SDL_SRCCOLORKEY, stk_surface_get_pixel( help_font->surface, 0,0 ) ); help_caption_font = stk_font_load( SDL_SWSURFACE, "f_yellow.png" ); SDL_SetColorKey( help_caption_font->surface, SDL_SRCCOLORKEY, stk_surface_get_pixel( help_caption_font->surface, 0,0 ) ); /* background -- will be filled when running help */ help_bkgnd = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); SDL_SetColorKey( help_bkgnd, 0, 0 ); } void help_delete() { stk_font_free( &help_font ); stk_font_free( &help_caption_font ); stk_surface_free( &help_bkgnd ); } /* ==================================================================== Run help. ==================================================================== */ static void help_draw_side( int side_id ) { switch ( side_id ) { case 0: draw_bonus_screen(); break; case 2: draw_hints_screen(); break; case 1: draw_ingame_hints_screen(); break; case 3: draw_trouble_screen(); break; } } void help_run() { int leave = 0; SDL_Event event; int cur_side = 0; SDL_Surface *buffer = stk_surface_create(SDL_SWSURFACE,stk_display->w, stk_display->h); /* buffer screen */ stk_surface_blit( stk_display, 0,0,-1,-1, buffer, 0,0 ); SDL_SetColorKey(buffer, 0, 0); /* gray screen and use as background */ stk_surface_gray( stk_display, 0,0,-1,-1, 1 ); stk_surface_blit( stk_display, 0,0,-1,-1, help_bkgnd, 0,0 ); draw_bonus_screen(); while ( !leave && !stk_quit_request) { SDL_WaitEvent( &event ); switch ( event.type ) { case SDL_QUIT: stk_quit_request = 1; break; case SDL_KEYDOWN: switch ( event.key.keysym.sym ) { case SDLK_ESCAPE: leave = 1; break; case SDLK_LEFT: case SDLK_RIGHT: if ( event.key.keysym.sym == SDLK_RIGHT ) { cur_side++; if ( cur_side == side_count ) cur_side = 0; } else { cur_side--; if ( cur_side < 0 ) cur_side = side_count - 1; } help_draw_side(cur_side); break; case SDLK_f: config.fullscreen = !config.fullscreen; stk_display_apply_fullscreen( config.fullscreen ); help_draw_side(cur_side); break; default: break; } break; case SDL_MOUSEBUTTONUP: if ( event.button.button == STK_BUTTON_LEFT ) { cur_side++; if ( cur_side == side_count ) cur_side = 0; } else { cur_side--; if ( cur_side < 0 ) cur_side = side_count - 1; } help_draw_side(cur_side); break; default: break; } } /* redraw screen */ stk_surface_blit( buffer, 0,0,-1,-1, stk_display, 0,0 ); stk_display_update( STK_UPDATE_ALL ); SDL_FreeSurface( buffer ); /* reset the relative position so paddle wont jump */ SDL_GetRelativeMouseState(0,0); } lbreakout2-2.6.5/client/shots.c0000664000175000017500000000747512140767214013324 00000000000000/*************************************************************************** shots.c - description ------------------- begin : Sat Sep 8 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "../game/game.h" extern SDL_Surface *shot_pic; extern SDL_Surface *shot_shadow; extern int shot_w, shot_h; extern float shot_v_y; float shot_cur_fr = 0.0; int shot_fr_num = 4; float shot_fpms = 0.01; int shot_alpha = 128; extern SDL_Surface *offscreen; extern SDL_Surface *stk_display; extern SDL_Rect stk_drect; extern int shadow_size; extern Game *game; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Hide and show shots ==================================================================== */ void shots_hide() { ListEntry *entry = game->shots->head->next; Shot *shot; while ( entry != game->shots->tail ) { shot = entry->item; entry = entry->next; stk_surface_blit( offscreen, (int)shot->x,(int)shot->y, shot_w + shadow_size,shot_h + shadow_size, stk_display, (int)shot->x,(int)shot->y ); stk_display_store_rect( &shot->update_rect ); } } void shots_show() { ListEntry *entry = game->shots->head->next; Shot *shot; int x, y; stk_surface_clip( stk_display, 0, 0, stk_display->w - BRICK_WIDTH, stk_display->h ); while ( entry != game->shots->tail ) { shot = entry->item; entry = entry->next; x = (int)shot->x; y = (int)shot->y; stk_surface_alpha_blit( shot_shadow, 0, 0, shot_w, shot_h, stk_display, x + shadow_size, y + shadow_size, SHADOW_ALPHA ); stk_surface_alpha_blit( shot_pic, (int)shot->cur_fr * shot_w, 0, shot_w, shot_h, stk_display, x, y, shot_alpha ); shot->update_rect.x = x; shot->update_rect.y = y; shot->update_rect.w = shot_w + shadow_size; shot->update_rect.h = shot_h + shadow_size; stk_display_store_rect( &shot->update_rect ); } stk_surface_clip( stk_display, 0, 0, 0, 0 ); } void shots_alphashow( int alpha ) { ListEntry *entry = game->shots->head->next; Shot *shot; while ( entry != game->shots->tail ) { shot = entry->item; stk_surface_alpha_blit( shot_pic, (int)shot->cur_fr * shot_w, 0, shot_w, shot_h, stk_display, (int)shot->x, (int)shot->y, alpha ); stk_display_store_rect( &shot->update_rect ); entry = entry->next; } } /* update animation of shots */ void client_shots_update( int ms ) { Shot *shot; shot_cur_fr += ms * shot_fpms; if (shot_cur_fr >= shot_fr_num) shot_cur_fr -= shot_fr_num; list_reset( game->shots ); while ( (shot = list_next(game->shots)) ) shot->cur_fr = shot_cur_fr; /* else there would be no animation as reset the list with each communicator call */ } lbreakout2-2.6.5/client/menu.c0000664000175000017500000003632212140767214013121 00000000000000/*************************************************************************** menu.c - description ------------------- begin : Thu Sep 20 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "manager.h" List *menus = 0; /* list of menus used to delete them later */ extern StkFont *mfont, *mhfont, *mcfont; extern int gap_height; /* gap size between items */ extern Menu *cur_menu; #ifdef AUDIO_ENABLED extern StkSound *wav_menu_motion, *wav_menu_click; #endif /* ==================================================================== Create menu. ==================================================================== */ Menu *menu_create( char *name, int layout, int x, int y, int w, int h, int border, int add_to_list ) { Menu *menu = calloc( 1, sizeof( Menu ) ); /* name */ if ( name ) menu->name = strdup( name ); else menu->name = strdup( "none" ); /* layout */ menu->layout = layout; menu->x = x + border; menu->y = y + border; menu->w = w - border * 2; menu->h = h - border * 2; /* items are cleared normally */ menu->items = list_create( LIST_AUTO_DELETE, item_delete ); /* add menu to list menus */ if ( add_to_list ) list_add( menus, menu ); /* create caption */ if ( name ) { menu_add( menu, item_create_separator( name ) ); ((Item*)menu->items->head->next->item)->font = mcfont; menu_add( menu, item_create_separator( "" ) ); } /* default fonts */ menu->font = mfont; menu->hfont = mhfont; menu->cfont = mcfont; /* return menu */ return menu; } /* ==================================================================== Delete menu and all submenus starting with root menu ==================================================================== */ void menu_delete( void *pmenu ) { Menu *menu = (Menu*)pmenu; if ( !menu ) return; list_delete( menu->items ); if ( menu->name ) free( menu->name ); free( menu ); } /* ==================================================================== Add item to menu. ==================================================================== */ void menu_add( Menu *menu, Item *item ) { list_add( menu->items, item ); if ( item->type == ITEM_LINK && (Menu*)item->link != menu ) ((Menu*)item->link)->parent = menu; } /* ==================================================================== Adjust position and size of all entries according to layout. ==================================================================== */ void menu_adjust( Menu *menu ) { int height, x, y; Item *item; if ( menu->layout == MENU_LAYOUT_CENTERED ) { /* get full height of all items + gaps */ height = menu->items->count * menu->hfont->height + ( menu->items->count - 1 ) * gap_height; /* get positions of items */ y = menu->y + ( menu->h - height ) / 2; x = menu->x; /* set position */ list_reset( menu->items ); while( ( item = list_next( menu->items ) ) ) { item->x = x; item->y = y; item->w = menu->w; item->h = menu->hfont->height; y += gap_height + menu->hfont->height; item_adjust( item ); /* adjust alignment */ } return; } fprintf( stderr, "menu_adjust: layout %i not supported\n", menu->layout ); } /* ==================================================================== Select menu: clear current item and set extern variable cur_menu ==================================================================== */ void menu_select( Menu *menu ) { if ( cur_menu ) menu_unselect_cur_item( cur_menu ); cur_menu = menu; menu->cur_item = 0; hint_set( 0 ); } /* ==================================================================== Show/hide all items ==================================================================== */ void menu_hide( Menu *menu ) { Item *item; list_reset( menu->items ); while ( ( item = list_next( menu->items ) ) ) item_hide( item ); } void menu_show( Menu *menu ) { Item *item; list_reset( menu->items ); while ( ( item = list_next( menu->items ) ) ) item_show( item ); } /* ==================================================================== modify items according to event (if any) ==================================================================== */ int menu_handle_event( Menu *menu, SDL_Event *event ) { int result = ACTION_NONE; Item *item, *old_item; int item_used; int x, y, xoff, yoff; void (*callback)(void); /* if value::grab is set do only except keyup events */ if ( menu->cur_item && menu->cur_item->type == ITEM_KEY && menu->cur_item->value->grab ) { if ( event && event->type == SDL_KEYDOWN ) value_set_key( menu->cur_item->value, event->key.keysym.sym ); return result; } /* if other event occured check */ if ( event ) switch ( event->type ) { case SDL_KEYDOWN: switch ( event->key.keysym.sym ) { case SDLK_ESCAPE: /* if ESCAPE is pressed go up to last menu or leave */ if ( strequal( "Back", ((Item*)menu->items->tail->prev->item)->name ) ) menu_select( ((Item*)menu->items->tail->prev->item)->link ); else if ( strequal( "Quit", ((Item*)menu->items->tail->prev->item)->name ) ) result = ACTION_QUIT; break; case SDLK_RETURN: if ( !menu->cur_item ) break; item_used = 1; /* callback */ callback = menu->cur_item->callback; /* action */ switch ( menu->cur_item->type ) { case ITEM_ACTION: result = menu->cur_item->item_id; break; case ITEM_LINK: menu_select( menu->cur_item->link ); break; case ITEM_KEY: value_grab( menu->cur_item->value ); break; case ITEM_SWITCH: case ITEM_SWITCH_X: case ITEM_RANGE: value_inc( menu->cur_item->value ); break; default: item_used = 0; break; } if ( item_used ) { #ifdef AUDIO_ENABLED stk_sound_play( wav_menu_click ); #endif if ( callback ) (callback)(); } break; case SDLK_RIGHT: if ( !menu->cur_item ) break; item_used = 1; /* callback */ callback = menu->cur_item->callback; /* action */ switch ( menu->cur_item->type ) { case ITEM_SWITCH: case ITEM_SWITCH_X: case ITEM_RANGE: value_inc( menu->cur_item->value ); break; default: item_used = 0; break; } if ( item_used ) { #ifdef AUDIO_ENABLED stk_sound_play( wav_menu_click ); #endif if ( callback ) (callback)(); } break; case SDLK_LEFT: if ( !menu->cur_item ) break; item_used = 1; /* callback */ callback = menu->cur_item->callback; /* action */ switch ( menu->cur_item->type ) { case ITEM_SWITCH: case ITEM_SWITCH_X: case ITEM_RANGE: value_dec( menu->cur_item->value ); break; default: item_used = 0; break; } if ( item_used ) { #ifdef AUDIO_ENABLED stk_sound_play( wav_menu_click ); #endif if ( callback ) (callback)(); } break; case SDLK_UP: menu_up( menu ); hint_set( menu->cur_item->hint ); #ifdef AUDIO_ENABLED stk_sound_play( wav_menu_click ); #endif break; case SDLK_DOWN: menu_down( menu ); hint_set( menu->cur_item->hint ); #ifdef AUDIO_ENABLED stk_sound_play( wav_menu_click ); #endif break; default: /* if type is edit: edit! */ if ( menu->cur_item && menu->cur_item->type == ITEM_EDIT ) { value_edit( menu->cur_item->value, event->key.keysym.sym, event->key.keysym.unicode ); #ifdef AUDIO_ENABLED stk_sound_play( wav_menu_click ); #endif break; } break; } break; case SDL_MOUSEBUTTONUP: if ( !menu->cur_item ) break; item_used = 1; callback = menu->cur_item->callback; switch ( menu->cur_item->type ) { case ITEM_ACTION: result = menu->cur_item->item_id; break; case ITEM_LINK: menu_select( menu->cur_item->link ); break; case ITEM_SWITCH: case ITEM_SWITCH_X: case ITEM_RANGE: if ( event->button.button == STK_BUTTON_LEFT ) value_inc( menu->cur_item->value ); else value_dec( menu->cur_item->value ); break; case ITEM_KEY: value_grab( menu->cur_item->value ); break; default: item_used = 0; break; } if ( item_used ) { #ifdef AUDIO_ENABLED stk_sound_play( wav_menu_click ); #endif if ( callback ) (callback)(); } break; } /* mouse motion is handled directly */ SDL_GetRelativeMouseState( &xoff, &yoff ); if ( xoff != 0 || yoff != 0 ) { SDL_GetMouseState( &x, &y ); /* select item mouse pointer is on */ old_item = menu->cur_item; menu_unselect_cur_item( menu ); list_reset( menu->items ); while( ( item = list_next( menu->items ) ) ) if ( item_focus( item, x, y ) ) { menu_select_item( menu, item ); if ( old_item != menu->cur_item ) { #ifdef AUDIO_ENABLED stk_sound_play( wav_menu_motion ); #endif } break; } if ( menu->cur_item ) hint_set( menu->cur_item->hint ); else hint_set( 0 ); } return result; } /* ==================================================================== Update alpha of items ==================================================================== */ void menu_update( Menu *menu, int ms ) { Item *item; /* update alpha of all items */ list_reset( menu->items ); while ( ( item = list_next( menu->items ) ) ) item_update_alpha( item, ms ); } /* ==================================================================== Select/unselect item: update menu::cur_item und item::highlight ==================================================================== */ void menu_unselect_cur_item( Menu *menu ) { if ( menu->cur_item ) menu->cur_item->highlighted = 0; menu->cur_item = 0; } void menu_select_item( Menu *menu, Item *item ) { menu->cur_item = item; menu->cur_item->highlighted = 1; } /* ==================================================================== Go one valid menu item up or down. ==================================================================== */ void menu_up( Menu *menu ) { ListEntry *entry; Item *item; int valid = 0; /* no selection so far: select first item after caption */ if ( !menu->cur_item ) { menu_select_item( menu, list_get( menu->items, 2 ) ); return; } /* get entry -- MUST exist so don't check */ entry = list_entry( menu->items, menu->cur_item ); /* get next entry */ do { entry = entry->prev; if ( entry == menu->items->head ) entry = menu->items->tail->prev; item = (Item*)entry->item; if ( item->type == ITEM_SEPARATOR ) continue; valid = 1; } while ( !valid ); /* set as current */ menu_unselect_cur_item( menu ); menu_select_item( menu, entry->item ); } void menu_down( Menu *menu ) { ListEntry *entry; Item *item; int valid = 0; /* no selection so far: select first item after caption */ if ( !menu->cur_item ) { menu_select_item( menu, list_get( menu->items, 2 ) ); return; } /* get entry -- MUST exist so don't check */ entry = list_entry( menu->items, menu->cur_item ); /* get next entry */ do { entry = entry->next; if ( entry == menu->items->tail ) entry = menu->items->head->next; item = (Item*)entry->item; if ( item->type == ITEM_SEPARATOR ) continue; valid = 1; } while ( !valid ); /* set as current */ menu_unselect_cur_item( menu ); menu_select_item( menu, entry->item ); } /* ==================================================================== Set fonts of menu and items. ==================================================================== */ void menu_set_fonts( Menu *menu, StkFont *cfont, StkFont *font, StkFont *hfont ) { Item *item; menu->cfont = cfont; menu->font = font; menu->hfont = hfont; list_reset( menu->items ); while ( ( item = list_next( menu->items ) ) ) { item->font = font; item->hfont = hfont; } } /* ==================================================================== Set background of menu and items. ==================================================================== */ void menu_set_bkgnd( Menu *menu, SDL_Surface *bkgnd ) { Item *item; list_reset( menu->items ); while ( ( item = list_next( menu->items ) ) ) item->bkgnd = bkgnd; } lbreakout2-2.6.5/client/value.h0000664000175000017500000001150712140767214013274 00000000000000/*************************************************************************** value.h - description ------------------- begin : Thu Sep 20 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __VALUE_H #define __VALUE_H /* ==================================================================== Value contained and handled by item. ==================================================================== */ enum { VALUE_NONE = 0, /* no value: separator */ VALUE_RANGE_INT, /* range of integers */ VALUE_RANGE_STR, /* range of strings: min == 0, max == count, step == 1 */ VALUE_KEY, /* single key value */ VALUE_EDIT /* editable string */ }; typedef struct _Value { int type; /* type of value */ int min, max, step; /* integer range of value */ int *val_int; /* value as integer (position in range or key value) */ char *val_str; /* value as string (either name or converted val_int) --duplicated except for VALUE_EDIT */ char **names; /* if set val_int is associated to the indexed name and val_str is set to this name instead of the converted integer value --duplicated */ int name_count; /* number of names */ int *filter; /* key filter (size: SDLK_LAST) --duplicated */ List *other_keys; /* list of other key values for VALUE_KEY: these are restricted, too */ int grab; /* if type is VALUE_KEY and this is set all events except QUIT and KEYUP are ignored */ } Value; /* ==================================================================== Auxiliary functions to setup a key filter. ==================================================================== */ void filter_clear( int *filter ); void filter_set( int *filter, int first, int last, int allowed ); /* ==================================================================== Create a value. names and filter are duplicated and freed by value_delete(). Return Value: value ==================================================================== */ Value *value_create_empty(); Value *value_create_range_int( int *val_int, int min, int max, int step ); Value *value_create_range_str( int *val_int, char **names, int count ); Value *value_create_key( int *val_int, int *filter ); Value *value_create_edit( char *val_str, int limit ); /* ==================================================================== Delete a value ==================================================================== */ void value_delete( Value *value ); /* ==================================================================== Increase, decrease if range. ==================================================================== */ void value_dec( Value *value ); void value_inc( Value *value ); /* ==================================================================== Grab input of VALUE_KEY ==================================================================== */ void value_grab( Value *value ); /* ==================================================================== Set key value if VALUE_KEY and clear grab flag ==================================================================== */ void value_set_key( Value *value, int val_int ); /* ==================================================================== Edit string if VALUE_EDIT ==================================================================== */ void value_edit( Value *value, int code, int unicode ); /* ==================================================================== Add another dynamically restricted key (as VALUE_KEY) to other_key list. ==================================================================== */ void value_add_other_key( Value *value, Value *other_key ); /* ==================================================================== Set a new name list (and update position) for VALUE_RANGE_STR. ==================================================================== */ void value_set_new_names( Value *value, char **names, int count ); #endif lbreakout2-2.6.5/client/shine.c0000664000175000017500000000751312140767214013263 00000000000000/*************************************************************************** shine.c - description ------------------- begin : Thu Sep 13 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "config.h" extern SDL_Surface *stk_display; extern Config config; extern SDL_Surface *offscreen; extern SDL_Surface *shine_pic; extern Game *game; float shine_change = 0.020; /* per ms */ int shine_frame = 6; /* maximum frame */ float shine_cur = 0; /* current frame */ int shine_x, shine_y; /* position where current shine is drawn */ int shine_recreate = 1; Delay shine_delay; /* delay between shines */ /* ==================================================================== Load/delete resources ==================================================================== */ void shine_load() { delay_set( &shine_delay, 200 ); } void shine_delete() { } /* ==================================================================== Recreate shine on a random but valid brick ==================================================================== */ void shine_create() { int x_add, y_add, x, y; shine_cur = 0; shine_x = 0; shine_y = 0; if ( !config.anim ) return; x = (rand() % (BRICK_WIDTH - 2)) + 1; y = (rand() % (BRICK_HEIGHT - 2)) + 1; x_add = rand() % 2 == 0 ? 1 : -1; y_add = rand() % 2 == 0 ? 1 : -1; while (x > 0 && x < MAP_WIDTH - 1 && y > 0 && y < MAP_HEIGHT - 1) { if (game->bricks[x][y].type != MAP_EMPTY && game->bricks[x][y].id != INVIS_BRICK_ID ) { shine_x = x * BRICK_WIDTH; shine_y = y * BRICK_HEIGHT; break; } x += x_add; y += y_add; } /* if creation succeeded don't create any more shines */ if ( shine_x != 0 && shine_y != 0 ) shine_recreate = 0; } /* ==================================================================== Reset (delete( shine ==================================================================== */ void shine_reset() { shine_x = shine_y = 0; shine_recreate = 1; delay_reset( &shine_delay ); } /* ==================================================================== Show/hide current shine ==================================================================== */ void shine_hide() { if (shine_x == 0 && shine_y == 0) return; stk_surface_blit( offscreen, shine_x, shine_y, BRICK_WIDTH, BRICK_HEIGHT, stk_display, shine_x, shine_y ); stk_display_store_drect(); } void shine_show() { if (shine_x == 0 && shine_y == 0) return; stk_surface_blit( shine_pic, (int)shine_cur * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, shine_x, shine_y ); } /* ==================================================================== Update shine ==================================================================== */ void shine_update( int ms ) { /* recreate shine? */ if ( shine_recreate ) { shine_x = shine_y = 0; /* if recreation is demanded delete old shine */ if ( delay_timed_out( &shine_delay, ms ) ) shine_create(); } else { shine_cur += shine_change * ms; if (shine_cur > shine_frame) { shine_recreate = 1; delay_reset( &shine_delay ); } } } lbreakout2-2.6.5/client/balls.h0000664000175000017500000000250412140767214013252 00000000000000/*************************************************************************** balls.h - description ------------------- begin : Sun Sep 9 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Show/hide all balls ==================================================================== */ void balls_hide(); void balls_show_shadow(); void balls_show(); void balls_alphashow( int alpha ); /* update energy ball animation */ void client_balls_update( int ms ); lbreakout2-2.6.5/client/player.h0000664000175000017500000000537612140767214013463 00000000000000/*************************************************************************** player.h - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* ==================================================================== Add this player to the list and increase the counter until MAX_PLAYERS is reached. Return Value: True if successful ==================================================================== */ int player_add( char *name, int lives, Level *level ); /* ==================================================================== Get first player. (and set current id to 0) Return Value: first player in list ==================================================================== */ Player* players_get_first(); /* ==================================================================== Get next player in list (cycle: return first player after last player, update current id). Return Value: current player ==================================================================== */ Player* players_get_next(); /* ==================================================================== player_count players give id's 0,1,...,player_count-1. Select the player with id 'current' as current player. The id used is the absolute one, not the relative one resulting from dead players. Return Value: current player ==================================================================== */ Player* players_set_current( int current ); /* ==================================================================== Reset player counter. ==================================================================== */ void players_clear(); /* ==================================================================== Return number of players still in game (lives > 0) ==================================================================== */ int players_count(); /* set level_id and init snapshot with the new leveldata */ void player_init_level( Player *player, Level *level, int id ); lbreakout2-2.6.5/client/player.c0000664000175000017500000000731612140767214013452 00000000000000/*************************************************************************** player.c - description ------------------- begin : Thu Sep 6 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../client/lbreakout.h" #include "../game/levels.h" #include "player.h" int current_player = 0; int player_count = 0; Player players[MAX_PLAYERS]; /* ==================================================================== Add this player to the list and increase the counter until MAX_PLAYERS is reached. Return Value: True if successful ==================================================================== */ int player_add( char *name, int lives, Level *level ) { if ( player_count == MAX_PLAYERS ) return 0; memset( &players[player_count], 0, sizeof( Player ) ); strcpy( players[player_count].name, name ); players[player_count].lives = lives; player_init_level( &players[player_count], level, 0 ); player_count++; return 1; } /* ==================================================================== Get first player. Return Value: first player in list ==================================================================== */ Player* players_get_first() { current_player = -1; return players_get_next(); } /* ==================================================================== Get next player in list (cycle: return first player after last player). Return Value: current player ==================================================================== */ Player* players_get_next() { if ( players_count() == 0 ) return 0; do { current_player++; if ( current_player == player_count ) current_player = 0; } while ( players[current_player].lives == 0 ); return &players[current_player]; } /* ==================================================================== player_count players give id's 0,1,...,player_count-1. Select the player with id 'current' as current player. The id used is the absolute one, not the relative one resulting from dead players. Return Value: current player ==================================================================== */ Player* players_set_current( int current ) { if ( current < 0 || current >= player_count ) return 0; current_player = current; return &players[current_player]; } /* ==================================================================== Reset player counter. ==================================================================== */ void players_clear() { player_count = 0; } /* ==================================================================== Return number of players still in game (lives > 0) ==================================================================== */ int players_count() { int i; int count = 0; for ( i = 0; i < player_count; i++ ) if ( players[i].lives > 0 ) count++; return count; } /* set level_id and init snapshot with the new leveldata */ void player_init_level( Player *player, Level *level, int id ) { player->level_id = id; player->snapshot = *level; } lbreakout2-2.6.5/client/extras.c0000664000175000017500000004655312610467566013503 00000000000000/*************************************************************************** extras.c - description ------------------- begin : Sun Sep 9 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "lbreakout.h" #include "../game/game.h" #include "bricks.h" #include "shrapnells.h" #include "player.h" #include "paddle.h" #include "frame.h" extern Player *cur_player; extern SDL_Surface *stk_display; extern SDL_Rect stk_drect; extern SDL_Surface *offscreen; extern SDL_Surface *bkgnd; /* background + frame */ extern SDL_Surface *offscreen_backup; extern int ball_w, ball_dia; extern SDL_Surface *brick_pic; extern Brick bricks[MAP_WIDTH][MAP_HEIGHT]; extern SDL_Surface *extra_pic; /* graphics */ extern SDL_Surface *extra_shadow; extern SDL_Surface *paddle_pic, *weapon_pic; extern SDL_Surface *ball_pic; extern SDL_Surface *shot_pic; extern StkFont *display_font; extern SDL_Surface *wall_pic; extern int shadow_size; #ifdef AUDIO_ENABLED extern StkSound *wav_score, *wav_metal, *wav_std, *wav_wall, *wav_joker; extern StkSound *wav_goldshower, *wav_life_up; extern StkSound *wav_speedup, *wav_speeddown; extern StkSound *wav_chaos, *wav_darkness, *wav_ghost; extern StkSound *wav_timeadd, *wav_expl_ball, *wav_weak_ball; extern StkSound *wav_bonus_magnet, *wav_malus_magnet, *wav_disable; extern StkSound *wav_attach; /* handled by balls.c */ extern StkSound *wav_expand, *wav_shrink, *wav_frozen; #endif extern Game *game; /* client game context */ extern int paddle_ch; extern int ball_pic_x_offset; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Public ==================================================================== */ /* Play sounds and handle graphical effects. */ void client_handle_collected_extra( Paddle *paddle, int extra_type ) { int i, j; int tm = game->diff->time_mod; /* time modifier */ #ifdef AUDIO_ENABLED int px = paddle->x+(paddle->w>>1); #endif Extra *ex; switch (extra_type) { case EX_JOKER: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_joker ); #endif list_reset( game->extras ); while ( ( ex = list_next( game->extras ) ) ) { stk_display_store_rect( &ex->update_rect ); list_delete_current( game->extras ); } break; case EX_SCORE200: case EX_SCORE500: case EX_SCORE1000: case EX_SCORE2000: case EX_SCORE5000: case EX_SCORE10000: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_score ); #endif break; case EX_GOLDSHOWER: paddle->extra_time[EX_GOLDSHOWER] += TIME_GOLDSHOWER * tm; paddle->extra_active[EX_GOLDSHOWER] = 1; #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_goldshower ); #endif break; case EX_LIFE: if ( game->game_type == GT_LOCAL ) { if ( paddle->player->lives < game->diff->max_lives ) { paddle->player->lives++; frame_add_life(); } } break; case EX_SHORTEN: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_shrink ); #endif paddle_init_resize( paddle, -1); break; case EX_LENGTHEN: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_expand ); #endif paddle_init_resize( paddle, 1); break; case EX_BALL: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_std ); #endif break; case EX_WALL: paddle->extra_time[EX_WALL] += TIME_WALL * tm; if ( paddle->extra_active[EX_WALL] ) { #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_std ); #endif break; } paddle->extra_active[extra_type] = 1; paddle->wall_alpha = 0; #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_wall ); #endif break; case EX_METAL: game->extra_time[EX_METAL] += TIME_METAL * tm; game->extra_active[extra_type] = 1; ball_pic_x_offset = ball_w; #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_metal ); #endif /* other ball extras are disabled */ if ( game->extra_active[EX_EXPL_BALL] ) { game->extra_active[EX_EXPL_BALL] = 0; game->extra_time[EX_EXPL_BALL] = 0; } if ( game->extra_active[EX_WEAK_BALL] ) { game->extra_active[EX_WEAK_BALL] = 0; game->extra_time[EX_WEAK_BALL] = 0; } break; case EX_FROZEN: paddle->extra_time[EX_FROZEN] = TIME_FROZEN * tm; paddle->extra_active[extra_type] = 1; paddle->pic_y_offset = paddle_ch*2; paddle->frozen = 1; /* the server sided paddle is blocked so does the same with the local copy */ #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_frozen ); #endif break; case EX_WEAPON: paddle->extra_time[EX_WEAPON] += TIME_WEAPON * tm; paddle->extra_active[extra_type] = 1; weapon_install( paddle, 1 ); #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_std ); #endif break; case EX_SLIME: paddle->extra_time[EX_SLIME] += TIME_SLIME * tm; paddle->extra_active[extra_type] = 1; if ( !paddle->frozen ) paddle->pic_y_offset = paddle_ch; #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_attach ); #endif break; case EX_FAST: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_speedup ); #endif if ( game->extra_active[EX_SLOW] ) { game->extra_time[EX_SLOW] = 0; game->extra_active[EX_SLOW] = 0; } game->extra_time[EX_FAST] += TIME_FAST * tm; game->extra_active[extra_type] = 1; break; case EX_SLOW: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_speeddown ); #endif if ( game->extra_active[EX_FAST] ) { game->extra_time[EX_FAST] = 0; game->extra_active[EX_FAST] = 0; } game->extra_time[EX_SLOW] += TIME_SLOW * tm; game->extra_active[extra_type] = 1; break; case EX_CHAOS: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_chaos ); #endif game->extra_time[EX_CHAOS] += TIME_CHAOS * tm; game->extra_active[extra_type] = 1; break; case EX_DARKNESS: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_darkness ); #endif game->extra_time[EX_DARKNESS] += TIME_DARKNESS * tm; if ( game->extra_active[EX_DARKNESS] ) break; /* backup offscreen and turn it black */ stk_surface_fill( offscreen, 0,0,-1,-1, 0x0 ); stk_surface_fill( stk_display, 0,0,-1,-1, 0x0 ); stk_display_store_rect( 0 ); /* set alpha keys to 128 */ SDL_SetAlpha( paddle_pic, SDL_SRCALPHA, 128 ); SDL_SetAlpha( weapon_pic, SDL_SRCALPHA, 128 ); SDL_SetAlpha( extra_pic, SDL_SRCALPHA, 128 ); SDL_SetAlpha( ball_pic, SDL_SRCALPHA, 128 ); SDL_SetAlpha( shot_pic, SDL_SRCALPHA, 128 ); SDL_SetAlpha( display_font->surface, SDL_SRCALPHA, 128 ); /* use dark explosions */ exps_set_dark( 1 ); game->extra_active[extra_type] = 1; break; case EX_GHOST_PADDLE: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_ghost ); #endif paddle->extra_time[EX_GHOST_PADDLE] += TIME_GHOST_PADDLE * tm; paddle->extra_active[extra_type] = 1; paddle_set_invis( paddle, 1 ); break; case EX_TIME_ADD: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_timeadd ); #endif for ( i = 0; i < EX_NUMBER; i++ ) if ( game->extra_time[i] ) game->extra_time[i] += 7000 * tm; for ( i = 0; i < EX_NUMBER; i++ ) { for ( j = 0; j < game->paddle_count; j++ ) if ( game->paddles[j]->extra_time[i] ) game->paddles[j]->extra_time[i] += 7000 * tm; } break; case EX_EXPL_BALL: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_expl_ball ); #endif ball_pic_x_offset = ball_w*2; game->extra_time[EX_EXPL_BALL] += TIME_EXPL_BALL * tm; game->extra_active[extra_type] = 1; /* other ball extras are disabled */ if ( game->extra_active[EX_METAL] ) { game->extra_active[EX_METAL] = 0; game->extra_time[EX_METAL] = 0; } if ( game->extra_active[EX_WEAK_BALL] ) { game->extra_active[EX_WEAK_BALL] = 0; game->extra_time[EX_WEAK_BALL] = 0; } break; case EX_WEAK_BALL: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_weak_ball ); #endif ball_pic_x_offset = ball_w*3; game->extra_time[EX_WEAK_BALL] += TIME_WEAK_BALL * tm; game->extra_active[extra_type] = 1; /* other ball extras are disabled */ if ( game->extra_active[EX_METAL] ) { game->extra_active[EX_METAL] = 0; game->extra_time[EX_METAL] = 0; } if ( game->extra_active[EX_EXPL_BALL] ) { game->extra_active[EX_EXPL_BALL] = 0; game->extra_time[EX_EXPL_BALL] = 0; } break; case EX_BONUS_MAGNET: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_bonus_magnet ); #endif paddle_set_attract( paddle, ATTRACT_BONUS ); paddle->extra_time[EX_BONUS_MAGNET] += TIME_BONUS_MAGNET * tm; paddle->extra_active[extra_type] = 1; if ( paddle->extra_active[EX_MALUS_MAGNET] ) { paddle->extra_active[EX_MALUS_MAGNET] = 0; paddle->extra_time[EX_MALUS_MAGNET] = 0; } break; case EX_MALUS_MAGNET: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_malus_magnet ); #endif paddle_set_attract( paddle, ATTRACT_MALUS ); paddle->extra_time[EX_MALUS_MAGNET] += TIME_MALUS_MAGNET * tm; paddle->extra_active[extra_type] = 1; if ( paddle->extra_active[EX_BONUS_MAGNET] ) { paddle->extra_active[EX_BONUS_MAGNET] = 0; paddle->extra_time[EX_BONUS_MAGNET] = 0; } break; case EX_DISABLE: #ifdef AUDIO_ENABLED stk_sound_play_x( px, wav_disable ); #endif /* set all active extra times to 1 so they will expire next prog cycle */ for ( i = 0; i < EX_NUMBER; i++ ) if ( game->extra_time[i] ) game->extra_time[i] = 1; for ( i = 0; i < EX_NUMBER; i++ ) { for ( j = 0; j < game->paddle_count; j++ ) if ( game->paddles[j]->extra_time[i] ) game->paddles[j]->extra_time[i] = 1; } break; } } /* ==================================================================== Show, hide extras ==================================================================== */ void extras_hide() { ListEntry *entry = game->extras->head->next; Extra *ex; while ( entry != game->extras->tail ) { ex = entry->item; entry = entry->next; stk_surface_blit( offscreen, (int)ex->x, (int)ex->y, BRICK_WIDTH + shadow_size, BRICK_HEIGHT + shadow_size, stk_display, (int)ex->x, (int)ex->y ); ex->update_rect = stk_drect; stk_display_store_rect( &ex->update_rect ); } } void extras_show_shadow() { ListEntry *entry = game->extras->head->next; Extra *extra; while ( entry != game->extras->tail ) { extra = entry->item; stk_surface_clip( stk_display, 0,0, stk_display->w - BRICK_WIDTH, stk_display->h ); stk_surface_alpha_blit( extra_shadow, extra->type * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, (int)extra->x + shadow_size, (int)extra->y + shadow_size, ((int)extra->alpha)>>1 ); stk_surface_clip( stk_display, 0,0,-1,-1 ); entry = entry->next; } } void extras_show() { ListEntry *entry = game->extras->head->next; Extra *ex; int x, y; while ( entry != game->extras->tail ) { ex = entry->item; entry = entry->next; x = (int)ex->x; y = (int)ex->y; stk_surface_alpha_blit( extra_pic, ex->offset, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, x, y, ex->alpha ); #if 0 if ( x < ex->update_rect.x ) { /* movement to left */ ex->update_rect.w += ex->update_rect.x - x; ex->update_rect.x = x; } else /* movement to right */ ex->update_rect.w += x - ex->update_rect.x; if ( ex->dir == -1 ) { /* movement up */ ex->update_rect.h += ex->update_rect.y - y; ex->update_rect.y = y; if ( ex->update_rect.y < 0 ) { ex->update_rect.h += ex->update_rect.y; ex->update_rect.y = 0; } } else { /* movement down */ ex->update_rect.h += y - ex->update_rect.y; if ( ex->update_rect.y + ex->update_rect.h >= stk_display->h ) ex->update_rect.h = stk_display->h - ex->update_rect.y; } stk_display_store_rect( &ex->update_rect ); #endif ex->update_rect.x = x; ex->update_rect.y = y; ex->update_rect.w = BRICK_WIDTH + shadow_size; ex->update_rect.h = BRICK_HEIGHT + shadow_size; stk_display_store_rect( &ex->update_rect ); } } void extras_alphashow( int alpha ) { ListEntry *entry = game->extras->head->next; Extra *ex; int x, y; while ( entry != game->extras->tail ) { ex = entry->item; x = (int)ex->x; y = (int)ex->y; stk_surface_alpha_blit( extra_pic, ex->type * BRICK_WIDTH, 0, BRICK_WIDTH, BRICK_HEIGHT, stk_display, x, y, alpha ); stk_display_store_rect( &ex->update_rect ); entry = entry->next; } } /* move the extras as in extras_update but do not collect them */ void client_extras_update( int ms ) { Extra *ex; int i, j; int magnets; Paddle *magnet; /* check extra_time of limited extras */ /* general extras */ for ( i = 0; i < EX_NUMBER; i++ ) if ( game->extra_time[i] ) { if ( (game->extra_time[i] -= ms) <= 0 ) { game->extra_time[i] = 0; /* expired */ switch ( i ) { case EX_EXPL_BALL: case EX_WEAK_BALL: case EX_METAL: ball_pic_x_offset = 0; break; case EX_DARKNESS: /* restore offscreen */ stk_surface_blit( bkgnd, 0,0,-1,-1, offscreen, 0,0 ); bricks_draw(); if ( game->game_type == GT_LOCAL ) frame_draw_lives( cur_player->lives, game->diff->max_lives ); /* back to screen */ stk_surface_blit( offscreen, 0,0,-1,-1, stk_display, 0,0 ); stk_display_store_rect( 0 ); /* set alpha keys to OPAQUE */ SDL_SetAlpha( paddle_pic, 0,0 ); SDL_SetAlpha( extra_pic, 0,0 ); SDL_SetAlpha( ball_pic, 0,0 ); SDL_SetAlpha( shot_pic, 0,0 ); SDL_SetAlpha( display_font->surface, 0,0 ); /* use bright explosions */ exps_set_dark( 0 ); break; } /* set deactivated */ game->extra_active[i] = 0; } } /* paddlized extras */ for ( j = 0; j < game->paddle_count; j++ ) for ( i = 0; i < EX_NUMBER; i++ ) /* extra_time of wall is updated in client_walls_update() */ if ( game->paddles[j]->extra_time[i] && i != EX_WALL ) if ( (game->paddles[j]->extra_time[i] -= ms) <= 0 ) { game->paddles[j]->extra_time[i] = 0; /* expired */ switch ( i ) { case EX_FROZEN: case EX_SLIME: if ( game->paddles[j]->extra_time[EX_SLIME] > 0 ) game->paddles[j]->pic_y_offset = paddle_ch; else game->paddles[j]->pic_y_offset = 0; game->paddles[j]->frozen = 0; break; case EX_WEAPON: weapon_install( game->paddles[j], 0 ); break; case EX_GHOST_PADDLE: paddle_set_invis( game->paddles[j], 0 ); break; case EX_BONUS_MAGNET: case EX_MALUS_MAGNET: paddle_set_attract( game->paddles[j], ATTRACT_NONE ); break; } /* set deactivated */ game->paddles[j]->extra_active[i] = 0; /* wall is handled in wall_...() */ } /* move extras and check if paddle was hit */ list_reset( game->extras ); while ( ( ex = list_next( game->extras ) ) ) { /* if only one paddle has a magnet active all extras will * be attracted by this paddle else the extras 'dir' is used */ magnets = 0; magnet = 0; for ( i = 0; i < game->paddle_count; i++ ) if ( paddle_check_attract( game->paddles[i], ex->type ) ) { magnets++; magnet = game->paddles[i]; /* last magnet */ } if ( magnets != 1 ) { /* either no or more than one magnet so use default */ if ( ex->dir > 0 ) ex->y += 0.05 * ms; else ex->y -= 0.05 * ms; } else { /* 'magnet' is the paddle that will attract this extra */ if ( magnet->type == PADDLE_TOP ) ex->y -= 0.05 * ms; else ex->y += 0.05 * ms; if ( ex->x + ( BRICK_WIDTH >> 1 ) < magnet->x + ( magnet->w >> 1 ) ) { ex->x += 0.05 * ms; if ( ex->x + ( BRICK_WIDTH >> 1 ) > magnet->x + ( magnet->w >> 1 ) ) ex->x = magnet->x + ( magnet->w >> 1 ) - ( BRICK_WIDTH >> 1 ); } else { ex->x -= 0.05 * ms; if ( ex->x + ( BRICK_WIDTH >> 1 ) < magnet->x + ( magnet->w >> 1 ) ) ex->x = magnet->x + ( magnet->w >> 1 ) - ( BRICK_WIDTH >> 1 ); } } if ( !game->extra_active[EX_DARKNESS] ) { if ( ex->alpha < 255 ) { ex->alpha += 0.25 * ms; if (ex->alpha > 255) ex->alpha = 255; } } else { if ( ex->alpha < 128 ) { ex->alpha += 0.25 * ms; if (ex->alpha > 128) ex->alpha = 128; } } /* if out of screen forget this extra */ if ( ex->y >= stk_display->h || ex->y + BRICK_HEIGHT < 0 ) { stk_display_store_rect( &ex->update_rect ); list_delete_current( game->extras ); continue; } for ( j = 0; j < game->paddle_count; j++ ) { /* contact with paddle core ? */ if ( paddle_solid( game->paddles[j] ) ) if ( ex->x + BRICK_WIDTH > game->paddles[j]->x ) if ( ex->x < game->paddles[j]->x + game->paddles[j]->w - 1 ) if ( ex->y + BRICK_HEIGHT > game->paddles[j]->y ) if ( ex->y < game->paddles[j]->y + game->paddles[j]->h ) { /* remove extra but don't handle it */ stk_display_store_rect( &ex->update_rect ); list_delete_current( game->extras ); } } } } /* wall */ void walls_hide() { int j; for ( j = 0; j < game->paddle_count; j++ ) if ( game->paddles[j]->extra_active[EX_WALL] ) { stk_surface_blit( offscreen, BRICK_WIDTH, game->paddles[j]->wall_y, wall_pic->w, wall_pic->h, stk_display, BRICK_WIDTH, game->paddles[j]->wall_y ); stk_display_store_drect(); } } void walls_show() { int j; for ( j = 0; j < game->paddle_count; j++ ) if ( game->paddles[j]->extra_active[EX_WALL] ) stk_surface_alpha_blit( wall_pic, 0,0, wall_pic->w, wall_pic->h, stk_display, BRICK_WIDTH, game->paddles[j]->wall_y, (int)game->paddles[j]->wall_alpha ); } void walls_alphashow( int alpha ) { int j; for ( j = 0; j < game->paddle_count; j++ ) if ( game->paddles[j]->extra_active[EX_WALL] ) stk_surface_alpha_blit( wall_pic, 0,0, wall_pic->w, wall_pic->h, stk_display, BRICK_WIDTH, game->paddles[j]->wall_y, alpha ); } void client_walls_update( int ms ) { int j; for ( j = 0; j < game->paddle_count; j++ ) if ( game->paddles[j]->extra_active[EX_WALL] ) { if ( game->paddles[j]->extra_time[EX_WALL] > 0 ) { if ( (game->paddles[j]->extra_time[EX_WALL] -= ms) < 0 ) game->paddles[j]->extra_time[EX_WALL] = 0; /* still appearing? */ if (game->paddles[j]->wall_alpha < 255) if ( (game->paddles[j]->wall_alpha += 0.25 * ms) > 255 ) game->paddles[j]->wall_alpha = 255; } else if ( (game->paddles[j]->wall_alpha -= 0.25 * ms) < 0 ) { game->paddles[j]->wall_alpha = 0; game->paddles[j]->extra_active[EX_WALL] = 0; } } } lbreakout2-2.6.5/client/theme.c0000664000175000017500000006337212140767214013264 00000000000000/*************************************************************************** theme.c - description ------------------- begin : Fri Feb 15 2002 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include #include #include #include "lbreakout.h" #include "config.h" #include "theme.h" extern SDL_Surface *stk_display; extern Config config; extern int ball_w, ball_h; extern int shot_w, shot_h; extern int paddle_cw; /* theme name list */ char **theme_names = 0; int theme_count = 0; /* current theme name */ char theme_name[32] = "Default"; /* ==================================================================== Themeable gfx and sounds. ==================================================================== */ SDL_Surface *exp_pic = 0; SDL_Surface *exp_dark_pic = 0; StkFont *font = 0; StkFont *chat_font_normal = 0; StkFont *chat_font_error = 0; StkFont *chat_font_name = 0; #ifdef AUDIO_ENABLED StkSound *wav_click = 0; StkSound *wav_damn = 0, *wav_dammit = 0, *wav_wontgiveup = 0, *wav_excellent = 0, *wav_verygood = 0; #endif SDL_Surface *brick_pic = 0; SDL_Surface *brick_shadow = 0; #ifdef AUDIO_ENABLED StkSound *wav_boom = 0; #endif SDL_Surface *paddle_pic = 0; SDL_Surface *paddle_shadow = 0; SDL_Surface *weapon_pic = 0; SDL_Surface *weapon_shadow = 0; SDL_Surface *ammo_pic = 0; #ifdef AUDIO_ENABLED StkSound *wav_expand = 0, *wav_shrink = 0, *wav_frozen = 0; #endif SDL_Surface *ball_pic = 0; /* ball pictures */ SDL_Surface *ball_shadow = 0; #ifdef AUDIO_ENABLED StkSound *wav_reflect_brick = 0; StkSound *wav_reflect_paddle = 0; StkSound *wav_attach = 0; #endif SDL_Surface *shot_pic = 0; SDL_Surface *shot_shadow = 0; #ifdef AUDIO_ENABLED StkSound *wav_shot = 0; #endif SDL_Surface *extra_pic = 0; /* graphics */ SDL_Surface *extra_shadow = 0; SDL_Surface *wall_pic = 0; #ifdef AUDIO_ENABLED StkSound *wav_score = 0, *wav_metal = 0, *wav_std = 0, *wav_wall = 0, *wav_joker = 0; StkSound *wav_goldshower = 0; StkSound *wav_speedup = 0, *wav_speeddown = 0; StkSound *wav_chaos = 0, *wav_darkness = 0, *wav_ghost = 0; StkSound *wav_timeadd = 0, *wav_expl_ball = 0, *wav_weak_ball = 0; StkSound *wav_bonus_magnet = 0, *wav_malus_magnet = 0, *wav_disable = 0; #endif SDL_Surface *shine_pic = 0; SDL_Surface *frame_left = 0, *frame_top = 0, *frame_right = 0; SDL_Surface *frame_left_shadow = 0, *frame_top_shadow = 0, *frame_right_shadow = 0; SDL_Surface *frame_mp_left = 0, *frame_mp_right = 0; /* multiplayer variants */ SDL_Surface *frame_mp_left_shadow = 0, *frame_mp_right_shadow = 0; SDL_Surface *lamps = 0; /* life lamps */ StkFont *display_font; StkFont *display_highlight_font; #ifdef AUDIO_ENABLED StkSound *wav_life_up = 0, *wav_life_down = 0; #endif SDL_Surface **bkgnds = 0; int bkgnd_count = 0; SDL_Surface *nuke_bkgnd = 0; /* special background for nuke mode */ /* chatroom */ SDL_Surface *cr_up = 0, *cr_down = 0, *cr_track = 0, *cr_wallpaper = 0; /* frame box */ SDL_Surface *fr_hori = 0, *fr_vert = 0, *fr_luc = 0, *fr_llc = 0, *fr_ruc = 0, *fr_rlc = 0; /* menu manager */ StkFont *mfont = 0, *mhfont = 0, *mcfont = 0; /* font, highlight font, caption font */ SDL_Surface *mbkgnd = 0; /* menu background */ #ifdef AUDIO_ENABLED StkSound *wav_menu_click = 0; StkSound *wav_menu_motion = 0; #endif /* charts */ StkFont *cfont = 0, *chfont = 0, *ccfont = 0; /* normal, highlight and caption font */ /* warp icon (indicates you can now go to next level) */ SDL_Surface *warp_pic = 0; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Build the theme directory from passed name. The resources are then loaded from this directory and the full file name is saved to theme_path. ==================================================================== */ static char theme_dir[512]; static char theme_path[512]; void theme_set_dir( char *name ) { if ( name[0] == '~' ) snprintf( theme_dir, sizeof(theme_dir)-1, "%s/%s/lbreakout2-themes/%s", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME, name + 1 ); else { if ( STRCMP( SRC_DIR, "." ) ) { getcwd( theme_dir, 511 ); strcat( theme_dir, "/gfx/" ); strcat( theme_dir, name ); } else snprintf( theme_dir, sizeof(theme_dir)-1, "%s/gfx/%s", SRC_DIR, name ); } } /* ==================================================================== Load a picture or sound from theme directory or (if not found) from original source directory. ==================================================================== */ SDL_Surface* theme_load_surf( char *name ) { struct stat filestat; SDL_Surface *surf = 0; sprintf( theme_path, "%s/%s", theme_dir, name ); if ( stat( theme_path, &filestat ) == -1 || ( surf = stk_surface_load( SDL_SWSURFACE | SDL_NONFATAL, theme_path ) ) == 0 ) surf = stk_surface_load( SDL_SWSURFACE, name ); return surf; } #ifdef AUDIO_ENABLED StkSound* theme_load_sound( char *name ) { struct stat filestat; StkSound *sound = 0; sprintf( theme_path, "%s/%s", theme_dir, name ); if ( stat( theme_path, &filestat ) == -1 || ( sound = stk_sound_load( -1, theme_path ) ) == 0 ) sound = stk_sound_load( -1, name ); return sound; } #endif StkFont* theme_load_font_fixed( char *name, int start, int len, int width ) { struct stat filestat; StkFont *font = 0; sprintf( theme_path, "%s/%s", theme_dir, name ); if ( stat( theme_path, &filestat ) == -1 || ( font = stk_font_load( SDL_SWSURFACE | SDL_NONFATAL, theme_path ) ) == 0 ) font = stk_font_load( SDL_SWSURFACE, name ); if ( font ) SDL_SetColorKey( font->surface, SDL_SRCCOLORKEY, stk_surface_get_pixel( font->surface, 0,0 ) ); return font; } /* ==================================================================== The frame is a bit complex to be done. ==================================================================== */ void theme_load_frame() { Uint32 ckey; /* load resources */ frame_left = theme_load_surf( "fr_left.png" ); frame_top = theme_load_surf( "fr_top.png" ); frame_right = theme_load_surf( "fr_right.png" ); /* get colorkey */ ckey = stk_surface_get_pixel( frame_right, frame_right->w - 1, 0 ); SDL_SetColorKey( frame_left, SDL_SRCCOLORKEY, ckey ); SDL_SetColorKey( frame_top, SDL_SRCCOLORKEY, ckey ); SDL_SetColorKey( frame_right, SDL_SRCCOLORKEY, ckey ); /* build shadows */ frame_left_shadow = create_shadow( frame_left, 0, 0, frame_left->w, frame_left->h ); frame_top_shadow = create_shadow( frame_top, 0, 0, frame_top->w, frame_top->h ); frame_right_shadow = create_shadow( frame_right, 0, 0, frame_right->w, frame_right->h ); /* build the columns for multiplayer */ frame_mp_left = theme_load_surf( "fr_mp_left.png" ); frame_mp_right = theme_load_surf( "fr_mp_right.png" ); SDL_SetColorKey( frame_mp_left, SDL_SRCCOLORKEY, ckey ); SDL_SetColorKey( frame_mp_right, SDL_SRCCOLORKEY, ckey ); frame_mp_left_shadow = create_shadow( frame_mp_left, 0, 0, frame_mp_left->w, frame_mp_left->h ); frame_mp_right_shadow = create_shadow( frame_mp_right, 0, 0, frame_mp_right->w, frame_mp_right->h ); /* load other resources */ lamps = theme_load_surf( "life.png" ); display_font = theme_load_font_fixed( "f_frame.png", 32, 96, 8 ); display_font->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_CENTER_Y; display_highlight_font = theme_load_font_fixed( "f_small_white.png", 32, 96, 8 ); display_highlight_font->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_CENTER_Y; /* waves */ #ifdef AUDIO_ENABLED wav_life_up = theme_load_sound( "gainlife.wav" ); wav_life_down = theme_load_sound( "looselife.wav" ); #endif } /* ==================================================================== Load backgrounds. If no background was found use the original backgrounds. Else count the number of new backgrounds and use these. ==================================================================== */ void theme_load_bkgnds() { int i; struct stat filestat; sprintf( theme_path, "%s/back0.png", theme_dir ); if ( stat( theme_path, &filestat ) == -1 ) { /* use original backs */ bkgnds = calloc( ORIG_BACK_COUNT, sizeof( SDL_Surface* ) ); for ( i = 0; i < ORIG_BACK_COUNT; i++ ) { sprintf( theme_path, "back%i.png", i ); bkgnds[i] = stk_surface_load( SDL_SWSURFACE, theme_path ); } bkgnd_count = ORIG_BACK_COUNT; } else { /* use new backs */ bkgnd_count = -1; do { bkgnd_count++; sprintf( theme_path, "%s/back%i.png", theme_dir, bkgnd_count ); } while ( stat( theme_path, &filestat ) == 0 ); bkgnds = calloc( bkgnd_count, sizeof( SDL_Surface* ) ); /* load backs */ for ( i = 0; i < bkgnd_count; i++ ) { sprintf( theme_path, "%s/back%i.png", theme_dir, i ); bkgnds[i] = stk_surface_load( SDL_SWSURFACE, theme_path ); } } for ( i = 0; i < bkgnd_count; i++ ) SDL_SetColorKey( bkgnds[i], 0, 0x0 ); } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== Get/delete names of all themes found in themes directory. ==================================================================== */ void theme_get_list() { int i; int default_theme_count = 4; char *default_theme_names[] = { "AbsoluteB", "Oz", "Moiree", "Classic" }; char name[64]; char dir[256]; DIR *hdir = 0; struct dirent *entry = 0; struct stat estat; List *list = 0; /* auxilary list */ list = list_create( LIST_NO_AUTO_DELETE, LIST_NO_CALLBACK ); /* install theme directory */ snprintf( dir, sizeof(dir) - 1, "%s/gfx", SRC_DIR ); if ( ( hdir = opendir( dir ) ) != 0 ) { while ( ( entry = readdir( hdir ) ) ) { if ( entry->d_name[0] == '.' ) continue; /* full path */ sprintf( theme_path, "%s/%s", dir, entry->d_name ); stat( theme_path, &estat ); if ( S_ISDIR( estat.st_mode ) ) { /* ignore entry if it is a default theme */ for ( i = 0; i < default_theme_count; i++ ) if ( STRCMP( default_theme_names[i], entry->d_name ) ) { i = -1; break; } if ( i == -1 ) continue; /* store it otherwise */ sprintf( name, "%s", entry->d_name ); list_add( list, strdup( name ) ); } } closedir( hdir ); } /* home theme directory */ snprintf( dir, sizeof(dir)-1, "%s/%s/lbreakout2-themes", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME ); if ( ( hdir = opendir( dir ) ) != 0 ) { while ( ( entry = readdir( hdir ) ) ) { if ( entry->d_name[0] == '.' ) continue; /* full path */ sprintf( theme_path, "%s/%s", dir, entry->d_name ); stat( theme_path, &estat ); if ( S_ISDIR( estat.st_mode ) ) { sprintf( name, "~%s", entry->d_name ); list_add( list, strdup( name ) ); } } closedir( hdir ); } /* create static list. the default themes are the first four entries in the order at the beginning of this function. */ theme_count = list->count + default_theme_count; theme_names = calloc( theme_count, sizeof( char* ) ); for ( i = 0; i < default_theme_count; i++ ) theme_names[i] = strdup( default_theme_names[i] ); for ( i = 0; i < list->count; i++ ) { theme_names[i + default_theme_count] = list_get( list, i ); } list_delete( list ); /* if config's theme count is not equal reset the theme_id to 0 */ if ( theme_count != config.theme_count ) { config.theme_count = theme_count; config.theme_id = 0; } } void theme_delete_list() { int i; if ( theme_names ) { for ( i = 0; i < theme_count; i++ ) if ( theme_names[i] ) free( theme_names[i] ); free( theme_names ); theme_names = 0; } } /* ==================================================================== Load theme by name or delete current theme (is done by load too so it might be used to change a theme as well.) ==================================================================== */ void theme_load( char *name ) { SDL_Surface *surf; struct stat filestat; char aux[128]; int i; printf( "Loading theme '%s'\n", name ); /* clear resources */ theme_delete(); /* set theme directory */ theme_set_dir( name ); /* load resources */ /* explosions */ exp_pic = theme_load_surf( "explosions.png" ); exp_dark_pic = theme_load_surf( "explosions_dark.png" ); /* main game font */ font = theme_load_font_fixed( "f_game.png", 32, 96, 10 ); font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_CENTER_Y; /* normal chat font (messages by server) */ chat_font_normal = theme_load_font_fixed( "f_small_yellow.png", 32, 96, 8 ); /* error font (messages by server) */ chat_font_error = theme_load_font_fixed( "f_small_red.png", 32, 96, 8 ); /* username font (also for server) */ chat_font_name = theme_load_font_fixed( "f_small_white.png", 32, 96, 8 ); /* main game sounds */ #ifdef AUDIO_ENABLED wav_click = theme_load_sound( "click.wav" ); wav_damn = theme_load_sound( "damn.wav" ); wav_dammit = theme_load_sound( "dammit.wav" ); wav_wontgiveup = theme_load_sound( "wontgiveup.wav" ); wav_excellent = theme_load_sound( "excellent.wav" ); wav_verygood = theme_load_sound( "verygood.wav" ); #endif /* brick pics and shadow template */ brick_pic = theme_load_surf( "bricks.png" ); /* default color key is: BLACK but you may specify a special key by adding a column of one pixel width at the end of the file */ if ( brick_pic->w & 1 ) SDL_SetColorKey( brick_pic, SDL_SRCCOLORKEY, stk_surface_get_pixel( brick_pic, brick_pic->w - 1, 0 ) ); brick_shadow = create_shadow( brick_pic, 0, 0, brick_pic->w, brick_pic->h ); /* brick destruction sound */ #ifdef AUDIO_ENABLED wav_boom = theme_load_sound( "exp.wav" ); #endif /* paddle and weapon */ paddle_pic = theme_load_surf( "paddle.png" ); SDL_SetColorKey( paddle_pic, SDL_SRCCOLORKEY, stk_surface_get_pixel( paddle_pic, 0, 0 ) ); if ( paddle_pic->w < 6 * paddle_cw ) { /* no top paddle specified so duplicate first one */ surf = stk_surface_create( SDL_SWSURFACE, paddle_pic->w*2, paddle_pic->h ); SDL_SetColorKey( surf, SDL_SRCCOLORKEY, paddle_pic->format->colorkey ); SDL_FillRect( surf, 0, paddle_pic->format->colorkey ); stk_surface_blit( paddle_pic, 0,0,-1,-1, surf, 0,0 ); stk_surface_blit( paddle_pic, 0,0,-1,-1, surf, paddle_pic->w,0 ); stk_surface_free( &paddle_pic ); paddle_pic = surf; } weapon_pic = theme_load_surf( "weapon.png" ); paddle_shadow = create_shadow( paddle_pic, 0, 0, paddle_pic->w, paddle_pic->h ); weapon_shadow = create_shadow( weapon_pic, 0, 0, weapon_pic->w, weapon_pic->h ); ammo_pic = theme_load_surf( "ammo.png" ); SDL_SetColorKey( ammo_pic, SDL_SRCCOLORKEY, 0x0 ); /* paddle sounds */ #ifdef AUDIO_ENABLED wav_expand = theme_load_sound( "expand.wav" ); wav_shrink = theme_load_sound( "shrink.wav" ); wav_frozen = theme_load_sound( "freeze.wav" ); #endif /* ball gfx */ ball_pic = theme_load_surf( "ball.png" ); SDL_SetColorKey( ball_pic, SDL_SRCCOLORKEY, stk_surface_get_pixel( ball_pic, 0, 0 ) ); ball_shadow = create_shadow( ball_pic, 0, 0, ball_w, ball_h ); /* ball sounds */ #ifdef AUDIO_ENABLED wav_reflect_brick = theme_load_sound( "reflect_brick.wav" ); wav_reflect_paddle = theme_load_sound( "reflect_paddle.wav" ); wav_attach = theme_load_sound( "attach.wav" ); #endif /* shot gfx */ shot_pic = theme_load_surf( "shot.png" ); shot_shadow = create_shadow( shot_pic, 0, 0, shot_w, shot_h ); #ifdef AUDIO_ENABLED wav_shot = theme_load_sound( "shot.wav" ); #endif /* extra pic */ extra_pic = theme_load_surf( "extras.png" ); SDL_SetColorKey( extra_pic, 0, 0 ); /* default color key is: disabled but you may specify a special key by adding a column of one pixel width at the end of the file */ if ( extra_pic->w & 1 ) SDL_SetColorKey( extra_pic, SDL_SRCCOLORKEY, stk_surface_get_pixel( extra_pic, extra_pic->w - 1, 0 ) ); extra_shadow = create_shadow( extra_pic, 0, 0, extra_pic->w, extra_pic->h ); /* extra sounds */ #ifdef AUDIO_ENABLED wav_score = theme_load_sound( "score.wav" ); wav_metal = theme_load_sound( "metal.wav" ); wav_speedup = theme_load_sound( "speedup.wav" ); wav_speeddown = theme_load_sound( "speeddown.wav" ); wav_std = theme_load_sound( "standard.wav" ); wav_wall = theme_load_sound( "wall.wav" ); wav_joker = theme_load_sound( "joker.wav" ); wav_goldshower = theme_load_sound( "goldshower.wav" ); wav_chaos = theme_load_sound( "chaos.wav" ); wav_darkness = theme_load_sound( "darkness.wav" ); wav_ghost = theme_load_sound( "ghost.wav" ); wav_timeadd = theme_load_sound( "timeadd.wav" ); wav_expl_ball = theme_load_sound( "expl_ball.wav" ); wav_weak_ball = theme_load_sound( "weak_ball.wav" ); wav_bonus_magnet = theme_load_sound( "bonus_magnet.wav" ); wav_malus_magnet = theme_load_sound( "malus_magnet.wav" ); wav_disable = theme_load_sound( "disable.wav" ); #endif /* shine pic */ shine_pic = theme_load_surf( "shine.png" ); /* chatroom */ cr_up = theme_load_surf( "scroll_up.png" ); cr_down = theme_load_surf( "scroll_down.png" ); cr_track = theme_load_surf( "scroll_track.png" ); cr_wallpaper = theme_load_surf( "cr_back.png" ); SDL_SetColorKey( cr_wallpaper, 0,0 ); /* frame box */ fr_hori = theme_load_surf( "fr_hori.png" ); fr_vert = theme_load_surf( "fr_vert.png" ); fr_luc = theme_load_surf( "fr_luc.png" ); fr_llc = theme_load_surf( "fr_llc.png" ); fr_ruc = theme_load_surf( "fr_ruc.png" ); fr_rlc = theme_load_surf( "fr_rlc.png" ); /* frame */ theme_load_frame(); /* wall */ sprintf( theme_path, "%s/floor.png", theme_dir ); if ( stat( theme_path, &filestat ) == -1 ) { /* build default floor */ wall_pic = stk_surface_create( SDL_SWSURFACE, stk_display->w - 2 * BRICK_WIDTH, BRICK_HEIGHT ); /* bricks must have been loaded at this point! */ for ( i = 0; i < MAP_WIDTH - 2; i++ ) stk_surface_blit( brick_pic, 0, 0, BRICK_WIDTH, BRICK_HEIGHT, wall_pic, i * BRICK_WIDTH, 0 ); } else { /* load floor */ wall_pic = theme_load_surf( "floor.png" ); } /* backgrounds */ theme_load_bkgnds(); /* build nuke bkgnd */ nuke_bkgnd = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); surf = stk_surface_load( SDL_SWSURFACE, "nukeback.png" ); stk_surface_apply_wallpaper( nuke_bkgnd, 0,0,-1,-1, surf, 128 ); stk_surface_free( &surf ); stk_surface_gray( nuke_bkgnd, 0,0,-1,-1, 0 ); /* manager */ mbkgnd = theme_load_surf( "menuback.png" ); SDL_SetColorKey( mbkgnd, 0, 0 ); mfont = theme_load_font_fixed( "f_small_yellow.png", 32, 96, 8 ); mhfont = theme_load_font_fixed( "f_white.png", 32, 96, 10 ); mcfont = theme_load_font_fixed( "f_yellow.png", 32, 96, 10 ); #ifdef AUDIO_ENABLED wav_menu_click = theme_load_sound( "menu_click.wav" ); wav_menu_motion = theme_load_sound( "menu_motion.wav" ); #endif /* add version to background */ mfont->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_BOTTOM; sprintf( aux, "v%s", VERSION ); stk_font_write( mfont, mbkgnd, mbkgnd->w - 4, stk_display->h - 4 - mfont->height, STK_OPAQUE, aux ); stk_font_write( mfont, mbkgnd, mbkgnd->w - 4, stk_display->h - 4, STK_OPAQUE, "http://lgames.sf.net" ); /* charts */ /* load resources */ cfont = theme_load_font_fixed( "f_small_yellow.png", 32, 96, 8 ); chfont = theme_load_font_fixed( "f_small_white.png", 32, 96, 8 ); ccfont = theme_load_font_fixed( "f_yellow.png", 32, 96, 10 ); /* warp picture */ warp_pic = theme_load_surf( "warp.png" ); } void theme_delete() { int i; stk_surface_free( &exp_pic ); stk_surface_free( &exp_dark_pic ); stk_font_free( &font ); stk_font_free( &chat_font_normal ); stk_font_free( &chat_font_error ); stk_font_free( &chat_font_name ); #ifdef AUDIO_ENABLED stk_sound_free( &wav_click ); stk_sound_free( &wav_damn ); stk_sound_free( &wav_dammit ); stk_sound_free( &wav_wontgiveup ); stk_sound_free( &wav_excellent ); stk_sound_free( &wav_verygood ); #endif stk_surface_free( &brick_pic ); stk_surface_free( &brick_shadow ); #ifdef AUDIO_ENABLED stk_sound_free( &wav_boom ); #endif stk_surface_free( &paddle_pic ); stk_surface_free( &weapon_pic ); stk_surface_free( &ammo_pic ); stk_surface_free( &paddle_shadow ); stk_surface_free( &weapon_shadow ); #ifdef AUDIO_ENABLED stk_sound_free( &wav_expand ); stk_sound_free( &wav_shrink ); stk_sound_free( &wav_frozen ); #endif stk_surface_free( &ball_pic ); stk_surface_free( &ball_shadow ); #ifdef AUDIO_ENABLED stk_sound_free( &wav_reflect_paddle ); stk_sound_free( &wav_reflect_brick ); stk_sound_free( &wav_attach ); #endif stk_surface_free( &shot_pic ); stk_surface_free( &shot_shadow ); #ifdef AUDIO_ENABLED stk_sound_free( &wav_shot ); #endif stk_surface_free( &extra_pic ); stk_surface_free( &extra_shadow ); stk_surface_free( &wall_pic ); #ifdef AUDIO_ENABLED stk_sound_free( &wav_score ); stk_sound_free( &wav_metal ); stk_sound_free( &wav_speedup ); stk_sound_free( &wav_speeddown ); stk_sound_free( &wav_std ); stk_sound_free( &wav_wall ); stk_sound_free( &wav_joker ); stk_sound_free( &wav_goldshower ); stk_sound_free( &wav_chaos ); stk_sound_free( &wav_darkness ); stk_sound_free( &wav_ghost ); stk_sound_free( &wav_timeadd ); stk_sound_free( &wav_expl_ball ); stk_sound_free( &wav_weak_ball ); stk_sound_free( &wav_bonus_magnet ); stk_sound_free( &wav_malus_magnet ); stk_sound_free( &wav_disable ); #endif stk_surface_free( &shine_pic ); stk_surface_free( &frame_left ); stk_surface_free( &frame_right ); stk_surface_free( &frame_top ); stk_surface_free( &frame_left_shadow ); stk_surface_free( &frame_right_shadow ); stk_surface_free( &frame_top_shadow ); stk_surface_free( &lamps ); stk_font_free( &display_font ); stk_font_free( &display_highlight_font ); #ifdef AUDIO_ENABLED stk_sound_free( &wav_life_up ); stk_sound_free( &wav_life_down ); #endif if ( bkgnds ) { for ( i = 0; i < bkgnd_count; i++ ) stk_surface_free( &bkgnds[i] ); free( bkgnds ); bkgnds = 0; bkgnd_count = 0; } stk_surface_free( &nuke_bkgnd ); /* chatroom */ stk_surface_free( &cr_up ); stk_surface_free( &cr_down ); stk_surface_free( &cr_track ); stk_surface_free( &cr_wallpaper ); /* frame box */ stk_surface_free( &fr_vert ); stk_surface_free( &fr_hori ); stk_surface_free( &fr_luc ); stk_surface_free( &fr_llc ); stk_surface_free( &fr_ruc ); stk_surface_free( &fr_rlc ); /* manager */ stk_surface_free( &mbkgnd ); stk_font_free( &mfont ); stk_font_free( &mhfont ); stk_font_free( &mcfont ); #ifdef AUDIO_ENABLED stk_sound_free( &wav_menu_click ); stk_sound_free( &wav_menu_motion ); #endif /* charts */ stk_font_free( &cfont ); stk_font_free( &chfont ); stk_font_free( &ccfont ); /* warp picture */ stk_surface_free( &warp_pic ); } /* ==================================================================== Check if there is a file ABOUT in the theme directory and return it's contents up to limit characters. If this file isn't found 'NO INFO' is set. ==================================================================== */ void theme_get_info( char *theme_name, char *text, int limit ) { FILE *file = 0; int i, count; theme_set_dir( theme_name ); sprintf( theme_path, "%s/ABOUT", theme_dir ); if ( ( file = fopen( theme_path, "rb" ) ) ) { count = fread( text, 1, limit, file ); fclose( file ); text[(count>=0)?count:0] = 0; for ( i = 0; i < strlen( text ); i++ ) if ( text[i] == 10 ) text[i] = '#'; /* remove empty lines */ for ( i = strlen( text ) - 1; i >= 0; i++ ) if ( text[i] == '#' && i > 0 && text[i-1] == '#' ) text[i] = 0; else break; } else strcpy_lt( text, _("NO INFO AVAILABLE"), limit ); } lbreakout2-2.6.5/README0000664000175000017500000002436212140767214011414 00000000000000 LBreakout2 a breakout-style arcade game for Linux by Michael Speck ******************** I. Requirements II. Installation III. Network Server IV. Documentation V. Troubleshooting VI. Localization VII. Resources VIII. Feedback ******************** ******************** I. Requirements ******************** LBreakout runs in X and uses SDL (any version though >= 1.1.4 is recommended), SDL_mixer (optional for sound) and SDL_net (optional for networking on non-Unices). These libraries can be found at http://libsdl.org. The graphical stuff requires PNG which is usually included in a distro. If not check out http://www.libpng.org/pub/png/libpng.html. ******************** II. Installation ******************** Enter your favorite shell and type in the following stuff (in the directory you extracted the LBreakout source) > ./configure [--disable-audio] [--disable-install] [--enable-warp] [--with-docdir=DOCDIR] [--disable-network] [--enable-sdl-net] [--localstatedir=HIDIR] --disable-audio: no sound --disable-install: no installation; play from source directory --enable-warp: nescessary for non-Unices to use relative mouse motion for inverting or modify mouse speed --with-docdir: install documentation to $DOCDIR/lbreakout2 DEFAULT: /usr/doc --disable-network: compile LBreakout2 without any network support --enable-sdl-net: use SDL_net for networking (required if platform is not Unix-like) --localstatedir: install global highscores to this directory REPLACES --with-highscore-path TO COMPLY WITH AUTOCONF; THE DEFAULT LOCATION NOW DEPENDS ON YOUR DISTRIBUTION: PREVIOUSLY IT WAS /var/lib/games. USE --localstatedir=/var/lib/games FOR EXISTING HIGHSCORES. > make > su (become root) > make install (if install wasn't disabled) > exit (become user again) > lbreakout2 (run client/non-network game) Note: Swearing is disabled in version >= 2.6. To enable it you have to edit ~/.lgames/lbreakout2.conf manually and set the hidden option badspeech to 1. If you cannot find the option start and quit LBreakout2 once. Building on Win32 ----------------- There might be an easier way to get things to work but at least the following worked for me. Simplifications are welcome. 1) Get MinGW, Msys, MsysDTK from http://mingw.sf.net The following uses michael as the Msys home directory, naturally you'll have to substitute your windows user name for this. 2) Get SDL, SDL_mixer, SDL_net from http://libsdl.org as tar.gz's and put them to c:\msys\1.0\home\michael (or whereever you installed Msys to) 3) Get libpng and zlib from http://libpng.org and put them to the same directory as above. 4) Same with the latest and greatest LBreakout2 package, which you already have, I assume. :) 5) Start Msys and enter the commands tar -xzf *.tar.gz (extract the above archives) cd SDL-1.2.7; (your version might differ, of course) configure; make; make install; cd .. [do the same with SDL_net, SDL_mixer, zlib] ln -s libpng-1.2.5 libpng (your version might differ, of course) ln -s zlib-1.1.3 zlib (your version might differ, of course) cd libpng-1.2.5 cp scripts/makefile.gcc Makefile; make cp png.h pngconf.h /usr/local/include cp libpng.a /usr/local/lib (manual install as the linux makefile caused problems) cd .. cd lbreakout2-2.5 export LDFLAGS="-L/usr/local/lib" export CFLAGS="-I/usr/local/include" echo '' > depcomp (why this is required is again a mystery to me) configure --disable-install --enable-sdl-net win32_mancomp (this is a hack required for unknown reasons here. make works but it just states the gcc commands but does not execute them, in this little script they work however, dunno why... a fix for this would be most welcome. if you change any configure or install settings the hardcoded compile command in win32_mancomp will probably not work so you should check it for such a case) make 6) Get the dll's of SDL, SDL_mixer, SDL_net, libpng, zlib and put them to c:\msys\1.0\home\michael\lbreakout2-2.5\win32dlls as well as msvcrt.dll (freely available from Microsoft) 7) run win32_preparchive (this will copy all required files to the directory lbreakout2) 8) copy c:\msys\1.0\home\michael\lbreakout2-2.5\lbreakout2 to c:\games or whereever you want to and run the game from there. NOTE: The server does not open any display and in windows a message overwrites all old messages in stdout.txt. Also the command line options do not work, at least it seems so. All I managed was to run the server without any options but at least I could connect to it successfully. Lee Read added some scripting to create a standalone installer. This scripting is broken right now, but hopefully fixed soon. Building on OS/2 ---------------- On OS/2 GCC creates windowed console apps by default. There are various solutions, see http://www.edm2.com/index.php/SDL#General_tips_and_tricks or run 'emxbind -e -p lbreakout2.exe' after building. - Dave Yeo ******************** III. Network Server ******************** To run a server start lbreakout2server with any of the following options: -p server port (default 2002) -l maximum number of users that may connect to the server (default is 30) -i a user will be kicked if he didn't communicate with the server for this amount of seconds (default is 1200) -n this message is displayed to welcome a user -a a user that logs in with this name will become administrator named admin (default is no admin) -b number of bots with strength 800 and 1000 (paddle speed in pixels, default is none) After that you'll have to query your IP (e.g. with /sbin/ifconfig) and pass it to your friends as there is no permanent internet server yet. Note, that you shouldn't use localhost as you won't be able to challenge others then. Check the online documentation at http://lgames.sf.net for information on how to play. When updating this README the last time, petersdtp.net:8000 has been the current internet test server. ******************** IV. Documentation ******************** If you have any questions about options, game play or editor please check the documentation and see if you can find an answer there. I will not respond to any eMails concerning questions easily answered by the manual (/usr/doc/lbreakout2). However, if you have any other problems or suggestions or you found a bug please contact me: kulkanie@gmx.net ******************** V. Troubleshooting ******************** The solution for relative mouse motion (nescessary when inverting or slowing down mouse by motion modifier) works fine for Linux and Win32 but fails for other non-Unices. Current solution is to warp the mouse (by using configure option --enable-warp). Unfortunately, this will handicap events when trying to fire weapon or release balls AND move the paddle at the same time. This means it may happen that a weapon is not fired or doesn't stop fire, balls keep being attached and so on... --- Disabling sound while playing seems to result in loosing various sound channels when some sounds were actually mixed. --- Someone reported that he had problems with PNG (configure script didn't find it) if it was installed to /usr/local/lib. Setting a link in /usr/lib fixes this. --- If you have SDL_mixer installed but configure tells you that it can't find it, remember that you have to install the development package for compiling! --- If you can't compile because LBreakout2' timestamps are slightly in the future run 'touchall' (found in the configure directory). --- If 'fullscreen' just adds a black frame around the game but does not change the solution make sure that you have 640x480 available as resolution in your Xconfig. --- If the SDL sound seems to be out of sync first try to modify the audio buffer size in ~/.lgames/lbreakout2.conf. If this fails set SDL_AUDIODRIVER to dma (export SDL_AUDIODRIVER=dma). ******************** VI. Localization ******************** This game now supports i18n. If you want to add l10n for your native language, please contact me first, to prevent overlapping translations. A thorough documentation can be found at http://www.gnu.org/software/gettext/manual/html_mono/gettext.html Basically, you will have to do the following: 1) cd po 2) add your language code (e.g., de for German) to the existing line in LINGUAS merely separated from the other languages by a blank 3) run `msginit -o .po` with replaced by your language code 4) translate the english message IDs in .po 5) run make .gmo Whenever you change something in your translation you'll have to repeat step 5). I strongly recommend to configure the program with --disable-install while working on a translation. Otherwise you'd have to copy and rename the .gmo file as root every time you want to see your changes. If the source has been compiled without installation, only step 5) and simply running the game is required. (Of course, the enviroment variable LANG must be set to your locale.) This should suffice. If not, please read the excellent documentation at gnu.org. The fonts do only contain the basic latin letters. No special letters (like the german umlauts or any accents for example) are supported, so a l10n should not use them. If a string has a single %, meant as a percent sign, you'll have to manually remove the 'format' comment above the id (if any). ******************** VII. Resources ******************** Some graphics and sounds has been taken and modified from other non-copyrighted resources: Backgrounds: http://www.grsites.com/textures Sounds: "Web Clip Empire 50.000", NovaMedia Verlag, Germany Thanks to all of these guys for there free stuff! ******************** VIII. Feedback ******************** LGames URL: http://www.lgames.sf.net e-Mail: kulkanie@gmx.net lbreakout2-2.6.5/server/0000777000175000017500000000000012610471363012114 500000000000000lbreakout2-2.6.5/server/server.h0000664000175000017500000001047412140767176013527 00000000000000/*************************************************************************** server.h - description ------------------- begin : 03/03/19 copyright : (C) 2003 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __SERVER_H #define __SERVER_H /***** INCLUDES ************************************************************/ #ifdef HAVE_CONFIG_H #include "../config.h" #endif #include #include #include #include #include #include #include "../common/tools.h" #include "../common/net.h" #include "../common/messages.h" #include "../common/list.h" #include "../common/parser.h" #include "../game/game.h" /* i18n */ #include "../common/gettext.h" #if ENABLE_NLS #define _(str) gettext (str) #else #define _(str) (str) #endif /***** TYPE DEFINITIONS ****************************************************/ typedef struct { int id; /* global user id */ char name[20]; int no_comm; /* user does not communicate: bots and disconnected users have this set True */ int bot; /* if True this is a paddle bot */ int bot_level; /* paddle speed in pix/sec */ NetSocket socket; /* transmission socket */ int hidden; /* True if chatroom user is not visible (e.g. looking at game statistics or playing) */ int admin; /* wether user logged in with admit rights */ void *game; /* FIXME: I'M A BAD HACK: points to the current ServerGame if this user is playing */ int player_id; /* 0 - challenger in game or 1 - challenged */ } ServerUser; typedef struct { char name[20]; int id; List *users; } ServerChannel; enum { SERVER_AWAIT_ACCEPT, /* the first user has created the game and is already added. a challenge note is sent to the challenged user. in this state the server awaits either a ACCEPTED or REFUSED message by the remote or a CANCEL, DISCONNECT by the challenger */ SERVER_AWAIT_READY, /* await ready message from both users, then play */ SERVER_PLAY, /* now the game is actually running: valid messages are paddle updates, pause requests, chat messages and exits */ SERVER_PAUSE /* game is paused and players may exchange chat messages until one sends an UNPAUSE */ }; /* states of a server game */ typedef struct { ServerUser *challenger; ServerUser *challenged; /* the two users that will play */ char name[20]; /* name of the levelset */ int diff; /* difficulty level */ int rounds; /* per level */ int frags; /* DM: frags required to win */ int balls; /* DM: number of balls a paddle may fire */ } ServerGameCtx; typedef struct { int id; /* users join a game by sending its id */ int state; /* current state as above */ ServerUser *users[2]; /* pointers to chat channel: 0 - challenger 1 - challenged */ ServerChannel *channel; /* the channel the users are in */ LevelSet *set; /* pointer to the current set */ int rounds_per_level; int rounds; /* level count * rounds per level */ int cur_round; /* id of current round. level id is cur_round / rounds */ int cur_level; /* id of current level */ int ready[2]; /* wether user has sent READY */ Game *game; /* the actual game data used by server */ GameStats stats[2]; /* game stats: 0 - challenger 1 - challenged */ int game_over; /* True after last round was finalized and stats have been send. */ } ServerGame; /***** PUBLIC FUNCTIONS ****************************************************/ #endif lbreakout2-2.6.5/server/server_game.h0000664000175000017500000000430512140767176014514 00000000000000/*************************************************************************** server_game.h - description ------------------- begin : 03/03/19 copyright : (C) 2003 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __SERVER_GAME_H #define __SERVER_GAME_H /***** INCLUDES ************************************************************/ /***** TYPE DEFINITIONS ****************************************************/ /***** PUBLIC FUNCTIONS ****************************************************/ /* Add a new game by the context information, hide both users * and send a challenge message to the challenged user. */ void server_game_add( ServerChannel *channel, ServerGameCtx *ctx ); /* Free game memory. */ void server_game_delete( void *ptr ); /* unhide the users to their chat channel and delete the game. * if game was beyond state AWAIT_ACCEPT the game stats are send */ void server_game_remove( ServerGame *game ); /* void parse_packet_game * IN ServerGame *game * IN ServerUser *user * * Check all messages in packet from user who is currently within * a game. The header has already been successfully processed and the * read pointer is at the beginning of the first message. */ void parse_packet_game( ServerGame *game, ServerUser *user ); /* void update_games * IN int ms milliseconds passed since last call * * Update the objects of all games that are actually playing. */ void update_games( int ms ); #endif lbreakout2-2.6.5/server/levels/0000777000175000017500000000000012610471363013406 500000000000000lbreakout2-2.6.5/server/levels/N_Snapshots0000664000175000017500000001341612140767176015523 00000000000000Version: 1.00 Level: Michael Speck Chinese Bricks: .............. .............. .............. ffffffffffffff ffffffffffffff gggggggggggggg gggggggggggggg jbbbbbbbbbbbbj jbjjjjjjjjjjbj jbjjjjjjjjjjbj jbbbbbbbbbbbbj dddddddddddddd dddddddddddddd eeeeeeeeeeeeee eeeeeeeeeeeeee .............. .............. .............. Bonus: .............. .............. .............. ?......-.....? ....+.....>... ..p.....b..... .....~.....+.. ...s....j.b.w. .*1323232323.. ..3232323231*. .w...j....s... .......~...+.. ....b.....p... ..b...+.>..... ?...-........? .............. .............. .............. Level: Michael Speck Spearhead Bricks: .............. .............. .............. jjjj.......... kkkkkk........ aaaaaaaa...... kkkkkkkkkk.... jjjjjjjjjjjj.. #####....zzzzz #####....zzzzz kkkkkkkkkkkk.. jjjjjjjjjj.... aaaaaaaa...... jjjjjj........ kkkk.......... .............. .............. .............. Bonus: .............. .............. .............. .2.-.......... .+............ 2.w2b..+...... .-....2..~.... .p.*.}..s..c.. .........44444 .........44444 p..*...}s.~... .2...2-..+.... ..b2w..d...... .-.+.......... 2............. .............. .............. .............. Level: Michael Speck Fortress Bricks: .............. .............. .............. .............. .............. ..E##zzzz##E.. .kE@..gg..@Ek. kkE.iiiiii.Ekk kkEgiggggigEkk kkEgiggggigEkk kkE.iiiiii.Ekk .kE@..gg..@Ek. ..E##zzzz##E.. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .....f>.f..... .p..........p. ?...3....3...+ .b...34.3..... .....3.43...b. +...3....3...? .p..........p. .....f.>f..... .............. .............. .............. .............. .............. Level: Michael Speck Soccer Worldcup Bricks: .............. .............. ffffffffffffff ffffffffffffff ffffffffffffff jjjffffffffjjj ffjffffffffjff ffjfffjjfffjff jfjffjffjffjfj jfjffjffjffjfj ffjfffjjfffjff ffjffffffffjff jjjffffffffjjj ffffffffffffff ffffffffffffff ffffffffffffff .............. .............. Bonus: .............. .............. >...+.bb.+...> ..b..-..-..b.. .............. 11>........>11 .f1..b..b..1.. ..1...33...1.. ?.1..3553..1.? ?.1..3553..1.? ..1...33...1.. ..1..b..b..1f. 11>........>11 .............. ..b..-..-..b.. >...+.bb.+...> .............. .............. Level: Michael Speck Construction Time Bricks: .............. .............. .............. ..!..!kk!..!.. .....*kk*..... .gggggggggggg. .ffhhhhhhhhff. .*fh*dddd*hf*. .@!h@!ee!@h!@. .@!h@!ee!@h!@. .*fh*dddd*hf*. .ffhhhhhhhhff. .gggggggggggg. .....*kk*..... ..!..!kk!..!.. .............. .............. .............. Bonus: .............. .............. ..b..c..+..0+. .0.0...3.3.... ..s........0.. .............. .............. .....4..4.>... ..w..b.m...p.. ..p...g.b..w.. .....4..4..... .............. .............. ..0>.......s.. ....3.3...0.0. .+0..+..b..c.. .............. .............. Level: Michael Speck Four Seasons Bricks: .............. .............. hhhh......eeee hhhh......eeee hhhh......eeee hhhh......eeee hhhh......eeee hhhh......eeee .............. .............. ffff......jjjj ffff......jjjj ffff......jjjj ffff......jjjj ffff......jjjj ffff......jjjj .............. .............. Bonus: .............. .............. +..b.......2.4 3.s.......4{.. .3.2......f.*. ?.-........b.? ...}......c.3. .p........2pjb .............. .............. bjp2........p. .3.d......}... ?.b........-.? .*.f......2.3. ..{4.......s.3 4.2.......b..+ .............. .............. Level: Michael Speck Hidden Obstacles Bricks: .............. .............. .............. .............. .v#eeeeeeee#v. ..e#......#e.. ..eg#vvvv#ge.. ..egf....fge.. ..egf.dd.fge.. ..egf.dd.fge.. ..egf....fge.. ..eg#vvvv#ge.. ..e#......#e.. .v#eeeeeeee#v. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. ...00000000... .............. .....4444..... ..+?......?b.. ...?b.pp.-?... ...?-.pp.b?... ..b?......?+.. .....4444..... .............. ...00000000... .............. .............. .............. .............. Level: Michael Speck Oh, Deer! Bricks: .............. .............. .d..e....e..d. .e..d....d..e. .#..#....#..#. .a..i....i..a. .g..a....a..g. .a..i....i..a. .g..a....a..g. .a..i....i..a. .g..a....a..g. .a..i....i..a. .g..a....a..g. .#..#....#..#. .h..d....d..h. .d..h....h..d. .............. .............. Bonus: .............. .............. .p..p....p..p. .p..p....p..p. .............. ....5....5.... .4..........4. ....5....5.... .4..b....b..j. ....5....5.... .j..b....b..4. ....5....5.... .4..........4. .............. .p..p....p..p. .p..p....p..p. .............. .............. Level: Michael Speck Pipes Bricks: .............. .............. .j..!..!..###. .j..#dd#..#gg. .jj.#dd#..#g.. .jj.####...... .##........... .f#*.###.*.##. .f#!.!.!.!.#e. .f#.!.!.!.!#e. .##.*.###.*#e. ...........##. ......####.jj. ..g#..#hh#.jj. .gg#..#hh#..j. .###..!..!..j. .............. .............. Bonus: .............. .............. .f............ .3....b....*>. ..f..+.....d.. ..3........... .............. .3............ .5..?2?2?2?.3. .3.?2?2?2?..5. ............3. .............. ...........3.. ..c.....+..f.. .>*....b....3. ............f. .............. .............. Level: Michael Speck Collect Your Reward! Bricks: .............. .............. .x..........x. .............. ...z.z..z.z... .............. .x..........x. ...z.z..z.z... .............. .............. ...z.z..z.z... .x..........x. .............. ...z.z..z.z... .............. .x..........x. .............. .............. Bonus: .............. .............. .b..........b. .............. ...5.5..5.5... .............. .b..........b. ...5.5..5.5... .............. .............. ...5.5..5.5... .b..........b. .............. ...5.5..5.5... .............. .b..........b. .............. .............. lbreakout2-2.6.5/server/levels/N_Arenas0000664000175000017500000000667612140767176014764 00000000000000Version: 1.00 Level: Michael Speck Duell-1 Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-2 Bricks: .............. .............. .............. .............. ..#..#..#..#.. ..#..#..#..#.. ..#..#..#..#.. ..@..@..@..@.. ..@..@..@..@.. ..@..@..@..@.. ..@..@..@..@.. ..#..#..#..#.. ..#..#..#..#.. ..#..#..#..#.. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-1 Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-3 Bricks: .............. .............. .............. .............. .............. ..#..#..#..#.. .............. #...@....@...# .............. .............. #...@....@...# .............. ..#..#..#..#.. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-1 Bricks: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. Level: Michael Speck Duell-4 Bricks: .............. .............. .#...#..#...#. .............. @............@ @............@ @............@ @............@ @............@ @............@ @............@ @............@ @............@ @............@ .............. .#...#..#...#. .............. .............. Bonus: .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. .............. lbreakout2-2.6.5/server/levels/Makefile.in0000664000175000017500000002464512610471343015402 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = server/levels DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ EXTRA_DIST = N_Arenas N_Snapshots all: all-am .SUFFIXES: $(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) --foreign server/levels/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign server/levels/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 uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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 installdirs: 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-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-data-local install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-local install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-info-am install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/levels @for file in $(EXTRA_DIST); do \ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/levels/$$file; \ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\levels\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done # 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: lbreakout2-2.6.5/server/levels/Makefile.am0000664000175000017500000000060712140767176015373 00000000000000EXTRA_DIST = N_Arenas N_Snapshots install-data-local: $(mkinstalldirs) $(DESTDIR)$(inst_dir)/levels @for file in $(EXTRA_DIST); do \ $(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/levels/$$file; \ done win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\levels\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done lbreakout2-2.6.5/server/server_game.c0000664000175000017500000004461012140767176014512 00000000000000/*************************************************************************** server_game.c - description ------------------- begin : 03/03/19 copyright : (C) 2003 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /***** INCLUDES ************************************************************/ #include "server.h" /***** EXTERNAL VARIABLES **************************************************/ extern List *games; extern int global_id; extern char errbuf[128]; /* used to compile error messages */ extern char msgbuf[MAX_MSG_SIZE]; /* used to compile messages */ extern int msglen; extern List *levelsets; extern char net_buffer[MAX_MSG_SIZE + PACKET_HEADER_SIZE]; extern int server_frame_delay; extern int msg_read_pos, net_buffer_cur_size; extern void send_info( ServerUser *user, int type, char *format, ... ); extern void channel_hide_user( ServerChannel *channel, ServerUser *user, int hide ); extern void channel_remove_user( ServerChannel *channel, ServerUser *user ); extern void send_full_update( ServerUser *user, ServerChannel *channel ); /***** EXPORTS *************************************************************/ /***** FORWARDED DECLARATIONS **********************************************/ /***** LOCAL TYPE DEFINITIONS **********************************************/ /***** LOCAL VARIABLES *****************************************************/ /***** LOCAL FUNCTIONS *****************************************************/ #ifdef NETWORK_ENABLED /* update the position of top paddle */ static void update_bot_paddle( Game *game, int ms ) { int src_x, dest_x, dir; Ball *ball, *min_ball = 0; Extra *extra, *min_extra = 0; Paddle *paddle = game->paddles[PADDLE_TOP]; int move = 0; static int entropy = 0; float change; /* always fire */ paddle->fire_left = 1; /* get nearest ball */ list_reset( game->balls ); while ( ( ball = list_next( game->balls ) ) ) { if ( ball->attached ) continue; if ( min_ball == 0 || ball->y < min_ball->y ) min_ball = ball; } /* get nearest extra */ list_reset( game->extras ); while ( ( extra = list_next( game->extras ) ) ) { if ( extra->dir != -1 ) continue; if ( min_extra == 0 || extra->y < min_extra->y ) min_extra = extra; } src_x = paddle->x + paddle->w/2; dest_x = paddle->x + paddle->w/2; if ( min_ball || min_extra ) { if ( min_ball && ( min_extra == 0 || min_ball->y < min_extra->y ) ) { dest_x = min_ball->x + 6; move = 1; } else if ( min_extra && ( min_ball == 0 || min_extra->y < min_ball->y ) ) { dest_x = min_extra->x + 20; move = 1; } } dir = (dest_xsrc_x)?1:0; entropy = (rand() % 17)-8; if ( move && dir != 0 ) { change = paddle->bot_vx * ms; /* due to high 'ms' the change might be so much that * the paddle would start to jump epileptically, so * set position to 'dest' then */ if ( dir < 0 && src_x-changecur_x = dest_x+entropy - paddle->w/2; else if ( dir > 0 && src_x+change>dest_x-entropy ) paddle->cur_x = dest_x-entropy - paddle->w/2; else paddle->cur_x += change * dir; if ( paddle->cur_x < BRICK_WIDTH ) paddle->cur_x = BRICK_WIDTH; if ( paddle->cur_x + paddle->w >= 640 - BRICK_WIDTH ) paddle->cur_x = 640 - BRICK_WIDTH - paddle->w; paddle->x = (int)paddle->cur_x; } } static LevelSet *find_levelset( char *name ) { LevelSet *set; list_reset( levelsets ); while ( (set = list_next( levelsets ) ) ) if ( !strcmp( set->name, name ) ) return set; return 0; } static void send_level( Level *level, ServerUser *user, int l_pos ) { if ( user->bot ) return; msgbuf[0] = MSG_LEVEL_DATA; msgbuf[1] = l_pos; msglen = 2; comm_pack_level( level, (unsigned char*)msgbuf, &msglen ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); } static void init_next_round( ServerGame *game ) { game->cur_round++; game->cur_level = game->cur_round / game->rounds_per_level; game_init( game->game, game->set->levels[game->cur_level] ); /* send level and wait for ready */ game->state = SERVER_AWAIT_READY; game->ready[0] = game->ready[1] = 0; send_level( game->set->levels[game->cur_level], game->users[0], PADDLE_BOTTOM ); if ( !game->users[1]->bot ) send_level( game->set->levels[game->cur_level], game->users[1], PADDLE_TOP ); else game->ready[1] = 1; /* bot is always the challenged one */ /* set up bot top paddle if any */ if ( game->users[1]->bot ) game->game->paddles[PADDLE_TOP]->bot_vx = 0.001 * game->users[1]->bot_level; } static void finalize_round( ServerGame *game ) { /* update stats */ game_update_stats( 0, &game->stats[0] ); game_update_stats( 1, &game->stats[1] ); /* finalize */ game_finalize( game->game ); /* tell clients that round is over */ if ( game->cur_round == game->rounds-1 ) msgbuf[0] = MSG_LAST_ROUND_OVER; else msgbuf[0] = MSG_ROUND_OVER; msgbuf[1] = game->game->winner; msglen = 2; socket_transmit( &game->users[0]->socket, CODE_BLUE, msglen, msgbuf ); if ( !game->users[1]->bot ) socket_transmit( &game->users[1]->socket, CODE_BLUE, msglen, msgbuf ); /* if this was the last round set game_over */ if ( game->cur_round == game->rounds-1 ) game->game_over = 1; } /* send game statistics were the first stats is the user it is send * to and the second is the opponents stats */ static void send_stats( ServerUser *user, GameStats *stats1, GameStats *stats2 ) { int count; int kept[2] = {0,0}, bricks[2] = {0,0}, extras[2] = {0,0}; if ( user->bot ) return; count = stats1->balls_reflected + stats1->balls_lost; if ( count > 0 ) kept[0] = 100 * stats1->balls_reflected / count; count = stats2->balls_reflected + stats2->balls_lost; if ( count > 0 ) kept[1] = 100 * stats2->balls_reflected / count; if ( stats1->total_brick_count > 0 ) bricks[0] = 100 * stats1->bricks_cleared / stats1->total_brick_count; if ( stats2->total_brick_count > 0 ) bricks[1] = 100 * stats2->bricks_cleared / stats2->total_brick_count; if ( stats1->total_extra_count > 0 ) extras[0] = 100 * stats1->extras_collected / stats1->total_extra_count; if ( stats2->total_extra_count > 0 ) extras[1] = 100 * stats2->extras_collected / stats2->total_extra_count; msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_GAME_STATS ); msg_write_int8( stats1->wins ); msg_write_int8( stats2->wins ); msg_write_int8( stats1->losses ); msg_write_int8( stats2->losses ); msg_write_int8( stats1->draws ); msg_write_int8( stats2->draws ); msg_write_int32( stats1->total_score ); msg_write_int32( stats2->total_score ); msg_write_int8( kept[0] ); msg_write_int8( kept[1] ); msg_write_int8( bricks[0] ); msg_write_int8( bricks[1] ); msg_write_int8( extras[0] ); msg_write_int8( extras[1] ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); } /***** PUBLIC FUNCTIONS ****************************************************/ /* Add a new game by the context information, hide both users * and send a challenge message to the challenged user. */ void server_game_add( ServerChannel *channel, ServerGameCtx *ctx ) { ServerGame *game = salloc( 1, sizeof( ServerGame ) ); /* copy game data */ game->state = SERVER_AWAIT_ACCEPT; game->id = global_id++; game->channel = channel; game->set = find_levelset( ctx->name ); if ( game->set == 0 ) { /* should never happen... */ sprintf( errbuf, "game_create_failed: no levelset '%s' found\n", ctx->name ); send_info( ctx->challenger, MSG_ERROR, errbuf ); free( game ); return; } game->rounds_per_level = ctx->rounds; game->rounds = game->set->count * game->rounds_per_level; game->cur_round = -1; /* init_next_round will increase this to 0 */ /* create game module */ if ( (game->game = game_create( GT_NETWORK, ctx->diff, 100/*no rel warp*/ )) == 0 ) { /* send error to user */ strncpy(errbuf,"game_create failed: out of memory",128); send_info( ctx->challenger, MSG_ERROR, errbuf ); free( game ); return; } game_set_current( game->game ); game_set_ball_ammo( ctx->balls ); game_set_frag_limit( ctx->frags ); game_set_convex_paddle( 1 ); game_set_ball_random_angle( 1 ); /* set game for both users and set both users for game */ ctx->challenger->game = game; ctx->challenged->game = game; ctx->challenger->player_id = 0; ctx->challenged->player_id = 1; game->users[0] = ctx->challenger; game->users[1] = ctx->challenged; /* hide both users */ channel_hide_user( channel, ctx->challenger, 1 ); channel_hide_user( channel, ctx->challenged, 1 ); /* inform challenged user */ if ( !ctx->challenged->bot ) { msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_CHALLENGE ); msg_write_string( ctx->challenger->name ); msg_write_string( ctx->name ); msg_write_int8( ctx->diff ); msg_write_int8( ctx->rounds ); msg_write_int8( ctx->frags ); msg_write_int8( ctx->balls ); socket_transmit( &ctx->challenged->socket, CODE_BLUE, msglen, msgbuf ); } else { /* instantly accept as bot */ msgbuf[0] = MSG_ACCEPT_CHALLENGE; socket_transmit( &game->users[0]->socket, CODE_BLUE, 1, msgbuf ); init_next_round( game ); } list_add( games, game ); printf( _("game added: %s (%i): %i rounds: %s vs. %s\n"), game->set->name, game->id, game->rounds, game->users[0]->name, game->users[1]->name ); } /* Free game memory. */ void server_game_delete( void *ptr ) { ServerGame *game = (ServerGame*)ptr; if ( game ) { printf( _("game deleted: %s (%i)\n"), game->set->name, game->id ); if ( game->game ) game_delete( &game->game ); free( game ); } } /* unhide the users to their chat channel and delete the game. * if game was beyond state AWAIT_ACCEPT the game stats are send */ void server_game_remove( ServerGame *game ) { int i; /* users are not unhidden if the actual game has already started * as they need time to read the error messages (if any) then */ if ( game->state == SERVER_AWAIT_ACCEPT ) for ( i = 0; i < 2; i++ ) { if ( game->users[i]->hidden ) channel_hide_user( game->channel, game->users[i], 0 ); } else { /* send stats */ send_stats( game->users[0], &game->stats[0], &game->stats[1] ); send_stats( game->users[1], &game->stats[1], &game->stats[0] ); /* and unhide bot if any */ if ( game->users[1]->bot ) channel_hide_user( game->channel, game->users[1], 0 ); } /* clear user game pointer */ game->users[0]->game = 0; game->users[1]->game = 0; /* free memory */ list_delete_item( games, game ); } /* void parse_packet_game * IN ServerGame *game * IN ServerUser *user * * Check all messages in packet from user who is currently within * a game. The header has already been successfully processed and * the read pointer is at the beginning of the first message. */ void parse_packet_game( ServerGame *game, ServerUser *user ) { ServerUser *peer; unsigned char type; int handled, i; game_set_current( game->game ); while ( 1 ) { type = (unsigned)msg_read_int8(); handled = 0; msglen = 0; /* the extract functions require a position pointer */ if ( msg_read_failed() ) break; /* no more messages */ /* general messages */ switch ( type ) { case MSG_HEARTBEAT: /* updates the socket information automatically * so connection is not closed */ handled = 1; break; case MSG_DISCONNECT: /* update stats and finalize context if playing */ if ( game->state != SERVER_AWAIT_ACCEPT ) { game->game->winner = -1; /* count unfinished level as draw */ game_update_stats( 0, &game->stats[0] ); game_update_stats( 1, &game->stats[1] ); game_finalize( game->game ); } if ( user == game->users[0] ) peer = game->users[1]; else peer = game->users[0]; send_info( peer, MSG_ERROR, _("Remote player has disconnected...") ); server_game_remove( game ); printf( _("%s (%i) disconnected\n"), user->name, user->id ); channel_remove_user( game->channel, user ); handled = 1; break; case MSG_QUIT_GAME: if ( user == game->users[0] ) peer = game->users[1]; else peer = game->users[0]; send_info( peer, MSG_ERROR, _("Remote player has left the game...") ); /* update stats and finalize context */ game->game->winner = -1; /* count unfinished level as draw */ game_update_stats( 0, &game->stats[0] ); game_update_stats( 1, &game->stats[1] ); game_finalize( game->game ); server_game_remove( game ); handled = 1; break; case MSG_UNHIDE: /* it's very unlikely that the user sends this * message while being in the game context but to be sure * he may unhide here */ if ( user->hidden ) channel_hide_user( game->channel, user, 0 ); handled = 1; break; } /* challenge */ if ( game->state == SERVER_AWAIT_ACCEPT ) switch ( type ) { case MSG_ACCEPT_CHALLENGE: if ( user == game->users[1] ) { /* inform opponent */ msgbuf[0] = MSG_ACCEPT_CHALLENGE; socket_transmit( &game->users[0]->socket, CODE_BLUE, 1, msgbuf ); init_next_round( game ); handled = 1; } break; case MSG_REJECT_CHALLENGE: if ( user == game->users[1] ) { /* tell challenger that you refused the offer */ msgbuf[0] = MSG_REJECT_CHALLENGE; socket_transmit( &game->users[0]->socket, CODE_BLUE, 1, msgbuf ); server_game_remove( game ); handled = 1; } break; case MSG_CANCEL_GAME: if ( user == game->users[0] ) { /* tell challenged that you cancelled the offer */ msgbuf[0] = MSG_CANCEL_GAME; socket_transmit( &game->users[1]->socket, CODE_BLUE, 1, msgbuf ); server_game_remove( game ); handled = 1; } break; } /* preparation */ if ( game->state == SERVER_AWAIT_READY ) if ( type == MSG_READY ) { game->ready[user->player_id] = 1; if ( game->ready[0] && game->ready[1] ) game->state = SERVER_PLAY; handled = 1; } /* in-game messages */ if ( game->state == SERVER_PLAY ) switch ( type ) { case MSG_PADDLE_STATE: comm_unpack_paddle( game->game->paddles[user->player_id], (unsigned char*)net_buffer, &msg_read_pos ); handled = 1; break; case MSG_PAUSE: game->state = SERVER_PAUSE; msgbuf[0] = MSG_PAUSE; msglen = 1; if ( user == game->users[0] ) peer = game->users[1]; else peer = game->users[0]; if ( !peer->bot ) socket_transmit( &peer->socket, CODE_BLUE, msglen, msgbuf ); handled = 1; break; } /* pause messages */ if ( game->state == SERVER_PAUSE ) switch ( type ) { case MSG_UNPAUSE: game->state = SERVER_PLAY; for ( i = 0; i < game->game->paddle_count; i++ ) game->game->paddles[i]->last_ball_contact = SDL_GetTicks(); msgbuf[0] = MSG_UNPAUSE; msglen = 1; if ( user == game->users[0] ) peer = game->users[1]; else peer = game->users[0]; if ( !peer->bot ) socket_transmit( &peer->socket, CODE_BLUE, msglen, msgbuf ); handled = 1; break; case MSG_CHATTER: /* client has added prefix so simply pass it * to the remote user */ msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_CHATTER ); msg_write_string( msg_read_string() ); if ( !msg_write_failed() ) { if ( user == game->users[0] ) peer = game->users[1]; else peer = game->users[0]; if ( !peer->bot ) socket_transmit( &peer->socket, CODE_BLUE, msglen, msgbuf ); } handled = 1; break; } if ( !handled ) { printf( _("game %i: %s: state %i: invalid message %x: skipping %i bytes\n"), game->id, net_addr_to_string( &user->socket.remote_addr ), game->state, type, net_buffer_cur_size - msg_read_pos ); msg_read_pos = net_buffer_cur_size; } } } /* void update_games * IN int ms milliseconds passed since last call * * Update the objects of all games that are actually playing. */ void update_games( int ms ) { int i; ServerGame *game; list_reset( games ); while ( (game = list_next( games ) ) ) { if ( game->state != SERVER_PLAY ) continue; game_set_current( game->game ); game_update( ms ); /* send updates to remote players */ if ( game->game->level_over ) { finalize_round( game ); if ( game->game_over ) server_game_remove( game ); else init_next_round( game ); continue; } /* if playing against a bot update the top paddle */ if ( game->users[1]->bot ) update_bot_paddle( game->game, ms ); /* pack update */ msglen = 0; msgbuf[msglen++] = MSG_PADDLE_STATE; comm_pack_paddle( game->game->paddles[1], (unsigned char*)msgbuf, &msglen ); msgbuf[msglen++] = MSG_BALL_POSITIONS; comm_pack_balls( (unsigned char*)msgbuf, &msglen ); if ( game->game->shots->count > 0 ) { msgbuf[msglen++] = MSG_SHOT_POSITIONS; comm_pack_shots( (unsigned char*)msgbuf, &msglen ); } msgbuf[msglen++] = MSG_SCORES; comm_pack_scores( (unsigned char*)msgbuf, &msglen ); if ( game->game->mod.brick_hit_count > 0 ) { msgbuf[msglen++] = MSG_BRICK_HITS; comm_pack_brick_hits( (unsigned char*)msgbuf, &msglen ); } if ( game->game->mod.collected_extra_count[0] > 0 || game->game->mod.collected_extra_count[1] > 0 ) { msgbuf[msglen++] = MSG_NEW_EXTRAS; comm_pack_collected_extras( (unsigned char*)msgbuf, &msglen ); } /* send packet */ socket_transmit( &game->users[0]->socket, CODE_BLUE, msglen, msgbuf ); /* replace paddle which has a constant size */ i = 1; comm_pack_paddle( game->game->paddles[0], (unsigned char*)msgbuf, &i ); if ( !game->users[1]->bot ) socket_transmit( &game->users[1]->socket, CODE_BLUE, msglen, msgbuf ); game_reset_mods(); } } #endif lbreakout2-2.6.5/server/Makefile.in0000664000175000017500000004532512610471343014106 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = lbreakout2server$(EXEEXT) subdir = server DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_lbreakout2server_OBJECTS = server.$(OBJEXT) server_game.$(OBJEXT) lbreakout2server_OBJECTS = $(am_lbreakout2server_OBJECTS) lbreakout2server_DEPENDENCIES = ../common/libcommon.a \ ../game/libgame.a DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) 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 = $(lbreakout2server_SOURCES) DIST_SOURCES = $(lbreakout2server_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ @network_flag@ @sdlnet_flag@ @inst_flag@ @locdir_flag@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ lbreakout2server_SOURCES = \ server.c server_game.c EXTRA_DIST = server.h server_game.h lbreakout2server_LDADD = ../common/libcommon.a ../game/libgame.a @sdlnet_lib_flag@ SUBDIRS = levels all: all-recursive .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) --foreign server/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign server/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) lbreakout2server$(EXEEXT): $(lbreakout2server_OBJECTS) $(lbreakout2server_DEPENDENCIES) @rm -f lbreakout2server$(EXEEXT) $(LINK) $(lbreakout2server_LDFLAGS) $(lbreakout2server_OBJECTS) $(lbreakout2server_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server_game.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @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@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @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) '$<'` uninstall-info-am: # 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" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @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) $(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) $(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) $(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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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" \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; 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-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ clean clean-binPROGRAMS clean-generic clean-recursive ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-recursive distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-info-am # 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: lbreakout2-2.6.5/server/Makefile.am0000664000175000017500000000045012140767176014075 00000000000000DEFS = @DEFS@ @network_flag@ @sdlnet_flag@ @inst_flag@ @locdir_flag@ bin_PROGRAMS = lbreakout2server lbreakout2server_SOURCES = \ server.c server_game.c EXTRA_DIST = server.h server_game.h lbreakout2server_LDADD = ../common/libcommon.a ../game/libgame.a @sdlnet_lib_flag@ SUBDIRS = levels lbreakout2-2.6.5/server/server.c0000664000175000017500000012116712273750567013527 00000000000000/*************************************************************************** server.c - description ------------------- begin : 03/03/11 copyright : (C) 2003 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /***** INCLUDES ************************************************************/ #include #include "server.h" #include "server_game.h" /***** EXTERNAL VARIABLES **************************************************/ extern int net_buffer_cur_size, msg_read_pos; /***** FORWARDED DECLARATIONS **********************************************/ #ifdef NETWORK_ENABLED static void signal_handler( int signal ); static void broadcast_all( int len, char *data ); #endif /***** LOCAL TYPE DEFINITIONS **********************************************/ enum { CHANNEL_MAIN_ID = 1 }; /***** LOCAL VARIABLES *****************************************************/ int server_port = 8000; /* server is listening at this port */ List *channels = 0; /* chat channels */ List *games = 0; /* running games */ List *levelsets = 0; /* loaded levelsets */ int global_id = 1; /* global id counter increased each type an object (user,channel,game) is added (id:1 is channel MAIN) */ int server_halt = 0; /* when set, server will go down after some seconds */ int server_halt_since = 0; /* global time (in secs) passed since halt command */ char errbuf[128]; /* used to compile error messages */ char msgbuf[MAX_MSG_SIZE]; /* used to compile messages */ int msglen = 0; int user_limit = 50; /* maximum number of users that may be logged in (0: unlimited)*/ int user_count = 0; /* number of logged in users */ char greetings[256]; /* welcome message send to user on login */ char admin_pwd[20] = ""; /* admin password (if any) */ char datadir[128] = SRC_DIR; /* levels are loaded from here */ int server_fps = 20; /* communication frame rate */ int server_frame_delay = 50; /* delay between server frames */ int server_recv_limit = -1; /* number of packets parsed in one go (-1 == unlimited) */ int server_def_bot_num = 1; /* number of 800's and 1000's bots to be created on startup */ /* these default channels are known by the client and the only * ones shown in the list. there id starts at 1 for MAIN increased * by 1 with each step */ ServerChannel *main_channel = 0; /* pointer to MAIN */ int default_channel_count = 1; char *default_channels[1]; /***** LOCAL FUNCTIONS *****************************************************/ #ifdef NETWORK_ENABLED static void server_init_halt() { printf( _("server is going down...\n") ); server_halt_since = time(0); server_halt = 1; errbuf[0] = MSG_ERROR; sprintf( errbuf+1, _("SERVER IS GOING DOWN!!!") ); broadcast_all( 2+strlen(errbuf+1), errbuf ); } void send_info( ServerUser *user, int type, char *format, ... ) { va_list args; if ( user->no_comm ) return; va_start( args, format ); vsnprintf( msgbuf+1, MAX_MSG_SIZE-1, format, args ); va_end( args ); msgbuf[0] = type; socket_transmit( &user->socket, CODE_BLUE, 2+strlen(msgbuf+1), msgbuf ); } /* channel_add/delete don't require client updates as the only * channels that are shown in the list are already known by name * and id by the client. additional channels can be entered by typing * in the name. A pointer is returned to simplify transfer of users. */ static ServerChannel* channel_add( char *name ) { ServerChannel *channel = salloc( 1, sizeof( ServerChannel ) ); strncpy(channel->name,name,20); channel->id = global_id++; channel->users = list_create( LIST_AUTO_DELETE, LIST_NO_CALLBACK ); printf( _("channel added: %s\n"), channel->name ); list_add( channels, channel ); return channel; } static void channel_delete( void *ptr ) { ServerChannel *channel = (ServerChannel*)ptr; if ( channel ) { printf( _("channel deleted: %s (%i users)\n"), channel->name, channel->users->count ); if ( channel->users ) list_delete( channel->users ); free( channel ); } } ServerChannel *channel_find_by_name( char *name ) { ServerChannel *channel = 0; list_reset( channels ); while ( ( channel = list_next( channels ) ) ) if ( !strcmp( channel->name, name ) ) return channel; return 0; } static void channel_add_user( ServerChannel *channel, ServerUser *user ); static void channel_add_bot( ServerChannel *channel, char *name, int level ) { NetAddr addr; ServerUser *user = salloc( 1, sizeof( ServerUser) ); /* add a bot user to channel which can be challenged * but does nothing else */ strncpy(user->name,name,16); user->id = global_id++; user->no_comm = 1; user->bot = 1; user->bot_level = level; /* playing level */ net_build_addr( &addr, "localhost", 8000 ); socket_init( &user->socket, &addr ); channel_add_user( channel, user ); } static void create_default_channels() { int i = 0; for ( i = 0; i < default_channel_count; i++ ) channel_add( default_channels[i] ); main_channel = (ServerChannel*)list_first( channels ); } static int is_default_channel( ServerChannel *channel ) { int i = 0; for ( i = 0; i < default_channel_count; i++ ) if ( !strcmp( default_channels[i], channel->name ) ) return 1; return 0; } static void channel_broadcast( ServerChannel *channel, int len, char *data ) { int urgent = 0; ServerUser *user; /* urgent messages are always sent even to hidden users */ if ( data[0] == MSG_ERROR || data[0] == MSG_ADD_USER || data[0] == MSG_REMOVE_USER || data[0] == MSG_SET_COMM_DELAY ) urgent = 1; /* deliver it */ list_reset( channel->users ); while ( ( user = list_next( channel->users ) ) ) if ( !user->no_comm ) if ( urgent || !user->hidden ) socket_transmit( &user->socket, CODE_BLUE, len, data ); } /* broadcast message to all users in all channels even the hidden ones */ static void broadcast_all( int len, char *data ) { ServerChannel *channel; list_reset( channels ); while ( ( channel = list_next( channels ) ) ) channel_broadcast( channel, len, data ); } static void channel_add_user( ServerChannel *channel, ServerUser *user ) { if ( channel == 0 ) return; if ( user == 0 ) return; list_add( channel->users, user ); printf( _("user added: %s (%i) from %s\n"), user->name, user->id, net_addr_to_string( &user->socket.remote_addr ) ); /* inform all users in channel (including this one if not hidden) */ msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_ADD_USER ); msg_write_int32( user->id ); msg_write_string( user->name ); channel_broadcast( channel, msglen, msgbuf ); /* don't count dummies */ if ( !user->bot ) user_count++; } void channel_remove_user( ServerChannel *channel, ServerUser *user ) { if ( channel == 0 ) return; if ( user == 0 ) return; user->hidden = 1; /* this user does not require the following update */ /* inform all users in channel */ msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_REMOVE_USER ); msg_write_int32( user->id ); channel_broadcast( channel, msglen, msgbuf ); /* don't count dummies */ if ( !user->bot ) user_count--; /* remove */ printf( _("user removed: %s (%i)\n"), user->name, user->id ); list_delete_item( channel->users, user ); /* if empty channel and not default channel delete it */ if ( channel->users->count == 0 && !is_default_channel( channel ) ) list_delete_item( channels, channel ); } void channel_hide_user( ServerChannel *channel, ServerUser *user, int hide ) { if ( channel == 0 ) return; if ( user == 0 ) return; if ( user->hidden == hide ) return; /* nothing changes */ /* broadcast update to all users in channel */ if ( hide ) { msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_REMOVE_USER ); msg_write_int32( user->id ); channel_broadcast( channel, msglen, msgbuf ); user->hidden = hide; } else { user->hidden = hide; msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_ADD_USER ); msg_write_int32( user->id ); msg_write_string( user->name ); channel_broadcast( channel, msglen, msgbuf ); } } static void channel_kick_user( ServerChannel *channel, ServerUser *user, char *reason ) { if ( channel == 0 ) return; if ( user == 0 ) return; snprintf( errbuf, 128, _("You have been kicked! Reason: %s"), reason ); send_info( user, MSG_ERROR, errbuf ); errbuf[0] = MSG_DISCONNECT; socket_transmit( &user->socket, CODE_BLUE, 1, errbuf ); printf( _("user kicked (%s): %s (%i)\n"), reason, user->name, user->id ); channel_remove_user( channel, user ); } /* transfer user to new channel and send nescessary updates */ void send_full_update( ServerUser *user, ServerChannel *channel ); void channel_transfer_user( ServerChannel *old, ServerChannel *new, ServerUser *user ) { /* same channel? */ if ( old == new ) return; /* mute user as he will receive a complete update after the transfer */ user->hidden = 1; /* transfer */ msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_REMOVE_USER ); msg_write_int32( user->id ); channel_broadcast( old, msglen, msgbuf ); list_transfer( old->users, new->users, user ); if ( old->users->count == 0 && !is_default_channel( old ) ) list_delete_item( channels, old ); msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_ADD_USER ); msg_write_int32( user->id ); channel_broadcast( new, msglen, msgbuf ); /* update */ user->hidden = 0; msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_SERVER_INFO ); msg_printf( _("you have entered a new channel: %s"), new->name ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_SET_CHANNEL ); msg_write_string( new->name ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); send_full_update( user, new ); } /* Send a list of all users in user's channel including itself. * * FIXME: Sending each single entry is a not very nice. */ void send_full_update( ServerUser *user, ServerChannel *channel ) { ServerUser *u; msgbuf[0] = MSG_PREPARE_FULL_UPDATE; socket_transmit( &user->socket, CODE_BLUE, 1, msgbuf ); /* users */ list_reset( channel->users ); while ( ( u = list_next( channel->users ) ) ) { msg_begin_writing( msgbuf, &msglen, 32 ); msg_write_int8( MSG_ADD_USER ); msg_write_int32( u->id ); msg_write_string( u->name ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); } } /* ServerUser *find_user_by_name * IN char *name * * Search all channels for a user by that name. */ static ServerUser* find_user_by_name( char *name ) { ServerUser *user; ServerChannel *channel; list_reset( channels ); while ( ( channel = list_next( channels ) ) ) { list_reset( channel->users ); while ( ( user = list_next( channel->users ) ) ) if ( !strcmp( user->name, name ) ) return user; } return 0; } /* ServerUser *search_user * IN char *name * * Search all channels for a user by that name and return * the channel as well. */ static ServerUser* search_user( char *name, ServerChannel **channel ) { ServerUser *user; list_reset( channels ); while ( ( *channel = list_next( channels ) ) ) { list_reset( (*channel)->users ); while ( ( user = list_next( (*channel)->users ) ) ) if ( !strcmp( user->name, name ) ) return user; } return 0; } /* ServerUser *find_user_by_id * IN int id * * Search all channels for a user by that id. */ static ServerUser* find_user_by_id( int id ) { ServerUser *user; ServerChannel *channel; list_reset( channels ); while ( ( channel = list_next( channels ) ) ) { list_reset( channel->users ); while ( ( user = list_next( channel->users ) ) ) if ( user->id == id ) return user; } return 0; } /* ServerUser *find_user_by_addr * IN NetAddr *addr * * Search wether a user already uses this net address. */ static ServerUser* find_user_by_addr( NetAddr *addr ) { ServerUser *user; ServerChannel *channel; list_reset( channels ); while ( ( channel = list_next( channels ) ) ) { list_reset( channel->users ); while ( ( user = list_next( channel->users ) ) ) if ( net_compare_addr( addr, &user->socket.remote_addr ) ) return user; } return 0; } /* void handle_connectionless_packet * * By now only connection attempts can be found in this category. * So check wether the packet contains a valid request (or send * error messages if it doesn't) and add a new user to channel * MAIN. */ static void handle_connectionless_packet( void ) { char name[20], pwd[20], buf[128]; int protocol; ServerUser *user = 0; int i; msg_begin_connectionless_reading(); if ( msg_read_int8() != MSG_CONNECT ) return; protocol = msg_read_int8(); strncpy(name,msg_read_string(),20); name[19] = 0; strncpy(pwd,msg_read_string(),20); pwd[19] = 0; if ( msg_read_failed() ) { sprintf( errbuf+1, _("Login data corrupted, please retry.") ); goto failure; } if ( !is_alphanum(name) ) { strcpy(errbuf+1, _("Your username may only contain letters, digits and underscores.\n") ); goto failure; } /* check wether this user already exists. if so the LOGIN_OKAY * message was dropped. */ if ( (user = find_user_by_addr( &net_sender_addr )) ) if ( strcmp( user->name, name ) ) user = 0; /* somebody else though same box */ /* check data for validity */ if ( protocol != PROTOCOL ) { if ( protocol < PROTOCOL ) sprintf( errbuf+1, _("Your protocol is out of date, please update.") ); else sprintf( errbuf+1, _("Server uses an older protocol (%i), sorry."), PROTOCOL ); goto failure; } if ( user_count >= user_limit && user == 0/*else user exists already but wasn't informed*/ ) { sprintf( errbuf+1, _("Server is full!") ); goto failure; } if ( name[0] == 0 ) { sprintf( errbuf+1, _("Please enter a name!") ); goto failure; } if ( strchr( name, ' ' ) ) { sprintf( errbuf+1, _("Your name must not contain blanks! (But can have underscores.)") ); goto failure; } if ( (user==0 && find_user_by_name( name )) || !strcmp( name, _("admin") ) ) { sprintf( errbuf+1, _("This name is already in use. Please choose another one.") ); goto failure; } /* password is currently unused */ /* data successfully extracted and checked. if this is not a * user whos LOGIN_OKAY was dropped, create a new one. */ if ( user == 0 ) { user = salloc( 1, sizeof( ServerUser ) ); user->id = global_id++; if ( admin_pwd[0] != 0 && !strcmp( admin_pwd, name ) ) { strncpy(user->name,_("admin"),20); user->admin = 1; } else strncpy(user->name,name,20); socket_init( &user->socket, &net_sender_addr ); user->hidden = 1; /* don't get the ADD_USER message */ channel_add_user( main_channel, user ); user->hidden = 0; } /* tell user that it is accepted */ msg_begin_writing( msgbuf, &msglen, 32 ); msg_write_int8( MSG_LOGIN_OKAY ); msg_write_int32( user->id ); msg_write_string( user->name ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); msg_begin_writing( msgbuf, &msglen, 2+strlen(greetings) ); msg_write_int8( MSG_SERVER_INFO ); msg_write_string( greetings ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_SERVER_INFO ); if ( user_count == 1 ) strcpy ( buf , _("1 user online") ); else snprintf( buf, 128, _("%i users online"), user_count ); msg_write_string( buf ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); msg_begin_writing( msgbuf, &msglen, 4 ); msg_write_int8( MSG_SET_COMM_DELAY ); msg_write_int16( server_frame_delay ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); /* send default channels */ msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_CHANNEL_LIST ); msg_write_int8( default_channel_count ); for ( i = 0; i < default_channel_count; i++ ) msg_write_string( default_channels[i] ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); /* send levelset names */ msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_LEVELSET_LIST ); msg_write_int8( levelsets->count ); list_reset( levelsets ); for ( i = 0; i < levelsets->count; i++ ) msg_write_string( list_next( levelsets ) ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); send_full_update( user, main_channel ); return; failure: /* send error message as connectionless one as we have no * connection so far */ errbuf[0] = MSG_ERROR; net_transmit_connectionless( &net_sender_addr, 2+strlen(errbuf+1), errbuf ); } /* void handle_command * IN ServerUser *user * IN char *cmd_line * * Handle command send by the user. The admin has more commands available * the a normal user. */ static void handle_command( ServerUser *user, ServerChannel *channel, char *cmd_line ) { List *args = parser_explode_string( cmd_line, ' ' ); char *cmd = list_first( args ); char *name, *limit, *text; int val; ServerUser *target, *remote; ServerChannel *target_channel; LevelSet *lset; char buf[128]; FILE *file; if ( cmd == 0 ) return; if ( !strcmp( cmd, _("search") ) ) { if ( (name = list_next( args )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("search: specify a user name!") ); return; } if ( (target = search_user( name, &target_channel )) == 0 ) send_info( user, MSG_SERVER_INFO, _("search: user is not online.") ); else { sprintf( buf, _("search: %s: in channel %s: %s"), target->name, target_channel->name, user->game?_("playing"):_("chatting") ); send_info( user, MSG_SERVER_INFO, buf ); } } else if ( !strcmp( cmd, _("version") ) ) { sprintf( buf, _("transmission protocol: %i"), PROTOCOL ); send_info( user, MSG_SERVER_INFO, buf ); } else if ( !strcmp( cmd, _("info") ) ) { sprintf( buf, _("user limit: %i#frame rate: %i#packet limit: %i"), user_limit, server_fps, server_recv_limit ); send_info( user, MSG_SERVER_INFO, buf ); } else if ( !strcmp( cmd, _("addset") ) && user->admin ) { if ( (name = list_next( args )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("addset: name missing") ); return; } /* can find levelset? */ if ( (file = levelset_open( name, "r" )) ) { fclose( file ); lset = levelset_load( name, 0 ); if ( lset ) { list_add( levelsets, lset ); msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_ADD_LEVELSET ); msg_write_string( name ); if ( !msg_write_failed() ) broadcast_all( msglen, msgbuf ); } else send_info( user, MSG_SERVER_INFO, _("addset: file %s corrupted"), name ); } else send_info( user, MSG_SERVER_INFO, _("addset: file %s not found"), name ); } else if ( !strcmp( cmd, _("addbot") ) && user->admin ) { if ( (name = list_next( args )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("addbot: name missing") ); return; } if ( (target = find_user_by_name( name )) ) { send_info( user, MSG_SERVER_INFO, _("addbot: bot '%s' exists"), name ); return; } if ( (limit = list_next( args )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("addbot: strength missing") ); return; } channel_add_bot( channel, name, atoi(limit) ); } else if ( !strcmp( cmd, _("delbot") ) && user->admin ) { if ( (name = list_next( args )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("delbot: name missing") ); return; } if ( (target = find_user_by_name( name )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("delbot: bot '%s' not found"), name ); return; } channel_remove_user( channel, target ); } else if ( !strcmp( cmd, _("set") ) && user->admin ) { if ( (name = list_next( args )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("set: variable missing") ); return; } if ( (limit = list_next( args )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("set: value missing") ); return; } val = atoi( limit ); if ( !strcmp( name, _("userlimit") ) ) { user_limit = val; sprintf( buf, _("userlimit: set to %i"), user_limit ); } else if ( !strcmp( name, _("packetlimit") ) ) { server_recv_limit = val; sprintf( buf, _("packetlimit: set to %i"), server_recv_limit ); } else if ( !strcmp( name, _("fps") ) ) { if (val > 0) { server_fps = val; server_frame_delay = 1000/val; sprintf( buf, _("fps: set to %i"), server_fps ); } msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_SET_COMM_DELAY ); msg_write_int16( server_frame_delay ); broadcast_all( msglen, msgbuf ); } send_info( user, MSG_SERVER_INFO, buf ); } else if ( !strcmp( cmd, _("kick") ) && user->admin ) { if ( (name = list_next( args )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("kick: specify a user name!") ); return; } if ( (target = search_user( name, &target_channel )) == 0 ) send_info( user, MSG_SERVER_INFO, _("kick: user is not online.") ); else { if ( target->game ) { /* bring em out of the game and tell the remote * that the game is killed*/ remote = ((ServerGame*)target->game)->users[0]; if ( remote == target ) remote = ((ServerGame*)target->game)->users[1]; errbuf[0] = MSG_ERROR; sprintf( errbuf+1, _("Sorry, but your opponent has been kicked!") ); socket_transmit( &remote->socket, CODE_BLUE, 2+strlen(errbuf+1), errbuf ); server_game_remove( (ServerGame*)target->game ); } msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_SERVER_INFO ); msg_printf( _("ADMIN has kicked %s."), target->name ); broadcast_all( msglen, msgbuf ); channel_kick_user( target_channel, target, _("admin kick") ); } } else if ( !strcmp( cmd, _("admin_says") ) && user->admin ) { if ( (text = list_next( args )) == 0 ) { send_info( user, MSG_SERVER_INFO, _("info: a message is required!") ); return; } /* don't show just the first word */ if ( (text = strchr( cmd_line, ' ' )) == 0 ) return; /* will never happen */ msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_SERVER_INFO ); msg_printf( _("ADMIN says: %s"), text+1 /*don't double the space*/ ); broadcast_all( msglen, msgbuf ); } else if ( !strcmp( cmd, _("halt") ) && user->admin ) { server_init_halt(); } else { send_info( user, MSG_SERVER_INFO, _("unknown command: %s"), cmd ); } } /* void parse_packet_channel * IN ServerChannel *channel * IN ServerUser *user * * Check all messages in packet from user who is located in channel and * not playing. The header has been successfully processed and the read * pointer is at the beginning of the first message. If a message occurs * that is not handled, the rest of the packet is skipped as we don't * know its further format. */ static void parse_packet_channel( ServerUser *user, ServerChannel *channel ) { int id; unsigned char type; char name[16]; ServerUser *recv; ServerGameCtx ctx; ServerChannel *newchannel; while ( 1 ) { type = (unsigned)msg_read_int8(); if ( msg_read_failed() ) break; /* no more messages */ switch ( type ) { case MSG_HEARTBEAT: /* updates the socket information automatically * so connection is not closed */ break; case MSG_DISCONNECT: user->no_comm = 1; /* receive no more messages */ printf( _("%s (%i) disconnected\n"), user->name, user->id ); channel_remove_user( channel, user ); break; case MSG_QUIT_GAME: /* if player looks at error message and breaks up * game (e.g. waiting for stats) it will send this * message which is simply ignored */ break; case MSG_COMMAND: handle_command( user, channel, msg_read_string() ); break; case MSG_UNHIDE: if ( user->hidden ) channel_hide_user( channel, user, 0 ); break; case MSG_CHATTER: /* if UNHIDE was dropped user can become visible * again by simply chatting */ if ( user->hidden ) channel_hide_user( channel, user, 0 ); msg_begin_writing( msgbuf, &msglen, 128 ); msg_write_int8( MSG_CHATTER ); msg_printf( "<%s> %s", user->name, msg_read_string() ); if ( !msg_write_failed() ) channel_broadcast( channel, msglen, msgbuf ); break; case MSG_WHISPER: id = msg_read_int32(); recv = find_user_by_id( id ); /* all channels */ if ( recv == 0 ) { sprintf( errbuf, _("There is no user by that name.") ); send_info( user, MSG_ERROR, errbuf ); } else { msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE ); msg_write_int8( MSG_CHATTER ); msg_printf( "<%s> %s", user->name, msg_read_string() ); if ( !msg_write_failed() ) { socket_transmit( &recv->socket, CODE_BLUE, msglen, msgbuf ); socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf ); } } break; case MSG_ENTER_CHANNEL: strncpy(name,msg_read_string(),16); if ( strchr( name, ' ' ) ) { sprintf( errbuf, _("Channel name must not contain blanks!") ); send_info( user, MSG_ERROR, errbuf ); break; } newchannel = channel_find_by_name( name ); if ( newchannel == 0 ) newchannel = channel_add( name ); channel_transfer_user( channel, newchannel, user ); break; case MSG_OPEN_GAME: ctx.challenger = user; id = msg_read_int32(); ctx.challenged = find_user_by_id( id ); strncpy(ctx.name,msg_read_string(),20); ctx.name[19] = 0; ctx.diff = msg_read_int8(); ctx.rounds = msg_read_int8(); ctx.frags = msg_read_int8(); ctx.balls = msg_read_int8(); errbuf[0] = 0; if ( msg_read_failed() ) sprintf( errbuf, _("OpenGame message corrupted!") ); if ( ctx.challenged == 0 ) sprintf( errbuf, _("User with id %i does not exist!"), id ); if ( errbuf[0] != 0 ) send_info( user, MSG_ERROR, errbuf ); else server_game_add( channel, &ctx ); break; default: printf( _("channel %i: %s: invalid message %x: skipping %i bytes\n"), channel->id, net_addr_to_string( &user->socket.remote_addr), type, net_buffer_cur_size - msg_read_pos ); msg_read_pos = net_buffer_cur_size; break; } } } /* void find_send_user * OUT ServerUser **user * * Check all channels and games for the user who's socket address equals * net_sender_addr and return a pointer to it or set '*user' 0 else. * * This is a linear search and should be improved. */ static void find_send_user( ServerUser **user, ServerChannel **channel, ServerGame **game ) { *user = 0; *channel = 0; *game = 0; list_reset( channels ); while ( ( *channel = list_next( channels ) ) ) { list_reset( (*channel)->users ); while ( ( *user = list_next( (*channel)->users ) ) ) if ( net_compare_addr( &net_sender_addr, &(*user)->socket.remote_addr ) ) { /* we have found the user. check if it is playing a game */ if ( (*user)->game ) *game = (ServerGame*)(*user)->game; /* is a void pointer */ return; } } } /* void remove_zombies * * Close overflowed connections and users that were idle for too long. */ static void remove_zombies( void ) { ServerUser *user, *peer; ServerChannel *channel; int cur_time = time(0); list_reset( channels ); while ( ( channel = list_next( channels ) ) ) { list_reset( channel->users ); while ( ( user = list_next( channel->users ) ) ) { if ( user->bot ) continue; /* are never removed */ if ( user->socket.fatal_error || cur_time >= user->socket.idle_since + 60 ) { /* either the code red buffer overflowed or the * user did not send the heartbeat: a zombie! */ /* bring users to channel if playing */ if ( user->game ) { peer = user->player_id==0? ((ServerGame*)user->game)->users[1]: ((ServerGame*)user->game)->users[0]; send_info( peer, MSG_ERROR, _("Remote player has disconnected!") ); server_game_remove( (ServerGame*)user->game ); } channel_kick_user( channel, user, _("zombie") ); } } } } /* void handle * IN int ms milliseconds passed since last call * * Receive all packets at the single UDP socket and check wether it is * connectionless (connection requests) or belongs to a connection (socket). * Find the user and parse all messages in the packet. * * Remove any zombies. (no heartbeat, buffer overflow) * * Update games. */ static void handle( int ms ) { int recv_limit; ServerUser *user = 0; ServerChannel *channel = 0; ServerGame *game = 0; recv_limit = server_recv_limit; /* limited number of packets if not -1 */ while ( net_recv_packet() && ( recv_limit==-1 || recv_limit > 0) ) { /* handle connectionless packets (login requests) */ if ( msg_is_connectionless() ) { handle_connectionless_packet(); continue; } /* find the sending user and its channel by comparing * net_sender_addr. */ find_send_user( &user, &channel, &game ); if ( user == 0 ) continue; /* check if this is a valid packet and update the socket */ if ( !socket_process_header( &user->socket ) ) continue; /* extract the messages */ if ( game ) parse_packet_game( game, user ); else if ( channel ) parse_packet_channel( user, channel ); if ( recv_limit != -1 ) recv_limit--; } remove_zombies(); update_games( ms ); } /* (re)load all levelsets from the datadir */ static int load_levelsets( void ) { DIR *hdir; struct dirent *dirent; list_clear( levelsets ); hdir = opendir( SRC_DIR "/levels" ); if ( hdir == 0 ) { printf( _("couldn't open directory %s!\n"), SRC_DIR "/levels" ); return 0; } while ( (dirent = readdir( hdir )) ) { if ( dirent->d_name[0] == '.' ) continue; if ( dirent->d_name[0] != 'N' || dirent->d_name[1] != '_' ) continue; list_add( levelsets, levelset_load( dirent->d_name, 0 ) ); } printf( _("loaded %i levelsets from directory %s\n"), levelsets->count, SRC_DIR "/levels" ); closedir( hdir ); return 1; } /* display help of command line options */ static void display_help() { printf( _("Usage:\n lbreakout2server\n") ); printf( _(" [-p ] Bind server to this port (Default: %i).\n"), server_port ); printf( _(" [-l ] Maximum number of users that can login to server.\n") ); printf( _(" [-m ] The text in this file is send to new users on login.\n") ); printf( _(" [-a ] The user logging in as will become\n") ); printf( _(" the administrator named 'admin'.\n") ); /* printf( _(" [-D ] In this directory the network levelsets are located.\n") ); printf( _(" Note: To upload levelsets as admin the directory\n") ); printf( _(" must be writeable.\n") );*/ printf( _(" [-f ] Number of send/recv handlings in a second.\n") ); printf( _(" (Default: 33)\n") ); printf( _(" [-b ] Number of paddle bots with 800 and 1000 strength\n")); printf( _(" each. (Default: 0)\n") ); exit( 0 ); } /* Parse the command line. */ static void parse_args( int argc, char **argv ) { int i, len, isf; FILE *file; for ( i = 0; i < argc; i++ ) { if ( !strcmp( "-p", argv[i] ) ) if ( argv[i + 1] ) server_port = atoi( argv[i + 1] ); if ( !strcmp( "-l", argv[i] ) ) if ( argv[i + 1] ) user_limit = atoi( argv[i + 1] ); if ( !strcmp( "-f", argv[i] ) ) if ( argv[i + 1] ) { isf = atoi(argv[i + 1]); if (isf > 0) { server_fps = isf; server_frame_delay = 1000/server_fps; } } if ( !strcmp( "-D", argv[i] ) ) if ( argv[i + 1] ) strncpy(datadir,argv[i + 1],128); if ( !strcmp( "-h", argv[i] ) || !strcmp( "--help", argv[i] ) ) display_help(); if ( !strcmp( "-m", argv[i] ) ) if ( argv[i + 1] ) { file = fopen( argv[i+1], "r" ); if ( file == 0 ) { printf( _("greetings file not found, setting directly: %s\n"), argv[i+1] ); snprintf(greetings,256,"%s",argv[i+1]); } else { len = fread( greetings, 1, 255, file ); greetings[len] = 0; fclose( file ); printf( _("greetings loaded: %s\n"), argv[i+1] ); } } if ( !strcmp( "-a", argv[i] ) ) if ( argv[i + 1] ) strncpy(admin_pwd,argv[i + 1],15); if ( !strcmp( "-b", argv[i] ) ) if ( argv[i + 1] ) server_def_bot_num = atoi(argv[i + 1]); } } /* Initiate network connection and lists. */ static void finalize() { /* disconnect all users */ errbuf[0] = MSG_DISCONNECT; broadcast_all( 1, errbuf ); /* free lists */ if ( channels ) list_delete( channels ); if ( games ) list_delete( games ); if ( levelsets ) list_delete( levelsets ); /* close server socket */ net_shutdown(); /* free default channel title */ free(default_channels[0]); printf( _("server halted\n") ); } static void init( int argc, char **argv ) { char name[16]; int id = 1, j; /* i18n */ #ifdef ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); #endif /* initiate sdl timer */ SDL_Init( SDL_INIT_TIMER ); /* set signal handler to cleanly shutdown by CTRL-C */ signal( SIGINT, signal_handler ); /* welcome message */ snprintf(greetings,256,_("Welcome to LBreakout2 online!")); /* default channel */ default_channels[0] = strdup(_("MAIN")); /* parse command line options */ parse_args( argc, argv ); /* open single UDP socket */ if ( !net_init( server_port ) ) exit(1); /* create empty lists */ channels = list_create( LIST_AUTO_DELETE, channel_delete ); games = list_create( LIST_AUTO_DELETE, server_game_delete ); levelsets= list_create( LIST_AUTO_DELETE, levelset_list_delete ); if ( channels == 0 || games == 0 || levelsets == 0 ) exit(1); /* load levelset names */ load_levelsets(); printf( _("user limit is %i\n"), user_limit ); printf( _("FPS: %i (delay: %i ms)\n"), 1000/server_frame_delay, server_frame_delay ); /* add default channels */ create_default_channels(); /* add default bots */ for ( j = 0; j < server_def_bot_num; j++,id++ ) { snprintf( name, 16, _("BOT%i-800"), id ); channel_add_bot( main_channel, name, 800 ); } for ( j = 0; j < server_def_bot_num; j++,id++ ) { snprintf( name, 16, _("BOT%i-1000"), id ); channel_add_bot( main_channel, name, 1000 ); } /* build angle table */ init_angles(); } static void signal_handler( int signal ) { switch ( signal ) { case SIGINT: if ( server_halt ) break; server_init_halt(); break; } } #endif /***** PUBLIC FUNCTIONS ****************************************************/ int main( int argc, char **argv ) { #ifdef NETWORK_ENABLED int last_ticks, cur_ticks; int ms = 0; set_random_seed(); /* set random seed */ init( argc, argv ); /* loop and handle messages until shutdown */ last_ticks = cur_ticks = SDL_GetTicks(); while ( 1 ) { last_ticks = cur_ticks; cur_ticks = SDL_GetTicks(); ms += cur_ticks - last_ticks; if ( ms > server_frame_delay ) { handle( ms ); ms -= server_frame_delay; } if ( server_halt && time( 0 ) > server_halt_since + 5 ) break; SDL_Delay( 5 ); } finalize(); #else printf( _("LBreakout2 has been compiled without network support.\n") ); #endif return 0; } lbreakout2-2.6.5/README-SDL.txt0000664000175000017500000000065112140767214012645 00000000000000 Please distribute this file with the SDL runtime environment: The Simple DirectMedia Layer (SDL for short) is a cross-platfrom library designed to make it easy to write multi-media software, such as games and emulators. The Simple DirectMedia Layer library source code is available from: http://www.libsdl.org/ This library is distributed under the terms of the GNU LGPL license: http://www.gnu.org/copyleft/lesser.html lbreakout2-2.6.5/mkinstalldirs0000775000175000017500000000653512140767214013344 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2004-02-15.20 # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit 0 ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # 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: lbreakout2-2.6.5/docs/0000777000175000017500000000000012610471366011541 500000000000000lbreakout2-2.6.5/docs/x7.jpg0000664000175000017500000000116712140767175012530 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("1 !1Qa"%2Aqs2A ?}_V)! ey()$t pz #f8 *4؊񧚑i!aX>FUըwe~<_f']BCnS,=\d8*Ou&)6=-Vݮ*+oŔ|#6r\kOoL$2y>{"ݗ}fyNKkIV<7.ZE$yG@f5RVHPK QȜc=+gK&dR JYBs ?lbreakout2-2.6.5/docs/x20.jpg0000664000175000017500000000136412140767175012602 00000000000000JFIFAACreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("-!1AQ2a"Rqѱ%AQ!"12aq ?V.2)% B0 [*h8moQLW)ԀRmF%XFѠucUok"'U^*fHaI-4sKB}$ݳ21wn CYNvwr據[m ijԕ!0Ju%uxW|cۗWU7]AMPZzc!*tԉUdZ(!R! GCSѮʀK:֒ '36F7,-@WAFLNRSR2>ZaZP`JQROC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOh"Y !1A"Qaq#2B$3Rbcrt%456Dds&CEFVSTu3!Q1"2ARaBq3# ?^B ^pT7 @Y?u\2vًˏymJت. PZs( ޺9e3n-N%#m%X+R߫?ס d56B*0T9 |P_% g>f[؍5RRTT4gCT3T'tkB }|=[/Weܚ3^"kRhʼIPԠN6U[v;nS-k ޞu9JĤpUxݦZvZp`QQ}/KrE:_?rAƯFHjVC.^J21>ͫB /*淰P.pNvhf FC]Y'@3][߿vm:wX p:*RBtL`TݰFb-&k+qc>ᎀ޺-_CVG[io/a0 h<-ԎzC*q_ǥAĪ~:RppuZmSi; 3pv;ĩcCvV$l$UőI)p}B9H=~Kln4mjn0p(@%!Ag1jbʤ{qWkIszֻ,ytqd~~m cl0/",B*x,d.!lsМ 3iK$TO%=J?ePRRPN|ԖlKebSa!`)K%zs }{ Z`6ejoLW[ RU{C(*)"{.!Y*RԼܞ6)ʁZ؂~ڤE>ܤ(HV7ɷzPޒՓjb2V/*QUQ$_}`jJg=\amR@ӂ0\E$qZxiKR$>W&H򤃍^T\O-)*l'!Y',+Q2bJ 'Y9Ռ jN*:TqrUsn w}.)˅jQ=X6

]wZb˒-f>6!G Q\zmhv !DeY۰ cuK%֕ӧy֬^4mþ cLX8mbP:]߷o\RI;~ʍf")Uzj5̠ƌF~V亰xjmRY HԤp6;U>qSՃ&Eb>Ci YҴmkKLq8#}oUheGk!vڌw8-)e!oաΘ!G) T"sד)dvZɜ[2Y\l,Ŝ2iOB ִړ9[%wm m n[yO(^LX* (e9'߷JVTJTVis$) ?Q2Opy<46; @NR*E{$ߘA[q'- [4?nqRgI'I[[~?**$ ׵[jԆz2wJY?|=Kp=-Yhdzw $%DvZC)3UjBG2<> ! 5q%1RmyJZU5T5H|oud,j=dn?ڧ-(~R $U H‚T[RB:1錓Uvp}% }*U!|6Ɲ[`Wj̻hj:=NAm؅ImY)I988#l  p+=q^5g;msTG˒^e:UR.Ƥr`וey#YI+P)ϥVdrgMm2#gFp2W rJRp1PZbDՠ! );>ʸԦ:H![jp>כfӨ:8k()pF}⯜EI[yXgwTH%skPVbnBv9 R)@)JP R)@)JP R)@)JP R)@)JP R)@)JP R)@)JP Rgm(S*4'3rc?,(kY-߱+8iRJuljQA)za#׾-d6'$jNХmBQ g cRյJvKr*DZ]ψjJU2TO{&zSQqe$ ]5na`qJ*Vf=+SZ\G^-:]{meÊJx2R{^\-J~ڴ^Rl)@)JP R)@)JP R)@)JP R)@)JP R)@)JP R)@)JP R)@t_]:VXiN$qֲ8RBuc9X7mQ'Ki*N称VuQ D};/Bٰl=3TңØZ u@" iTt zwVcrV9)^ 6)X7){jVVtgWgiaS!EY)Rw2Obχt|@NXMYRll>V6dWV4S$}kmOWޫWҔt^Jff2f=% 9+ʵnҘýSNwz-I"$+ݠ쩜D}6^LV^4rj+S?d堫 #8õt7"*N?Umb5 NJ.)aI9ҋ}Jm31˙Igf\i5Vpf#? MZ_+OqlF݆j$HcX]q|A1HmJo##4VCuĿ{R2CNVXƮNy r;WEMao,hύ{F@ø5Mx=V*fsz}<=6^lD4??>H\>etI5W<]NsTӶsSsNH8)&l1˚}txwKä-8 -?OµAIaԟsFT*ʴ׆3~&merEi-)Vaάv4ZE'IWJһMFM8o)޷Ee!*SKH)>eL#Oµv_I*ZiՓl!N<ǜֶ̹69*ꄸCa';,;W-YDt+u))c0W3 =sWq֋kn5KB1޳SVD-? >Pq/Ԅ ӧV#F1wө)+X2bڔ0 FGѨahk}=6H\'Nn&wEt+U(I+2BQI#0ø5""Kw\CQU L:_2~W<]NsTӶsӥI4I6jǑ#̸|kif\ֽ2rGI^W-8 -?O°E#J3c=I*ʴe1h#i|latmmfhRA;ՅٗԡR2>SOkT7\K!$:UouljnMW!IӸ۵tT_MfƏ 0i4 ;+.Xڎ7Οbl?q ? ܍e&IncK(c*D2+Om AȺs֝mM2rGI^WISRFړv6e>M<;%ak qZŠO¹#|lr\}>X=G_+cƍ5ZVdvA\}ܵcJRɱPJ'zdv]5Y#ȝ"H06`:⫣i7,H}_N2Gv+@ c`k[VN1]U uH)AJe@vǁIzB. 9=݇aĈ%YU-rb!$`ZYڴ #`qֽNe-ϧ5̒pu&0 ƿ ]JR`Woc][I#uWe#v䙱%?6(JQ\:RW:N=ubb<>0?p5_;ڎz~z|n},l]l[m! }*"e JU d egVUi,Y!mMpݱrmJ_S)+5<.1qO)ET>58)HPX8eë>^)pڵzkB5znÕbHZ@`z5IPF:&[Y9dJV3\_]wz3Wq\KNr3Һt /VԔa?'#>5ptV.F?'ƫOe;Ư\l]R*qVcxIpFRij\P&;ю8T'_ɵ+f(8zЭeSb6ZT8#r3ҳoΔXe[ƽa-K9i2u}l֏eI=j5|.vb*qnȸ1Nҟg|kdvoO1>T.߆skL%|db. '{GHT6A)\1V |jmMpݱrmJ_S)+5JA՟OUswl3E8)HPX[XkRVX9ޡx)pڵzj-V},^2L+f E2Z4uW6~1ƴ* j9NX[v.Fr6K)iFzT.F?'ƫV|&rr3QI- o|[b q ZO8 EuOe;Ư[--@w-aa@BEZ|.bjr>$7q5x OƩ2ȵ)i+}u^;aIjlc6ZT8#r Tf(8znkzKqZL_[5|.ř~ 9Ҝzy8 J}aeI=j5wЭeSb;eSi 'CP (lRC c+8L%|dbϷ֤6.MR t%"BfG.)3%6h0ʐ{yƱ1) xug|ke;V_sVSbmrS5H,Vw6~1ƴ*D+pUpy'#)J}v.Fr6K)iFzWN0ڒ'puƱwR%H;|i⬧tұxkB7MC\CeBS*Ǒ]jy}@jY56)]NEU%P+A=t/Y) k!q6KWtH#NFd@Y9ڴJRIJSҤ)JF}zԬ)]  Jpf\I& H) K@F(NMmyH+fu|$I+p!Orp+Ś-Q)ƔZFJf]X9LdlgP>&u U6=rƈCe.H=rv>!#FCm>UVgKLɲQ|ɍLNm}rTJLQM6Jn>!okgԡsBOɃQ',60}|({ߊ<&[:D[ۑJI5 ).6Kx8Jb-m+KA8[ƣzmԨ-B7`U=F楋q &W*%[c5ɰ9L֖e9BP㡂%Y' w+O*E֗-!nPgW\֏[s*M<Ǭm= ԌS#P 㛽bUuS~@ w$cESCYOcv?){^|9EX9> Ə}yvst4ygjnhPY1e6#F|EJ;|-˄bE`XFPKLɲQ|ɍLCJSЇ{, W1XWn>!ojkr؍v~G*{Qyqg+H'AdUDSg֙MR-YHJPIUʉ>QaEFJK$M?rҦ'onF#*'d"|,zսco/niZZ ܎5tN4dj3,UB||Q5526\Cg)AΜXʉVbEn_irnB 0puEBɷ+c%Y' wc$jsw&ۙRlQ=ckuG_,{v–E{ʢvKR܄ >U`K%H?+(ڤA[1^]⢥( mYڈnڢDm9B;mbS*IBdǧ~U@,{ d\;|-˄bEyxrѐjiOsYo%IJlTd2co5lFS#_\=8ҳDwM7[s5(\Г `ǯ~TI _ )rt) Î%(Q$iË͑(xiPY~ZUrdv[R@-GvwҨ9$'/}՛h[i]7pMnW3[і. 7i*NtOqln)wpRI`y(Js;?1 lȮ0͎i/BO ^{)Vn A.1@=:V'YUEIy%9@Ӑ˵*m]^GMOSOCq98=~e5D#9nv2^ǭdvxX/%_IgWDii>[\#Q S{ZBZ6RwǷ̫NA![Ve>9D2s]˗_oGg;Jjs">siθ6 2uœ5iy[d_e>X@UcOsm5Js*xyV&moW_?wS)w <zJjs"_Qt{(7'QNկJsϧ!UǸN cJsA^GMOSWŒWǿLZ~V7;\wun/rNcֺCq98=~e5wK!'f2!e[s \?giEQUq NA![WHJJSR,ֿ/)?%5]E>l?s3- t!:0q p x\T/3%5}SLPm)ȌV?rm}AaYWA ʴ1;t{}NlͶudԫm/֥█) }+;rS[&}sr4+(+Լ*?sfM(N9*=.9䪺߯. np9)k~Jjs">qi͙^~djC7HOGryWTLA9)5}u25:Xҥ$mjNcJsϧ!UkOўT*ں#|0o̦/^rpzjs">qi3swY$qZ+rp( Ok=jTwT֢g֪6RwǷ̫NA![Ve>9D2s]˗_oGg;Jjs">siθ6 2uœ5iy[d_e>X@UcOsm5Js*xyV&moW_?wS)w <zJjs"_|32-(I=j}ˢ},1WS1k\RM g$KnhQ`R$BInyPV#5SZdi9VI^Fe$Hsu\8s\bCMDsm6l *@ܟ~ylR%YQVg\muLJb65էTO#wE8kɈ-PN47a7o5!  U_)[2+e-Vv>;eD`6~y,isSݟUA 6**-n̒@Nn75g}57M56Cm # B",l!dX|?V%k#+p3sʹL 󦧄πmZmSDpy+XڛG-M 8eo!vy*T$N\eu5tSaBy oH*q;|3WC.qN~QjxLc;&Bo@$I䀎JNwY`"V_~<~!-It-eGPsF2~Qlvܶˤ$vYK=.[|9gKyաDV2Ef]MKdPy)Q.K\Ч4dsR|\r9JK[$P[OПsSݟUA 6*9FGeL̚즚!dP\]HRh:RՀrۅԔ,$9Q;rtk5E7w8yrX2]r;QH4+fvܷר"`gZu]W FTL|QS<(u%Н?_h`]J8| u;,kROBg^yzxZۻDbm;߾ G?`r% )arCa@T0k{<)RH3?B6WzPDnf'X7m:!r ?rԕ>Sq:x\ٷ?J#xԿc5ˋM x`6\Sq:xDG.i hU,`m䨬mnD)d^-#;ꟇJ8ˀAXQUT6i%JYʕinX/"6;#p'Z܇vBJ^?W$D緜iAj4L=u6s'm% jMo.'T-[x- vUVZd$ݛЮNpwRۻDbm;߾SЫnYl6(JT} Uzȝ<{ w*PJw+9[Kpb~5>3œ>5(jT8Y% ?d%L}Ni, =j6iDt/cZ#*)??K(nIN$oZ_ mp;k'8:)Fm޴x+N'ߞ'ox9♩ԼHʩ$cI']z]=-?˚xmK*k@y*+%\)eCշq%7'Ȫpm.yjj'WH/kI*RTS^%y?|t:!ݐ`Giծ.szo\|3$ ]ɮ[1?jՔ%o%!1۪.쪄= N/~40.%>:x @^~5)'VF{'΋ivy=l(aN%;r %IP² J#88h]UB:1殜<=b`]b~5oiGRTR~4L=_sfwm(RBUoWW./I6Npt'R۽pY@pJti%DzfR#( ݗ^ S᧷ i!H=W3)eC0Dr [RʚJAAZI3},>EUB$K9R}M>YMޅFd`Nk[IQ#C蒼9H#mCF)<\]9K/>@l=CVDwu )N0>Uut)aSRBd-+,2KlN(U)u굕d#ք1V1Tu#kbuaٮ#![鰨\S 4ӲJ@ J}GPP~l͐[l}:zR}P9H#;돮"2҈CiQ!8HThuFrv if!Ys` Rvjy?Y`Lw]a4_Qn)K=N{tZ+fu|dmݨ"2 sLJ`gxbpEڢb3`^iWY<0GHTŖ-xlդ_[ nrj+#[w>$>m{߽[..X-3ᖔ(ItIQ MZ0:+baϠ+{)+qfIM?0uÿX?u)`S[ChiOMk nKnЧ 9r)cի򓯽:\XN* W9%&5IBGzxnook-n: ך~I &6`7==6ݙKZIOgNB25sH#׸ڪ ZmRц[ k nK[..X-3ᖔ(ItIQ[pquB}\'NA\j e6Zc)+V\?u)`WݡODZrdSG^y*OQM }i%&5IBGz].tw+m'_zuI}Tv'W|÷Z*[[Z7 5FRw+. z|*Zƺ"O)sAU-$սa)*۸2M{p҆Nt^d'A~i&l!'*Vr7k D~+XKr\]Hp9 H _S7>U9i玲P-Tcl8YQ3`^iWY<0GHTŖ-xlդZ[嫐Lmx;~l`γZS%%G$ T-6hh譊}> O]5&W)4[pqub\ =oLYo9 #m>5%.IB.Ȧ :UVVۧNqa:6\䖐<% CMۊI⩺լJ6?^;{su`mSWF'7 5)I5%%81Juad$e'$V ( UE)TbU x(tXFS&3g8ޠ'tf]o҅h%E$Bq!'f3º5\Pq٨Yϝe2i/Y '$A@B)T R)@)JP R)@)JP R)@u Ç xr _ƝJl=zlpjOf\y '':k I!I Km5vE"ʆQNzU%זlЊ.r}P?^bm,?U<#kӀ(,(-ĕ%]4""\#RXPq)Q)#{bƗN}1J]ӥR?3CH)Ko8ieK|^uX%h6$ TOu~/ʭl)oj$R6b 8q1*0y,N2,^-7)['ddkTRUKQ @eTi$碔: TZe3&k(F@AYZ?׿I)T)@)JP R)@)JP R)@)JP R)@)JP R)@)JP R)@)JP RYe9J%;==͸p%)=s|jm3npl9FV4Lqv7^nR=goD.2D.@Zz@õrS$e('t'݁V]RRc}E)ITV͓ԩkof=2,} +W`dlXq' Zvbӳ0)=09ssl(id5Raad*c2K.%GVX3ܖQmDcӮNVVg?eë]-jkɖM6G0sU'uG ww9Jy,+ZX'zkym%EPh ^@'a~j&5iK&$9) hWs眭)J()JJRR()JJRR()JJRR()JJRR()JJRR()JJRR>8xb ҆Ù%`b{j!9(U muJp)Iǝ{NAvICΡx$'o\ivse K`izTOyJ앎MܞR! Y^GN47^0T;{\Yy?<]zcR,v%oמ^39_L>NCd^QMO}9r3pU? ;D~ե%rV>`PψF,,nu` aZg>.|\GsZ\) GBڼrV4['' +; .$8Pq!gqpS+|oPWo[p2d56JB?G8|d骹^lh~nwYIN26FIX1< ^aΡV 8ؑ Źu JtR\@NF޵Gă63ZYgVT JRH=52r*R۬.a=s)Aq6*cHW #q֨ T۬6N2lӨZұ5cU@)@)JP R)@)JP R)@)JP R)@)JP R)@)JgO%ie'(n*U%ꚷخInr {l>v99Ơ(Soz 7C 䐕3ڡU)@v JNc鼃 @n$rRHA- 9S.roC)hY'W M+y#^`{+3cd֌dgc@u(iYR A; $_>{UTff>-PM3u)Բ#8{Vb8sl_O/JJL>[3_BS)Mhj!kSH wν,#OZ4޷;B5M7eF+.ೣfk!ێ,սvRRp&ITBr` [jyEN)[ 31JTԄZ>m6ܐ9VwFs.Р5М\+.. ig*&s;v/@hZA; }\C); ! i {Rs!M6\QXتJ'eբ嗂X@)`-*t2 6Z2RN:b3 }oF8TR4}߲ _=nIxVq0l5,r`ȁ2?ė&aƄz#[88q؏^\8 C%¾\qQd]6$oJR1J|1v.7%nnHnÈ9nʖBi½wҶS-6-RN0r1"uBSirKjV{ =\T?#y򕺑;秾2䕶Ht d8NH YZ9RҨ$f#%^jvDz돼^Y[%JQI5FGI9ӝVM:KY^@RO, =q-Zy,PC}r*IQATIozUX v7gR}rB %?KPZ^]#P)QJ{WxlۮNcl_j3.tX.+>q>ktslo,`Zt9 bGiqS⪓}RɫF3E^~M2 ⫋#u8N2JqD`JJ{htŋv-ctO[ #tŋwp8 N>m A :Y甯qF?OCUF0:f1b+{-lFfCJAJccUp$*@+Vѝ9t+,=r"K }-E@(gIHEZۘLPYϿ! .#zzI&/ o",F|U1bt^yZwZdsSlTzVfQqvfqaQr RaЗdd( #5Xt.%?6;T)>(p]?U2c݈žJهB5_W OU{+<}k Z8Wh R?eIW nqt\f=1V֪ƆKW"R2 1fvҕMS_Ƞt8zt+aU+& D{ypX)d52m(eѣ)I5m[qYդZRS `gY)J}6Z}{W^Dw)w֯.**9+tfҠ0y:6z1cz3mi F'H~Z6O2qQAOoC] ,EĴ?5 Uk;ADyu놢zm+)*j4)vG3 G1*yI Q.R䥖vtByjO`rC_|ڶ;m8մA{&ƹU=B$M8[P)!h]ZZyNBKEDf`dfmŋEIх4=F9nS?E>fTGPv$ȶQ!R.))Yh)$B:pCMZX[H'H'2 hl:ǟzBuTV0O3eܒ뜴´cSVIέ%SKu-e$'ϤOm隀̩,!hbC +ߎ㏺J>P;lp}'?jCK$Kml*#p1:wn$!i8[;(C ;c6*!,2^.C XY}Ҡ~eD}2ˉs4PMRn. R6|*t8>يڋt%55{jss^(6VTA;dżLQ |p=P)KQRIkV97sPb\JA%:3ՕN” ֹL_*RRⲑHJKe8j|XV,hn T^a"6wQ9S-J#]%Cn8aGawޭ~)Rp*<8,WFGPjN,e\oU;TZ37V֦K?2p/]浕$` `uPߠ[-҄K K|Lr#4.&jj"!\:>v9 RJ)JP ڍܼ ! \w}B2"j JYRBFWIu&b(*Tw)GSR DEt vHe]vRr}6Ef[A.CiJp(W.ɋ9wP^ i'z\$n¥pךCT @=QEm_"g)x·Jxqv6+ݓp~]Q#dK9Aڰ]V}R27 'Q![mVLYq m]%i+ӹNkNԠd1f,;iƍ\ˠJԤ4u ;5Q6>?B+N3үAD^Z\iƖyU*{d+sCWOIUV+bNr/գ5=<ڥ^CeN0EU^)w?J(w؞[x.aۨZ$~o޵/>7 9-l]+ReCD3WvVx޶oN)K ;+.[⤷~%(c*M re.$H~K[lnRV\u'#*GiS7VQ_3Ŝ\ ]}Mg_I45l S!/ k`%hrI3]\<yULJ|Iev:MhCmql@$﷮Ճy*й6XoA;%2Ja4렸tMn)GOۆJsF$~=t@[(;&ۊ55ҡXVclj-*R&iIHv̧zosSSO-d*k`Nt5zZjRGsj$`}oM`dI\֒XI98g'[*6Mw7~\\nl-9g@rn_-.ʼcx~)OVW幕Q3"-J 'O2I1M4 -H52ek[H gt^]F;oO ݆? r; dh1$w z#>Å'Yοԭo kC/!ˣWo#[ŭT$$#XW!]=v˒ 7JRH#H= qQTHEURy!JR)JJRݓV`Ai*Z[ 8kY>ݔBHBc?x=ц$gQo5])h*ԝX Wq ʊ:VJIJOPpqXs1 m' ! 21ߥf3OD5X(Q$/L&E+Ķwשepy$RWk-@iN Rp۽Djp.R[ըlGwoWwֵ_ع#XR`*;yA.$9b[:R,:02~ױIr8$WR-#W]tK-0yj/)PI”Fz^R@)@)JP@2mW(AZ\RҽGl 'v |Vh`)k*9*lRiqiTb NSݎ.Cj(+k$iƼm\dLD)ZAX4~ekq1J<kC08 [aYA֣;fQp[$Nq7TZQig}7٢ژv4$'QcN8$Wɚb |%*Y UH)O$`d~k.|<urZ+3Bg#PGAԛC"z–Rى/'xw7Ysŏ—GYw }f?sRY j ]qfI^2cl&2SBR[ ?n*Sdp &+w @_AYJO$gW'6ur52~J%wC*HY ;Nq+8UmpڍCWpiRUH܂k[V@G!u(a*NB@9b)3mMB@qh\NBzwn":d.U,m >j-PFWx|;p~ AmҌ i S[!σ|ie>o:DJnO>KnCb;K2TJՅ=ZR5(dY~L]T񐆛RTJ|CCث5-|[J%l$;"- IJ4dU -ǖթ-!J%%Gtαй'zR<3`5٤DIA}13t#9jZօDbRӨ$y40ONJk┎aW)Vp7ߦsQ¥)?Bk|?z6WGJl єh?ڮV4@S\ !G lzkK%䷗sZg8fOeū_!͒HB%6d7@T,[B!D%'/(oĊ̗r lqV޵_D)uFۘա^%$vsVQ<"Aa !"c:rH#t釜r<6B$3;Fs\^z^W_:SGoȟIRMr1#ҾO^&u㲟ZչR$ROֆ}*9E͛+*CNLP{a[l6cDBP͞mxidlMwIdtHx;8e䩽n\B 7NpҸZطZtըzZ┥h xVlfn"C <HR]');֪j͏V?P %[[4XSu Hpgv>s"3eo9ec = DFE$CmN-z0JNmqpGY[)~|K8?:n+3%HVFB 93fɔ6ПDC?ծ+N{Rη~ma- -$:kj:7j['ח#l`U-jI+@#}})wIi:ۋj'AF=uAܬݲַ S mEeWv|amX(x7CgosV}4G8Zhbb4j@[HZ֢;zTזqGӫ/)UccsҔ3ѥOkX^DŽ^^V&w tsTm i @BJ?T֔dP$d.93cjDЗ[m%-ĤjNإ+֦`E,)椞sCRȚқ3P~B#OLr3zRKUJq^|&z(42;U:B>] 6VGm)YMSdذZU %J)I͝LJKYuԡ.8Q=6RAQV)ƭf;H1΢'˅-[rN0}vh-e-3At;[䟤IJJOPpiJG- PT]Zc۫ZsJXi*[V FS$g$u Noj#NiIHJ7+7yw)*!h oLBp(:4b2O۷rmkk!E[jO¶Qɷ'675Jx'ET{lbreakout2-2.6.5/docs/b4.jpg0000664000175000017500000000117012140767175012471 00000000000000JFIFDDCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("'!1AQq2a!1 ?wni{%jU6H׼ GgxZiPnNw 0W#s 2ɣCO\/uw1_L 48D/lR&I^&a`4[:@ܔu=ysGn%=?ߜҸuKI-ter&\ Tj*YfP^Bz몔SyJTq!uVZ6qv+3OnW y|4+(?lbreakout2-2.6.5/docs/b1.jpg0000664000175000017500000000175612140767175012500 00000000000000JFIFDDCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222x"8 !"#12AQaBqr5b1!"QA ?د=9w$9@65TlzD?'Lv۔Bj\s_2j=j̦>'͹L8>'ȯ5)mun=~m'ǪuyԦC2yq50T#r5ǨS S{ݙ[+;k|>6$11S9E}*t,1D"+I(<(@׸!eзMdSkj?8-,7^?B{!]'caľ\v ?8NͰq2e_ ~Km-O.T6ěJe#ӾWʫe޽ϼ~=܇[_WmMQ6hU@|O ƺckɨ mItcctB:/:lvaLtusͪ6**1Pg|LE  ۔L"vŅ2LS+jg2{%bP&Ꙩ*KDEUYLT¹q_$XT0 Kཚ"eXfa#lpF}9wwfG[g``@礑H${>aza 7w?jڍ5Hv#|vllA]6'|#}zƛw6t1R $N萎+JM'7NE@kg@72.m(!'9-Zu͕4%\vQIW'%lbreakout2-2.6.5/docs/x4.jpg0000664000175000017500000000123012140767175012514 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222(". !QA"#12r!1A ?z_7^nJP)-0'( <~()X mwf(u&u>3.\,W 62;18Ҝ|/;Fx1iQxx7oVCIRQ_Pj4 !;JZ<:c'?P5b~}bۊIlCnr"j}CEZTj(tOk Ra2}n$ǞajnnnŽfBr$08ZGJ޺FMAv]%SM:a,%XlNxRnz(Bƪ]UI Rퟴ@N1a5Rktə)ԭzK(Npr9!lbreakout2-2.6.5/docs/x23.jpg0000664000175000017500000000134212140767175012601 00000000000000JFIFAACreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("-!1AQ"#aqb$1B2AQa ?3RnNVE`Iޭ3Y%0΢i~I)Ny^,0hnEA熈'*zTLԅ6m`r˦ZZ##W64RiR;F0fbqݮ66&**7%0h^]C˶B-$ag%Hx^uyۦܵ&.݋0ГC`-)9=B8n*R|7&i AaꎟexmI;On dЗA^I$"O\RuŠw>Є1V ]7+EUY*Ӓ=(ݩ9Ѳ!M.8[Oχ%4PZT1!O'2*Tlbreakout2-2.6.5/docs/x15.jpg0000664000175000017500000000106312140767175012602 00000000000000JFIFAACreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("/!Q"1aq$2A ?:͹VvP@Ȣ-L'yKݩ\n;SO _ڋ8w66g6F8~_J zTZ *%p(U)3NyQOZxn.} [`elbreakout2-2.6.5/docs/x16.jpg0000664000175000017500000000150512140767175012604 00000000000000JFIFAACreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("-!1A2Qaq"#B& 1AQ!"2a ?}oõ]Hod60jI&ժÜɼ"PR;AI vd~@Z㸶kԪTۢ=Pnnxy^J=l&uM7DWFF++h(+ى\dhKn@-,˚"BzِRMhKUIj2٬ZR>aPT(t%_Qk.t2dgb[PR 5AD#9)y1mrFV^Mg.?7I7ڀiߔelBᖤ*"4V@zH;wtU>.=7oool1ZS`}@ImܧiY`}S;"/r(m%m从]dj6obl{F42>(O xZynEܹd6|D;iВA%k;)lbreakout2-2.6.5/docs/x3.jpg0000664000175000017500000000126512140767175012523 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("/ !QA"12RTaq!a ?{_Ujc-%ꢾBj%3 j˶J7ԧ9IPBe%qL+W gM1|reРs&!"w"hQ>?QWT/I“ wLwl3b0^_uԙb-6XQtYeҗu=@~~r}:Z;{cn zDif aˉ&3,*7BJ VYdwhLiEU\'xR$⨊uZ^nw@H.u"'~UaDU/ˆLa@suDB?lbreakout2-2.6.5/docs/x10.jpg0000664000175000017500000000124512140767175012577 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("1!1Qa"%q2A!1a ?쾯ݫXCmmd@QRIQۖa+ O YcXeUhЄ|lD6.ӧ*@xp{ʇT(z&F~{3\}".>fս*> @win32_inst_script@; \ done # 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: lbreakout2-2.6.5/docs/x2.jpg0000664000175000017500000000127512140767175012523 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("0 !Q"1Aaq#BST$!12aq ?tRi6jH }˷Zq=LJ#ϨbPľ8TpMOA eey@;" @OM2b]wpu+' H֚k:z鞮Ԛ~u(V@y(NUO6GP/K眡W*uSDP6QOv=s7uR$>!j"q8u>!p] ݗ}fyNKkIV8o]Ե IsG5jެT;.@jD[?!SU/ˆLJx'x#Albreakout2-2.6.5/docs/Makefile.am0000664000175000017500000000131412140767175013516 00000000000000EXTRA_DIST = index.html \ x0.jpg x1.jpg x2.jpg x3.jpg x4.jpg x5.jpg x6.jpg x7.jpg \ x8.jpg x9.jpg x10.jpg x11.jpg x12.jpg x13.jpg x14.jpg \ x15.jpg x16.jpg x17.jpg x18.jpg x19.jpg x20.jpg x21.jpg \ x22.jpg x23.jpg \ b0.jpg b1.jpg b2.jpg b3.jpg b4.jpg b5.jpg b6.jpg \ warp.jpg screen.jpg install-data-local: $(mkinstalldirs) $(DESTDIR)$(doc_dir)/lbreakout2 @for file in *.jpg; do\ $(INSTALL_DATA) $$file $(DESTDIR)$(doc_dir)/lbreakout2/$$file;\ done $(INSTALL_DATA) index.html $(DESTDIR)$(doc_dir)/lbreakout2/index.html win32-install-script: @for file in $(EXTRA_DIST); do \ echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\docs\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \ done lbreakout2-2.6.5/docs/index.html0000664000175000017500000005574612140767175013501 00000000000000 LBreakout2 Manual

Table Of Contents

Game Play

Basics

Okay, I guess all of you know how to play breakout basically. Ball bounces around --> paddle keeps ball in game -> all bricks destroyed --> next level ;-D
The chosen difficulty level has some influence on the size of the paddle, the speed of balls and the score gained.
Levelpaddle size (in pixel)ball speed (in pixels per second)score modification
Easy72 - 180240 - 400-20%
Medium72 - 144270 - 4300
Hard52 - 108300 - 450+30%
If there is more than one player the next player will get his/her chance when the current one restarts the level or looses all balls. The name of the current/next player is displayed in the right top corner of the screen and before each turn.

Bonus/Penalty

A destroyed brick may release a bonus or penalty which will move down slowly. It's used as soon as it is collected by paddle.
NameTime (in sec)PictureDescription
Extra Score-Gives you the score written on it.
End Of The Rainbow20If you destroy a brick with no bonus assigned it will release 1000 points extra score!
Expand Paddle-Expands your paddle about one tile (the maxium size depends on the chosen difficulty level).
Extra Life-Gives you one extra life (paddle).
Sticky Paddle20Balls touching the paddle will keep attached until you press fire.
Energy Balls5Balls won't be reflected at a brick but go directly through it.
Extra Ball-Creates a new ball.
Bonus floor10Closes the screen so no balls can get lost.
Weapon5Adds a weapon to the paddle.
Speed Down20Deccelerates all balls to mimum speed.
Joker-Collects all bonus on screen instantly and destroys all penalties. Doubles score and time of the collected bonus!
Explosive Balls10When hitting a brick balls will cause an explosion destroying all surounding bricks.
Bonus Magnet20While this bonus is active the paddle will attract other bonuses.
Reset-All active bonuses and penalties will be reset.
Time-Add-All active bonuses and penalties will last seven seconds longer.
Random Extra-Gives you any of the listed extras.
Speed Up20Accelerates all balls to maximum speed.
Frozen Paddle1Freezes the paddle (no movement possible).
Shrink Paddle-Shrinks your paddle about one paddle tile (18 pixels).
Lights Out!20Total darkness. All you see is a shade of paddle, balls and extras.
Chaos20Balls are reflected randomly at bricks. (but not at paddle)
Ghostly Paddle20Paddle disappears when not moving and won't reflect any balls then. (nor does it collect bonuses)
Penalty Magnet20While this penalty is active the paddle will attract other penalties.
Weak Balls10With this penalty active there is a 40% chance that a ball won't damage a brick.

Special Bricks

NamePictureDescription
Shielded BrickThis brick is indestructible even for energy balls.
Metal BrickThis wall is indestructible except for energy balls.
Chaotic BrickSimiliar to the Chaos Penalty the ball is reflected randomly at such a brick.
Strong BrickThese walls take up to three shots before destruction and grow darker with every hit. NOTE: to this series belongs a forth brick which is invisbile.
Regenerating BrickThis brick will regenerate one point durability within four seconds if not hit again.
Explosive BrickThis bricks destroys its neighbors on destruction.
Growing BrickIf this brick is destroyed it creates up to 8 new bricks.

Keys

There are some predefined keys for LBreakout:
h or F1Display quick help.
EscapeQuit LBreakout (after confirmation).
pPause game.
rRestart level. If more than player the next one will get his chance before this player may play the restarted level!
wWarp to next level after required percentage of bricks was cleared. As soon as this is possible a blinking icon will appear at the bottom right-hand side of the screen: . This option can be set in menu Advanced Options. It does only apply to AddOn levelsets as it is meant as a workaround for bad leveldesign.
dSwitch to the Plane Of Inner Stability and disintegrate single bricks. Again, this only works in AddOn levelsets to remove bricks that are hard to hit.
fSwitch Fullscreen and Windowed mode.
aChange animation level (off/low/high).
sTurn on/off sound.

Resuming A Local Game

If you quit a game, it may be continued later by 'Resume Last Game' in menu 'Local Game'. While the current player, all scores and lives are saved, the state of the level itself is not. Thus if you break up a game and resume it later, the level of each player will be reset. Therefore it is recommended to quit a game right after a level was finished (quite difficult for multiple players, yes). A highscore entry will not be created! If you don't intend to resume the game later but want to enter the highscores, you'll have to loose all balls.

Network Game

You can play LBreakout2 against another human via network. Therefore you'll have to connect to a server or run a server and have your friends connected.
Start A Server
After you started the program lbreakout2server with any of the following options
-p <PORT>the port the server shall run at (default is 2002)
-l <LIMIT>maximum number of users that may connect to the server (default is 30)
-m <MESSAGE>this message is displayed to welcome a user
-a <PASSWORD>a user that logs in with this name will become administrator named admin (default is no admin)
-f <FRAMERATE>is the number of calls to the send/recv handler per second. The default is 33.
you can obtain your IP address by using /sbin/ifconfig. If you want to play via LAN the inet addr of device eth0 is important and for internet connections it's the inet addr of device ppp0.
Playing
How to play is explained in the in-game help accessable via the 'Help' button at the bottom right-hand side in the network chatroom.
New Playing Grounds
You can build new levelsets combining pingpong and normal ones. Such a levelset must start with 'N_'. An 'upload' command is planned but right now the only way to make a new levelset available is to copy it to the server's levelset directory (default: /usr/local/share/games/lbreakout2/levels) and restart the server.

ToC

Editor

Miscellany

All files you edit are saved to ~/.lbreakout2/levels. This '~' you see in front of the name when choosing levelset for playing is not part of the file name but added afterwards to separate the files in the installation path from the files in the config path (these you may edit).

Editor Layout

editor overview
Actions like quit, save, load, clear, add, insert, remove require a confirmation for safety.
  1. Editable Part
  2. Bricks and Bonus
  3. Information about location of set file and how many levels you already created, which level your currently on and how many levels more you may create. If you marked a level for swap it's displayed there, too.
  4. Click on title to change title of this level.
  5. Click here to change author's name for this level.
  6. Click here to test this level.
  7. Go to first level.
  8. Go to next level.
  9. Go to previous level.
  10. Clear all bricks and bonus in this level.
  11. Swap two levels. On first click the current level will be marked (info displayed in region 3), on second click the current and the marked level will be swapped.
  12. Insert a level at the end (copies title and author of previously last level).
  13. Insert a level at current position (copying current title and author).
  14. Remove current level.
  15. Reload this level set (discards all unsaved changes).
  16. Save this levelset (save all changes).

How To Edit

Very simple. Select a brick or a bonus by left-click (right-click into the section to switch between the brick and the bonus set) from the bottom of the screen (red-yellow selection frame) go to the editable part and left-click. Right click will remove a brick (any brick and its bonus if a brick's selected) or bonus (any bonus without touching the brick if bonus selected). You may move the mouse while having left or right buttom pressed. To parse/add/remove any levels or save/load this set use the buttons as explained above. You may use the cursor keys, too (UP - first level, RIGHT - next level, LEFT - previous level). Pressing ESCAPE leaves the editor after confirmation.

ToC

Themes

Miscellany

If you want to run LBreakout2 with other graphics and sounds you can create a theme which allows you to modify all game graphics and sounds. The use of new backgrounds is also allowed. The following list contains all editable graphics and sounds. What you have to do to edit them is explained below.

Editable graphics:
backgroundsHandling of backgrounds is special. As long as you do not provide a back0.png file the original backgrounds are used. If you want to use self-made backgrounds you'll have to save them as backindices.png where your first indices must be 0. If this happens LBreakout2 will only use the backgrounds found in your theme directory (six backgrounds at maximum). This means if you only provide one background LBreakout2 will only use this background throughout the game as long as your theme is running.
ball.png
bricks.png
menuback.pngbackground of the main menu
cr_back.pngbackground of the chatroom
explosions.pngnormal explosions
explosions_dark.pngexplosions if darkness penalty is active
extras.pngbonuses and penalties
f_frame.pngfont used for score and player name in the right upper corner of the frame
f_game.pngfont used for level credits and confirmation
floor.pngbonus floor that is used to close playing field (optional)
fr_left.pngleft part of frame
fr_right.pngright part of frame
fr_top.pngtop part of frame
fr_mp_left.pngleft part of frame for network game
fr_mp_right.pngright part of frame for network game
life.pnglife lamps displayed in the left bottom corner of the frame
paddle.png
shine.pnganimation running accross bricks
shot.pngshot of the plasma weapon
warp.pngicon that blinks at the bottom right-hand side of the screen when warp became possible
weapon.pngweapon displayed on the paddle

Editable sounds:
attach.wavplayed if ball is attached to sticky paddlejoker.wavbonus sound
bonus_magnet.wavbonus soundlooselife.wavplayed if you loose a life
chaos.wavpenalty soundmalus_magnet.wavpenalty sound
click.wavplayed if key was pressed (e.g. confirmation)metal.wavenery ball sound
dammit.wavDammit! speech samplereflect.wavball reflection sound
damn.wavDamn! speech samplescore.wavbonus sound
darkness.wavpenalty soundshot.wavweapon's firing noise
disable.wavpenalty soundshrink.wavpenalty sound
excellent.wavExcellent! speech samplespeeddown.wavbonus sound
exp.wavbrick explosion soundspeedup.wavpenalty sound
expand.wavbonus soundstandard.wavstandard sound for collecting an extra
expl_ball.wavbonus soundtimeadd.wavbonus sound
extraball.wavbonus soundverygood.wavVery Good! speech sample
freeze.wavpenalty soundwall.wavbonus sound
gainlife.wavplayed if you got an extralifeweak_ball.wavpenalty sound
ghost.wavbonus soundwontgiveup.wavI won't give up! speech sample
goldshower.wavbonus sound 

How To Make A Theme

  1. Create a directory in ~/.lgames/lbreakout2-themes with the name of your theme.
  2. Have a look at the original graphics and sounds located in the gfx and sounds directory in the source path or in /usr/local/share/games/lbreakout2.
  3. Now change a graphic or sound to your liking and save it with the same name to ~/.lgames/lbreakout2-themes.
    Note:
    • You must not change the measurements of a graphic. The only exception is warp.png which will be centered to the bottom right-side of the frame.
    • You must not save it to a subdirectory gfx or sounds but directly to ~/.lgames/lbreakout2-themes/MyTheme.
    • A graphic or sound that can't be found in your theme directory is loaded from the original resources.
    • Handling of backgrounds is special. As long as you do not provide a back0.png file the original backgrounds are used. If you want to use self-made backgrounds you'll have to save them as backindices.png where your first indices must be 0. If this happens LBreakout2 will only use the backgrounds found in your theme directory (six backgrounds at maximum). This means if you only provide one background LBreakout2 will only use this background throughout the game as long as your theme is running.
    • Some bricks require multiple hits before destruction as explained in section Special Bricks thus we have two 'groups' of bricks Strong Bricks (4th - 7th) and Regenerative Bricks (8th - 10th). Everytime a brick from such a group is hit the id is decreased by one and if we are at the very left brick thus the first id of the group it will be cleared. So as these bricks belong together they should look consistent. All other bricks are independent.
    • The default colorkey (transparency) is pure black (0x000000).
      Exceptions:
      • All frame graphics (fr_*.png) use the upper right pixel of fr_right.png as color key.
      • All fonts (f_*.png) use the very first pixel (0,0) as color key.
      • paddle.png uses the very first pixel (0,0) as color key.
      • extras.png has no color key by default and bricks.png has black as default color key but in both cases you may add a single last column (one pixel width) with a custom color key.
    • floor.png is an optional PNG. Per default a line of indestructible bricks will be drawn when you catch the 'bonus floor'. (closes the playing field) If you provide this PNG, however, it will be drawn instead thus it must have the size of 560x20. (same as the fr_top.png) It uses black as color key.
  4. Add a file named ABOUT to your theme directory. The first 255 characters will be displayed in the menu as quick info about your levelset so you should still provide a README with more detailed information. The ABOUT file should contain name, version, author and a short description.
  5. Run LBreakout2 and select your theme in Advanced Options/Select Theme.
  6. If everything works fine add a README with credits and a description.
  7. Tar.gz your theme directory and send it to kulkanie@gmx.net and I'll add it to the site.
    Please provide the following information (either in the mail or in the README):
    1. Full title
    2. Version number
    3. Your name
    4. Email-address for feedback
    5. Description
    6. A jpg screenshot with your theme in action (press TAB while playing).

ToC

lbreakout2-2.6.5/docs/x6.jpg0000664000175000017500000000123512140767175012523 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("0!"AQ%1aq!A1Q ?uiE*0l%JvXl-GI'iP6dV㞲(_ r*c)-,AIuL~*h²2$<;Bx)jG2>b(HJQԞ\<ŵt$fn=UY6I ޭI$0kN/|$ԙ-;őbYʷCj͚LTRrp;Χݮ%u=A-##J*;<ۼWUBvk'hNghA>-[P.J2jJ~}.KP!^lbreakout2-2.6.5/docs/x14.jpg0000664000175000017500000000143612140767175012605 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222(".!1Q"#A%2C!Q!1"Aq ?_Wnլ lC!ey@Q䤓"HjeFDלg-xx jG[[\Ce9-q*r284YQ[OgW8筦0ZI]~^OZ&Tm7{Vz~1CJֲgOAt 'j gzhٌx=y&붏EOrimJ}p\[g)H瓴%End gڦKnjsۀHWQe$$xD ;0)dʡ]a k’a?_jw $- /:i `-i*`p= KG9!zRB*]@jD[? jp2Sө[Pr!lbreakout2-2.6.5/docs/x17.jpg0000664000175000017500000000130712140767175012605 00000000000000JFIFAACreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222(".!1"AQa#2bq%!1Aa"2R ?z_ _ZKCi.8-]Jr~h/yj: /'8ey&{Smƒm|0c1RuQ#y-a7:i S{H@M3qfԩLZk" 1$~b|14%;z}|WzI}Oh?ns5gP_g>0*rNXǾ}!30^ &H@a7"OM6̶㭐cU"mR?TnԜs?!!WOoALU[fdÒCK(N!UhMlbreakout2-2.6.5/docs/x0.jpg0000664000175000017500000000540712140767175012522 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"1!1"2AQ3aRqs#(!AQa"1q2B ?eMCԔM߸z:\r"Sa?.3KB]m..$|c+ߓ ZBJT<2)#k\ yhm!ZʉH ANOmg@";7 y 6ի|ֿ(s0RÈ\ &knޟ=}<0e> NoP-[Ю0SIӨj/oMǜnd}SS%ZEϖӶ8HI R>س?R5RSk%7{~ y'SqϹԼ_Hǒ!%*]Tw'7#_TjhM%i_I\xdtE{ވuGpa!Qfڵ}_Ou94j}B@D`̭BIA߷ whr3;϶/v vF<㩧Q)ΣK!r0P@^ůz|ƦS%ZEϖӶ8HI R>Fntw+B›1M'kN#x}7q\|u7K^!I?#uΩBPT%M+ZEM$P:MFt/ρ.CM+I>y$r1oQ>Q(lYlwms&,jj%HT^œ %JKp&0Iɷ Mdȑzo电- X)-^ڭWˏ9ԌflqF7( #buX7Wq4/y;%@'o꽽>^Ksc.b*/NvN۽鸽\caOJ=9֤ҪVÍRR-b>Yn 2ĈJȸHJJ|s 9I֧sM`wǎu uźXT@q㭽F<hvVeQr"֛&M%!6P3;)jZ#x+RZ[n-&_VTQ.u=6q PP:A)l7*V=HB *]wVޫogWR3A9x`^[w 4LZJNSQZ6KuJNHH#|ṱEm'h;q{^0BPc5x !À]X7i,A 83~ 4ʽ#1FSoZ-BQdO_ g5uN%Ғބ"׸SzuB-]˔ ^CK~0"\ʴk]N}9[zCkB<${ LObr$jgy-KC0o%y KWmuu#41C7ؾV }\~pe"M 7lA?TIq kJlBSc~%:sW\8 %ՃqO<曎 βC~Nd`7i )R8/Ǔ'%7t&҉r'۬%Ip)7Ki1[!ab$ǎ9MR@9Nc/"4X$_@J?c)O4*q†[]wo81?uOTi dR@GsƎT%VFO;b{P'l-fA͵ʵ%Jg~@G{sccJd,"87=Rpf5:yNi4f1fBNn0$u1g 1>AU1'=HJ̄R6dbϩ'ZkOUthgJ^&$u (! y5TَS0tt\0`j4UVf GR!6T Y0`fFar5btUrbJyR~p`ER@.1cFrГ FA`C /PUsCIu@Vd&ʐ#}H>F 1:Z~璫EEC:V1%<өA O?8cFrГVx̌gb$u1g B: 0mV7%PR3T3jKS:*q%PhU:6c%$'`H6b >0a}jbN{(GR!6T YFar5`֚<]**ҵWɉ)H lyhU:6c%$'0 +dc;@#و,??hbԬM!oF پy*}+Uz\oiԀ'06T y*lbreakout2-2.6.5/docs/x1.jpg0000664000175000017500000000136412140767175012521 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("/!12AQ"3as$!AQa12" ?Q͚Jxzryb'T* Y@1l8YЂ+<:QAX6h4u%.&sVG.3,W.@ξϓGLs{*A@iM6w{;0k?ߌgk-o4﷝QXZkFfi3r TNetS{mǘZQPR :ִVQk/ݬێ ![(9b/bɘƼ I9{V.2;nO'rI 5[Ѯ7RY.Ztdqk,>O!yP;ah6r8qH2.gBs`8 ҵWhtԀ`!C\tlbreakout2-2.6.5/docs/x22.jpg0000664000175000017500000000133612140767175012603 00000000000000JFIFAACreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("1 !12Qq#ASa#!1Aa2QR ?[]M-e R'-GrOJ))B#_#oi-#4-"MCJR[rJu$5.C^{uڷnpWo=VJsƤ?b?#XJ6sJ^RkQ}>Ҿb3̉tѺG~Qaa\Ŕ䐝닰5$e%2Ê jv.'V4K֤))cZҥrtq2tuH<PCePfS@UM*Tglj֓;/w06֑b>'թ߷r3#=:˾JYBu`vRڻj!lbreakout2-2.6.5/docs/x11.jpg0000664000175000017500000000126712140767175012604 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("/!Q"a#1Aq%23$!1AQa2R ?ɮws&DG 1I?K0) lb?ҰFƝ4D-1PpdztYī YeBu[I7Fj#65SىB|T;  _zW8`Έ! cZ8@>*v+곆f8߰Թs 7GUq,gҔ4ך;18,v5^ aEP;Ҕ?lbreakout2-2.6.5/docs/x9.jpg0000664000175000017500000000131712140767175012527 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222(".!1"2AQ$Bab$!12QaAR ?{5n.il!(i=Rs:LHFxl52nf} fi^fiNL!vF l!]U5t Or;S֮- ~ЉSea;,)ZF IOhW՚NIlCa< Xj$[zpTօ8="':c0է393d^s3HN+aKN "W,4{;3Uu]j-<܃i*)*I jEVo<EEQ͐ee jϯu>W%N4!E0Nk?&|+YLLF𖒜sEϙlbreakout2-2.6.5/docs/x13.jpg0000664000175000017500000000150012140767175012574 00000000000000JFIFBBCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("+!1QaBqAR#AQ!a12 ?Kjym3,h$GgЬjOJ\}LJnrcR<Z)p 9xf?PG$aZ䕏_Gyw;^n"ȔJK(l4Pppz{WCѡDUx[]F#q4Os1c'ȿҜr=}GL) o GA/T޳/l1DݡPT[$sV> q;53KTeL}Q($+Om#? k}x1ooڝe i Ծ*u.Ώדa-GrHbVuQOt̡Ro-܁#uøWjB௃i
*$x z1pqP0b $g%I$ вYʃ?.h]m==ײNq˳{"-ͩ-e(? JDwXOͶs]pc>Tq V?{:^@ Q)N0"!:c"jp/R%2yC'{?Ɛx4[Ң|XRJ@$?B7 $k ?BͭzEK'+!U$(K}# ='%5aNC|-Zp2Sө[PBi귀;/lbreakout2-2.6.5/docs/b5.jpg0000664000175000017500000000200312140767175012466 00000000000000JFIFDDCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222x"7 !1A"2Qaq#r$5BCb1!Q" ?YKF)ALdt(>Q:LPF=")MeSÉ[|klv#FaJG0eq<-0+)́2Ӕd706LR7|3f/K2Վ|V`QX}JS0Kzu ahUCjs1-S坾6{W#㪊[xj y_K02IT7|2rгS%o 57-P,BYBn}b=%r&LJtُ(o rlgv#Șsb*D2bEDTb@0AW+?Ĵgy&M)eOljXfWF2 <h-jKD)` X-|<ɂ?llFX)a1P;tZB G mT.uTAmC?lbreakout2-2.6.5/docs/b3.jpg0000664000175000017500000000125012140767175012467 00000000000000JFIFDDCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("-!"1qAQa#!"2 ?fu V BSF(x x}QB{APڽgkTN>Ӏ`v۽O[AKϠ,~?o\k2]ҬEdjds)JỌcï^csWKkmZ-i ڭp# P䒠Ի /'+̂p v{5ܴF/m}~'8 M=dW rI# x?+M6DףL/mn<Ԗ0Tѣ5 u>4܋?@Wi%2N.S =ҍEO7޹q49s[ǷRhHT #@SĪ0Х(`{O"AiJVlbreakout2-2.6.5/docs/b2.jpg0000664000175000017500000000135612140767175012475 00000000000000JFIFDDCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222(")!1QaAq"#4% !1Q"BRaq ?dyMXզaBVI$¹qYDɲdlpԁԁ{ׅ`[y[KNEIJGځLyVLr+3#-L࣮Dϧ[9IBoc)znyV=3J% ;ָDeNdP$k[>|V`driٙ'|ѾYßf,KdJa?or;6'+l7SqztsXiLuxu䡙CE(j".87j$92Ia~8KHUrGa|鼼Fɪ["z@m8WQe$$}hvSlSEuVFn~?:)YCtKRF!,-%XlNzFsj $o?()V1?tqB"c[4QME]Ru2L) %,9QE lbreakout2-2.6.5/docs/x18.jpg0000664000175000017500000000126612140767175012612 00000000000000JFIFAACreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222("01!"Aaq2RSt1!A"Q ?~_՛V|C!怣Ԥh59Хۆ gRo`v!)G!E:ڟfpJM0d'mHҼ<{gE^.)C\E\9?XԯXʐctJO2L*i~(͗;1\MU֥%Ĝga-L`a\ίl-U)x|$6+z$mE^mlRPQ)k %:[zUw(|r '|ƉJG:u%?hB%3yزlu?SԸ?oAn#Tj3%;60iCINpr6!25?lbreakout2-2.6.5/aclocal.m40000664000175000017500000007715512610471343012401 00000000000000# generated automatically by aclocal 1.9.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 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. # 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. # Copyright (C) 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. # 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. AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.9.6])]) # 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 # 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 7 # 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]) AC_SUBST([$1_FALSE]) 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 # 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 # 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], 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/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]) ]) # 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /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"]) ]) # 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 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 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 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.58])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 # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) 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 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 ]) ]) # 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-"$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, 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_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 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 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 whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. # # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories # created by `make install' are always world readable, even if the # installer happens to have an overly restrictive umask (e.g. 077). # This was a mistake. There are at least two reasons why we must not # use `-m 0755': # - it causes special bits like SGID to be ignored, # - it may be too restrictive (some setups expect 775 directories). # # Do not use -m 0755 and let people choose whatever they expect by # setting umask. # # We cannot accept any implementation of `mkdir' that recognizes `-p'. # Some implementations (such as Solaris 8's) are not thread-safe: if a # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' # concurrently, both version can detect that a/ is missing, but only # one can create it and the other will error out. Consequently we # restrict ourselves to GNU make (using the --version option ensures # this.) AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) # 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="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # 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 m4_include([m4/codeset.m4]) m4_include([m4/gettext.m4]) m4_include([m4/glibc21.m4]) m4_include([m4/iconv.m4]) m4_include([m4/intdiv0.m4]) m4_include([m4/intmax.m4]) m4_include([m4/inttypes-pri.m4]) m4_include([m4/inttypes.m4]) m4_include([m4/inttypes_h.m4]) m4_include([m4/isc-posix.m4]) m4_include([m4/lcmessage.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/longdouble.m4]) m4_include([m4/longlong.m4]) m4_include([m4/nls.m4]) m4_include([m4/po.m4]) m4_include([m4/printf-posix.m4]) m4_include([m4/progtest.m4]) m4_include([m4/signed.m4]) m4_include([m4/size_max.m4]) m4_include([m4/stdint_h.m4]) m4_include([m4/uintmax_t.m4]) m4_include([m4/ulonglong.m4]) m4_include([m4/wchar_t.m4]) m4_include([m4/wint_t.m4]) m4_include([m4/xsize.m4]) m4_include([acinclude.m4]) lbreakout2-2.6.5/intl/0000777000175000017500000000000012610471362011553 500000000000000lbreakout2-2.6.5/intl/plural-exp.c0000664000175000017500000000765112140767176013750 00000000000000/* Expression parsing for plural form selection. Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "plural-exp.h" #if (defined __GNUC__ && !defined __APPLE_CC__) \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) /* These structs are the constant expression for the germanic plural form determination. It represents the expression "n != 1". */ static const struct expression plvar = { .nargs = 0, .operation = var, }; static const struct expression plone = { .nargs = 0, .operation = num, .val = { .num = 1 } }; struct expression GERMANIC_PLURAL = { .nargs = 2, .operation = not_equal, .val = { .args = { [0] = (struct expression *) &plvar, [1] = (struct expression *) &plone } } }; # define INIT_GERMANIC_PLURAL() #else /* For compilers without support for ISO C 99 struct/union initializers: Initialization at run-time. */ static struct expression plvar; static struct expression plone; struct expression GERMANIC_PLURAL; static void init_germanic_plural () { if (plone.val.num == 0) { plvar.nargs = 0; plvar.operation = var; plone.nargs = 0; plone.operation = num; plone.val.num = 1; GERMANIC_PLURAL.nargs = 2; GERMANIC_PLURAL.operation = not_equal; GERMANIC_PLURAL.val.args[0] = &plvar; GERMANIC_PLURAL.val.args[1] = &plone; } } # define INIT_GERMANIC_PLURAL() init_germanic_plural () #endif void internal_function EXTRACT_PLURAL_EXPRESSION (const char *nullentry, struct expression **pluralp, unsigned long int *npluralsp) { if (nullentry != NULL) { const char *plural; const char *nplurals; plural = strstr (nullentry, "plural="); nplurals = strstr (nullentry, "nplurals="); if (plural == NULL || nplurals == NULL) goto no_plural; else { char *endp; unsigned long int n; struct parse_args args; /* First get the number. */ nplurals += 9; while (*nplurals != '\0' && isspace ((unsigned char) *nplurals)) ++nplurals; if (!(*nplurals >= '0' && *nplurals <= '9')) goto no_plural; #if defined HAVE_STRTOUL || defined _LIBC n = strtoul (nplurals, &endp, 10); #else for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) n = n * 10 + (*endp - '0'); #endif if (nplurals == endp) goto no_plural; *npluralsp = n; /* Due to the restrictions bison imposes onto the interface of the scanner function we have to put the input string and the result passed up from the parser into the same structure which address is passed down to the parser. */ plural += 7; args.cp = plural; if (PLURAL_PARSE (&args) != 0) goto no_plural; *pluralp = args.res; } } else { /* By default we are using the Germanic form: singular form only for `one', the plural form otherwise. Yes, this is also what English is using since English is a Germanic language. */ no_plural: INIT_GERMANIC_PLURAL (); *pluralp = &GERMANIC_PLURAL; *npluralsp = 2; } } lbreakout2-2.6.5/intl/printf-parse.h0000664000175000017500000000420712140767176014270 00000000000000/* Parse printf format string. Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _PRINTF_PARSE_H #define _PRINTF_PARSE_H #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* A parsed directive. */ typedef struct { const char* dir_start; const char* dir_end; int flags; const char* width_start; const char* width_end; size_t width_arg_index; const char* precision_start; const char* precision_end; size_t precision_arg_index; char conversion; /* d i o u x X f e E g G c s p n U % but not C S */ size_t arg_index; } char_directive; /* A parsed format string. */ typedef struct { size_t count; char_directive *dir; size_t max_width_length; size_t max_precision_length; } char_directives; /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #ifdef STATIC STATIC #else extern #endif int printf_parse (const char *format, char_directives *d, arguments *a); #endif /* _PRINTF_PARSE_H */ lbreakout2-2.6.5/intl/finddomain.c0000664000175000017500000001274312140767176013765 00000000000000/* Handle list of needed message catalogs Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* List of already loaded domains. */ static struct loaded_l10nfile *_nl_loaded_domains; /* Return a data structure describing the message catalog described by the DOMAINNAME and CATEGORY parameters with respect to the currently established bindings. */ struct loaded_l10nfile * internal_function _nl_find_domain (const char *dirname, char *locale, const char *domainname, struct binding *domainbinding) { struct loaded_l10nfile *retval; const char *language; const char *modifier; const char *territory; const char *codeset; const char *normalized_codeset; const char *special; const char *sponsor; const char *revision; const char *alias_value; int mask; /* LOCALE can consist of up to four recognized parts for the XPG syntax: language[_territory[.codeset]][@modifier] and six parts for the CEN syntax: language[_territory][+audience][+special][,[sponsor][_revision]] Beside the first part all of them are allowed to be missing. If the full specified locale is not found, the less specific one are looked for. The various parts will be stripped off according to the following order: (1) revision (2) sponsor (3) special (4) codeset (5) normalized codeset (6) territory (7) audience/modifier */ /* If we have already tested for this locale entry there has to be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, NULL, NULL, NULL, NULL, NULL, domainname, 0); if (retval != NULL) { /* We know something about this locale. */ int cnt; if (retval->decided == 0) _nl_load_domain (retval, domainbinding); if (retval->data != NULL) return retval; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } return cnt >= 0 ? retval : NULL; /* NOTREACHED */ } /* See whether the locale value is an alias. If yes its value *overwrites* the alias name. No test for the original value is done. */ alias_value = _nl_expand_alias (locale); if (alias_value != NULL) { #if defined _LIBC || defined HAVE_STRDUP locale = strdup (alias_value); if (locale == NULL) return NULL; #else size_t len = strlen (alias_value) + 1; locale = (char *) malloc (len); if (locale == NULL) return NULL; memcpy (locale, alias_value, len); #endif } /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = _nl_explode_name (locale, &language, &modifier, &territory, &codeset, &normalized_codeset, &special, &sponsor, &revision); /* Create all possible locale entries which might be interested in generalization. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, domainname, 1); if (retval == NULL) /* This means we are out of core. */ return NULL; if (retval->decided == 0) _nl_load_domain (retval, domainbinding); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } } /* The room for an alias was dynamically allocated. Free it now. */ if (alias_value != NULL) free (locale); /* The space for normalized_codeset is dynamically allocated. Free it. */ if (mask & XPG_NORM_CODESET) free ((void *) normalized_codeset); return retval; } #ifdef _LIBC libc_freeres_fn (free_mem) { struct loaded_l10nfile *runp = _nl_loaded_domains; while (runp != NULL) { struct loaded_l10nfile *here = runp; if (runp->data != NULL) _nl_unload_domain ((struct loaded_domain *) runp->data); runp = runp->next; free ((char *) here->filename); free (here); } } #endif lbreakout2-2.6.5/intl/vasnprintf.c0000664000175000017500000005304412140767176014046 00000000000000/* vsprintf with automatic memory allocation. Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* Tell glibc's to provide a prototype for snprintf(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #ifndef IN_LIBINTL # include #endif /* Specification. */ #if WIDE_CHAR_VERSION # include "vasnwprintf.h" #else # include "vasnprintf.h" #endif #include /* snprintf(), sprintf() */ #include /* abort(), malloc(), realloc(), free() */ #include /* memcpy(), strlen() */ #include /* errno */ #include /* CHAR_BIT */ #include /* DBL_MAX_EXP, LDBL_MAX_EXP */ #if WIDE_CHAR_VERSION # include "wprintf-parse.h" #else # include "printf-parse.h" #endif /* Checked size_t computations. */ #include "xsize.h" #ifdef HAVE_WCHAR_T # ifdef HAVE_WCSLEN # define local_wcslen wcslen # else /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid a dependency towards this library, here is a local substitute. Define this substitute only once, even if this file is included twice in the same compilation unit. */ # ifndef local_wcslen_defined # define local_wcslen_defined 1 static size_t local_wcslen (const wchar_t *s) { const wchar_t *ptr; for (ptr = s; *ptr != (wchar_t) 0; ptr++) ; return ptr - s; } # endif # endif #endif #if WIDE_CHAR_VERSION # define VASNPRINTF vasnwprintf # define CHAR_T wchar_t # define DIRECTIVE wchar_t_directive # define DIRECTIVES wchar_t_directives # define PRINTF_PARSE wprintf_parse # define USE_SNPRINTF 1 # if HAVE_DECL__SNWPRINTF /* On Windows, the function swprintf() has a different signature than on Unix; we use the _snwprintf() function instead. */ # define SNPRINTF _snwprintf # else /* Unix. */ # define SNPRINTF swprintf # endif #else # define VASNPRINTF vasnprintf # define CHAR_T char # define DIRECTIVE char_directive # define DIRECTIVES char_directives # define PRINTF_PARSE printf_parse # define USE_SNPRINTF (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) # if HAVE_DECL__SNPRINTF /* Windows. */ # define SNPRINTF _snprintf # else /* Unix. */ # define SNPRINTF snprintf # endif #endif CHAR_T * VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list args) { DIRECTIVES d; arguments a; if (PRINTF_PARSE (format, &d, &a) < 0) { errno = EINVAL; return NULL; } #define CLEANUP() \ free (d.dir); \ if (a.arg) \ free (a.arg); if (printf_fetchargs (args, &a) < 0) { CLEANUP (); errno = EINVAL; return NULL; } { size_t buf_neededlength; CHAR_T *buf; CHAR_T *buf_malloced; const CHAR_T *cp; size_t i; DIRECTIVE *dp; /* Output string accumulator. */ CHAR_T *result; size_t allocated; size_t length; /* Allocate a small buffer that will hold a directive passed to sprintf or snprintf. */ buf_neededlength = xsum4 (7, d.max_width_length, d.max_precision_length, 6); #if HAVE_ALLOCA if (buf_neededlength < 4000 / sizeof (CHAR_T)) { buf = (CHAR_T *) alloca (buf_neededlength * sizeof (CHAR_T)); buf_malloced = NULL; } else #endif { size_t buf_memsize = xtimes (buf_neededlength, sizeof (CHAR_T)); if (size_overflow_p (buf_memsize)) goto out_of_memory_1; buf = (CHAR_T *) malloc (buf_memsize); if (buf == NULL) goto out_of_memory_1; buf_malloced = buf; } if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ /* Ensures that allocated >= needed. Aborts through a jump to out_of_memory if needed is SIZE_MAX or otherwise too big. */ #define ENSURE_ALLOCATION(needed) \ if ((needed) > allocated) \ { \ size_t memory_size; \ CHAR_T *memory; \ \ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ if ((needed) > allocated) \ allocated = (needed); \ memory_size = xtimes (allocated, sizeof (CHAR_T)); \ if (size_overflow_p (memory_size)) \ goto out_of_memory; \ if (result == resultbuf || result == NULL) \ memory = (CHAR_T *) malloc (memory_size); \ else \ memory = (CHAR_T *) realloc (result, memory_size); \ if (memory == NULL) \ goto out_of_memory; \ if (result == resultbuf && length > 0) \ memcpy (memory, result, length * sizeof (CHAR_T)); \ result = memory; \ } for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) { if (cp != dp->dir_start) { size_t n = dp->dir_start - cp; size_t augmented_length = xsum (length, n); ENSURE_ALLOCATION (augmented_length); memcpy (result + length, cp, n * sizeof (CHAR_T)); length = augmented_length; } if (i == d.count) break; /* Execute a single directive. */ if (dp->conversion == '%') { size_t augmented_length; if (!(dp->arg_index == ARG_NONE)) abort (); augmented_length = xsum (length, 1); ENSURE_ALLOCATION (augmented_length); result[length] = '%'; length = augmented_length; } else { if (!(dp->arg_index != ARG_NONE)) abort (); if (dp->conversion == 'n') { switch (a.arg[dp->arg_index].type) { case TYPE_COUNT_SCHAR_POINTER: *a.arg[dp->arg_index].a.a_count_schar_pointer = length; break; case TYPE_COUNT_SHORT_POINTER: *a.arg[dp->arg_index].a.a_count_short_pointer = length; break; case TYPE_COUNT_INT_POINTER: *a.arg[dp->arg_index].a.a_count_int_pointer = length; break; case TYPE_COUNT_LONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longint_pointer = length; break; #ifdef HAVE_LONG_LONG case TYPE_COUNT_LONGLONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; break; #endif default: abort (); } } else { arg_type type = a.arg[dp->arg_index].type; CHAR_T *p; unsigned int prefix_count; int prefixes[2]; #if !USE_SNPRINTF size_t tmp_length; CHAR_T tmpbuf[700]; CHAR_T *tmp; /* Allocate a temporary buffer of sufficient size for calling sprintf. */ { size_t width; size_t precision; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = (arg < 0 ? (unsigned int) (-arg) : arg); } else { const CHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; precision = (arg < 0 ? 0 : arg); } else { const CHAR_T *digitp = dp->precision_start + 1; precision = 0; do precision = xsum (xtimes (precision, 10), *digitp++ - '0'); while (digitp != dp->precision_end); } } switch (dp->conversion) { case 'd': case 'i': case 'u': # ifdef HAVE_LONG_LONG if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 1; /* account for leading sign */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 1; /* account for leading sign */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 1; /* account for leading sign */ break; case 'o': # ifdef HAVE_LONG_LONG if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1 /* turn floor into ceil */ + 1; /* account for leading sign */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1 /* turn floor into ceil */ + 1; /* account for leading sign */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1 /* turn floor into ceil */ + 1; /* account for leading sign */ break; case 'x': case 'X': # ifdef HAVE_LONG_LONG if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading sign or alternate form */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading sign or alternate form */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading sign or alternate form */ break; case 'f': case 'F': # ifdef HAVE_LONG_DOUBLE if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ else # endif tmp_length = (unsigned int) (DBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ tmp_length = xsum (tmp_length, precision); break; case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': tmp_length = 12; /* sign, decimal point, exponent etc. */ tmp_length = xsum (tmp_length, precision); break; case 'c': # if defined HAVE_WINT_T && !WIDE_CHAR_VERSION if (type == TYPE_WIDE_CHAR) tmp_length = MB_CUR_MAX; else # endif tmp_length = 1; break; case 's': # ifdef HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) { tmp_length = local_wcslen (a.arg[dp->arg_index].a.a_wide_string); # if !WIDE_CHAR_VERSION tmp_length = xtimes (tmp_length, MB_CUR_MAX); # endif } else # endif tmp_length = strlen (a.arg[dp->arg_index].a.a_string); break; case 'p': tmp_length = (unsigned int) (sizeof (void *) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading 0x */ break; default: abort (); } if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ } if (tmp_length <= sizeof (tmpbuf) / sizeof (CHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (CHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (CHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } #endif /* Construct the format string for calling snprintf or sprintf. */ p = buf; *p++ = '%'; if (dp->flags & FLAG_GROUP) *p++ = '\''; if (dp->flags & FLAG_LEFT) *p++ = '-'; if (dp->flags & FLAG_SHOWSIGN) *p++ = '+'; if (dp->flags & FLAG_SPACE) *p++ = ' '; if (dp->flags & FLAG_ALT) *p++ = '#'; if (dp->flags & FLAG_ZERO) *p++ = '0'; if (dp->width_start != dp->width_end) { size_t n = dp->width_end - dp->width_start; memcpy (p, dp->width_start, n * sizeof (CHAR_T)); p += n; } if (dp->precision_start != dp->precision_end) { size_t n = dp->precision_end - dp->precision_start; memcpy (p, dp->precision_start, n * sizeof (CHAR_T)); p += n; } switch (type) { #ifdef HAVE_LONG_LONG case TYPE_LONGLONGINT: case TYPE_ULONGLONGINT: *p++ = 'l'; /*FALLTHROUGH*/ #endif case TYPE_LONGINT: case TYPE_ULONGINT: #ifdef HAVE_WINT_T case TYPE_WIDE_CHAR: #endif #ifdef HAVE_WCHAR_T case TYPE_WIDE_STRING: #endif *p++ = 'l'; break; #ifdef HAVE_LONG_DOUBLE case TYPE_LONGDOUBLE: *p++ = 'L'; break; #endif default: break; } *p = dp->conversion; #if USE_SNPRINTF p[1] = '%'; p[2] = 'n'; p[3] = '\0'; #else p[1] = '\0'; #endif /* Construct the arguments for calling snprintf or sprintf. */ prefix_count = 0; if (dp->width_arg_index != ARG_NONE) { if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; } if (dp->precision_arg_index != ARG_NONE) { if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; } #if USE_SNPRINTF /* Prepare checking whether snprintf returns the count via %n. */ ENSURE_ALLOCATION (xsum (length, 1)); result[length] = '\0'; #endif for (;;) { size_t maxlen; int count; int retcount; maxlen = allocated - length; count = -1; retcount = 0; #if USE_SNPRINTF # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ retcount = SNPRINTF (result + length, maxlen, buf, \ arg, &count); \ break; \ case 1: \ retcount = SNPRINTF (result + length, maxlen, buf, \ prefixes[0], arg, &count); \ break; \ case 2: \ retcount = SNPRINTF (result + length, maxlen, buf, \ prefixes[0], prefixes[1], arg, \ &count); \ break; \ default: \ abort (); \ } #else # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ count = sprintf (tmp, buf, arg); \ break; \ case 1: \ count = sprintf (tmp, buf, prefixes[0], arg); \ break; \ case 2: \ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ arg); \ break; \ default: \ abort (); \ } #endif switch (type) { case TYPE_SCHAR: { int arg = a.arg[dp->arg_index].a.a_schar; SNPRINTF_BUF (arg); } break; case TYPE_UCHAR: { unsigned int arg = a.arg[dp->arg_index].a.a_uchar; SNPRINTF_BUF (arg); } break; case TYPE_SHORT: { int arg = a.arg[dp->arg_index].a.a_short; SNPRINTF_BUF (arg); } break; case TYPE_USHORT: { unsigned int arg = a.arg[dp->arg_index].a.a_ushort; SNPRINTF_BUF (arg); } break; case TYPE_INT: { int arg = a.arg[dp->arg_index].a.a_int; SNPRINTF_BUF (arg); } break; case TYPE_UINT: { unsigned int arg = a.arg[dp->arg_index].a.a_uint; SNPRINTF_BUF (arg); } break; case TYPE_LONGINT: { long int arg = a.arg[dp->arg_index].a.a_longint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGINT: { unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; SNPRINTF_BUF (arg); } break; #ifdef HAVE_LONG_LONG case TYPE_LONGLONGINT: { long long int arg = a.arg[dp->arg_index].a.a_longlongint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGLONGINT: { unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; SNPRINTF_BUF (arg); } break; #endif case TYPE_DOUBLE: { double arg = a.arg[dp->arg_index].a.a_double; SNPRINTF_BUF (arg); } break; #ifdef HAVE_LONG_DOUBLE case TYPE_LONGDOUBLE: { long double arg = a.arg[dp->arg_index].a.a_longdouble; SNPRINTF_BUF (arg); } break; #endif case TYPE_CHAR: { int arg = a.arg[dp->arg_index].a.a_char; SNPRINTF_BUF (arg); } break; #ifdef HAVE_WINT_T case TYPE_WIDE_CHAR: { wint_t arg = a.arg[dp->arg_index].a.a_wide_char; SNPRINTF_BUF (arg); } break; #endif case TYPE_STRING: { const char *arg = a.arg[dp->arg_index].a.a_string; SNPRINTF_BUF (arg); } break; #ifdef HAVE_WCHAR_T case TYPE_WIDE_STRING: { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; SNPRINTF_BUF (arg); } break; #endif case TYPE_POINTER: { void *arg = a.arg[dp->arg_index].a.a_pointer; SNPRINTF_BUF (arg); } break; default: abort (); } #if USE_SNPRINTF /* Portability: Not all implementations of snprintf() are ISO C 99 compliant. Determine the number of bytes that snprintf() has produced or would have produced. */ if (count >= 0) { /* Verify that snprintf() has NUL-terminated its result. */ if (count < maxlen && result[length + count] != '\0') abort (); /* Portability hack. */ if (retcount > count) count = retcount; } else { /* snprintf() doesn't understand the '%n' directive. */ if (p[1] != '\0') { /* Don't use the '%n' directive; instead, look at the snprintf() return value. */ p[1] = '\0'; continue; } else { /* Look at the snprintf() return value. */ if (retcount < 0) { /* HP-UX 10.20 snprintf() is doubly deficient: It doesn't understand the '%n' directive, *and* it returns -1 (rather than the length that would have been required) when the buffer is too small. */ size_t bigger_need = xsum (xtimes (allocated, 2), 12); ENSURE_ALLOCATION (bigger_need); continue; } else count = retcount; } } #endif /* Attempt to handle failure. */ if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EINVAL; return NULL; } #if !USE_SNPRINTF if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); #endif /* Make room for the result. */ if (count >= maxlen) { /* Need at least count bytes. But allocate proportionally, to avoid looping eternally if snprintf() reports a too small count. */ size_t n = xmax (xsum (length, count), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); #if USE_SNPRINTF continue; #endif } #if USE_SNPRINTF /* The snprintf() result did fit. */ #else /* Append the sprintf() result. */ memcpy (result + length, tmp, count * sizeof (CHAR_T)); if (tmp != tmpbuf) free (tmp); #endif length += count; break; } } } } /* Add the final NUL. */ ENSURE_ALLOCATION (xsum (length, 1)); result[length] = '\0'; if (result != resultbuf && length + 1 < allocated) { /* Shrink the allocated memory if possible. */ CHAR_T *memory; memory = (CHAR_T *) realloc (result, (length + 1) * sizeof (CHAR_T)); if (memory != NULL) result = memory; } if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); *lengthp = length; return result; out_of_memory: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); out_of_memory_1: CLEANUP (); errno = ENOMEM; return NULL; } } #undef SNPRINTF #undef USE_SNPRINTF #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef CHAR_T #undef VASNPRINTF lbreakout2-2.6.5/intl/gettextP.h0000664000175000017500000001453012140767176013462 00000000000000/* Header describing internals of libintl library. Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _GETTEXTP_H #define _GETTEXTP_H #include /* Get size_t. */ #ifdef _LIBC # include "../iconv/gconv_int.h" #else # if HAVE_ICONV # include # endif #endif #include "loadinfo.h" #include "gmo.h" /* Get nls_uint32. */ /* @@ end of prolog @@ */ #ifndef internal_function # define internal_function #endif #ifndef attribute_hidden # define attribute_hidden #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif #ifndef W # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif #ifdef _LIBC # include # define SWAP(i) bswap_32 (i) #else static inline nls_uint32 SWAP (i) nls_uint32 i; { return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); } #endif /* In-memory representation of system dependent string. */ struct sysdep_string_desc { /* Length of addressed string, including the trailing NUL. */ size_t length; /* Pointer to addressed string. */ const char *pointer; }; /* The representation of an opened message catalog. */ struct loaded_domain { /* Pointer to memory containing the .mo file. */ const char *data; /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */ int use_mmap; /* Size of mmap()ed memory. */ size_t mmap_size; /* 1 if the .mo file uses a different endianness than this machine. */ int must_swap; /* Pointer to additional malloc()ed memory. */ void *malloced; /* Number of static strings pairs. */ nls_uint32 nstrings; /* Pointer to descriptors of original strings in the file. */ const struct string_desc *orig_tab; /* Pointer to descriptors of translated strings in the file. */ const struct string_desc *trans_tab; /* Number of system dependent strings pairs. */ nls_uint32 n_sysdep_strings; /* Pointer to descriptors of original sysdep strings. */ const struct sysdep_string_desc *orig_sysdep_tab; /* Pointer to descriptors of translated sysdep strings. */ const struct sysdep_string_desc *trans_sysdep_tab; /* Size of hash table. */ nls_uint32 hash_size; /* Pointer to hash table. */ const nls_uint32 *hash_tab; /* 1 if the hash table uses a different endianness than this machine. */ int must_swap_hash_tab; int codeset_cntr; #ifdef _LIBC __gconv_t conv; #else # if HAVE_ICONV iconv_t conv; # endif #endif char **conv_tab; struct expression *plural; unsigned long int nplurals; }; /* We want to allocate a string at the end of the struct. But ISO C doesn't allow zero sized arrays. */ #ifdef __GNUC__ # define ZERO 0 #else # define ZERO 1 #endif /* A set of settings bound to a message domain. Used to store settings from bindtextdomain() and bind_textdomain_codeset(). */ struct binding { struct binding *next; char *dirname; int codeset_cntr; /* Incremented each time codeset changes. */ char *codeset; char domainname[ZERO]; }; /* A counter which is incremented each time some previous translations become invalid. This variable is part of the external ABI of the GNU libintl. */ extern int _nl_msg_cat_cntr; #ifndef _LIBC const char *_nl_locale_name (int category, const char *categoryname); #endif struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale, const char *__domainname, struct binding *__domainbinding) internal_function; void _nl_load_domain (struct loaded_l10nfile *__domain, struct binding *__domainbinding) internal_function; void _nl_unload_domain (struct loaded_domain *__domain) internal_function; const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file, struct loaded_domain *__domain, struct binding *__domainbinding) internal_function; void _nl_free_domain_conv (struct loaded_domain *__domain) internal_function; char *_nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *msgid, size_t *lengthp) internal_function; #ifdef _LIBC extern char *__gettext (const char *__msgid); extern char *__dgettext (const char *__domainname, const char *__msgid); extern char *__dcgettext (const char *__domainname, const char *__msgid, int __category); extern char *__ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n); extern char *__dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int n); extern char *__dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category); extern char *__dcigettext (const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category); extern char *__textdomain (const char *__domainname); extern char *__bindtextdomain (const char *__domainname, const char *__dirname); extern char *__bind_textdomain_codeset (const char *__domainname, const char *__codeset); #else /* Declare the exported libintl_* functions, in a way that allows us to call them under their real name. */ # undef _INTL_REDIRECT_INLINE # undef _INTL_REDIRECT_MACROS # define _INTL_REDIRECT_MACROS # include "libgnuintl.h" extern char *libintl_dcigettext (const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category); #endif /* @@ begin of epilog @@ */ #endif /* gettextP.h */ lbreakout2-2.6.5/intl/VERSION0000664000175000017500000000005012140767176012545 00000000000000GNU gettext library from gettext-0.14.1 lbreakout2-2.6.5/intl/ngettext.c0000664000175000017500000000367012140767176013516 00000000000000/* Implementation of ngettext(3) function. Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define NGETTEXT __ngettext # define DCNGETTEXT __dcngettext #else # define NGETTEXT libintl_ngettext # define DCNGETTEXT libintl_dcngettext #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n) { return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__ngettext, ngettext); #endif lbreakout2-2.6.5/intl/printf-parse.c0000664000175000017500000002733312140767176014270 00000000000000/* Formatted output to strings. Copyright (C) 1999-2000, 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif /* Specification. */ #if WIDE_CHAR_VERSION # include "wprintf-parse.h" #else # include "printf-parse.h" #endif /* Get size_t, NULL. */ #include /* Get intmax_t. */ #if HAVE_STDINT_H_WITH_UINTMAX # include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX # include #endif /* malloc(), realloc(), free(). */ #include /* Checked size_t computations. */ #include "xsize.h" #if WIDE_CHAR_VERSION # define PRINTF_PARSE wprintf_parse # define CHAR_T wchar_t # define DIRECTIVE wchar_t_directive # define DIRECTIVES wchar_t_directives #else # define PRINTF_PARSE printf_parse # define CHAR_T char # define DIRECTIVE char_directive # define DIRECTIVES char_directives #endif #ifdef STATIC STATIC #endif int PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) { const CHAR_T *cp = format; /* pointer into format */ size_t arg_posn = 0; /* number of regular arguments consumed */ size_t d_allocated; /* allocated elements of d->dir */ size_t a_allocated; /* allocated elements of a->arg */ size_t max_width_length = 0; size_t max_precision_length = 0; d->count = 0; d_allocated = 1; d->dir = malloc (d_allocated * sizeof (DIRECTIVE)); if (d->dir == NULL) /* Out of memory. */ return -1; a->count = 0; a_allocated = 0; a->arg = NULL; #define REGISTER_ARG(_index_,_type_) \ { \ size_t n = (_index_); \ if (n >= a_allocated) \ { \ size_t memory_size; \ argument *memory; \ \ a_allocated = xtimes (a_allocated, 2); \ if (a_allocated <= n) \ a_allocated = xsum (n, 1); \ memory_size = xtimes (a_allocated, sizeof (argument)); \ if (size_overflow_p (memory_size)) \ /* Overflow, would lead to out of memory. */ \ goto error; \ memory = (a->arg \ ? realloc (a->arg, memory_size) \ : malloc (memory_size)); \ if (memory == NULL) \ /* Out of memory. */ \ goto error; \ a->arg = memory; \ } \ while (a->count <= n) \ a->arg[a->count++].type = TYPE_NONE; \ if (a->arg[n].type == TYPE_NONE) \ a->arg[n].type = (_type_); \ else if (a->arg[n].type != (_type_)) \ /* Ambiguous type for positional argument. */ \ goto error; \ } while (*cp != '\0') { CHAR_T c = *cp++; if (c == '%') { size_t arg_index = ARG_NONE; DIRECTIVE *dp = &d->dir[d->count];/* pointer to next directive */ /* Initialize the next directive. */ dp->dir_start = cp - 1; dp->flags = 0; dp->width_start = NULL; dp->width_end = NULL; dp->width_arg_index = ARG_NONE; dp->precision_start = NULL; dp->precision_end = NULL; dp->precision_arg_index = ARG_NONE; dp->arg_index = ARG_NONE; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; arg_index = n - 1; cp = np + 1; } } /* Read the flags. */ for (;;) { if (*cp == '\'') { dp->flags |= FLAG_GROUP; cp++; } else if (*cp == '-') { dp->flags |= FLAG_LEFT; cp++; } else if (*cp == '+') { dp->flags |= FLAG_SHOWSIGN; cp++; } else if (*cp == ' ') { dp->flags |= FLAG_SPACE; cp++; } else if (*cp == '#') { dp->flags |= FLAG_ALT; cp++; } else if (*cp == '0') { dp->flags |= FLAG_ZERO; cp++; } else break; } /* Parse the field width. */ if (*cp == '*') { dp->width_start = cp; cp++; dp->width_end = cp; if (max_width_length < 1) max_width_length = 1; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->width_arg_index = n - 1; cp = np + 1; } } if (dp->width_arg_index == ARG_NONE) { dp->width_arg_index = arg_posn++; if (dp->width_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->width_arg_index, TYPE_INT); } else if (*cp >= '0' && *cp <= '9') { size_t width_length; dp->width_start = cp; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->width_end = cp; width_length = dp->width_end - dp->width_start; if (max_width_length < width_length) max_width_length = width_length; } /* Parse the precision. */ if (*cp == '.') { cp++; if (*cp == '*') { dp->precision_start = cp - 1; cp++; dp->precision_end = cp; if (max_precision_length < 2) max_precision_length = 2; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->precision_arg_index = n - 1; cp = np + 1; } } if (dp->precision_arg_index == ARG_NONE) { dp->precision_arg_index = arg_posn++; if (dp->precision_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->precision_arg_index, TYPE_INT); } else { size_t precision_length; dp->precision_start = cp - 1; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->precision_end = cp; precision_length = dp->precision_end - dp->precision_start; if (max_precision_length < precision_length) max_precision_length = precision_length; } } { arg_type type; /* Parse argument type/size specifiers. */ { int flags = 0; for (;;) { if (*cp == 'h') { flags |= (1 << (flags & 1)); cp++; } else if (*cp == 'L') { flags |= 4; cp++; } else if (*cp == 'l') { flags += 8; cp++; } #ifdef HAVE_INTMAX_T else if (*cp == 'j') { if (sizeof (intmax_t) > sizeof (long)) { /* intmax_t = long long */ flags += 16; } else if (sizeof (intmax_t) > sizeof (int)) { /* intmax_t = long */ flags += 8; } cp++; } #endif else if (*cp == 'z' || *cp == 'Z') { /* 'z' is standardized in ISO C 99, but glibc uses 'Z' because the warning facility in gcc-2.95.2 understands only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ if (sizeof (size_t) > sizeof (long)) { /* size_t = long long */ flags += 16; } else if (sizeof (size_t) > sizeof (int)) { /* size_t = long */ flags += 8; } cp++; } else if (*cp == 't') { if (sizeof (ptrdiff_t) > sizeof (long)) { /* ptrdiff_t = long long */ flags += 16; } else if (sizeof (ptrdiff_t) > sizeof (int)) { /* ptrdiff_t = long */ flags += 8; } cp++; } else break; } /* Read the conversion character. */ c = *cp++; switch (c) { case 'd': case 'i': #ifdef HAVE_LONG_LONG if (flags >= 16 || (flags & 4)) type = TYPE_LONGLONGINT; else #endif if (flags >= 8) type = TYPE_LONGINT; else if (flags & 2) type = TYPE_SCHAR; else if (flags & 1) type = TYPE_SHORT; else type = TYPE_INT; break; case 'o': case 'u': case 'x': case 'X': #ifdef HAVE_LONG_LONG if (flags >= 16 || (flags & 4)) type = TYPE_ULONGLONGINT; else #endif if (flags >= 8) type = TYPE_ULONGINT; else if (flags & 2) type = TYPE_UCHAR; else if (flags & 1) type = TYPE_USHORT; else type = TYPE_UINT; break; case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': #ifdef HAVE_LONG_DOUBLE if (flags >= 16 || (flags & 4)) type = TYPE_LONGDOUBLE; else #endif type = TYPE_DOUBLE; break; case 'c': if (flags >= 8) #ifdef HAVE_WINT_T type = TYPE_WIDE_CHAR; #else goto error; #endif else type = TYPE_CHAR; break; #ifdef HAVE_WINT_T case 'C': type = TYPE_WIDE_CHAR; c = 'c'; break; #endif case 's': if (flags >= 8) #ifdef HAVE_WCHAR_T type = TYPE_WIDE_STRING; #else goto error; #endif else type = TYPE_STRING; break; #ifdef HAVE_WCHAR_T case 'S': type = TYPE_WIDE_STRING; c = 's'; break; #endif case 'p': type = TYPE_POINTER; break; case 'n': #ifdef HAVE_LONG_LONG if (flags >= 16 || (flags & 4)) type = TYPE_COUNT_LONGLONGINT_POINTER; else #endif if (flags >= 8) type = TYPE_COUNT_LONGINT_POINTER; else if (flags & 2) type = TYPE_COUNT_SCHAR_POINTER; else if (flags & 1) type = TYPE_COUNT_SHORT_POINTER; else type = TYPE_COUNT_INT_POINTER; break; case '%': type = TYPE_NONE; break; default: /* Unknown conversion character. */ goto error; } } if (type != TYPE_NONE) { dp->arg_index = arg_index; if (dp->arg_index == ARG_NONE) { dp->arg_index = arg_posn++; if (dp->arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->arg_index, type); } dp->conversion = c; dp->dir_end = cp; } d->count++; if (d->count >= d_allocated) { size_t memory_size; DIRECTIVE *memory; d_allocated = xtimes (d_allocated, 2); memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ goto error; memory = realloc (d->dir, memory_size); if (memory == NULL) /* Out of memory. */ goto error; d->dir = memory; } } } d->dir[d->count].dir_start = cp; d->max_width_length = max_width_length; d->max_precision_length = max_precision_length; return 0; error: if (a->arg) free (a->arg); if (d->dir) free (d->dir); return -1; } #undef DIRECTIVES #undef DIRECTIVE #undef CHAR_T #undef PRINTF_PARSE lbreakout2-2.6.5/intl/dngettext.c0000664000175000017500000000354212140767176013660 00000000000000/* Implementation of the dngettext(3) function. Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DNGETTEXT __dngettext # define DCNGETTEXT __dcngettext #else # define DNGETTEXT libintl_dngettext # define DCNGETTEXT libintl_dcngettext #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale and skip message according to the plural form. */ char * DNGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n) { return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dngettext, dngettext); #endif lbreakout2-2.6.5/intl/vasnwprintf.h0000664000175000017500000000330212140767176014232 00000000000000/* vswprintf with automatic memory allocation. Copyright (C) 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _VASNWPRINTF_H #define _VASNWPRINTF_H /* Get va_list. */ #include /* Get wchar_t, size_t. */ #include #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. */ extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...); extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args); #ifdef __cplusplus } #endif #endif /* _VASNWPRINTF_H */ lbreakout2-2.6.5/intl/log.c0000664000175000017500000000530312140767176012430 00000000000000/* Log file output. Copyright (C) 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* Written by Bruno Haible . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include /* Print an ASCII string with quotes and escape sequences where needed. */ static void print_escaped (FILE *stream, const char *str) { putc ('"', stream); for (; *str != '\0'; str++) if (*str == '\n') { fputs ("\\n\"", stream); if (str[1] == '\0') return; fputs ("\n\"", stream); } else { if (*str == '"' || *str == '\\') putc ('\\', stream); putc (*str, stream); } putc ('"', stream); } /* Add to the log file an entry denoting a failed translation. */ void _nl_log_untranslated (const char *logfilename, const char *domainname, const char *msgid1, const char *msgid2, int plural) { static char *last_logfilename = NULL; static FILE *last_logfile = NULL; FILE *logfile; /* Can we reuse the last opened logfile? */ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0) { /* Close the last used logfile. */ if (last_logfilename != NULL) { if (last_logfile != NULL) { fclose (last_logfile); last_logfile = NULL; } free (last_logfilename); last_logfilename = NULL; } /* Open the logfile. */ last_logfilename = (char *) malloc (strlen (logfilename) + 1); if (last_logfilename == NULL) return; strcpy (last_logfilename, logfilename); last_logfile = fopen (logfilename, "a"); if (last_logfile == NULL) return; } logfile = last_logfile; fprintf (logfile, "domain "); print_escaped (logfile, domainname); fprintf (logfile, "\nmsgid "); print_escaped (logfile, msgid1); if (plural) { fprintf (logfile, "\nmsgid_plural "); print_escaped (logfile, msgid2); fprintf (logfile, "\nmsgstr[0] \"\"\n"); } else fprintf (logfile, "\nmsgstr \"\"\n"); putc ('\n', logfile); } lbreakout2-2.6.5/intl/hash-string.h0000664000175000017500000000314112140767176014101 00000000000000/* Description of GNU message catalog format: string hashing function. Copyright (C) 1995, 1997-1998, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* @@ end of prolog @@ */ /* We assume to have `unsigned long int' value with at least 32 bits. */ #define HASHWORDBITS 32 /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ static inline unsigned long int hash_string (const char *str_param) { unsigned long int hval, g; const char *str = str_param; /* Compute the hash value for the given string. */ hval = 0; while (*str != '\0') { hval <<= 4; hval += (unsigned char) *str++; g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } return hval; } lbreakout2-2.6.5/intl/textdomain.c0000664000175000017500000001066012140767176014025 00000000000000/* Implementation of the textdomain(3) function. Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include "gettextP.h" #ifdef _LIBC /* We have to handle multi-threaded applications. */ # include #else /* Provide dummy implementation if this is outside glibc. */ # define __libc_rwlock_define(CLASS, NAME) # define __libc_rwlock_wrlock(NAME) # define __libc_rwlock_unlock(NAME) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_default_domain libintl_nl_default_default_domain # define _nl_current_default_domain libintl_nl_current_default_domain #endif /* @@ end of prolog @@ */ /* Name of the default text domain. */ extern const char _nl_default_default_domain[] attribute_hidden; /* Default text domain in which entries for gettext(3) are to be found. */ extern const char *_nl_current_default_domain attribute_hidden; /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define TEXTDOMAIN __textdomain # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define TEXTDOMAIN libintl_textdomain #endif /* Lock variable to protect the global data in the gettext implementation. */ __libc_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ char * TEXTDOMAIN (const char *domainname) { char *new_domain; char *old_domain; /* A NULL pointer requests the current setting. */ if (domainname == NULL) return (char *) _nl_current_default_domain; __libc_rwlock_wrlock (_nl_state_lock); old_domain = (char *) _nl_current_default_domain; /* If domain name is the null string set to default domain "messages". */ if (domainname[0] == '\0' || strcmp (domainname, _nl_default_default_domain) == 0) { _nl_current_default_domain = _nl_default_default_domain; new_domain = (char *) _nl_current_default_domain; } else if (strcmp (domainname, old_domain) == 0) /* This can happen and people will use it to signal that some environment variable changed. */ new_domain = old_domain; else { /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ #if defined _LIBC || defined HAVE_STRDUP new_domain = strdup (domainname); #else size_t len = strlen (domainname) + 1; new_domain = (char *) malloc (len); if (new_domain != NULL) memcpy (new_domain, domainname, len); #endif if (new_domain != NULL) _nl_current_default_domain = new_domain; } /* We use this possibility to signal a change of the loaded catalogs since this is most likely the case and there is no other easy we to do it. Do it only when the call was successful. */ if (new_domain != NULL) { ++_nl_msg_cat_cntr; if (old_domain != new_domain && old_domain != _nl_default_default_domain) free (old_domain); } __libc_rwlock_unlock (_nl_state_lock); return new_domain; } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__textdomain, textdomain); #endif lbreakout2-2.6.5/intl/loadinfo.h0000664000175000017500000001332212140767176013447 00000000000000/* Copyright (C) 1996-1999, 2000-2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _LOADINFO_H #define _LOADINFO_H 1 /* Declarations of locale dependent catalog lookup functions. Implemented in localealias.c Possibly replace a locale name by another. explodename.c Split a locale name into its various fields. l10nflist.c Generate a list of filenames of possible message catalogs. finddomain.c Find and open the relevant message catalogs. The main function _nl_find_domain() in finddomain.c is declared in gettextP.h. */ #ifndef internal_function # define internal_function #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif /* Separator in PATH like lists of pathnames. */ #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define PATH_SEPARATOR ';' #else /* Unix */ # define PATH_SEPARATOR ':' #endif /* Encoding of locale name parts. */ #define CEN_REVISION 1 #define CEN_SPONSOR 2 #define CEN_SPECIAL 4 #define XPG_NORM_CODESET 8 #define XPG_CODESET 16 #define TERRITORY 32 #define CEN_AUDIENCE 64 #define XPG_MODIFIER 128 #define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) #define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) struct loaded_l10nfile { const char *filename; int decided; const void *data; struct loaded_l10nfile *next; struct loaded_l10nfile *successor[1]; }; /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ extern const char *_nl_normalize_codeset (const char *codeset, size_t name_len); /* Lookup a locale dependent file. *L10NFILE_LIST denotes a pool of lookup results of locale dependent files of the same kind, sorted in decreasing order of ->filename. DIRLIST and DIRLIST_LEN are an argz list of directories in which to look, containing at least one directory (i.e. DIRLIST_LEN > 0). MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER, SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as produced by _nl_explode_name(). FILENAME is the filename suffix. The return value is the lookup result, either found in *L10NFILE_LIST, or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL. If the return value is non-NULL, it is added to *L10NFILE_LIST, and its ->next field denotes the chaining inside *L10NFILE_LIST, and furthermore its ->successor[] field contains a list of other lookup results from which this lookup result inherits. */ extern struct loaded_l10nfile * _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *special, const char *sponsor, const char *revision, const char *filename, int do_allocate); /* Lookup the real locale name for a locale alias NAME, or NULL if NAME is not a locale alias (but possibly a real locale name). The return value is statically allocated and must not be freed. */ extern const char *_nl_expand_alias (const char *name); /* Split a locale name NAME into its pieces: language, modifier, territory, codeset, special, sponsor, revision. NAME gets destructively modified: NUL bytes are inserted here and there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY, *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a pointer into the old NAME string, or NULL. *NORMALIZED_CODESET gets assigned the expanded *CODESET, if it is different from *CODESET; this one is dynamically allocated and has to be freed by the caller. The return value is a bitmask, where each bit corresponds to one filled-in value: XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER, TERRITORY for *TERRITORY, XPG_CODESET for *CODESET, XPG_NORM_CODESET for *NORMALIZED_CODESET, CEN_SPECIAL for *SPECIAL, CEN_SPONSOR for *SPONSOR, CEN_REVISION for *REVISION. */ extern int _nl_explode_name (char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset, const char **special, const char **sponsor, const char **revision); /* Split a locale name NAME into a leading language part and all the rest. Return a pointer to the first character after the language, i.e. to the first byte of the rest. */ extern char *_nl_find_language (const char *name); #endif /* loadinfo.h */ lbreakout2-2.6.5/intl/osdep.c0000664000175000017500000000164312140767176012764 00000000000000/* OS dependent parts of libintl. Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #if defined __EMX__ # include "os2compat.c" #else /* Avoid AIX compiler warning. */ typedef int dummy; #endif lbreakout2-2.6.5/intl/vasnprintf.h0000664000175000017500000000436012140767176014050 00000000000000/* vsprintf with automatic memory allocation. Copyright (C) 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _VASNPRINTF_H #define _VASNPRINTF_H /* Get va_list. */ #include /* Get size_t. */ #include #ifndef __attribute__ /* This feature is available in gcc versions 2.5 and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ # define __attribute__(Spec) /* empty */ # endif /* The __-protected variants of `format' and `printf' attributes are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) # define __format__ format # define __printf__ printf # endif #endif #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. */ extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) __attribute__ ((__format__ (__printf__, 3, 0))); #ifdef __cplusplus } #endif #endif /* _VASNPRINTF_H */ lbreakout2-2.6.5/intl/ref-del.sin0000664000175000017500000000202412140767176013531 00000000000000# Remove this package from a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library 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. # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// s/ @PACKAGE@ / / s/^/# Packages using this file:/ } lbreakout2-2.6.5/intl/libgnuintl.h.in0000664000175000017500000003114612140767176014434 00000000000000/* Message catalogs for internationalization. Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _LIBINTL_H #define _LIBINTL_H 1 #include /* The LC_MESSAGES locale category is the category used by the functions gettext() and dgettext(). It is specified in POSIX, but not in ANSI C. On systems that don't define it, use an arbitrary value instead. On Solaris, defines __LOCALE_H (or _LOCALE_H in Solaris 2.5) then includes (i.e. this file!) and then only defines LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES in this case. */ #if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun)) # define LC_MESSAGES 1729 #endif /* We define an additional symbol to signal that we use the GNU implementation of gettext. */ #define __USE_GNU_GETTEXT 1 /* Provide information about the supported file formats. Returns the maximum minor revision number supported for a given major revision. */ #define __GNU_GETTEXT_SUPPORTED_REVISION(major) \ ((major) == 0 ? 1 : -1) /* Resolve a platform specific conflict on DJGPP. GNU gettext takes precedence over _conio_gettext. */ #ifdef __DJGPP__ # undef gettext #endif #ifdef __cplusplus extern "C" { #endif /* We redirect the functions to those prefixed with "libintl_". This is necessary, because some systems define gettext/textdomain/... in the C library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer). If we used the unprefixed names, there would be cases where the definition in the C library would override the one in the libintl.so shared library. Recall that on ELF systems, the symbols are looked up in the following order: 1. in the executable, 2. in the shared libraries specified on the link command line, in order, 3. in the dependencies of the shared libraries specified on the link command line, 4. in the dlopen()ed shared libraries, in the order in which they were dlopen()ed. The definition in the C library would override the one in libintl.so if either * -lc is given on the link command line and -lintl isn't, or * -lc is given on the link command line before -lintl, or * libintl.so is a dependency of a dlopen()ed shared library but not linked to the executable at link time. Since Solaris gettext() behaves differently than GNU gettext(), this would be unacceptable. The redirection happens by default through macros in C, so that &gettext is independent of the compilation unit, but through inline functions in C++, in order not to interfere with the name mangling of class fields or class methods called 'gettext'. */ /* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS. If he doesn't, we choose the method. A third possible method is _INTL_REDIRECT_ASM, supported only by GCC. */ #if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS) # if __GNUC__ >= 2 && !defined __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus) # define _INTL_REDIRECT_ASM # else # ifdef __cplusplus # define _INTL_REDIRECT_INLINE # else # define _INTL_REDIRECT_MACROS # endif # endif #endif /* Auxiliary macros. */ #ifdef _INTL_REDIRECT_ASM # define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname)) # define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring # define _INTL_STRINGIFY(prefix) #prefix #else # define _INTL_ASM(cname) #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_gettext (const char *__msgid); static inline char *gettext (const char *__msgid) { return libintl_gettext (__msgid); } #else #ifdef _INTL_REDIRECT_MACROS # define gettext libintl_gettext #endif extern char *gettext (const char *__msgid) _INTL_ASM (libintl_gettext); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dgettext (const char *__domainname, const char *__msgid); static inline char *dgettext (const char *__domainname, const char *__msgid) { return libintl_dgettext (__domainname, __msgid); } #else #ifdef _INTL_REDIRECT_MACROS # define dgettext libintl_dgettext #endif extern char *dgettext (const char *__domainname, const char *__msgid) _INTL_ASM (libintl_dgettext); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcgettext (const char *__domainname, const char *__msgid, int __category); static inline char *dcgettext (const char *__domainname, const char *__msgid, int __category) { return libintl_dcgettext (__domainname, __msgid, __category); } #else #ifdef _INTL_REDIRECT_MACROS # define dcgettext libintl_dcgettext #endif extern char *dcgettext (const char *__domainname, const char *__msgid, int __category) _INTL_ASM (libintl_dcgettext); #endif /* Similar to `gettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n); static inline char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) { return libintl_ngettext (__msgid1, __msgid2, __n); } #else #ifdef _INTL_REDIRECT_MACROS # define ngettext libintl_ngettext #endif extern char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_ASM (libintl_ngettext); #endif /* Similar to `dgettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n); static inline char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) { return libintl_dngettext (__domainname, __msgid1, __msgid2, __n); } #else #ifdef _INTL_REDIRECT_MACROS # define dngettext libintl_dngettext #endif extern char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_ASM (libintl_dngettext); #endif /* Similar to `dcgettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category); static inline char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) { return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category); } #else #ifdef _INTL_REDIRECT_MACROS # define dcngettext libintl_dcngettext #endif extern char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) _INTL_ASM (libintl_dcngettext); #endif /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_textdomain (const char *__domainname); static inline char *textdomain (const char *__domainname) { return libintl_textdomain (__domainname); } #else #ifdef _INTL_REDIRECT_MACROS # define textdomain libintl_textdomain #endif extern char *textdomain (const char *__domainname) _INTL_ASM (libintl_textdomain); #endif /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_bindtextdomain (const char *__domainname, const char *__dirname); static inline char *bindtextdomain (const char *__domainname, const char *__dirname) { return libintl_bindtextdomain (__domainname, __dirname); } #else #ifdef _INTL_REDIRECT_MACROS # define bindtextdomain libintl_bindtextdomain #endif extern char *bindtextdomain (const char *__domainname, const char *__dirname) _INTL_ASM (libintl_bindtextdomain); #endif /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_bind_textdomain_codeset (const char *__domainname, const char *__codeset); static inline char *bind_textdomain_codeset (const char *__domainname, const char *__codeset) { return libintl_bind_textdomain_codeset (__domainname, __codeset); } #else #ifdef _INTL_REDIRECT_MACROS # define bind_textdomain_codeset libintl_bind_textdomain_codeset #endif extern char *bind_textdomain_codeset (const char *__domainname, const char *__codeset) _INTL_ASM (libintl_bind_textdomain_codeset); #endif /* Support for format strings with positions in *printf(), following the POSIX/XSI specification. Note: These replacements for the *printf() functions are visible only in source files that #include or #include "gettext.h". Packages that use *printf() in source files that don't refer to _() or gettext() but for which the format string could be the return value of _() or gettext() need to add this #include. Oh well. */ #if !@HAVE_POSIX_PRINTF@ #include #include /* Get va_list. */ #if __STDC__ || defined __cplusplus || defined _MSC_VER # include #else # include #endif #undef fprintf #define fprintf libintl_fprintf extern int fprintf (FILE *, const char *, ...); #undef vfprintf #define vfprintf libintl_vfprintf extern int vfprintf (FILE *, const char *, va_list); #undef printf #define printf libintl_printf extern int printf (const char *, ...); #undef vprintf #define vprintf libintl_vprintf extern int vprintf (const char *, va_list); #undef sprintf #define sprintf libintl_sprintf extern int sprintf (char *, const char *, ...); #undef vsprintf #define vsprintf libintl_vsprintf extern int vsprintf (char *, const char *, va_list); #if @HAVE_SNPRINTF@ #undef snprintf #define snprintf libintl_snprintf extern int snprintf (char *, size_t, const char *, ...); #undef vsnprintf #define vsnprintf libintl_vsnprintf extern int vsnprintf (char *, size_t, const char *, va_list); #endif #if @HAVE_ASPRINTF@ #undef asprintf #define asprintf libintl_asprintf extern int asprintf (char **, const char *, ...); #undef vasprintf #define vasprintf libintl_vasprintf extern int vasprintf (char **, const char *, va_list); #endif #if @HAVE_WPRINTF@ #undef fwprintf #define fwprintf libintl_fwprintf extern int fwprintf (FILE *, const wchar_t *, ...); #undef vfwprintf #define vfwprintf libintl_vfwprintf extern int vfwprintf (FILE *, const wchar_t *, va_list); #undef wprintf #define wprintf libintl_wprintf extern int wprintf (const wchar_t *, ...); #undef vwprintf #define vwprintf libintl_vwprintf extern int vwprintf (const wchar_t *, va_list); #undef swprintf #define swprintf libintl_swprintf extern int swprintf (wchar_t *, size_t, const wchar_t *, ...); #undef vswprintf #define vswprintf libintl_vswprintf extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list); #endif #endif /* Support for relocatable packages. */ /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ #define libintl_set_relocation_prefix libintl_set_relocation_prefix extern void libintl_set_relocation_prefix (const char *orig_prefix, const char *curr_prefix); #ifdef __cplusplus } #endif #endif /* libintl.h */ lbreakout2-2.6.5/intl/dcigettext.c0000664000175000017500000010044712140767176014020 00000000000000/* Implementation of the internal dcigettext function. Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #ifndef errno extern int errno; #endif #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #include #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include #include #if defined HAVE_SYS_PARAM_H || defined _LIBC # include #endif #include "gettextP.h" #include "plural-exp.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include "hash-string.h" /* Thread safetyness. */ #ifdef _LIBC # include #else /* Provide dummy implementation if this is outside glibc. */ # define __libc_lock_define_initialized(CLASS, NAME) # define __libc_lock_lock(NAME) # define __libc_lock_unlock(NAME) # define __libc_rwlock_define_initialized(CLASS, NAME) # define __libc_rwlock_rdlock(NAME) # define __libc_rwlock_unlock(NAME) #endif /* Alignment of types. */ #if defined __GNUC__ && __GNUC__ >= 2 # define alignof(TYPE) __alignof__ (TYPE) #else # define alignof(TYPE) \ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_default_domain libintl_nl_default_default_domain # define _nl_current_default_domain libintl_nl_current_default_domain # define _nl_default_dirname libintl_nl_default_dirname # define _nl_domain_bindings libintl_nl_domain_bindings #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define getcwd __getcwd # ifndef stpcpy # define stpcpy __stpcpy # endif # define tfind __tfind #else # if !defined HAVE_GETCWD char *getwd (); # define getcwd(buf, max) getwd (buf) # else # if VMS # define getcwd(buf, max) (getcwd) (buf, max, 0) # else char *getcwd (); # endif # endif # ifndef HAVE_STPCPY static char *stpcpy (char *dest, const char *src); # endif # ifndef HAVE_MEMPCPY static void *mempcpy (void *dest, const void *src, size_t n); # endif #endif /* Amount to increase buffer size by in each try. */ #define PATH_INCR 32 /* The following is from pathmax.h. */ /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define PATH_MAX but might cause redefinition warnings when sys/param.h is later included (as on MORE/BSD 4.3). */ #if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__) # include #endif #ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 255 #endif #if !defined PATH_MAX && defined _PC_PATH_MAX # define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) #endif /* Don't include sys/param.h if it already has been. */ #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifndef PATH_MAX # define PATH_MAX _POSIX_PATH_MAX #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) #endif /* This is the type used for the search tree where known translations are stored. */ struct known_translation_t { /* Domain in which to search. */ char *domainname; /* The category. */ int category; /* State of the catalog counter at the point the string was found. */ int counter; /* Catalog where the string was found. */ struct loaded_l10nfile *domain; /* And finally the translation. */ const char *translation; size_t translation_length; /* Pointer to the string in question. */ char msgid[ZERO]; }; /* Root of the search tree with known translations. We can use this only if the system provides the `tsearch' function family. */ #if defined HAVE_TSEARCH || defined _LIBC # include static void *root; # ifdef _LIBC # define tsearch __tsearch # endif /* Function to compare two entries in the table of known translations. */ static int transcmp (const void *p1, const void *p2) { const struct known_translation_t *s1; const struct known_translation_t *s2; int result; s1 = (const struct known_translation_t *) p1; s2 = (const struct known_translation_t *) p2; result = strcmp (s1->msgid, s2->msgid); if (result == 0) { result = strcmp (s1->domainname, s2->domainname); if (result == 0) /* We compare the category last (though this is the cheapest operation) since it is hopefully always the same (namely LC_MESSAGES). */ result = s1->category - s2->category; } return result; } #endif #ifndef INTVARDEF # define INTVARDEF(name) #endif #ifndef INTUSE # define INTUSE(name) name #endif /* Name of the default domain used for gettext(3) prior any call to textdomain(3). The default value for this is "messages". */ const char _nl_default_default_domain[] attribute_hidden = "messages"; /* Value used as the default domain for gettext(3). */ const char *_nl_current_default_domain attribute_hidden = _nl_default_default_domain; /* Contains the default location of the message catalogs. */ #if defined __EMX__ extern const char _nl_default_dirname[]; #else const char _nl_default_dirname[] = LOCALEDIR; INTVARDEF (_nl_default_dirname) #endif /* List with bindings of specific domains created by bindtextdomain() calls. */ struct binding *_nl_domain_bindings; /* Prototypes for local functions. */ static char *plural_lookup (struct loaded_l10nfile *domain, unsigned long int n, const char *translation, size_t translation_len) internal_function; static const char *guess_category_value (int category, const char *categoryname) internal_function; #ifdef _LIBC # include "../locale/localeinfo.h" # define category_to_name(category) _nl_category_names[category] #else static const char *category_to_name (int category) internal_function; #endif /* For those loosing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ # define freea(p) /* nothing */ # define ADD_BLOCK(list, address) /* nothing */ # define FREE_BLOCKS(list) /* nothing */ #else struct block_list { void *address; struct block_list *next; }; # define ADD_BLOCK(list, addr) \ do { \ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ /* If we cannot get a free block we cannot add the new element to \ the list. */ \ if (newp != NULL) { \ newp->address = (addr); \ newp->next = (list); \ (list) = newp; \ } \ } while (0) # define FREE_BLOCKS(list) \ do { \ while (list != NULL) { \ struct block_list *old = list; \ list = list->next; \ free (old->address); \ free (old); \ } \ } while (0) # undef alloca # define alloca(size) (malloc (size)) # define freea(p) free (p) #endif /* have alloca */ #ifdef _LIBC /* List of blocks allocated for translations. */ typedef struct transmem_list { struct transmem_list *next; char data[ZERO]; } transmem_block_t; static struct transmem_list *transmem_list; #else typedef unsigned char transmem_block_t; #endif /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCIGETTEXT __dcigettext #else # define DCIGETTEXT libintl_dcigettext #endif /* Lock variable to protect the global data in the gettext implementation. */ #ifdef _LIBC __libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden) #endif /* Checking whether the binaries runs SUID must be done and glibc provides easier methods therefore we make a difference here. */ #ifdef _LIBC # define ENABLE_SECURE __libc_enable_secure # define DETERMINE_SECURE #else # ifndef HAVE_GETUID # define getuid() 0 # endif # ifndef HAVE_GETGID # define getgid() 0 # endif # ifndef HAVE_GETEUID # define geteuid() getuid() # endif # ifndef HAVE_GETEGID # define getegid() getgid() # endif static int enable_secure; # define ENABLE_SECURE (enable_secure == 1) # define DETERMINE_SECURE \ if (enable_secure == 0) \ { \ if (getuid () != geteuid () || getgid () != getegid ()) \ enable_secure = 1; \ else \ enable_secure = -1; \ } #endif /* Get the function to evaluate the plural expression. */ #include "eval-plural.h" /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale and, if PLURAL is nonzero, search over string depending on the plural form determined by N. */ char * DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, int plural, unsigned long int n, int category) { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; #endif struct loaded_l10nfile *domain; struct binding *binding; const char *categoryname; const char *categoryvalue; char *dirname, *xdomainname; char *single_locale; char *retval; size_t retlen; int saved_errno; #if defined HAVE_TSEARCH || defined _LIBC struct known_translation_t *search; struct known_translation_t **foundp = NULL; size_t msgid_len; #endif size_t domainname_len; /* If no real MSGID is given return NULL. */ if (msgid1 == NULL) return NULL; #ifdef _LIBC if (category < 0 || category >= __LC_LAST || category == LC_ALL) /* Bogus. */ return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); #endif __libc_rwlock_rdlock (_nl_state_lock); /* If DOMAINNAME is NULL, we are interested in the default domain. If CATEGORY is not LC_MESSAGES this might not make much sense but the definition left this undefined. */ if (domainname == NULL) domainname = _nl_current_default_domain; /* OS/2 specific: backward compatibility with older libintl versions */ #ifdef LC_MESSAGES_COMPAT if (category == LC_MESSAGES_COMPAT) category = LC_MESSAGES; #endif #if defined HAVE_TSEARCH || defined _LIBC msgid_len = strlen (msgid1) + 1; /* Try to find the translation among those which we found at some time. */ search = (struct known_translation_t *) alloca (offsetof (struct known_translation_t, msgid) + msgid_len); memcpy (search->msgid, msgid1, msgid_len); search->domainname = (char *) domainname; search->category = category; foundp = (struct known_translation_t **) tfind (search, &root, transcmp); freea (search); if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr) { /* Now deal with plural. */ if (plural) retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation, (*foundp)->translation_length); else retval = (char *) (*foundp)->translation; __libc_rwlock_unlock (_nl_state_lock); return retval; } #endif /* Preserve the `errno' value. */ saved_errno = errno; /* See whether this is a SUID binary or not. */ DETERMINE_SECURE; /* First find matching binding. */ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding == NULL) dirname = (char *) INTUSE(_nl_default_dirname); else if (IS_ABSOLUTE_PATH (binding->dirname)) dirname = binding->dirname; else { /* We have a relative path. Make it absolute now. */ size_t dirname_len = strlen (binding->dirname) + 1; size_t path_max; char *ret; path_max = (unsigned int) PATH_MAX; path_max += 2; /* The getcwd docs say to do this. */ for (;;) { dirname = (char *) alloca (path_max + dirname_len); ADD_BLOCK (block_list, dirname); __set_errno (0); ret = getcwd (dirname, path_max); if (ret != NULL || errno != ERANGE) break; path_max += path_max / 2; path_max += PATH_INCR; } if (ret == NULL) /* We cannot get the current working directory. Don't signal an error but simply return the default string. */ goto return_untranslated; stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); } /* Now determine the symbolic name of CATEGORY and its value. */ categoryname = category_to_name (category); categoryvalue = guess_category_value (category, categoryname); domainname_len = strlen (domainname); xdomainname = (char *) alloca (strlen (categoryname) + domainname_len + 5); ADD_BLOCK (block_list, xdomainname); stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), domainname, domainname_len), ".mo"); /* Creating working area. */ single_locale = (char *) alloca (strlen (categoryvalue) + 1); ADD_BLOCK (block_list, single_locale); /* Search for the given string. This is a loop because we perhaps got an ordered list of languages to consider for the translation. */ while (1) { /* Make CATEGORYVALUE point to the next element of the list. */ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') ++categoryvalue; if (categoryvalue[0] == '\0') { /* The whole contents of CATEGORYVALUE has been searched but no valid entry has been found. We solve this situation by implicitly appending a "C" entry, i.e. no translation will take place. */ single_locale[0] = 'C'; single_locale[1] = '\0'; } else { char *cp = single_locale; while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') *cp++ = *categoryvalue++; *cp = '\0'; /* When this is a SUID binary we must not allow accessing files outside the dedicated directories. */ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale)) /* Ingore this entry. */ continue; } /* If the current locale value is C (or POSIX) we don't load a domain. Return the MSGID. */ if (strcmp (single_locale, "C") == 0 || strcmp (single_locale, "POSIX") == 0) break; /* Find structure describing the message catalog matching the DOMAINNAME and CATEGORY. */ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding); if (domain != NULL) { retval = _nl_find_msg (domain, binding, msgid1, &retlen); if (retval == NULL) { int cnt; for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { retval = _nl_find_msg (domain->successor[cnt], binding, msgid1, &retlen); if (retval != NULL) { domain = domain->successor[cnt]; break; } } } if (retval != NULL) { /* Found the translation of MSGID1 in domain DOMAIN: starting at RETVAL, RETLEN bytes. */ FREE_BLOCKS (block_list); #if defined HAVE_TSEARCH || defined _LIBC if (foundp == NULL) { /* Create a new entry and add it to the search tree. */ struct known_translation_t *newp; newp = (struct known_translation_t *) malloc (offsetof (struct known_translation_t, msgid) + msgid_len + domainname_len + 1); if (newp != NULL) { newp->domainname = mempcpy (newp->msgid, msgid1, msgid_len); memcpy (newp->domainname, domainname, domainname_len + 1); newp->category = category; newp->counter = _nl_msg_cat_cntr; newp->domain = domain; newp->translation = retval; newp->translation_length = retlen; /* Insert the entry in the search tree. */ foundp = (struct known_translation_t **) tsearch (newp, &root, transcmp); if (foundp == NULL || __builtin_expect (*foundp != newp, 0)) /* The insert failed. */ free (newp); } } else { /* We can update the existing entry. */ (*foundp)->counter = _nl_msg_cat_cntr; (*foundp)->domain = domain; (*foundp)->translation = retval; (*foundp)->translation_length = retlen; } #endif __set_errno (saved_errno); /* Now deal with plural. */ if (plural) retval = plural_lookup (domain, n, retval, retlen); __libc_rwlock_unlock (_nl_state_lock); return retval; } } } return_untranslated: /* Return the untranslated MSGID. */ FREE_BLOCKS (block_list); __libc_rwlock_unlock (_nl_state_lock); #ifndef _LIBC if (!ENABLE_SECURE) { extern void _nl_log_untranslated (const char *logfilename, const char *domainname, const char *msgid1, const char *msgid2, int plural); const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED"); if (logfilename != NULL && logfilename[0] != '\0') _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural); } #endif __set_errno (saved_errno); return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); } char * internal_function _nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *msgid, size_t *lengthp) { struct loaded_domain *domain; nls_uint32 nstrings; size_t act; char *result; size_t resultlen; if (domain_file->decided == 0) _nl_load_domain (domain_file, domainbinding); if (domain_file->data == NULL) return NULL; domain = (struct loaded_domain *) domain_file->data; nstrings = domain->nstrings; /* Locate the MSGID and its translation. */ if (domain->hash_tab != NULL) { /* Use the hashing table. */ nls_uint32 len = strlen (msgid); nls_uint32 hash_val = hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); while (1) { nls_uint32 nstr = W (domain->must_swap_hash_tab, domain->hash_tab[idx]); if (nstr == 0) /* Hash table entry is empty. */ return NULL; nstr--; /* Compare msgid with the original string at index nstr. We compare the lengths with >=, not ==, because plural entries are represented by strings with an embedded NUL. */ if (nstr < nstrings ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len && (strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[nstr].offset)) == 0) : domain->orig_sysdep_tab[nstr - nstrings].length > len && (strcmp (msgid, domain->orig_sysdep_tab[nstr - nstrings].pointer) == 0)) { act = nstr; goto found; } if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; } /* NOTREACHED */ } else { /* Try the default method: binary search in the sorted array of messages. */ size_t top, bottom; bottom = 0; top = nstrings; while (bottom < top) { int cmp_val; act = (bottom + top) / 2; cmp_val = strcmp (msgid, (domain->data + W (domain->must_swap, domain->orig_tab[act].offset))); if (cmp_val < 0) top = act; else if (cmp_val > 0) bottom = act + 1; else goto found; } /* No translation was found. */ return NULL; } found: /* The translation was found at index ACT. If we have to convert the string to use a different character set, this is the time. */ if (act < nstrings) { result = (char *) (domain->data + W (domain->must_swap, domain->trans_tab[act].offset)); resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; } else { result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer; resultlen = domain->trans_sysdep_tab[act - nstrings].length; } #if defined _LIBC || HAVE_ICONV if (domain->codeset_cntr != (domainbinding != NULL ? domainbinding->codeset_cntr : 0)) { /* The domain's codeset has changed through bind_textdomain_codeset() since the message catalog was initialized or last accessed. We have to reinitialize the converter. */ _nl_free_domain_conv (domain); _nl_init_domain_conv (domain_file, domain, domainbinding); } if ( # ifdef _LIBC domain->conv != (__gconv_t) -1 # else # if HAVE_ICONV domain->conv != (iconv_t) -1 # endif # endif ) { /* We are supposed to do a conversion. First allocate an appropriate table with the same structure as the table of translations in the file, where we can put the pointers to the converted strings in. There is a slight complication with plural entries. They are represented by consecutive NUL terminated strings. We handle this case by converting RESULTLEN bytes, including NULs. */ if (domain->conv_tab == NULL && ((domain->conv_tab = (char **) calloc (nstrings + domain->n_sysdep_strings, sizeof (char *))) == NULL)) /* Mark that we didn't succeed allocating a table. */ domain->conv_tab = (char **) -1; if (__builtin_expect (domain->conv_tab == (char **) -1, 0)) /* Nothing we can do, no more memory. */ goto converted; if (domain->conv_tab[act] == NULL) { /* We haven't used this string so far, so it is not translated yet. Do this now. */ /* We use a bit more efficient memory handling. We allocate always larger blocks which get used over time. This is faster than many small allocations. */ __libc_lock_define_initialized (static, lock) # define INITIAL_BLOCK_SIZE 4080 static unsigned char *freemem; static size_t freemem_size; const unsigned char *inbuf; unsigned char *outbuf; int malloc_count; # ifndef _LIBC transmem_block_t *transmem_list = NULL; # endif __libc_lock_lock (lock); inbuf = (const unsigned char *) result; outbuf = freemem + sizeof (size_t); malloc_count = 0; while (1) { transmem_block_t *newmem; # ifdef _LIBC size_t non_reversible; int res; if (freemem_size < sizeof (size_t)) goto resize_freemem; res = __gconv (domain->conv, &inbuf, inbuf + resultlen, &outbuf, outbuf + freemem_size - sizeof (size_t), &non_reversible); if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) break; if (res != __GCONV_FULL_OUTPUT) { __libc_lock_unlock (lock); goto converted; } inbuf = result; # else # if HAVE_ICONV const char *inptr = (const char *) inbuf; size_t inleft = resultlen; char *outptr = (char *) outbuf; size_t outleft; if (freemem_size < sizeof (size_t)) goto resize_freemem; outleft = freemem_size - sizeof (size_t); if (iconv (domain->conv, (ICONV_CONST char **) &inptr, &inleft, &outptr, &outleft) != (size_t) (-1)) { outbuf = (unsigned char *) outptr; break; } if (errno != E2BIG) { __libc_lock_unlock (lock); goto converted; } # endif # endif resize_freemem: /* We must allocate a new buffer or resize the old one. */ if (malloc_count > 0) { ++malloc_count; freemem_size = malloc_count * INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) realloc (transmem_list, freemem_size); # ifdef _LIBC if (newmem != NULL) transmem_list = transmem_list->next; else { struct transmem_list *old = transmem_list; transmem_list = transmem_list->next; free (old); } # endif } else { malloc_count = 1; freemem_size = INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) malloc (freemem_size); } if (__builtin_expect (newmem == NULL, 0)) { freemem = NULL; freemem_size = 0; __libc_lock_unlock (lock); goto converted; } # ifdef _LIBC /* Add the block to the list of blocks we have to free at some point. */ newmem->next = transmem_list; transmem_list = newmem; freemem = newmem->data; freemem_size -= offsetof (struct transmem_list, data); # else transmem_list = newmem; freemem = newmem; # endif outbuf = freemem + sizeof (size_t); } /* We have now in our buffer a converted string. Put this into the table of conversions. */ *(size_t *) freemem = outbuf - freemem - sizeof (size_t); domain->conv_tab[act] = (char *) freemem; /* Shrink freemem, but keep it aligned. */ freemem_size -= outbuf - freemem; freemem = outbuf; freemem += freemem_size & (alignof (size_t) - 1); freemem_size = freemem_size & ~ (alignof (size_t) - 1); __libc_lock_unlock (lock); } /* Now domain->conv_tab[act] contains the translation of all the plural variants. */ result = domain->conv_tab[act] + sizeof (size_t); resultlen = *(size_t *) domain->conv_tab[act]; } converted: /* The result string is converted. */ #endif /* _LIBC || HAVE_ICONV */ *lengthp = resultlen; return result; } /* Look up a plural variant. */ static char * internal_function plural_lookup (struct loaded_l10nfile *domain, unsigned long int n, const char *translation, size_t translation_len) { struct loaded_domain *domaindata = (struct loaded_domain *) domain->data; unsigned long int index; const char *p; index = plural_eval (domaindata->plural, n); if (index >= domaindata->nplurals) /* This should never happen. It means the plural expression and the given maximum value do not match. */ index = 0; /* Skip INDEX strings at TRANSLATION. */ p = translation; while (index-- > 0) { #ifdef _LIBC p = __rawmemchr (p, '\0'); #else p = strchr (p, '\0'); #endif /* And skip over the NUL byte. */ p++; if (p >= translation + translation_len) /* This should never happen. It means the plural expression evaluated to a value larger than the number of variants available for MSGID1. */ return (char *) translation; } return (char *) p; } #ifndef _LIBC /* Return string representation of locale CATEGORY. */ static const char * internal_function category_to_name (int category) { const char *retval; switch (category) { #ifdef LC_COLLATE case LC_COLLATE: retval = "LC_COLLATE"; break; #endif #ifdef LC_CTYPE case LC_CTYPE: retval = "LC_CTYPE"; break; #endif #ifdef LC_MONETARY case LC_MONETARY: retval = "LC_MONETARY"; break; #endif #ifdef LC_NUMERIC case LC_NUMERIC: retval = "LC_NUMERIC"; break; #endif #ifdef LC_TIME case LC_TIME: retval = "LC_TIME"; break; #endif #ifdef LC_MESSAGES case LC_MESSAGES: retval = "LC_MESSAGES"; break; #endif #ifdef LC_RESPONSE case LC_RESPONSE: retval = "LC_RESPONSE"; break; #endif #ifdef LC_ALL case LC_ALL: /* This might not make sense but is perhaps better than any other value. */ retval = "LC_ALL"; break; #endif default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } #endif /* Guess value of current locale from value of the environment variables. */ static const char * internal_function guess_category_value (int category, const char *categoryname) { const char *language; const char *retval; /* The highest priority value is the `LANGUAGE' environment variable. But we don't use the value if the currently selected locale is the C locale. This is a GNU extension. */ language = getenv ("LANGUAGE"); if (language != NULL && language[0] == '\0') language = NULL; /* We have to proceed with the POSIX methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some systems this can be done by the `setlocale' function itself. */ #ifdef _LIBC retval = __current_locale_name (category); #else retval = _nl_locale_name (category, categoryname); #endif /* Ignore LANGUAGE if the locale is set to "C" because 1. "C" locale usually uses the ASCII encoding, and most international messages use non-ASCII characters. These characters get displayed as question marks (if using glibc's iconv()) or as invalid 8-bit characters (because other iconv()s refuse to convert most non-ASCII characters to ASCII). In any case, the output is ugly. 2. The precise output of some programs in the "C" locale is specified by POSIX and should not depend on environment variables like "LANGUAGE". We allow such programs to use gettext(). */ return language != NULL && strcmp (retval, "C") != 0 ? language : retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (char *dest, const char *src) { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif #if !_LIBC && !HAVE_MEMPCPY static void * mempcpy (void *dest, const void *src, size_t n) { return (void *) ((char *) memcpy (dest, src, n) + n); } #endif #ifdef _LIBC /* If we want to free all resources we have to do some work at program's end. */ libc_freeres_fn (free_mem) { void *old; while (_nl_domain_bindings != NULL) { struct binding *oldp = _nl_domain_bindings; _nl_domain_bindings = _nl_domain_bindings->next; if (oldp->dirname != INTUSE(_nl_default_dirname)) /* Yes, this is a pointer comparison. */ free (oldp->dirname); free (oldp->codeset); free (oldp); } if (_nl_current_default_domain != _nl_default_default_domain) /* Yes, again a pointer comparison. */ free ((char *) _nl_current_default_domain); /* Remove the search tree with the known translations. */ __tdestroy (root, free); root = NULL; while (transmem_list != NULL) { old = transmem_list; transmem_list = transmem_list->next; free (old); } } #endif lbreakout2-2.6.5/intl/relocatable.c0000664000175000017500000003136012140767176014126 00000000000000/* Provide relocatable packages. Copyright (C) 2003 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* Tell glibc's to provide a prototype for getline(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include "config.h" #endif /* Specification. */ #include "relocatable.h" #if ENABLE_RELOCATABLE #include #include #include #include #ifdef NO_XMALLOC # define xmalloc malloc #else # include "xalloc.h" #endif #if defined _WIN32 || defined __WIN32__ # define WIN32_LEAN_AND_MEAN # include #endif #if DEPENDS_ON_LIBCHARSET # include #endif #if DEPENDS_ON_LIBICONV && HAVE_ICONV # include #endif #if DEPENDS_ON_LIBINTL && ENABLE_NLS # include #endif /* Faked cheap 'bool'. */ #undef bool #undef false #undef true #define bool int #define false 0 #define true 1 /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) # define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) # define FILESYSTEM_PREFIX_LEN(P) 0 #endif /* Original installation prefix. */ static char *orig_prefix; static size_t orig_prefix_len; /* Current installation prefix. */ static char *curr_prefix; static size_t curr_prefix_len; /* These prefixes do not end in a slash. Anything that will be concatenated to them must start with a slash. */ /* Sets the original and the current installation prefix of this module. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ static void set_this_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) { if (orig_prefix_arg != NULL && curr_prefix_arg != NULL /* Optimization: if orig_prefix and curr_prefix are equal, the relocation is a nop. */ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0) { /* Duplicate the argument strings. */ char *memory; orig_prefix_len = strlen (orig_prefix_arg); curr_prefix_len = strlen (curr_prefix_arg); memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1); #ifdef NO_XMALLOC if (memory != NULL) #endif { memcpy (memory, orig_prefix_arg, orig_prefix_len + 1); orig_prefix = memory; memory += orig_prefix_len + 1; memcpy (memory, curr_prefix_arg, curr_prefix_len + 1); curr_prefix = memory; return; } } orig_prefix = NULL; curr_prefix = NULL; /* Don't worry about wasted memory here - this function is usually only called once. */ } /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ void set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) { set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg); /* Now notify all dependent libraries. */ #if DEPENDS_ON_LIBCHARSET libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif #if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109 libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif #if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif } #if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR) /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular file, and the current pathname of this file. Returns NULL upon failure. */ #ifdef IN_LIBRARY #define compute_curr_prefix local_compute_curr_prefix static #endif const char * compute_curr_prefix (const char *orig_installprefix, const char *orig_installdir, const char *curr_pathname) { const char *curr_installdir; const char *rel_installdir; if (curr_pathname == NULL) return NULL; /* Determine the relative installation directory, relative to the prefix. This is simply the difference between orig_installprefix and orig_installdir. */ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix)) != 0) /* Shouldn't happen - nothing should be installed outside $(prefix). */ return NULL; rel_installdir = orig_installdir + strlen (orig_installprefix); /* Determine the current installation directory. */ { const char *p_base = curr_pathname + FILESYSTEM_PREFIX_LEN (curr_pathname); const char *p = curr_pathname + strlen (curr_pathname); char *q; while (p > p_base) { p--; if (ISSLASH (*p)) break; } q = (char *) xmalloc (p - curr_pathname + 1); #ifdef NO_XMALLOC if (q == NULL) return NULL; #endif memcpy (q, curr_pathname, p - curr_pathname); q[p - curr_pathname] = '\0'; curr_installdir = q; } /* Compute the current installation prefix by removing the trailing rel_installdir from it. */ { const char *rp = rel_installdir + strlen (rel_installdir); const char *cp = curr_installdir + strlen (curr_installdir); const char *cp_base = curr_installdir + FILESYSTEM_PREFIX_LEN (curr_installdir); while (rp > rel_installdir && cp > cp_base) { bool same = false; const char *rpi = rp; const char *cpi = cp; while (rpi > rel_installdir && cpi > cp_base) { rpi--; cpi--; if (ISSLASH (*rpi) || ISSLASH (*cpi)) { if (ISSLASH (*rpi) && ISSLASH (*cpi)) same = true; break; } #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS - case insignificant filesystem */ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi) != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi)) break; #else if (*rpi != *cpi) break; #endif } if (!same) break; /* The last pathname component was the same. opi and cpi now point to the slash before it. */ rp = rpi; cp = cpi; } if (rp > rel_installdir) /* Unexpected: The curr_installdir does not end with rel_installdir. */ return NULL; { size_t curr_prefix_len = cp - curr_installdir; char *curr_prefix; curr_prefix = (char *) xmalloc (curr_prefix_len + 1); #ifdef NO_XMALLOC if (curr_prefix == NULL) return NULL; #endif memcpy (curr_prefix, curr_installdir, curr_prefix_len); curr_prefix[curr_prefix_len] = '\0'; return curr_prefix; } } } #endif /* !IN_LIBRARY || PIC */ #if defined PIC && defined INSTALLDIR /* Full pathname of shared library, or NULL. */ static char *shared_library_fullname; #if defined _WIN32 || defined __WIN32__ /* Determine the full pathname of the shared library when it is loaded. */ BOOL WINAPI DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) { (void) reserved; if (event == DLL_PROCESS_ATTACH) { /* The DLL is being loaded into an application's address range. */ static char location[MAX_PATH]; if (!GetModuleFileName (module_handle, location, sizeof (location))) /* Shouldn't happen. */ return FALSE; if (!IS_PATH_WITH_DIR (location)) /* Shouldn't happen. */ return FALSE; shared_library_fullname = strdup (location); } return TRUE; } #else /* Unix */ static void find_shared_library_fullname () { #if defined __linux__ && __GLIBC__ >= 2 /* Linux has /proc/self/maps. glibc 2 has the getline() function. */ FILE *fp; /* Open the current process' maps file. It describes one VMA per line. */ fp = fopen ("/proc/self/maps", "r"); if (fp) { unsigned long address = (unsigned long) &find_shared_library_fullname; for (;;) { unsigned long start, end; int c; if (fscanf (fp, "%lx-%lx", &start, &end) != 2) break; if (address >= start && address <= end - 1) { /* Found it. Now see if this line contains a filename. */ while (c = getc (fp), c != EOF && c != '\n' && c != '/') continue; if (c == '/') { size_t size; int len; ungetc (c, fp); shared_library_fullname = NULL; size = 0; len = getline (&shared_library_fullname, &size, fp); if (len >= 0) { /* Success: filled shared_library_fullname. */ if (len > 0 && shared_library_fullname[len - 1] == '\n') shared_library_fullname[len - 1] = '\0'; } } break; } while (c = getc (fp), c != EOF && c != '\n') continue; } fclose (fp); } #endif } #endif /* WIN32 / Unix */ /* Return the full pathname of the current shared library. Return NULL if unknown. Guaranteed to work only on Linux and Woe32. */ static char * get_shared_library_fullname () { #if !(defined _WIN32 || defined __WIN32__) static bool tried_find_shared_library_fullname; if (!tried_find_shared_library_fullname) { find_shared_library_fullname (); tried_find_shared_library_fullname = true; } #endif return shared_library_fullname; } #endif /* PIC */ /* Returns the pathname, relocated according to the current installation directory. */ const char * relocate (const char *pathname) { #if defined PIC && defined INSTALLDIR static int initialized; /* Initialization code for a shared library. */ if (!initialized) { /* At this point, orig_prefix and curr_prefix likely have already been set through the main program's set_program_name_and_installdir function. This is sufficient in the case that the library has initially been installed in the same orig_prefix. But we can do better, to also cover the cases that 1. it has been installed in a different prefix before being moved to orig_prefix and (later) to curr_prefix, 2. unlike the program, it has not moved away from orig_prefix. */ const char *orig_installprefix = INSTALLPREFIX; const char *orig_installdir = INSTALLDIR; const char *curr_prefix_better; curr_prefix_better = compute_curr_prefix (orig_installprefix, orig_installdir, get_shared_library_fullname ()); if (curr_prefix_better == NULL) curr_prefix_better = curr_prefix; set_relocation_prefix (orig_installprefix, curr_prefix_better); initialized = 1; } #endif /* Note: It is not necessary to perform case insensitive comparison here, even for DOS-like filesystems, because the pathname argument was typically created from the same Makefile variable as orig_prefix came from. */ if (orig_prefix != NULL && curr_prefix != NULL && strncmp (pathname, orig_prefix, orig_prefix_len) == 0) { if (pathname[orig_prefix_len] == '\0') /* pathname equals orig_prefix. */ return curr_prefix; if (ISSLASH (pathname[orig_prefix_len])) { /* pathname starts with orig_prefix. */ const char *pathname_tail = &pathname[orig_prefix_len]; char *result = (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1); #ifdef NO_XMALLOC if (result != NULL) #endif { memcpy (result, curr_prefix, curr_prefix_len); strcpy (result + curr_prefix_len, pathname_tail); return result; } } } /* Nothing to relocate. */ return pathname; } #endif lbreakout2-2.6.5/intl/config.charset0000775000175000017500000004340612140767176014334 00000000000000#! /bin/sh # Output a system dependent table of character encoding aliases. # # Copyright (C) 2000-2004 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library 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. # # The table consists of lines of the form # ALIAS CANONICAL # # ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". # ALIAS is compared in a case sensitive way. # # CANONICAL is the GNU canonical name for this character encoding. # It must be an encoding supported by libiconv. Support by GNU libc is # also desirable. CANONICAL is case insensitive. Usually an upper case # MIME charset name is preferred. # The current list of GNU canonical charset names is as follows. # # name MIME? used by which systems # ASCII, ANSI_X3.4-1968 glibc solaris freebsd darwin # ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd darwin # ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd darwin # ISO-8859-3 Y glibc solaris # ISO-8859-4 Y osf solaris freebsd darwin # ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd darwin # ISO-8859-6 Y glibc aix hpux solaris # ISO-8859-7 Y glibc aix hpux irix osf solaris # ISO-8859-8 Y glibc aix hpux osf solaris # ISO-8859-9 Y glibc aix hpux irix osf solaris # ISO-8859-13 glibc # ISO-8859-14 glibc # ISO-8859-15 glibc aix osf solaris freebsd # KOI8-R Y glibc solaris freebsd darwin # KOI8-U Y glibc freebsd darwin # KOI8-T glibc # CP437 dos # CP775 dos # CP850 aix osf dos # CP852 dos # CP855 dos # CP856 aix # CP857 dos # CP861 dos # CP862 dos # CP864 dos # CP865 dos # CP866 freebsd darwin dos # CP869 dos # CP874 woe32 dos # CP922 aix # CP932 aix woe32 dos # CP943 aix # CP949 osf woe32 dos # CP950 woe32 dos # CP1046 aix # CP1124 aix # CP1125 dos # CP1129 aix # CP1250 woe32 # CP1251 glibc solaris darwin woe32 # CP1252 aix woe32 # CP1253 woe32 # CP1254 woe32 # CP1255 glibc woe32 # CP1256 woe32 # CP1257 woe32 # GB2312 Y glibc aix hpux irix solaris freebsd darwin # EUC-JP Y glibc aix hpux irix osf solaris freebsd darwin # EUC-KR Y glibc aix hpux irix osf solaris freebsd darwin # EUC-TW glibc aix hpux irix osf solaris # BIG5 Y glibc aix hpux osf solaris freebsd darwin # BIG5-HKSCS glibc solaris # GBK glibc aix osf solaris woe32 dos # GB18030 glibc solaris # SHIFT_JIS Y hpux osf solaris freebsd darwin # JOHAB glibc solaris woe32 # TIS-620 glibc aix hpux osf solaris # VISCII Y glibc # TCVN5712-1 glibc # GEORGIAN-PS glibc # HP-ROMAN8 hpux # HP-ARABIC8 hpux # HP-GREEK8 hpux # HP-HEBREW8 hpux # HP-TURKISH8 hpux # HP-KANA8 hpux # DEC-KANJI osf # DEC-HANYU osf # UTF-8 Y glibc aix hpux osf solaris # # Note: Names which are not marked as being a MIME name should not be used in # Internet protocols for information interchange (mail, news, etc.). # # Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications # must understand both names and treat them as equivalent. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM host="$1" os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` echo "# This file contains a table of character encoding aliases," echo "# suitable for operating system '${os}'." echo "# It was automatically generated from config.charset." # List of references, updated during installation: echo "# Packages using this file: " case "$os" in linux-gnulibc1*) # Linux libc5 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" echo "POSIX ASCII" for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ sv_FI sv_SE; do echo "$l ISO-8859-1" echo "$l.iso-8859-1 ISO-8859-1" echo "$l.iso-8859-15 ISO-8859-15" echo "$l.iso-8859-15@euro ISO-8859-15" echo "$l@euro ISO-8859-15" echo "$l.cp-437 CP437" echo "$l.cp-850 CP850" echo "$l.cp-1252 CP1252" echo "$l.cp-1252@euro CP1252" #echo "$l.atari-st ATARI-ST" # not a commonly used encoding echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ sl_SI sr sr_CS sr_YU; do echo "$l ISO-8859-2" echo "$l.iso-8859-2 ISO-8859-2" echo "$l.cp-852 CP852" echo "$l.cp-1250 CP1250" echo "$l.utf-8 UTF-8" done for l in mk mk_MK ru ru_RU; do echo "$l ISO-8859-5" echo "$l.iso-8859-5 ISO-8859-5" echo "$l.koi8-r KOI8-R" echo "$l.cp-866 CP866" echo "$l.cp-1251 CP1251" echo "$l.utf-8 UTF-8" done for l in ar ar_SA; do echo "$l ISO-8859-6" echo "$l.iso-8859-6 ISO-8859-6" echo "$l.cp-864 CP864" #echo "$l.cp-868 CP868" # not a commonly used encoding echo "$l.cp-1256 CP1256" echo "$l.utf-8 UTF-8" done for l in el el_GR gr gr_GR; do echo "$l ISO-8859-7" echo "$l.iso-8859-7 ISO-8859-7" echo "$l.cp-869 CP869" echo "$l.cp-1253 CP1253" echo "$l.cp-1253@euro CP1253" echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in he he_IL iw iw_IL; do echo "$l ISO-8859-8" echo "$l.iso-8859-8 ISO-8859-8" echo "$l.cp-862 CP862" echo "$l.cp-1255 CP1255" echo "$l.utf-8 UTF-8" done for l in tr tr_TR; do echo "$l ISO-8859-9" echo "$l.iso-8859-9 ISO-8859-9" echo "$l.cp-857 CP857" echo "$l.cp-1254 CP1254" echo "$l.utf-8 UTF-8" done for l in lt lt_LT lv lv_LV; do #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name echo "$l ISO-8859-13" done for l in ru_UA uk uk_UA; do echo "$l KOI8-U" done for l in zh zh_CN; do #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name echo "$l GB2312" done for l in ja ja_JP ja_JP.EUC; do echo "$l EUC-JP" done for l in ko ko_KR; do echo "$l EUC-KR" done for l in th th_TH; do echo "$l TIS-620" done for l in fa fa_IR; do #echo "$l ISIRI-3342" # a broken encoding echo "$l.utf-8 UTF-8" done ;; linux* | *-gnu*) # With glibc-2.1 or newer, we don't need any canonicalization, # because glibc has iconv and both glibc and libiconv support all # GNU canonical names directly. Therefore, the Makefile does not # need to install the alias file at all. # The following applies only to glibc-2.0.x and older libcs. echo "ISO_646.IRV:1983 ASCII" ;; aix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "IBM-850 CP850" echo "IBM-856 CP856" echo "IBM-921 ISO-8859-13" echo "IBM-922 CP922" echo "IBM-932 CP932" echo "IBM-943 CP943" echo "IBM-1046 CP1046" echo "IBM-1124 CP1124" echo "IBM-1129 CP1129" echo "IBM-1252 CP1252" echo "IBM-eucCN GB2312" echo "IBM-eucJP EUC-JP" echo "IBM-eucKR EUC-KR" echo "IBM-eucTW EUC-TW" echo "big5 BIG5" echo "GBK GBK" echo "TIS-620 TIS-620" echo "UTF-8 UTF-8" ;; hpux*) echo "iso88591 ISO-8859-1" echo "iso88592 ISO-8859-2" echo "iso88595 ISO-8859-5" echo "iso88596 ISO-8859-6" echo "iso88597 ISO-8859-7" echo "iso88598 ISO-8859-8" echo "iso88599 ISO-8859-9" echo "iso885915 ISO-8859-15" echo "roman8 HP-ROMAN8" echo "arabic8 HP-ARABIC8" echo "greek8 HP-GREEK8" echo "hebrew8 HP-HEBREW8" echo "turkish8 HP-TURKISH8" echo "kana8 HP-KANA8" echo "tis620 TIS-620" echo "big5 BIG5" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "hp15CN GB2312" #echo "ccdc ?" # what is this? echo "SJIS SHIFT_JIS" echo "utf8 UTF-8" ;; irix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" ;; osf*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "cp850 CP850" echo "big5 BIG5" echo "dechanyu DEC-HANYU" echo "dechanzi GB2312" echo "deckanji DEC-KANJI" echo "deckorean EUC-KR" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "GBK GBK" echo "KSC5601 CP949" echo "sdeckanji EUC-JP" echo "SJIS SHIFT_JIS" echo "TACTIS TIS-620" echo "UTF-8 UTF-8" ;; solaris*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-3 ISO-8859-3" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "koi8-r KOI8-R" echo "ansi-1251 CP1251" echo "BIG5 BIG5" echo "Big5-HKSCS BIG5-HKSCS" echo "gb2312 GB2312" echo "GBK GBK" echo "GB18030 GB18030" echo "cns11643 EUC-TW" echo "5601 EUC-KR" echo "ko_KR.johap92 JOHAB" echo "eucJP EUC-JP" echo "PCK SHIFT_JIS" echo "TIS620.2533 TIS-620" #echo "sun_eu_greek ?" # what is this? echo "UTF-8 UTF-8" ;; freebsd* | os2*) # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just # reuse FreeBSD's locale data for OS/2. echo "C ASCII" echo "US-ASCII ASCII" for l in la_LN lt_LN; do echo "$l.ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do echo "$l.ISO_8859-1 ISO-8859-1" echo "$l.DIS_8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do echo "$l.ISO_8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO_8859-4 ISO-8859-4" done for l in ru_RU ru_SU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO_8859-5 ISO-8859-5" echo "$l.CP866 CP866" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ja_JP.Shift_JIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; netbsd*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-15 ISO-8859-15" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "BIG5 BIG5" echo "SJIS SHIFT_JIS" ;; darwin*) # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" for l in en_AU en_CA en_GB en_US la_LN; do echo "$l.US-ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ nl_NL no_NO pt_PT sv_SE; do echo "$l ISO-8859-1" echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in la_LN; do echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do echo "$l.ISO8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO8859-4 ISO-8859-4" done for l in ru_RU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO8859-5 ISO-8859-5" echo "$l.CP866 CP866" done for l in bg_BG; do echo "$l.CP1251 CP1251" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; beos*) # BeOS has a single locale, and it has UTF-8 encoding. echo "* UTF-8" ;; msdosdjgpp*) # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "#" echo "# The encodings given here may not all be correct." echo "# If you find that the encoding given for your language and" echo "# country is not the one your DOS machine actually uses, just" echo "# correct it in this file, and send a mail to" echo "# Juan Manuel Guerrero " echo "# and Bruno Haible ." echo "#" echo "C ASCII" # ISO-8859-1 languages echo "ca CP850" echo "ca_ES CP850" echo "da CP865" # not CP850 ?? echo "da_DK CP865" # not CP850 ?? echo "de CP850" echo "de_AT CP850" echo "de_CH CP850" echo "de_DE CP850" echo "en CP850" echo "en_AU CP850" # not CP437 ?? echo "en_CA CP850" echo "en_GB CP850" echo "en_NZ CP437" echo "en_US CP437" echo "en_ZA CP850" # not CP437 ?? echo "es CP850" echo "es_AR CP850" echo "es_BO CP850" echo "es_CL CP850" echo "es_CO CP850" echo "es_CR CP850" echo "es_CU CP850" echo "es_DO CP850" echo "es_EC CP850" echo "es_ES CP850" echo "es_GT CP850" echo "es_HN CP850" echo "es_MX CP850" echo "es_NI CP850" echo "es_PA CP850" echo "es_PY CP850" echo "es_PE CP850" echo "es_SV CP850" echo "es_UY CP850" echo "es_VE CP850" echo "et CP850" echo "et_EE CP850" echo "eu CP850" echo "eu_ES CP850" echo "fi CP850" echo "fi_FI CP850" echo "fr CP850" echo "fr_BE CP850" echo "fr_CA CP850" echo "fr_CH CP850" echo "fr_FR CP850" echo "ga CP850" echo "ga_IE CP850" echo "gd CP850" echo "gd_GB CP850" echo "gl CP850" echo "gl_ES CP850" echo "id CP850" # not CP437 ?? echo "id_ID CP850" # not CP437 ?? echo "is CP861" # not CP850 ?? echo "is_IS CP861" # not CP850 ?? echo "it CP850" echo "it_CH CP850" echo "it_IT CP850" echo "lt CP775" echo "lt_LT CP775" echo "lv CP775" echo "lv_LV CP775" echo "nb CP865" # not CP850 ?? echo "nb_NO CP865" # not CP850 ?? echo "nl CP850" echo "nl_BE CP850" echo "nl_NL CP850" echo "nn CP865" # not CP850 ?? echo "nn_NO CP865" # not CP850 ?? echo "no CP865" # not CP850 ?? echo "no_NO CP865" # not CP850 ?? echo "pt CP850" echo "pt_BR CP850" echo "pt_PT CP850" echo "sv CP850" echo "sv_SE CP850" # ISO-8859-2 languages echo "cs CP852" echo "cs_CZ CP852" echo "hr CP852" echo "hr_HR CP852" echo "hu CP852" echo "hu_HU CP852" echo "pl CP852" echo "pl_PL CP852" echo "ro CP852" echo "ro_RO CP852" echo "sk CP852" echo "sk_SK CP852" echo "sl CP852" echo "sl_SI CP852" echo "sq CP852" echo "sq_AL CP852" echo "sr CP852" # CP852 or CP866 or CP855 ?? echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? # ISO-8859-3 languages echo "mt CP850" echo "mt_MT CP850" # ISO-8859-5 languages echo "be CP866" echo "be_BE CP866" echo "bg CP866" # not CP855 ?? echo "bg_BG CP866" # not CP855 ?? echo "mk CP866" # not CP855 ?? echo "mk_MK CP866" # not CP855 ?? echo "ru CP866" echo "ru_RU CP866" echo "uk CP1125" echo "uk_UA CP1125" # ISO-8859-6 languages echo "ar CP864" echo "ar_AE CP864" echo "ar_DZ CP864" echo "ar_EG CP864" echo "ar_IQ CP864" echo "ar_IR CP864" echo "ar_JO CP864" echo "ar_KW CP864" echo "ar_MA CP864" echo "ar_OM CP864" echo "ar_QA CP864" echo "ar_SA CP864" echo "ar_SY CP864" # ISO-8859-7 languages echo "el CP869" echo "el_GR CP869" # ISO-8859-8 languages echo "he CP862" echo "he_IL CP862" # ISO-8859-9 languages echo "tr CP857" echo "tr_TR CP857" # Japanese echo "ja CP932" echo "ja_JP CP932" # Chinese echo "zh_CN GBK" echo "zh_TW CP950" # not CP938 ?? # Korean echo "kr CP949" # not CP934 ?? echo "kr_KR CP949" # not CP934 ?? # Thai echo "th CP874" echo "th_TH CP874" # Other echo "eo CP850" echo "eo_EO CP850" ;; esac lbreakout2-2.6.5/intl/Makefile.in0000664000175000017500000003763512140767176013565 00000000000000# Makefile for directory with message catalog handling library of GNU gettext # Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library 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. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. VPATH = $(srcdir) prefix = @prefix@ exec_prefix = @exec_prefix@ transform = @program_transform_name@ libdir = @libdir@ includedir = @includedir@ datadir = @datadir@ datarootdir = @datarootdir@ localedir = $(datadir)/locale gettextsrcdir = $(datadir)/gettext/intl aliaspath = $(localedir) subdir = intl INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs l = @INTL_LIBTOOL_SUFFIX_PREFIX@ AR = ar CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ YACC = @INTLBISON@ -y -d YFLAGS = --name-prefix=__gettext DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ -DLIBDIR=\"$(libdir)\" -DIN_LIBINTL \ -DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \ -Dset_relocation_prefix=libintl_set_relocation_prefix \ -Drelocate=libintl_relocate \ -DDEPENDS_ON_LIBICONV=1 @DEFS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) HEADERS = \ gmo.h \ gettextP.h \ hash-string.h \ loadinfo.h \ plural-exp.h \ eval-plural.h \ localcharset.h \ relocatable.h \ xsize.h \ printf-args.h printf-args.c \ printf-parse.h wprintf-parse.h printf-parse.c \ vasnprintf.h vasnwprintf.h vasnprintf.c \ os2compat.h \ libgnuintl.h.in SOURCES = \ bindtextdom.c \ dcgettext.c \ dgettext.c \ gettext.c \ finddomain.c \ loadmsgcat.c \ localealias.c \ textdomain.c \ l10nflist.c \ explodename.c \ dcigettext.c \ dcngettext.c \ dngettext.c \ ngettext.c \ plural.y \ plural-exp.c \ localcharset.c \ relocatable.c \ localename.c \ log.c \ printf.c \ osdep.c \ os2compat.c \ intl-compat.c OBJECTS = \ bindtextdom.$lo \ dcgettext.$lo \ dgettext.$lo \ gettext.$lo \ finddomain.$lo \ loadmsgcat.$lo \ localealias.$lo \ textdomain.$lo \ l10nflist.$lo \ explodename.$lo \ dcigettext.$lo \ dcngettext.$lo \ dngettext.$lo \ ngettext.$lo \ plural.$lo \ plural-exp.$lo \ localcharset.$lo \ relocatable.$lo \ localename.$lo \ log.$lo \ printf.$lo \ osdep.$lo \ intl-compat.$lo DISTFILES.common = Makefile.in \ config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES) DISTFILES.generated = plural.c DISTFILES.normal = VERSION DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \ libgnuintl.h_vms Makefile.vms \ libgnuintl.h.msvc-static libgnuintl.h.msvc-shared README.woe32 Makefile.msvc DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \ COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h all: all-@USE_INCLUDED_LIBINTL@ all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed all-no: all-no-@BUILD_INCLUDED_LIBINTL@ all-no-yes: libgnuintl.$la all-no-no: libintl.a libgnuintl.a: $(OBJECTS) rm -f $@ $(AR) cru $@ $(OBJECTS) $(RANLIB) $@ libintl.la libgnuintl.la: $(OBJECTS) $(LIBTOOL) --mode=link \ $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ $(OBJECTS) @LTLIBICONV@ $(LIBS) -lc \ -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ -rpath $(libdir) \ -no-undefined # Libtool's library version information for libintl. # Before making a gettext release, the gettext maintainer must change this # according to the libtool documentation, section "Library interface versions". # Maintainers of other packages that include the intl directory must *not* # change these values. LTV_CURRENT=7 LTV_REVISION=0 LTV_AGE=4 .SUFFIXES: .SUFFIXES: .c .y .o .lo .sin .sed .c.o: $(COMPILE) $< .y.c: $(YACC) $(YFLAGS) --output $@ $< rm -f $*.h bindtextdom.lo: $(srcdir)/bindtextdom.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c dcgettext.lo: $(srcdir)/dcgettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c dgettext.lo: $(srcdir)/dgettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c gettext.lo: $(srcdir)/gettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c finddomain.lo: $(srcdir)/finddomain.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c loadmsgcat.lo: $(srcdir)/loadmsgcat.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c localealias.lo: $(srcdir)/localealias.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c textdomain.lo: $(srcdir)/textdomain.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c l10nflist.lo: $(srcdir)/l10nflist.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c explodename.lo: $(srcdir)/explodename.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c dcigettext.lo: $(srcdir)/dcigettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c dcngettext.lo: $(srcdir)/dcngettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c dngettext.lo: $(srcdir)/dngettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c ngettext.lo: $(srcdir)/ngettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c plural.lo: $(srcdir)/plural.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c plural-exp.lo: $(srcdir)/plural-exp.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c localcharset.lo: $(srcdir)/localcharset.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c relocatable.lo: $(srcdir)/relocatable.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c localename.lo: $(srcdir)/localename.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c log.lo: $(srcdir)/log.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c printf.lo: $(srcdir)/printf.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c osdep.lo: $(srcdir)/osdep.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c intl-compat.lo: $(srcdir)/intl-compat.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c ref-add.sed: $(srcdir)/ref-add.sin sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed mv t-ref-add.sed ref-add.sed ref-del.sed: $(srcdir)/ref-del.sin sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed mv t-ref-del.sed ref-del.sed INCLUDES = -I. -I$(srcdir) -I.. libgnuintl.h: $(srcdir)/libgnuintl.h.in sed -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \ -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \ -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \ -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \ < $(srcdir)/libgnuintl.h.in > libgnuintl.h libintl.h: libgnuintl.h cp libgnuintl.h libintl.h charset.alias: $(srcdir)/config.charset $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ mv t-$@ $@ check: all # We must not install the libintl.h/libintl.a files if we are on a # system which has the GNU gettext() function in its C library or in a # separate library. # If you want to use the one which comes with this version of the # package, you have to use `configure --with-included-gettext'. install: install-exec install-data install-exec: all if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ && test '@USE_INCLUDED_LIBINTL@' = yes; then \ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=install \ $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ if test "@RELOCATABLE@" = yes; then \ dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \ if test -n "$$dependencies"; then \ rm -f $(DESTDIR)$(libdir)/libintl.la; \ fi; \ fi; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools" \ && test '@USE_INCLUDED_LIBINTL@' = no; then \ $(mkinstalldirs) $(DESTDIR)$(libdir); \ $(LIBTOOL) --mode=install \ $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \ $(LIBTOOL) --mode=uninstall \ rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ orig=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ if test @GLIBC21@ = no; then \ orig=charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ fi; \ fi; \ $(mkinstalldirs) $(DESTDIR)$(localedir); \ test -f $(DESTDIR)$(localedir)/locale.alias \ && orig=$(DESTDIR)$(localedir)/locale.alias \ || orig=$(srcdir)/locale.alias; \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ : ; \ fi install-data: all if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \ for file in $$dists; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ dists="$(DISTFILES.generated)"; \ for file in $$dists; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ $(INSTALL_DATA) $$dir/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ dists="$(DISTFILES.obsolete)"; \ for file in $$dists; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-strip: install installdirs: if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ && test '@USE_INCLUDED_LIBINTL@' = yes; then \ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools" \ && test '@USE_INCLUDED_LIBINTL@' = no; then \ $(mkinstalldirs) $(DESTDIR)$(libdir); \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \ $(mkinstalldirs) $(DESTDIR)$(localedir); \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ && test '@USE_INCLUDED_LIBINTL@' = yes; then \ rm -f $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=uninstall \ rm -f $(DESTDIR)$(libdir)/libintl.$la; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools" \ && test '@USE_INCLUDED_LIBINTL@' = no; then \ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ if test -f $(DESTDIR)$(localedir)/locale.alias; then \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools"; then \ for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi info dvi ps pdf html: $(OBJECTS): ../config.h libgnuintl.h bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h dcigettext.$lo: $(srcdir)/eval-plural.h localcharset.$lo: $(srcdir)/localcharset.h localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c tags: TAGS TAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES) id: ID ID: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) mostlyclean: rm -f *.a *.la *.o *.obj *.lo core core.* rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed rm -f -r .libs _libs clean: mostlyclean distclean: clean rm -f Makefile ID TAGS if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \ rm -f ChangeLog.inst $(DISTFILES.normal); \ else \ : ; \ fi maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." # GNU gettext needs not contain the file `VERSION' but contains some # other files which should not be distributed in other packages. distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: Makefile if test "$(PACKAGE)" = "gettext-tools"; then \ : ; \ else \ if test "$(PACKAGE)" = "gettext-runtime"; then \ additional="$(DISTFILES.gettext)"; \ else \ additional="$(DISTFILES.normal)"; \ fi; \ $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ cp -p $$dir/$$file $(distdir); \ done; \ fi Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status # This would be more efficient, but doesn't work any more with autoconf-2.57, # when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used. # cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lbreakout2-2.6.5/intl/localcharset.h0000664000175000017500000000255712140767176014330 00000000000000/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003 Free Software Foundation, Inc. This file is part of the GNU CHARSET Library. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _LOCALCHARSET_H #define _LOCALCHARSET_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); #ifdef __cplusplus } #endif #endif /* _LOCALCHARSET_H */ lbreakout2-2.6.5/intl/dcgettext.c0000664000175000017500000000341512140767176013644 00000000000000/* Implementation of the dcgettext(3) function. Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCGETTEXT __dcgettext # define DCIGETTEXT __dcigettext #else # define DCGETTEXT libintl_dcgettext # define DCIGETTEXT libintl_dcigettext #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCGETTEXT (const char *domainname, const char *msgid, int category) { return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ INTDEF(__dcgettext) weak_alias (__dcgettext, dcgettext); #endif lbreakout2-2.6.5/intl/printf-args.h0000664000175000017500000000550212140767176014111 00000000000000/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _PRINTF_ARGS_H #define _PRINTF_ARGS_H /* Get size_t. */ #include /* Get wchar_t. */ #ifdef HAVE_WCHAR_T # include #endif /* Get wint_t. */ #ifdef HAVE_WINT_T # include #endif /* Get va_list. */ #include /* Argument types */ typedef enum { TYPE_NONE, TYPE_SCHAR, TYPE_UCHAR, TYPE_SHORT, TYPE_USHORT, TYPE_INT, TYPE_UINT, TYPE_LONGINT, TYPE_ULONGINT, #ifdef HAVE_LONG_LONG TYPE_LONGLONGINT, TYPE_ULONGLONGINT, #endif TYPE_DOUBLE, #ifdef HAVE_LONG_DOUBLE TYPE_LONGDOUBLE, #endif TYPE_CHAR, #ifdef HAVE_WINT_T TYPE_WIDE_CHAR, #endif TYPE_STRING, #ifdef HAVE_WCHAR_T TYPE_WIDE_STRING, #endif TYPE_POINTER, TYPE_COUNT_SCHAR_POINTER, TYPE_COUNT_SHORT_POINTER, TYPE_COUNT_INT_POINTER, TYPE_COUNT_LONGINT_POINTER #ifdef HAVE_LONG_LONG , TYPE_COUNT_LONGLONGINT_POINTER #endif } arg_type; /* Polymorphic argument */ typedef struct { arg_type type; union { signed char a_schar; unsigned char a_uchar; short a_short; unsigned short a_ushort; int a_int; unsigned int a_uint; long int a_longint; unsigned long int a_ulongint; #ifdef HAVE_LONG_LONG long long int a_longlongint; unsigned long long int a_ulonglongint; #endif float a_float; double a_double; #ifdef HAVE_LONG_DOUBLE long double a_longdouble; #endif int a_char; #ifdef HAVE_WINT_T wint_t a_wide_char; #endif const char* a_string; #ifdef HAVE_WCHAR_T const wchar_t* a_wide_string; #endif void* a_pointer; signed char * a_count_schar_pointer; short * a_count_short_pointer; int * a_count_int_pointer; long int * a_count_longint_pointer; #ifdef HAVE_LONG_LONG long long int * a_count_longlongint_pointer; #endif } a; } argument; typedef struct { size_t count; argument *arg; } arguments; /* Fetch the arguments, putting them into a. */ #ifdef STATIC STATIC #else extern #endif int printf_fetchargs (va_list args, arguments *a); #endif /* _PRINTF_ARGS_H */ lbreakout2-2.6.5/intl/plural-exp.h0000664000175000017500000000773312140767176013756 00000000000000/* Expression parsing and evaluation for plural form selection. Copyright (C) 2000-2003 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _PLURAL_EXP_H #define _PLURAL_EXP_H #ifndef internal_function # define internal_function #endif #ifndef attribute_hidden # define attribute_hidden #endif /* This is the representation of the expressions to determine the plural form. */ struct expression { int nargs; /* Number of arguments. */ enum operator { /* Without arguments: */ var, /* The variable "n". */ num, /* Decimal number. */ /* Unary operators: */ lnot, /* Logical NOT. */ /* Binary operators: */ mult, /* Multiplication. */ divide, /* Division. */ module, /* Modulo operation. */ plus, /* Addition. */ minus, /* Subtraction. */ less_than, /* Comparison. */ greater_than, /* Comparison. */ less_or_equal, /* Comparison. */ greater_or_equal, /* Comparison. */ equal, /* Comparison for equality. */ not_equal, /* Comparison for inequality. */ land, /* Logical AND. */ lor, /* Logical OR. */ /* Ternary operators: */ qmop /* Question mark operator. */ } operation; union { unsigned long int num; /* Number value for `num'. */ struct expression *args[3]; /* Up to three arguments. */ } val; }; /* This is the data structure to pass information to the parser and get the result in a thread-safe way. */ struct parse_args { const char *cp; struct expression *res; }; /* Names for the libintl functions are a problem. This source code is used 1. in the GNU C Library library, 2. in the GNU libintl library, 3. in the GNU gettext tools. The function names in each situation must be different, to allow for binary incompatible changes in 'struct expression'. Furthermore, 1. in the GNU C Library library, the names have a __ prefix, 2.+3. in the GNU libintl library and in the GNU gettext tools, the names must follow ANSI C and not start with __. So we have to distinguish the three cases. */ #ifdef _LIBC # define FREE_EXPRESSION __gettext_free_exp # define PLURAL_PARSE __gettextparse # define GERMANIC_PLURAL __gettext_germanic_plural # define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural #elif defined (IN_LIBINTL) # define FREE_EXPRESSION libintl_gettext_free_exp # define PLURAL_PARSE libintl_gettextparse # define GERMANIC_PLURAL libintl_gettext_germanic_plural # define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural #else # define FREE_EXPRESSION free_plural_expression # define PLURAL_PARSE parse_plural_expression # define GERMANIC_PLURAL germanic_plural # define EXTRACT_PLURAL_EXPRESSION extract_plural_expression #endif extern void FREE_EXPRESSION (struct expression *exp) internal_function; extern int PLURAL_PARSE (void *arg); extern struct expression GERMANIC_PLURAL attribute_hidden; extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry, struct expression **pluralp, unsigned long int *npluralsp) internal_function; #if !defined (_LIBC) && !defined (IN_LIBINTL) extern unsigned long int plural_eval (struct expression *pexp, unsigned long int n); #endif #endif /* _PLURAL_EXP_H */ lbreakout2-2.6.5/intl/xsize.h0000664000175000017500000000672212140767176013024 00000000000000/* xsize.h -- Checked size_t computations. Copyright (C) 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _XSIZE_H #define _XSIZE_H /* Get size_t. */ #include /* Get SIZE_MAX. */ #include #if HAVE_STDINT_H # include #endif /* The size of memory objects is often computed through expressions of type size_t. Example: void* p = malloc (header_size + n * element_size). These computations can lead to overflow. When this happens, malloc() returns a piece of memory that is way too small, and the program then crashes while attempting to fill the memory. To avoid this, the functions and macros in this file check for overflow. The convention is that SIZE_MAX represents overflow. malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc implementation that uses mmap --, it's recommended to use size_overflow_p() or size_in_bounds_p() before invoking malloc(). The example thus becomes: size_t size = xsum (header_size, xtimes (n, element_size)); void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); */ /* Convert an arbitrary value >= 0 to type size_t. */ #define xcast_size_t(N) \ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) /* Sum of two sizes, with overflow check. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum (size_t size1, size_t size2) { size_t sum = size1 + size2; return (sum >= size1 ? sum : SIZE_MAX); } /* Sum of three sizes, with overflow check. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum3 (size_t size1, size_t size2, size_t size3) { return xsum (xsum (size1, size2), size3); } /* Sum of four sizes, with overflow check. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) { return xsum (xsum (xsum (size1, size2), size3), size4); } /* Maximum of two sizes, with overflow check. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xmax (size_t size1, size_t size2) { /* No explicit check is needed here, because for any n: max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ return (size1 >= size2 ? size1 : size2); } /* Multiplication of a count with an element size, with overflow check. The count must be >= 0 and the element size must be > 0. This is a macro, not an inline function, so that it works correctly even when N is of a wider tupe and N > SIZE_MAX. */ #define xtimes(N, ELSIZE) \ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) /* Check for overflow. */ #define size_overflow_p(SIZE) \ ((SIZE) == SIZE_MAX) /* Check against overflow. */ #define size_in_bounds_p(SIZE) \ ((SIZE) != SIZE_MAX) #endif /* _XSIZE_H */ lbreakout2-2.6.5/intl/ChangeLog0000664000175000017500000000011112140767176013245 000000000000002004-01-29 GNU * Version 0.14.1 released. lbreakout2-2.6.5/intl/loadmsgcat.c0000664000175000017500000010723712140767176013776 00000000000000/* Load needed message catalogs. Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #ifdef __GNUC__ # undef alloca # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #ifdef _LIBC # include # include #endif #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || (defined _LIBC && defined _POSIX_MAPPED_FILES) # include # undef HAVE_MMAP # define HAVE_MMAP 1 #else # undef HAVE_MMAP #endif #if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC # include #endif #if defined HAVE_INTTYPES_H || defined _LIBC # include #endif #include "gmo.h" #include "gettextP.h" #include "hash-string.h" #include "plural-exp.h" #ifdef _LIBC # include "../locale/localeinfo.h" #endif /* Provide fallback values for macros that ought to be defined in . Note that our fallback values need not be literal strings, because we don't use them with preprocessor string concatenation. */ #if !defined PRId8 || PRI_MACROS_BROKEN # undef PRId8 # define PRId8 "d" #endif #if !defined PRIi8 || PRI_MACROS_BROKEN # undef PRIi8 # define PRIi8 "i" #endif #if !defined PRIo8 || PRI_MACROS_BROKEN # undef PRIo8 # define PRIo8 "o" #endif #if !defined PRIu8 || PRI_MACROS_BROKEN # undef PRIu8 # define PRIu8 "u" #endif #if !defined PRIx8 || PRI_MACROS_BROKEN # undef PRIx8 # define PRIx8 "x" #endif #if !defined PRIX8 || PRI_MACROS_BROKEN # undef PRIX8 # define PRIX8 "X" #endif #if !defined PRId16 || PRI_MACROS_BROKEN # undef PRId16 # define PRId16 "d" #endif #if !defined PRIi16 || PRI_MACROS_BROKEN # undef PRIi16 # define PRIi16 "i" #endif #if !defined PRIo16 || PRI_MACROS_BROKEN # undef PRIo16 # define PRIo16 "o" #endif #if !defined PRIu16 || PRI_MACROS_BROKEN # undef PRIu16 # define PRIu16 "u" #endif #if !defined PRIx16 || PRI_MACROS_BROKEN # undef PRIx16 # define PRIx16 "x" #endif #if !defined PRIX16 || PRI_MACROS_BROKEN # undef PRIX16 # define PRIX16 "X" #endif #if !defined PRId32 || PRI_MACROS_BROKEN # undef PRId32 # define PRId32 "d" #endif #if !defined PRIi32 || PRI_MACROS_BROKEN # undef PRIi32 # define PRIi32 "i" #endif #if !defined PRIo32 || PRI_MACROS_BROKEN # undef PRIo32 # define PRIo32 "o" #endif #if !defined PRIu32 || PRI_MACROS_BROKEN # undef PRIu32 # define PRIu32 "u" #endif #if !defined PRIx32 || PRI_MACROS_BROKEN # undef PRIx32 # define PRIx32 "x" #endif #if !defined PRIX32 || PRI_MACROS_BROKEN # undef PRIX32 # define PRIX32 "X" #endif #if !defined PRId64 || PRI_MACROS_BROKEN # undef PRId64 # define PRId64 (sizeof (long) == 8 ? "ld" : "lld") #endif #if !defined PRIi64 || PRI_MACROS_BROKEN # undef PRIi64 # define PRIi64 (sizeof (long) == 8 ? "li" : "lli") #endif #if !defined PRIo64 || PRI_MACROS_BROKEN # undef PRIo64 # define PRIo64 (sizeof (long) == 8 ? "lo" : "llo") #endif #if !defined PRIu64 || PRI_MACROS_BROKEN # undef PRIu64 # define PRIu64 (sizeof (long) == 8 ? "lu" : "llu") #endif #if !defined PRIx64 || PRI_MACROS_BROKEN # undef PRIx64 # define PRIx64 (sizeof (long) == 8 ? "lx" : "llx") #endif #if !defined PRIX64 || PRI_MACROS_BROKEN # undef PRIX64 # define PRIX64 (sizeof (long) == 8 ? "lX" : "llX") #endif #if !defined PRIdLEAST8 || PRI_MACROS_BROKEN # undef PRIdLEAST8 # define PRIdLEAST8 "d" #endif #if !defined PRIiLEAST8 || PRI_MACROS_BROKEN # undef PRIiLEAST8 # define PRIiLEAST8 "i" #endif #if !defined PRIoLEAST8 || PRI_MACROS_BROKEN # undef PRIoLEAST8 # define PRIoLEAST8 "o" #endif #if !defined PRIuLEAST8 || PRI_MACROS_BROKEN # undef PRIuLEAST8 # define PRIuLEAST8 "u" #endif #if !defined PRIxLEAST8 || PRI_MACROS_BROKEN # undef PRIxLEAST8 # define PRIxLEAST8 "x" #endif #if !defined PRIXLEAST8 || PRI_MACROS_BROKEN # undef PRIXLEAST8 # define PRIXLEAST8 "X" #endif #if !defined PRIdLEAST16 || PRI_MACROS_BROKEN # undef PRIdLEAST16 # define PRIdLEAST16 "d" #endif #if !defined PRIiLEAST16 || PRI_MACROS_BROKEN # undef PRIiLEAST16 # define PRIiLEAST16 "i" #endif #if !defined PRIoLEAST16 || PRI_MACROS_BROKEN # undef PRIoLEAST16 # define PRIoLEAST16 "o" #endif #if !defined PRIuLEAST16 || PRI_MACROS_BROKEN # undef PRIuLEAST16 # define PRIuLEAST16 "u" #endif #if !defined PRIxLEAST16 || PRI_MACROS_BROKEN # undef PRIxLEAST16 # define PRIxLEAST16 "x" #endif #if !defined PRIXLEAST16 || PRI_MACROS_BROKEN # undef PRIXLEAST16 # define PRIXLEAST16 "X" #endif #if !defined PRIdLEAST32 || PRI_MACROS_BROKEN # undef PRIdLEAST32 # define PRIdLEAST32 "d" #endif #if !defined PRIiLEAST32 || PRI_MACROS_BROKEN # undef PRIiLEAST32 # define PRIiLEAST32 "i" #endif #if !defined PRIoLEAST32 || PRI_MACROS_BROKEN # undef PRIoLEAST32 # define PRIoLEAST32 "o" #endif #if !defined PRIuLEAST32 || PRI_MACROS_BROKEN # undef PRIuLEAST32 # define PRIuLEAST32 "u" #endif #if !defined PRIxLEAST32 || PRI_MACROS_BROKEN # undef PRIxLEAST32 # define PRIxLEAST32 "x" #endif #if !defined PRIXLEAST32 || PRI_MACROS_BROKEN # undef PRIXLEAST32 # define PRIXLEAST32 "X" #endif #if !defined PRIdLEAST64 || PRI_MACROS_BROKEN # undef PRIdLEAST64 # define PRIdLEAST64 PRId64 #endif #if !defined PRIiLEAST64 || PRI_MACROS_BROKEN # undef PRIiLEAST64 # define PRIiLEAST64 PRIi64 #endif #if !defined PRIoLEAST64 || PRI_MACROS_BROKEN # undef PRIoLEAST64 # define PRIoLEAST64 PRIo64 #endif #if !defined PRIuLEAST64 || PRI_MACROS_BROKEN # undef PRIuLEAST64 # define PRIuLEAST64 PRIu64 #endif #if !defined PRIxLEAST64 || PRI_MACROS_BROKEN # undef PRIxLEAST64 # define PRIxLEAST64 PRIx64 #endif #if !defined PRIXLEAST64 || PRI_MACROS_BROKEN # undef PRIXLEAST64 # define PRIXLEAST64 PRIX64 #endif #if !defined PRIdFAST8 || PRI_MACROS_BROKEN # undef PRIdFAST8 # define PRIdFAST8 "d" #endif #if !defined PRIiFAST8 || PRI_MACROS_BROKEN # undef PRIiFAST8 # define PRIiFAST8 "i" #endif #if !defined PRIoFAST8 || PRI_MACROS_BROKEN # undef PRIoFAST8 # define PRIoFAST8 "o" #endif #if !defined PRIuFAST8 || PRI_MACROS_BROKEN # undef PRIuFAST8 # define PRIuFAST8 "u" #endif #if !defined PRIxFAST8 || PRI_MACROS_BROKEN # undef PRIxFAST8 # define PRIxFAST8 "x" #endif #if !defined PRIXFAST8 || PRI_MACROS_BROKEN # undef PRIXFAST8 # define PRIXFAST8 "X" #endif #if !defined PRIdFAST16 || PRI_MACROS_BROKEN # undef PRIdFAST16 # define PRIdFAST16 "d" #endif #if !defined PRIiFAST16 || PRI_MACROS_BROKEN # undef PRIiFAST16 # define PRIiFAST16 "i" #endif #if !defined PRIoFAST16 || PRI_MACROS_BROKEN # undef PRIoFAST16 # define PRIoFAST16 "o" #endif #if !defined PRIuFAST16 || PRI_MACROS_BROKEN # undef PRIuFAST16 # define PRIuFAST16 "u" #endif #if !defined PRIxFAST16 || PRI_MACROS_BROKEN # undef PRIxFAST16 # define PRIxFAST16 "x" #endif #if !defined PRIXFAST16 || PRI_MACROS_BROKEN # undef PRIXFAST16 # define PRIXFAST16 "X" #endif #if !defined PRIdFAST32 || PRI_MACROS_BROKEN # undef PRIdFAST32 # define PRIdFAST32 "d" #endif #if !defined PRIiFAST32 || PRI_MACROS_BROKEN # undef PRIiFAST32 # define PRIiFAST32 "i" #endif #if !defined PRIoFAST32 || PRI_MACROS_BROKEN # undef PRIoFAST32 # define PRIoFAST32 "o" #endif #if !defined PRIuFAST32 || PRI_MACROS_BROKEN # undef PRIuFAST32 # define PRIuFAST32 "u" #endif #if !defined PRIxFAST32 || PRI_MACROS_BROKEN # undef PRIxFAST32 # define PRIxFAST32 "x" #endif #if !defined PRIXFAST32 || PRI_MACROS_BROKEN # undef PRIXFAST32 # define PRIXFAST32 "X" #endif #if !defined PRIdFAST64 || PRI_MACROS_BROKEN # undef PRIdFAST64 # define PRIdFAST64 PRId64 #endif #if !defined PRIiFAST64 || PRI_MACROS_BROKEN # undef PRIiFAST64 # define PRIiFAST64 PRIi64 #endif #if !defined PRIoFAST64 || PRI_MACROS_BROKEN # undef PRIoFAST64 # define PRIoFAST64 PRIo64 #endif #if !defined PRIuFAST64 || PRI_MACROS_BROKEN # undef PRIuFAST64 # define PRIuFAST64 PRIu64 #endif #if !defined PRIxFAST64 || PRI_MACROS_BROKEN # undef PRIxFAST64 # define PRIxFAST64 PRIx64 #endif #if !defined PRIXFAST64 || PRI_MACROS_BROKEN # undef PRIXFAST64 # define PRIXFAST64 PRIX64 #endif #if !defined PRIdMAX || PRI_MACROS_BROKEN # undef PRIdMAX # define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld") #endif #if !defined PRIiMAX || PRI_MACROS_BROKEN # undef PRIiMAX # define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli") #endif #if !defined PRIoMAX || PRI_MACROS_BROKEN # undef PRIoMAX # define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo") #endif #if !defined PRIuMAX || PRI_MACROS_BROKEN # undef PRIuMAX # define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu") #endif #if !defined PRIxMAX || PRI_MACROS_BROKEN # undef PRIxMAX # define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx") #endif #if !defined PRIXMAX || PRI_MACROS_BROKEN # undef PRIXMAX # define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX") #endif #if !defined PRIdPTR || PRI_MACROS_BROKEN # undef PRIdPTR # define PRIdPTR \ (sizeof (void *) == sizeof (long) ? "ld" : \ sizeof (void *) == sizeof (int) ? "d" : \ "lld") #endif #if !defined PRIiPTR || PRI_MACROS_BROKEN # undef PRIiPTR # define PRIiPTR \ (sizeof (void *) == sizeof (long) ? "li" : \ sizeof (void *) == sizeof (int) ? "i" : \ "lli") #endif #if !defined PRIoPTR || PRI_MACROS_BROKEN # undef PRIoPTR # define PRIoPTR \ (sizeof (void *) == sizeof (long) ? "lo" : \ sizeof (void *) == sizeof (int) ? "o" : \ "llo") #endif #if !defined PRIuPTR || PRI_MACROS_BROKEN # undef PRIuPTR # define PRIuPTR \ (sizeof (void *) == sizeof (long) ? "lu" : \ sizeof (void *) == sizeof (int) ? "u" : \ "llu") #endif #if !defined PRIxPTR || PRI_MACROS_BROKEN # undef PRIxPTR # define PRIxPTR \ (sizeof (void *) == sizeof (long) ? "lx" : \ sizeof (void *) == sizeof (int) ? "x" : \ "llx") #endif #if !defined PRIXPTR || PRI_MACROS_BROKEN # undef PRIXPTR # define PRIXPTR \ (sizeof (void *) == sizeof (long) ? "lX" : \ sizeof (void *) == sizeof (int) ? "X" : \ "llX") #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ISO C functions. This is required by the standard because some ISO C functions will require linking with this object file and the name space must not be polluted. */ # define open __open # define close __close # define read __read # define mmap __mmap # define munmap __munmap #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in . */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #ifdef __BEOS__ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif /* On reasonable systems, binary I/O is the default. */ #ifndef O_BINARY # define O_BINARY 0 #endif /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ int _nl_msg_cat_cntr; /* Expand a system dependent string segment. Return NULL if unsupported. */ static const char * get_sysdep_segment_value (const char *name) { /* Test for an ISO C 99 section 7.8.1 format string directive. Syntax: P R I { d | i | o | u | x | X } { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */ /* We don't use a table of 14 times 6 'const char *' strings here, because data relocations cost startup time. */ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I') { if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u' || name[3] == 'x' || name[3] == 'X') { if (name[4] == '8' && name[5] == '\0') { if (name[3] == 'd') return PRId8; if (name[3] == 'i') return PRIi8; if (name[3] == 'o') return PRIo8; if (name[3] == 'u') return PRIu8; if (name[3] == 'x') return PRIx8; if (name[3] == 'X') return PRIX8; abort (); } if (name[4] == '1' && name[5] == '6' && name[6] == '\0') { if (name[3] == 'd') return PRId16; if (name[3] == 'i') return PRIi16; if (name[3] == 'o') return PRIo16; if (name[3] == 'u') return PRIu16; if (name[3] == 'x') return PRIx16; if (name[3] == 'X') return PRIX16; abort (); } if (name[4] == '3' && name[5] == '2' && name[6] == '\0') { if (name[3] == 'd') return PRId32; if (name[3] == 'i') return PRIi32; if (name[3] == 'o') return PRIo32; if (name[3] == 'u') return PRIu32; if (name[3] == 'x') return PRIx32; if (name[3] == 'X') return PRIX32; abort (); } if (name[4] == '6' && name[5] == '4' && name[6] == '\0') { if (name[3] == 'd') return PRId64; if (name[3] == 'i') return PRIi64; if (name[3] == 'o') return PRIo64; if (name[3] == 'u') return PRIu64; if (name[3] == 'x') return PRIx64; if (name[3] == 'X') return PRIX64; abort (); } if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A' && name[7] == 'S' && name[8] == 'T') { if (name[9] == '8' && name[10] == '\0') { if (name[3] == 'd') return PRIdLEAST8; if (name[3] == 'i') return PRIiLEAST8; if (name[3] == 'o') return PRIoLEAST8; if (name[3] == 'u') return PRIuLEAST8; if (name[3] == 'x') return PRIxLEAST8; if (name[3] == 'X') return PRIXLEAST8; abort (); } if (name[9] == '1' && name[10] == '6' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST16; if (name[3] == 'i') return PRIiLEAST16; if (name[3] == 'o') return PRIoLEAST16; if (name[3] == 'u') return PRIuLEAST16; if (name[3] == 'x') return PRIxLEAST16; if (name[3] == 'X') return PRIXLEAST16; abort (); } if (name[9] == '3' && name[10] == '2' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST32; if (name[3] == 'i') return PRIiLEAST32; if (name[3] == 'o') return PRIoLEAST32; if (name[3] == 'u') return PRIuLEAST32; if (name[3] == 'x') return PRIxLEAST32; if (name[3] == 'X') return PRIXLEAST32; abort (); } if (name[9] == '6' && name[10] == '4' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST64; if (name[3] == 'i') return PRIiLEAST64; if (name[3] == 'o') return PRIoLEAST64; if (name[3] == 'u') return PRIuLEAST64; if (name[3] == 'x') return PRIxLEAST64; if (name[3] == 'X') return PRIXLEAST64; abort (); } } if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S' && name[7] == 'T') { if (name[8] == '8' && name[9] == '\0') { if (name[3] == 'd') return PRIdFAST8; if (name[3] == 'i') return PRIiFAST8; if (name[3] == 'o') return PRIoFAST8; if (name[3] == 'u') return PRIuFAST8; if (name[3] == 'x') return PRIxFAST8; if (name[3] == 'X') return PRIXFAST8; abort (); } if (name[8] == '1' && name[9] == '6' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST16; if (name[3] == 'i') return PRIiFAST16; if (name[3] == 'o') return PRIoFAST16; if (name[3] == 'u') return PRIuFAST16; if (name[3] == 'x') return PRIxFAST16; if (name[3] == 'X') return PRIXFAST16; abort (); } if (name[8] == '3' && name[9] == '2' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST32; if (name[3] == 'i') return PRIiFAST32; if (name[3] == 'o') return PRIoFAST32; if (name[3] == 'u') return PRIuFAST32; if (name[3] == 'x') return PRIxFAST32; if (name[3] == 'X') return PRIXFAST32; abort (); } if (name[8] == '6' && name[9] == '4' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST64; if (name[3] == 'i') return PRIiFAST64; if (name[3] == 'o') return PRIoFAST64; if (name[3] == 'u') return PRIuFAST64; if (name[3] == 'x') return PRIxFAST64; if (name[3] == 'X') return PRIXFAST64; abort (); } } if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X' && name[7] == '\0') { if (name[3] == 'd') return PRIdMAX; if (name[3] == 'i') return PRIiMAX; if (name[3] == 'o') return PRIoMAX; if (name[3] == 'u') return PRIuMAX; if (name[3] == 'x') return PRIxMAX; if (name[3] == 'X') return PRIXMAX; abort (); } if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R' && name[7] == '\0') { if (name[3] == 'd') return PRIdPTR; if (name[3] == 'i') return PRIiPTR; if (name[3] == 'o') return PRIoPTR; if (name[3] == 'u') return PRIuPTR; if (name[3] == 'x') return PRIxPTR; if (name[3] == 'X') return PRIXPTR; abort (); } } } /* Test for a glibc specific printf() format directive flag. */ if (name[0] == 'I' && name[1] == '\0') { #if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) /* The 'I' flag, in numeric format directives, replaces ASCII digits with the 'outdigits' defined in the LC_CTYPE locale facet. This is used for Farsi (Persian) and maybe Arabic. */ return "I"; #else return ""; #endif } /* Other system dependent strings are not valid. */ return NULL; } /* Initialize the codeset dependent parts of an opened message catalog. Return the header entry. */ const char * internal_function _nl_init_domain_conv (struct loaded_l10nfile *domain_file, struct loaded_domain *domain, struct binding *domainbinding) { /* Find out about the character set the file is encoded with. This can be found (in textual form) in the entry "". If this entry does not exist or if this does not contain the `charset=' information, we will assume the charset matches the one the current locale and we don't have to perform any conversion. */ char *nullentry; size_t nullentrylen; /* Preinitialize fields, to avoid recursion during _nl_find_msg. */ domain->codeset_cntr = (domainbinding != NULL ? domainbinding->codeset_cntr : 0); #ifdef _LIBC domain->conv = (__gconv_t) -1; #else # if HAVE_ICONV domain->conv = (iconv_t) -1; # endif #endif domain->conv_tab = NULL; /* Get the header entry. */ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); if (nullentry != NULL) { #if defined _LIBC || HAVE_ICONV const char *charsetstr; charsetstr = strstr (nullentry, "charset="); if (charsetstr != NULL) { size_t len; char *charset; const char *outcharset; charsetstr += strlen ("charset="); len = strcspn (charsetstr, " \t\n"); charset = (char *) alloca (len + 1); # if defined _LIBC || HAVE_MEMPCPY *((char *) mempcpy (charset, charsetstr, len)) = '\0'; # else memcpy (charset, charsetstr, len); charset[len] = '\0'; # endif /* The output charset should normally be determined by the locale. But sometimes the locale is not used or not correctly set up, so we provide a possibility for the user to override this. Moreover, the value specified through bind_textdomain_codeset overrides both. */ if (domainbinding != NULL && domainbinding->codeset != NULL) outcharset = domainbinding->codeset; else { outcharset = getenv ("OUTPUT_CHARSET"); if (outcharset == NULL || outcharset[0] == '\0') { # ifdef _LIBC outcharset = _NL_CURRENT (LC_CTYPE, CODESET); # else # if HAVE_ICONV extern const char *locale_charset (void); outcharset = locale_charset (); # endif # endif } } # ifdef _LIBC /* We always want to use transliteration. */ outcharset = norm_add_slashes (outcharset, "TRANSLIT"); charset = norm_add_slashes (charset, NULL); if (__gconv_open (outcharset, charset, &domain->conv, GCONV_AVOID_NOCONV) != __GCONV_OK) domain->conv = (__gconv_t) -1; # else # if HAVE_ICONV /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, we want to use transliteration. */ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \ || _LIBICONV_VERSION >= 0x0105 if (strchr (outcharset, '/') == NULL) { char *tmp; len = strlen (outcharset); tmp = (char *) alloca (len + 10 + 1); memcpy (tmp, outcharset, len); memcpy (tmp + len, "//TRANSLIT", 10 + 1); outcharset = tmp; domain->conv = iconv_open (outcharset, charset); freea (outcharset); } else # endif domain->conv = iconv_open (outcharset, charset); # endif # endif freea (charset); } #endif /* _LIBC || HAVE_ICONV */ } return nullentry; } /* Frees the codeset dependent parts of an opened message catalog. */ void internal_function _nl_free_domain_conv (struct loaded_domain *domain) { if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) free (domain->conv_tab); #ifdef _LIBC if (domain->conv != (__gconv_t) -1) __gconv_close (domain->conv); #else # if HAVE_ICONV if (domain->conv != (iconv_t) -1) iconv_close (domain->conv); # endif #endif } /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function _nl_load_domain (struct loaded_l10nfile *domain_file, struct binding *domainbinding) { int fd; size_t size; #ifdef _LIBC struct stat64 st; #else struct stat st; #endif struct mo_file_header *data = (struct mo_file_header *) -1; int use_mmap = 0; struct loaded_domain *domain; int revision; const char *nullentry; domain_file->decided = 1; domain_file->data = NULL; /* Note that it would be useless to store domainbinding in domain_file because domainbinding might be == NULL now but != NULL later (after a call to bind_textdomain_codeset). */ /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN syntax. */ if (domain_file->filename == NULL) return; /* Try to open the addressed file. */ fd = open (domain_file->filename, O_RDONLY | O_BINARY); if (fd == -1) return; /* We must know about the size of the file. */ if ( #ifdef _LIBC __builtin_expect (fstat64 (fd, &st) != 0, 0) #else __builtin_expect (fstat (fd, &st) != 0, 0) #endif || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) || __builtin_expect (size < sizeof (struct mo_file_header), 0)) { /* Something went wrong. */ close (fd); return; } #ifdef HAVE_MMAP /* Now we are ready to load the file. If mmap() is available we try this first. If not available or it failed we try to load it. */ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); if (__builtin_expect (data != (struct mo_file_header *) -1, 1)) { /* mmap() call was successful. */ close (fd); use_mmap = 1; } #endif /* If the data is not yet available (i.e. mmap'ed) we try to load it manually. */ if (data == (struct mo_file_header *) -1) { size_t to_read; char *read_ptr; data = (struct mo_file_header *) malloc (size); if (data == NULL) return; to_read = size; read_ptr = (char *) data; do { long int nb = (long int) read (fd, read_ptr, to_read); if (nb <= 0) { #ifdef EINTR if (nb == -1 && errno == EINTR) continue; #endif close (fd); return; } read_ptr += nb; to_read -= nb; } while (to_read > 0); close (fd); } /* Using the magic number we can test whether it really is a message catalog file. */ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED, 0)) { /* The magic number is wrong: not a message catalog file. */ #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); return; } domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); if (domain == NULL) return; domain_file->data = domain; domain->data = (char *) data; domain->use_mmap = use_mmap; domain->mmap_size = size; domain->must_swap = data->magic != _MAGIC; domain->malloced = NULL; /* Fill in the information about the available tables. */ revision = W (domain->must_swap, data->revision); /* We support only the major revisions 0 and 1. */ switch (revision >> 16) { case 0: case 1: domain->nstrings = W (domain->must_swap, data->nstrings); domain->orig_tab = (const struct string_desc *) ((char *) data + W (domain->must_swap, data->orig_tab_offset)); domain->trans_tab = (const struct string_desc *) ((char *) data + W (domain->must_swap, data->trans_tab_offset)); domain->hash_size = W (domain->must_swap, data->hash_tab_size); domain->hash_tab = (domain->hash_size > 2 ? (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->hash_tab_offset)) : NULL); domain->must_swap_hash_tab = domain->must_swap; /* Now dispatch on the minor revision. */ switch (revision & 0xffff) { case 0: domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; break; case 1: default: { nls_uint32 n_sysdep_strings; if (domain->hash_tab == NULL) /* This is invalid. These minor revisions need a hash table. */ goto invalid; n_sysdep_strings = W (domain->must_swap, data->n_sysdep_strings); if (n_sysdep_strings > 0) { nls_uint32 n_sysdep_segments; const struct sysdep_segment *sysdep_segments; const char **sysdep_segment_values; const nls_uint32 *orig_sysdep_tab; const nls_uint32 *trans_sysdep_tab; nls_uint32 n_inmem_sysdep_strings; size_t memneed; char *mem; struct sysdep_string_desc *inmem_orig_sysdep_tab; struct sysdep_string_desc *inmem_trans_sysdep_tab; nls_uint32 *inmem_hash_tab; unsigned int i, j; /* Get the values of the system dependent segments. */ n_sysdep_segments = W (domain->must_swap, data->n_sysdep_segments); sysdep_segments = (const struct sysdep_segment *) ((char *) data + W (domain->must_swap, data->sysdep_segments_offset)); sysdep_segment_values = alloca (n_sysdep_segments * sizeof (const char *)); for (i = 0; i < n_sysdep_segments; i++) { const char *name = (char *) data + W (domain->must_swap, sysdep_segments[i].offset); nls_uint32 namelen = W (domain->must_swap, sysdep_segments[i].length); if (!(namelen > 0 && name[namelen - 1] == '\0')) { freea (sysdep_segment_values); goto invalid; } sysdep_segment_values[i] = get_sysdep_segment_value (name); } orig_sysdep_tab = (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->orig_sysdep_tab_offset)); trans_sysdep_tab = (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->trans_sysdep_tab_offset)); /* Compute the amount of additional memory needed for the system dependent strings and the augmented hash table. At the same time, also drop string pairs which refer to an undefined system dependent segment. */ n_inmem_sysdep_strings = 0; memneed = domain->hash_size * sizeof (nls_uint32); for (i = 0; i < n_sysdep_strings; i++) { int valid = 1; size_t needs[2]; for (j = 0; j < 2; j++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, j == 0 ? orig_sysdep_tab[i] : trans_sysdep_tab[i])); size_t need = 0; const struct segment_pair *p = sysdep_string->segments; if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END) for (p = sysdep_string->segments;; p++) { nls_uint32 sysdepref; need += W (domain->must_swap, p->segsize); sysdepref = W (domain->must_swap, p->sysdepref); if (sysdepref == SEGMENTS_END) break; if (sysdepref >= n_sysdep_segments) { /* Invalid. */ freea (sysdep_segment_values); goto invalid; } if (sysdep_segment_values[sysdepref] == NULL) { /* This particular string pair is invalid. */ valid = 0; break; } need += strlen (sysdep_segment_values[sysdepref]); } needs[j] = need; if (!valid) break; } if (valid) { n_inmem_sysdep_strings++; memneed += needs[0] + needs[1]; } } memneed += 2 * n_inmem_sysdep_strings * sizeof (struct sysdep_string_desc); if (n_inmem_sysdep_strings > 0) { unsigned int k; /* Allocate additional memory. */ mem = (char *) malloc (memneed); if (mem == NULL) goto invalid; domain->malloced = mem; inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem; mem += n_inmem_sysdep_strings * sizeof (struct sysdep_string_desc); inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem; mem += n_inmem_sysdep_strings * sizeof (struct sysdep_string_desc); inmem_hash_tab = (nls_uint32 *) mem; mem += domain->hash_size * sizeof (nls_uint32); /* Compute the system dependent strings. */ k = 0; for (i = 0; i < n_sysdep_strings; i++) { int valid = 1; for (j = 0; j < 2; j++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, j == 0 ? orig_sysdep_tab[i] : trans_sysdep_tab[i])); const struct segment_pair *p = sysdep_string->segments; if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END) for (p = sysdep_string->segments;; p++) { nls_uint32 sysdepref; sysdepref = W (domain->must_swap, p->sysdepref); if (sysdepref == SEGMENTS_END) break; if (sysdep_segment_values[sysdepref] == NULL) { /* This particular string pair is invalid. */ valid = 0; break; } } if (!valid) break; } if (valid) { for (j = 0; j < 2; j++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, j == 0 ? orig_sysdep_tab[i] : trans_sysdep_tab[i])); const char *static_segments = (char *) data + W (domain->must_swap, sysdep_string->offset); const struct segment_pair *p = sysdep_string->segments; /* Concatenate the segments, and fill inmem_orig_sysdep_tab[k] (for j == 0) and inmem_trans_sysdep_tab[k] (for j == 1). */ struct sysdep_string_desc *inmem_tab_entry = (j == 0 ? inmem_orig_sysdep_tab : inmem_trans_sysdep_tab) + k; if (W (domain->must_swap, p->sysdepref) == SEGMENTS_END) { /* Only one static segment. */ inmem_tab_entry->length = W (domain->must_swap, p->segsize); inmem_tab_entry->pointer = static_segments; } else { inmem_tab_entry->pointer = mem; for (p = sysdep_string->segments;; p++) { nls_uint32 segsize = W (domain->must_swap, p->segsize); nls_uint32 sysdepref = W (domain->must_swap, p->sysdepref); size_t n; if (segsize > 0) { memcpy (mem, static_segments, segsize); mem += segsize; static_segments += segsize; } if (sysdepref == SEGMENTS_END) break; n = strlen (sysdep_segment_values[sysdepref]); memcpy (mem, sysdep_segment_values[sysdepref], n); mem += n; } inmem_tab_entry->length = mem - inmem_tab_entry->pointer; } } k++; } } if (k != n_inmem_sysdep_strings) abort (); /* Compute the augmented hash table. */ for (i = 0; i < domain->hash_size; i++) inmem_hash_tab[i] = W (domain->must_swap_hash_tab, domain->hash_tab[i]); for (i = 0; i < n_inmem_sysdep_strings; i++) { const char *msgid = inmem_orig_sysdep_tab[i].pointer; nls_uint32 hash_val = hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); for (;;) { if (inmem_hash_tab[idx] == 0) { /* Hash table entry is empty. Use it. */ inmem_hash_tab[idx] = 1 + domain->nstrings + i; break; } if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; } } domain->n_sysdep_strings = n_inmem_sysdep_strings; domain->orig_sysdep_tab = inmem_orig_sysdep_tab; domain->trans_sysdep_tab = inmem_trans_sysdep_tab; domain->hash_tab = inmem_hash_tab; domain->must_swap_hash_tab = 0; } else { domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; } freea (sysdep_segment_values); } else { domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; } } break; } break; default: /* This is an invalid revision. */ invalid: /* This is an invalid .mo file. */ if (domain->malloced) free (domain->malloced); #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); free (domain); domain_file->data = NULL; return; } /* Now initialize the character set converter from the character set the file is encoded with (found in the header entry) to the domain's specified character set or the locale's character set. */ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding); /* Also look for a plural specification. */ EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals); } #ifdef _LIBC void internal_function _nl_unload_domain (struct loaded_domain *domain) { if (domain->plural != &__gettext_germanic_plural) __gettext_free_exp (domain->plural); _nl_free_domain_conv (domain); if (domain->malloced) free (domain->malloced); # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) munmap ((caddr_t) domain->data, domain->mmap_size); else # endif /* _POSIX_MAPPED_FILES */ free ((void *) domain->data); free (domain); } #endif lbreakout2-2.6.5/intl/dcngettext.c0000664000175000017500000000347012140767176014023 00000000000000/* Implementation of the dcngettext(3) function. Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCNGETTEXT __dcngettext # define DCIGETTEXT __dcigettext #else # define DCNGETTEXT libintl_dcngettext # define DCIGETTEXT libintl_dcigettext #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCNGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n, int category) { return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dcngettext, dcngettext); #endif lbreakout2-2.6.5/intl/localename.c0000664000175000017500000007413512140767176013760 00000000000000/* Determine the current selected locale. Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* Written by Ulrich Drepper , 1995. */ /* Win32 code written by Tor Lillqvist . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #if defined _WIN32 || defined __WIN32__ # undef WIN32 /* avoid warning on mingw32 */ # define WIN32 #endif #ifdef WIN32 # define WIN32_LEAN_AND_MEAN # include /* List of language codes, sorted by value: 0x01 LANG_ARABIC 0x02 LANG_BULGARIAN 0x03 LANG_CATALAN 0x04 LANG_CHINESE 0x05 LANG_CZECH 0x06 LANG_DANISH 0x07 LANG_GERMAN 0x08 LANG_GREEK 0x09 LANG_ENGLISH 0x0a LANG_SPANISH 0x0b LANG_FINNISH 0x0c LANG_FRENCH 0x0d LANG_HEBREW 0x0e LANG_HUNGARIAN 0x0f LANG_ICELANDIC 0x10 LANG_ITALIAN 0x11 LANG_JAPANESE 0x12 LANG_KOREAN 0x13 LANG_DUTCH 0x14 LANG_NORWEGIAN 0x15 LANG_POLISH 0x16 LANG_PORTUGUESE 0x17 LANG_RHAETO_ROMANCE 0x18 LANG_ROMANIAN 0x19 LANG_RUSSIAN 0x1a LANG_CROATIAN == LANG_SERBIAN 0x1b LANG_SLOVAK 0x1c LANG_ALBANIAN 0x1d LANG_SWEDISH 0x1e LANG_THAI 0x1f LANG_TURKISH 0x20 LANG_URDU 0x21 LANG_INDONESIAN 0x22 LANG_UKRAINIAN 0x23 LANG_BELARUSIAN 0x24 LANG_SLOVENIAN 0x25 LANG_ESTONIAN 0x26 LANG_LATVIAN 0x27 LANG_LITHUANIAN 0x28 LANG_TAJIK 0x29 LANG_FARSI 0x2a LANG_VIETNAMESE 0x2b LANG_ARMENIAN 0x2c LANG_AZERI 0x2d LANG_BASQUE 0x2e LANG_SORBIAN 0x2f LANG_MACEDONIAN 0x30 LANG_SUTU 0x31 LANG_TSONGA 0x32 LANG_TSWANA 0x33 LANG_VENDA 0x34 LANG_XHOSA 0x35 LANG_ZULU 0x36 LANG_AFRIKAANS 0x37 LANG_GEORGIAN 0x38 LANG_FAEROESE 0x39 LANG_HINDI 0x3a LANG_MALTESE 0x3b LANG_SAAMI 0x3c LANG_GAELIC 0x3d LANG_YIDDISH 0x3e LANG_MALAY 0x3f LANG_KAZAK 0x40 LANG_KYRGYZ 0x41 LANG_SWAHILI 0x42 LANG_TURKMEN 0x43 LANG_UZBEK 0x44 LANG_TATAR 0x45 LANG_BENGALI 0x46 LANG_PUNJABI 0x47 LANG_GUJARATI 0x48 LANG_ORIYA 0x49 LANG_TAMIL 0x4a LANG_TELUGU 0x4b LANG_KANNADA 0x4c LANG_MALAYALAM 0x4d LANG_ASSAMESE 0x4e LANG_MARATHI 0x4f LANG_SANSKRIT 0x50 LANG_MONGOLIAN 0x51 LANG_TIBETAN 0x52 LANG_WELSH 0x53 LANG_CAMBODIAN 0x54 LANG_LAO 0x55 LANG_BURMESE 0x56 LANG_GALICIAN 0x57 LANG_KONKANI 0x58 LANG_MANIPURI 0x59 LANG_SINDHI 0x5a LANG_SYRIAC 0x5b LANG_SINHALESE 0x5c LANG_CHEROKEE 0x5d LANG_INUKTITUT 0x5e LANG_AMHARIC 0x5f LANG_TAMAZIGHT 0x60 LANG_KASHMIRI 0x61 LANG_NEPALI 0x62 LANG_FRISIAN 0x63 LANG_PASHTO 0x64 LANG_TAGALOG 0x65 LANG_DIVEHI 0x66 LANG_EDO 0x67 LANG_FULFULDE 0x68 LANG_HAUSA 0x69 LANG_IBIBIO 0x6a LANG_YORUBA 0x70 LANG_IGBO 0x71 LANG_KANURI 0x72 LANG_OROMO 0x73 LANG_TIGRINYA 0x74 LANG_GUARANI 0x75 LANG_HAWAIIAN 0x76 LANG_LATIN 0x77 LANG_SOMALI 0x78 LANG_YI 0x79 LANG_PAPIAMENTU */ /* Mingw headers don't have latest language and sublanguage codes. */ # ifndef LANG_AFRIKAANS # define LANG_AFRIKAANS 0x36 # endif # ifndef LANG_ALBANIAN # define LANG_ALBANIAN 0x1c # endif # ifndef LANG_AMHARIC # define LANG_AMHARIC 0x5e # endif # ifndef LANG_ARABIC # define LANG_ARABIC 0x01 # endif # ifndef LANG_ARMENIAN # define LANG_ARMENIAN 0x2b # endif # ifndef LANG_ASSAMESE # define LANG_ASSAMESE 0x4d # endif # ifndef LANG_AZERI # define LANG_AZERI 0x2c # endif # ifndef LANG_BASQUE # define LANG_BASQUE 0x2d # endif # ifndef LANG_BELARUSIAN # define LANG_BELARUSIAN 0x23 # endif # ifndef LANG_BENGALI # define LANG_BENGALI 0x45 # endif # ifndef LANG_BURMESE # define LANG_BURMESE 0x55 # endif # ifndef LANG_CAMBODIAN # define LANG_CAMBODIAN 0x53 # endif # ifndef LANG_CATALAN # define LANG_CATALAN 0x03 # endif # ifndef LANG_CHEROKEE # define LANG_CHEROKEE 0x5c # endif # ifndef LANG_DIVEHI # define LANG_DIVEHI 0x65 # endif # ifndef LANG_EDO # define LANG_EDO 0x66 # endif # ifndef LANG_ESTONIAN # define LANG_ESTONIAN 0x25 # endif # ifndef LANG_FAEROESE # define LANG_FAEROESE 0x38 # endif # ifndef LANG_FARSI # define LANG_FARSI 0x29 # endif # ifndef LANG_FRISIAN # define LANG_FRISIAN 0x62 # endif # ifndef LANG_FULFULDE # define LANG_FULFULDE 0x67 # endif # ifndef LANG_GAELIC # define LANG_GAELIC 0x3c # endif # ifndef LANG_GALICIAN # define LANG_GALICIAN 0x56 # endif # ifndef LANG_GEORGIAN # define LANG_GEORGIAN 0x37 # endif # ifndef LANG_GUARANI # define LANG_GUARANI 0x74 # endif # ifndef LANG_GUJARATI # define LANG_GUJARATI 0x47 # endif # ifndef LANG_HAUSA # define LANG_HAUSA 0x68 # endif # ifndef LANG_HAWAIIAN # define LANG_HAWAIIAN 0x75 # endif # ifndef LANG_HEBREW # define LANG_HEBREW 0x0d # endif # ifndef LANG_HINDI # define LANG_HINDI 0x39 # endif # ifndef LANG_IBIBIO # define LANG_IBIBIO 0x69 # endif # ifndef LANG_IGBO # define LANG_IGBO 0x70 # endif # ifndef LANG_INDONESIAN # define LANG_INDONESIAN 0x21 # endif # ifndef LANG_INUKTITUT # define LANG_INUKTITUT 0x5d # endif # ifndef LANG_KANNADA # define LANG_KANNADA 0x4b # endif # ifndef LANG_KANURI # define LANG_KANURI 0x71 # endif # ifndef LANG_KASHMIRI # define LANG_KASHMIRI 0x60 # endif # ifndef LANG_KAZAK # define LANG_KAZAK 0x3f # endif # ifndef LANG_KONKANI # define LANG_KONKANI 0x57 # endif # ifndef LANG_KYRGYZ # define LANG_KYRGYZ 0x40 # endif # ifndef LANG_LAO # define LANG_LAO 0x54 # endif # ifndef LANG_LATIN # define LANG_LATIN 0x76 # endif # ifndef LANG_LATVIAN # define LANG_LATVIAN 0x26 # endif # ifndef LANG_LITHUANIAN # define LANG_LITHUANIAN 0x27 # endif # ifndef LANG_MACEDONIAN # define LANG_MACEDONIAN 0x2f # endif # ifndef LANG_MALAY # define LANG_MALAY 0x3e # endif # ifndef LANG_MALAYALAM # define LANG_MALAYALAM 0x4c # endif # ifndef LANG_MALTESE # define LANG_MALTESE 0x3a # endif # ifndef LANG_MANIPURI # define LANG_MANIPURI 0x58 # endif # ifndef LANG_MARATHI # define LANG_MARATHI 0x4e # endif # ifndef LANG_MONGOLIAN # define LANG_MONGOLIAN 0x50 # endif # ifndef LANG_NEPALI # define LANG_NEPALI 0x61 # endif # ifndef LANG_ORIYA # define LANG_ORIYA 0x48 # endif # ifndef LANG_OROMO # define LANG_OROMO 0x72 # endif # ifndef LANG_PAPIAMENTU # define LANG_PAPIAMENTU 0x79 # endif # ifndef LANG_PASHTO # define LANG_PASHTO 0x63 # endif # ifndef LANG_PUNJABI # define LANG_PUNJABI 0x46 # endif # ifndef LANG_RHAETO_ROMANCE # define LANG_RHAETO_ROMANCE 0x17 # endif # ifndef LANG_SAAMI # define LANG_SAAMI 0x3b # endif # ifndef LANG_SANSKRIT # define LANG_SANSKRIT 0x4f # endif # ifndef LANG_SERBIAN # define LANG_SERBIAN 0x1a # endif # ifndef LANG_SINDHI # define LANG_SINDHI 0x59 # endif # ifndef LANG_SINHALESE # define LANG_SINHALESE 0x5b # endif # ifndef LANG_SLOVAK # define LANG_SLOVAK 0x1b # endif # ifndef LANG_SOMALI # define LANG_SOMALI 0x77 # endif # ifndef LANG_SORBIAN # define LANG_SORBIAN 0x2e # endif # ifndef LANG_SUTU # define LANG_SUTU 0x30 # endif # ifndef LANG_SWAHILI # define LANG_SWAHILI 0x41 # endif # ifndef LANG_SYRIAC # define LANG_SYRIAC 0x5a # endif # ifndef LANG_TAGALOG # define LANG_TAGALOG 0x64 # endif # ifndef LANG_TAJIK # define LANG_TAJIK 0x28 # endif # ifndef LANG_TAMAZIGHT # define LANG_TAMAZIGHT 0x5f # endif # ifndef LANG_TAMIL # define LANG_TAMIL 0x49 # endif # ifndef LANG_TATAR # define LANG_TATAR 0x44 # endif # ifndef LANG_TELUGU # define LANG_TELUGU 0x4a # endif # ifndef LANG_THAI # define LANG_THAI 0x1e # endif # ifndef LANG_TIBETAN # define LANG_TIBETAN 0x51 # endif # ifndef LANG_TIGRINYA # define LANG_TIGRINYA 0x73 # endif # ifndef LANG_TSONGA # define LANG_TSONGA 0x31 # endif # ifndef LANG_TSWANA # define LANG_TSWANA 0x32 # endif # ifndef LANG_TURKMEN # define LANG_TURKMEN 0x42 # endif # ifndef LANG_UKRAINIAN # define LANG_UKRAINIAN 0x22 # endif # ifndef LANG_URDU # define LANG_URDU 0x20 # endif # ifndef LANG_UZBEK # define LANG_UZBEK 0x43 # endif # ifndef LANG_VENDA # define LANG_VENDA 0x33 # endif # ifndef LANG_VIETNAMESE # define LANG_VIETNAMESE 0x2a # endif # ifndef LANG_WELSH # define LANG_WELSH 0x52 # endif # ifndef LANG_XHOSA # define LANG_XHOSA 0x34 # endif # ifndef LANG_YI # define LANG_YI 0x78 # endif # ifndef LANG_YIDDISH # define LANG_YIDDISH 0x3d # endif # ifndef LANG_YORUBA # define LANG_YORUBA 0x6a # endif # ifndef LANG_ZULU # define LANG_ZULU 0x35 # endif # ifndef SUBLANG_ARABIC_SAUDI_ARABIA # define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 # endif # ifndef SUBLANG_ARABIC_IRAQ # define SUBLANG_ARABIC_IRAQ 0x02 # endif # ifndef SUBLANG_ARABIC_EGYPT # define SUBLANG_ARABIC_EGYPT 0x03 # endif # ifndef SUBLANG_ARABIC_LIBYA # define SUBLANG_ARABIC_LIBYA 0x04 # endif # ifndef SUBLANG_ARABIC_ALGERIA # define SUBLANG_ARABIC_ALGERIA 0x05 # endif # ifndef SUBLANG_ARABIC_MOROCCO # define SUBLANG_ARABIC_MOROCCO 0x06 # endif # ifndef SUBLANG_ARABIC_TUNISIA # define SUBLANG_ARABIC_TUNISIA 0x07 # endif # ifndef SUBLANG_ARABIC_OMAN # define SUBLANG_ARABIC_OMAN 0x08 # endif # ifndef SUBLANG_ARABIC_YEMEN # define SUBLANG_ARABIC_YEMEN 0x09 # endif # ifndef SUBLANG_ARABIC_SYRIA # define SUBLANG_ARABIC_SYRIA 0x0a # endif # ifndef SUBLANG_ARABIC_JORDAN # define SUBLANG_ARABIC_JORDAN 0x0b # endif # ifndef SUBLANG_ARABIC_LEBANON # define SUBLANG_ARABIC_LEBANON 0x0c # endif # ifndef SUBLANG_ARABIC_KUWAIT # define SUBLANG_ARABIC_KUWAIT 0x0d # endif # ifndef SUBLANG_ARABIC_UAE # define SUBLANG_ARABIC_UAE 0x0e # endif # ifndef SUBLANG_ARABIC_BAHRAIN # define SUBLANG_ARABIC_BAHRAIN 0x0f # endif # ifndef SUBLANG_ARABIC_QATAR # define SUBLANG_ARABIC_QATAR 0x10 # endif # ifndef SUBLANG_AZERI_LATIN # define SUBLANG_AZERI_LATIN 0x01 # endif # ifndef SUBLANG_AZERI_CYRILLIC # define SUBLANG_AZERI_CYRILLIC 0x02 # endif # ifndef SUBLANG_BENGALI_INDIA # define SUBLANG_BENGALI_INDIA 0x00 # endif # ifndef SUBLANG_BENGALI_BANGLADESH # define SUBLANG_BENGALI_BANGLADESH 0x01 # endif # ifndef SUBLANG_CHINESE_MACAU # define SUBLANG_CHINESE_MACAU 0x05 # endif # ifndef SUBLANG_ENGLISH_SOUTH_AFRICA # define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 # endif # ifndef SUBLANG_ENGLISH_JAMAICA # define SUBLANG_ENGLISH_JAMAICA 0x08 # endif # ifndef SUBLANG_ENGLISH_CARIBBEAN # define SUBLANG_ENGLISH_CARIBBEAN 0x09 # endif # ifndef SUBLANG_ENGLISH_BELIZE # define SUBLANG_ENGLISH_BELIZE 0x0a # endif # ifndef SUBLANG_ENGLISH_TRINIDAD # define SUBLANG_ENGLISH_TRINIDAD 0x0b # endif # ifndef SUBLANG_ENGLISH_ZIMBABWE # define SUBLANG_ENGLISH_ZIMBABWE 0x0c # endif # ifndef SUBLANG_ENGLISH_PHILIPPINES # define SUBLANG_ENGLISH_PHILIPPINES 0x0d # endif # ifndef SUBLANG_ENGLISH_INDONESIA # define SUBLANG_ENGLISH_INDONESIA 0x0e # endif # ifndef SUBLANG_ENGLISH_HONGKONG # define SUBLANG_ENGLISH_HONGKONG 0x0f # endif # ifndef SUBLANG_ENGLISH_INDIA # define SUBLANG_ENGLISH_INDIA 0x10 # endif # ifndef SUBLANG_ENGLISH_MALAYSIA # define SUBLANG_ENGLISH_MALAYSIA 0x11 # endif # ifndef SUBLANG_ENGLISH_SINGAPORE # define SUBLANG_ENGLISH_SINGAPORE 0x12 # endif # ifndef SUBLANG_FRENCH_LUXEMBOURG # define SUBLANG_FRENCH_LUXEMBOURG 0x05 # endif # ifndef SUBLANG_FRENCH_MONACO # define SUBLANG_FRENCH_MONACO 0x06 # endif # ifndef SUBLANG_FRENCH_WESTINDIES # define SUBLANG_FRENCH_WESTINDIES 0x07 # endif # ifndef SUBLANG_FRENCH_REUNION # define SUBLANG_FRENCH_REUNION 0x08 # endif # ifndef SUBLANG_FRENCH_CONGO # define SUBLANG_FRENCH_CONGO 0x09 # endif # ifndef SUBLANG_FRENCH_SENEGAL # define SUBLANG_FRENCH_SENEGAL 0x0a # endif # ifndef SUBLANG_FRENCH_CAMEROON # define SUBLANG_FRENCH_CAMEROON 0x0b # endif # ifndef SUBLANG_FRENCH_COTEDIVOIRE # define SUBLANG_FRENCH_COTEDIVOIRE 0x0c # endif # ifndef SUBLANG_FRENCH_MALI # define SUBLANG_FRENCH_MALI 0x0d # endif # ifndef SUBLANG_FRENCH_MOROCCO # define SUBLANG_FRENCH_MOROCCO 0x0e # endif # ifndef SUBLANG_FRENCH_HAITI # define SUBLANG_FRENCH_HAITI 0x0f # endif # ifndef SUBLANG_GERMAN_LUXEMBOURG # define SUBLANG_GERMAN_LUXEMBOURG 0x04 # endif # ifndef SUBLANG_GERMAN_LIECHTENSTEIN # define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 # endif # ifndef SUBLANG_KASHMIRI_INDIA # define SUBLANG_KASHMIRI_INDIA 0x02 # endif # ifndef SUBLANG_MALAY_MALAYSIA # define SUBLANG_MALAY_MALAYSIA 0x01 # endif # ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM # define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 # endif # ifndef SUBLANG_NEPALI_INDIA # define SUBLANG_NEPALI_INDIA 0x02 # endif # ifndef SUBLANG_PUNJABI_INDIA # define SUBLANG_PUNJABI_INDIA 0x00 # endif # ifndef SUBLANG_PUNJABI_PAKISTAN # define SUBLANG_PUNJABI_PAKISTAN 0x01 # endif # ifndef SUBLANG_ROMANIAN_ROMANIA # define SUBLANG_ROMANIAN_ROMANIA 0x00 # endif # ifndef SUBLANG_ROMANIAN_MOLDOVA # define SUBLANG_ROMANIAN_MOLDOVA 0x01 # endif # ifndef SUBLANG_SERBIAN_LATIN # define SUBLANG_SERBIAN_LATIN 0x02 # endif # ifndef SUBLANG_SERBIAN_CYRILLIC # define SUBLANG_SERBIAN_CYRILLIC 0x03 # endif # ifndef SUBLANG_SINDHI_INDIA # define SUBLANG_SINDHI_INDIA 0x00 # endif # ifndef SUBLANG_SINDHI_PAKISTAN # define SUBLANG_SINDHI_PAKISTAN 0x01 # endif # ifndef SUBLANG_SPANISH_GUATEMALA # define SUBLANG_SPANISH_GUATEMALA 0x04 # endif # ifndef SUBLANG_SPANISH_COSTA_RICA # define SUBLANG_SPANISH_COSTA_RICA 0x05 # endif # ifndef SUBLANG_SPANISH_PANAMA # define SUBLANG_SPANISH_PANAMA 0x06 # endif # ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC # define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 # endif # ifndef SUBLANG_SPANISH_VENEZUELA # define SUBLANG_SPANISH_VENEZUELA 0x08 # endif # ifndef SUBLANG_SPANISH_COLOMBIA # define SUBLANG_SPANISH_COLOMBIA 0x09 # endif # ifndef SUBLANG_SPANISH_PERU # define SUBLANG_SPANISH_PERU 0x0a # endif # ifndef SUBLANG_SPANISH_ARGENTINA # define SUBLANG_SPANISH_ARGENTINA 0x0b # endif # ifndef SUBLANG_SPANISH_ECUADOR # define SUBLANG_SPANISH_ECUADOR 0x0c # endif # ifndef SUBLANG_SPANISH_CHILE # define SUBLANG_SPANISH_CHILE 0x0d # endif # ifndef SUBLANG_SPANISH_URUGUAY # define SUBLANG_SPANISH_URUGUAY 0x0e # endif # ifndef SUBLANG_SPANISH_PARAGUAY # define SUBLANG_SPANISH_PARAGUAY 0x0f # endif # ifndef SUBLANG_SPANISH_BOLIVIA # define SUBLANG_SPANISH_BOLIVIA 0x10 # endif # ifndef SUBLANG_SPANISH_EL_SALVADOR # define SUBLANG_SPANISH_EL_SALVADOR 0x11 # endif # ifndef SUBLANG_SPANISH_HONDURAS # define SUBLANG_SPANISH_HONDURAS 0x12 # endif # ifndef SUBLANG_SPANISH_NICARAGUA # define SUBLANG_SPANISH_NICARAGUA 0x13 # endif # ifndef SUBLANG_SPANISH_PUERTO_RICO # define SUBLANG_SPANISH_PUERTO_RICO 0x14 # endif # ifndef SUBLANG_SWEDISH_FINLAND # define SUBLANG_SWEDISH_FINLAND 0x02 # endif # ifndef SUBLANG_TAMAZIGHT_ARABIC # define SUBLANG_TAMAZIGHT_ARABIC 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_LATIN # define SUBLANG_TAMAZIGHT_LATIN 0x02 # endif # ifndef SUBLANG_TIGRINYA_ETHIOPIA # define SUBLANG_TIGRINYA_ETHIOPIA 0x00 # endif # ifndef SUBLANG_TIGRINYA_ERITREA # define SUBLANG_TIGRINYA_ERITREA 0x01 # endif # ifndef SUBLANG_URDU_PAKISTAN # define SUBLANG_URDU_PAKISTAN 0x01 # endif # ifndef SUBLANG_URDU_INDIA # define SUBLANG_URDU_INDIA 0x02 # endif # ifndef SUBLANG_UZBEK_LATIN # define SUBLANG_UZBEK_LATIN 0x01 # endif # ifndef SUBLANG_UZBEK_CYRILLIC # define SUBLANG_UZBEK_CYRILLIC 0x02 # endif #endif /* XPG3 defines the result of 'setlocale (category, NULL)' as: "Directs 'setlocale()' to query 'category' and return the current setting of 'local'." However it does not specify the exact format. Neither do SUSV2 and ISO C 99. So we can use this feature only on selected systems (e.g. those using GNU C Library). */ #if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2) # define HAVE_LOCALE_NULL #endif /* Determine the current locale's name, and canonicalize it into XPG syntax language[_territory[.codeset]][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ const char * _nl_locale_name (int category, const char *categoryname) { const char *retval; #ifndef WIN32 /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. On some systems this can be done by the 'setlocale' function itself. */ # if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL retval = setlocale (category, NULL); # else /* Setting of LC_ALL overwrites all other. */ retval = getenv ("LC_ALL"); if (retval == NULL || retval[0] == '\0') { /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval == NULL || retval[0] == '\0') { /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval == NULL || retval[0] == '\0') /* We use C as the default domain. POSIX says this is implementation defined. */ retval = "C"; } } # endif return retval; #else /* WIN32 */ /* Return an XPG style locale name language[_territory][@modifier]. Don't even bother determining the codeset; it's not useful in this context, because message catalogs are not specific to a single codeset. */ LCID lcid; LANGID langid; int primary, sub; /* Let the user override the system settings through environment variables, as on POSIX systems. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') return retval; /* Use native Win32 API locale ID. */ lcid = GetThreadLocale (); /* Strip off the sorting rules, keep only the language part. */ langid = LANGIDFROMLCID (lcid); /* Split into language and territory part. */ primary = PRIMARYLANGID (langid); sub = SUBLANGID (langid); /* Dispatch on language. See also http://www.unicode.org/unicode/onlinedat/languages.html . For details about languages, see http://www.ethnologue.com/ . */ switch (primary) { case LANG_AFRIKAANS: return "af_ZA"; case LANG_ALBANIAN: return "sq_AL"; case LANG_AMHARIC: return "am_ET"; case LANG_ARABIC: switch (sub) { case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; case SUBLANG_ARABIC_EGYPT: return "ar_EG"; case SUBLANG_ARABIC_LIBYA: return "ar_LY"; case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; case SUBLANG_ARABIC_OMAN: return "ar_OM"; case SUBLANG_ARABIC_YEMEN: return "ar_YE"; case SUBLANG_ARABIC_SYRIA: return "ar_SY"; case SUBLANG_ARABIC_JORDAN: return "ar_JO"; case SUBLANG_ARABIC_LEBANON: return "ar_LB"; case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; case SUBLANG_ARABIC_UAE: return "ar_AE"; case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; case SUBLANG_ARABIC_QATAR: return "ar_QA"; } return "ar"; case LANG_ARMENIAN: return "hy_AM"; case LANG_ASSAMESE: return "as_IN"; case LANG_AZERI: switch (sub) { /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; } return "az"; case LANG_BASQUE: return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ case LANG_BELARUSIAN: return "be_BY"; case LANG_BENGALI: switch (sub) { case SUBLANG_BENGALI_INDIA: return "bn_IN"; case SUBLANG_BENGALI_BANGLADESH: return "bn_BD"; } return "bn"; case LANG_BULGARIAN: return "bg_BG"; case LANG_BURMESE: return "my_MM"; case LANG_CAMBODIAN: return "km_KH"; case LANG_CATALAN: return "ca_ES"; case LANG_CHEROKEE: return "chr_US"; case LANG_CHINESE: switch (sub) { case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW"; case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN"; case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; case SUBLANG_CHINESE_MACAU: return "zh_MO"; } return "zh"; case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN * What used to be called Serbo-Croatian * should really now be two separate * languages because of political reasons. * (Says tml, who knows nothing about Serbian * or Croatian.) * (I can feel those flames coming already.) */ switch (sub) { case SUBLANG_DEFAULT: return "hr_HR"; case SUBLANG_SERBIAN_LATIN: return "sr_CS"; case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic"; } return "hr"; case LANG_CZECH: return "cs_CZ"; case LANG_DANISH: return "da_DK"; case LANG_DIVEHI: return "dv_MV"; case LANG_DUTCH: switch (sub) { case SUBLANG_DUTCH: return "nl_NL"; case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; } return "nl"; case LANG_EDO: return "bin_NG"; case LANG_ENGLISH: switch (sub) { /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought * English was the language spoken in England. * Oh well. */ case SUBLANG_ENGLISH_US: return "en_US"; case SUBLANG_ENGLISH_UK: return "en_GB"; case SUBLANG_ENGLISH_AUS: return "en_AU"; case SUBLANG_ENGLISH_CAN: return "en_CA"; case SUBLANG_ENGLISH_NZ: return "en_NZ"; case SUBLANG_ENGLISH_EIRE: return "en_IE"; case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; case SUBLANG_ENGLISH_INDONESIA: return "en_ID"; case SUBLANG_ENGLISH_HONGKONG: return "en_HK"; case SUBLANG_ENGLISH_INDIA: return "en_IN"; case SUBLANG_ENGLISH_MALAYSIA: return "en_MY"; case SUBLANG_ENGLISH_SINGAPORE: return "en_SG"; } return "en"; case LANG_ESTONIAN: return "et_EE"; case LANG_FAEROESE: return "fo_FO"; case LANG_FARSI: return "fa_IR"; case LANG_FINNISH: return "fi_FI"; case LANG_FRENCH: switch (sub) { case SUBLANG_FRENCH: return "fr_FR"; case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; case SUBLANG_FRENCH_SWISS: return "fr_CH"; case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; case SUBLANG_FRENCH_MONACO: return "fr_MC"; case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */ case SUBLANG_FRENCH_REUNION: return "fr_RE"; case SUBLANG_FRENCH_CONGO: return "fr_CG"; case SUBLANG_FRENCH_SENEGAL: return "fr_SN"; case SUBLANG_FRENCH_CAMEROON: return "fr_CM"; case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI"; case SUBLANG_FRENCH_MALI: return "fr_ML"; case SUBLANG_FRENCH_MOROCCO: return "fr_MA"; case SUBLANG_FRENCH_HAITI: return "fr_HT"; } return "fr"; case LANG_FRISIAN: return "fy_NL"; case LANG_FULFULDE: /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */ return "ff_NG"; case LANG_GAELIC: switch (sub) { case 0x01: /* SCOTTISH */ return "gd_GB"; case 0x02: /* IRISH */ return "ga_IE"; } return "C"; case LANG_GALICIAN: return "gl_ES"; case LANG_GEORGIAN: return "ka_GE"; case LANG_GERMAN: switch (sub) { case SUBLANG_GERMAN: return "de_DE"; case SUBLANG_GERMAN_SWISS: return "de_CH"; case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; } return "de"; case LANG_GREEK: return "el_GR"; case LANG_GUARANI: return "gn_PY"; case LANG_GUJARATI: return "gu_IN"; case LANG_HAUSA: return "ha_NG"; case LANG_HAWAIIAN: /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) or Hawaii Creole English ("cpe_US", 600000 speakers)? */ return "cpe_US"; case LANG_HEBREW: return "he_IL"; case LANG_HINDI: return "hi_IN"; case LANG_HUNGARIAN: return "hu_HU"; case LANG_IBIBIO: return "nic_NG"; case LANG_ICELANDIC: return "is_IS"; case LANG_IGBO: return "ig_NG"; case LANG_INDONESIAN: return "id_ID"; case LANG_INUKTITUT: return "iu_CA"; case LANG_ITALIAN: switch (sub) { case SUBLANG_ITALIAN: return "it_IT"; case SUBLANG_ITALIAN_SWISS: return "it_CH"; } return "it"; case LANG_JAPANESE: return "ja_JP"; case LANG_KANNADA: return "kn_IN"; case LANG_KANURI: return "kr_NG"; case LANG_KASHMIRI: switch (sub) { case SUBLANG_DEFAULT: return "ks_PK"; case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; } return "ks"; case LANG_KAZAK: return "kk_KZ"; case LANG_KONKANI: /* FIXME: Adjust this when such locales appear on Unix. */ return "kok_IN"; case LANG_KOREAN: return "ko_KR"; case LANG_KYRGYZ: return "ky_KG"; case LANG_LAO: return "lo_LA"; case LANG_LATIN: return "la_VA"; case LANG_LATVIAN: return "lv_LV"; case LANG_LITHUANIAN: return "lt_LT"; case LANG_MACEDONIAN: return "mk_MK"; case LANG_MALAY: switch (sub) { case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; } return "ms"; case LANG_MALAYALAM: return "ml_IN"; case LANG_MALTESE: return "mt_MT"; case LANG_MANIPURI: /* FIXME: Adjust this when such locales appear on Unix. */ return "mni_IN"; case LANG_MARATHI: return "mr_IN"; case LANG_MONGOLIAN: return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ case LANG_NEPALI: switch (sub) { case SUBLANG_DEFAULT: return "ne_NP"; case SUBLANG_NEPALI_INDIA: return "ne_IN"; } return "ne"; case LANG_NORWEGIAN: switch (sub) { case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO"; case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; } return "no"; case LANG_ORIYA: return "or_IN"; case LANG_OROMO: return "om_ET"; case LANG_PAPIAMENTU: return "pap_AN"; case LANG_PASHTO: return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ case LANG_POLISH: return "pl_PL"; case LANG_PORTUGUESE: switch (sub) { case SUBLANG_PORTUGUESE: return "pt_PT"; /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; } return "pt"; case LANG_PUNJABI: switch (sub) { case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */ } return "pa"; case LANG_RHAETO_ROMANCE: return "rm_CH"; case LANG_ROMANIAN: switch (sub) { case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO"; case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD"; } return "ro"; case LANG_RUSSIAN: return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */ case LANG_SAAMI: /* actually Northern Sami */ return "se_NO"; case LANG_SANSKRIT: return "sa_IN"; case LANG_SINDHI: switch (sub) { case SUBLANG_SINDHI_INDIA: return "sd_IN"; case SUBLANG_SINDHI_PAKISTAN: return "sd_PK"; } return "sd"; case LANG_SINHALESE: return "si_LK"; case LANG_SLOVAK: return "sk_SK"; case LANG_SLOVENIAN: return "sl_SI"; case LANG_SOMALI: return "so_SO"; case LANG_SORBIAN: /* FIXME: Adjust this when such locales appear on Unix. */ return "wen_DE"; case LANG_SPANISH: switch (sub) { case SUBLANG_SPANISH: return "es_ES"; case SUBLANG_SPANISH_MEXICAN: return "es_MX"; case SUBLANG_SPANISH_MODERN: return "es_ES@modern"; /* not seen on Unix */ case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; case SUBLANG_SPANISH_PANAMA: return "es_PA"; case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; case SUBLANG_SPANISH_PERU: return "es_PE"; case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; case SUBLANG_SPANISH_ECUADOR: return "es_EC"; case SUBLANG_SPANISH_CHILE: return "es_CL"; case SUBLANG_SPANISH_URUGUAY: return "es_UY"; case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; case SUBLANG_SPANISH_HONDURAS: return "es_HN"; case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; } return "es"; case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */ case LANG_SWAHILI: return "sw_KE"; case LANG_SWEDISH: switch (sub) { case SUBLANG_DEFAULT: return "sv_SE"; case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; } return "sv"; case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */ case LANG_TAGALOG: return "tl_PH"; case LANG_TAJIK: return "tg_TJ"; case LANG_TAMAZIGHT: switch (sub) { /* FIXME: Adjust this when Tamazight locales appear on Unix. */ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic"; case SUBLANG_TAMAZIGHT_LATIN: return "ber_MA@latin"; } return "ber_MA"; case LANG_TAMIL: return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ case LANG_TATAR: return "tt_RU"; case LANG_TELUGU: return "te_IN"; case LANG_THAI: return "th_TH"; case LANG_TIBETAN: return "bo_CN"; case LANG_TIGRINYA: switch (sub) { case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET"; case SUBLANG_TIGRINYA_ERITREA: return "ti_ER"; } return "ti"; case LANG_TSONGA: return "ts_ZA"; case LANG_TSWANA: return "tn_BW"; case LANG_TURKISH: return "tr_TR"; case LANG_TURKMEN: return "tk_TM"; case LANG_UKRAINIAN: return "uk_UA"; case LANG_URDU: switch (sub) { case SUBLANG_URDU_PAKISTAN: return "ur_PK"; case SUBLANG_URDU_INDIA: return "ur_IN"; } return "ur"; case LANG_UZBEK: switch (sub) { case SUBLANG_UZBEK_LATIN: return "uz_UZ"; case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; } return "uz"; case LANG_VENDA: return "ve_ZA"; case LANG_VIETNAMESE: return "vi_VN"; case LANG_WELSH: return "cy_GB"; case LANG_XHOSA: return "xh_ZA"; case LANG_YI: return "sit_CN"; case LANG_YIDDISH: return "yi_IL"; case LANG_YORUBA: return "yo_NG"; case LANG_ZULU: return "zu_ZA"; default: return "C"; } #endif } lbreakout2-2.6.5/intl/printf.c0000664000175000017500000001717712140767176013165 00000000000000/* Formatted output to strings, using POSIX/XSI format strings with positions. Copyright (C) 2003 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #if !HAVE_POSIX_PRINTF #include #include /* When building a DLL, we must export some functions. Note that because the functions are only defined for binary backward compatibility, we don't need to use __declspec(dllimport) in any case. */ #if defined _MSC_VER && BUILDING_DLL # define DLL_EXPORTED __declspec(dllexport) #else # define DLL_EXPORTED #endif #define STATIC static /* Define auxiliary functions declared in "printf-args.h". */ #include "printf-args.c" /* Define auxiliary functions declared in "printf-parse.h". */ #include "printf-parse.c" /* Define functions declared in "vasnprintf.h". */ #define vasnprintf libintl_vasnprintf #include "vasnprintf.c" #if 0 /* not needed */ #define asnprintf libintl_asnprintf #include "asnprintf.c" #endif DLL_EXPORTED int libintl_vfprintf (FILE *stream, const char *format, va_list args) { if (strchr (format, '$') == NULL) return vfprintf (stream, format, args); else { size_t length; char *result = libintl_vasnprintf (NULL, &length, format, args); int retval = -1; if (result != NULL) { if (fwrite (result, 1, length, stream) == length) retval = length; free (result); } return retval; } } DLL_EXPORTED int libintl_fprintf (FILE *stream, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vfprintf (stream, format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vprintf (const char *format, va_list args) { return libintl_vfprintf (stdout, format, args); } DLL_EXPORTED int libintl_printf (const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vprintf (format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vsprintf (char *resultbuf, const char *format, va_list args) { if (strchr (format, '$') == NULL) return vsprintf (resultbuf, format, args); else { size_t length = (size_t) ~0 / (4 * sizeof (char)); char *result = libintl_vasnprintf (resultbuf, &length, format, args); if (result != resultbuf) { free (result); return -1; } else return length; } } DLL_EXPORTED int libintl_sprintf (char *resultbuf, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vsprintf (resultbuf, format, args); va_end (args); return retval; } #if HAVE_SNPRINTF # if HAVE_DECL__SNPRINTF /* Windows. */ # define system_vsnprintf _vsnprintf # else /* Unix. */ # define system_vsnprintf vsnprintf # endif DLL_EXPORTED int libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args) { if (strchr (format, '$') == NULL) return system_vsnprintf (resultbuf, length, format, args); else { size_t maxlength = length; char *result = libintl_vasnprintf (resultbuf, &length, format, args); if (result != resultbuf) { if (maxlength > 0) { if (length < maxlength) abort (); memcpy (resultbuf, result, maxlength - 1); resultbuf[maxlength - 1] = '\0'; } free (result); return -1; } else return length; } } DLL_EXPORTED int libintl_snprintf (char *resultbuf, size_t length, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vsnprintf (resultbuf, length, format, args); va_end (args); return retval; } #endif #if HAVE_ASPRINTF DLL_EXPORTED int libintl_vasprintf (char **resultp, const char *format, va_list args) { size_t length; char *result = libintl_vasnprintf (NULL, &length, format, args); if (result == NULL) return -1; *resultp = result; return length; } DLL_EXPORTED int libintl_asprintf (char **resultp, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vasprintf (resultp, format, args); va_end (args); return retval; } #endif #if HAVE_FWPRINTF #include #define WIDE_CHAR_VERSION 1 /* Define auxiliary functions declared in "wprintf-parse.h". */ #include "printf-parse.c" /* Define functions declared in "vasnprintf.h". */ #define vasnwprintf libintl_vasnwprintf #include "vasnprintf.c" #if 0 /* not needed */ #define asnwprintf libintl_asnwprintf #include "asnprintf.c" #endif # if HAVE_DECL__SNWPRINTF /* Windows. */ # define system_vswprintf _vsnwprintf # else /* Unix. */ # define system_vswprintf vswprintf # endif DLL_EXPORTED int libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args) { if (wcschr (format, '$') == NULL) return vfwprintf (stream, format, args); else { size_t length; wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args); int retval = -1; if (result != NULL) { size_t i; for (i = 0; i < length; i++) if (fputwc (result[i], stream) == WEOF) break; if (i == length) retval = length; free (result); } return retval; } } DLL_EXPORTED int libintl_fwprintf (FILE *stream, const wchar_t *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vfwprintf (stream, format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vwprintf (const wchar_t *format, va_list args) { return libintl_vfwprintf (stdout, format, args); } DLL_EXPORTED int libintl_wprintf (const wchar_t *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vwprintf (format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args) { if (wcschr (format, '$') == NULL) return system_vswprintf (resultbuf, length, format, args); else { size_t maxlength = length; wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args); if (result != resultbuf) { if (maxlength > 0) { if (length < maxlength) abort (); memcpy (resultbuf, result, (maxlength - 1) * sizeof (wchar_t)); resultbuf[maxlength - 1] = 0; } free (result); return -1; } else return length; } } DLL_EXPORTED int libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vswprintf (resultbuf, length, format, args); va_end (args); return retval; } #endif #endif lbreakout2-2.6.5/intl/plural.c0000664000175000017500000015146112175527100013142 00000000000000/* A Bison parser, made by GNU Bison 2.5. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.5" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse __gettextparse #define yylex __gettextlex #define yyerror __gettexterror #define yylval __gettextlval #define yychar __gettextchar #define yydebug __gettextdebug #define yynerrs __gettextnerrs /* Copy the first part of user declarations. */ /* Line 268 of yacc.c */ #line 1 "plural.y" /* Expression parsing for plural form selection. Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* The bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include "plural-exp.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ #ifndef _LIBC # define __gettextparse PLURAL_PARSE #endif #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg /* Line 268 of yacc.c */ #line 126 "plural.c" /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { EQUOP2 = 258, CMPOP2 = 259, ADDOP2 = 260, MULOP2 = 261, NUMBER = 262 }; #endif /* Tokens. */ #define EQUOP2 258 #define CMPOP2 259 #define ADDOP2 260 #define MULOP2 261 #define NUMBER 262 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 293 of yacc.c */ #line 49 "plural.y" unsigned long int num; enum operator op; struct expression *exp; /* Line 293 of yacc.c */ #line 184 "plural.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif /* Copy the second part of user declarations. */ /* Line 343 of yacc.c */ #line 55 "plural.y" /* Prototypes for local functions. */ static int yylex (YYSTYPE *lval, const char **pexp); static void yyerror (const char *str); /* Allocation of expressions. */ static struct expression * new_exp (int nargs, enum operator op, struct expression * const *args) { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (enum operator op) { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (enum operator op, struct expression *right) { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (enum operator op, struct expression *left, struct expression *right) { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (enum operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch) { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } /* Line 343 of yacc.c */ #line 272 "plural.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 9 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 54 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 16 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 3 /* YYNRULES -- Number of rules. */ #define YYNRULES 13 /* YYNRULES -- Number of states. */ #define YYNSTATES 27 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 262 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 6, 7, 8, 9, 11 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 5, 11, 15, 19, 23, 27, 31, 35, 38, 40, 42 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 17, 0, -1, 18, -1, 18, 3, 18, 12, 18, -1, 18, 4, 18, -1, 18, 5, 18, -1, 18, 6, 18, -1, 18, 7, 18, -1, 18, 8, 18, -1, 18, 9, 18, -1, 10, 18, -1, 13, -1, 11, -1, 14, 18, 15, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 150, 150, 158, 162, 166, 170, 174, 178, 182, 186, 190, 194, 199 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2", "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'", "$accept", "start", "exp", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 63, 124, 38, 258, 259, 260, 261, 33, 262, 58, 110, 40, 41 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, 1, 3 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 0, 12, 11, 0, 0, 2, 10, 0, 1, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 5, 6, 7, 8, 9, 0, 3 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 5, 6 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -10 static const yytype_int8 yypact[] = { -9, -9, -10, -10, -9, 8, 36, -10, 13, -10, -9, -9, -9, -9, -9, -9, -9, -10, 26, 41, 45, 18, -2, 14, -10, -9, 36 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -10, -10, -1 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 7, 1, 2, 8, 3, 4, 15, 16, 9, 18, 19, 20, 21, 22, 23, 24, 10, 11, 12, 13, 14, 15, 16, 16, 26, 14, 15, 16, 17, 10, 11, 12, 13, 14, 15, 16, 0, 0, 25, 10, 11, 12, 13, 14, 15, 16, 12, 13, 14, 15, 16, 13, 14, 15, 16 }; #define yypact_value_is_default(yystate) \ ((yystate) == (-10)) #define yytable_value_is_error(yytable_value) \ YYID (0) static const yytype_int8 yycheck[] = { 1, 10, 11, 4, 13, 14, 8, 9, 0, 10, 11, 12, 13, 14, 15, 16, 3, 4, 5, 6, 7, 8, 9, 9, 25, 7, 8, 9, 15, 3, 4, 5, 6, 7, 8, 9, -1, -1, 12, 3, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, 8, 9 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 10, 11, 13, 14, 17, 18, 18, 18, 0, 3, 4, 5, 6, 7, 8, 9, 15, 18, 18, 18, 18, 18, 18, 18, 12, 18 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto yyerrlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = 0; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - Assume YYFAIL is not used. It's too flawed to consider. See for details. YYERROR is fine as it does not invoke this function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } yysize1 = yysize + yystrlen (yyformat); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: `yyss': related to states. `yyvs': related to semantic values. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yytoken = 0; yyss = yyssa; yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: /* Line 1806 of yacc.c */ #line 151 "plural.y" { if ((yyvsp[(1) - (1)].exp) == NULL) YYABORT; ((struct parse_args *) arg)->res = (yyvsp[(1) - (1)].exp); } break; case 3: /* Line 1806 of yacc.c */ #line 159 "plural.y" { (yyval.exp) = new_exp_3 (qmop, (yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].exp), (yyvsp[(5) - (5)].exp)); } break; case 4: /* Line 1806 of yacc.c */ #line 163 "plural.y" { (yyval.exp) = new_exp_2 (lor, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 5: /* Line 1806 of yacc.c */ #line 167 "plural.y" { (yyval.exp) = new_exp_2 (land, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 6: /* Line 1806 of yacc.c */ #line 171 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 7: /* Line 1806 of yacc.c */ #line 175 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 8: /* Line 1806 of yacc.c */ #line 179 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 9: /* Line 1806 of yacc.c */ #line 183 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 10: /* Line 1806 of yacc.c */ #line 187 "plural.y" { (yyval.exp) = new_exp_1 (lnot, (yyvsp[(2) - (2)].exp)); } break; case 11: /* Line 1806 of yacc.c */ #line 191 "plural.y" { (yyval.exp) = new_exp_0 (var); } break; case 12: /* Line 1806 of yacc.c */ #line 195 "plural.y" { if (((yyval.exp) = new_exp_0 (num)) != NULL) (yyval.exp)->val.num = (yyvsp[(1) - (1)].num); } break; case 13: /* Line 1806 of yacc.c */ #line 200 "plural.y" { (yyval.exp) = (yyvsp[(2) - (3)].exp); } break; /* Line 1806 of yacc.c */ #line 1618 "plural.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } /* Line 2067 of yacc.c */ #line 205 "plural.y" void internal_function FREE_EXPRESSION (struct expression *exp) { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (YYSTYPE *lval, const char **pexp) { const char *exp = *pexp; int result; while (1) { if (exp[0] == '\0') { *pexp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } *pexp = exp; return result; } static void yyerror (const char *str) { /* Do nothing. We don't print error messages here. */ } lbreakout2-2.6.5/intl/plural.y0000664000175000017500000001627112140767176013202 00000000000000%{ /* Expression parsing for plural form selection. Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* The bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include "plural-exp.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ #ifndef _LIBC # define __gettextparse PLURAL_PARSE #endif #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg %} %pure_parser %expect 7 %union { unsigned long int num; enum operator op; struct expression *exp; } %{ /* Prototypes for local functions. */ static int yylex (YYSTYPE *lval, const char **pexp); static void yyerror (const char *str); /* Allocation of expressions. */ static struct expression * new_exp (int nargs, enum operator op, struct expression * const *args) { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (enum operator op) { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (enum operator op, struct expression *right) { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (enum operator op, struct expression *left, struct expression *right) { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (enum operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch) { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } %} /* This declares that all operators have the same associativity and the precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. There is no unary minus and no bitwise operators. Operators with the same syntactic behaviour have been merged into a single token, to save space in the array generated by bison. */ %right '?' /* ? */ %left '|' /* || */ %left '&' /* && */ %left EQUOP2 /* == != */ %left CMPOP2 /* < > <= >= */ %left ADDOP2 /* + - */ %left MULOP2 /* * / % */ %right '!' /* ! */ %token EQUOP2 CMPOP2 ADDOP2 MULOP2 %token NUMBER %type exp %% start: exp { if ($1 == NULL) YYABORT; ((struct parse_args *) arg)->res = $1; } ; exp: exp '?' exp ':' exp { $$ = new_exp_3 (qmop, $1, $3, $5); } | exp '|' exp { $$ = new_exp_2 (lor, $1, $3); } | exp '&' exp { $$ = new_exp_2 (land, $1, $3); } | exp EQUOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp CMPOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp ADDOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp MULOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | '!' exp { $$ = new_exp_1 (lnot, $2); } | 'n' { $$ = new_exp_0 (var); } | NUMBER { if (($$ = new_exp_0 (num)) != NULL) $$->val.num = $1; } | '(' exp ')' { $$ = $2; } ; %% void internal_function FREE_EXPRESSION (struct expression *exp) { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (YYSTYPE *lval, const char **pexp) { const char *exp = *pexp; int result; while (1) { if (exp[0] == '\0') { *pexp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } *pexp = exp; return result; } static void yyerror (const char *str) { /* Do nothing. We don't print error messages here. */ } lbreakout2-2.6.5/intl/localcharset.c0000664000175000017500000002435712140767176014325 00000000000000/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* Written by Bruno Haible . */ #ifdef HAVE_CONFIG_H # include #endif /* Specification. */ #include "localcharset.h" #if HAVE_STDDEF_H # include #endif #include #if HAVE_STRING_H # include #else # include #endif #if HAVE_STDLIB_H # include #endif #if defined _WIN32 || defined __WIN32__ # undef WIN32 /* avoid warning on mingw32 */ # define WIN32 #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # define OS2 #endif #if !defined WIN32 # if HAVE_LANGINFO_CODESET # include # else # if HAVE_SETLOCALE # include # endif # endif #elif defined WIN32 # define WIN32_LEAN_AND_MEAN # include #endif #if defined OS2 # define INCL_DOS # include #endif #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) #endif #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #endif #ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' #endif #ifndef ISSLASH # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) #endif #if HAVE_DECL_GETC_UNLOCKED # undef getc # define getc getc_unlocked #endif /* The following static variable is declared 'volatile' to avoid a possible multithread problem in the function get_charset_aliases. If we are running in a threaded environment, and if two threads initialize 'charset_aliases' simultaneously, both will produce the same value, and everything will be ok if the two assignments to 'charset_aliases' are atomic. But I don't know what will happen if the two assignments mix. */ #if __STDC__ != 1 # define volatile /* empty */ #endif /* Pointer to the contents of the charset.alias file, if it has already been read, else NULL. Its format is: ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ static const char * volatile charset_aliases; /* Return a pointer to the contents of the charset.alias file. */ static const char * get_charset_aliases () { const char *cp; cp = charset_aliases; if (cp == NULL) { #if !(defined VMS || defined WIN32) FILE *fp; const char *dir = relocate (LIBDIR); const char *base = "charset.alias"; char *file_name; /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); size_t base_len = strlen (base); int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); file_name = (char *) malloc (dir_len + add_slash + base_len + 1); if (file_name != NULL) { memcpy (file_name, dir, dir_len); if (add_slash) file_name[dir_len] = DIRECTORY_SEPARATOR; memcpy (file_name + dir_len + add_slash, base, base_len + 1); } } if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) /* Out of memory or file not found, treat it as empty. */ cp = ""; else { /* Parse the file's contents. */ int c; char buf1[50+1]; char buf2[50+1]; char *res_ptr = NULL; size_t res_size = 0; size_t l1, l2; for (;;) { c = getc (fp); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { /* Skip comment, to end of line. */ do c = getc (fp); while (!(c == EOF || c == '\n')); if (c == EOF) break; continue; } ungetc (c, fp); if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) break; l1 = strlen (buf1); l2 = strlen (buf2); if (res_size == 0) { res_size = l1 + 1 + l2 + 1; res_ptr = (char *) malloc (res_size + 1); } else { res_size += l1 + 1 + l2 + 1; res_ptr = (char *) realloc (res_ptr, res_size + 1); } if (res_ptr == NULL) { /* Out of memory. */ res_size = 0; break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); strcpy (res_ptr + res_size - (l2 + 1), buf2); } fclose (fp); if (res_size == 0) cp = ""; else { *(res_ptr + res_size) = '\0'; cp = res_ptr; } } if (file_name != NULL) free (file_name); #else # if defined VMS /* To avoid the troubles of an extra file charset.alias_vms in the sources of many GNU packages, simply inline the aliases here. */ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation "Compaq C Run-Time Library Reference Manual for OpenVMS systems" section 10.7 "Handling Different Character Sets". */ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" "ISO8859-2" "\0" "ISO-8859-2" "\0" "ISO8859-5" "\0" "ISO-8859-5" "\0" "ISO8859-7" "\0" "ISO-8859-7" "\0" "ISO8859-8" "\0" "ISO-8859-8" "\0" "ISO8859-9" "\0" "ISO-8859-9" "\0" /* Japanese */ "eucJP" "\0" "EUC-JP" "\0" "SJIS" "\0" "SHIFT_JIS" "\0" "DECKANJI" "\0" "DEC-KANJI" "\0" "SDECKANJI" "\0" "EUC-JP" "\0" /* Chinese */ "eucTW" "\0" "EUC-TW" "\0" "DECHANYU" "\0" "DEC-HANYU" "\0" "DECHANZI" "\0" "GB2312" "\0" /* Korean */ "DECKOREAN" "\0" "EUC-KR" "\0"; # endif # if defined WIN32 /* To avoid the troubles of installing a separate file in the same directory as the DLL and of retrieving the DLL's directory at runtime, simply inline the aliases here. */ cp = "CP936" "\0" "GBK" "\0" "CP1361" "\0" "JOHAB" "\0" "CP20127" "\0" "ASCII" "\0" "CP20866" "\0" "KOI8-R" "\0" "CP21866" "\0" "KOI8-RU" "\0" "CP28591" "\0" "ISO-8859-1" "\0" "CP28592" "\0" "ISO-8859-2" "\0" "CP28593" "\0" "ISO-8859-3" "\0" "CP28594" "\0" "ISO-8859-4" "\0" "CP28595" "\0" "ISO-8859-5" "\0" "CP28596" "\0" "ISO-8859-6" "\0" "CP28597" "\0" "ISO-8859-7" "\0" "CP28598" "\0" "ISO-8859-8" "\0" "CP28599" "\0" "ISO-8859-9" "\0" "CP28605" "\0" "ISO-8859-15" "\0"; # endif #endif charset_aliases = cp; } return cp; } /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset () { const char *codeset; const char *aliases; #if !(defined WIN32 || defined OS2) # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if HAVE_SETLOCALE && 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } } /* On some old systems, one used to set locale = "iso8859_1". On others, you set it to "language_COUNTRY.charset". In any case, we resolve it through the charset.alias file. */ codeset = locale; # endif #elif defined WIN32 static char buf[2 + 10 + 1]; /* Woe32 has a function returning the locale's codepage as a number. */ sprintf (buf, "CP%u", GetACP ()); codeset = buf; #elif defined OS2 const char *locale; static char buf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } /* Resolve through the charset.alias file. */ codeset = locale; } else { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { sprintf (buf, "CP%u", cp[0]); codeset = buf; } } #endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; /* Resolve alias. */ for (aliases = get_charset_aliases (); *aliases != '\0'; aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) if (strcmp (codeset, aliases) == 0 || (aliases[0] == '*' && aliases[1] == '\0')) { codeset = aliases + strlen (aliases) + 1; break; } /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ if (codeset[0] == '\0') codeset = "ASCII"; return codeset; } lbreakout2-2.6.5/intl/l10nflist.c0000664000175000017500000002733012140767176013467 00000000000000/* Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* Tell glibc's to provide a prototype for stpcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #if defined _LIBC || defined HAVE_ARGZ_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # ifndef stpcpy # define stpcpy(dest, src) __stpcpy(dest, src) # endif #else # ifndef HAVE_STPCPY static char *stpcpy (char *dest, const char *src); # endif #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. */ #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) #endif /* Define function which are usually not available. */ #if !defined _LIBC && !defined HAVE___ARGZ_COUNT /* Returns the number of strings in ARGZ. */ static size_t argz_count__ (const char *argz, size_t len) { size_t count = 0; while (len > 0) { size_t part_len = strlen (argz); argz += part_len + 1; len -= part_len + 1; count++; } return count; } # undef __argz_count # define __argz_count(argz, len) argz_count__ (argz, len) #else # ifdef _LIBC # define __argz_count(argz, len) INTUSE(__argz_count) (argz, len) # endif #endif /* !_LIBC && !HAVE___ARGZ_COUNT */ #if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ static void argz_stringify__ (char *argz, size_t len, int sep) { while (len > 0) { size_t part_len = strlen (argz); argz += part_len; len -= part_len + 1; if (len > 0) *argz++ = sep; } } # undef __argz_stringify # define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) #else # ifdef _LIBC # define __argz_stringify(argz, len, sep) \ INTUSE(__argz_stringify) (argz, len, sep) # endif #endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */ #if !defined _LIBC && !defined HAVE___ARGZ_NEXT static char * argz_next__ (char *argz, size_t argz_len, const char *entry) { if (entry) { if (entry < argz + argz_len) entry = strchr (entry, '\0') + 1; return entry >= argz + argz_len ? NULL : (char *) entry; } else if (argz_len > 0) return argz; else return 0; } # undef __argz_next # define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) #endif /* !_LIBC && !HAVE___ARGZ_NEXT */ /* Return number of bits set in X. */ static inline int pop (int x) { /* We assume that no more than 16 bits are used. */ x = ((x & ~0x5555) >> 1) + (x & 0x5555); x = ((x & ~0x3333) >> 2) + (x & 0x3333); x = ((x >> 4) + x) & 0x0f0f; x = ((x >> 8) + x) & 0xff; return x; } struct loaded_l10nfile * _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *special, const char *sponsor, const char *revision, const char *filename, int do_allocate) { char *abs_filename; struct loaded_l10nfile **lastp; struct loaded_l10nfile *retval; char *cp; size_t dirlist_count; size_t entries; int cnt; /* If LANGUAGE contains an absolute directory specification, we ignore DIRLIST. */ if (IS_ABSOLUTE_PATH (language)) dirlist_len = 0; /* Allocate room for the full file name. */ abs_filename = (char *) malloc (dirlist_len + strlen (language) + ((mask & TERRITORY) != 0 ? strlen (territory) + 1 : 0) + ((mask & XPG_CODESET) != 0 ? strlen (codeset) + 1 : 0) + ((mask & XPG_NORM_CODESET) != 0 ? strlen (normalized_codeset) + 1 : 0) + (((mask & XPG_MODIFIER) != 0 || (mask & CEN_AUDIENCE) != 0) ? strlen (modifier) + 1 : 0) + ((mask & CEN_SPECIAL) != 0 ? strlen (special) + 1 : 0) + (((mask & CEN_SPONSOR) != 0 || (mask & CEN_REVISION) != 0) ? (1 + ((mask & CEN_SPONSOR) != 0 ? strlen (sponsor) : 0) + ((mask & CEN_REVISION) != 0 ? strlen (revision) + 1 : 0)) : 0) + 1 + strlen (filename) + 1); if (abs_filename == NULL) return NULL; /* Construct file name. */ cp = abs_filename; if (dirlist_len > 0) { memcpy (cp, dirlist, dirlist_len); __argz_stringify (cp, dirlist_len, PATH_SEPARATOR); cp += dirlist_len; cp[-1] = '/'; } cp = stpcpy (cp, language); if ((mask & TERRITORY) != 0) { *cp++ = '_'; cp = stpcpy (cp, territory); } if ((mask & XPG_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, codeset); } if ((mask & XPG_NORM_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, normalized_codeset); } if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0) { /* This component can be part of both syntaces but has different leading characters. For CEN we use `+', else `@'. */ *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@'; cp = stpcpy (cp, modifier); } if ((mask & CEN_SPECIAL) != 0) { *cp++ = '+'; cp = stpcpy (cp, special); } if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0) { *cp++ = ','; if ((mask & CEN_SPONSOR) != 0) cp = stpcpy (cp, sponsor); if ((mask & CEN_REVISION) != 0) { *cp++ = '_'; cp = stpcpy (cp, revision); } } *cp++ = '/'; stpcpy (cp, filename); /* Look in list of already loaded domains whether it is already available. */ lastp = l10nfile_list; for (retval = *l10nfile_list; retval != NULL; retval = retval->next) if (retval->filename != NULL) { int compare = strcmp (retval->filename, abs_filename); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It's not in the list. */ retval = NULL; break; } lastp = &retval->next; } if (retval != NULL || do_allocate == 0) { free (abs_filename); return retval; } dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1); /* Allocate a new loaded_l10nfile. */ retval = (struct loaded_l10nfile *) malloc (sizeof (*retval) + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0)) * sizeof (struct loaded_l10nfile *))); if (retval == NULL) return NULL; retval->filename = abs_filename; /* We set retval->data to NULL here; it is filled in later. Setting retval->decided to 1 here means that retval does not correspond to a real file (dirlist_count > 1) or is not worth looking up (if an unnormalized codeset was specified). */ retval->decided = (dirlist_count > 1 || ((mask & XPG_CODESET) != 0 && (mask & XPG_NORM_CODESET) != 0)); retval->data = NULL; retval->next = *lastp; *lastp = retval; entries = 0; /* Recurse to fill the inheritance list of RETVAL. If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL entry does not correspond to a real file; retval->filename contains colons. In this case we loop across all elements of DIRLIST and across all bit patterns dominated by MASK. If the DIRLIST is a single directory or entirely redundant (i.e. DIRLIST_COUNT == 1), we loop across all bit patterns dominated by MASK, excluding MASK itself. In either case, we loop down from MASK to 0. This has the effect that the extra bits in the locale name are dropped in this order: first the modifier, then the territory, then the codeset, then the normalized_codeset. */ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt) if ((cnt & ~mask) == 0 && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0) && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0)) { if (dirlist_count > 1) { /* Iterate over all elements of the DIRLIST. */ char *dir = NULL; while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) != NULL) retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, 1); } else retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, cnt, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, 1); } retval->successor[entries] = NULL; return retval; } /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ const char * _nl_normalize_codeset (const char *codeset, size_t name_len) { int len = 0; int only_digit = 1; char *retval; char *wp; size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) if (isalnum ((unsigned char) codeset[cnt])) { ++len; if (isalpha ((unsigned char) codeset[cnt])) only_digit = 0; } retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); if (retval != NULL) { if (only_digit) wp = stpcpy (retval, "iso"); else wp = retval; for (cnt = 0; cnt < name_len; ++cnt) if (isalpha ((unsigned char) codeset[cnt])) *wp++ = tolower ((unsigned char) codeset[cnt]); else if (isdigit ((unsigned char) codeset[cnt])) *wp++ = codeset[cnt]; *wp = '\0'; } return (const char *) retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (char *dest, const char *src) { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif lbreakout2-2.6.5/intl/bindtextdom.c0000664000175000017500000002312012140767176014165 00000000000000/* Implementation of the bindtextdomain(3) function Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include "gettextP.h" #ifdef _LIBC /* We have to handle multi-threaded applications. */ # include #else /* Provide dummy implementation if this is outside glibc. */ # define __libc_rwlock_define(CLASS, NAME) # define __libc_rwlock_wrlock(NAME) # define __libc_rwlock_unlock(NAME) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_dirname libintl_nl_default_dirname # define _nl_domain_bindings libintl_nl_domain_bindings #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ /* Contains the default location of the message catalogs. */ extern const char _nl_default_dirname[]; #ifdef _LIBC extern const char _nl_default_dirname_internal[] attribute_hidden; #else # define INTUSE(name) name #endif /* List with bindings of specific domains. */ extern struct binding *_nl_domain_bindings; /* Lock variable to protect the global data in the gettext implementation. */ __libc_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain # define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define BINDTEXTDOMAIN libintl_bindtextdomain # define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset #endif /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP to be used for the DOMAINNAME message catalog. If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not modified, only the current value is returned. If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither modified nor returned. */ static void set_binding_values (const char *domainname, const char **dirnamep, const char **codesetp) { struct binding *binding; int modified; /* Some sanity checks. */ if (domainname == NULL || domainname[0] == '\0') { if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; return; } __libc_rwlock_wrlock (_nl_state_lock); modified = 0; for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding != NULL) { if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The current binding has be to returned. */ *dirnamep = binding->dirname; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->dirname; if (strcmp (dirname, result) != 0) { if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0) result = (char *) INTUSE(_nl_default_dirname); else { #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, dirname, len); #endif } if (__builtin_expect (result != NULL, 1)) { if (binding->dirname != INTUSE(_nl_default_dirname)) free (binding->dirname); binding->dirname = result; modified = 1; } } *dirnamep = result; } } if (codesetp) { const char *codeset = *codesetp; if (codeset == NULL) /* The current binding has be to returned. */ *codesetp = binding->codeset; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->codeset; if (result == NULL || strcmp (codeset, result) != 0) { #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, codeset, len); #endif if (__builtin_expect (result != NULL, 1)) { if (binding->codeset != NULL) free (binding->codeset); binding->codeset = result; binding->codeset_cntr++; modified = 1; } } *codesetp = result; } } } else if ((dirnamep == NULL || *dirnamep == NULL) && (codesetp == NULL || *codesetp == NULL)) { /* Simply return the default values. */ if (dirnamep) *dirnamep = INTUSE(_nl_default_dirname); if (codesetp) *codesetp = NULL; } else { /* We have to create a new binding. */ size_t len = strlen (domainname) + 1; struct binding *new_binding = (struct binding *) malloc (offsetof (struct binding, domainname) + len); if (__builtin_expect (new_binding == NULL, 0)) goto failed; memcpy (new_binding->domainname, domainname, len); if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The default value. */ dirname = INTUSE(_nl_default_dirname); else { if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0) dirname = INTUSE(_nl_default_dirname); else { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; memcpy (result, dirname, len); #endif dirname = result; } } *dirnamep = dirname; new_binding->dirname = (char *) dirname; } else /* The default value. */ new_binding->dirname = (char *) INTUSE(_nl_default_dirname); new_binding->codeset_cntr = 0; if (codesetp) { const char *codeset = *codesetp; if (codeset != NULL) { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; memcpy (result, codeset, len); #endif codeset = result; new_binding->codeset_cntr++; } *codesetp = codeset; new_binding->codeset = (char *) codeset; } else new_binding->codeset = NULL; /* Now enqueue it. */ if (_nl_domain_bindings == NULL || strcmp (domainname, _nl_domain_bindings->domainname) < 0) { new_binding->next = _nl_domain_bindings; _nl_domain_bindings = new_binding; } else { binding = _nl_domain_bindings; while (binding->next != NULL && strcmp (domainname, binding->next->domainname) > 0) binding = binding->next; new_binding->next = binding->next; binding->next = new_binding; } modified = 1; /* Here we deal with memory allocation failures. */ if (0) { failed_codeset: if (new_binding->dirname != INTUSE(_nl_default_dirname)) free (new_binding->dirname); failed_dirname: free (new_binding); failed: if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; } } /* If we modified any binding, we flush the caches. */ if (modified) ++_nl_msg_cat_cntr; __libc_rwlock_unlock (_nl_state_lock); } /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ char * BINDTEXTDOMAIN (const char *domainname, const char *dirname) { set_binding_values (domainname, &dirname, NULL); return (char *) dirname; } /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ char * BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset) { set_binding_values (domainname, NULL, &codeset); return (char *) codeset; } #ifdef _LIBC /* Aliases for function names in GNU C Library. */ weak_alias (__bindtextdomain, bindtextdomain); weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset); #endif lbreakout2-2.6.5/intl/os2compat.c0000664000175000017500000000550312140767176013560 00000000000000/* OS/2 compatibility functions. Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #define OS2_AWARE #ifdef HAVE_CONFIG_H #include #endif #include #include #include /* A version of getenv() that works from DLLs */ extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue); char * _nl_getenv (const char *name) { unsigned char *value; if (DosScanEnv (name, &value)) return NULL; else return value; } /* A fixed size buffer. */ char libintl_nl_default_dirname[MAXPATHLEN+1]; char *_nlos2_libdir = NULL; char *_nlos2_localealiaspath = NULL; char *_nlos2_localedir = NULL; static __attribute__((constructor)) void nlos2_initialize () { char *root = getenv ("UNIXROOT"); char *gnulocaledir = getenv ("GNULOCALEDIR"); _nlos2_libdir = gnulocaledir; if (!_nlos2_libdir) { if (root) { size_t sl = strlen (root); _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1); memcpy (_nlos2_libdir, root, sl); memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1); } else _nlos2_libdir = LIBDIR; } _nlos2_localealiaspath = gnulocaledir; if (!_nlos2_localealiaspath) { if (root) { size_t sl = strlen (root); _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1); memcpy (_nlos2_localealiaspath, root, sl); memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1); } else _nlos2_localealiaspath = LOCALE_ALIAS_PATH; } _nlos2_localedir = gnulocaledir; if (!_nlos2_localedir) { if (root) { size_t sl = strlen (root); _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1); memcpy (_nlos2_localedir, root, sl); memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1); } else _nlos2_localedir = LOCALEDIR; } if (strlen (_nlos2_localedir) <= MAXPATHLEN) strcpy (libintl_nl_default_dirname, _nlos2_localedir); } lbreakout2-2.6.5/intl/explodename.c0000664000175000017500000001064312140767176014153 00000000000000/* Copyright (C) 1995-1998, 2000-2001, 2003 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ char * _nl_find_language (const char *name) { while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '+' && name[0] != ',') ++name; return (char *) name; } int _nl_explode_name (char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset, const char **special, const char **sponsor, const char **revision) { enum { undecided, xpg, cen } syntax; char *cp; int mask; *modifier = NULL; *territory = NULL; *codeset = NULL; *normalized_codeset = NULL; *special = NULL; *sponsor = NULL; *revision = NULL; /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = 0; syntax = undecided; *language = cp = name; cp = _nl_find_language (*language); if (*language == cp) /* This does not make sense: language has to be specified. Use this entry as it is without exploding. Perhaps it is an alias. */ cp = strchr (*language, '\0'); else if (cp[0] == '_') { /* Next is the territory. */ cp[0] = '\0'; *territory = ++cp; while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= TERRITORY; if (cp[0] == '.') { /* Next is the codeset. */ syntax = xpg; cp[0] = '\0'; *codeset = ++cp; while (cp[0] != '\0' && cp[0] != '@') ++cp; mask |= XPG_CODESET; if (*codeset != cp && (*codeset)[0] != '\0') { *normalized_codeset = _nl_normalize_codeset (*codeset, cp - *codeset); if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else mask |= XPG_NORM_CODESET; } } } if (cp[0] == '@' || (syntax != xpg && cp[0] == '+')) { /* Next is the modifier. */ syntax = cp[0] == '@' ? xpg : cen; cp[0] = '\0'; *modifier = ++cp; while (syntax == cen && cp[0] != '\0' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= XPG_MODIFIER | CEN_AUDIENCE; } if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_')) { syntax = cen; if (cp[0] == '+') { /* Next is special application (CEN syntax). */ cp[0] = '\0'; *special = ++cp; while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= CEN_SPECIAL; } if (cp[0] == ',') { /* Next is sponsor (CEN syntax). */ cp[0] = '\0'; *sponsor = ++cp; while (cp[0] != '\0' && cp[0] != '_') ++cp; mask |= CEN_SPONSOR; } if (cp[0] == '_') { /* Next is revision (CEN syntax). */ cp[0] = '\0'; *revision = ++cp; mask |= CEN_REVISION; } } /* For CEN syntax values it might be important to have the separator character in the file name, not for XPG syntax. */ if (syntax == xpg) { if (*territory != NULL && (*territory)[0] == '\0') mask &= ~TERRITORY; if (*codeset != NULL && (*codeset)[0] == '\0') mask &= ~XPG_CODESET; if (*modifier != NULL && (*modifier)[0] == '\0') mask &= ~XPG_MODIFIER; } return mask; } lbreakout2-2.6.5/intl/locale.alias0000664000175000017500000000512212140767176013754 00000000000000# Locale name alias data base. # Copyright (C) 1996-2001,2003 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library 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. # The format of this file is the same as for the corresponding file of # the X Window System, which normally can be found in # /usr/lib/X11/locale/locale.alias # A single line contains two fields: an alias and a substitution value. # All entries are case independent. # Note: This file is far from being complete. If you have a value for # your own site which you think might be useful for others too, share # it with the rest of us. Send it using the `glibcbug' script to # bugs@gnu.org. # Packages using this file: bokmal nb_NO.ISO-8859-1 bokml nb_NO.ISO-8859-1 catalan ca_ES.ISO-8859-1 croatian hr_HR.ISO-8859-2 czech cs_CZ.ISO-8859-2 danish da_DK.ISO-8859-1 dansk da_DK.ISO-8859-1 deutsch de_DE.ISO-8859-1 dutch nl_NL.ISO-8859-1 eesti et_EE.ISO-8859-1 estonian et_EE.ISO-8859-1 finnish fi_FI.ISO-8859-1 franais fr_FR.ISO-8859-1 french fr_FR.ISO-8859-1 galego gl_ES.ISO-8859-1 galician gl_ES.ISO-8859-1 german de_DE.ISO-8859-1 greek el_GR.ISO-8859-7 hebrew he_IL.ISO-8859-8 hrvatski hr_HR.ISO-8859-2 hungarian hu_HU.ISO-8859-2 icelandic is_IS.ISO-8859-1 italian it_IT.ISO-8859-1 japanese ja_JP.eucJP japanese.euc ja_JP.eucJP ja_JP ja_JP.eucJP ja_JP.ujis ja_JP.eucJP japanese.sjis ja_JP.SJIS korean ko_KR.eucKR korean.euc ko_KR.eucKR ko_KR ko_KR.eucKR lithuanian lt_LT.ISO-8859-13 no_NO nb_NO.ISO-8859-1 no_NO.ISO-8859-1 nb_NO.ISO-8859-1 norwegian nb_NO.ISO-8859-1 nynorsk nn_NO.ISO-8859-1 polish pl_PL.ISO-8859-2 portuguese pt_PT.ISO-8859-1 romanian ro_RO.ISO-8859-2 russian ru_RU.ISO-8859-5 slovak sk_SK.ISO-8859-2 slovene sl_SI.ISO-8859-2 slovenian sl_SI.ISO-8859-2 spanish es_ES.ISO-8859-1 swedish sv_SE.ISO-8859-1 thai th_TH.TIS-620 turkish tr_TR.ISO-8859-9 lbreakout2-2.6.5/intl/localealias.c0000664000175000017500000002334012140767176014121 00000000000000/* Handle aliases for locale names. Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #if defined _LIBC || defined HAVE___FSETLOCKING # include #endif #include #ifdef __GNUC__ # undef alloca # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #include #include "gettextP.h" #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define strcasecmp __strcasecmp # ifndef mempcpy # define mempcpy __mempcpy # endif # define HAVE_MEMPCPY 1 # define HAVE___FSETLOCKING 1 /* We need locking here since we can be called from different places. */ # include __libc_lock_define_initialized (static, lock); #endif #ifndef internal_function # define internal_function #endif /* Some optimizations for glibc. */ #ifdef _LIBC # define FEOF(fp) feof_unlocked (fp) # define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp) #else # define FEOF(fp) feof (fp) # define FGETS(buf, n, fp) fgets (buf, n, fp) #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif #if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED # undef fgets # define fgets(buf, len, s) fgets_unlocked (buf, len, s) #endif #if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED # undef feof # define feof(s) feof_unlocked (s) #endif struct alias_map { const char *alias; const char *value; }; #ifndef _LIBC # define libc_freeres_ptr(decl) decl #endif libc_freeres_ptr (static char *string_space); static size_t string_space_act; static size_t string_space_max; libc_freeres_ptr (static struct alias_map *map); static size_t nmap; static size_t maxmap; /* Prototypes for local functions. */ static size_t read_alias_file (const char *fname, int fname_len) internal_function; static int extend_alias_table (void); static int alias_compare (const struct alias_map *map1, const struct alias_map *map2); const char * _nl_expand_alias (const char *name) { static const char *locale_alias_path; struct alias_map *retval; const char *result = NULL; size_t added; #ifdef _LIBC __libc_lock_lock (lock); #endif if (locale_alias_path == NULL) locale_alias_path = LOCALE_ALIAS_PATH; do { struct alias_map item; item.alias = name; if (nmap > 0) retval = (struct alias_map *) bsearch (&item, map, nmap, sizeof (struct alias_map), (int (*) (const void *, const void *) ) alias_compare); else retval = NULL; /* We really found an alias. Return the value. */ if (retval != NULL) { result = retval->value; break; } /* Perhaps we can find another alias file. */ added = 0; while (added == 0 && locale_alias_path[0] != '\0') { const char *start; while (locale_alias_path[0] == PATH_SEPARATOR) ++locale_alias_path; start = locale_alias_path; while (locale_alias_path[0] != '\0' && locale_alias_path[0] != PATH_SEPARATOR) ++locale_alias_path; if (start < locale_alias_path) added = read_alias_file (start, locale_alias_path - start); } } while (added != 0); #ifdef _LIBC __libc_lock_unlock (lock); #endif return result; } static size_t internal_function read_alias_file (const char *fname, int fname_len) { FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); #ifdef HAVE_MEMPCPY mempcpy (mempcpy (full_fname, fname, fname_len), aliasfile, sizeof aliasfile); #else memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); #endif fp = fopen (relocate (full_fname), "r"); freea (full_fname); if (fp == NULL) return 0; #ifdef HAVE___FSETLOCKING /* No threads present. */ __fsetlocking (fp, FSETLOCKING_BYCALLER); #endif added = 0; while (!FEOF (fp)) { /* It is a reasonable approach to use a fix buffer here because a) we are only interested in the first two fields b) these fields must be usable as file names and so must not be that long We avoid a multi-kilobyte buffer here since this would use up stack space which we might not have if the program ran out of memory. */ char buf[400]; char *alias; char *value; char *cp; if (FGETS (buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; cp = buf; /* Ignore leading white space. */ while (isspace ((unsigned char) cp[0])) ++cp; /* A leading '#' signals a comment line. */ if (cp[0] != '\0' && cp[0] != '#') { alias = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate alias name. */ if (cp[0] != '\0') *cp++ = '\0'; /* Now look for the beginning of the value. */ while (isspace ((unsigned char) cp[0])) ++cp; if (cp[0] != '\0') { size_t alias_len; size_t value_len; value = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate value. */ if (cp[0] == '\n') { /* This has to be done to make the following test for the end of line possible. We are looking for the terminating '\n' which do not overwrite here. */ *cp++ = '\0'; *cp = '\n'; } else if (cp[0] != '\0') *cp++ = '\0'; if (nmap >= maxmap) if (__builtin_expect (extend_alias_table (), 0)) return added; alias_len = strlen (alias) + 1; value_len = strlen (value) + 1; if (string_space_act + alias_len + value_len > string_space_max) { /* Increase size of memory pool. */ size_t new_size = (string_space_max + (alias_len + value_len > 1024 ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) return added; if (__builtin_expect (string_space != new_pool, 0)) { size_t i; for (i = 0; i < nmap; i++) { map[i].alias += new_pool - string_space; map[i].value += new_pool - string_space; } } string_space = new_pool; string_space_max = new_size; } map[nmap].alias = memcpy (&string_space[string_space_act], alias, alias_len); string_space_act += alias_len; map[nmap].value = memcpy (&string_space[string_space_act], value, value_len); string_space_act += value_len; ++nmap; ++added; } } /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ while (strchr (buf, '\n') == NULL) if (FGETS (buf, sizeof buf, fp) == NULL) /* Make sure the inner loop will be left. The outer loop will exit at the `feof' test. */ break; } /* Should we test for ferror()? I think we have to silently ignore errors. --drepper */ fclose (fp); if (added > 0) qsort (map, nmap, sizeof (struct alias_map), (int (*) (const void *, const void *)) alias_compare); return added; } static int extend_alias_table () { size_t new_size; struct alias_map *new_map; new_size = maxmap == 0 ? 100 : 2 * maxmap; new_map = (struct alias_map *) realloc (map, (new_size * sizeof (struct alias_map))); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ return -1; map = new_map; maxmap = new_size; return 0; } static int alias_compare (const struct alias_map *map1, const struct alias_map *map2) { #if defined _LIBC || defined HAVE_STRCASECMP return strcasecmp (map1->alias, map2->alias); #else const unsigned char *p1 = (const unsigned char *) map1->alias; const unsigned char *p2 = (const unsigned char *) map2->alias; unsigned char c1, c2; if (p1 == p2) return 0; do { /* I know this seems to be odd but the tolower() function in some systems libc cannot handle nonalpha characters. */ c1 = isupper (*p1) ? tolower (*p1) : *p1; c2 = isupper (*p2) ? tolower (*p2) : *p2; if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); return c1 - c2; #endif } lbreakout2-2.6.5/intl/os2compat.h0000664000175000017500000000302212140767176013557 00000000000000/* OS/2 compatibility defines. This file is intended to be included from config.h Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ /* When included from os2compat.h we need all the original definitions */ #ifndef OS2_AWARE #undef LIBDIR #define LIBDIR _nlos2_libdir extern char *_nlos2_libdir; #undef LOCALEDIR #define LOCALEDIR _nlos2_localedir extern char *_nlos2_localedir; #undef LOCALE_ALIAS_PATH #define LOCALE_ALIAS_PATH _nlos2_localealiaspath extern char *_nlos2_localealiaspath; #endif #undef HAVE_STRCASECMP #define HAVE_STRCASECMP 1 #define strcasecmp stricmp #define strncasecmp strnicmp /* We have our own getenv() which works even if library is compiled as DLL */ #define getenv _nl_getenv /* Older versions of gettext used -1 as the value of LC_MESSAGES */ #define LC_MESSAGES_COMPAT (-1) lbreakout2-2.6.5/intl/printf-args.c0000664000175000017500000000625312140767176014110 00000000000000/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif /* Specification. */ #include "printf-args.h" #ifdef STATIC STATIC #endif int printf_fetchargs (va_list args, arguments *a) { size_t i; argument *ap; for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) switch (ap->type) { case TYPE_SCHAR: ap->a.a_schar = va_arg (args, /*signed char*/ int); break; case TYPE_UCHAR: ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); break; case TYPE_SHORT: ap->a.a_short = va_arg (args, /*short*/ int); break; case TYPE_USHORT: ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); break; case TYPE_INT: ap->a.a_int = va_arg (args, int); break; case TYPE_UINT: ap->a.a_uint = va_arg (args, unsigned int); break; case TYPE_LONGINT: ap->a.a_longint = va_arg (args, long int); break; case TYPE_ULONGINT: ap->a.a_ulongint = va_arg (args, unsigned long int); break; #ifdef HAVE_LONG_LONG case TYPE_LONGLONGINT: ap->a.a_longlongint = va_arg (args, long long int); break; case TYPE_ULONGLONGINT: ap->a.a_ulonglongint = va_arg (args, unsigned long long int); break; #endif case TYPE_DOUBLE: ap->a.a_double = va_arg (args, double); break; #ifdef HAVE_LONG_DOUBLE case TYPE_LONGDOUBLE: ap->a.a_longdouble = va_arg (args, long double); break; #endif case TYPE_CHAR: ap->a.a_char = va_arg (args, int); break; #ifdef HAVE_WINT_T case TYPE_WIDE_CHAR: ap->a.a_wide_char = va_arg (args, wint_t); break; #endif case TYPE_STRING: ap->a.a_string = va_arg (args, const char *); break; #ifdef HAVE_WCHAR_T case TYPE_WIDE_STRING: ap->a.a_wide_string = va_arg (args, const wchar_t *); break; #endif case TYPE_POINTER: ap->a.a_pointer = va_arg (args, void *); break; case TYPE_COUNT_SCHAR_POINTER: ap->a.a_count_schar_pointer = va_arg (args, signed char *); break; case TYPE_COUNT_SHORT_POINTER: ap->a.a_count_short_pointer = va_arg (args, short *); break; case TYPE_COUNT_INT_POINTER: ap->a.a_count_int_pointer = va_arg (args, int *); break; case TYPE_COUNT_LONGINT_POINTER: ap->a.a_count_longint_pointer = va_arg (args, long int *); break; #ifdef HAVE_LONG_LONG case TYPE_COUNT_LONGLONGINT_POINTER: ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); break; #endif default: /* Unknown type. */ return -1; } return 0; } lbreakout2-2.6.5/intl/intl-compat.c0000664000175000017500000000644312140767176014104 00000000000000/* intl-compat.c - Stub functions to call gettext functions from GNU gettext Library. Copyright (C) 1995, 2000-2003 Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" /* @@ end of prolog @@ */ /* This file redirects the gettext functions (without prefix) to those defined in the included GNU libintl library (with "libintl_" prefix). It is compiled into libintl in order to make the AM_GNU_GETTEXT test of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which has the redirections primarily in the include file. It is also compiled into libgnuintl so that libgnuintl.so can be used as LD_PRELOADable library on glibc systems, to provide the extra features that the functions in the libc don't have (namely, logging). */ #undef gettext #undef dgettext #undef dcgettext #undef ngettext #undef dngettext #undef dcngettext #undef textdomain #undef bindtextdomain #undef bind_textdomain_codeset /* When building a DLL, we must export some functions. Note that because the functions are only defined for binary backward compatibility, we don't need to use __declspec(dllimport) in any case. */ #if defined _MSC_VER && BUILDING_DLL # define DLL_EXPORTED __declspec(dllexport) #else # define DLL_EXPORTED #endif DLL_EXPORTED char * gettext (const char *msgid) { return libintl_gettext (msgid); } DLL_EXPORTED char * dgettext (const char *domainname, const char *msgid) { return libintl_dgettext (domainname, msgid); } DLL_EXPORTED char * dcgettext (const char *domainname, const char *msgid, int category) { return libintl_dcgettext (domainname, msgid, category); } DLL_EXPORTED char * ngettext (const char *msgid1, const char *msgid2, unsigned long int n) { return libintl_ngettext (msgid1, msgid2, n); } DLL_EXPORTED char * dngettext (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n) { return libintl_dngettext (domainname, msgid1, msgid2, n); } DLL_EXPORTED char * dcngettext (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n, int category) { return libintl_dcngettext (domainname, msgid1, msgid2, n, category); } DLL_EXPORTED char * textdomain (const char *domainname) { return libintl_textdomain (domainname); } DLL_EXPORTED char * bindtextdomain (const char *domainname, const char *dirname) { return libintl_bindtextdomain (domainname, dirname); } DLL_EXPORTED char * bind_textdomain_codeset (const char *domainname, const char *codeset) { return libintl_bind_textdomain_codeset (domainname, codeset); } lbreakout2-2.6.5/intl/dgettext.c0000664000175000017500000000336512140767176013505 00000000000000/* Implementation of the dgettext(3) function. Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DGETTEXT __dgettext # define DCGETTEXT INTUSE(__dcgettext) #else # define DGETTEXT libintl_dgettext # define DCGETTEXT libintl_dcgettext #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale. */ char * DGETTEXT (const char *domainname, const char *msgid) { return DCGETTEXT (domainname, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dgettext, dgettext); #endif lbreakout2-2.6.5/intl/wprintf-parse.h0000664000175000017500000000425712140767176014464 00000000000000/* Parse printf format string. Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _WPRINTF_PARSE_H #define _WPRINTF_PARSE_H #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* A parsed directive. */ typedef struct { const wchar_t* dir_start; const wchar_t* dir_end; int flags; const wchar_t* width_start; const wchar_t* width_end; size_t width_arg_index; const wchar_t* precision_start; const wchar_t* precision_end; size_t precision_arg_index; wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */ size_t arg_index; } wchar_t_directive; /* A parsed format string. */ typedef struct { size_t count; wchar_t_directive *dir; size_t max_width_length; size_t max_precision_length; } wchar_t_directives; /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #ifdef STATIC STATIC #else extern #endif int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a); #endif /* _WPRINTF_PARSE_H */ lbreakout2-2.6.5/intl/ref-add.sin0000664000175000017500000000210112140767176013511 00000000000000# Add this package to a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library 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. # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// ta :a s/ @PACKAGE@ / @PACKAGE@ / tb s/ $/ @PACKAGE@ / :b s/^/# Packages using this file:/ } lbreakout2-2.6.5/intl/gmo.h0000664000175000017500000001134512140767176012441 00000000000000/* Description of GNU message catalog format: general file layout. Copyright (C) 1995, 1997, 2000-2002, 2004 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 #include /* @@ end of prolog @@ */ /* The magic number of the GNU message catalog format. */ #define _MAGIC 0x950412de #define _MAGIC_SWAPPED 0xde120495 /* Revision number of the currently used .mo (binary) file format. */ #define MO_REVISION_NUMBER 0 #define MO_REVISION_NUMBER_WITH_SYSDEP_I 1 /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work when cross-compiling. */ #if __STDC__ # define UINT_MAX_32_BITS 4294967295U #else # define UINT_MAX_32_BITS 0xFFFFFFFF #endif /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ #ifndef UINT_MAX # define UINT_MAX UINT_MAX_32_BITS #endif #if UINT_MAX == UINT_MAX_32_BITS typedef unsigned nls_uint32; #else # if USHRT_MAX == UINT_MAX_32_BITS typedef unsigned short nls_uint32; # else # if ULONG_MAX == UINT_MAX_32_BITS typedef unsigned long nls_uint32; # else /* The following line is intended to throw an error. Using #error is not portable enough. */ "Cannot determine unsigned 32-bit data type." # endif # endif #endif /* Header for binary .mo file format. */ struct mo_file_header { /* The magic number. */ nls_uint32 magic; /* The revision number of the file format. */ nls_uint32 revision; /* The following are only used in .mo files with major revision 0 or 1. */ /* The number of strings pairs. */ nls_uint32 nstrings; /* Offset of table with start offsets of original strings. */ nls_uint32 orig_tab_offset; /* Offset of table with start offsets of translated strings. */ nls_uint32 trans_tab_offset; /* Size of hash table. */ nls_uint32 hash_tab_size; /* Offset of first hash table entry. */ nls_uint32 hash_tab_offset; /* The following are only used in .mo files with minor revision >= 1. */ /* The number of system dependent segments. */ nls_uint32 n_sysdep_segments; /* Offset of table describing system dependent segments. */ nls_uint32 sysdep_segments_offset; /* The number of system dependent strings pairs. */ nls_uint32 n_sysdep_strings; /* Offset of table with start offsets of original sysdep strings. */ nls_uint32 orig_sysdep_tab_offset; /* Offset of table with start offsets of translated sysdep strings. */ nls_uint32 trans_sysdep_tab_offset; }; /* Descriptor for static string contained in the binary .mo file. */ struct string_desc { /* Length of addressed string, not including the trailing NUL. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* The following are only used in .mo files with minor revision >= 1. */ /* Descriptor for system dependent string segment. */ struct sysdep_segment { /* Length of addressed string, including the trailing NUL. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* Descriptor for system dependent string. */ struct sysdep_string { /* Offset of static string segments in file. */ nls_uint32 offset; /* Alternating sequence of static and system dependent segments. The last segment is a static segment, including the trailing NUL. */ struct segment_pair { /* Size of static segment. */ nls_uint32 segsize; /* Reference to system dependent string segment, or ~0 at the end. */ nls_uint32 sysdepref; } segments[1]; }; /* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF, regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */ #define SEGMENTS_END ((nls_uint32) ~0) /* @@ begin of epilog @@ */ #endif /* gettext.h */ lbreakout2-2.6.5/intl/eval-plural.h0000664000175000017500000000524312140767176014103 00000000000000/* Plural expression evaluation. Copyright (C) 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #ifndef STATIC #define STATIC static #endif /* Evaluate the plural expression and return an index value. */ STATIC unsigned long int internal_function plural_eval (struct expression *pexp, unsigned long int n) { switch (pexp->nargs) { case 0: switch (pexp->operation) { case var: return n; case num: return pexp->val.num; default: break; } /* NOTREACHED */ break; case 1: { /* pexp->operation must be lnot. */ unsigned long int arg = plural_eval (pexp->val.args[0], n); return ! arg; } case 2: { unsigned long int leftarg = plural_eval (pexp->val.args[0], n); if (pexp->operation == lor) return leftarg || plural_eval (pexp->val.args[1], n); else if (pexp->operation == land) return leftarg && plural_eval (pexp->val.args[1], n); else { unsigned long int rightarg = plural_eval (pexp->val.args[1], n); switch (pexp->operation) { case mult: return leftarg * rightarg; case divide: if (rightarg == 0) raise (SIGFPE); return leftarg / rightarg; case module: if (rightarg == 0) raise (SIGFPE); return leftarg % rightarg; case plus: return leftarg + rightarg; case minus: return leftarg - rightarg; case less_than: return leftarg < rightarg; case greater_than: return leftarg > rightarg; case less_or_equal: return leftarg <= rightarg; case greater_or_equal: return leftarg >= rightarg; case equal: return leftarg == rightarg; case not_equal: return leftarg != rightarg; default: break; } } /* NOTREACHED */ break; } case 3: { /* pexp->operation must be qmop. */ unsigned long int boolarg = plural_eval (pexp->val.args[0], n); return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); } } /* NOTREACHED */ return 0; } lbreakout2-2.6.5/intl/relocatable.h0000664000175000017500000000523512140767176014135 00000000000000/* Provide relocatable packages. Copyright (C) 2003 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _RELOCATABLE_H #define _RELOCATABLE_H #ifdef __cplusplus extern "C" { #endif /* This can be enabled through the configure --enable-relocatable option. */ #if ENABLE_RELOCATABLE /* When building a DLL, we must export some functions. Note that because this is a private .h file, we don't need to use __declspec(dllimport) in any case. */ #if defined _MSC_VER && BUILDING_DLL # define RELOCATABLE_DLL_EXPORTED __declspec(dllexport) #else # define RELOCATABLE_DLL_EXPORTED #endif /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ extern RELOCATABLE_DLL_EXPORTED void set_relocation_prefix (const char *orig_prefix, const char *curr_prefix); /* Returns the pathname, relocated according to the current installation directory. */ extern const char * relocate (const char *pathname); /* Memory management: relocate() leaks memory, because it has to construct a fresh pathname. If this is a problem because your program calls relocate() frequently, think about caching the result. */ /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular file, and the current pathname of this file. Returns NULL upon failure. */ extern const char * compute_curr_prefix (const char *orig_installprefix, const char *orig_installdir, const char *curr_pathname); #else /* By default, we use the hardwired pathnames. */ #define relocate(pathname) (pathname) #endif #ifdef __cplusplus } #endif #endif /* _RELOCATABLE_H */ lbreakout2-2.6.5/intl/gettext.c0000664000175000017500000000355012140767176013335 00000000000000/* Implementation of gettext(3) function. Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext # define DCGETTEXT INTUSE(__dcgettext) #else # define GETTEXT libintl_gettext # define DCGETTEXT libintl_dcgettext #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * GETTEXT (const char *msgid) { return DCGETTEXT (NULL, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__gettext, gettext); #endif lbreakout2-2.6.5/INSTALL0000664000175000017500000001547212140767214011567 00000000000000Basic Installation ================== These are generic installation instructions. 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, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). 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 at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' 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. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Type `make install' to install the programs and any data files and documentation. 4. You can remove the program binaries and object files from the source code directory by typing `make clean'. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure 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 must use a version of `make' that supports the `VPATH' variable, such as 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 `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. 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' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM 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 host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. 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. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. lbreakout2-2.6.5/lbreakout2.desktop.in0000664000175000017500000000021312140767214014573 00000000000000[Desktop Entry] Name=LBreakout2 Comment=A ball-and-paddle game with nice graphics. Exec=lbreakout2 Icon= Type=Application Categories=Game; lbreakout2-2.6.5/COPYING0000664000175000017500000003543312140767214011570 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS lbreakout2-2.6.5/config.sub0000775000175000017500000007470712140767214012527 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-06-24' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | msp430-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: lbreakout2-2.6.5/configure0000775000175000017500000113101512610471344012434 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 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=: # Pre-4.2 versions of Zsh do 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_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } 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.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= 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 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_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 || $as_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" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # 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 as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # 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" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac 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 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # 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'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/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= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="Makefile.am" # 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_header_list= ac_subst_vars='LTLIBOBJS LIBOBJS appname win32_inst_script arch_flag win32_deps locdir_flag hi_dir inst_dir hi_inst_flag inst_flag netdebug_flag sdlnet_lib_flag sdlnet_flag network_flag doc_dir mixer_flag audio_flag warp_flag SDL_LIBS SDL_CFLAGS SDL_CONFIG POSUB LTLIBINTL LIBINTL INTLLIBS INTL_LIBTOOL_SUFFIX_PREFIX INTLOBJS GENCAT INSTOBJEXT DATADIRNAME CATOBJEXT USE_INCLUDED_LIBINTL BUILD_INCLUDED_LIBINTL INTLBISON LTLIBICONV LIBICONV HAVE_WPRINTF HAVE_SNPRINTF HAVE_ASPRINTF HAVE_POSIX_PRINTF GLIBC21 ALLOCA RANLIB MSGMERGE XGETTEXT GMSGFMT MSGFMT USE_NLS MKINSTALLDIRS am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking enable_nls with_gnu_ld enable_rpath with_libiconv_prefix with_included_gettext with_libintl_prefix with_sdl_prefix with_sdl_exec_prefix enable_sdltest enable_warp enable_audio with_docdir enable_network enable_sdl_net enable_netdebug enable_install ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # 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}' 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= ;; *) 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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=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_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=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 ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_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'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. 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 # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" 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 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 .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # 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 -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | 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 .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" 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 this package 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/PACKAGE] --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 System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --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 --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --disable-sdltest Do not try to compile and run a test SDL program --enable-warp Enable mouse warp (for BeOS and Mac) --disable-audio Disables Audio --disable-network No network support. --enable-sdl-net Use SDL_Net for networking. --enable-netdebug Enable net packet debugging. --disable-install No installation. Played from the source directory. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-included-gettext use the GNU gettext library included here --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-sdl-prefix=PFX Prefix where SDL is installed (optional) --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) --with-docdir=DPATH Directory where documentation is saved. 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 (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory 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. Report bugs to the package provider. _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" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && 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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_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 $as_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 configure generated by GNU Autoconf 2.69 Copyright (C) 2012 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 ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" 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 eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* 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 $2 (); /* 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_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 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 $as_me, which was generated by GNU Autoconf 2.69. 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=. $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append 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 as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset 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 $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" 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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; 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 $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_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'; as_fn_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 $as_echo "/* confdefs.h */" > 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 cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } 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. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # 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,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_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 # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_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. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## 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_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 as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 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. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$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" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM 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. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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 | *.dSYM | *.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 if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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 | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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 | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg 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) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : 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_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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then 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" as_fn_executable_p "$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 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_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 as_fn_arith $ac_count + 1 && ac_count=$as_val 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 if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then 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" as_fn_executable_p "$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 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_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 as_fn_arith $ac_count + 1 && ac_count=$as_val 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 if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h 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=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h ac_config_headers="$ac_config_headers config.h" am__api_version="1.9" # 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. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$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 rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$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' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&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". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "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 $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # 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= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 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. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_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 # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 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=lbreakout2 VERSION=2.6.5 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-"$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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(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 -' depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&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/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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$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 MKINSTALLDIRS= if test -n "$ac_aux_dir"; then case "$ac_aux_dir" in /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; esac fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } # Prepare PATH_SEPARATOR. # 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Prepare PATH_SEPARATOR. # 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po # Prepare PATH_SEPARATOR. # 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$GMSGFMT" != ":"; then if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 $as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; } GMSGFMT=":" fi fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi rm -f messages.po fi ac_config_commands="$ac_config_commands default-1" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror in -lcposix" >&5 $as_echo_n "checking for strerror in -lcposix... " >&6; } if ${ac_cv_lib_cposix_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 strerror (); int main () { return strerror (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_cposix_strerror=yes else ac_cv_lib_cposix_strerror=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cposix_strerror" >&5 $as_echo "$ac_cv_lib_cposix_strerror" >&6; } if test "x$ac_cv_lib_cposix_strerror" = xyes; then : LIBS="$LIBS -lcposix" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* 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 sort of thing. */ char tx; char *t = &tx; 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 sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; 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 if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signed" >&5 $as_echo_n "checking for signed... " >&6; } if ${bh_cv_c_signed+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { signed char x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bh_cv_c_signed=yes else bh_cv_c_signed=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bh_cv_c_signed" >&5 $as_echo "$bh_cv_c_signed" >&6; } if test $bh_cv_c_signed = no; then $as_echo "#define signed /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long" >&5 $as_echo_n "checking for long long... " >&6; } if ${ac_cv_type_long_long+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ long long ll = 1LL; int i = 63; int main () { long long llmax = (long long) -1; return ll << i | ll >> i | llmax / ll | llmax % ll; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_type_long_long=yes else ac_cv_type_long_long=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long" >&5 $as_echo "$ac_cv_type_long_long" >&6; } if test $ac_cv_type_long_long = yes; then $as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5 $as_echo_n "checking for long double... " >&6; } if ${gt_cv_c_long_double+:} false; then : $as_echo_n "(cached) " >&6 else if test "$GCC" = yes; then gt_cv_c_long_double=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* The Stardent Vistra knows sizeof(long double), but does not support it. */ long double foo = 0.0; /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ int array [2*(sizeof(long double) >= sizeof(double)) - 1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_long_double=yes else gt_cv_c_long_double=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_long_double" >&5 $as_echo "$gt_cv_c_long_double" >&6; } if test $gt_cv_c_long_double = yes; then $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if ${gt_cv_c_wchar_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wchar_t=yes else gt_cv_c_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 $as_echo "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 $as_echo_n "checking for wint_t... " >&6; } if ${gt_cv_c_wint_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wint_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wint_t=yes else gt_cv_c_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 $as_echo "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then $as_echo "#define HAVE_WINT_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 $as_echo_n "checking for inttypes.h... " >&6; } if ${jm_ac_cv_header_inttypes_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : jm_ac_cv_header_inttypes_h=yes else jm_ac_cv_header_inttypes_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $jm_ac_cv_header_inttypes_h" >&5 $as_echo "$jm_ac_cv_header_inttypes_h" >&6; } if test $jm_ac_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H_WITH_UINTMAX 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 $as_echo_n "checking for stdint.h... " >&6; } if ${jm_ac_cv_header_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : jm_ac_cv_header_stdint_h=yes else jm_ac_cv_header_stdint_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $jm_ac_cv_header_stdint_h" >&5 $as_echo "$jm_ac_cv_header_stdint_h" >&6; } if test $jm_ac_cv_header_stdint_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H_WITH_UINTMAX 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 $as_echo_n "checking for intmax_t... " >&6; } if ${gt_cv_c_intmax_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif int main () { intmax_t x = -1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_intmax_t=yes else gt_cv_c_intmax_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 $as_echo "$gt_cv_c_intmax_t" >&6; } if test $gt_cv_c_intmax_t = yes; then $as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5 $as_echo_n "checking whether printf() supports POSIX/XSI format strings... " >&6; } if ${gt_cv_func_printf_posix+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ notposix #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "notposix" >/dev/null 2>&1; then : gt_cv_func_printf_posix="guessing no" else gt_cv_func_printf_posix="guessing yes" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gt_cv_func_printf_posix=yes else gt_cv_func_printf_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5 $as_echo "$gt_cv_func_printf_posix" >&6; } case $gt_cv_func_printf_posix in *yes) $as_echo "#define HAVE_POSIX_PRINTF 1" >>confdefs.h ;; esac # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2.1 or newer" >&5 $as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; } if ${ac_cv_gnu_library_2_1+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then : ac_cv_gnu_library_2_1=yes else ac_cv_gnu_library_2_1=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 $as_echo "$ac_cv_gnu_library_2_1" >&6; } GLIBC21="$ac_cv_gnu_library_2_1" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5 $as_echo_n "checking whether integer division by zero raises SIGFPE... " >&6; } if ${gt_cv_int_divbyzero_sigfpe+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : # Guess based on the CPU. case "$host_cpu" in alpha* | i3456786 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include static void #ifdef __cplusplus sigfpe_handler (int sig) #else sigfpe_handler (sig) int sig; #endif { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gt_cv_int_divbyzero_sigfpe=yes else gt_cv_int_divbyzero_sigfpe=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5 $as_echo "$gt_cv_int_divbyzero_sigfpe" >&6; } case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac cat >>confdefs.h <<_ACEOF #define INTDIV0_RAISES_SIGFPE $value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long" >&5 $as_echo_n "checking for unsigned long long... " >&6; } if ${ac_cv_type_unsigned_long_long+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ unsigned long long ull = 1ULL; int i = 63; int main () { unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_type_unsigned_long_long=yes else ac_cv_type_unsigned_long_long=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long" >&5 $as_echo "$ac_cv_type_unsigned_long_long" >&6; } if test $ac_cv_type_unsigned_long_long = yes; then $as_echo "#define HAVE_UNSIGNED_LONG_LONG 1" >>confdefs.h fi if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then test $ac_cv_type_unsigned_long_long = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' cat >>confdefs.h <<_ACEOF #define uintmax_t $ac_type _ACEOF else $as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 $as_echo_n "checking for inttypes.h... " >&6; } if ${gt_cv_header_inttypes_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_header_inttypes_h=yes else gt_cv_header_inttypes_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_header_inttypes_h" >&5 $as_echo "$gt_cv_header_inttypes_h" >&6; } if test $gt_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H 1 _ACEOF fi if test $gt_cv_header_inttypes_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 $as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } if ${gt_cv_inttypes_pri_broken+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef PRId32 char *p = PRId32; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_inttypes_pri_broken=no else gt_cv_inttypes_pri_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 $as_echo "$gt_cv_inttypes_pri_broken" >&6; } fi if test "$gt_cv_inttypes_pri_broken" = yes; then cat >>confdefs.h <<_ACEOF #define PRI_MACROS_BROKEN 1 _ACEOF fi for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 $as_echo_n "checking for SIZE_MAX... " >&6; } result= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Found it" >/dev/null 2>&1; then : result=yes fi rm -f conftest* if test -z "$result"; then if ac_fn_c_compute_int "$LINENO" "~(size_t)0 / 10" "res_hi" "#include "; then : else result=? fi if ac_fn_c_compute_int "$LINENO" "~(size_t)0 % 10" "res_lo" "#include "; then : else result=? fi if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include "; then : else result=? fi if test "$fits_in_uint" = 1; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern size_t foo; extern unsigned long foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : fits_in_uint=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test -z "$result"; then if test "$fits_in_uint" = 1; then result="$res_hi$res_lo"U else result="$res_hi$res_lo"UL fi else result='~(size_t)0' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 $as_echo "$result" >&6; } if test "$result" != yes; then cat >>confdefs.h <<_ACEOF #define SIZE_MAX $result _ACEOF fi for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # 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 ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBICONV= LTLIBICONV= INCICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : else $as_echo "#define ptrdiff_t long" >>confdefs.h fi for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in asprintf fwprintf getcwd getegid geteuid getgid getuid \ mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \ strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \ __fsetlocking do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _snprintf is declared" >&5 $as_echo_n "checking whether _snprintf is declared... " >&6; } if ${ac_cv_have_decl__snprintf+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _snprintf char *p = (char *) _snprintf; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl__snprintf=yes else ac_cv_have_decl__snprintf=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl__snprintf" >&5 $as_echo "$ac_cv_have_decl__snprintf" >&6; } if test $ac_cv_have_decl__snprintf = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNPRINTF $gt_value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _snwprintf is declared" >&5 $as_echo_n "checking whether _snwprintf is declared... " >&6; } if ${ac_cv_have_decl__snwprintf+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _snwprintf char *p = (char *) _snwprintf; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl__snwprintf=yes else ac_cv_have_decl__snwprintf=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl__snwprintf" >&5 $as_echo "$ac_cv_have_decl__snwprintf" >&6; } if test $ac_cv_have_decl__snwprintf = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNWPRINTF $gt_value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether feof_unlocked is declared" >&5 $as_echo_n "checking whether feof_unlocked is declared... " >&6; } if ${ac_cv_have_decl_feof_unlocked+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef feof_unlocked char *p = (char *) feof_unlocked; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl_feof_unlocked=yes else ac_cv_have_decl_feof_unlocked=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_feof_unlocked" >&5 $as_echo "$ac_cv_have_decl_feof_unlocked" >&6; } if test $ac_cv_have_decl_feof_unlocked = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FEOF_UNLOCKED $gt_value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fgets_unlocked is declared" >&5 $as_echo_n "checking whether fgets_unlocked is declared... " >&6; } if ${ac_cv_have_decl_fgets_unlocked+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef fgets_unlocked char *p = (char *) fgets_unlocked; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl_fgets_unlocked=yes else ac_cv_have_decl_fgets_unlocked=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_fgets_unlocked" >&5 $as_echo "$ac_cv_have_decl_fgets_unlocked" >&6; } if test $ac_cv_have_decl_fgets_unlocked = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FGETS_UNLOCKED $gt_value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getc_unlocked is declared" >&5 $as_echo_n "checking whether getc_unlocked is declared... " >&6; } if ${ac_cv_have_decl_getc_unlocked+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef getc_unlocked char *p = (char *) getc_unlocked; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl_getc_unlocked=yes else ac_cv_have_decl_getc_unlocked=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_getc_unlocked" >&5 $as_echo "$ac_cv_have_decl_getc_unlocked" >&6; } if test $ac_cv_have_decl_getc_unlocked = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETC_UNLOCKED $gt_value _ACEOF case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if ${am_cv_proto_iconv+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- }$am_cv_proto_iconv" >&5 $as_echo "${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if ${am_cv_langinfo_codeset+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_langinfo_codeset=yes else am_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 $as_echo "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi for ac_prog in bison do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_INTLBISON+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$INTLBISON"; then ac_cv_prog_INTLBISON="$INTLBISON" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_INTLBISON="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi INTLBISON=$ac_cv_prog_INTLBISON if test -n "$INTLBISON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5 $as_echo "$INTLBISON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$INTLBISON" && break done if test -z "$INTLBISON"; then ac_verc_fail=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5 $as_echo_n "checking version of bison... " >&6; } ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 $as_echo "$ac_prog_version" >&6; } fi if test $ac_verc_fail = yes; then INTLBISON=: fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no LIBINTL= LTLIBINTL= POSUB= if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5 $as_echo_n "checking whether included gettext is requested... " >&6; } # Check whether --with-included-gettext was given. if test "${with_included_gettext+set}" = set; then : withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval else nls_cv_force_use_gnu_gettext=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5 $as_echo "$nls_cv_force_use_gnu_gettext" >&6; } nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if ${gt_cv_func_gnugettext1_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_gnugettext1_libc=yes else gt_cv_func_gnugettext1_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libc" >&5 $as_echo "$gt_cv_func_gnugettext1_libc" >&6; } if test "$gt_cv_func_gnugettext1_libc" != "yes"; then use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBINTL= LTLIBINTL= INCINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if ${gt_cv_func_gnugettext1_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (); int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_gnugettext1_libintl=yes else gt_cv_func_gnugettext1_libintl=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (); int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext1_libintl=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libintl" >&5 $as_echo "$gt_cv_func_gnugettext1_libintl" >&6; } fi if test "$gt_cv_func_gnugettext1_libc" = "yes" \ || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test "$gt_use_preinstalled_gnugettext" != "yes"; then nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV" LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then CATOBJEXT=.gmo fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi nls_cv_header_intl= nls_cv_header_libgt= DATADIRNAME=share INSTOBJEXT=.mo GENCAT=gencat if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi INTL_LIBTOOL_SUFFIX_PREFIX= INTLLIBS="$LIBINTL" 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$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" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg 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) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5 $as_echo_n "checking for main in -lm... " >&6; } if ${ac_cv_lib_m_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_main=yes else ac_cv_lib_m_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5 $as_echo "$ac_cv_lib_m_main" >&6; } if test "x$ac_cv_lib_m_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" else as_fn_error $? "lib math is needed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lz" >&5 $as_echo_n "checking for main in -lz... " >&6; } if ${ac_cv_lib_z_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_main=yes else ac_cv_lib_z_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_main" >&5 $as_echo "$ac_cv_lib_z_main" >&6; } if test "x$ac_cv_lib_z_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" else as_fn_error $? "libz is needed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpng" >&5 $as_echo_n "checking for main in -lpng... " >&6; } if ${ac_cv_lib_png_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpng $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_png_main=yes else ac_cv_lib_png_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_main" >&5 $as_echo "$ac_cv_lib_png_main" >&6; } if test "x$ac_cv_lib_png_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPNG 1 _ACEOF LIBS="-lpng $LIBS" else as_fn_error $? "libpng is needed" "$LINENO" 5 fi # Check whether --with-sdl-prefix was given. if test "${with_sdl_prefix+set}" = set; then : withval=$with_sdl_prefix; sdl_prefix="$withval" else sdl_prefix="" fi # Check whether --with-sdl-exec-prefix was given. if test "${with_sdl_exec_prefix+set}" = set; then : withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" else sdl_exec_prefix="" fi # Check whether --enable-sdltest was given. if test "${enable_sdltest+set}" = set; then : enableval=$enable_sdltest; else enable_sdltest=yes fi if test x$sdl_exec_prefix != x ; then sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_args="$sdl_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi PATH="$prefix/bin:$prefix/usr/bin:$PATH" # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SDL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SDL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_SDL_CONFIG="$SDL_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" ;; esac fi SDL_CONFIG=$ac_cv_path_SDL_CONFIG if test -n "$SDL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5 $as_echo "$SDL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi min_sdl_version=1.2.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5 $as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; } no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" rm -f conf.sdltest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_sdl=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main int main () { return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" as_fn_error $? "lib SDL is needed" "$LINENO" 5 fi rm -f conf.sdltest CFLAGS="-Wall $CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" warp_flag="" # Check whether --enable-warp was given. if test "${enable_warp+set}" = set; then : enableval=$enable_warp; warp_flag="-DMOUSE_WARP" fi audio_flag="-DAUDIO_ENABLED" mixer_flag="-lSDL_mixer" # Check whether --enable-audio was given. if test "${enable_audio+set}" = set; then : enableval=$enable_audio; audio_flag=""; mixer_flag="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lSDL_mixer" >&5 $as_echo_n "checking for main in -lSDL_mixer... " >&6; } if ${ac_cv_lib_SDL_mixer_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSDL_mixer $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_SDL_mixer_main=yes else ac_cv_lib_SDL_mixer_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_SDL_mixer_main" >&5 $as_echo "$ac_cv_lib_SDL_mixer_main" >&6; } if test "x$ac_cv_lib_SDL_mixer_main" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"SDL_Mixer found\"" >&5 $as_echo "\"SDL_Mixer found\"" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"SDL_Mixer NOT found \(http://libsdl.org\): Audio disabled\"" >&5 $as_echo "\"SDL_Mixer NOT found \(http://libsdl.org\): Audio disabled\"" >&6; }; audio_flag=""; mixer_flag="" fi doc_dir=$docdir # Check whether --with-docdir was given. if test "${with_docdir+set}" = set; then : withval=$with_docdir; doc_dir="$withval" fi network_flag="-DNETWORK_ENABLED" # Check whether --enable-network was given. if test "${enable_network+set}" = set; then : enableval=$enable_network; network_flag="" fi sdlnet_flag="" sdlnet_lib_flag="" # Check whether --enable-sdl-net was given. if test "${enable_sdl_net+set}" = set; then : enableval=$enable_sdl_net; sdlnet_flag="-DSDL_NET_ENABLED"; sdlnet_lib_flag="-lSDL_net" fi if test "$sdlnet_flag" == "-DSDL_NET_ENABLED" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lSDL_net" >&5 $as_echo_n "checking for main in -lSDL_net... " >&6; } if ${ac_cv_lib_SDL_net_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSDL_net $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_SDL_net_main=yes else ac_cv_lib_SDL_net_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_SDL_net_main" >&5 $as_echo "$ac_cv_lib_SDL_net_main" >&6; } if test "x$ac_cv_lib_SDL_net_main" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"SDL_net found\"" >&5 $as_echo "\"SDL_net found\"" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"SDL_net NOT found \(http://libsdl.org\): Networking disabled\"" >&5 $as_echo "\"SDL_net NOT found \(http://libsdl.org\): Networking disabled\"" >&6; }; sdlnet_flag=""; sdlnet_lib_flag=""; network_flag="" fi fi netdebug_flag="" # Check whether --enable-netdebug was given. if test "${enable_netdebug+set}" = set; then : enableval=$enable_netdebug; netdebug_flag="-DNET_DEBUG_MSG" fi localedir=$datadir/locale locdir_flag="-DLOCALEDIR=\\\"$localedir\\\"" inst_dir="$datadir/lbreakout2" hi_dir=$localstatedir # Check whether --enable-install was given. if test "${enable_install+set}" = set; then : enableval=$enable_install; inst_dir="." hi_dir="." locdir_flag="-DLOCALEDIR=\\\"../dict\\\"" rm -rf dict; mkdir dict for lang in `cat po/LINGUAS`; do mkdir dict/$lang; mkdir dict/$lang/LC_MESSAGES ln -s ../../../po/$lang.gmo dict/$lang/LC_MESSAGES/$PACKAGE.mo done fi inst_flag="-DSRC_DIR=\\\"$inst_dir\\\"" hi_inst_flag="-DHI_DIR=\\\"$hi_dir\\\"" case "$host" in *-mingw32) win32="yes" win32_inst_script="`pwd -W`/installer.iss" arch_flag="-march=i586" win32_deps="lbreakout2res.o" ;; *) win32="no" win32_inst_script="" arch_flag="" win32_deps="" ;; esac if test "x$win32" = xyes; then 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done fi appname="LBreakout2" ac_config_files="$ac_config_files Makefile docs/Makefile common/Makefile game/Makefile gui/Makefile client/Makefile client/gui_theme/Makefile client/gfx/Makefile client/gfx/AbsoluteB/Makefile client/gfx/Oz/Makefile client/gfx/Moiree/Makefile client/gfx/Classic/Makefile client/sounds/Makefile client/levels/Makefile server/Makefile server/levels/Makefile intl/Makefile po/Makefile.in m4/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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; 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 if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_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= U= 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=`$as_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. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $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} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## 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=: # Pre-4.2 versions of Zsh do 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_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } 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.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= 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 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # 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 ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac 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 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_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 || $as_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" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=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 $as_me, which was generated by GNU Autoconf 2.69. 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 case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # 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_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent 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 the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 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' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. 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=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= 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 ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_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. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append 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 || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # 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" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "common/Makefile") CONFIG_FILES="$CONFIG_FILES common/Makefile" ;; "game/Makefile") CONFIG_FILES="$CONFIG_FILES game/Makefile" ;; "gui/Makefile") CONFIG_FILES="$CONFIG_FILES gui/Makefile" ;; "client/Makefile") CONFIG_FILES="$CONFIG_FILES client/Makefile" ;; "client/gui_theme/Makefile") CONFIG_FILES="$CONFIG_FILES client/gui_theme/Makefile" ;; "client/gfx/Makefile") CONFIG_FILES="$CONFIG_FILES client/gfx/Makefile" ;; "client/gfx/AbsoluteB/Makefile") CONFIG_FILES="$CONFIG_FILES client/gfx/AbsoluteB/Makefile" ;; "client/gfx/Oz/Makefile") CONFIG_FILES="$CONFIG_FILES client/gfx/Oz/Makefile" ;; "client/gfx/Moiree/Makefile") CONFIG_FILES="$CONFIG_FILES client/gfx/Moiree/Makefile" ;; "client/gfx/Classic/Makefile") CONFIG_FILES="$CONFIG_FILES client/gfx/Classic/Makefile" ;; "client/sounds/Makefile") CONFIG_FILES="$CONFIG_FILES client/sounds/Makefile" ;; "client/levels/Makefile") CONFIG_FILES="$CONFIG_FILES client/levels/Makefile" ;; "server/Makefile") CONFIG_FILES="$CONFIG_FILES server/Makefile" ;; "server/levels/Makefile") CONFIG_FILES="$CONFIG_FILES server/levels/Makefile" ;; "intl/Makefile") CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; 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= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # 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. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[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="$ac_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 || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append 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 '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; 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 || $as_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"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_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 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # 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= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 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 || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;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 $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_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 "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # 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 || $as_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) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /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 || $as_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 || $as_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; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; "default-1":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # 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 || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi lbreakout2-2.6.5/missing0000775000175000017500000002466612140767214012142 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2003-09-02.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 # 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., 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # 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 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -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' 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 ." ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi 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) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi 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) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi 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*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi 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) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi 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 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` 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 [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -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 [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi 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 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi 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." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # 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: lbreakout2-2.6.5/Makefile.in0000664000175000017500000006333012610471343012574 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure $(top_srcdir)/intl/Makefile.in \ ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS TODO \ config.guess config.rpath config.sub depcomp install-sh \ missing mkinstalldirs subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = intl/Makefile SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-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)$(icondir)" desktopDATA_INSTALL = $(INSTALL_DATA) iconDATA_INSTALL = $(INSTALL_DATA) DATA = $(desktop_DATA) $(icon_DATA) 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@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ SUBDIRS = intl m4 po common gui game server client docs EXTRA_DIST = config.rpath AUTHORS COPYING ChangeLog INSTALL README \ README-SDL.txt TODO lbreakout2.spec touchall lbreakout32.gif \ lbreakout48.gif lbreakout2.desktop.in win32_mancomp win32_preparchive desktopdir = $(datadir)/applications desktop_DATA = lbreakout2.desktop icondir = $(datadir)/icons icon_DATA = lbreakout48.gif WIN32_TEXT = AUTHORS COPYING ChangeLog INSTALL README README-SDL.txt \ TODO lbreakout2.spec ABOUT-NLS WIN32_LOCAL_DLL = SDL.dll SDL_mixer.dll zlib.dll libpng.dll WIN32_SYS_DLL = msvcrt.dll AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 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) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign 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) 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 intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ uninstall-info-am: 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-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) test -z "$(icondir)" || $(mkdir_p) "$(DESTDIR)$(icondir)" @list='$(icon_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(iconDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(icondir)/$$f'"; \ $(iconDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(icondir)/$$f"; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(icondir)/$$f'"; \ rm -f "$(DESTDIR)$(icondir)/$$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" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @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) mkdir $(distdir) $(mkdir_p) $(distdir)/intl $(distdir)/m4 $(distdir)/po @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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" \ 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 $(SHELL) $(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" \ --with-included-gettext \ $(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 '1{h;s/./=/g;p;x;}' -e '$${p;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)$(icondir)"; 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-iconDATA install-exec-am: install-info: install-info-recursive install-man: 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-iconDATA \ uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-recursive ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ dist-tarZ dist-zip distcheck distclean distclean-generic \ distclean-hdr distclean-recursive 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-exec \ install-exec-am install-iconDATA install-info install-info-am \ install-man install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-desktopDATA uninstall-iconDATA uninstall-info-am # We can't use static desktop file because of icon location. Is this # the right way to handle it? At least it works... as long as $datadir # does not contain plus signs. :-) lbreakout2.desktop: @sed -e "s+Icon=+Icon=$(datadir)/icons/lbreakout48.gif+" \ < lbreakout2.desktop.in > lbreakout2.desktop win32text: $(WIN32_TEXT) @echo Converting text files for win32 installer @-rm -rf ./win32text @mkdir ./win32text @for textfile in $(WIN32_TEXT); do \ $(AWK) '{printf "%s\r\n",$$0}' $$textfile > ./win32text/$$textfile ; \ done win32-installer-script: @win32_inst_script@ @win32_inst_script@: win32text @echo Generating win32 installer script @echo "[Setup]" > $@ @echo "AppName=@appname@" >> $@ @echo "AppVerName=@appname@ $(VERSION)" >> $@ @echo "AppPublisher=Michael Speck" >> $@ @echo "AppPublisherURL=http://lgames.sourceforge.net/index.php?project=LBreakout2" >> $@ @echo "AppSupportURL=http://lgames.sourceforge.net/index.php?project=LBreakout2" >> $@ @echo "AppUpdatesURL=http://lgames.sourceforge.net/index.php?project=LBreakout2" >> $@ @echo "DefaultDirName={pf}\\$(PACKAGE)" >> $@ @echo "DefaultGroupName=@appname@" >> $@ @echo "OutputDir=." >> $@ @echo "Uninstallable=yes" >> $@ @echo "AlwaysCreateUninstallIcon=yes" >> $@ @echo "AdminPrivilegesRequired=1" >> $@ @echo "[Tasks]" >> $@ @echo "Name: \"desktopicon\"; Description: \"Create a &desktop icon\"; GroupDescription: \"Additional icons:\"" >> $@ @echo "[Files]" >> $@ @(cd win32dlls; for file in $(WIN32_LOCAL_DLL); do echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\"; CopyMode: alwaysoverwrite" >> $@; done) @(cd win32dlls; for file in $(WIN32_SYS_DLL); do echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{sys}\"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall" >> $@; done) @echo "Source: \"win32text\\*.*\"; DestDir: \"{app}\"; CopyMode: alwaysoverwrite" >> $@; @list='$(SUBDIRS)'; for subdir in $$list; do (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) win32-install-script); done @echo "[Icons]" >> $@ @echo "Name: \"{group}\\@appname@\"; Filename: \"{app}\\$(PACKAGE)$(EXEEXT)\"; WorkingDir: \"{app}\"" >> $@ @echo "Name: \"{group}\\@appname@ Manual\"; Filename: \"{app}\\docs\\index.html\"" >> $@ @echo "Name: \"{userdesktop}\\@appname@\"; Filename: \"{app}\\$(PACKAGE)$(EXEEXT)\"; WorkingDir: \"{app}\"; Tasks: \"desktopicon\"" >> $@ @echo "[Run]" >> $@ @echo "Filename: \"{app}\\$(PACKAGE)$(EXEEXT)\"; Description: \"Launch @appname@\"; Flags: nowait postinstall skipifsilent" >> $@ @$(AWK) '{printf "%s\r\n",$$0}' $@ > installer.iss.w32 @mv installer.iss.w32 $@ win32-installer: win32-installer-script $(ISCC) @win32_inst_script@ @mv setup.exe $(PACKAGE)-$(VERSION)-win32.exe @-rm -rf win32text @echo "Installer created: $(PACKAGE)-$(VERSION)-win32.exe" # 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: lbreakout2-2.6.5/acinclude.m40000664000175000017500000001410712140767214012721 00000000000000# Configure paths for SDL # Sam Lantinga 9/21/99 # stolen from Manish Singh # stolen back from Frank Belew # stolen from Manish Singh # Shamelessly stolen from Owen Taylor dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS dnl AC_DEFUN([AM_PATH_SDL], [dnl dnl Get the cflags and libraries from the sdl-config script dnl AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], sdl_prefix="$withval", sdl_prefix="") AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], sdl_exec_prefix="$withval", sdl_exec_prefix="") AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], , enable_sdltest=yes) if test x$sdl_exec_prefix != x ; then sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_args="$sdl_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi AC_REQUIRE([AC_CANONICAL_TARGET]) PATH="$prefix/bin:$prefix/usr/bin:$PATH" AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH]) min_sdl_version=ifelse([$1], ,0.11.0,$1) AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" dnl dnl Now check if the installed SDL is sufficiently new. (Also sanity dnl checks the results of sdl-config to some extent dnl rm -f conf.sdltest AC_TRY_RUN([ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } ],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" AC_TRY_LINK([ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(SDL_CFLAGS) AC_SUBST(SDL_LIBS) rm -f conf.sdltest ]) lbreakout2-2.6.5/Makefile.am0000664000175000017500000000657612140767214012577 00000000000000SUBDIRS = intl m4 po common gui game server client docs EXTRA_DIST = config.rpath AUTHORS COPYING ChangeLog INSTALL README \ README-SDL.txt TODO lbreakout2.spec touchall lbreakout32.gif \ lbreakout48.gif lbreakout2.desktop.in win32_mancomp win32_preparchive desktopdir = $(datadir)/applications desktop_DATA = lbreakout2.desktop icondir = $(datadir)/icons icon_DATA = lbreakout48.gif WIN32_TEXT = AUTHORS COPYING ChangeLog INSTALL README README-SDL.txt \ TODO lbreakout2.spec ABOUT-NLS WIN32_LOCAL_DLL = SDL.dll SDL_mixer.dll zlib.dll libpng.dll WIN32_SYS_DLL = msvcrt.dll AUTOMAKE_OPTIONS = foreign # We can't use static desktop file because of icon location. Is this # the right way to handle it? At least it works... as long as $datadir # does not contain plus signs. :-) lbreakout2.desktop: @sed -e "s+Icon=+Icon=$(datadir)/icons/lbreakout48.gif+" \ < lbreakout2.desktop.in > lbreakout2.desktop win32text: $(WIN32_TEXT) @echo Converting text files for win32 installer @-rm -rf ./win32text @mkdir ./win32text @for textfile in $(WIN32_TEXT); do \ $(AWK) '{printf "%s\r\n",$$0}' $$textfile > ./win32text/$$textfile ; \ done win32-installer-script: @win32_inst_script@ @win32_inst_script@: win32text @echo Generating win32 installer script @echo "[Setup]" > $@ @echo "AppName=@appname@" >> $@ @echo "AppVerName=@appname@ $(VERSION)" >> $@ @echo "AppPublisher=Michael Speck" >> $@ @echo "AppPublisherURL=http://lgames.sourceforge.net/index.php?project=LBreakout2" >> $@ @echo "AppSupportURL=http://lgames.sourceforge.net/index.php?project=LBreakout2" >> $@ @echo "AppUpdatesURL=http://lgames.sourceforge.net/index.php?project=LBreakout2" >> $@ @echo "DefaultDirName={pf}\\$(PACKAGE)" >> $@ @echo "DefaultGroupName=@appname@" >> $@ @echo "OutputDir=." >> $@ @echo "Uninstallable=yes" >> $@ @echo "AlwaysCreateUninstallIcon=yes" >> $@ @echo "AdminPrivilegesRequired=1" >> $@ @echo "[Tasks]" >> $@ @echo "Name: \"desktopicon\"; Description: \"Create a &desktop icon\"; GroupDescription: \"Additional icons:\"" >> $@ @echo "[Files]" >> $@ @(cd win32dlls; for file in $(WIN32_LOCAL_DLL); do echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\"; CopyMode: alwaysoverwrite" >> $@; done) @(cd win32dlls; for file in $(WIN32_SYS_DLL); do echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{sys}\"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall" >> $@; done) @echo "Source: \"win32text\\*.*\"; DestDir: \"{app}\"; CopyMode: alwaysoverwrite" >> $@; @list='$(SUBDIRS)'; for subdir in $$list; do (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) win32-install-script); done @echo "[Icons]" >> $@ @echo "Name: \"{group}\\@appname@\"; Filename: \"{app}\\$(PACKAGE)$(EXEEXT)\"; WorkingDir: \"{app}\"" >> $@ @echo "Name: \"{group}\\@appname@ Manual\"; Filename: \"{app}\\docs\\index.html\"" >> $@ @echo "Name: \"{userdesktop}\\@appname@\"; Filename: \"{app}\\$(PACKAGE)$(EXEEXT)\"; WorkingDir: \"{app}\"; Tasks: \"desktopicon\"" >> $@ @echo "[Run]" >> $@ @echo "Filename: \"{app}\\$(PACKAGE)$(EXEEXT)\"; Description: \"Launch @appname@\"; Flags: nowait postinstall skipifsilent" >> $@ @$(AWK) '{printf "%s\r\n",$$0}' $@ > installer.iss.w32 @mv installer.iss.w32 $@ win32-installer: win32-installer-script $(ISCC) @win32_inst_script@ @mv setup.exe $(PACKAGE)-$(VERSION)-win32.exe @-rm -rf win32text @echo "Installer created: $(PACKAGE)-$(VERSION)-win32.exe" ACLOCAL_AMFLAGS = -I m4 lbreakout2-2.6.5/AUTHORS0000664000175000017500000000217512140767214011602 00000000000000Michael Speck **** Contributions **** Patch to add a very easy difficulty level for kids. - Zooko Patch to fix the insane speedup of balls after a SLOW/FAST bonus expired that came up in 2.5beta. - Mark Tomich Patch to load all themes from installation path. - Michal Cihar Fixes to make LBreakout run on FreeBSD. - Sammy Mannaert Option for playing with balls above debris and explosions. - Jochen Striepe Fix for input bug in Win32, a better installation system and blinking cursor for editable menu items. - Lee Read Modifications to make LBreakout2 compileable on Win32 with MinGW. - Claudio Chimera Fix for the bug where the bonus floor disappeared to slow on fast machines. - Trevor Spiteri New explosions, various backgrounds, ideas and graphics for extras and bricks: TIME_ADD, DISABLE, EXPLOSIVE_BALL, BONUS/MALUS MAGNET, WEAK BALL, CHAOS BRICK, REGENERATIVE BRICK. - Dante Fix for a bug where balls where attached to the wall instead of the paddle when paddle and brick where hit in the same programme cycle. - Patrick Hohmeyer **** Also thanks to all guys that made suggestions to improve LBreakout2!!! lbreakout2-2.6.5/common/0000777000175000017500000000000012610471363012076 500000000000000lbreakout2-2.6.5/common/net.c0000664000175000017500000005024612140767177012766 00000000000000#include "net.h" #include "../client/lbreakout.h" #include #include #include #include #include #include /* Basic layer for network communication. A single UDP socket * is bound to a port. Received packages are stored in one * global buffer. * Socket addresses are wrapped in a struct called NetAddr to * which raw data may be sent as unreliable datagrams. * * Error/message stream: sys_printf() */ int (*sys_printf)(const char *format, ...) = printf; /* ********** UDP SOCKET ********** */ #ifdef SDL_NET_ENABLED UDPsocket SDL_socket = 0; UDPpacket *SDL_packet = 0; #else int net_socket = -1; #endif NetAddr net_local_addr; NetAddr net_sender_addr; char net_buffer[MAX_MSG_SIZE + PACKET_HEADER_SIZE]; int net_buffer_cur_size = 0; int net_show_drops = 1; #ifdef NET_DEBUG_MSG int net_show_packets = 1; #else int net_show_packets = 0; #endif #ifdef NETWORK_ENABLED #ifndef SDL_NET_ENABLED static void sockaddr_to_netaddr( struct sockaddr *sa, NetAddr *addr ) { struct sockaddr_in *sin; addr->sa = *sa; /* if AF_INET get ip */ if ( sa->sa_family == AF_INET ) { sin = (struct sockaddr_in*)sa; *(int *)&addr->inet_ip = *(int *)&sin->sin_addr; /* wow */ } } static void netaddr_to_sockaddr( NetAddr *addr, struct sockaddr *sa ) { *sa = addr->sa; } /* resolve name but leave port 0 */ static bool resolve_hostname( char *host, struct sockaddr *sa, int *sa_len ) { struct sockaddr_in *sin; struct sockaddr_in6 *sin6; struct hostent *hostlist; /* resolve the host's address via DNS lookup */ if ( ( hostlist = gethostbyname( host ) ) == 0 ) { sys_printf( _("unable to resolve %s: %s\n"), host, strerror( errno) ); return 0; } /* put host address to sa struct. simply use the first resolved address */ *sa_len = sizeof(*sa); memset( sa, 0, *sa_len ); switch ( hostlist->h_addrtype ) { case AF_INET: sin = (struct sockaddr_in*)sa; sin->sin_family = AF_INET; memcpy( &sin->sin_addr, hostlist->h_addr_list[0], hostlist->h_length ); break; case AF_INET6: sin6 = (struct sockaddr_in6*)sa; sin6->sin6_family = AF_INET6; memcpy( &sin6->sin6_addr, hostlist->h_addr_list[0], hostlist->h_length ); break; default: sys_printf( "unable to resolve: address family %i not supported\n", hostlist->h_addrtype ); return 0; } return 1; } static void net_get_local_addr( int port ) { char buf[MAXHOSTNAMELEN]; struct sockaddr_in sa; int sa_len; gethostname(buf, MAXHOSTNAMELEN); buf[MAXHOSTNAMELEN-1] = 0; resolve_hostname( buf, (struct sockaddr*)&sa, &sa_len ); /* port is missing */ sa.sin_port = htons((short)port); sockaddr_to_netaddr( (struct sockaddr *)&sa, &net_local_addr ); } #endif #endif /* open UDP socket */ bool net_init( int port ) { #ifdef NETWORK_ENABLED #ifdef SDL_NET_ENABLED if(SDLNet_Init()==-1) { sys_printf("SDLNet_Init: %s\n", SDLNet_GetError()); return 0; } SDL_socket=SDLNet_UDP_Open(port); if(!SDL_socket) { sys_printf("SDLNet_UDP_Open: %s\n", SDLNet_GetError()); return 0; } SDL_packet = SDLNet_AllocPacket(MAX_MSG_SIZE + PACKET_HEADER_SIZE); if(SDL_packet==0) { sys_printf("cannot allocate packet: out of memory\n" ); return 0; } /* net_local_addr is unset */ net_local_addr.SDL_address.host = 0; net_local_addr.SDL_address.port = 0; return 1; #else struct sockaddr_in sa; int sa_len; int fcntl_args, i, new_args; if ( (net_socket = socket( PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 ) sys_printf( "couldn't create socket: %s\n", strerror(errno) ); else if ( fcntl( net_socket, F_GETFL, &fcntl_args) < 0 ) sys_printf( "couldn't get fcntl args: %s\n", strerror(errno) ); else { new_args = O_NONBLOCK; /* no idea, no idea... fcntl seems to work differently since kernel 2.6 if (fcntl_args&O_APPEND) new_args|=O_APPEND; if (fcntl_args&O_ASYNC) new_args|=O_ASYNC; if (fcntl_args&O_DIRECT) new_args|=O_DIRECT;*/ if ( fcntl( net_socket, F_SETFL, new_args ) < 0 ) sys_printf( "couldn't set fcntl args: %s\n", strerror(errno) ); else { sa_len = sizeof(sa); memset( &sa, 0, sa_len ); sa.sin_family = AF_INET; sa.sin_port = htons((short)port); sa.sin_addr.s_addr = htonl(INADDR_ANY); /* all interfaces */ i = 10; /* try ten successive ports */ while ( bind( net_socket, (struct sockaddr*)&sa, sa_len ) < 0 ) { sys_printf( "binding to port %i failed: %s\n", port, strerror(errno) ); sa.sin_port = htons((short)port++); if ( --i == 0 ) { close( net_socket ); return 0; } } net_get_local_addr( port ); sys_printf( _("UDP socket bound to %s:%i\n"), net_addr_to_string( &net_local_addr ), port ); return 1; } } return 0; #endif #else return 0; #endif } void net_shutdown( void ) { #ifdef NETWORK_ENABLED #ifdef SDL_NET_ENABLED SDLNet_UDP_Close(SDL_socket); SDL_socket = 0; SDLNet_FreePacket(SDL_packet); SDL_packet = 0; SDLNet_Quit(); #else close( net_socket ); sys_printf( "UDP socket closed\n" ); #endif #endif } void net_send_packet( NetAddr *to, int len, void *data ) { #ifdef NETWORK_ENABLED #ifdef SDL_NET_ENABLED SDL_packet->channel = -1; memcpy( SDL_packet->data, data, len ); SDL_packet->len = len; SDL_packet->address = to->SDL_address; SDLNet_UDP_Send(SDL_socket,-1,SDL_packet); #else struct sockaddr sa; /* empty packets are not send */ if ( len == 0 ) { sys_printf( "net_send_packet: null length packet\n" ); return; } netaddr_to_sockaddr( to, &sa ); if ( sendto( net_socket, data, len, 0, &sa, sizeof(sa) ) < 0 ) { if (errno == EWOULDBLOCK) return; if (errno == ECONNREFUSED) return; sys_printf( "net_send_packet: %s\n", strerror(errno) ); } #endif #endif } bool net_recv_packet( void ) { #ifdef NETWORK_ENABLED int ret; #ifdef SDL_NET_ENABLED ret = SDLNet_UDP_Recv(SDL_socket, SDL_packet); if ( ret == -1 ) { sys_printf("SDLNet_UDP_Recv: %s\n", SDLNet_GetError()); return 0; } if ( ret == 1 ) { memcpy( net_buffer, SDL_packet->data, SDL_packet->len ); net_buffer_cur_size = SDL_packet->len; net_sender_addr.SDL_address = SDL_packet->address; return 1; } net_buffer_cur_size = 0; return 0; #else struct sockaddr sa; socklen_t sa_len = sizeof(sa); ret = recvfrom( net_socket, net_buffer, sizeof(net_buffer), 0, &sa, &sa_len); if (ret == -1) { if (errno == EWOULDBLOCK) return 0; if (errno == ECONNREFUSED) return 0; sys_printf( "net_recv_packet: %s\n", strerror(errno)); return 0; } net_buffer_cur_size = ret; sockaddr_to_netaddr( &sa, &net_sender_addr ); return (ret>0); #endif #else return 0; #endif } /* if host contains trailing :xxxxx 'port' is overwritten */ bool net_build_addr( NetAddr *addr, char *host, int port ) { #ifdef NETWORK_ENABLED char *ptr; #ifndef SDL_NET_ENABLED struct sockaddr sa; int sa_len; #endif if ( (ptr = strchr( host, ':' )) ) { *ptr = 0; port = atoi( ptr+1 ); } #ifdef SDL_NET_ENABLED if ( SDLNet_ResolveHost(&addr->SDL_address, host, port ) == -1 ) { sys_printf("SDLNet_ResolveHost: %s\n", SDLNet_GetError()); return 0; } return 1; #else memset( addr, 0, sizeof( NetAddr ) ); if ( resolve_hostname( host, &sa, &sa_len ) ) { switch ( sa.sa_family ) { case AF_INET: ((struct sockaddr_in*)&sa)->sin_port = htons((short)port); break; case AF_INET6: ((struct sockaddr_in6*)&sa)->sin6_port = htons((short)port); break; default: /* not reached as resolve_hostname allows the same types */ return 0; } sockaddr_to_netaddr( &sa, addr ); return 1; } return 0; #endif #else return 0; #endif } /* compare host and port */ bool net_compare_addr( NetAddr *a1, NetAddr *a2 ) { #ifdef NETWORK_ENABLED #ifdef SDL_NET_ENABLED if ( a1->SDL_address.host == a2->SDL_address.host ) if ( a1->SDL_address.port == a2->SDL_address.port ) return 1; return 0; #else /* by now only AF_INET addresses may be compared */ if ( a1->sa.sa_family == AF_INET && a2->sa.sa_family == AF_INET ) { if ( a1->inet_ip[0] == a2->inet_ip[0] ) if ( a1->inet_ip[1] == a2->inet_ip[1] ) if ( a1->inet_ip[2] == a2->inet_ip[2] ) if ( a1->inet_ip[3] == a2->inet_ip[3] ) if ( ((struct sockaddr_in*)&a1->sa)->sin_port == ((struct sockaddr_in*)&a2->sa)->sin_port ) return 1; return 0; } sys_printf( "only AF_INET addresses may be compared yet\n" ); return 0; #endif #else return 0; #endif } char *net_addr_to_string( NetAddr *_addr ) /* not allocated but static */ { #ifdef NETWORK_ENABLED #ifdef SDL_NET_ENABLED int ip[4]; static char host_ip[64]; char *host; if(!(host=SDLNet_ResolveIP(&_addr->SDL_address))) { //printf("SDLNet_ResolveIP: %s\n", SDLNet_GetError()); ip[0] = _addr->SDL_address.host & 0xff; ip[1] = (_addr->SDL_address.host>>8) & 0xff; ip[2] = (_addr->SDL_address.host>>16) & 0xff; ip[3] = (_addr->SDL_address.host>>24) & 0xff; snprintf( host_ip, 64, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3] ); return host_ip; } return host; #else static char str[64]; int len = 64; struct sockaddr *addr = &_addr->sa; struct sockaddr_in *sin; struct sockaddr_in6 *sin6; /*struct sockaddr_un *sun;*/ str[len-1] = 0; snprintf( str, len, "undefined" ); switch ( addr->sa_family ) { case AF_INET: sin = (struct sockaddr_in*)addr; if ( !inet_ntop( AF_INET, &sin->sin_addr, str, len ) ) { sys_printf( "inet_ntop failed: %s\n", strerror( errno ) ); } break; case AF_INET6: sin6 = (struct sockaddr_in6*)addr; if ( !inet_ntop( AF_INET6, &sin6->sin6_addr, str, len ) ) { sys_printf( "inet_ntop failed: %s\n", strerror( errno ) ); } break; case AF_UNIX: /*sun = (struct sockaddr_un *)addr; if( sun->sun_path[0] == 0 ) { snprintf( str, len, "unknown" ); sys_printf( "net_query_ip: unknown unix path\n" ); } else snprintf( str, sun->sun_path, len );*/ break; default: snprintf( str, len, "unknown" ); break; } return str; #endif #else return 0; #endif } /* ********** MESSAGE ********** */ char *msg_buf = 0; int *msg_buf_cur_size = 0; int msg_buf_max_size = 0; int msg_write_overflow = 0; #ifdef NET_DEBUG_MSG static void msg_print_raw( int len, char *buf ) { int i; for ( i = 0; i < len; i++ ) printf( "%02x ", (unsigned char) buf[i] ); printf( "\n" ); } #endif static char* msg_get_writeable_space( int size ) { if ( *msg_buf_cur_size + size > msg_buf_max_size ) { msg_write_overflow = 1; *msg_buf_cur_size = 0; } return msg_buf + *msg_buf_cur_size; } void msg_begin_writing( char *buf, int *cur_size, int max_size ) { msg_buf = buf; msg_buf_cur_size = cur_size; msg_buf_max_size = max_size; *msg_buf_cur_size = 0; msg_write_overflow = 0; } void msg_write_int8 ( int c ) { char *ptr = msg_get_writeable_space( 1 ); ptr[0] = (char)c; *msg_buf_cur_size += 1; } void msg_write_int16 ( int s ) { char *ptr = msg_get_writeable_space( 2 ); ptr[0] = s & 0xff; ptr[1] = (s>>8) & 0xff; *msg_buf_cur_size += 2; } void msg_write_int32 ( int i ) { char *ptr = msg_get_writeable_space( 4 ); ptr[0] = i & 0xff; ptr[1] = (i>>8) & 0xff; ptr[2] = (i>>16) & 0xff; ptr[3] = (i>>24) & 0xff; *msg_buf_cur_size += 4; } void msg_write_string( char *str ) { char *ptr = msg_get_writeable_space( strlen(str)+1 ); if ( strlen(str)+1 > msg_buf_max_size ) return; /* would cause segfault */ strcpy( ptr, str ); *msg_buf_cur_size += strlen(str)+1; } void msg_printf ( char *format, ... ) { char buf[MAX_MSG_SIZE]; va_list args; va_start( args, format ); vsnprintf( buf, MAX_MSG_SIZE, format, args ); buf[MAX_MSG_SIZE-1] = 0; va_end( args ); msg_write_string( buf ); } void msg_write ( int len, void *data ) { char *ptr = msg_get_writeable_space( len ); if ( len > msg_buf_max_size ) return; /* would cause segfault */ memcpy( ptr, data, len ); *msg_buf_cur_size += len; } int msg_get_max_size() { return msg_buf_max_size; } bool msg_write_failed() { return msg_write_overflow; } int msg_read_exceeded = 0; int msg_read_pos = 0; static char* msg_get_readable_space( int size ) { if ( msg_read_pos + size > net_buffer_cur_size ) { msg_read_exceeded = 1; msg_read_pos = 0; } return net_buffer + msg_read_pos; } bool msg_is_connectionless() { return ( *(int*)net_buffer == 0 ); } void msg_begin_reading() { msg_read_exceeded = 0; msg_read_pos = 0; } void msg_begin_connectionless_reading() { msg_read_exceeded = 0; msg_read_pos = PACKET_HEADER_SIZE; } int msg_read_int8 ( void ) { unsigned char *ptr = (unsigned char*)msg_get_readable_space( 1 ); msg_read_pos += 1; return ptr[0]; } int msg_read_int16( void ) { unsigned char *ptr = (unsigned char*)msg_get_readable_space( 2 ); msg_read_pos += 2; return ptr[0] + (ptr[1]<<8); } int msg_read_int32( void ) { unsigned char *ptr = (unsigned char*)msg_get_readable_space( 4 ); msg_read_pos += 4; return ptr[0] + (ptr[1]<<8) + (ptr[2]<<16) + (ptr[3]<<24); } char* msg_read_string( void ) { static char buf[MAX_MSG_SIZE]; /* can't be bigger including trailing \0 */ char c; int i = 0; while ( 1 ) { c = msg_read_int8(); buf[i++] = c; if ( i == MAX_MSG_SIZE ) break; /* to be sure */ if ( c == 0 ) break; } buf[MAX_MSG_SIZE-1] = 0; return buf; } void msg_read( int len, char *buf ) { char *ptr = msg_get_readable_space( len ); msg_read_pos += len; memcpy( buf, ptr, len ); } bool msg_read_failed( void ) { return msg_read_exceeded; } /* ********** TRANSMISSION ********** */ /* transmit a connectionless message */ void net_transmit_connectionless( NetAddr *addr, int len, char *data ) { int cur_size; char packet[PACKET_HEADER_SIZE + MAX_MSG_SIZE]; memset( packet, 0, PACKET_HEADER_SIZE ); /* connectionless header */ msg_begin_writing( packet + PACKET_HEADER_SIZE, &cur_size, MAX_MSG_SIZE ); msg_write( len, data ); if ( msg_write_failed() ) return; net_send_packet( addr, PACKET_HEADER_SIZE + cur_size, packet ); if ( net_show_packets ) sys_printf( "--> %s: connectionless size=%i\n", net_addr_to_string( addr ), cur_size + PACKET_HEADER_SIZE ); } void socket_init( NetSocket *sock, NetAddr *addr ) { memset( sock, 0, sizeof( NetSocket ) ); sock->remote_addr = *addr; sock->outgoing_id = 1; /* as id 0 means connectionless */ sock->idle_since = time(0); //sys_printf( "%s: socket initiated\n", net_addr_to_string( addr ) ); } void socket_reinit( NetSocket *socket ) /* with same address */ { NetAddr addr = socket->remote_addr; socket_init( socket, &addr ); } void socket_print_stats( NetSocket *sock ) { sys_printf ( "%s: STATISTICS\n drops: %i(%i packets)\n %i good packets\n", net_addr_to_string( &sock->remote_addr ), sock->drop_count, sock->dropped_packet_count, sock->good_packet_count ); } /* transmit CODE_RED/BLUE message and re-transmit dropped CODE_RED messages. * length 0 messages are not transmitted. re-transmission of CODE_RED messages * is handled in any case */ void socket_transmit( NetSocket *sock, int code, int len, char *data ) { char packet[PACKET_HEADER_SIZE + MAX_MSG_SIZE]; int is_code_red = 0, cur_size = 0; /* do not use sockets with fatal error */ if ( sock->fatal_error ) return; /* add code red message to buffer */ if ( code == CODE_RED ) { if ( sock->code_red_buf_cur_size + len > MAX_MSG_SIZE ) { sock->fatal_error = 1; /* overflowed */ return; } memcpy( sock->code_red_buf + sock->code_red_buf_cur_size, data, len ); sock->code_red_buf_cur_size += len; /* do not send the message if waiting for a receipt */ if ( sock->outgoing_code_red > 0 && !sock->retransmit_code_red_buf ) return; else is_code_red = 1; } if ( sock->retransmit_code_red_buf ) is_code_red = 1; msg_begin_writing( packet, &cur_size, PACKET_HEADER_SIZE + MAX_MSG_SIZE ); msg_write_int32( sock->outgoing_id | (is_code_red<<31) ); msg_write_int32( sock->incoming_code_red ); if ( is_code_red ) sock->outgoing_code_red = sock->outgoing_id; sock->outgoing_id++; /* if code red buffer was not received resend it and clear the flag. * if not waiting for a receipt (thus an initial code red message) * send it as well */ if ( is_code_red ) { msg_write( sock->code_red_buf_cur_size, sock->code_red_buf ); sock->retransmit_code_red_buf = 0; } /* add code blue packet if space is left */ if ( code == CODE_BLUE && cur_size + len <= msg_get_max_size() ) msg_write( len, data ); /* no data? */ if ( cur_size == PACKET_HEADER_SIZE ) return; /* send packet */ net_send_packet( &sock->remote_addr, cur_size, packet ); #ifdef NET_DEBUG_MSG printf( "OUT: "); msg_print_raw( cur_size, packet ); #endif if ( net_show_packets ) sys_printf( "--> %s: out=%i(%s) size=%i in=%i(RED:%i)\n", net_addr_to_string( &sock->remote_addr ), sock->outgoing_id-1, is_code_red?"RED":"BLUE", cur_size, sock->incoming_id, sock->incoming_code_red ); } /* update socker by net_packet header if net_sender_addr is sock.remote_addr * and set read pointer to packet payload. if false is returned packet is * not parsed. */ bool socket_process_header( NetSocket *sock ) { int id, is_code_red, last_ack_code_red, drops = 0; /* do not process fatal socks */ if ( sock->fatal_error ) return 0; /* correct sock? */ if ( !net_compare_addr( &net_sender_addr, &sock->remote_addr ) ) return 0; #ifdef NET_DEBUG_MSG printf( " IN: " ); msg_print_raw( net_buffer_cur_size, net_buffer ); #endif /* read header */ msg_begin_reading(); id = msg_read_int32(); /* new incoming id, the difference to sock->incoming_id is the number of dropped packets */ is_code_red = id >> 31; /* highest bit tells wether code red packet */ id &= ~(1<<31); last_ack_code_red = msg_read_int32(); /* last code red packet remote received */ /* duplicated packets are not handled */ if ( id <= sock->incoming_id ) { if ( net_show_drops ) sys_printf( "%s: out of order packet %i at %i\n", net_addr_to_string( &sock->remote_addr ), id, sock->incoming_id ); return 0; } /* despite dropped packets this packet is handled */ if ( id > sock->incoming_id+1 ) { drops = id - (sock->incoming_id+1); sock->dropped_packet_count += drops; sock->drop_count++; if ( net_show_drops ) sys_printf( "%s: dropped %i packets at %i\n", net_addr_to_string( &sock->remote_addr ), drops, sock->incoming_id+1 ); } sock->good_packet_count++; sock->incoming_id = id; /* last incoming packet (no matter wether red or blue) */ if ( is_code_red ) sock->incoming_code_red = id; /* last code red packet socket received */ if ( sock->outgoing_code_red ) { if ( sock->outgoing_code_red == last_ack_code_red ) { /* was received so we can clear code_red buffer */ sock->outgoing_code_red = 0; sock->code_red_buf_cur_size = 0; } else if ( sock->outgoing_code_red > last_ack_code_red ) { /* resend code_red buffer as it was dropped */ sock->retransmit_code_red_buf = 1; } else { /* fatal error occured as remote received a newer code red packet * although we had no receipt for the current one */ sock->fatal_error = 1; } } sock->idle_since = time(0); /* reset idle time stamp */ /* if packet is empty mark it as unreadable */ if ( msg_read_pos == net_buffer_cur_size ) return 0; return 1; } lbreakout2-2.6.5/common/parser.h0000664000175000017500000001412212140767177013472 00000000000000/*************************************************************************** parser.h - description ------------------- begin : Sat Mar 9 2002 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __PARSER_H #define __PARSER_H #include "list.h" #include /* ==================================================================== This module provides functions to parse ASCII data from strings and files. Synopsis: groupname entry1 .. entryX variable value A group entry may either be a variable or a group (interlacing). A variable value may either be a single token or a list of tokens enclosed by . Text enclosed by ".." is counted as a single token. ==================================================================== */ /* ==================================================================== Symbols. Note: These symbols are ignored when found in a token "" as they belong to this token then. PARSER_GROUP_BEGIN: PARSER_GROUP_END: PARSER_SET: PARSER_LIST_BEGIN: PARSER_LIST_END: PARSER_COMMENT_BEGIN: PARSER_COMMENT_END: PARSER_SYMBOLS: List of all symbols + whitespace used to split strings and tokens. PARSER_SKIP_SYMBOLS: text bewteen these two symbols is handled as comment and therefore completely ignored ==================================================================== */ #define PARSER_GROUP_BEGIN '{' #define PARSER_GROUP_END '}' #define PARSER_SET '=' #define PARSER_LIST_BEGIN '(' #define PARSER_LIST_END ')' #define PARSER_COMMENT_BEGIN '[' #define PARSER_COMMENT_END ']' #define PARSER_SYMBOLS " =(){}[]" #define PARSER_SKIP_SYMBOLS "[]" /* ==================================================================== An input string is converted into a PData tree struct. The name identifies this entry and it's the token that is searched for when reading this entry. Either 'values' or 'entries' is set. If 'entries' is not NULL the PData is a group and 'entries' contains pointers to other groups or lists. If 'values' is not NULL the PData is a list and 'values' contains a list of value strings associated with 'name'. ==================================================================== */ typedef struct { char *name; List *values; List *entries; } PData; /* ==================================================================== This function splits a string into tokens using the characters found in symbols as breakpoints. If the first symbol is ' ' all whitespaces are used as breakpoints though NOT added as a token (thus removed from string). ==================================================================== */ List* parser_split_string( char *string, char *symbols ); /* ==================================================================== This is the light version of parser_split_string which checks for just one character and does not add this glue characters to the list. It's about 2% faster. Wow. ==================================================================== */ List *parser_explode_string( char *string, char c ); /* ==================================================================== This function reads in a whole file and converts it into a PData tree struct. If an error occurs NULL is returned and parser_error is set. 'tree_name' is the name of the PData tree. ==================================================================== */ PData* parser_read_file( char *tree_name, char *fname ); /* ==================================================================== This function frees a PData tree struct. ==================================================================== */ void parser_free( PData **pdata ); /* ==================================================================== Functions to access a PData tree. 'name' is the pass within tree 'pd' where subtrees are separated by '/' (e.g.: name = 'config/graphics/animations') parser_get_pdata : get pdata entry associated with 'name' parser_get_entries : get list of subtrees (PData structs) in 'name' parser_get_values : get value list of 'name' parser_get_value : get a single value from value list of 'name' parser_get_int : get first value of 'name' converted to integer parser_get_double : get first value of 'name' converted to double parser_get_string : get first value of 'name' _duplicated_ If an error occurs result is set NULL, False is returned and parse_error is set. ==================================================================== */ int parser_get_pdata ( PData *pd, char *name, PData **result ); int parser_get_entries( PData *pd, char *name, List **result ); int parser_get_values ( PData *pd, char *name, List **result ); int parser_get_value ( PData *pd, char *name, char **result, int index ); int parser_get_int ( PData *pd, char *name, int *result ); int parser_get_double ( PData *pd, char *name, double *result ); int parser_get_string ( PData *pd, char *name, char **result ); /* ==================================================================== If an error occurred you can query the message with this function. ==================================================================== */ char* parser_get_error( void ); #endif lbreakout2-2.6.5/common/parser.c0000664000175000017500000005633512140767177013501 00000000000000/*************************************************************************** parser.c - description ------------------- begin : Sat Mar 9 2002 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include #include "parser.h" #include "tools.h" /* ==================================================================== Error string. ==================================================================== */ static char parser_sub_error[1024]; static char parser_error[1024]; /* ==================================================================== This buffer is used to fully load resource files when the compact format is used. ==================================================================== */ enum { CBUFFER_SIZE = 131072 }; /* 128 KB */ static char cbuffer[CBUFFER_SIZE]; static char* cbuffer_pos = 0; /* position in cbuffer */ /* ==================================================================== As we need constant strings sometimes we have to define a maximum length for tokens. ==================================================================== */ enum { PARSER_MAX_TOKEN_LENGTH = 1024 }; /* ==================================================================== Locals ==================================================================== */ /* ==================================================================== Macro to shorten the fread call for a single character. ==================================================================== */ #define FILE_READCHAR( file, c ) fread( &c, sizeof( char ), 1, file ) /* ==================================================================== Find next newline in cbuffer and replace it with \0 and return the pointer to the current line. ==================================================================== */ static char* parser_get_next_line() { char *line = cbuffer_pos; char *newpos; if ( cbuffer_pos[0] == 0 ) return 0; /* completely read. no more lines. */ if ( ( newpos = strchr( cbuffer_pos, 10 ) ) == 0 ) cbuffer_pos += strlen( cbuffer_pos ); /* last line */ else { cbuffer_pos = newpos + 1; /* set pointer to next line */ newpos[0] = 0; /* terminate current line */ } return line; } /* ==================================================================== Set parse error string: "file:line: error" ==================================================================== */ static void parser_set_parse_error( char *fname, FILE *file, char *error ) { int end, pos; int line_count = 1; char c; end = ftell( file ); pos = 0; fseek( file, 0, SEEK_SET ); while ( pos < end ) { FILE_READCHAR( file, c ); pos++; if ( c == 10 ) line_count++; } sprintf( parser_error, "%s: %i: %s", fname, line_count, error ); } /* ==================================================================== Check if the given character occurs in the symbol list. If the first symbol is ' ' it is used as wildcard for all white-spaces. ==================================================================== */ static int is_symbol( int c, char *symbols ) { int i = 0; if ( symbols[0] == ' ' && c <= 32 ) return 1; while ( symbols[i] != 0 ) if ( c == symbols[i++] ) return 1; return 0; } /* ==================================================================== Move file position forward until reading in the given character. If stop is ' ' whitespaces will be ignored. ==================================================================== */ static void file_skip( FILE *file, char stop ) { char c = 0; FILE_READCHAR( file, c ); while ( ( ( stop == ' ' && c <= 32 ) || ( stop != ' ' && c != stop ) ) && !feof( file ) ) FILE_READCHAR( file, c ); if ( !feof( file ) ) fseek( file, -1, SEEK_CUR ); } /* ==================================================================== Read next token from current file position where symbols is a list of characters used to break up the tokens. The symbols themself are returned as tokens. If ' ' occurs in the symbol list it will be ignored and whitespaces are removed automatically. The token does not exceed PARSER_MAX_TOKEN_LENGTH. Enclosing ".." are kept at the token. Use file_compare_token() to test it's contents. Returns False on EoF. ==================================================================== */ static int file_read_token_intern( FILE *file, char *symbols, char *token ) { int pos = 0; char c; token[0] = 0; file_skip( file, ' ' ); FILE_READCHAR( file, c ); if ( feof( file ) ) { sprintf( parser_sub_error, "unexpected end of file" ); return 0; } /* string? */ if ( c == '"' ) { token[pos++] = '"'; FILE_READCHAR( file, c ); while ( ( !feof( file ) && c != '"' ) ) { token[pos++] = c; if ( pos == PARSER_MAX_TOKEN_LENGTH - 2 ) { token[pos++] = '"'; token[pos] = 0; sprintf( parser_sub_error, "token exceeds limit" ); return 0; } FILE_READCHAR( file, c ); } token[pos++] = '"'; token[pos] = 0; if ( feof( file ) ) { sprintf( parser_sub_error, "unexpected end of file" ); token[0] = 0; return 0; } return 1; } /* symbol? */ if ( is_symbol( c, symbols ) ) { token[0] = c; token[1] = 0; return 1; } /* other token */ while ( !is_symbol( c, symbols ) && !feof( file ) ) { token[pos++] = c; if ( pos == PARSER_MAX_TOKEN_LENGTH - 1 ) { token[pos] = 0; sprintf( parser_sub_error, "token exceeds limit" ); return 0; } FILE_READCHAR( file, c ); } token[pos] = 0; if ( feof( file ) ) return 1; fseek( file, -1, SEEK_CUR ); return 1; } /* ==================================================================== Skip all tokens until one begins with character 'stop'. This token is also ignored. ==================================================================== */ static void file_skip_section( FILE *file, char stop ) { char token[PARSER_MAX_TOKEN_LENGTH]; do { file_read_token_intern( file, PARSER_SYMBOLS, token ); } while ( !feof( file ) && token[0] != stop ); } /* ==================================================================== Read next token and skip comments enclosed in tokens skip[0], skip[1] (if skip is not NULL). Return 0 if EoF. ==================================================================== */ static int file_read_token( FILE *file, char *symbols, char *skip, char *token ) { while ( 1 ) { if ( !file_read_token_intern( file, symbols, token ) ) return 0; if ( skip ) { if ( token[0] == skip[0] ) file_skip_section( file, skip[1] ); else break; } else break; } return 1; } /* ==================================================================== Remove quotes if any and return result as newly allocated string. ==================================================================== */ static char* parser_remove_quotes( char *string ) { char *new; if ( string[0] != '"' ) return strdup( string ); new = calloc( strlen( string ) - 1, sizeof( char ) ); strncpy( new, string + 1, strlen( string ) - 2 ); new[strlen( string ) - 2] = 0; return new; } /* ==================================================================== Proceed in the given string until it ends or non-whitespace occurs and return the new position. ==================================================================== */ static char* string_ignore_whitespace( char *string ) { int i = 0; while ( string[i] != 0 && string[i] <= 32 ) i++; return string + i; } /* ==================================================================== This function searches file from the current position for the next pdata entry. ==================================================================== */ static PData* parser_parse_file( FILE *file ) { char token[PARSER_MAX_TOKEN_LENGTH]; PData *pd = 0, *sub = 0; /* get name */ if ( !file_read_token( file, PARSER_SYMBOLS, PARSER_SKIP_SYMBOLS, token ) ) return 0; if ( is_symbol( token[0], PARSER_SYMBOLS ) ) { sprintf( parser_sub_error, "parse error before '%s'", token ); return 0; } pd = calloc( 1, sizeof( PData ) ); pd->name = parser_remove_quotes( token ); /* check type */ if ( !file_read_token( file, PARSER_SYMBOLS, PARSER_SKIP_SYMBOLS, token ) ) goto failure; switch ( token[0] ) { case PARSER_SET: /* assign single value or list */ pd->values = list_create( LIST_AUTO_DELETE, LIST_NO_CALLBACK ); if ( !file_read_token( file, PARSER_SYMBOLS, PARSER_SKIP_SYMBOLS, token ) ) goto failure; if ( token[0] != PARSER_LIST_BEGIN ) { if ( is_symbol( token[0], PARSER_SYMBOLS ) ) { sprintf( parser_sub_error, "parse error before '%s'", token ); goto failure; } else list_add( pd->values, parser_remove_quotes( token ) ); } else { if ( !file_read_token( file, PARSER_SYMBOLS, PARSER_SKIP_SYMBOLS, token ) ) goto failure; while ( token[0] != PARSER_LIST_END ) { if ( is_symbol( token[0], PARSER_SYMBOLS ) ) { sprintf( parser_sub_error, "parse error before '%s'", token ); goto failure; } else list_add( pd->values, parser_remove_quotes( token ) ); if ( !file_read_token( file, PARSER_SYMBOLS, PARSER_SKIP_SYMBOLS, token ) ) goto failure; } } break; case PARSER_GROUP_BEGIN: /* check all entries until PARSER_GROUP_END */ pd->entries = list_create( LIST_NO_AUTO_DELETE, LIST_NO_CALLBACK ); while ( 1 ) { if ( !file_read_token( file, PARSER_SYMBOLS, PARSER_SKIP_SYMBOLS, token ) ) goto failure; if ( token[0] == PARSER_GROUP_END ) break; fseek( file, -strlen( token ), SEEK_CUR ); sub = parser_parse_file( file ); if ( sub ) list_add( pd->entries, sub ); else goto failure; } break; default: sprintf( parser_sub_error, "parse error before '%s'", token ); goto failure; } return pd; failure: parser_free( &pd ); return 0; } /* ==================================================================== Publics ==================================================================== */ /* ==================================================================== This function splits a string into tokens using the characters found in symbols as breakpoints. If the first symbol is ' ' all whitespaces are used as breakpoints though NOT added as a token (thus removed from string). ==================================================================== */ List* parser_split_string( char *string, char *symbols ) { int pos; char *token = 0; List *list = list_create( LIST_AUTO_DELETE, LIST_NO_CALLBACK ); while ( string[0] != 0 ) { if ( symbols[0] == ' ' ) string = string_ignore_whitespace( string ); if ( string[0] == 0 ) break; pos = 1; /* 'read in' first character */ while ( string[pos - 1] != 0 && !is_symbol( string[pos - 1], symbols ) && string[pos - 1] != '"' ) pos++; if ( pos > 1 ) pos--; else if ( string[pos - 1] == '"' ) { /* read a string */ string = string + 1; pos = 0; while ( string[pos] != 0 && string[pos] != '"' ) pos++; token = calloc( pos + 1, sizeof( char ) ); strncpy( token, string, pos ); token[pos] = 0; list_add( list, token ); string = string + pos + (string[pos] != 0); continue; } token = calloc( pos + 1, sizeof( char ) ); strncpy( token, string, pos); token[pos] = 0; list_add( list, token ); string = string + pos; } return list; } /* ==================================================================== This is the light version of parser_split_string which checks for just one character and does not add this glue characters to the list. It's about 2% faster. Wow. ==================================================================== */ List *parser_explode_string( char *string, char c ) { List *list = list_create( LIST_AUTO_DELETE, LIST_NO_CALLBACK ); char *next_slash = 0; char buffer[64]; while ( string[0] != 0 && ( next_slash = strchr( string, c ) ) != 0 ) { if ( next_slash != string ) { strcpy_lt( buffer, string, (next_slash-string>63)?63:(next_slash-string) ); list_add( list, strdup( buffer ) ); } string += next_slash - string + 1; } if ( string[0] != 0 ) list_add( list, strdup( string ) ); return list; } /* ==================================================================== This function reads in a whole file and converts it into a PData tree struct. If an error occurs NULL is returned and parser_error is set. ==================================================================== */ static int parser_read_file_full( FILE *file, PData *top ) { PData *sub = 0; char token[1024]; /* parse file */ while ( !feof( file ) ) { if ( ( sub = parser_parse_file( file ) ) != 0 ) list_add( top->entries, sub ); else return 0; /* skip comments and whitespaces */ if ( !file_read_token( file, PARSER_SYMBOLS, PARSER_SKIP_SYMBOLS, token ) ) { if ( token[0] != 0 ) return 0; break; } else fseek( file, -strlen( token ), SEEK_CUR ); } return 1; } static int parser_read_file_compact( PData *section ) { /* section is the parent pdata that needs some entries */ PData *pd = 0; char *line, *cur; while ( ( line = parser_get_next_line() ) ) { switch ( line[0] ) { case '>': /* this section is finished */ return 1; case '<': /* add a whole subsection */ pd = calloc( 1, sizeof( PData ) ); pd->name = strdup( line + 1 ); pd->entries = list_create( LIST_NO_AUTO_DELETE, LIST_NO_CALLBACK ); parser_read_file_compact( pd ); /* add to section */ list_add( section->entries, pd ); break; default: /* read values as subsection */ pd = calloc( 1, sizeof( PData ) ); /* check name */ if ( ( cur = strchr( line, '' ) ) == 0 ) { sprintf( parser_sub_error, "parse error: use '' for assignment or '<' for section" ); return 0; } cur[0] = 0; cur++; pd->name = strdup( line ); /* get values */ pd->values = parser_explode_string( cur, '' ); /* add to section */ list_add( section->entries, pd ); break; } } return 1; } PData* parser_read_file( char *tree_name, char *fname ) { int size; char magic = 0; FILE *file = 0; PData *top = 0; /* open file */ if ( ( file = fopen( fname, "r" ) ) == 0 ) { sprintf( parser_error, "%s: file not found", fname ); return 0; } /* create top level pdata */ top = calloc( 1, sizeof( PData ) ); top->name = strdup( tree_name ); top->entries = list_create( LIST_NO_AUTO_DELETE, LIST_NO_CALLBACK ); /* parse */ FILE_READCHAR( file, magic ); if ( magic == '@' ) { /* get the whole contents -- 1 and CBUFFER_SIZE are switched */ fseek( file, 0, SEEK_END ); size = ftell( file ) - 2; if ( size >= CBUFFER_SIZE ) { fprintf( stderr, "%s: file's too big to fit the compact buffer (128KB)\n", fname ); size = CBUFFER_SIZE - 1; } fseek( file, 2, SEEK_SET ); fread( cbuffer, 1, size, file ); cbuffer[size] = 0; /* set indicator to beginning of text */ cbuffer_pos = cbuffer; /* parse cbuffer */ if ( !parser_read_file_compact( top ) ) { parser_set_parse_error( fname, file, parser_sub_error ); goto failure; } } else { fseek( file, 0, SEEK_SET ); if ( !parser_read_file_full( file, top ) ) { parser_set_parse_error( fname, file, parser_sub_error ); goto failure; } } /* finalize */ fclose( file ); return top; failure: fclose( file ); parser_free( &top ); return 0; } /* ==================================================================== This function frees a PData tree struct. ==================================================================== */ void parser_free( PData **pdata ) { PData *entry = 0; if ( (*pdata) == 0 ) return; if ( (*pdata)->name ) free( (*pdata)->name ); if ( (*pdata)->values ) list_delete( (*pdata)->values ); if ( (*pdata)->entries ) { list_reset( (*pdata)->entries ); while ( ( entry = list_next( (*pdata)->entries ) ) ) parser_free( &entry ); list_delete( (*pdata)->entries ); } free( *pdata ); *pdata = 0; } /* ==================================================================== Functions to access a PData tree. 'name' is the pass within tree 'pd' where subtrees are separated by '/' (e.g.: name = 'config/graphics/animations') parser_get_pdata : get pdata entry associated with 'name' parser_get_entries : get list of subtrees (PData structs) in 'name' parser_get_values : get value list of 'name' parser_get_value : get a single value from value list of 'name' parser_get_int : get first value of 'name' converted to integer parser_get_double : get first value of 'name' converted to double parser_get_string : get first value of 'name' _duplicated_ If an error occurs result is set NULL, False is returned and parse_error is set. ==================================================================== */ int parser_get_pdata ( PData *pd, char *name, PData **result ) { int i, found; PData *pd_next = pd; PData *entry = 0; char *sub = 0; List *path = parser_explode_string( name, '/' ); for ( i = 0, list_reset( path ); i < path->count; i++ ) { sub = list_next( path ); if ( !pd_next->entries ) { sprintf( parser_sub_error, "%s: no subtrees", pd_next->name ); goto failure; } list_reset( pd_next->entries ); found = 0; while ( ( entry = list_next( pd_next->entries ) ) ) if ( strlen( entry->name ) == strlen( sub ) && !strncmp( entry->name, sub, strlen( sub ) ) ) { pd_next = entry; found = 1; break; } if ( !found ) { sprintf( parser_sub_error, "%s: subtree '%s' not found", pd_next->name, sub ); goto failure; } } list_delete( path ); *result = pd_next; return 1; failure: sprintf( parser_error, "parser_get_pdata: %s/%s: %s", pd->name, name, parser_sub_error ); list_delete( path ); *result = 0; return 0; } int parser_get_entries( PData *pd, char *name, List **result ) { PData *entry; *result = 0; if ( !parser_get_pdata( pd, name, &entry ) ) { sprintf( parser_sub_error, "parser_get_entries:\n %s", parser_error ); strcpy( parser_error, parser_sub_error ); return 0; } if ( !entry->entries || entry->entries->count == 0 ) { sprintf( parser_error, "parser_get_entries: %s/%s: no subtrees", pd->name, name ); return 0; } *result = entry->entries; return 1; } int parser_get_values ( PData *pd, char *name, List **result ) { PData *entry; *result = 0; if ( !parser_get_pdata( pd, name, &entry ) ) { sprintf( parser_sub_error, "parser_get_values:\n %s", parser_error ); strcpy( parser_error, parser_sub_error ); return 0; } if ( !entry->values || entry->values->count == 0 ) { sprintf( parser_error, "parser_get_values: %s/%s: no values", pd->name, name ); return 0; } *result = entry->values; return 1; } int parser_get_value ( PData *pd, char *name, char **result, int index ) { List *values; if ( !parser_get_values( pd, name, &values ) ) { sprintf( parser_sub_error, "parser_get_value:\n %s", parser_error ); strcpy( parser_error, parser_sub_error ); return 0; } if ( index >= values->count ) { sprintf( parser_error, "parser_get_value: %s/%s: index %i out of range (%i elements)", pd->name, name, index, values->count ); return 0; } *result = list_get( values, index ); return 1; } int parser_get_int ( PData *pd, char *name, int *result ) { char *value; if ( !parser_get_value( pd, name, &value, 0 ) ) { sprintf( parser_sub_error, "parser_get_int:\n %s", parser_error ); strcpy( parser_error, parser_sub_error ); return 0; } *result = atoi( value ); return 1; } int parser_get_double ( PData *pd, char *name, double *result ) { char *value; if ( !parser_get_value( pd, name, &value, 0 ) ) { sprintf( parser_sub_error, "parser_get_double:\n %s", parser_error ); strcpy( parser_error, parser_sub_error ); return 0; } *result = strtod( value, 0 ); return 1; } int parser_get_string ( PData *pd, char *name, char **result ) { char *value; if ( !parser_get_value( pd, name, &value, 0 ) ) { sprintf( parser_sub_error, "parser_get_string:\n %s", parser_error ); strcpy( parser_error, parser_sub_error ); return 0; } *result = strdup( value ); return 1; } /* ==================================================================== If an error occurred you can query the reason with this function. ==================================================================== */ char* parser_get_error( void ) { return parser_error; } lbreakout2-2.6.5/common/tools.c0000664000175000017500000002306612140767177013340 00000000000000/*************************************************************************** tools.c - description ------------------- begin : Fri Jan 19 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include #include #include #include "tools.h" /* compares to strings and returns true if their first strlen(str1) chars are equal */ int strequal( const char *str1, const char *str2 ) { if ( strlen( str1 ) != strlen( str2 ) ) return 0; return ( !strncmp( str1, str2, strlen( str1 ) ) ); } /* set delay to ms milliseconds */ void delay_set( Delay *delay, int ms ) { delay->limit = ms; delay->cur = 0; } /* reset delay ( cur = 0 )*/ void delay_reset( Delay *delay ) { delay->cur = 0; } /* check if times out and reset */ int delay_timed_out( Delay *delay, int ms ) { delay->cur += ms; if ( delay->cur >= delay->limit ) { delay->cur = 0; return 1; } return 0; } void goto_tile( int *x, int *y, int d ) { /* 0 -up, clockwise, 5 - left up */ switch ( d ) { case 1: if ( !( (*x) & 1 ) ) (*y)--; (*x)++; break; case 2: if ( (*x) & 1 ) (*y)++; (*x)++; break; case 4: if ( (*x) & 1 ) (*y)++; (*x)--; break; case 5: if ( !( (*x) & 1 ) ) (*y)--; (*x)--; break; } } /* return distance between to map positions */ int get_dist( int x1, int y1, int x2, int y2 ) { int range = 0; while ( x1 != x2 || y1 != y2 ) { /* approach to x2,y2 */ /* 0 -up, clockwise, 5 - left up */ if ( y1 < y2 ) { if ( x1 < x2 ) goto_tile( &x1, &y1, 2 ); else if ( x1 > x2 ) goto_tile( &x1, &y1, 4 ); else y1++; } else if ( y1 > y2 ) { if ( x1 < x2 ) goto_tile( &x1, &y1, 1 ); else if ( x1 > x2 ) goto_tile( &x1, &y1, 5 ); else y1--; } else { if ( x1 < x2 ) x1++; else if ( x1 > x2 ) x1--; } range++; } return range; } /* init random seed by using ftime */ void set_random_seed() { srand( (unsigned int)time( 0 ) ); } /* get coordinates from string */ void get_coord( char *str, int *x, int *y ) { int i; char *cur_arg = 0; *x = *y = 0; /* get position of comma */ for ( i = 0; i < strlen( str ); i++ ) if ( str[i] == ',' ) break; if ( i == strlen( str ) ) { fprintf( stderr, "get_coord: no comma found in pair of coordinates '%s'\n", str ); return; /* no comma found */ } /* y */ cur_arg = str + i + 1; if ( cur_arg[0] == 0 ) fprintf( stderr, "get_coord: warning: y-coordinate is empty (maybe you left a space between x and comma?)\n" ); *y = atoi( cur_arg ); /* x */ cur_arg = strdup( str ); cur_arg[i] = 0; *x = atoi( cur_arg ); FREE( cur_arg ); } /* replace new_lines with spaces in text */ void repl_new_lines( char *text ) { int i; for ( i = 0; i < strlen( text ); i++ ) if ( text[i] < 32 ) text[i] = 32; } // convert a str into text ( for listbox ) // // char width is the width of a line in characters // Text* create_text( char *orig_str, int char_width ) { int i, j; char line[256]; /* a line should not exceed this length */ int pos; int last_space; int new_line; Text *text = 0; char *str = 0; text = calloc ( 1, sizeof( Text ) ); // maybe orig_str is a constant expression; duplicate for safety // str = strdup( orig_str ); // replace original new_lines with spaces // repl_new_lines( str ); /* change some spaces to new_lines, so that the new text fits the wanted line_length */ /* NOTE: '#' means new_line ! */ // if character width is 0 it's just a single line // if ( char_width > 0 ) { pos = 0; while ( pos < strlen( str ) ) { last_space = 0; new_line = 0; i = 0; while ( !new_line && i < char_width && i + pos < strlen( str ) ) { switch ( str[pos + i] ) { case '#': new_line = 1; case 32: last_space = i; break; } i++; } if ( i + pos >= strlen( str ) ) break; if ( last_space == 0 ) { /* uhh... much to long, we'll have to cut a word into pieces ... */ last_space = char_width / 2; } str[pos + last_space] = 10; pos += last_space; } } /* count lines */ if ( char_width > 0 ) { for ( i = 0; i < strlen( str ); i++ ) if ( str[i] == 10 ) text->count++; /* maybe one unfinished line */ if ( str[strlen( str ) - 1] != 10 ) text->count++; } else text->count = 1; /* get mem */ text->lines = calloc( text->count, sizeof( char* ) ); pos = 0; /* get all lines */ for ( j = 0; j < text->count; j++ ) { i = 0; while ( pos + i < strlen( str ) && str[pos + i] != 10 ) { line[i] = str[i + pos]; i++; } pos += i; pos++; line[i] = 0; text->lines[j] = strdup( line ); } if ( text->count == 0 ) fprintf( stderr, "conv_to_text: warning: line_count is 0\n" ); free( str ); return text; } // delete text // void delete_text( Text *text ) { int i; if ( text == 0 ) return; /* if ( lines[1][1] == 'e' && lines[1][0] == '<' ) printf( "hallo\n" ); printf( "--- deleting:\n" ); for ( i = 0; i < line_count; i++ ) { printf( lines[i] ); printf( "\n" ); }*/ if ( text->lines ) { for ( i = 0; i < text->count; i++ ) if ( text->lines[i] ) free( text->lines[i] ); free( text->lines ); } free( text ); } /* ==================================================================== Get type and prefix from string: type::prefix Set both pointers 0 if failure. ==================================================================== */ void get_type_and_prefix( char *arg, char **type, char **prefix ) { char *first, *second; *type = *prefix = 0; first = strtok( arg, ":" ); second = strtok( 0, ":" ); if ( first == 0 || second == 0 ) return; *type = strdup( first ); *prefix = strdup( second ); } /* ==================================================================== Replace any existence of character old into new. ==================================================================== */ void strrepl( char **str, char c_old, char c_new ) { char *pos; while ( ( pos = strchr( *str, c_old ) ) != 0 ) pos[0] = c_new; } /* ==================================================================== Copy source to dest and at maximum limit chars. Terminate with 0. ==================================================================== */ void strcpy_lt( char *dest, char *src, int limit ) { int len = strlen( src ); if ( len > limit ) { strncpy( dest, src, limit ); dest[limit] = 0; } else strcpy( dest, src ); } /* ==================================================================== Parse a version string and return the major version and the current update. ==================================================================== */ void parse_version( char *string, int *version, int *update ) { char *ptr = strchr( string, '.' ); if ( ptr ) ptr[0] = 0; *version = atoi( string ); if ( ptr ) { ptr++; *update = atoi( ptr ); if ( *update < 10 && ptr[0] != '0' ) *update *= 10; /* allow stuff like 1.01 */ ptr--; ptr[0] = '.'; } else *update = 0; } /* allocate memory or exit with error if out of it */ void *salloc( int num, int size ) { void *ptr = calloc( num, size ); if ( ptr == 0 ) { printf( "out of memory\n" ); exit(1); } return ptr; } /* print contents of pointer raw */ void print_raw( int len, char *buf ) { int i; for ( i = 0; i < len; i++ ) printf( "%02x ", (unsigned char) buf[i] ); printf( "\n" ); } /* check whether a string does only contain letters, digits or * underscores */ int is_alphanum( char *str ) { int i; for ( i = 0; i< strlen(str); i++ ) if ( !((str[i]>=48&&str[i]<=57)||(str[i]>=65&&str[i]<=90)||(str[i]>=97&&str[i]<=122)||str[i]=='_') ) return 0; return 1; } lbreakout2-2.6.5/common/list.c0000664000175000017500000002701112140767177013145 00000000000000/*************************************************************************** list.c - description ------------------- begin : Sun Sep 2 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include "list.h" /* ==================================================================== Create a new list auto_delete: Free memory of data pointer when deleting entry callback: Use this callback to free memory of data including the data pointer itself. Return Value: List pointer ==================================================================== */ List *list_create( int auto_delete, void (*callback)(void*) ) { List *list = calloc( 1, sizeof( List ) ); list->head = calloc( 1, sizeof( ListEntry ) ); list->tail = calloc( 1, sizeof( ListEntry ) ); list->head->next = list->tail; list->head->prev = list->head; list->tail->next = list->tail; list->tail->prev = list->head; list->auto_delete = auto_delete; list->callback = callback; list->cur_entry = list->head; return list; } /* ==================================================================== Delete list and entries. ==================================================================== */ void list_delete( List *list ) { list_clear( list ); free( list->head ); free( list->tail ); free( list ); } /* ==================================================================== Delete all entries but keep the list. Reset current_entry to head pointer. ==================================================================== */ void list_clear( List *list ) { while( !list_empty( list ) ) list_delete_pos( list, 0 ); } /* ==================================================================== Insert new item at position. Return Value: True if successful else False. ==================================================================== */ int list_insert( List *list, void *item, int pos ) { int i; ListEntry *cur = list->head; ListEntry *new_entry = 0; /* check if insertion possible */ if ( pos < 0 || pos > list->count ) return 0; if ( item == 0 ) return 0; /* get to previous entry */ for (i = 0; i < pos; i++) cur = cur->next; /* create and anchor new entry */ new_entry = calloc( 1, sizeof( ListEntry ) ); new_entry->item = item; new_entry->next = cur->next; new_entry->prev = cur; cur->next->prev = new_entry; cur->next = new_entry; list->count++; return 1; } /* ==================================================================== Add new item at the end of the list. ==================================================================== */ int list_add( List *list, void *item ) { ListEntry *new_entry = 0; /* check if insertion possible */ if ( item == 0 ) return 0; /* create and anchor new entry */ new_entry = calloc( 1, sizeof( ListEntry ) ); new_entry->item = item; new_entry->next = list->tail; new_entry->prev = list->tail->prev; list->tail->prev->next = new_entry; list->tail->prev = new_entry; list->count++; return 1; } /* ==================================================================== Delete item at position. If this was the current entry update current_entry to valid previous pointer. Return Value: True if successful else False. ==================================================================== */ int list_delete_pos( List *list, int pos ) { int i; ListEntry *cur = list->head; /* check if deletion possbile */ if ( list_empty( list ) ) return 0; if ( pos < 0 || pos >= list->count ) return 0; /* get to correct entry */ for ( i = 0; i <= pos; i++ ) cur = cur->next; /* modify anchors */ cur->next->prev = cur->prev; cur->prev->next = cur->next; /* decrease counter */ list->count--; /* check current_entry */ if ( list->cur_entry == cur ) list->cur_entry = list->cur_entry->prev; /* free memory */ if ( list->auto_delete ) { if ( list->callback ) (list->callback)( cur->item ); else free( cur->item ); } free( cur ); return 1; } /* ==================================================================== Delete item if in list. If this was the current entry update current_entry to valid previous pointer. Return Value: True if successful else False. ==================================================================== */ int list_delete_item( List *list, void *item ) { return list_delete_pos( list, list_check( list, item ) ); } /* ==================================================================== Delete entry. Return Value: True if successful else False. ==================================================================== */ int list_delete_entry( List *list, ListEntry *entry ) { /* delete possible? */ if ( entry == 0 ) return 0; if ( list->count == 0 ) return 0; if ( entry == list->head || entry == list->tail ) return 0; /* adjust anchor and counter */ entry->prev->next = entry->next; entry->next->prev = entry->prev; list->count--; /* check current_entry */ if ( list->cur_entry == entry ) list->cur_entry = list->cur_entry->prev; /* free memory */ if ( list->auto_delete ) { if ( list->callback ) (list->callback)( entry->item ); else free( entry->item ); } free( entry ); return 1; } /* ==================================================================== Get item from position if in list. Return Value: Item pointer if found else Null pointer. ==================================================================== */ void* list_get( List *list, int pos ) { int i; ListEntry *cur = list->head; if ( pos < 0 || pos >= list->count ) return 0; for ( i = 0; i <= pos; i++ ) cur = cur->next; return cur->item; } /* ==================================================================== Check if item's in list. Return Value: Position of item else -1. ==================================================================== */ int list_check( List *list, void *item ) { int pos = -1; ListEntry *cur = list->head->next; while ( cur != list->tail ) { pos++; if ( cur->item == item ) break; cur = cur->next; } if ( cur == list->tail ) pos = -1; /* item not found */ return pos; } /* ==================================================================== Return first item stored in list and set current_entry to this entry. Return Value: Item pointer if found else Null pointer. ==================================================================== */ void* list_first( List *list ) { list->cur_entry = list->head->next; return list->head->next->item; } /* ==================================================================== Return last item stored in list and set current_entry to this entry. Return Value: Item pointer if found else Null pointer. ==================================================================== */ void* list_last( List *list ) { list->cur_entry = list->tail->prev; return list->tail->prev->item; } /* ==================================================================== Return item in current_entry. Return Value: Item pointer if found else Null pointer. ==================================================================== */ void* list_current( List *list ) { return list->cur_entry->item; } /* ==================================================================== Reset current_entry to head of list. ==================================================================== */ void list_reset( List *list ) { list->cur_entry = list->head; } /* ==================================================================== Get next item and update current_entry (reset if tail reached) Return Value: Item pointer if found else Null (if tail of list). ==================================================================== */ void* list_next( List *list ) { list->cur_entry = list->cur_entry->next; if ( list->cur_entry == list->tail ) list_reset( list ); return list->cur_entry->item; } /* ==================================================================== Get previous item and update current_entry. Return Value: Item pointer if found else Null (if head of list). ==================================================================== */ void* list_prev( List *list ) { list->cur_entry = list->cur_entry->prev; return list->cur_entry->item; } /* ==================================================================== Delete the current entry if not tail or head. This is the entry that contains the last returned item by list_next/prev(). Return Value: True if it was a valid deleteable entry. ==================================================================== */ int list_delete_current( List *list ) { if ( list->cur_entry == 0 || list->cur_entry == list->head || list->cur_entry == list->tail ) return 0; list_delete_entry( list, list->cur_entry ); return 1; } /* ==================================================================== Check if list is empty. Return Value: True if list counter is 0 else False. ==================================================================== */ int list_empty( List *list ) { return list->count == 0; } /* ==================================================================== Return entry containing the passed item. Return Value: True if entry found else False. ==================================================================== */ ListEntry *list_entry( List *list, void *item ) { ListEntry *entry = list->head->next; while ( entry != list->tail ) { if ( entry->item == item ) return entry; entry = entry->next; } return 0; } /* ==================================================================== Transfer an entry from one list to another list by removing from 'source' and adding to 'dest' thus if source does not contain the item this is equvalent to list_add( dest, item ). ==================================================================== */ void list_transfer( List *source, List *dest, void *item ) { int old_auto_flag; /* add to destination */ list_add( dest, item ); /* as the pointer is added to dest without changes only the empty entry must be deleted in source */ old_auto_flag = source->auto_delete; source->auto_delete = LIST_NO_AUTO_DELETE; list_delete_item( source, item ); source->auto_delete = old_auto_flag; } /* ==================================================================== Deqeue the first list entry. (must not use auto_delete therefore) ==================================================================== */ void *list_dequeue( List *list ) { void *item; if ( list->count > 0 ) { item = list->head->next->item; list_delete_pos( list, 0 ); return item; } else return 0; } lbreakout2-2.6.5/common/Makefile.in0000664000175000017500000003375412610471343014073 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = common DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libcommon_a_AR = $(AR) $(ARFLAGS) libcommon_a_LIBADD = am_libcommon_a_OBJECTS = list.$(OBJEXT) net.$(OBJEXT) tools.$(OBJEXT) \ parser.$(OBJEXT) libcommon_a_OBJECTS = $(am_libcommon_a_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) 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 = $(libcommon_a_SOURCES) DIST_SOURCES = $(libcommon_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ @network_flag@ @netdebug_flag@ @sdlnet_flag@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ 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@ POSUB = @POSUB@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ ac_ct_CC = @ac_ct_CC@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ appname = @appname@ arch_flag = @arch_flag@ audio_flag = @audio_flag@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ doc_dir = @doc_dir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ hi_dir = @hi_dir@ hi_inst_flag = @hi_inst_flag@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inst_dir = @inst_dir@ inst_flag = @inst_flag@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ locdir_flag = @locdir_flag@ mandir = @mandir@ mixer_flag = @mixer_flag@ mkdir_p = @mkdir_p@ netdebug_flag = @netdebug_flag@ network_flag = @network_flag@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdlnet_flag = @sdlnet_flag@ sdlnet_lib_flag = @sdlnet_lib_flag@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ warp_flag = @warp_flag@ win32_deps = @win32_deps@ win32_inst_script = @win32_inst_script@ noinst_LIBRARIES = libcommon.a libcommon_a_SOURCES = \ list.c net.c tools.c parser.c EXTRA_DIST = list.h net.h messages.h tools.h parser.h gettext.h 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) --foreign common/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign common/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 clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libcommon.a: $(libcommon_a_OBJECTS) $(libcommon_a_DEPENDENCIES) -rm -f libcommon.a $(libcommon_a_AR) libcommon.a $(libcommon_a_OBJECTS) $(libcommon_a_LIBADD) $(RANLIB) libcommon.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tools.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @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@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @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) '$<'` uninstall-info-am: 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ 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 $(LIBRARIES) installdirs: 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-generic clean-noinstLIBRARIES 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-exec-am: install-info: install-info-am install-man: 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-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man 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-info-am # 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: lbreakout2-2.6.5/common/Makefile.am0000664000175000017500000000033012140767177014055 00000000000000DEFS = @DEFS@ @network_flag@ @netdebug_flag@ @sdlnet_flag@ noinst_LIBRARIES = libcommon.a libcommon_a_SOURCES = \ list.c net.c tools.c parser.c EXTRA_DIST = list.h net.h messages.h tools.h parser.h gettext.h lbreakout2-2.6.5/common/tools.h0000664000175000017500000001032112140767177013333 00000000000000/*************************************************************************** tools.h - description ------------------- begin : Fri Jan 19 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __TOOLS_H #define __TOOLS_H /* this file contains some useful tools */ /* free with a check */ #define FREE( ptr ) { if ( ptr ) free( ptr ); ptr = 0; } /* check if a serious of flags is set in source */ #define CHECK_FLAGS( source, flags ) ( source & (flags) ) /* return random value between ( and including ) upper,lower limit */ #define RANDOM( lower, upper ) ( ( rand() % ( ( upper ) - ( lower ) + 1 ) ) + ( lower ) ) /* compute distance of two vectors */ #define VEC_DIST( vec1, vec2 ) ( sqrt( ( vec1.x - vec2.x ) * ( vec1.x - vec2.x ) + ( vec1.y - vec2.y ) * ( vec1.y - vec2.y ) ) ) /* return true if strings are fully equal */ #define STRCMP( str1, str2 ) ( ( strlen( str1 ) == strlen( str2 ) ) && !strncmp( str1, str2, strlen( str1 ) ) ) /* return minimum */ #define MINIMUM( a, b ) ((ab)?a:b) /* square value */ #define SQUARE( x ) ((x)*(x)) /* compares to strings and returns true if their first strlen(str1) chars are equal */ int strequal( const char *str1, const char *str2 ); /* delete lines */ void delete_lines( char **lines, int line_number ); /* delay struct */ typedef struct { int limit; int cur; } Delay; /* set delay to ms milliseconds */ void delay_set( Delay *delay, int ms ); /* reset delay ( cur = 0 )*/ void delay_reset( Delay *delay ); /* check if time's out ( add ms milliseconds )and reset */ int delay_timed_out( Delay *delay, int ms ); /* return distance betwteen to map positions */ int get_dist( int x1, int y1, int x2, int y2 ); /* init random seed by using ftime */ void set_random_seed(); /* get coordintaes from string */ void get_coord( char *str, int *x, int *y ); // text structure // typedef struct { char **lines; int count; } Text; // convert a str into text ( for listbox ) // Text* create_text( char *str, int char_width ); // delete text // void delete_text( Text *text ); /* ==================================================================== Get type and prefix from string: type::prefix Set both pointers 0 if failure. ==================================================================== */ void get_type_and_prefix( char *arg, char **ext, char **prefix ); /* ==================================================================== Replace any existence of character old into new. ==================================================================== */ void strrepl( char **str, char c_old, char c_new ); /* ==================================================================== Copy source to dest and at maximum limit chars. Terminate with 0. ==================================================================== */ void strcpy_lt( char *dest, char *src, int limit ); /* ==================================================================== Parse a version string and return the major version and the current update. ==================================================================== */ void parse_version( char *string, int *version, int *update ); /* allocate memory or exit with error if out of it */ void *salloc( int num, int size ); /* print contents of pointer raw */ void print_raw( int len, char *buf ); /* check whether a string does only contain letters, digits or * underscores */ int is_alphanum( char *str ); #endif lbreakout2-2.6.5/common/list.h0000664000175000017500000001703112140767177013153 00000000000000/*************************************************************************** list.h - description ------------------- begin : Sun Sep 2 2001 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __LIST_H #define __LIST_H #ifdef __cplusplus extern "C" { #endif /* ==================================================================== Dynamic list handling data as void pointers. ==================================================================== */ typedef struct _ListEntry { struct _ListEntry *next; struct _ListEntry *prev; void *item; } ListEntry; typedef struct { int auto_delete; int count; ListEntry *head; ListEntry *tail; void (*callback)(void*); ListEntry *cur_entry; } List; /* ==================================================================== Create a new list auto_delete: Free memory of data pointer when deleting entry callback: Use this callback to free memory of data including the data pointer itself. Return Value: List pointer ==================================================================== */ enum { LIST_NO_AUTO_DELETE = 0, LIST_AUTO_DELETE }; enum { LIST_NO_CALLBACK = 0 }; List *list_create( int auto_delete, void (*callback)(void*) ); /* ==================================================================== Delete list and entries. ==================================================================== */ void list_delete( List *list ); /* ==================================================================== Delete all entries but keep the list. Reset current_entry to head pointer. ==================================================================== */ void list_clear( List *list ); /* ==================================================================== Insert new item at position. Return Value: True if successful else False. ==================================================================== */ int list_insert( List *list, void *item, int pos ); /* ==================================================================== Add new item at the end of the list. ==================================================================== */ int list_add( List *list, void *item ); /* ==================================================================== Delete item at pos. If this was the current entry update current_entry to valid previous pointer. Return Value: True if successful else False. ==================================================================== */ int list_delete_pos( List *list, int pos ); /* ==================================================================== Delete item if in list. If this was the current entry update current_entry to valid previous pointer. Return Value: True if successful else False. ==================================================================== */ int list_delete_item( List *list, void *item ); /* ==================================================================== Delete entry. ==================================================================== */ int list_delete_entry( List *list, ListEntry *entry ); /* ==================================================================== Get item from position if in list. Return Value: Item pointer if found else Null pointer. ==================================================================== */ void* list_get( List *list, int pos ); /* ==================================================================== Check if item's in list. Return Value: Position of item else -1. ==================================================================== */ int list_check( List *list, void *item ); /* ==================================================================== Return first item stored in list and set current_entry to this entry. Return Value: Item pointer if found else Null pointer. ==================================================================== */ void* list_first( List *list ); /* ==================================================================== Return last item stored in list and set current_entry to this entry. Return Value: Item pointer if found else Null pointer. ==================================================================== */ void* list_last( List *list ); /* ==================================================================== Return item in current_entry. Return Value: Item pointer if found else Null pointer. ==================================================================== */ void* list_current( List *list ); /* ==================================================================== Reset current_entry to head of list. ==================================================================== */ void list_reset( List *list ); /* ==================================================================== Get next item and update current_entry (reset if tail reached). Return Value: Item pointer if found else Null (if tail of list). ==================================================================== */ void* list_next( List *list ); /* ==================================================================== Get previous item and update current_entry. Return Value: Item pointer if found else Null (if head of list). ==================================================================== */ void* list_prev( List *list ); /* ==================================================================== Delete the current entry if not tail or head. This is the entry that contains the last returned item by list_next/prev(). Return Value: True if it was a valid deleteable entry. ==================================================================== */ int list_delete_current( List *list ); /* ==================================================================== Check if list is empty. Return Value: True if list counter is 0 else False. ==================================================================== */ int list_empty( List *list ); /* ==================================================================== Return entry containing the passed item. Return Value: True if entry found else False. ==================================================================== */ ListEntry *list_entry( List *list, void *item ); /* ==================================================================== Transfer an entry from one list to another list by removing from 'source' and adding to 'dest' thus if source does not contain the item this is equvalent to list_add( dest, item ). ==================================================================== */ void list_transfer( List *source, List *dest, void *item ); /* ==================================================================== Deqeue the first list entry. (must not use auto_delete therefore) ==================================================================== */ void *list_dequeue( List *list ); #ifdef __cplusplus }; #endif #endif lbreakout2-2.6.5/common/gettext.h0000664000175000017500000000614112140767177013664 00000000000000/* Convenience header for conditional use of GNU . Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option. */ #if ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include /* We need locale.h too, otherwise setlocale() bails out; cf. #643471 */ #if HAVE_LOCALE_H # include #endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. We don't include as well because people using "gettext.h" will not include , and also including would fail on SunOS 4, whereas is OK. */ #if defined(__sun) # include #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # define gettext(Msgid) ((const char *) (Msgid)) # define dgettext(Domainname, Msgid) ((const char *) (Msgid)) # define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid)) # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) # define textdomain(Domainname) ((const char *) (Domainname)) # define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname)) # define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset)) #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String #endif /* _LIBGETTEXT_H */ lbreakout2-2.6.5/common/net.h0000664000175000017500000000750212140767177012770 00000000000000#ifndef __NET_H #define __NET_H #ifdef NETWORK_ENABLED #ifdef SDL_NET_ENABLED #include #else #include #include #include #include #include #include #include #include #include #include #include #include #include #endif #endif #ifndef bool #define bool int #endif typedef struct { #ifdef NETWORK_ENABLED #ifdef SDL_NET_ENABLED IPaddress SDL_address; #else struct sockaddr sa; unsigned char inet_ip[4]; /* AF_INET dotted ip */ #endif #endif } NetAddr; #define MAX_MSG_SIZE 1016 #define PACKET_HEADER_SIZE 8 typedef struct { NetAddr remote_addr; int fatal_error; /* code red buffer has been flooded */ int idle_since; /* global time stamp when last packet was received (secs) */ int drop_count; /* number of drops */ int dropped_packet_count; /* number of dropped packets */ int good_packet_count; /* number of successfully processed packets */ int incoming_id; /* last incoming remote outgoing_id */ int outgoing_id; /* packet id increased every sent */ int incoming_code_red; /* id of last incoming code red packet. is sent in the header to let remote know if any code red packets were dropped */ int outgoing_code_red; /* last outgoing_id of code_red packet if socket is still waiting for reception acknowledgment. if packet was delivered successfully this is cleared to 0 as well as code_red_buf */ int retransmit_code_red_buf; /* retransmit buffer as net_process_header has received an incoming_code_red less than outgoing_code_red */ char code_red_buf[MAX_MSG_SIZE]; char code_red_buf_cur_size; } NetSocket; extern NetAddr net_local_addr; extern NetAddr net_sender_addr; bool net_init( int port ); void net_shutdown( void ); void net_send_packet( NetAddr *to, int len, void *data ); bool net_recv_packet( void ); /* into net_packet from net_sender_addr */ bool net_build_addr( NetAddr *addr, char *host, int port ); bool net_compare_addr( NetAddr *a1, NetAddr *a2 ); char *net_addr_to_string( NetAddr *addr ); /* not allocated but static */ void msg_begin_writing( char *buf, int *cur_size, int max_size ); void msg_write_int8 ( int c ); void msg_write_int16 ( int s ); void msg_write_int32 ( int i ); void msg_write_string( char *str ); void msg_printf ( char *format, ... ); void msg_write ( int len, void *data ); int msg_get_max_size(); bool msg_write_failed(); /* check wether overflow occured */ bool msg_is_connectionless(); void msg_begin_reading(); /* of net_packet, starts at header */ void msg_begin_connectionless_reading(); /* of net_packet, starts after header as useless data */ int msg_read_int8 ( void ); int msg_read_int16( void ); int msg_read_int32( void ); char* msg_read_string( void ); void msg_read( int len, char *buf ); bool msg_read_failed(); /* check wether data couldn't be extracted */ void socket_init( NetSocket *sock, NetAddr *addr ); void socket_reinit( NetSocket *socket ); /* with same address */ void socket_print_stats( NetSocket *sock ); /* transmit a connectionless message */ void net_transmit_connectionless( NetAddr *addr, int len, char *data ); /* transmit CODE_RED/BLUE message and re-transmit dropped CODE_RED messages. * length 0 messages are not transmitted but re-transmission of CODE_RED messages * is handled in any case */ #define CODE_BLUE 0 #define CODE_RED 1 void socket_transmit( NetSocket *sock, int code, int len, char *data ); /* update socket by net_packet header if net_sender_addr is socket.remote_addr * and set read pointer to packet payload. if false is returned packet is * not parsed. */ bool socket_process_header( NetSocket *sock ); #endif lbreakout2-2.6.5/common/messages.h0000664000175000017500000001307212140767177014010 00000000000000/*************************************************************************** messages.h - description ------------------- begin : Mon Oct 21 12:02:57 CEST 2002 copyright : (C) 2001 by Michael Speck email : kulkanie@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef __MESSAGES_H #define __MESSAGES_H /* protocol of server and client which must be equal */ #define PROTOCOL 4 /* a list of all messages in the game for client or server */ enum { /* 00 */ MSG_HEARTBEAT = 0, /* tells the remote one is still alive. can't be checked in another * way as the connection is not a stream */ /* 01 */ MSG_ERROR, /* string message * * transfer an error message */ /* 02 */ MSG_SERVER_INFO, /* string message * * server message written to chat */ /* 03 */ MSG_CONNECT, /* int8 protocol * string username * string password * * password is currently unused. requests login at server */ /* 04 */ MSG_LOGIN_OKAY, /* int32 user id * string user name * * accept login and tell client its server user id and its name */ /* 05 */ MSG_DISCONNECT, /* tell server user has disconnect or vice versa */ /* 06 */ MSG_PREPARE_FULL_UPDATE, /* clear user list and levelset list */ /* 07 */ MSG_ADD_USER, /* string user name * int32 user id * * add a visible user. */ /* 08 */ MSG_REMOVE_USER, /* int32 user id * * remove user by that id. is used as well to hide a user */ /* 09 */ MSG_UNHIDE, /* send by user to set hide 0 after a game was finished. * prevents buffer overflow when game is done but user is * idle (looking at stats or whatever) */ /* 0a */ MSG_CHANNEL_LIST, /* int8 count * string names * ... * * send the list of all default channels */ /* 0b */ MSG_LEVELSET_LIST, /* int8 count * string names * ... * * send the list of all available levelsets */ /* 0c */ MSG_CHATTER, /* string message * * broadcast this message to all visible users */ /* 0d */ MSG_WHISPER, /* user user id * string message * * whisper this message to the user with the user_id which may be * located in any channel */ /* 0e */ MSG_COMMAND, /* string command * * user has entered a command. the prepended '/' has already been * removed by the client */ /* 0f */ MSG_OPEN_GAME, /* int32 challenged_id * string setname * int8 diff * int8 rounds * int8 frags * int8 balls * * open a game and add the sending user and the user by id 'challenged_id' * to it. */ /* 10 */ MSG_CHALLENGE, /* string username * string setname * ... as above * * inform user that it has been challenged by 'user_id' */ /* 11 */ MSG_ACCEPT_CHALLENGE, /* accept challenge (does not require additional data as it is sent * within the game context) */ /* 12 */ MSG_REJECT_CHALLENGE, /* reject challenge (as above) */ /* 13 */ MSG_CANCEL_GAME, /* challenger cancells challenge which will kill the game and unhide * both users (as above) */ /* 14 */ MSG_BUSY, /* int32 user_id * * user cannot react on a request. the 'user_id' is the * requesting user who gets the busy message */ /* 15 */ MSG_ENTER_CHANNEL, /* string name * * client requests to server to enter this channel */ /* 16 */ MSG_SET_CHANNEL, /* string name * * set the name of the current channel */ /* 17 */ MSG_QUIT_GAME, /* if send by a player the opponent will be informed * and then both are returned to the chat channel */ /* 18 */ MSG_LEVEL_DATA, /* int8 flags * string title * string author * string bricks * string extras * * leveldata 32+252*2 bytes except the first two byte. * first tells wether the client plays at top or bottom * and second tells the comm delay of the server */ /* 19 */ MSG_READY, /* send by client to confirm reception of level or to * show that its ready */ /* 1a */ MSG_PAUSE, /* pause game */ /* 1b */ MSG_UNPAUSE, /* guess what, eh? */ /* 1c */ MSG_PADDLE_STATE, /* int16 state * * position and fire flags of a paddle */ /* 1d */ MSG_BALL_POSITIONS, /* ??? * * attached/moving ball positions */ /* 1e */ MSG_SHOT_POSITIONS, /* ??? * * moving shot positions */ /* 1f */ MSG_SCORES, /* int24 paddle bottom * int24 paddle top * * current scores of paddles */ /* 20 */ MSG_BRICK_HITS, /* ??? * * brick modifications */ /* 21 */ MSG_NEW_EXTRAS, /* ??? * * extras collected by both paddles */ /* 22 */ MSG_ROUND_OVER, /* int8 winner * * id of winner paddle or -1 if draw */ /* 23 */ MSG_LAST_ROUND_OVER, /* int8 winner * * tells client that game is finished */ /* 24 */ MSG_GAME_STATS, /* statistics * * final game stats */ /* 25 */ MSG_ADD_LEVELSET, /* string setname * * add a new levelset to client information */ /* 26 */ MSG_SET_COMM_DELAY /* int16 delay * * delay between communication frames */ }; #endif lbreakout2-2.6.5/configure.in0000664000175000017500000000761312610471341013040 00000000000000dnl Process this file with autoconf to produce a configure script. AC_INIT(Makefile.am) AC_CANONICAL_TARGET AC_USE_SYSTEM_EXTENSIONS AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE(lbreakout2,2.6.5) dnl Checks for programs. AM_GNU_GETTEXT AC_PROG_CC AC_PROG_RANLIB AC_EXEEXT dnl Checks for libraries. AC_CHECK_LIB(m, main,, AC_MSG_ERROR(lib math is needed)) AC_CHECK_LIB(z, main,, AC_MSG_ERROR(libz is needed)) AC_CHECK_LIB(png, main,, AC_MSG_ERROR(libpng is needed)) dnl check SDL version AM_PATH_SDL(1.2.0,, AC_MSG_ERROR(lib SDL is needed)) CFLAGS="-Wall $CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" dnl check warp mouse flag warp_flag="" AC_ARG_ENABLE( warp, [ --enable-warp Enable mouse warp (for BeOS and Mac)], warp_flag="-DMOUSE_WARP") AC_SUBST(warp_flag) dnl check sound audio_flag="-DAUDIO_ENABLED" mixer_flag="-lSDL_mixer" AC_ARG_ENABLE( audio, [ --disable-audio Disables Audio], audio_flag=""; mixer_flag="") dnl check if SDL_mixer's installed dnl if not: clear sound_flag and mixer_flag AC_CHECK_LIB(SDL_mixer, main, AC_MSG_RESULT("SDL_Mixer found"), AC_MSG_RESULT("SDL_Mixer NOT found \(http://libsdl.org\): Audio disabled"); audio_flag=""; mixer_flag="") AC_SUBST(audio_flag) AC_SUBST(mixer_flag) dnl documentation path doc_dir=$docdir dnl check if manually overwriting doc path AC_ARG_WITH( docdir, [ --with-docdir=DPATH Directory where documentation is saved.], doc_dir="$withval",) AC_SUBST(doc_dir) dnl network support network_flag="-DNETWORK_ENABLED" AC_ARG_ENABLE( network, [ --disable-network No network support.], network_flag="" ) AC_SUBST(network_flag) dnl SDL_net usage sdlnet_flag="" sdlnet_lib_flag="" AC_ARG_ENABLE( sdl-net, [ --enable-sdl-net Use SDL_Net for networking.], sdlnet_flag="-DSDL_NET_ENABLED"; sdlnet_lib_flag="-lSDL_net" ) AC_SUBST(sdlnet_flag) AC_SUBST(sdlnet_lib_flag) if test "$sdlnet_flag" == "-DSDL_NET_ENABLED" ; then dnl check if SDL_net is installed AC_CHECK_LIB(SDL_net, main, AC_MSG_RESULT("SDL_net found"), AC_MSG_RESULT("SDL_net NOT found \(http://libsdl.org\): Networking disabled"); sdlnet_flag=""; sdlnet_lib_flag=""; network_flag="") fi dnl network debug netdebug_flag="" AC_ARG_ENABLE( netdebug, [ --enable-netdebug Enable net packet debugging.], netdebug_flag="-DNET_DEBUG_MSG" ) AC_SUBST(netdebug_flag) dnl set localedir localedir=$datadir/locale locdir_flag="-DLOCALEDIR=\\\"$localedir\\\"" dnl installation&highscore path inst_dir="$datadir/lbreakout2" hi_dir=$localstatedir dnl check if installation was disabled AC_ARG_ENABLE( install, [ --disable-install No installation. Played from the source directory.], inst_dir="." hi_dir="." locdir_flag="-DLOCALEDIR=\\\"../dict\\\"" rm -rf dict; mkdir dict for lang in `cat po/LINGUAS`; do mkdir dict/$lang; mkdir dict/$lang/LC_MESSAGES ln -s ../../../po/$lang.gmo dict/$lang/LC_MESSAGES/$PACKAGE.mo done ) inst_flag="-DSRC_DIR=\\\"$inst_dir\\\"" hi_inst_flag="-DHI_DIR=\\\"$hi_dir\\\"" AC_SUBST(inst_flag) AC_SUBST(hi_inst_flag) AC_SUBST(inst_dir) AC_SUBST(hi_dir) AC_SUBST(locdir_flag) case "$host" in *-mingw32) win32="yes" win32_inst_script="`pwd -W`/installer.iss" arch_flag="-march=i586" win32_deps="lbreakout2res.o" ;; *) win32="no" win32_inst_script="" arch_flag="" win32_deps="" ;; esac AC_SUBST(win32_deps) AC_SUBST(arch_flag) if test "x$win32" = xyes; then AC_PROG_AWK dnl AC_PROG_STRIP since SuSE does not know it??? dnl AC_PROG_ISCC AC_SUBST(win32_inst_script) fi appname="LBreakout2" AC_SUBST(appname) AC_OUTPUT( Makefile docs/Makefile common/Makefile game/Makefile gui/Makefile client/Makefile client/gui_theme/Makefile client/gfx/Makefile client/gfx/AbsoluteB/Makefile client/gfx/Oz/Makefile client/gfx/Moiree/Makefile client/gfx/Classic/Makefile client/sounds/Makefile client/levels/Makefile server/Makefile server/levels/Makefile intl/Makefile po/Makefile.in m4/Makefile) lbreakout2-2.6.5/config.h.in0000664000175000017500000002137612610471361012556 00000000000000/* config.h.in. Generated from configure.in by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ARGZ_H /* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FEOF_UNLOCKED /* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FGETS_UNLOCKED /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETC_UNLOCKED /* Define to 1 if you have the declaration of `_snprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNPRINTF /* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNWPRINTF /* Define to 1 if you have the `fwprintf' function. */ #undef HAVE_FWPRINTF /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getegid' function. */ #undef HAVE_GETEGID /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getgid' function. */ #undef HAVE_GETGID /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the `getuid' function. */ #undef HAVE_GETUID /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define if you have the 'intmax_t' type in or . */ #undef HAVE_INTMAX_T /* Define if exists and doesn't clash with . */ #undef HAVE_INTTYPES_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_INTTYPES_H_WITH_UINTMAX /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `png' library (-lpng). */ #undef HAVE_LIBPNG /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define if you have the 'long double' type. */ #undef HAVE_LONG_DOUBLE /* Define if you have the 'long long' type. */ #undef HAVE_LONG_LONG /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file. */ #undef HAVE_NL_TYPES_H /* Define if your printf() function supports format strings with positions. */ #undef HAVE_POSIX_PRINTF /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_STDINT_H_WITH_UINTMAX /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* 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 `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_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 `tsearch' function. */ #undef HAVE_TSEARCH /* Define if you have the 'uintmax_t' type in or . */ #undef HAVE_UINTMAX_T /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the 'unsigned long long' type. */ #undef HAVE_UNSIGNED_LONG_LONG /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the `wcslen' function. */ #undef HAVE_WCSLEN /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if you have the `__argz_count' function. */ #undef HAVE___ARGZ_COUNT /* Define to 1 if you have the `__argz_next' function. */ #undef HAVE___ARGZ_NEXT /* Define to 1 if you have the `__argz_stringify' function. */ #undef HAVE___ARGZ_STRINGIFY /* Define to 1 if you have the `__fsetlocking' function. */ #undef HAVE___FSETLOCKING /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define if integer division by zero raises signal SIGFPE. */ #undef INTDIV0_RAISES_SIGFPE /* 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 home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define if exists and defines unusable PRI* macros. */ #undef PRI_MACROS_BROKEN /* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #undef SIZE_MAX /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `long int' if does not define. */ #undef off_t /* Define as the type of the result of subtracting two pointers, if the system doesn't define it. */ #undef ptrdiff_t /* Define to empty if the C compiler doesn't support this keyword. */ #undef signed /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to unsigned long or unsigned long long if and don't define. */ #undef uintmax_t lbreakout2-2.6.5/config.rpath0000775000175000017500000003521312140767214013041 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2003 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 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 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. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux*) case $CC in icc|ecc) wl='-Wl,' ;; ccc) wl='-Wl,' ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; sco3.2v5*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) wl='-Wl,' ;; sysv4*MP*) ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then hardcode_direct=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10* | hpux11*) if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4.2uw2*) hardcode_direct=yes hardcode_minus_L=no ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) ;; sysv5*) hardcode_libdir_flag_spec= ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. libname_spec='lib$name' case "$host_os" in aix3*) ;; aix4* | aix5*) ;; amigaos*) ;; beos*) ;; bsdi4*) ;; cygwin* | mingw* | pw32*) shrext=.dll ;; darwin* | rhapsody*) shrext=.dylib ;; dgux*) ;; freebsd1*) ;; freebsd*) ;; gnu*) ;; hpux9* | hpux10* | hpux11*) case "$host_cpu" in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac ;; irix5* | irix6* | nonstopux*) case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux*) ;; netbsd*) ;; newsos6) ;; nto-qnx) ;; openbsd*) ;; os2*) libname_spec='$name' shrext=.dll ;; osf3* | osf4* | osf5*) ;; sco3.2v5*) ;; solaris*) ;; sunos4*) ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ;; sysv4*MP*) ;; uts4*) ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <